@jeffreycao/copilot-api 1.12.2 → 1.12.3
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 +0 -1
- package/README.zh-CN.md +0 -1
- package/dist/main.js +1 -1
- package/dist/{server-DffuE4H8.js → server-KVt1BdTD.js} +55 -1
- package/dist/server-KVt1BdTD.js.map +1 -0
- package/dist/{start-DHpjos-p.js → start-C4Lm5vjd.js} +2 -2
- package/dist/{start-DHpjos-p.js.map → start-C4Lm5vjd.js.map} +1 -1
- package/package.json +2 -1
- package/dist/server-DffuE4H8.js.map +0 -1
package/README.md
CHANGED
package/README.zh-CN.md
CHANGED
package/dist/main.js
CHANGED
|
@@ -43,7 +43,7 @@ const { auth } = await import("./auth-hKS7kdCx.js");
|
|
|
43
43
|
const { checkUsage } = await import("./check-usage-Cq76N0LH.js");
|
|
44
44
|
const { debug } = await import("./debug-BiX0ewij.js");
|
|
45
45
|
const { mcp } = await import("./mcp-CTb-DbQH.js");
|
|
46
|
-
const { start } = await import("./start-
|
|
46
|
+
const { start } = await import("./start-C4Lm5vjd.js");
|
|
47
47
|
await runMain(defineCommand({
|
|
48
48
|
meta: {
|
|
49
49
|
name: "copilot-api",
|
|
@@ -11,6 +11,7 @@ import { z } from "zod";
|
|
|
11
11
|
import { Hono } from "hono";
|
|
12
12
|
import { cors } from "hono/cors";
|
|
13
13
|
import { logger } from "hono/logger";
|
|
14
|
+
import { decompress } from "fzstd";
|
|
14
15
|
import { streamSSE } from "hono/streaming";
|
|
15
16
|
import util from "node:util";
|
|
16
17
|
//#region src/lib/request-auth.ts
|
|
@@ -84,6 +85,58 @@ const traceIdMiddleware = async (c, next) => {
|
|
|
84
85
|
});
|
|
85
86
|
};
|
|
86
87
|
//#endregion
|
|
88
|
+
//#region src/lib/zstd-request.ts
|
|
89
|
+
const ZSTD_CONTENT_ENCODING = "zstd";
|
|
90
|
+
const INVALID_BODY_STATUS = 400;
|
|
91
|
+
let nodeZlibPromise = null;
|
|
92
|
+
const zstdDecompressionMiddleware = async (c, next) => {
|
|
93
|
+
if (c.req.header("content-encoding")?.trim().toLowerCase() !== ZSTD_CONTENT_ENCODING) return next();
|
|
94
|
+
try {
|
|
95
|
+
const decompressedBody = await decompressZstd(new Uint8Array(await c.req.raw.arrayBuffer()));
|
|
96
|
+
const headers = new Headers(c.req.raw.headers);
|
|
97
|
+
headers.delete("content-encoding");
|
|
98
|
+
headers.delete("content-length");
|
|
99
|
+
c.req.raw = new Request(c.req.raw.url, {
|
|
100
|
+
body: decompressedBody,
|
|
101
|
+
headers,
|
|
102
|
+
method: c.req.raw.method,
|
|
103
|
+
signal: c.req.raw.signal
|
|
104
|
+
});
|
|
105
|
+
c.req.bodyCache = {};
|
|
106
|
+
} catch {
|
|
107
|
+
return c.json({ error: {
|
|
108
|
+
message: "Failed to decompress zstd request body.",
|
|
109
|
+
type: "invalid_request_error"
|
|
110
|
+
} }, INVALID_BODY_STATUS);
|
|
111
|
+
}
|
|
112
|
+
return next();
|
|
113
|
+
};
|
|
114
|
+
const decompressZstd = async (input) => {
|
|
115
|
+
const bun = getBunRuntime();
|
|
116
|
+
if (bun?.zstdDecompress) return toUint8Array(await bun.zstdDecompress(input));
|
|
117
|
+
const nodeZlib = await getNodeZlib();
|
|
118
|
+
if (nodeZlib?.zstdDecompress) return new Promise((resolve, reject) => {
|
|
119
|
+
nodeZlib.zstdDecompress?.(input, (error, result) => {
|
|
120
|
+
if (error) {
|
|
121
|
+
reject(error);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
resolve(toUint8Array(result));
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
return decompress(input);
|
|
128
|
+
};
|
|
129
|
+
const getBunRuntime = () => globalThis.Bun;
|
|
130
|
+
const getNodeZlib = async () => {
|
|
131
|
+
nodeZlibPromise ??= import("node:zlib").then((module) => module).catch(() => null);
|
|
132
|
+
return nodeZlibPromise;
|
|
133
|
+
};
|
|
134
|
+
const toUint8Array = (data) => {
|
|
135
|
+
if (data instanceof Uint8Array) return data;
|
|
136
|
+
if (data instanceof ArrayBuffer) return new Uint8Array(data);
|
|
137
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
138
|
+
};
|
|
139
|
+
//#endregion
|
|
87
140
|
//#region src/lib/approval.ts
|
|
88
141
|
const awaitApproval = async () => {
|
|
89
142
|
if (!await consola.prompt(`Accept incoming request?`, { type: "confirm" })) throw new HTTPError("Request rejected", Response.json({ message: "Request rejected" }, { status: 403 }));
|
|
@@ -6167,6 +6220,7 @@ server.use("/admin/*", createAuthMiddleware({
|
|
|
6167
6220
|
allowUnauthenticatedPaths: [],
|
|
6168
6221
|
allowWhenNoApiKeys: false
|
|
6169
6222
|
}));
|
|
6223
|
+
server.use(zstdDecompressionMiddleware);
|
|
6170
6224
|
server.get("/", (c) => c.text("Server running"));
|
|
6171
6225
|
server.get("/usage-viewer", (c) => {
|
|
6172
6226
|
const usageViewerFileUrl = new URL("../pages/index.html", import.meta.url);
|
|
@@ -6191,4 +6245,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
|
|
|
6191
6245
|
//#endregion
|
|
6192
6246
|
export { server };
|
|
6193
6247
|
|
|
6194
|
-
//# sourceMappingURL=server-
|
|
6248
|
+
//# sourceMappingURL=server-KVt1BdTD.js.map
|