@asenajs/hono-adapter 4.0.0 → 5.0.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.
@@ -1,9 +1,105 @@
1
+ import { ValidatedInput, readContractBody, readContractForm, } from '@asenajs/asena/adapter';
1
2
  import { deleteCookie, getCookie, getSignedCookie, setCookie, setSignedCookie } from 'hono/cookie'; // add delete cookie
2
3
  import { stream as honoStream, streamSSE as honoStreamSSE, streamText as honoStreamText } from 'hono/streaming';
4
+ import { getQueryParam } from 'hono/utils/url';
5
+ import { bufferToFormData } from 'hono/utils/buffer';
6
+ const VALIDATED_INPUT_KEY = '_asenaValidatedInput';
7
+ const TEXT_PLAIN = 'text/plain; charset=UTF-8';
8
+ const APPLICATION_JSON = 'application/json';
9
+ const hasEncoding = (value) => value.includes('%') || value.includes('+');
10
+ const ENCODED_KEY = /(?:^|&)[^=&]*[%+]/;
11
+ const findQueryParam = (url, key) => {
12
+ if (!key || hasEncoding(key)) {
13
+ return getQueryParam(url, key);
14
+ }
15
+ const start = url.indexOf('?', 8);
16
+ if (start === -1) {
17
+ return undefined;
18
+ }
19
+ const length = key.length;
20
+ let index = url.indexOf(key, start + 1);
21
+ while (index !== -1) {
22
+ const next = url.charCodeAt(index + length);
23
+ if ((index === start + 1 || url.charCodeAt(index - 1) === 38) &&
24
+ (next === 61 || next === 38 || Number.isNaN(next))) {
25
+ // ENCODED_KEY mirrors Hono's _getQueryParam check: an earlier encoded key may decode to this one.
26
+ if (index > start + 1 && hasEncoding(url) && ENCODED_KEY.test(url.slice(start + 1, index - 1))) {
27
+ return getQueryParam(url, key);
28
+ }
29
+ if (next === 61) {
30
+ const valueStart = index + length + 1;
31
+ const end = url.indexOf('&', valueStart);
32
+ const value = end === -1 ? url.slice(valueStart) : url.slice(valueStart, end);
33
+ return hasEncoding(value) ? getQueryParam(url, key) : value;
34
+ }
35
+ return '';
36
+ }
37
+ index = url.indexOf(key, index + 1);
38
+ }
39
+ return hasEncoding(url) ? getQueryParam(url, key) : undefined;
40
+ };
3
41
  export class HonoContextWrapper {
42
+ // Kept on the Hono context so every wrapper of one request - global middleware, route
43
+ // context subclass, error handler - sees the same validated input.
44
+ get validatedInput() {
45
+ return this._context.get(VALIDATED_INPUT_KEY);
46
+ }
47
+ ensureValidatedInput() {
48
+ let validated = this.validatedInput;
49
+ if (!validated) {
50
+ validated = new ValidatedInput();
51
+ this._context.set(VALIDATED_INPUT_KEY, validated);
52
+ }
53
+ return validated;
54
+ }
55
+ get input() {
56
+ return this.validatedInput?.input ?? new ValidatedInput().input;
57
+ }
58
+ /** @internal */
59
+ setValidated(target, value) {
60
+ this.ensureValidatedInput().set(target, value);
61
+ }
62
+ /** @internal */
63
+ completeValidatedInput() {
64
+ this.ensureValidatedInput().complete();
65
+ }
66
+ /** @internal */
67
+ readContractInput(target) {
68
+ switch (target) {
69
+ case 'body':
70
+ return readContractBody(() => this._context.req.arrayBuffer(), this._context.req.header('content-type') ?? '');
71
+ case 'form':
72
+ return readContractForm(() => this.readCachedFormData(), this._context.req.header('content-type') ?? '');
73
+ case 'query':
74
+ return this.getAllQueries();
75
+ case 'headers':
76
+ return (() => {
77
+ const headers = {};
78
+ this._context.req.raw.headers.forEach((value, key) => {
79
+ headers[key.toLowerCase()] = value;
80
+ });
81
+ return headers;
82
+ })();
83
+ case 'params':
84
+ return this._context.req.param();
85
+ }
86
+ }
87
+ // Same approach as Hono's form validator: `req.formData()` over an already-read body rebuilds
88
+ // it without the content type and fails to parse.
89
+ async readCachedFormData() {
90
+ const req = this._context.req;
91
+ const cached = req.bodyCache.formData;
92
+ if (cached) {
93
+ return cached;
94
+ }
95
+ const formData = await bufferToFormData(await req.arrayBuffer(), req.header('content-type') ?? '');
96
+ req.bodyCache.formData = formData;
97
+ return formData;
98
+ }
4
99
  _context;
5
100
  _server;
6
101
  _requestIp;
102
+ _url;
7
103
  constructor(context, server) {
8
104
  this._context = context;
9
105
  this._server = server;
@@ -23,7 +119,30 @@ export class HonoContextWrapper {
23
119
  }
24
120
  }
25
121
  get headers() {
26
- return this._context.req.header();
122
+ const raw = this._context.req.raw.headers.toJSON();
123
+ const keys = Object.keys(raw);
124
+ const count = keys.length;
125
+ for (let i = 1; i < count; i++) {
126
+ const key = keys[i];
127
+ let j = i - 1;
128
+ while (j >= 0 && keys[j] > key) {
129
+ keys[j + 1] = keys[j];
130
+ j--;
131
+ }
132
+ keys[j + 1] = key;
133
+ }
134
+ const headers = Object.create(null);
135
+ for (let i = 0; i < count; i++) {
136
+ const key = keys[i];
137
+ if (key !== 'set-cookie') {
138
+ headers[key] = raw[key];
139
+ }
140
+ }
141
+ const setCookie = raw['set-cookie'];
142
+ if (setCookie !== undefined) {
143
+ headers['set-cookie'] = typeof setCookie === 'string' ? setCookie : setCookie[setCookie.length - 1];
144
+ }
145
+ return headers;
27
146
  }
28
147
  getArrayBuffer() {
29
148
  return this._context.req.arrayBuffer();
@@ -36,13 +155,22 @@ export class HonoContextWrapper {
36
155
  * keys into arrays and applies coercions into `req.valid('form')`, while `parseBody()` without
37
156
  * options is last-value-wins - so the handler read a shape the schema had already replaced.
38
157
  */
39
- async getParseBody() {
40
- // Not `??`: a schema may legitimately parse to `null`, which would fall back to the raw body.
41
- const validated = this._context.req.valid?.('form');
42
- if (validated !== undefined) {
43
- return validated;
158
+ getParseBody() {
159
+ try {
160
+ const req = this._context.req;
161
+ const input = this.validatedInput;
162
+ if (input?.has('form'))
163
+ return Promise.resolve(input.get('form'));
164
+ // Not `??`: a schema may legitimately parse to `null`, which would fall back to the raw body.
165
+ const validated = req.valid?.('form');
166
+ if (validated !== undefined) {
167
+ return Promise.resolve(validated);
168
+ }
169
+ return req.parseBody();
170
+ }
171
+ catch (error) {
172
+ return Promise.reject(error);
44
173
  }
45
- return await this._context.req.parseBody();
46
174
  }
47
175
  getBlob() {
48
176
  return this._context.req.blob();
@@ -65,19 +193,38 @@ export class HonoContextWrapper {
65
193
  *
66
194
  * Routes without a validator are unaffected - `valid('json')` is undefined and we fall through.
67
195
  */
68
- async getBody() {
69
- // Not `??`: a schema may legitimately parse to `null`, which would fall back to the raw body.
70
- const validated = this._context.req.valid?.('json');
71
- if (validated !== undefined) {
72
- return validated;
196
+ getBody() {
197
+ try {
198
+ const req = this._context.req;
199
+ const input = this.validatedInput;
200
+ if (input?.has('body'))
201
+ return Promise.resolve(input.get('body'));
202
+ // Not `??`: a schema may legitimately parse to `null`, which would fall back to the raw body.
203
+ const validated = req.valid?.('json');
204
+ if (validated !== undefined) {
205
+ return Promise.resolve(validated);
206
+ }
207
+ return req.json();
208
+ }
209
+ catch (error) {
210
+ return Promise.reject(error);
73
211
  }
74
- return await this._context.req.json();
75
212
  }
76
- async getQuery(query) {
77
- return this._context.req.query(query);
213
+ getQuery(query) {
214
+ try {
215
+ return Promise.resolve(findQueryParam((this._url ??= this._context.req.url), query));
216
+ }
217
+ catch (error) {
218
+ return Promise.reject(error);
219
+ }
78
220
  }
79
- async getQueryAll(query) {
80
- return this._context.req.queries(query);
221
+ getQueryAll(query) {
222
+ try {
223
+ return Promise.resolve(this._context.req.queries(query));
224
+ }
225
+ catch (error) {
226
+ return Promise.reject(error);
227
+ }
81
228
  }
82
229
  getAllQueries() {
83
230
  const queries = this._context.req.queries();
@@ -88,16 +235,47 @@ export class HonoContextWrapper {
88
235
  return result;
89
236
  }
90
237
  send(data, statusOrOptions) {
91
- const { headers = {}, status = 200 } = typeof statusOrOptions === 'number' ? { status: statusOrOptions } : statusOrOptions || {};
238
+ let status = 200;
239
+ let headers;
240
+ if (typeof statusOrOptions === 'number') {
241
+ status = statusOrOptions;
242
+ }
243
+ else if (statusOrOptions) {
244
+ if (statusOrOptions.status !== undefined) {
245
+ status = statusOrOptions.status;
246
+ }
247
+ headers = statusOrOptions.headers;
248
+ }
249
+ const context = this._context;
92
250
  if (headers !== undefined) {
93
- Object.entries(headers).forEach(([key, value]) => {
94
- this._context.res.headers.append(key, value);
95
- });
251
+ for (const [key, value] of Object.entries(headers)) {
252
+ context.res.headers.append(key, value);
253
+ }
254
+ }
255
+ else if (status === 200) {
256
+ return typeof data === 'string' ? this.sendText(data) : this.sendJson(data);
96
257
  }
97
258
  if (typeof data === 'string') {
98
- return this._context.text(data, status);
259
+ return context.text(data, status);
260
+ }
261
+ return context.json(data, status, headers);
262
+ }
263
+ sendText(data) {
264
+ const response = this._context.text(data);
265
+ if (response.headers.get('content-type') === null) {
266
+ response.headers.set('Content-Type', TEXT_PLAIN);
267
+ return response;
268
+ }
269
+ return response.status === 200 ? response : this._context.text(data, 200);
270
+ }
271
+ sendJson(data) {
272
+ const body = JSON.stringify(data);
273
+ const response = this._context.text(body);
274
+ if (response.headers.get('content-type') === null) {
275
+ response.headers.set('Content-Type', APPLICATION_JSON);
276
+ return response;
99
277
  }
100
- return this._context.json(data, status, headers);
278
+ return this._context.body(body, 200, { 'Content-Type': APPLICATION_JSON });
101
279
  }
102
280
  async getCookie(name, secret) {
103
281
  return secret ? await getSignedCookie(this._context, secret, name) : getCookie(this._context, name);
@@ -249,6 +427,7 @@ export class HonoContextWrapper {
249
427
  }
250
428
  set context(value) {
251
429
  this._context = value;
430
+ this._url = undefined;
252
431
  }
253
432
  }
254
433
  //# sourceMappingURL=HonoContextWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HonoContextWrapper.js","sourceRoot":"","sources":["../../lib/HonoContextWrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HonoContextWrapper.js","sourceRoot":"","sources":["../../lib/HonoContextWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GAIjB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC,CAAC,oBAAoB;AACxH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,SAAS,IAAI,aAAa,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEnD,MAAM,UAAU,GAAG,2BAA2B,CAAC;AAE/C,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C,MAAM,WAAW,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAE3F,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,GAAW,EAAsB,EAAE;IACtE,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAuB,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAElC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAExC,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAE5C,IACE,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACzD,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAClD,CAAC;YACD,kGAAkG;YAClG,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/F,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAuB,CAAC;YACvD,CAAC;YAED,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAE9E,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAwB,CAAC,CAAC,CAAC,KAAK,CAAC;YACtF,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,OAAO,kBAAkB;IAI7B,sFAAsF;IACtF,mEAAmE;IACnE,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAA4B,CAAkC,CAAC;IAC1F,CAAC;IAEO,oBAAoB;QAC1B,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,cAAc,EAAK,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAA4B,EAAE,SAAkB,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI,cAAc,EAAK,CAAC,KAAK,CAAC;IACrE,CAAC;IAED,gBAAgB;IACT,YAAY,CAAC,MAAmB,EAAE,KAAc;QACrD,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB;IACT,sBAAsB;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,gBAAgB;IACT,iBAAiB,CAAC,MAAmB;QAC1C,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YACjH,KAAK,MAAM;gBACT,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3G,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9B,KAAK,SAAS;gBACZ,OAAO,CAAC,GAAG,EAAE;oBACX,MAAM,OAAO,GAA2B,EAAE,CAAC;oBAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;wBACnD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;oBACrC,CAAC,CAAC,CAAC;oBACH,OAAO,OAAO,CAAC;gBACjB,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,kDAAkD;IAC1C,KAAK,CAAC,kBAAkB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;QAEtC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnG,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAElC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,QAAQ,CAAU;IAElB,OAAO,CAAiB;IAExB,UAAU,CAAiB;IAE3B,IAAI,CAAU;IAEtB,YAAmB,OAAgB,EAAE,MAAsB;QACzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC3B,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC3B,CAAC;IAED,IAAW,YAAY;QACrB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAW,OAAO;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAuC,CAAC;QACxF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC,EAAE,CAAC;YACN,CAAC;YAED,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACpB,CAAC;QAED,MAAM,OAAO,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEpB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAW,CAAC;YACpC,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED;;;;;;;OAOG;IACI,YAAY;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;YAElC,IAAI,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC,CAAC;YACvE,8FAA8F;YAC9F,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAe,CAAC,CAAC;YAE/C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAc,CAAC,CAAC;YACzC,CAAC;YAED,OAAO,GAAG,CAAC,SAAS,EAAgB,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAEM,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;;;;OAWG;IACI,OAAO;QACZ,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;YAElC,IAAI,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC,CAAC;YACvE,8FAA8F;YAC9F,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,MAAe,CAAkB,CAAC;YAEhE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,EAAK,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,QAAQ,CAAC,KAAa;QAC3B,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,WAAW,CAAC,KAAa;QAC9B,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEM,aAAa;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAsC,EAAE,CAAC;QAErD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,IAAI,CAAC,IAAkB,EAAE,eAAsC;QACpE,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,IAAI,OAA+B,CAAC;QAEpC,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,GAAG,eAAe,CAAC;QAC3B,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,IAAI,eAAe,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;YAClC,CAAC;YAED,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAA8B,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAA8B,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAEO,QAAQ,CAAC,IAAY;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YAEjD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;IAEO,QAAQ,CAAC,IAAa;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YAClD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YAEvD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC7E,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAA8B;QACjE,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtG,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,OAAoC;QACtF,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI;YAC1C,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,SAAS;SACxB,CAAC;QAEF,OAAO,MAAM;YACX,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC;YACnE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,OAAoC;QAC1E,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,IAAI;YAClC,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,SAAS;SACxB,CAAC;QAEF,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;IAEM,YAAY;QACjB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE3D,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,GAAW,EAAE,KAAa;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,GAAW,EAAE,KAAa;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEM,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAIM,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAIM,QAAQ,CAAC,GAAW,EAAE,KAAU;QACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,iBAAiB,CAAC,KAAU;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAM,CAAC;IAClD,CAAC;IAEM,IAAI,CAAC,IAAY,EAAE,eAAsC;QAC9D,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,GAAG,GAAG,EAAE,GAClC,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;QAE5F,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAA8B,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAA8B,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAEM,MAAM,CACX,EAAgD,EAChD,OAAoE;QAEpE,OAAO,UAAU,CACf,IAAI,CAAC,QAAQ,EACb,KAAK,EAAE,UAAU,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9C,CAAC,EACD,OAAO;YACL,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE;gBACtB,MAAM,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;YACtD,CAAC;YACH,CAAC,CAAC,SAAS,CACd,CAAC;IACJ,CAAC;IAEM,SAAS,CACd,EAAmD,EACnD,OAAuE;QAEvE,OAAO,aAAa,CAClB,IAAI,CAAC,QAAQ,EACb,KAAK,EAAE,UAAU,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QACjD,CAAC,EACD,OAAO;YACL,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE;gBACtB,MAAM,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;YACzD,CAAC;YACH,CAAC,CAAC,SAAS,CACd,CAAC;IACJ,CAAC;IAEM,UAAU,CACf,EAAgD,EAChD,OAAoE;QAEpE,OAAO,cAAc,CACnB,IAAI,CAAC,QAAQ,EACb,KAAK,EAAE,UAAU,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9C,CAAC,EACD,OAAO;YACL,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE;gBACtB,MAAM,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;YACtD,CAAC;YACH,CAAC,CAAC,SAAS,CACd,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,UAAwB;QAC/C,OAAO;YACL,4EAA4E;YAC5E,uFAAuF;YACvF,gFAAgF;YAChF,KAAK,EAAE,KAAK,EAAE,KAA0B,EAAE,EAAE;gBAC1C,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;gBAC/B,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;YAC/B,IAAI,EAAE,CAAC,IAAoB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,OAAO,EAAE,CAAC,QAAoC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/E,IAAI,OAAO;gBACT,OAAO,UAAU,CAAC,OAAO,CAAC;YAC5B,CAAC;YACD,IAAI,MAAM;gBACR,OAAO,UAAU,CAAC,MAAM,CAAC;YAC3B,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,UAA2B;QACrD,OAAO;YACL,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YACpC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAChE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBAED,6EAA6E;gBAC7E,gFAAgF;gBAChF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO;yBAC1B,KAAK,CAAC,YAAY,CAAC;yBACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;yBAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;gBACzC,CAAC;gBAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,UAAU,CAAC,QAAQ,CAAC;wBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,EAAE,EAAE,OAAO,CAAC,EAAE;wBACd,KAAK,EAAE,OAAO,CAAC,KAAK;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,OAAO,CAAC,KAAc;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,CAAC;CACF"}
@@ -1,3 +1,7 @@
1
1
  import type { HonoRequest } from 'hono';
2
2
  import type { AsenaContext } from '@asenajs/asena/adapter';
3
- export type Context<P extends string = any, I = any, R extends Response = Response> = AsenaContext<HonoRequest<P, I>, R>;
3
+ export type Context<P extends string = any, I extends {} | undefined = any, R extends Response = Response> = AsenaContext<HonoRequest<P, I>, R>;
4
+ import { defineContext } from '../defineContext';
5
+ export declare const Context: {
6
+ define: typeof defineContext;
7
+ };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import { defineContext } from '../defineContext';
2
+ export const Context = { define: defineContext };
2
3
  //# sourceMappingURL=Context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../lib/defaults/Context.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../lib/defaults/Context.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { AsenaMiddlewareService } from '@asenajs/asena/middleware';
2
2
  import type { HonoRequest } from 'hono';
3
3
  import type { AsenaContext } from '@asenajs/asena/adapter';
4
- export declare abstract class MiddlewareService<P extends string = any, I = any> extends AsenaMiddlewareService<AsenaContext<HonoRequest<P, I>, Response>> {
4
+ export declare abstract class MiddlewareService<P extends string = any, I extends {} | undefined = any> extends AsenaMiddlewareService<AsenaContext<HonoRequest<P, I>, Response>> {
5
5
  }
@@ -1,4 +1,5 @@
1
1
  import { AsenaMiddlewareService } from '@asenajs/asena/middleware';
2
+ // Hono requires request input to be an object-like value or undefined.
2
3
  export class MiddlewareService extends AsenaMiddlewareService {
3
4
  }
4
5
  //# sourceMappingURL=MiddlewareService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MiddlewareService.js","sourceRoot":"","sources":["../../../lib/defaults/MiddlewareService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAInE,MAAM,OAAgB,iBAAmD,SAAQ,sBAEhF;CAAG"}
1
+ {"version":3,"file":"MiddlewareService.js","sourceRoot":"","sources":["../../../lib/defaults/MiddlewareService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAInE,uEAAuE;AACvE,MAAM,OAAgB,iBAIpB,SAAQ,sBAAiE;CAAG"}
@@ -5,3 +5,4 @@ export * from './ConfigService';
5
5
  export * from './StaticServeService';
6
6
  export * from '../middlewares/CorsMiddleware';
7
7
  export * from '../middlewares/RateLimiterMiddleware';
8
+ export * from '../middlewares/WebSocketOriginMiddleware';
@@ -5,4 +5,5 @@ export * from './ConfigService';
5
5
  export * from './StaticServeService';
6
6
  export * from '../middlewares/CorsMiddleware';
7
7
  export * from '../middlewares/RateLimiterMiddleware';
8
+ export * from '../middlewares/WebSocketOriginMiddleware';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/defaults/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/defaults/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ASENA_CONTEXT_CONTRACT, ASENA_CONTEXT_ADAPTER, type RequestSchemas, type ExactRequestSchemas, type InferInputs } from '@asenajs/asena/adapter';
2
+ import { HonoContextWrapper } from './HonoContextWrapper';
3
+ export interface DefinedContext<S extends RequestSchemas> {
4
+ new (...args: ConstructorParameters<typeof HonoContextWrapper>): HonoContextWrapper<InferInputs<S>>;
5
+ readonly [ASENA_CONTEXT_CONTRACT]: Readonly<S>;
6
+ readonly [ASENA_CONTEXT_ADAPTER]: string;
7
+ }
8
+ export declare function defineContext<const S extends RequestSchemas>(schemas: ExactRequestSchemas<S>): DefinedContext<S>;
@@ -0,0 +1,10 @@
1
+ import { ASENA_CONTEXT_CONTRACT, ASENA_CONTEXT_ADAPTER, defineRequestSchemas, } from '@asenajs/asena/adapter';
2
+ import { HonoContextWrapper } from './HonoContextWrapper';
3
+ export function defineContext(schemas) {
4
+ const contract = defineRequestSchemas(schemas);
5
+ return class RouteContext extends HonoContextWrapper {
6
+ static [ASENA_CONTEXT_CONTRACT] = contract;
7
+ static [ASENA_CONTEXT_ADAPTER] = 'hono-adapter';
8
+ };
9
+ }
10
+ //# sourceMappingURL=defineContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineContext.js","sourceRoot":"","sources":["../../lib/defineContext.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GAIrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,MAAM,UAAU,aAAa,CAAiC,OAA+B;IAC3F,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,MAAM,YAAa,SAAQ,kBAAkC;QAC3D,MAAM,CAAU,CAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC;QACpD,MAAM,CAAU,CAAC,qBAAqB,CAAC,GAAG,cAAc,CAAC;KACjE,CAAC;AACJ,CAAC"}
@@ -90,10 +90,11 @@ export interface RateLimiterOptions {
90
90
  /**
91
91
  * Custom key generator function
92
92
  *
93
- * By default, uses IP address from X-Forwarded-For header or CF-Connecting-IP.
93
+ * By default, identifies the client by the connecting peer, or by the client hop of
94
+ * `X-Forwarded-For` when `trustProxy` trusts the peer.
94
95
  * You can customize this to use user ID, API key, or any other identifier.
95
96
  *
96
- * @default (ctx) => ctx.req.headers.get('x-forwarded-for') || ctx.req.headers.get('cf-connecting-ip') || 'unknown'
97
+ * @default (ctx) => ctx.getRequestIp() ?? 'unknown'
97
98
  *
98
99
  * @example
99
100
  * ```typescript
@@ -105,6 +106,38 @@ export interface RateLimiterOptions {
105
106
  * ```
106
107
  */
107
108
  keyGenerator?: (context: Context) => string;
109
+ /**
110
+ * Which connecting peers are reverse proxies whose `X-Forwarded-For` may be believed.
111
+ *
112
+ * - `false` (default): the connecting peer (`getRequestIp()`) is the client; the header is ignored.
113
+ * - `true`: one proxy layer in front of the server. The header is read and its rightmost entry - the
114
+ * one the proxy appended - is the client. Also the right setting when the server listens on a unix
115
+ * socket (no peer address to check).
116
+ * - `string[]`: exact addresses of the trusted proxies. An IPv4 address matches whether it is written
117
+ * plain (`'10.0.0.1'`) or IPv4-mapped (`'::ffff:10.0.0.1'`, how Bun reports it on a dual-stack
118
+ * listener), in the list, the peer and the forwarded hops alike. Entries are walked from the right;
119
+ * the first one not in the list is the client.
120
+ * - `(address) => boolean`: same walk with a predicate (CIDR checks live here).
121
+ *
122
+ * A hop the client wrote itself (`X-Forwarded-For: <forged>, <real>`) is never selected: selection
123
+ * starts from the right and stops at the first untrusted address.
124
+ *
125
+ * Both misconfigurations below fail closed - every client lands in one bucket:
126
+ * - `true` behind two or more proxy layers keys on the outer proxy (the rightmost hop); list every
127
+ * proxy, or use a predicate, instead.
128
+ * - A trusted peer that sends no usable `X-Forwarded-For` keys on the peer itself; logged once.
129
+ *
130
+ * @default false
131
+ */
132
+ trustProxy?: boolean | string[] | ((address: string) => boolean);
133
+ /**
134
+ * Upper bound on distinct client buckets held in memory. When a new client arrives at the cap, the
135
+ * least recently seen bucket is evicted - that client starts over with a full bucket.
136
+ * Must be a positive integer; the constructor throws otherwise.
137
+ *
138
+ * @default 10000
139
+ */
140
+ maxBuckets?: number;
108
141
  /**
109
142
  * Custom message for rate limit exceeded response
110
143
  *
@@ -231,6 +264,14 @@ export declare class RateLimiterMiddleware extends MiddlewareService {
231
264
  * Client key generator function
232
265
  */
233
266
  private readonly keyGenerator;
267
+ /**
268
+ * Trusted reverse proxies whose `X-Forwarded-For` may be believed
269
+ */
270
+ private readonly trustProxy;
271
+ /**
272
+ * Upper bound on distinct client buckets held in memory
273
+ */
274
+ private readonly maxBuckets;
234
275
  /**
235
276
  * Rate limit exceeded message
236
277
  */
@@ -255,6 +296,7 @@ export declare class RateLimiterMiddleware extends MiddlewareService {
255
296
  * Bucket TTL in milliseconds
256
297
  */
257
298
  private readonly bucketTTL;
299
+ private warnedNoForwardedFor;
258
300
  /**
259
301
  * Creates a new rate limiter middleware instance
260
302
  *
@@ -322,12 +364,40 @@ export declare class RateLimiterMiddleware extends MiddlewareService {
322
364
  */
323
365
  clearBuckets(): void;
324
366
  /**
325
- * Default key generator - uses X-Forwarded-For or CF-Connecting-IP or falls back to 'unknown'
367
+ * Default key generator - the connecting peer, see `trustProxy`
326
368
  *
327
369
  * @param context - Hono context
328
370
  * @returns Client identifier
329
371
  */
330
372
  private defaultKeyGenerator;
373
+ /**
374
+ * Resolve the client identifier: the connecting peer, or the client hop of `X-Forwarded-For`
375
+ * when the peer is a trusted proxy
376
+ *
377
+ * @param context - Hono context
378
+ * @returns Client identifier
379
+ */
380
+ private resolveClientKey;
381
+ /**
382
+ * Warn, once per instance, that a trusted peer forwarded no usable `X-Forwarded-For`
383
+ *
384
+ * @param peer - The trusted peer address
385
+ */
386
+ private warnNoForwardedFor;
387
+ /**
388
+ * Whether an address is a reverse proxy whose forwarded hops may be believed
389
+ *
390
+ * @param address - Peer or forwarded hop address
391
+ * @returns True when the address is trusted
392
+ */
393
+ private trusts;
394
+ /**
395
+ * Parse `X-Forwarded-For` into its hops, left to right
396
+ *
397
+ * @param context - Hono context
398
+ * @returns The forwarded hops, or an empty list when the header is absent or over-long
399
+ */
400
+ private forwardedHops;
331
401
  /**
332
402
  * Setup automatic cleanup of inactive buckets
333
403
  *