veryfront 0.1.615 → 0.1.617
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/esm/deno.d.ts +3 -0
- package/esm/deno.js +4 -1
- package/esm/src/agent/hosted/child-stream-watchdog.d.ts.map +1 -1
- package/esm/src/agent/hosted/child-stream-watchdog.js +47 -29
- package/esm/src/agent/hosted/cloud-prepared-chat-execution-runtime.d.ts +9 -0
- package/esm/src/agent/hosted/cloud-prepared-chat-execution-runtime.d.ts.map +1 -1
- package/esm/src/agent/hosted/cloud-prepared-chat-execution-runtime.js +26 -1
- package/esm/src/agent/hosted/stream-terminal-error.d.ts.map +1 -1
- package/esm/src/agent/hosted/stream-terminal-error.js +44 -0
- package/esm/src/agent/identity-contracts.d.ts +59 -0
- package/esm/src/agent/identity-contracts.d.ts.map +1 -0
- package/esm/src/agent/identity-contracts.js +41 -0
- package/esm/src/agent/index.d.ts +1 -0
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +1 -0
- package/esm/src/oauth/providers/base.d.ts +9 -0
- package/esm/src/oauth/providers/base.d.ts.map +1 -1
- package/esm/src/oauth/providers/base.js +23 -3
- package/esm/src/platform/adapters/redis/deno.d.ts +1 -0
- package/esm/src/platform/adapters/redis/deno.d.ts.map +1 -1
- package/esm/src/platform/adapters/redis/deno.js +5 -0
- package/esm/src/platform/adapters/redis/interface.d.ts +5 -0
- package/esm/src/platform/adapters/redis/interface.d.ts.map +1 -1
- package/esm/src/platform/adapters/redis/node.d.ts +1 -0
- package/esm/src/platform/adapters/redis/node.d.ts.map +1 -1
- package/esm/src/platform/adapters/redis/node.js +5 -0
- package/esm/src/platform/adapters/redis/types.d.ts +5 -0
- package/esm/src/platform/adapters/redis/types.d.ts.map +1 -1
- package/esm/src/provider/local/local-engine.d.ts +32 -0
- package/esm/src/provider/local/local-engine.d.ts.map +1 -1
- package/esm/src/provider/local/local-engine.js +66 -9
- package/esm/src/provider/runtime-loader/provider-usage.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader/provider-usage.js +12 -1
- package/esm/src/rendering/rsc/server-renderer/tree-processor.js +5 -5
- package/esm/src/routing/api/api-route-matcher.d.ts.map +1 -1
- package/esm/src/routing/api/api-route-matcher.js +3 -2
- package/esm/src/routing/matchers/decode-param.d.ts +9 -0
- package/esm/src/routing/matchers/decode-param.d.ts.map +1 -0
- package/esm/src/routing/matchers/decode-param.js +17 -0
- package/esm/src/routing/matchers/route-matcher.d.ts.map +1 -1
- package/esm/src/routing/matchers/route-matcher.js +3 -4
- package/esm/src/routing/slug-mapper/dynamic-route-matcher.d.ts.map +1 -1
- package/esm/src/routing/slug-mapper/dynamic-route-matcher.js +8 -2
- package/esm/src/server/node-handler.d.ts.map +1 -1
- package/esm/src/server/node-handler.js +40 -5
- package/esm/src/tool/factory.d.ts.map +1 -1
- package/esm/src/tool/factory.js +4 -3
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/esm/src/workflow/backends/redis/index.d.ts +2 -0
- package/esm/src/workflow/backends/redis/index.d.ts.map +1 -1
- package/esm/src/workflow/backends/redis/index.js +39 -6
- package/esm/src/workflow/executor/dag/index.d.ts.map +1 -1
- package/esm/src/workflow/executor/dag/index.js +30 -5
- package/package.json +5 -1
|
@@ -88,6 +88,15 @@ export class OAuthProvider {
|
|
|
88
88
|
}
|
|
89
89
|
return headers;
|
|
90
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Parse a successful token-endpoint body into {@link OAuthTokens}.
|
|
93
|
+
*
|
|
94
|
+
* Returns `null` when the response carries no usable access token. A 2xx
|
|
95
|
+
* status alone is NOT sufficient evidence of success: some providers (e.g.
|
|
96
|
+
* Slack) signal errors with `200 {"ok": false, "error": ...}`, and a missing
|
|
97
|
+
* `access_token` must never be persisted as an empty-but-"connected" token.
|
|
98
|
+
* See bugs H11/H12.
|
|
99
|
+
*/
|
|
91
100
|
parseTokenResponse(data, fallbackRefreshToken) {
|
|
92
101
|
const mapping = this.config.tokenResponseMapping ?? {};
|
|
93
102
|
const str = (key) => {
|
|
@@ -99,6 +108,8 @@ export class OAuthProvider {
|
|
|
99
108
|
return typeof v === "string" ? v : undefined;
|
|
100
109
|
};
|
|
101
110
|
const accessToken = str(mapping.accessToken ?? "access_token");
|
|
111
|
+
if (!accessToken)
|
|
112
|
+
return null;
|
|
102
113
|
const refreshToken = optStr(mapping.refreshToken ?? "refresh_token") ??
|
|
103
114
|
fallbackRefreshToken;
|
|
104
115
|
const tokenType = str(mapping.tokenType ?? "token_type");
|
|
@@ -138,15 +149,24 @@ export class OAuthProvider {
|
|
|
138
149
|
async exchangeToken(body, clientId, clientSecret, errorFallback, errorDescriptionFallback, fallbackRefreshToken) {
|
|
139
150
|
try {
|
|
140
151
|
const { response, data } = await this.postTokenRequest(body, clientId, clientSecret);
|
|
141
|
-
|
|
152
|
+
// Some providers signal errors with a 2xx status and a body-level
|
|
153
|
+
// `ok: false` / `error` field (e.g. Slack oauth.v2.access). Treat those
|
|
154
|
+
// as failures even when the HTTP status is "ok". See bug H12.
|
|
155
|
+
const bodyError = typeof data.error === "string" ? data.error : "";
|
|
156
|
+
if (!response.ok || data.ok === false || bodyError) {
|
|
142
157
|
return {
|
|
143
158
|
success: false,
|
|
144
|
-
error:
|
|
159
|
+
error: bodyError || errorFallback,
|
|
145
160
|
errorDescription: (typeof data.error_description === "string" ? data.error_description : "") ||
|
|
146
161
|
(errorDescriptionFallback ? errorDescriptionFallback(response.status) : undefined),
|
|
147
162
|
};
|
|
148
163
|
}
|
|
149
|
-
|
|
164
|
+
// A 2xx without a usable access token is not a success. See bug H11.
|
|
165
|
+
const tokens = this.parseTokenResponse(data, fallbackRefreshToken);
|
|
166
|
+
if (!tokens) {
|
|
167
|
+
return { success: false, error: "invalid_token_response" };
|
|
168
|
+
}
|
|
169
|
+
return { success: true, tokens };
|
|
150
170
|
}
|
|
151
171
|
catch (error) {
|
|
152
172
|
return {
|
|
@@ -42,6 +42,7 @@ export declare class DenoRedisAdapter implements RedisAdapter {
|
|
|
42
42
|
ex?: number;
|
|
43
43
|
}): Promise<string | null>;
|
|
44
44
|
get(key: string): Promise<string | null>;
|
|
45
|
+
eval(script: string, keys: string[], args: string[]): Promise<unknown>;
|
|
45
46
|
quit(): Promise<void>;
|
|
46
47
|
disconnect(): Promise<void>;
|
|
47
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/deno.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/deno.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,11 @@ export class DenoRedisAdapter {
|
|
|
79
79
|
get(key) {
|
|
80
80
|
return this.client.get(key);
|
|
81
81
|
}
|
|
82
|
+
// Redis server-side Lua (EVAL). Not JavaScript eval; runs the given script
|
|
83
|
+
// atomically inside Redis for compare-and-delete / compare-and-pexpire.
|
|
84
|
+
eval(script, keys, args) {
|
|
85
|
+
return this.client.eval(script, keys, args);
|
|
86
|
+
}
|
|
82
87
|
async quit() {
|
|
83
88
|
await this.client.close();
|
|
84
89
|
}
|
|
@@ -42,6 +42,11 @@ export interface RedisAdapter {
|
|
|
42
42
|
ex?: number;
|
|
43
43
|
}): Promise<string | null>;
|
|
44
44
|
get(key: string): Promise<string | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Run a Lua script atomically (EVAL). Used for compare-and-delete and
|
|
47
|
+
* compare-and-pexpire so lock ownership checks cannot race (Redlock).
|
|
48
|
+
*/
|
|
49
|
+
eval(script: string, keys: string[], args: string[]): Promise<unknown>;
|
|
45
50
|
quit(): Promise<void>;
|
|
46
51
|
disconnect(): Promise<void>;
|
|
47
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/interface.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,7 @@ export declare class NodeRedisAdapter implements RedisAdapter {
|
|
|
42
42
|
ex?: number;
|
|
43
43
|
}): Promise<string | null>;
|
|
44
44
|
get(key: string): Promise<string | null>;
|
|
45
|
+
eval(script: string, keys: string[], args: string[]): Promise<unknown>;
|
|
45
46
|
quit(): Promise<void>;
|
|
46
47
|
disconnect(): Promise<void>;
|
|
47
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/node.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,11 @@ export class NodeRedisAdapter {
|
|
|
77
77
|
get(key) {
|
|
78
78
|
return this.client.get(key);
|
|
79
79
|
}
|
|
80
|
+
// Redis server-side Lua (EVAL). Not JavaScript eval; runs the given script
|
|
81
|
+
// atomically inside Redis for compare-and-delete / compare-and-pexpire.
|
|
82
|
+
eval(script, keys, args) {
|
|
83
|
+
return this.client.eval(script, { keys, arguments: args });
|
|
84
|
+
}
|
|
80
85
|
quit() {
|
|
81
86
|
// redis v5: quit() renamed to close()
|
|
82
87
|
return this.client.close();
|
|
@@ -44,6 +44,7 @@ export interface DenoRedisClient {
|
|
|
44
44
|
ex?: number;
|
|
45
45
|
}): Promise<string | null>;
|
|
46
46
|
get(key: string): Promise<string | null>;
|
|
47
|
+
eval(script: string, keys: string[], args: string[]): Promise<unknown>;
|
|
47
48
|
close(): Promise<void>;
|
|
48
49
|
}
|
|
49
50
|
export interface NodeRedisModule {
|
|
@@ -96,6 +97,10 @@ export interface NodeRedisClient {
|
|
|
96
97
|
EX?: number;
|
|
97
98
|
}): Promise<string | null>;
|
|
98
99
|
get(key: string): Promise<string | null>;
|
|
100
|
+
eval(script: string, options?: {
|
|
101
|
+
keys?: string[];
|
|
102
|
+
arguments?: string[];
|
|
103
|
+
}): Promise<unknown>;
|
|
99
104
|
close(): Promise<void>;
|
|
100
105
|
destroy(): Promise<void>;
|
|
101
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,UAAU,CACR,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5C,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3E,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAClG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CACV,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GACnE,eAAe,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,YAAY,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAC3C,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CACR,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI,CACjG,CAAC;IACF,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/platform/adapters/redis/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,UAAU,CACR,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5C,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3E,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAClG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CACV,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GACnE,eAAe,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,YAAY,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAC3C,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CACR,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI,CACjG,CAAC;IACF,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAClD,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -27,6 +27,14 @@ interface TransformersEnv {
|
|
|
27
27
|
cacheDir: string;
|
|
28
28
|
useBrowserCache: boolean;
|
|
29
29
|
}
|
|
30
|
+
/** Minimal Transformers.js stopping-criteria contract (see generation/stopping_criteria.js). */
|
|
31
|
+
interface StoppingCriteriaInstance {
|
|
32
|
+
_call(inputIds: number[][], scores: unknown): boolean[];
|
|
33
|
+
}
|
|
34
|
+
interface StoppingCriteriaListInstance extends StoppingCriteriaInstance {
|
|
35
|
+
push(item: StoppingCriteriaInstance): void;
|
|
36
|
+
extend(items: StoppingCriteriaInstance[]): void;
|
|
37
|
+
}
|
|
30
38
|
interface TransformersModule {
|
|
31
39
|
env: TransformersEnv;
|
|
32
40
|
pipeline: (task: string, model: string, options: {
|
|
@@ -38,7 +46,31 @@ interface TransformersModule {
|
|
|
38
46
|
skip_special_tokens: boolean;
|
|
39
47
|
callback_function: (text: string) => void;
|
|
40
48
|
}) => unknown;
|
|
49
|
+
StoppingCriteria: new () => StoppingCriteriaInstance;
|
|
50
|
+
StoppingCriteriaList: new () => StoppingCriteriaListInstance;
|
|
51
|
+
}
|
|
52
|
+
/** Tokenizer surface used to decode generated token ids back to text. */
|
|
53
|
+
interface DecodingTokenizer {
|
|
54
|
+
decode(tokens: number[]): string;
|
|
55
|
+
}
|
|
56
|
+
/** Options object forwarded to the Transformers.js text-generation pipeline. */
|
|
57
|
+
export interface PipeOptions {
|
|
58
|
+
max_new_tokens: number;
|
|
59
|
+
temperature: number;
|
|
60
|
+
top_p?: number;
|
|
61
|
+
top_k?: number;
|
|
62
|
+
do_sample: boolean;
|
|
63
|
+
streamer: unknown;
|
|
64
|
+
stopping_criteria?: StoppingCriteriaListInstance;
|
|
41
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Translate engine-level {@link GenerateOptions} into the options object passed
|
|
68
|
+
* to the Transformers.js text-generation pipeline.
|
|
69
|
+
*
|
|
70
|
+
* Exported for unit testing the option-forwarding seam (notably that
|
|
71
|
+
* `stopSequences` is not silently dropped) without downloading a model.
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildPipeOptions(options: GenerateOptions, transformers: Pick<TransformersModule, "StoppingCriteria" | "StoppingCriteriaList">, tokenizer: DecodingTokenizer, streamer: unknown): PipeOptions;
|
|
42
74
|
/**
|
|
43
75
|
* Lazily import @huggingface/transformers.
|
|
44
76
|
* Only loads when actually needed, keeping startup fast when API keys are present.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-engine.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/local-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,eAAe,CAAC;IACrB,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACvC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,YAAY,EAAE,KACZ,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE;QACP,WAAW,EAAE,OAAO,CAAC;QACrB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,KACE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"local-engine.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/local/local-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,70 @@ import { throwIfLocalAIDisabled } from "./env.js";
|
|
|
18
18
|
const logger = serverLogger.component("local-llm");
|
|
19
19
|
/** Default maximum new tokens for local model generation */
|
|
20
20
|
const DEFAULT_MAX_NEW_TOKENS = 512;
|
|
21
|
+
/**
|
|
22
|
+
* Build a StoppingCriteriaList that halts generation as soon as any of the
|
|
23
|
+
* provided stop strings appears in the *newly generated* output.
|
|
24
|
+
*
|
|
25
|
+
* Transformers.js (>=3.x) does not expose a `stop_strings` generate option,
|
|
26
|
+
* so we decode the running sequence with the tokenizer and match the stop
|
|
27
|
+
* strings against the suffix — the documented `stopping_criteria` mechanism.
|
|
28
|
+
*
|
|
29
|
+
* Transformers.js passes the full sequence (prompt + generated tokens) to
|
|
30
|
+
* `_call` on every step. We must scan only the generated suffix: if a system
|
|
31
|
+
* or user message contains a configured stop string (e.g. an instruction that
|
|
32
|
+
* mentions "END"), scanning the whole sequence would return `true` on the very
|
|
33
|
+
* first generation step and truncate the response to empty.
|
|
34
|
+
*
|
|
35
|
+
* The prompt token length is not cheaply known where this list is built (the
|
|
36
|
+
* pipeline tokenizes `messages` internally), so per batch item we self-calibrate
|
|
37
|
+
* on the first `_call`: the sequence length seen on the first invocation is
|
|
38
|
+
* recorded as the prompt boundary, and only tokens at or after that boundary are
|
|
39
|
+
* decoded and matched on subsequent steps.
|
|
40
|
+
*/
|
|
41
|
+
function buildStopStringCriteria(transformers, tokenizer, stopSequences) {
|
|
42
|
+
const list = new transformers.StoppingCriteriaList();
|
|
43
|
+
const base = new transformers.StoppingCriteria();
|
|
44
|
+
const criterion = base;
|
|
45
|
+
// Per-batch-item prompt token length, captured on the first invocation.
|
|
46
|
+
const promptLengths = [];
|
|
47
|
+
criterion._call = (inputIds) => inputIds.map((ids, item) => {
|
|
48
|
+
if (promptLengths[item] === undefined) {
|
|
49
|
+
// First step for this item: everything seen so far is prompt. Record the
|
|
50
|
+
// boundary and never trip on the prompt itself.
|
|
51
|
+
promptLengths[item] = ids.length;
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const generated = ids.slice(promptLengths[item]);
|
|
55
|
+
if (generated.length === 0)
|
|
56
|
+
return false;
|
|
57
|
+
const text = tokenizer.decode(generated);
|
|
58
|
+
return stopSequences.some((stop) => stop.length > 0 && text.includes(stop));
|
|
59
|
+
});
|
|
60
|
+
list.push(criterion);
|
|
61
|
+
return list;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Translate engine-level {@link GenerateOptions} into the options object passed
|
|
65
|
+
* to the Transformers.js text-generation pipeline.
|
|
66
|
+
*
|
|
67
|
+
* Exported for unit testing the option-forwarding seam (notably that
|
|
68
|
+
* `stopSequences` is not silently dropped) without downloading a model.
|
|
69
|
+
*/
|
|
70
|
+
export function buildPipeOptions(options, transformers, tokenizer, streamer) {
|
|
71
|
+
const { maxNewTokens = DEFAULT_MAX_NEW_TOKENS, temperature = 0.7, topP, topK, stopSequences, } = options;
|
|
72
|
+
const pipeOptions = {
|
|
73
|
+
max_new_tokens: maxNewTokens,
|
|
74
|
+
temperature,
|
|
75
|
+
top_p: topP,
|
|
76
|
+
top_k: topK,
|
|
77
|
+
do_sample: temperature > 0,
|
|
78
|
+
streamer,
|
|
79
|
+
};
|
|
80
|
+
if (stopSequences && stopSequences.length > 0) {
|
|
81
|
+
pipeOptions.stopping_criteria = buildStopStringCriteria(transformers, tokenizer, stopSequences);
|
|
82
|
+
}
|
|
83
|
+
return pipeOptions;
|
|
84
|
+
}
|
|
21
85
|
/** Cached pipeline instances keyed by HuggingFace model ID */
|
|
22
86
|
const pipelineCache = new Map();
|
|
23
87
|
/** Whether a model is currently being loaded (prevents concurrent loads) */
|
|
@@ -132,7 +196,6 @@ export async function* generateStream(modelId, messages, options = {}) {
|
|
|
132
196
|
const modelInfo = resolveLocalModel(modelId);
|
|
133
197
|
const pipe = await loadPipeline(modelInfo);
|
|
134
198
|
const transformers = await getTransformers();
|
|
135
|
-
const { maxNewTokens = DEFAULT_MAX_NEW_TOKENS, temperature = 0.7, topP, topK, } = options;
|
|
136
199
|
// Use a queue to bridge TextStreamer callbacks → async generator
|
|
137
200
|
const tokenQueue = [];
|
|
138
201
|
let resolveWaiting = null;
|
|
@@ -151,17 +214,11 @@ export async function* generateStream(modelId, messages, options = {}) {
|
|
|
151
214
|
flushWaiting();
|
|
152
215
|
},
|
|
153
216
|
});
|
|
217
|
+
const pipeOptions = buildPipeOptions(options, transformers, pipe.tokenizer, streamer);
|
|
154
218
|
// Start generation in the background
|
|
155
219
|
const generatePromise = (async () => {
|
|
156
220
|
try {
|
|
157
|
-
await pipe(messages,
|
|
158
|
-
max_new_tokens: maxNewTokens,
|
|
159
|
-
temperature,
|
|
160
|
-
top_p: topP,
|
|
161
|
-
top_k: topK,
|
|
162
|
-
do_sample: temperature > 0,
|
|
163
|
-
streamer,
|
|
164
|
-
});
|
|
221
|
+
await pipe(messages, pipeOptions);
|
|
165
222
|
}
|
|
166
223
|
finally {
|
|
167
224
|
done = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-usage.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/runtime-loader/provider-usage.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAsBhF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAoB7E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAmB7E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAwBtF;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CACxB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,IAAI,EAAE,YAAY,GAAG,SAAS,GAC7B,YAAY,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"provider-usage.d.ts","sourceRoot":"","sources":["../../../../src/src/provider/runtime-loader/provider-usage.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAsBhF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAoB7E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAmB7E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAwBtF;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CACxB,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,IAAI,EAAE,YAAY,GAAG,SAAS,GAC7B,YAAY,GAAG,SAAS,CAkC1B"}
|
|
@@ -100,10 +100,21 @@ export function mergeUsage(current, next) {
|
|
|
100
100
|
const cacheCreationInputTokens = next.cacheCreationInputTokens ??
|
|
101
101
|
current.cacheCreationInputTokens;
|
|
102
102
|
const cacheReadInputTokens = next.cacheReadInputTokens ?? current.cacheReadInputTokens;
|
|
103
|
+
// Prefer the provider-reported total (latest non-undefined wins, matching the
|
|
104
|
+
// ?? semantics used for input/output above). Providers like Gemini 2.5
|
|
105
|
+
// thinking models and OpenAI reasoning models report a total that exceeds
|
|
106
|
+
// input + output because it includes reasoning/thoughts tokens. Recomputing
|
|
107
|
+
// the sum would discard those, undercounting usage. Take the larger of the
|
|
108
|
+
// provider total and the recomputed sum so we never undercount.
|
|
109
|
+
const reportedTotal = next.totalTokens ?? current.totalTokens;
|
|
110
|
+
const recomputedTotal = (inputTokens ?? 0) + (outputTokens ?? 0);
|
|
111
|
+
const totalTokens = reportedTotal !== undefined
|
|
112
|
+
? Math.max(reportedTotal, recomputedTotal)
|
|
113
|
+
: recomputedTotal;
|
|
103
114
|
return {
|
|
104
115
|
inputTokens,
|
|
105
116
|
outputTokens,
|
|
106
|
-
totalTokens
|
|
117
|
+
totalTokens,
|
|
107
118
|
...(cacheCreationInputTokens !== undefined ? { cacheCreationInputTokens } : {}),
|
|
108
119
|
...(cacheReadInputTokens !== undefined ? { cacheReadInputTokens } : {}),
|
|
109
120
|
};
|
|
@@ -2,7 +2,7 @@ import * as React from "../../../../react/react.js";
|
|
|
2
2
|
import { serverLogger } from "../../../utils/index.js";
|
|
3
3
|
import { renderToStringAdapter } from "../../../react/index.js";
|
|
4
4
|
import { getComponentId, isClientComponent, registerClientRef, } from "./component-detector.js";
|
|
5
|
-
import { renderAttributes, treeToHTML } from "./html-generator.js";
|
|
5
|
+
import { escapeHtml, renderAttributes, treeToHTML } from "./html-generator.js";
|
|
6
6
|
import { serializeProps } from "./prop-serializer.js";
|
|
7
7
|
const logger = serverLogger.component("rsc");
|
|
8
8
|
/** Recursively renders a component tree to RSC nodes */
|
|
@@ -10,13 +10,13 @@ export async function renderTree(
|
|
|
10
10
|
// deno-lint-ignore no-explicit-any -- RSC components accept arbitrary props at runtime
|
|
11
11
|
Component, props, clientManifest, clientRefs) {
|
|
12
12
|
if (Component == null || typeof Component === "string" || typeof Component === "number") {
|
|
13
|
-
return { type: "html", html: Component == null ? "" : String(Component) };
|
|
13
|
+
return { type: "html", html: Component == null ? "" : escapeHtml(String(Component)) };
|
|
14
14
|
}
|
|
15
15
|
if (React.isValidElement(Component)) {
|
|
16
16
|
return processElement(Component, clientManifest, clientRefs);
|
|
17
17
|
}
|
|
18
18
|
if (typeof Component !== "function") {
|
|
19
|
-
return { type: "html", html: String(Component) };
|
|
19
|
+
return { type: "html", html: escapeHtml(String(Component)) };
|
|
20
20
|
}
|
|
21
21
|
const rscComponent = Component;
|
|
22
22
|
if (isClientComponent(rscComponent, clientManifest)) {
|
|
@@ -36,7 +36,7 @@ Component, props, clientManifest, clientRefs) {
|
|
|
36
36
|
return { type: "html", html: "" };
|
|
37
37
|
if (React.isValidElement(element))
|
|
38
38
|
return processElement(element, clientManifest, clientRefs);
|
|
39
|
-
return { type: "html", html: String(element) };
|
|
39
|
+
return { type: "html", html: escapeHtml(String(element)) };
|
|
40
40
|
}
|
|
41
41
|
catch (error) {
|
|
42
42
|
logger.error("Error rendering component:", error);
|
|
@@ -76,6 +76,6 @@ export function renderChildren(children, clientManifest, clientRefs) {
|
|
|
76
76
|
if (React.isValidElement(child)) {
|
|
77
77
|
return processElement(child, clientManifest, clientRefs);
|
|
78
78
|
}
|
|
79
|
-
return Promise.resolve({ type: "html", html: String(child) });
|
|
79
|
+
return Promise.resolve({ type: "html", html: escapeHtml(String(child)) });
|
|
80
80
|
}));
|
|
81
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-route-matcher.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/api/api-route-matcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-route-matcher.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/api/api-route-matcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAW9D,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAElC,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,UAAU,CAAsC;;IAUxD,wCAAwC;IACxC,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAEpC;IAED,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAkD7C,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,oBAAoB;IAgB5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAoBtC,OAAO,CAAC,aAAa;IAiCrB,UAAU,IAAI,KAAK,EAAE;IAIrB,KAAK,IAAI,IAAI;IAKb,UAAU,IAAI,IAAI;IAIlB,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
2
2
|
import { getDisableLruIntervalEnv } from "../../config/env.js";
|
|
3
3
|
import { LRUCache } from "../../utils/lru-wrapper.js";
|
|
4
|
+
import { safeDecodeParam } from "../matchers/decode-param.js";
|
|
4
5
|
/** Max entries in the route-match LRU cache */
|
|
5
6
|
const ROUTE_CACHE_MAX_ENTRIES = 500;
|
|
6
7
|
/** Time-to-live for cached route matches (5 minutes) */
|
|
@@ -121,10 +122,10 @@ export class ApiRouteMatcher {
|
|
|
121
122
|
const value = match[i + 1];
|
|
122
123
|
if (catchAllParamNames.has(paramName)) {
|
|
123
124
|
const segments = value ? value.split("/").filter((segment) => segment.length > 0) : [];
|
|
124
|
-
params[paramName] = segments.map((segment) =>
|
|
125
|
+
params[paramName] = segments.map((segment) => safeDecodeParam(segment));
|
|
125
126
|
continue;
|
|
126
127
|
}
|
|
127
|
-
params[paramName] =
|
|
128
|
+
params[paramName] = safeDecodeParam(value ?? "");
|
|
128
129
|
}
|
|
129
130
|
return params;
|
|
130
131
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decode a single URL path segment, tolerating malformed percent-encoding.
|
|
3
|
+
*
|
|
4
|
+
* `decodeURIComponent` throws `URIError` on invalid sequences (e.g. `%zz`).
|
|
5
|
+
* For route param extraction we prefer to fall back to the raw value so a
|
|
6
|
+
* malformed request yields a normal route miss / 4xx instead of crashing.
|
|
7
|
+
*/
|
|
8
|
+
export declare function safeDecodeParam(value: string): string;
|
|
9
|
+
//# sourceMappingURL=decode-param.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode-param.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/matchers/decode-param.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOrD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decode a single URL path segment, tolerating malformed percent-encoding.
|
|
3
|
+
*
|
|
4
|
+
* `decodeURIComponent` throws `URIError` on invalid sequences (e.g. `%zz`).
|
|
5
|
+
* For route param extraction we prefer to fall back to the raw value so a
|
|
6
|
+
* malformed request yields a normal route miss / 4xx instead of crashing.
|
|
7
|
+
*/
|
|
8
|
+
export function safeDecodeParam(value) {
|
|
9
|
+
try {
|
|
10
|
+
return decodeURIComponent(value);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
if (error instanceof URIError)
|
|
14
|
+
return value;
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/matchers/route-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/matchers/route-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0BpD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,CAa5E"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { safeDecodeParam } from "./decode-param.js";
|
|
1
2
|
const CATCH_ALL_PATTERN = /\[\[?\.\.\.(\w+)\]\]?/g;
|
|
2
3
|
function extractCatchAllParams(pattern) {
|
|
3
4
|
const params = new Set();
|
|
@@ -16,7 +17,7 @@ function decodeCatchAllValue(value) {
|
|
|
16
17
|
return value
|
|
17
18
|
.split("/")
|
|
18
19
|
.filter(Boolean)
|
|
19
|
-
.map((segment) =>
|
|
20
|
+
.map((segment) => safeDecodeParam(segment));
|
|
20
21
|
}
|
|
21
22
|
export function matchRoute(pathname, route) {
|
|
22
23
|
const match = pathname.match(route.regex);
|
|
@@ -26,9 +27,7 @@ export function matchRoute(pathname, route) {
|
|
|
26
27
|
const params = {};
|
|
27
28
|
for (const [index, name] of (route.paramNames ?? []).entries()) {
|
|
28
29
|
const value = match[index + 1] ?? "";
|
|
29
|
-
params[name] = catchAllParams.has(name)
|
|
30
|
-
? decodeCatchAllValue(value)
|
|
31
|
-
: decodeURIComponent(value);
|
|
30
|
+
params[name] = catchAllParams.has(name) ? decodeCatchAllValue(value) : safeDecodeParam(value);
|
|
32
31
|
}
|
|
33
32
|
return { params, route };
|
|
34
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-route-matcher.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/slug-mapper/dynamic-route-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"dynamic-route-matcher.d.ts","sourceRoot":"","sources":["../../../../src/src/routing/slug-mapper/dynamic-route-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAkBjE,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAsC/E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAErE"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
export { isDynamicRoute } from "../../utils/route-path-utils.js";
|
|
2
|
+
function isOptionalSpreadParam(part) {
|
|
3
|
+
return part.startsWith("[[...") && part.endsWith("]]");
|
|
4
|
+
}
|
|
2
5
|
function isSpreadParam(part) {
|
|
3
|
-
return part.startsWith("[...") && part.endsWith("]");
|
|
6
|
+
return isOptionalSpreadParam(part) || (part.startsWith("[...") && part.endsWith("]"));
|
|
4
7
|
}
|
|
5
8
|
function isDynamicParam(part) {
|
|
6
9
|
return part.startsWith("[") && part.endsWith("]");
|
|
7
10
|
}
|
|
11
|
+
function spreadParamName(part) {
|
|
12
|
+
return isOptionalSpreadParam(part) ? part.slice(5, -2) : part.slice(4, -1);
|
|
13
|
+
}
|
|
8
14
|
export function extractParams(pattern, slug) {
|
|
9
15
|
const patternParts = pattern.split("/").filter(Boolean);
|
|
10
16
|
const slugParts = slug.split("/").filter(Boolean);
|
|
@@ -16,7 +22,7 @@ export function extractParams(pattern, slug) {
|
|
|
16
22
|
let slugIndex = 0;
|
|
17
23
|
for (const patternPart of patternParts) {
|
|
18
24
|
if (isSpreadParam(patternPart)) {
|
|
19
|
-
const paramName = patternPart
|
|
25
|
+
const paramName = spreadParamName(patternPart);
|
|
20
26
|
params[paramName] = slugParts.slice(slugIndex);
|
|
21
27
|
return params;
|
|
22
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-handler.d.ts","sourceRoot":"","sources":["../../../src/src/server/node-handler.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACtD,CAAC,GAAG,EAAE,OAAO,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,WAAW,EAAE,cAAc,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"node-handler.d.ts","sourceRoot":"","sources":["../../../src/src/server/node-handler.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACtD,CAAC,GAAG,EAAE,OAAO,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,WAAW,EAAE,cAAc,KAAK,IAAI,CAqE7F"}
|
|
@@ -4,12 +4,14 @@ export function toNodeHandler(handler) {
|
|
|
4
4
|
return async (req, res) => {
|
|
5
5
|
try {
|
|
6
6
|
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
7
|
-
const headers =
|
|
7
|
+
const headers = new Headers();
|
|
8
8
|
for (const [key, value] of Object.entries(req.headers)) {
|
|
9
9
|
if (typeof value === "string")
|
|
10
|
-
headers
|
|
11
|
-
else if (Array.isArray(value))
|
|
12
|
-
|
|
10
|
+
headers.append(key, value);
|
|
11
|
+
else if (Array.isArray(value)) {
|
|
12
|
+
for (const entry of value)
|
|
13
|
+
headers.append(key, entry);
|
|
14
|
+
}
|
|
13
15
|
}
|
|
14
16
|
const method = req.method ?? "GET";
|
|
15
17
|
const body = method === "GET" || method === "HEAD" ? null : req;
|
|
@@ -23,7 +25,40 @@ export function toNodeHandler(handler) {
|
|
|
23
25
|
const response = await handler(new Request(url.toString(), init));
|
|
24
26
|
if (response.status === 101)
|
|
25
27
|
return;
|
|
26
|
-
|
|
28
|
+
const outHeaders = {};
|
|
29
|
+
const setCookies = [];
|
|
30
|
+
// Headers.prototype.getSetCookie landed in Node ~18.14, but our published
|
|
31
|
+
// engines.node is ">=18.0.0". On early 18.x it is undefined, so calling it
|
|
32
|
+
// unconditionally throws for every response and turns valid requests into
|
|
33
|
+
// 500s. Feature-detect it and fall back to the header iterator.
|
|
34
|
+
const getSetCookie = response.headers.getSetCookie;
|
|
35
|
+
if (typeof getSetCookie === "function") {
|
|
36
|
+
// Modern path: getSetCookie returns each Set-Cookie as a distinct value.
|
|
37
|
+
setCookies.push(...getSetCookie.call(response.headers));
|
|
38
|
+
for (const [key, value] of response.headers) {
|
|
39
|
+
if (key.toLowerCase() === "set-cookie")
|
|
40
|
+
continue;
|
|
41
|
+
outHeaders[key] = value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Fallback for runtimes without getSetCookie. The undici-based Headers
|
|
46
|
+
// iterator yields each Set-Cookie as its own entry (it is the one header
|
|
47
|
+
// that is NOT comma-joined during iteration), so iterating preserves
|
|
48
|
+
// multiples where the platform allows it. If a runtime does collapse
|
|
49
|
+
// them into a single comma-joined string we still pass that one value
|
|
50
|
+
// through unchanged rather than throwing — degrade gracefully, never 500.
|
|
51
|
+
for (const [key, value] of response.headers) {
|
|
52
|
+
if (key.toLowerCase() === "set-cookie") {
|
|
53
|
+
setCookies.push(value);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
outHeaders[key] = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (setCookies.length > 0)
|
|
60
|
+
outHeaders["Set-Cookie"] = setCookies;
|
|
61
|
+
res.writeHead(response.status, outHeaders);
|
|
27
62
|
if (response.body) {
|
|
28
63
|
const reader = response.body.getReader();
|
|
29
64
|
while (true) {
|