ai.matey.http 0.2.0

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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/deno/adapter.js +173 -0
  3. package/dist/cjs/deno/adapter.js.map +1 -0
  4. package/dist/cjs/deno/handler.js +78 -0
  5. package/dist/cjs/deno/handler.js.map +1 -0
  6. package/dist/cjs/deno/index.js +26 -0
  7. package/dist/cjs/deno/index.js.map +1 -0
  8. package/dist/cjs/express/adapter.js +150 -0
  9. package/dist/cjs/express/adapter.js.map +1 -0
  10. package/dist/cjs/express/index.js +26 -0
  11. package/dist/cjs/express/index.js.map +1 -0
  12. package/dist/cjs/express/middleware.js +63 -0
  13. package/dist/cjs/express/middleware.js.map +1 -0
  14. package/dist/cjs/fastify/adapter.js +149 -0
  15. package/dist/cjs/fastify/adapter.js.map +1 -0
  16. package/dist/cjs/fastify/handler.js +54 -0
  17. package/dist/cjs/fastify/handler.js.map +1 -0
  18. package/dist/cjs/fastify/index.js +26 -0
  19. package/dist/cjs/fastify/index.js.map +1 -0
  20. package/dist/cjs/hono/adapter.js +172 -0
  21. package/dist/cjs/hono/adapter.js.map +1 -0
  22. package/dist/cjs/hono/index.js +26 -0
  23. package/dist/cjs/hono/index.js.map +1 -0
  24. package/dist/cjs/hono/middleware.js +75 -0
  25. package/dist/cjs/hono/middleware.js.map +1 -0
  26. package/dist/cjs/index.js +37 -0
  27. package/dist/cjs/index.js.map +1 -0
  28. package/dist/cjs/koa/adapter.js +153 -0
  29. package/dist/cjs/koa/adapter.js.map +1 -0
  30. package/dist/cjs/koa/index.js +26 -0
  31. package/dist/cjs/koa/index.js.map +1 -0
  32. package/dist/cjs/koa/middleware.js +58 -0
  33. package/dist/cjs/koa/middleware.js.map +1 -0
  34. package/dist/cjs/node/adapter.js +170 -0
  35. package/dist/cjs/node/adapter.js.map +1 -0
  36. package/dist/cjs/node/index.js +26 -0
  37. package/dist/cjs/node/index.js.map +1 -0
  38. package/dist/cjs/node/listener.js +98 -0
  39. package/dist/cjs/node/listener.js.map +1 -0
  40. package/dist/esm/deno/adapter.js +168 -0
  41. package/dist/esm/deno/adapter.js.map +1 -0
  42. package/dist/esm/deno/handler.js +75 -0
  43. package/dist/esm/deno/handler.js.map +1 -0
  44. package/dist/esm/deno/index.js +10 -0
  45. package/dist/esm/deno/index.js.map +1 -0
  46. package/dist/esm/express/adapter.js +145 -0
  47. package/dist/esm/express/adapter.js.map +1 -0
  48. package/dist/esm/express/index.js +10 -0
  49. package/dist/esm/express/index.js.map +1 -0
  50. package/dist/esm/express/middleware.js +60 -0
  51. package/dist/esm/express/middleware.js.map +1 -0
  52. package/dist/esm/fastify/adapter.js +144 -0
  53. package/dist/esm/fastify/adapter.js.map +1 -0
  54. package/dist/esm/fastify/handler.js +51 -0
  55. package/dist/esm/fastify/handler.js.map +1 -0
  56. package/dist/esm/fastify/index.js +10 -0
  57. package/dist/esm/fastify/index.js.map +1 -0
  58. package/dist/esm/hono/adapter.js +167 -0
  59. package/dist/esm/hono/adapter.js.map +1 -0
  60. package/dist/esm/hono/index.js +10 -0
  61. package/dist/esm/hono/index.js.map +1 -0
  62. package/dist/esm/hono/middleware.js +72 -0
  63. package/dist/esm/hono/middleware.js.map +1 -0
  64. package/dist/esm/index.js +21 -0
  65. package/dist/esm/index.js.map +1 -0
  66. package/dist/esm/koa/adapter.js +148 -0
  67. package/dist/esm/koa/adapter.js.map +1 -0
  68. package/dist/esm/koa/index.js +10 -0
  69. package/dist/esm/koa/index.js.map +1 -0
  70. package/dist/esm/koa/middleware.js +55 -0
  71. package/dist/esm/koa/middleware.js.map +1 -0
  72. package/dist/esm/node/adapter.js +165 -0
  73. package/dist/esm/node/adapter.js.map +1 -0
  74. package/dist/esm/node/index.js +10 -0
  75. package/dist/esm/node/index.js.map +1 -0
  76. package/dist/esm/node/listener.js +92 -0
  77. package/dist/esm/node/listener.js.map +1 -0
  78. package/dist/types/deno/adapter.d.ts +56 -0
  79. package/dist/types/deno/adapter.d.ts.map +1 -0
  80. package/dist/types/deno/handler.d.ts +38 -0
  81. package/dist/types/deno/handler.d.ts.map +1 -0
  82. package/dist/types/deno/index.d.ts +10 -0
  83. package/dist/types/deno/index.d.ts.map +1 -0
  84. package/dist/types/express/adapter.d.ts +46 -0
  85. package/dist/types/express/adapter.d.ts.map +1 -0
  86. package/dist/types/express/index.d.ts +10 -0
  87. package/dist/types/express/index.d.ts.map +1 -0
  88. package/dist/types/express/middleware.d.ts +39 -0
  89. package/dist/types/express/middleware.d.ts.map +1 -0
  90. package/dist/types/fastify/adapter.d.ts +46 -0
  91. package/dist/types/fastify/adapter.d.ts.map +1 -0
  92. package/dist/types/fastify/handler.d.ts +36 -0
  93. package/dist/types/fastify/handler.d.ts.map +1 -0
  94. package/dist/types/fastify/index.d.ts +10 -0
  95. package/dist/types/fastify/index.d.ts.map +1 -0
  96. package/dist/types/hono/adapter.d.ts +47 -0
  97. package/dist/types/hono/adapter.d.ts.map +1 -0
  98. package/dist/types/hono/index.d.ts +10 -0
  99. package/dist/types/hono/index.d.ts.map +1 -0
  100. package/dist/types/hono/middleware.d.ts +36 -0
  101. package/dist/types/hono/middleware.d.ts.map +1 -0
  102. package/dist/types/index.d.ts +15 -0
  103. package/dist/types/index.d.ts.map +1 -0
  104. package/dist/types/koa/adapter.d.ts +46 -0
  105. package/dist/types/koa/adapter.d.ts.map +1 -0
  106. package/dist/types/koa/index.d.ts +10 -0
  107. package/dist/types/koa/index.d.ts.map +1 -0
  108. package/dist/types/koa/middleware.d.ts +40 -0
  109. package/dist/types/koa/middleware.d.ts.map +1 -0
  110. package/dist/types/node/adapter.d.ts +57 -0
  111. package/dist/types/node/adapter.d.ts.map +1 -0
  112. package/dist/types/node/index.d.ts +10 -0
  113. package/dist/types/node/index.d.ts.map +1 -0
  114. package/dist/types/node/listener.d.ts +51 -0
  115. package/dist/types/node/listener.d.ts.map +1 -0
  116. package/package.json +160 -0
  117. package/readme.md +93 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 AI Matey Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ /**
3
+ * Deno HTTP Adapter
4
+ *
5
+ * Converts Deno Request/Response to GenericRequest/GenericResponse
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DenoResponseAdapter = exports.DenoRequestAdapter = void 0;
11
+ /**
12
+ * Adapter that converts Deno Request to GenericRequest
13
+ */
14
+ class DenoRequestAdapter {
15
+ request;
16
+ connInfo;
17
+ _body = null;
18
+ constructor(request, connInfo) {
19
+ this.request = request;
20
+ this.connInfo = connInfo;
21
+ }
22
+ get method() {
23
+ return this.request.method || 'GET';
24
+ }
25
+ get url() {
26
+ return this.request.url || '/';
27
+ }
28
+ get headers() {
29
+ const headers = {};
30
+ this.request.headers.forEach((value, key) => {
31
+ headers[key.toLowerCase()] = value;
32
+ });
33
+ return headers;
34
+ }
35
+ get body() {
36
+ // Return parsed body (must be set externally via setBody)
37
+ return this._body;
38
+ }
39
+ get params() {
40
+ // Params would need to be provided by routing layer
41
+ return undefined;
42
+ }
43
+ get query() {
44
+ // Parse query string from URL
45
+ const url = new URL(this.request.url);
46
+ const query = {};
47
+ url.searchParams.forEach((value, key) => {
48
+ query[key] = value;
49
+ });
50
+ return Object.keys(query).length > 0 ? query : undefined;
51
+ }
52
+ get ip() {
53
+ // Try to get IP from connection info or headers
54
+ if (this.connInfo?.remoteAddr?.hostname) {
55
+ return this.connInfo.remoteAddr.hostname;
56
+ }
57
+ const forwarded = this.request.headers.get('x-forwarded-for');
58
+ if (forwarded) {
59
+ return forwarded.split(',')[0]?.trim();
60
+ }
61
+ const realIp = this.request.headers.get('x-real-ip');
62
+ if (realIp) {
63
+ return realIp;
64
+ }
65
+ return undefined;
66
+ }
67
+ /**
68
+ * Set the parsed body (must be called before passing to handler)
69
+ */
70
+ setBody(body) {
71
+ this._body = body;
72
+ }
73
+ /**
74
+ * Get the underlying Deno request object
75
+ */
76
+ get raw() {
77
+ return this.request;
78
+ }
79
+ }
80
+ exports.DenoRequestAdapter = DenoRequestAdapter;
81
+ /**
82
+ * Adapter that converts GenericResponse methods to Deno Response
83
+ */
84
+ class DenoResponseAdapter {
85
+ _statusCode = 200;
86
+ _headers = new Headers();
87
+ _sent = false;
88
+ _response = null;
89
+ constructor() { }
90
+ status(code) {
91
+ if (!this._sent) {
92
+ this._statusCode = code;
93
+ }
94
+ }
95
+ header(name, value) {
96
+ if (!this._sent) {
97
+ this._headers.set(name, value);
98
+ }
99
+ }
100
+ send(data) {
101
+ if (this._sent) {
102
+ return;
103
+ }
104
+ this._sent = true;
105
+ // Clone headers to ensure they're properly set
106
+ const headers = new Headers(this._headers);
107
+ // Handle empty string (e.g., for CORS preflight 204 responses)
108
+ if (data === '') {
109
+ // 204 No Content responses cannot have a body (not even empty string)
110
+ // Use null for 204, empty string for other status codes
111
+ this._response = new Response(this._statusCode === 204 ? null : '', {
112
+ status: this._statusCode,
113
+ headers,
114
+ });
115
+ return;
116
+ }
117
+ // Create JSON response
118
+ headers.set('Content-Type', 'application/json');
119
+ this._response = new Response(JSON.stringify(data), {
120
+ status: this._statusCode,
121
+ headers,
122
+ });
123
+ }
124
+ stream(generator) {
125
+ if (this._sent) {
126
+ return Promise.resolve();
127
+ }
128
+ this._sent = true;
129
+ // Create SSE stream
130
+ const stream = new ReadableStream({
131
+ async start(controller) {
132
+ try {
133
+ for await (const chunk of generator) {
134
+ const data = `data: ${JSON.stringify(chunk)}\n\n`;
135
+ controller.enqueue(new TextEncoder().encode(data));
136
+ }
137
+ // Send done marker
138
+ const done = 'data: [DONE]\n\n';
139
+ controller.enqueue(new TextEncoder().encode(done));
140
+ controller.close();
141
+ }
142
+ catch (error) {
143
+ console.error('Streaming error:', error);
144
+ controller.error(error);
145
+ }
146
+ },
147
+ });
148
+ // Set SSE headers
149
+ this._headers.set('Content-Type', 'text/event-stream');
150
+ this._headers.set('Cache-Control', 'no-cache');
151
+ this._headers.set('Connection', 'keep-alive');
152
+ this._response = new Response(stream, {
153
+ status: this._statusCode,
154
+ headers: this._headers,
155
+ });
156
+ return Promise.resolve();
157
+ }
158
+ isWritable() {
159
+ return !this._sent;
160
+ }
161
+ /**
162
+ * Get the generated Response object
163
+ */
164
+ getResponse() {
165
+ if (!this._response) {
166
+ // If no response was generated, create an error response
167
+ return new Response('Internal Server Error', { status: 500 });
168
+ }
169
+ return this._response;
170
+ }
171
+ }
172
+ exports.DenoResponseAdapter = DenoResponseAdapter;
173
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/deno/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Deno Handler
4
+ *
5
+ * HTTP request handler for Deno that uses the core handler.
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DenoHandler = DenoHandler;
11
+ const ai_matey_http_core_1 = require("ai.matey.http.core");
12
+ const adapter_js_1 = require("./adapter.js");
13
+ /**
14
+ * Create Deno HTTP handler for handling AI chat requests
15
+ *
16
+ * @param bridge - Bridge instance
17
+ * @param options - HTTP listener options
18
+ * @returns Deno HTTP handler function
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { DenoHandler } from 'ai.matey.http/deno';
23
+ *
24
+ * const bridge = new Bridge(frontend, backend);
25
+ *
26
+ * // Create handler
27
+ * const handler = DenoHandler(bridge, {
28
+ * cors: true,
29
+ * streaming: true,
30
+ * });
31
+ *
32
+ * // Use with Deno.serve
33
+ * Deno.serve({ port: 3000 }, handler);
34
+ * ```
35
+ */
36
+ function DenoHandler(bridge, options = {}) {
37
+ // Create core handler with all business logic
38
+ const { cors, ...restOptions } = options;
39
+ const coreHandler = new ai_matey_http_core_1.CoreHTTPHandler({
40
+ bridge,
41
+ cors: cors === false || cors === undefined ? undefined : cors === true ? {} : cors,
42
+ ...restOptions, // HTTPListenerOptions types are compatible with CoreHandlerOptions at runtime
43
+ });
44
+ // Return Deno HTTP handler
45
+ return async (request, connInfo) => {
46
+ try {
47
+ // Parse JSON body if present (but not for OPTIONS requests)
48
+ const contentType = request.headers.get('content-type') || '';
49
+ const method = request.method;
50
+ let body = null;
51
+ if (method !== 'OPTIONS' && contentType.includes('application/json')) {
52
+ try {
53
+ body = await request.json();
54
+ }
55
+ catch {
56
+ // If JSON parsing fails, leave body as null
57
+ }
58
+ }
59
+ // Create adapters
60
+ const genericReq = new adapter_js_1.DenoRequestAdapter(request, connInfo);
61
+ genericReq.setBody(body);
62
+ const genericRes = new adapter_js_1.DenoResponseAdapter();
63
+ // Handle request through core handler
64
+ await coreHandler.handle(genericReq, genericRes);
65
+ // Return the response generated by the adapter
66
+ return genericRes.getResponse();
67
+ }
68
+ catch (error) {
69
+ // Return error response
70
+ console.error('Deno handler error:', error);
71
+ return new Response(JSON.stringify({ error: 'Internal Server Error' }), {
72
+ status: 500,
73
+ headers: { 'Content-Type': 'application/json' },
74
+ });
75
+ }
76
+ };
77
+ }
78
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/deno/handler.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA8BH,kCAoDC;AA9ED,2DAAqD;AACrD,6CAAuE;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,WAAW,CACzB,MAAc,EACd,UAA+B,EAAE;IAEjC,8CAA8C;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAI,oCAAe,CAAC;QACtC,MAAM;QACN,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAClF,GAAI,WAAmB,EAAE,8EAA8E;KACxG,CAAC,CAAC;IAEH,2BAA2B;IAC3B,OAAO,KAAK,EACV,OAAgB,EAChB,QAAiD,EAC9B,EAAE;QACrB,IAAI,CAAC;YACH,4DAA4D;YAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;YAEhB,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,4CAA4C;gBAC9C,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,MAAM,UAAU,GAAG,IAAI,+BAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC7D,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,UAAU,GAAG,IAAI,gCAAmB,EAAE,CAAC;YAE7C,sCAAsC;YACtC,MAAM,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAEjD,+CAA+C;YAC/C,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB;YACxB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,EAAE;gBACtE,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Deno HTTP Adapter
4
+ *
5
+ * HTTP adapter for Deno
6
+ *
7
+ * @module
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ __exportStar(require("./adapter.js"), exports);
25
+ __exportStar(require("./handler.js"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deno/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,+CAA6B"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Express HTTP Adapter
4
+ *
5
+ * Converts Express Request/Response to GenericRequest/GenericResponse
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ExpressResponseAdapter = exports.ExpressRequestAdapter = void 0;
11
+ const ai_matey_http_core_1 = require("ai.matey.http.core");
12
+ /**
13
+ * Adapter that converts Express Request to GenericRequest
14
+ */
15
+ class ExpressRequestAdapter {
16
+ req;
17
+ constructor(req) {
18
+ this.req = req;
19
+ }
20
+ get method() {
21
+ return this.req.method || 'GET';
22
+ }
23
+ get url() {
24
+ return this.req.originalUrl || this.req.url || '/';
25
+ }
26
+ get headers() {
27
+ const headers = {};
28
+ for (const [key, value] of Object.entries(this.req.headers)) {
29
+ if (typeof value === 'string') {
30
+ headers[key.toLowerCase()] = value;
31
+ }
32
+ else if (Array.isArray(value)) {
33
+ headers[key.toLowerCase()] = value.join(', ');
34
+ }
35
+ }
36
+ return headers;
37
+ }
38
+ get body() {
39
+ // Express body is already parsed if body-parser middleware is used
40
+ return this.req.body ?? null;
41
+ }
42
+ get params() {
43
+ return this.req.params;
44
+ }
45
+ get query() {
46
+ // Express query can have arrays, so we need to stringify them
47
+ const query = {};
48
+ for (const [key, value] of Object.entries(this.req.query)) {
49
+ if (typeof value === 'string') {
50
+ query[key] = value;
51
+ }
52
+ else if (Array.isArray(value)) {
53
+ const primitives = value.filter((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean');
54
+ query[key] = primitives.map((v) => v.toString()).join(',');
55
+ }
56
+ else if (value !== undefined && typeof value !== 'object') {
57
+ query[key] = String(value);
58
+ }
59
+ }
60
+ return Object.keys(query).length > 0 ? query : undefined;
61
+ }
62
+ get ip() {
63
+ // Express provides multiple IP sources
64
+ return this.req.ip || this.req.socket?.remoteAddress;
65
+ }
66
+ /**
67
+ * Get the underlying Express request object
68
+ */
69
+ get raw() {
70
+ return this.req;
71
+ }
72
+ }
73
+ exports.ExpressRequestAdapter = ExpressRequestAdapter;
74
+ /**
75
+ * Adapter that converts GenericResponse methods to Express Response
76
+ */
77
+ class ExpressResponseAdapter {
78
+ res;
79
+ _statusCode = 200;
80
+ _headersSent = false;
81
+ constructor(res) {
82
+ this.res = res;
83
+ }
84
+ status(code) {
85
+ this._statusCode = code;
86
+ if (!this._headersSent) {
87
+ this.res.status(code);
88
+ }
89
+ }
90
+ header(name, value) {
91
+ if (!this._headersSent) {
92
+ this.res.setHeader(name, value);
93
+ }
94
+ }
95
+ send(data) {
96
+ if (!this.isWritable()) {
97
+ return;
98
+ }
99
+ this._headersSent = true;
100
+ // Handle empty string (e.g., for CORS preflight 204 responses)
101
+ if (data === '') {
102
+ this.res.end();
103
+ return;
104
+ }
105
+ // Express has a built-in json() method
106
+ this.res.status(this._statusCode).json(data);
107
+ }
108
+ async stream(generator) {
109
+ if (!this.isWritable()) {
110
+ return;
111
+ }
112
+ this._headersSent = true;
113
+ // Get the underlying Node.js response for SSE
114
+ const nodeRes = this.res;
115
+ // Set SSE headers
116
+ (0, ai_matey_http_core_1.sendSSEHeaders)(nodeRes, {});
117
+ try {
118
+ // Stream chunks
119
+ for await (const chunk of generator) {
120
+ if (!this.isWritable()) {
121
+ break;
122
+ }
123
+ (0, ai_matey_http_core_1.sendSSEChunk)(nodeRes, chunk);
124
+ }
125
+ // Send done marker
126
+ if (this.isWritable()) {
127
+ (0, ai_matey_http_core_1.sendSSEDone)(nodeRes);
128
+ }
129
+ }
130
+ catch (error) {
131
+ // If error occurs during streaming, we can't change status code
132
+ // Just log and close
133
+ console.error('Streaming error:', error);
134
+ if (this.isWritable()) {
135
+ nodeRes.end();
136
+ }
137
+ }
138
+ }
139
+ isWritable() {
140
+ return !this.res.headersSent && this.res.writable;
141
+ }
142
+ /**
143
+ * Get the underlying Express response object
144
+ */
145
+ get raw() {
146
+ return this.res;
147
+ }
148
+ }
149
+ exports.ExpressResponseAdapter = ExpressResponseAdapter;
150
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/express/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Express HTTP Adapter
4
+ *
5
+ * HTTP adapter for Express.js
6
+ *
7
+ * @module
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ __exportStar(require("./adapter.js"), exports);
25
+ __exportStar(require("./middleware.js"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/express/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,kDAAgC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * Express Middleware
4
+ *
5
+ * HTTP request middleware for Express that uses the core handler.
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ExpressMiddleware = ExpressMiddleware;
11
+ const ai_matey_http_core_1 = require("ai.matey.http.core");
12
+ const adapter_js_1 = require("./adapter.js");
13
+ /**
14
+ * Create Express middleware for handling AI chat requests
15
+ *
16
+ * @param bridge - Bridge instance
17
+ * @param options - HTTP listener options
18
+ * @returns Express middleware function
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import express from 'express';
23
+ * import { ExpressMiddleware } from 'ai.matey.http/express';
24
+ *
25
+ * const app = express();
26
+ * const bridge = new Bridge(frontend, backend);
27
+ *
28
+ * // Use body parser middleware first
29
+ * app.use(express.json());
30
+ *
31
+ * // Add AI chat middleware
32
+ * app.use('/v1/messages', ExpressMiddleware(bridge, {
33
+ * cors: true,
34
+ * streaming: true,
35
+ * }));
36
+ *
37
+ * app.listen(3000);
38
+ * ```
39
+ */
40
+ function ExpressMiddleware(bridge, options = {}) {
41
+ // Create core handler with all business logic
42
+ const { cors, ...restOptions } = options;
43
+ const coreHandler = new ai_matey_http_core_1.CoreHTTPHandler({
44
+ bridge,
45
+ cors: cors === false || cors === undefined ? undefined : cors === true ? {} : cors,
46
+ ...restOptions, // HTTPListenerOptions types are compatible with CoreHandlerOptions at runtime
47
+ });
48
+ // Return Express middleware
49
+ return async (req, res, next) => {
50
+ try {
51
+ // Create adapters
52
+ const genericReq = new adapter_js_1.ExpressRequestAdapter(req);
53
+ const genericRes = new adapter_js_1.ExpressResponseAdapter(res);
54
+ // Handle request through core handler
55
+ await coreHandler.handle(genericReq, genericRes);
56
+ }
57
+ catch (error) {
58
+ // Pass error to Express error handling middleware
59
+ next(error);
60
+ }
61
+ };
62
+ }
63
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/express/middleware.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAmCH,8CA2BC;AAzDD,2DAAqD;AACrD,6CAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,UAA+B,EAAE;IAEjC,8CAA8C;IAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAI,oCAAe,CAAC;QACtC,MAAM;QACN,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAClF,GAAI,WAAmB,EAAE,8EAA8E;KACxG,CAAC,CAAC;IAEH,4BAA4B;IAC5B,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAiB,EAAE;QAC9E,IAAI,CAAC;YACH,kBAAkB;YAClB,MAAM,UAAU,GAAG,IAAI,kCAAqB,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,IAAI,mCAAsB,CAAC,GAAG,CAAC,CAAC;YAEnD,sCAAsC;YACtC,MAAM,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kDAAkD;YAClD,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}