veryfront 0.1.321 → 0.1.322
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.js +1 -1
- package/esm/extensions/ext-jwt/src/index.d.ts +39 -0
- package/esm/extensions/ext-jwt/src/index.d.ts.map +1 -0
- package/esm/extensions/ext-jwt/src/index.js +103 -0
- package/esm/extensions/ext-openai/src/openai-provider.d.ts +29 -0
- package/esm/extensions/ext-openai/src/openai-provider.d.ts.map +1 -0
- package/esm/extensions/ext-openai/src/openai-provider.js +1095 -0
- package/esm/src/embedding/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/embedding/veryfront-cloud/provider.js +6 -1
- package/esm/src/provider/shared/index.d.ts +16 -0
- package/esm/src/provider/shared/index.d.ts.map +1 -0
- package/esm/src/provider/shared/index.js +18 -0
- package/esm/src/provider/veryfront-cloud/openai.d.ts +10 -0
- package/esm/src/provider/veryfront-cloud/openai.d.ts.map +1 -0
- package/esm/src/provider/veryfront-cloud/openai.js +18 -0
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +6 -1
- package/esm/src/proxy/main.js +3 -0
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +2 -1
- package/src/deno.js +1 -1
- package/src/extensions/ext-jwt/src/index.ts +173 -0
- package/src/extensions/ext-openai/src/openai-provider.ts +1481 -0
- package/src/src/embedding/veryfront-cloud/provider.ts +6 -3
- package/src/src/provider/shared/index.ts +62 -0
- package/src/src/provider/veryfront-cloud/openai.ts +34 -0
- package/src/src/provider/veryfront-cloud/provider.ts +6 -3
- package/src/src/proxy/main.ts +4 -0
- package/src/src/utils/version-constant.ts +1 -1
package/esm/deno.js
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jwtVerify } from "jose";
|
|
2
|
+
import type { ExtensionFactory } from "../../../src/extensions/index.js";
|
|
3
|
+
import type { AuthProvider } from "../../../src/extensions/interfaces/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Signature used by jose's verify step to resolve a key for a given header.
|
|
6
|
+
*
|
|
7
|
+
* Matches the shape returned by `createRemoteJWKSet` / `createLocalJWKSet`
|
|
8
|
+
* and lets tests inject an in-memory key set without reaching the network.
|
|
9
|
+
*/
|
|
10
|
+
export type JwksResolver = Parameters<typeof jwtVerify>[1] & object;
|
|
11
|
+
/**
|
|
12
|
+
* Factory for building a JWKS resolver from a URL.
|
|
13
|
+
*
|
|
14
|
+
* The default uses `createRemoteJWKSet`; tests can inject a stub that returns
|
|
15
|
+
* a local resolver bound to an in-memory key set.
|
|
16
|
+
*/
|
|
17
|
+
export type JwksResolverFactory = (jwksUrl: string) => JwksResolver;
|
|
18
|
+
/**
|
|
19
|
+
* Optional configuration for the ext-jwt factory.
|
|
20
|
+
*
|
|
21
|
+
* - `secret`: HMAC secret for `sign`/`verify`. Falls back to the `JWT_SECRET`
|
|
22
|
+
* environment variable. Without one, `sign`/`verify` throw.
|
|
23
|
+
* - `jwksResolverFactory`: test seam that overrides JWKS resolution.
|
|
24
|
+
*/
|
|
25
|
+
export interface ExtJwtConfig {
|
|
26
|
+
secret?: string | Uint8Array;
|
|
27
|
+
jwksResolverFactory?: JwksResolverFactory;
|
|
28
|
+
}
|
|
29
|
+
declare function createAuthProvider(config: ExtJwtConfig): AuthProvider;
|
|
30
|
+
/**
|
|
31
|
+
* Default export — the ext-jwt extension factory.
|
|
32
|
+
*
|
|
33
|
+
* Produces an extension that registers an `AuthProvider` contract
|
|
34
|
+
* implementation backed by `jose`.
|
|
35
|
+
*/
|
|
36
|
+
declare const extJwt: ExtensionFactory;
|
|
37
|
+
export default extJwt;
|
|
38
|
+
export { createAuthProvider };
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-jwt/src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAIL,SAAS,EAGV,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,6CAA6C,CAAC;AAErD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAsBD,iBAAS,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAqE9D;AAED;;;;;GAKG;AACH,QAAA,MAAM,MAAM,EAAE,gBAeb,CAAC;AAEF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ext-jwt — AuthProvider implementation backed by `jose`.
|
|
3
|
+
*
|
|
4
|
+
* Provides the `AuthProvider` contract: sign / verify (HS256 by default),
|
|
5
|
+
* verify-with-remote-JWKS, and decode-header.
|
|
6
|
+
*
|
|
7
|
+
* @module extensions/ext-jwt
|
|
8
|
+
*/
|
|
9
|
+
import * as dntShim from "../../../_dnt.shims.js";
|
|
10
|
+
import { createRemoteJWKSet, decodeProtectedHeader, jwtVerify, SignJWT, } from "jose";
|
|
11
|
+
function defaultJwksResolverFactory(jwksUrl) {
|
|
12
|
+
return createRemoteJWKSet(new URL(jwksUrl));
|
|
13
|
+
}
|
|
14
|
+
function toUint8Array(secret) {
|
|
15
|
+
return typeof secret === "string" ? new TextEncoder().encode(secret) : secret;
|
|
16
|
+
}
|
|
17
|
+
function getSecret(configSecret) {
|
|
18
|
+
if (configSecret !== undefined)
|
|
19
|
+
return toUint8Array(configSecret);
|
|
20
|
+
const env = typeof dntShim.Deno !== "undefined" ? dntShim.Deno.env.get("JWT_SECRET") : undefined;
|
|
21
|
+
if (!env) {
|
|
22
|
+
throw new Error("ext-jwt: no HMAC secret configured. Pass `secret` to the extension " +
|
|
23
|
+
"factory or set the JWT_SECRET environment variable.");
|
|
24
|
+
}
|
|
25
|
+
return new TextEncoder().encode(env);
|
|
26
|
+
}
|
|
27
|
+
function createAuthProvider(config) {
|
|
28
|
+
const jwksResolverFactory = config.jwksResolverFactory ??
|
|
29
|
+
defaultJwksResolverFactory;
|
|
30
|
+
// Cache one resolver per JWKS URL; `createRemoteJWKSet` maintains its own
|
|
31
|
+
// internal key cache with cooldown/rotation semantics, so reusing the
|
|
32
|
+
// same resolver is required for the cache to be effective.
|
|
33
|
+
const jwksResolvers = new Map();
|
|
34
|
+
function getJwksResolver(jwksUrl) {
|
|
35
|
+
const existing = jwksResolvers.get(jwksUrl);
|
|
36
|
+
if (existing)
|
|
37
|
+
return existing;
|
|
38
|
+
const created = jwksResolverFactory(jwksUrl);
|
|
39
|
+
jwksResolvers.set(jwksUrl, created);
|
|
40
|
+
return created;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
async sign(payload, options) {
|
|
44
|
+
const secret = getSecret(config.secret);
|
|
45
|
+
const algorithm = options?.algorithm ?? "HS256";
|
|
46
|
+
const { sub, ...rest } = payload;
|
|
47
|
+
const builder = new SignJWT(rest)
|
|
48
|
+
.setProtectedHeader({ alg: algorithm })
|
|
49
|
+
.setSubject(sub);
|
|
50
|
+
if (options?.expiresIn !== undefined) {
|
|
51
|
+
// jose's setExpirationTime accepts `string | number | Date`.
|
|
52
|
+
builder.setExpirationTime(options.expiresIn);
|
|
53
|
+
}
|
|
54
|
+
return await builder.sign(secret);
|
|
55
|
+
},
|
|
56
|
+
async verify(token, options) {
|
|
57
|
+
const secret = getSecret(config.secret);
|
|
58
|
+
const algorithms = options?.algorithms ?? ["HS256"];
|
|
59
|
+
const { payload } = await jwtVerify(token, secret, { algorithms });
|
|
60
|
+
return payload;
|
|
61
|
+
},
|
|
62
|
+
async verifyWithJwks(token, jwksUrl, options) {
|
|
63
|
+
const resolver = getJwksResolver(jwksUrl);
|
|
64
|
+
const { algorithms, ...rest } = options ?? {};
|
|
65
|
+
const verifyOpts = { ...rest };
|
|
66
|
+
if (algorithms)
|
|
67
|
+
verifyOpts.algorithms = algorithms;
|
|
68
|
+
const { payload } = await jwtVerify(token, resolver, verifyOpts);
|
|
69
|
+
return payload;
|
|
70
|
+
},
|
|
71
|
+
decode(token) {
|
|
72
|
+
try {
|
|
73
|
+
return decodeProtectedHeader(token);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Default export — the ext-jwt extension factory.
|
|
83
|
+
*
|
|
84
|
+
* Produces an extension that registers an `AuthProvider` contract
|
|
85
|
+
* implementation backed by `jose`.
|
|
86
|
+
*/
|
|
87
|
+
const extJwt = (config) => {
|
|
88
|
+
const cfg = (config ?? {});
|
|
89
|
+
const provider = createAuthProvider(cfg);
|
|
90
|
+
return {
|
|
91
|
+
name: "ext-jwt",
|
|
92
|
+
version: "0.1.0",
|
|
93
|
+
capabilities: [
|
|
94
|
+
{ type: "contract", name: "AuthProvider" },
|
|
95
|
+
{ type: "network", host: "*" },
|
|
96
|
+
],
|
|
97
|
+
provides: {
|
|
98
|
+
AuthProvider: provider,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
export default extJwt;
|
|
103
|
+
export { createAuthProvider };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI provider — implements the {@link AIProvider} contract for OpenAI,
|
|
3
|
+
* OpenAI-compatible endpoints (Azure OpenAI, Moonshot AI), and OpenAI's
|
|
4
|
+
* Responses API.
|
|
5
|
+
*
|
|
6
|
+
* Ported from `src/provider/runtime-loader.ts` as part of PR 11.
|
|
7
|
+
*
|
|
8
|
+
* @module extensions/ext-openai/openai-provider
|
|
9
|
+
*/
|
|
10
|
+
import type { AIProvider, AIProviderConfig } from "../../../src/extensions/interfaces/index.js";
|
|
11
|
+
import type { EmbeddingRuntime, ModelRuntime } from "../../../src/provider/types.js";
|
|
12
|
+
import { buildProviderError, isNumberArray, mergeUsage, parseRetryAfterMs, ProviderError, ProviderOverloadedError, ProviderQuotaError, ProviderRateLimitError, ProviderRequestError, TOOL_INPUT_PENDING_THRESHOLD_MS, withToolInputStatusTransitions } from "../../../src/provider/shared/index.js";
|
|
13
|
+
export { buildProviderError, isNumberArray, mergeUsage, parseRetryAfterMs, ProviderError, ProviderOverloadedError, ProviderQuotaError, ProviderRateLimitError, ProviderRequestError, TOOL_INPUT_PENDING_THRESHOLD_MS, withToolInputStatusTransitions, };
|
|
14
|
+
export interface OpenAIRuntimeConfig {
|
|
15
|
+
apiKey: string;
|
|
16
|
+
baseURL?: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
fetch?: typeof globalThis.fetch;
|
|
19
|
+
}
|
|
20
|
+
export declare function createOpenAIModelRuntime(config: OpenAIRuntimeConfig, modelId: string): ModelRuntime;
|
|
21
|
+
export declare function createOpenAIResponsesRuntime(config: OpenAIRuntimeConfig, modelId: string): ModelRuntime;
|
|
22
|
+
export declare function createOpenAIEmbeddingRuntime(config: OpenAIRuntimeConfig, modelId: string): EmbeddingRuntime;
|
|
23
|
+
export declare class OpenAIProvider implements AIProvider {
|
|
24
|
+
readonly id = "openai";
|
|
25
|
+
createModel(modelId: string, config: AIProviderConfig): ModelRuntime;
|
|
26
|
+
createEmbedding(modelId: string, config: AIProviderConfig): EmbeddingRuntime;
|
|
27
|
+
createResponses(modelId: string, config: AIProviderConfig): ModelRuntime;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=openai-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-provider.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-openai/src/openai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EACL,kBAAkB,EAMlB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EAOpB,+BAA+B,EAG/B,8BAA8B,EAC/B,MAAM,uCAAuC,CAAC;AAI/C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,8BAA8B,GAC/B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAoqCD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAsEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,YAAY,CAsEd;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAuClB;AAED,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,EAAE,YAAY;IAEvB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,YAAY;IAYpE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,gBAAgB;IAY5E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,YAAY;CAWzE"}
|