mirror of
https://github.com/lancedb/lancedb.git
synced 2026-01-03 10:22:56 +00:00
Adds client-side middleware to LanceDB Node SDK to instrument HTTP
Requests
Example - adding `x-request-id` request header:
```js
class HttpMiddleware {
constructor({ requestId }) {
this.requestId = requestId
}
onRemoteRequest(req, next) {
req.headers['x-request-id'] = this.requestId
return next(req)
}
}
const db = await lancedb.connect({
uri: 'db://remote-123',
apiKey: 'sk_...',
})
let tables = await db.withMiddleware(new HttpMiddleware({ requestId: '123' })).tableNames();
```
---------
Co-authored-by: Weston Pace <weston.pace@gmail.com>
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
// Copyright 2024 LanceDB Developers.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
/**
|
|
* Middleware for Remote LanceDB Connection or Table
|
|
*/
|
|
export interface HttpMiddleware {
|
|
/**
|
|
* A callback that can be used to instrument the behavior of http requests to remote
|
|
* tables. It can be used to add headers, modify the request, or even short-circuit
|
|
* the request and return a response without making the request to the remote endpoint.
|
|
* It can also be used to modify the response from the remote endpoint.
|
|
*
|
|
* @param {RemoteResponse} res - Request to the remote endpoint
|
|
* @param {onRemoteRequestNext} next - Callback to advance the middleware chain
|
|
*/
|
|
onRemoteRequest(
|
|
req: RemoteRequest,
|
|
next: (req: RemoteRequest) => Promise<RemoteResponse>,
|
|
): Promise<RemoteResponse>
|
|
};
|
|
|
|
export enum Method {
|
|
GET,
|
|
POST
|
|
}
|
|
|
|
/**
|
|
* A LanceDB Remote HTTP Request
|
|
*/
|
|
export interface RemoteRequest {
|
|
uri: string
|
|
method: Method
|
|
headers: Map<string, string>
|
|
params?: Map<string, string>
|
|
body?: any
|
|
}
|
|
|
|
/**
|
|
* A LanceDB Remote HTTP Response
|
|
*/
|
|
export interface RemoteResponse {
|
|
status: number
|
|
statusText: string
|
|
headers: Map<string, string>
|
|
body: () => Promise<any>
|
|
}
|