@webiny/api-core 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a4f3e4ea8b
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/exports/api.d.ts +1 -1
- package/exports/api.js +1 -1
- package/features/ai/Ai.d.ts +3 -1
- package/features/ai/Ai.js +22 -24
- package/features/ai/Ai.js.map +1 -1
- package/features/ai/AiModelRegistry.d.ts +12 -0
- package/features/ai/AiModelRegistry.js +30 -0
- package/features/ai/AiModelRegistry.js.map +1 -0
- package/features/ai/AnthropicSdkFactory.js +24 -4
- package/features/ai/AnthropicSdkFactory.js.map +1 -1
- package/features/ai/DEVELOPERS.md +126 -0
- package/features/ai/GoogleSdkFactory.d.ts +10 -0
- package/features/ai/GoogleSdkFactory.js +65 -0
- package/features/ai/GoogleSdkFactory.js.map +1 -0
- package/features/ai/OpenAiSdkFactory.js +67 -11
- package/features/ai/OpenAiSdkFactory.js.map +1 -1
- package/features/ai/abstractions.d.ts +12 -0
- package/features/ai/abstractions.js +2 -1
- package/features/ai/abstractions.js.map +1 -1
- package/features/ai/feature.js +4 -0
- package/features/ai/feature.js.map +1 -1
- package/features/ai/index.d.ts +2 -2
- package/features/ai/index.js +1 -1
- package/features/security/roles/Installer/RolesInstaller.js +1 -0
- package/features/security/roles/Installer/RolesInstaller.js.map +1 -1
- package/features/wcp/WcpContext/WcpContext.d.ts +0 -1
- package/features/wcp/WcpContext/WcpContext.js +0 -3
- package/features/wcp/WcpContext/WcpContext.js.map +1 -1
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +0 -4
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +0 -7
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
- package/graphql/wcp/graphql.js +0 -1
- package/graphql/wcp/graphql.js.map +1 -1
- package/legacy/wcp/LegacyWcpContext.d.ts +0 -1
- package/legacy/wcp/LegacyWcpContext.js +0 -3
- package/legacy/wcp/LegacyWcpContext.js.map +1 -1
- package/package.json +17 -16
package/exports/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AiSdk, AiSdkFactory, AiSdkTool, AiConnectionFactory, Ai } from "../features/ai/index.js";
|
|
1
|
+
export { AiSdk, AiSdkFactory, AiSdkTool, AiConnectionFactory, Ai, AiModelRegistry } from "../features/ai/index.js";
|
|
2
2
|
export type { IAiConnection, IAiConnectionInline } from "../features/ai/index.js";
|
|
3
3
|
export { Logger } from "../features/logger/index.js";
|
|
4
4
|
export { Encryption } from "../features/encryption/index.js";
|
package/exports/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Ai, AiConnectionFactory, AiSdk, AiSdkFactory, AiSdkTool } from "../features/ai/index.js";
|
|
1
|
+
export { Ai, AiConnectionFactory, AiModelRegistry, AiSdk, AiSdkFactory, AiSdkTool } from "../features/ai/index.js";
|
|
2
2
|
export { Logger } from "../features/logger/index.js";
|
|
3
3
|
export { Encryption } from "../features/encryption/index.js";
|
|
4
4
|
export { BuildParam, BuildParams } from "../features/buildParams/index.js";
|
package/features/ai/Ai.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { streamText } from "ai";
|
|
|
3
3
|
import { Ai as AiAbstraction } from "./abstractions.js";
|
|
4
4
|
import { AiSdkFactory } from "./abstractions.js";
|
|
5
5
|
import { AiConnectionFactory } from "./abstractions.js";
|
|
6
|
+
import { AiModelRegistry } from "./abstractions.js";
|
|
6
7
|
import type { AiGenerateTextParams, AiModel } from "./abstractions.js";
|
|
7
8
|
import type { AiStreamTextParams } from "./abstractions.js";
|
|
8
9
|
import type { IAiConnectionInline } from "./abstractions.js";
|
|
@@ -11,9 +12,10 @@ declare class AiImpl implements AiAbstraction.Interface {
|
|
|
11
12
|
private readonly sdkFactories;
|
|
12
13
|
private readonly connectionFactories;
|
|
13
14
|
private readonly eventPublisher;
|
|
15
|
+
private readonly modelRegistry;
|
|
14
16
|
private sdkCache;
|
|
15
17
|
private resolvedConnections;
|
|
16
|
-
constructor(sdkFactories: AiSdkFactory.Interface[], connectionFactories: AiConnectionFactory.Interface[], eventPublisher: EventPublisher.Interface);
|
|
18
|
+
constructor(sdkFactories: AiSdkFactory.Interface[], connectionFactories: AiConnectionFactory.Interface[], eventPublisher: EventPublisher.Interface, modelRegistry: AiModelRegistry.Interface);
|
|
17
19
|
generateText(params: AiGenerateTextParams): ReturnType<typeof generateText>;
|
|
18
20
|
streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>>;
|
|
19
21
|
listModels(): Promise<AiModel[]>;
|
package/features/ai/Ai.js
CHANGED
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
import { createImplementation } from "@webiny/feature/api";
|
|
2
2
|
import { generateText, streamText } from "ai";
|
|
3
|
-
import { Ai, AiConnectionFactory, AiSdkFactory } from "./abstractions.js";
|
|
3
|
+
import { Ai, AiConnectionFactory, AiModelRegistry, AiSdkFactory } from "./abstractions.js";
|
|
4
4
|
import { mdbid } from "@webiny/utils/mdbid.js";
|
|
5
5
|
import { EventPublisher } from "../eventPublisher/index.js";
|
|
6
6
|
import { AiAfterGenerateTextEvent, AiBeforeGenerateTextEvent, AiBeforeStreamTextEvent, AiGenerateTextErrorEvent } from "./events.js";
|
|
7
|
-
function toAiModel(factory, modelId, modelName) {
|
|
8
|
-
return {
|
|
9
|
-
providerId: factory.id,
|
|
10
|
-
providerName: factory.name,
|
|
11
|
-
modelId,
|
|
12
|
-
modelName
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
7
|
class AiImpl {
|
|
16
|
-
constructor(sdkFactories, connectionFactories, eventPublisher){
|
|
8
|
+
constructor(sdkFactories, connectionFactories, eventPublisher, modelRegistry){
|
|
17
9
|
this.sdkFactories = sdkFactories;
|
|
18
10
|
this.connectionFactories = connectionFactories;
|
|
19
11
|
this.eventPublisher = eventPublisher;
|
|
12
|
+
this.modelRegistry = modelRegistry;
|
|
20
13
|
this.sdkCache = new Map();
|
|
21
14
|
this.resolvedConnections = null;
|
|
22
15
|
}
|
|
@@ -66,30 +59,34 @@ class AiImpl {
|
|
|
66
59
|
});
|
|
67
60
|
}
|
|
68
61
|
listModels() {
|
|
69
|
-
return
|
|
62
|
+
return this.modelRegistry.listModels();
|
|
70
63
|
}
|
|
71
64
|
async listModelsByConnections() {
|
|
72
|
-
const connections = await
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
const [connections, models] = await Promise.all([
|
|
66
|
+
this.getConnections(),
|
|
67
|
+
this.modelRegistry.listModels()
|
|
68
|
+
]);
|
|
69
|
+
const connectedProviderIds = new Set(connections.map((c)=>c.sdkName));
|
|
70
|
+
return models.filter((m)=>connectedProviderIds.has(m.providerId));
|
|
78
71
|
}
|
|
79
72
|
async listModelsByConnection(connection) {
|
|
80
|
-
const conn = await
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
73
|
+
const [conn, models] = await Promise.all([
|
|
74
|
+
this.resolveConnection(void 0, connection),
|
|
75
|
+
this.modelRegistry.listModels()
|
|
76
|
+
]);
|
|
77
|
+
return models.filter((m)=>m.providerId === conn.sdkName);
|
|
84
78
|
}
|
|
85
79
|
async resolveLanguageModel(modelId, connection) {
|
|
86
80
|
const slashIndex = modelId.indexOf("/");
|
|
87
81
|
if (-1 === slashIndex) throw new Error(`Invalid model ID "${modelId}". Expected format: "<providerId>/<modelId>" (e.g. "openai/gpt-4o").`);
|
|
88
82
|
const providerId = modelId.slice(0, slashIndex);
|
|
89
|
-
const
|
|
83
|
+
const rawModelId = modelId.slice(slashIndex + 1);
|
|
84
|
+
const models = await this.modelRegistry.listModels();
|
|
85
|
+
const found = models.some((m)=>m.providerId === providerId && m.modelId === rawModelId);
|
|
86
|
+
if (!found) throw new Error(`Model "${modelId}" is not available. Use listModels() to see available models.`);
|
|
90
87
|
const conn = await this.resolveConnection(providerId, connection);
|
|
91
88
|
const sdk = await this.getSdk(conn);
|
|
92
|
-
return sdk.languageModel(
|
|
89
|
+
return sdk.languageModel(rawModelId);
|
|
93
90
|
}
|
|
94
91
|
async getConnections() {
|
|
95
92
|
if (!this.resolvedConnections) this.resolvedConnections = await Promise.all(this.connectionFactories.map((f)=>f.execute()));
|
|
@@ -143,7 +140,8 @@ const Ai_Ai = createImplementation({
|
|
|
143
140
|
multiple: true
|
|
144
141
|
}
|
|
145
142
|
],
|
|
146
|
-
EventPublisher
|
|
143
|
+
EventPublisher,
|
|
144
|
+
AiModelRegistry
|
|
147
145
|
]
|
|
148
146
|
});
|
|
149
147
|
export { Ai_Ai as Ai };
|
package/features/ai/Ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/ai/Ai.js","sources":["../../../src/features/ai/Ai.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { generateText } from \"ai\";\nimport { streamText } from \"ai\";\nimport { Ai as AiAbstraction } from \"./abstractions.js\";\nimport { AiSdkFactory } from \"./abstractions.js\";\nimport { AiConnectionFactory } from \"./abstractions.js\";\nimport type { AiGenerateTextParams, AiModel, IAiSdkFactory } from \"./abstractions.js\";\nimport type { AiStreamTextParams } from \"./abstractions.js\";\nimport type { IAiSdk } from \"./abstractions.js\";\nimport type { IAiConnection } from \"./abstractions.js\";\nimport type { IAiConnectionInline } from \"./abstractions.js\";\nimport type { LanguageModel } from \"ai\";\nimport { mdbid } from \"@webiny/utils/mdbid.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport {\n AiBeforeGenerateTextEvent,\n AiAfterGenerateTextEvent,\n AiGenerateTextErrorEvent,\n AiBeforeStreamTextEvent\n} from \"./events.js\";\n\nfunction toAiModel(factory: IAiSdkFactory, modelId: string, modelName: string): AiModel {\n return {\n providerId: factory.id,\n providerName: factory.name,\n modelId,\n modelName\n };\n}\n\nclass AiImpl implements AiAbstraction.Interface {\n private sdkCache = new Map<string, IAiSdk>();\n private resolvedConnections: IAiConnection[] | null = null;\n\n constructor(\n private readonly sdkFactories: AiSdkFactory.Interface[],\n private readonly connectionFactories: AiConnectionFactory.Interface[],\n private readonly eventPublisher: EventPublisher.Interface\n ) {}\n\n async generateText(params: AiGenerateTextParams): ReturnType<typeof generateText> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n const requestId = mdbid();\n\n await this.eventPublisher.publish(new AiBeforeGenerateTextEvent({ requestId, params }));\n\n const start = performance.now();\n\n try {\n const result = await generateText({ model: resolvedModel, ...rest } as Parameters<\n typeof generateText\n >[0]);\n\n const duration = performance.now() - start;\n\n await this.eventPublisher.publish(\n new AiAfterGenerateTextEvent({ requestId, params, result, duration })\n );\n\n return result;\n } catch (err) {\n const duration = performance.now() - start;\n const error = err instanceof Error ? err : new Error(String(err));\n\n await this.eventPublisher.publish(\n new AiGenerateTextErrorEvent({ requestId, params, error, duration })\n );\n\n throw err;\n }\n }\n\n async streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n\n await this.eventPublisher.publish(new AiBeforeStreamTextEvent({ params }));\n\n // Cast required: spreading the discriminated Prompt union loses its narrowing.\n return streamText({ model: resolvedModel, ...rest } as Parameters<typeof streamText>[0]);\n }\n\n listModels(): Promise<AiModel[]> {\n return Promise.resolve(\n this.sdkFactories.flatMap(factory =>\n factory.models.map(m => toAiModel(factory, m.id, m.name))\n )\n );\n }\n\n async listModelsByConnections(): Promise<AiModel[]> {\n const connections = await this.getConnections();\n return connections.flatMap(conn => {\n const factory = this.sdkFactories.find(f => f.id === conn.sdkName);\n if (!factory) {\n return [];\n }\n return factory.models.map(m => toAiModel(factory, m.id, m.name));\n });\n }\n\n async listModelsByConnection(connection: string | IAiConnectionInline): Promise<AiModel[]> {\n const conn = await this.resolveConnection(undefined, connection);\n const factory = this.sdkFactories.find(f => f.id === conn.sdkName);\n if (!factory) {\n return [];\n }\n return factory.models.map(m => toAiModel(factory, m.id, m.name));\n }\n\n private async resolveLanguageModel(\n modelId: string,\n connection?: string | IAiConnectionInline\n ): Promise<LanguageModel> {\n const slashIndex = modelId.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${modelId}\". Expected format: \"<providerId>/<modelId>\" (e.g. \"openai/gpt-4o\").`\n );\n }\n\n const providerId = modelId.slice(0, slashIndex);\n const modelName = modelId.slice(slashIndex + 1);\n\n const conn = await this.resolveConnection(providerId, connection);\n const sdk = await this.getSdk(conn);\n return sdk.languageModel(modelName);\n }\n\n private async getConnections(): Promise<IAiConnection[]> {\n if (!this.resolvedConnections) {\n this.resolvedConnections = await Promise.all(\n this.connectionFactories.map(f => f.execute())\n );\n }\n return this.resolvedConnections;\n }\n\n private async resolveConnection(\n providerId: string | undefined,\n connection?: string | IAiConnectionInline\n ): Promise<IAiConnectionInline> {\n if (typeof connection === \"object\") {\n return connection;\n }\n\n const connections = await this.getConnections();\n\n if (typeof connection === \"string\") {\n const found = connections.find(c => c.id === connection);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\"`).join(\", \");\n throw new Error(\n `Unknown AI connection \"${connection}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n const found = connections.find(c => c.sdkName === providerId);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\" (${c.sdkName})`).join(\", \");\n throw new Error(\n `No AI connection found for provider \"${providerId}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n private async getSdk(connection: IAiConnectionInline): Promise<IAiSdk> {\n const cacheKey =\n \"id\" in connection\n ? (connection as IAiConnection).id\n : `${connection.sdkName}:${connection.apiKey ?? \"__env__\"}`;\n\n const cached = this.sdkCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const factory = this.sdkFactories.find(f => f.id === connection.sdkName);\n if (!factory) {\n const known = this.sdkFactories.map(f => `\"${f.id}\"`).join(\", \");\n throw new Error(\n `No AI SDK factory found for \"${connection.sdkName}\". Registered factories: ${known}.`\n );\n }\n\n const sdk = await factory.execute(connection.apiKey);\n this.sdkCache.set(cacheKey, sdk);\n return sdk;\n }\n}\n\nexport const Ai = createImplementation({\n abstraction: AiAbstraction,\n implementation: AiImpl,\n dependencies: [\n [AiSdkFactory, { multiple: true }],\n [AiConnectionFactory, { multiple: true }],\n EventPublisher\n ]\n});\n"],"names":["toAiModel","factory","modelId","modelName","AiImpl","sdkFactories","connectionFactories","eventPublisher","Map","params","model","connection","rest","resolvedModel","requestId","mdbid","AiBeforeGenerateTextEvent","start","performance","result","generateText","duration","AiAfterGenerateTextEvent","err","error","Error","String","AiGenerateTextErrorEvent","AiBeforeStreamTextEvent","streamText","Promise","m","connections","conn","f","undefined","slashIndex","providerId","sdk","found","c","known","cacheKey","cached","Ai","createImplementation","AiAbstraction","AiSdkFactory","AiConnectionFactory","EventPublisher"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/ai/Ai.js","sources":["../../../src/features/ai/Ai.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { generateText } from \"ai\";\nimport { streamText } from \"ai\";\nimport { Ai as AiAbstraction } from \"./abstractions.js\";\nimport { AiSdkFactory } from \"./abstractions.js\";\nimport { AiConnectionFactory } from \"./abstractions.js\";\nimport { AiModelRegistry } from \"./abstractions.js\";\nimport type { AiGenerateTextParams, AiModel } from \"./abstractions.js\";\nimport type { AiStreamTextParams } from \"./abstractions.js\";\nimport type { IAiSdk } from \"./abstractions.js\";\nimport type { IAiConnection } from \"./abstractions.js\";\nimport type { IAiConnectionInline } from \"./abstractions.js\";\nimport type { LanguageModel } from \"ai\";\nimport { mdbid } from \"@webiny/utils/mdbid.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport {\n AiBeforeGenerateTextEvent,\n AiAfterGenerateTextEvent,\n AiGenerateTextErrorEvent,\n AiBeforeStreamTextEvent\n} from \"./events.js\";\n\nclass AiImpl implements AiAbstraction.Interface {\n private sdkCache = new Map<string, IAiSdk>();\n private resolvedConnections: IAiConnection[] | null = null;\n\n constructor(\n private readonly sdkFactories: AiSdkFactory.Interface[],\n private readonly connectionFactories: AiConnectionFactory.Interface[],\n private readonly eventPublisher: EventPublisher.Interface,\n private readonly modelRegistry: AiModelRegistry.Interface\n ) {}\n\n async generateText(params: AiGenerateTextParams): ReturnType<typeof generateText> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n const requestId = mdbid();\n\n await this.eventPublisher.publish(new AiBeforeGenerateTextEvent({ requestId, params }));\n\n const start = performance.now();\n\n try {\n const result = await generateText({ model: resolvedModel, ...rest } as Parameters<\n typeof generateText\n >[0]);\n\n const duration = performance.now() - start;\n\n await this.eventPublisher.publish(\n new AiAfterGenerateTextEvent({ requestId, params, result, duration })\n );\n\n return result;\n } catch (err) {\n const duration = performance.now() - start;\n const error = err instanceof Error ? err : new Error(String(err));\n\n await this.eventPublisher.publish(\n new AiGenerateTextErrorEvent({ requestId, params, error, duration })\n );\n\n throw err;\n }\n }\n\n async streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n\n await this.eventPublisher.publish(new AiBeforeStreamTextEvent({ params }));\n\n // Cast required: spreading the discriminated Prompt union loses its narrowing.\n return streamText({ model: resolvedModel, ...rest } as Parameters<typeof streamText>[0]);\n }\n\n listModels(): Promise<AiModel[]> {\n return this.modelRegistry.listModels();\n }\n\n async listModelsByConnections(): Promise<AiModel[]> {\n const [connections, models] = await Promise.all([\n this.getConnections(),\n this.modelRegistry.listModels()\n ]);\n const connectedProviderIds = new Set(connections.map(c => c.sdkName));\n return models.filter(m => connectedProviderIds.has(m.providerId));\n }\n\n async listModelsByConnection(connection: string | IAiConnectionInline): Promise<AiModel[]> {\n const [conn, models] = await Promise.all([\n this.resolveConnection(undefined, connection),\n this.modelRegistry.listModels()\n ]);\n return models.filter(m => m.providerId === conn.sdkName);\n }\n\n private async resolveLanguageModel(\n modelId: string,\n connection?: string | IAiConnectionInline\n ): Promise<LanguageModel> {\n const slashIndex = modelId.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${modelId}\". Expected format: \"<providerId>/<modelId>\" (e.g. \"openai/gpt-4o\").`\n );\n }\n\n const providerId = modelId.slice(0, slashIndex);\n const rawModelId = modelId.slice(slashIndex + 1);\n\n const models = await this.modelRegistry.listModels();\n const found = models.some(m => m.providerId === providerId && m.modelId === rawModelId);\n if (!found) {\n throw new Error(\n `Model \"${modelId}\" is not available. Use listModels() to see available models.`\n );\n }\n\n const conn = await this.resolveConnection(providerId, connection);\n const sdk = await this.getSdk(conn);\n return sdk.languageModel(rawModelId);\n }\n\n private async getConnections(): Promise<IAiConnection[]> {\n if (!this.resolvedConnections) {\n this.resolvedConnections = await Promise.all(\n this.connectionFactories.map(f => f.execute())\n );\n }\n return this.resolvedConnections;\n }\n\n private async resolveConnection(\n providerId: string | undefined,\n connection?: string | IAiConnectionInline\n ): Promise<IAiConnectionInline> {\n if (typeof connection === \"object\") {\n return connection;\n }\n\n const connections = await this.getConnections();\n\n if (typeof connection === \"string\") {\n const found = connections.find(c => c.id === connection);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\"`).join(\", \");\n throw new Error(\n `Unknown AI connection \"${connection}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n const found = connections.find(c => c.sdkName === providerId);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\" (${c.sdkName})`).join(\", \");\n throw new Error(\n `No AI connection found for provider \"${providerId}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n private async getSdk(connection: IAiConnectionInline): Promise<IAiSdk> {\n const cacheKey =\n \"id\" in connection\n ? (connection as IAiConnection).id\n : `${connection.sdkName}:${connection.apiKey ?? \"__env__\"}`;\n\n const cached = this.sdkCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const factory = this.sdkFactories.find(f => f.id === connection.sdkName);\n if (!factory) {\n const known = this.sdkFactories.map(f => `\"${f.id}\"`).join(\", \");\n throw new Error(\n `No AI SDK factory found for \"${connection.sdkName}\". Registered factories: ${known}.`\n );\n }\n\n const sdk = await factory.execute(connection.apiKey);\n this.sdkCache.set(cacheKey, sdk);\n return sdk;\n }\n}\n\nexport const Ai = createImplementation({\n abstraction: AiAbstraction,\n implementation: AiImpl,\n dependencies: [\n [AiSdkFactory, { multiple: true }],\n [AiConnectionFactory, { multiple: true }],\n EventPublisher,\n AiModelRegistry\n ]\n});\n"],"names":["AiImpl","sdkFactories","connectionFactories","eventPublisher","modelRegistry","Map","params","model","connection","rest","resolvedModel","requestId","mdbid","AiBeforeGenerateTextEvent","start","performance","result","generateText","duration","AiAfterGenerateTextEvent","err","error","Error","String","AiGenerateTextErrorEvent","AiBeforeStreamTextEvent","streamText","connections","models","Promise","connectedProviderIds","Set","c","m","conn","undefined","modelId","slashIndex","providerId","rawModelId","found","sdk","f","known","cacheKey","cached","factory","Ai","createImplementation","AiAbstraction","AiSdkFactory","AiConnectionFactory","EventPublisher","AiModelRegistry"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AiModelRegistry as AiModelRegistryAbstraction } from "./abstractions.js";
|
|
2
|
+
import { AiSdkFactory } from "./abstractions.js";
|
|
3
|
+
import type { AiModel } from "./abstractions.js";
|
|
4
|
+
declare class AiModelRegistryImpl implements AiModelRegistryAbstraction.Interface {
|
|
5
|
+
private readonly sdkFactories;
|
|
6
|
+
constructor(sdkFactories: AiSdkFactory.Interface[]);
|
|
7
|
+
listModels(): Promise<AiModel[]>;
|
|
8
|
+
}
|
|
9
|
+
export declare const AiModelRegistry: typeof AiModelRegistryImpl & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IAiModelRegistry>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AiModelRegistry, AiSdkFactory } from "./abstractions.js";
|
|
2
|
+
class AiModelRegistryImpl {
|
|
3
|
+
constructor(sdkFactories){
|
|
4
|
+
this.sdkFactories = sdkFactories;
|
|
5
|
+
}
|
|
6
|
+
async listModels() {
|
|
7
|
+
return this.sdkFactories.flatMap((factory)=>factory.models.map((m)=>({
|
|
8
|
+
providerId: factory.id,
|
|
9
|
+
providerName: factory.name,
|
|
10
|
+
modelId: m.id,
|
|
11
|
+
modelName: m.name,
|
|
12
|
+
deprecated: m.deprecated,
|
|
13
|
+
endOfLife: m.endOfLife
|
|
14
|
+
})));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const AiModelRegistry_AiModelRegistry = AiModelRegistry.createImplementation({
|
|
18
|
+
implementation: AiModelRegistryImpl,
|
|
19
|
+
dependencies: [
|
|
20
|
+
[
|
|
21
|
+
AiSdkFactory,
|
|
22
|
+
{
|
|
23
|
+
multiple: true
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
export { AiModelRegistry_AiModelRegistry as AiModelRegistry };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=AiModelRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ai/AiModelRegistry.js","sources":["../../../src/features/ai/AiModelRegistry.ts"],"sourcesContent":["import { AiModelRegistry as AiModelRegistryAbstraction } from \"./abstractions.js\";\nimport { AiSdkFactory } from \"./abstractions.js\";\nimport type { AiModel } from \"./abstractions.js\";\n\nclass AiModelRegistryImpl implements AiModelRegistryAbstraction.Interface {\n constructor(private readonly sdkFactories: AiSdkFactory.Interface[]) {}\n\n async listModels(): Promise<AiModel[]> {\n return this.sdkFactories.flatMap(factory =>\n factory.models.map(m => ({\n providerId: factory.id,\n providerName: factory.name,\n modelId: m.id,\n modelName: m.name,\n deprecated: m.deprecated,\n endOfLife: m.endOfLife\n }))\n );\n }\n}\n\nexport const AiModelRegistry = AiModelRegistryAbstraction.createImplementation({\n implementation: AiModelRegistryImpl,\n dependencies: [[AiSdkFactory, { multiple: true }]]\n});\n"],"names":["AiModelRegistryImpl","sdkFactories","factory","m","AiModelRegistry","AiModelRegistryAbstraction","AiSdkFactory"],"mappings":";AAIA,MAAMA;IACF,YAA6BC,YAAsC,CAAE;aAAxCA,YAAY,GAAZA;IAAyC;IAEtE,MAAM,aAAiC;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAACC,CAAAA,UAC7BA,QAAQ,MAAM,CAAC,GAAG,CAACC,CAAAA,IAAM;oBACrB,YAAYD,QAAQ,EAAE;oBACtB,cAAcA,QAAQ,IAAI;oBAC1B,SAASC,EAAE,EAAE;oBACb,WAAWA,EAAE,IAAI;oBACjB,YAAYA,EAAE,UAAU;oBACxB,WAAWA,EAAE,SAAS;gBAC1B;IAER;AACJ;AAEO,MAAMC,kCAAkBC,gBAAAA,oBAA+C,CAAC;IAC3E,gBAAgBL;IAChB,cAAc;QAAC;YAACM;YAAc;gBAAE,UAAU;YAAK;SAAE;KAAC;AACtD"}
|
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import { createImplementation } from "@webiny/feature/api";
|
|
2
2
|
import { AiSdkFactory } from "./abstractions.js";
|
|
3
3
|
const ANTHROPIC_MODELS = [
|
|
4
|
+
{
|
|
5
|
+
id: "claude-fable-5-1",
|
|
6
|
+
name: "Claude Fable 5.1"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
id: "claude-opus-5",
|
|
10
|
+
name: "Claude Opus 5"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: "claude-sonnet-5",
|
|
14
|
+
name: "Claude Sonnet 5"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "claude-haiku-4-5",
|
|
18
|
+
name: "Claude Haiku 4.5"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "claude-fable-5",
|
|
22
|
+
name: "Claude Fable 5"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "claude-opus-4-8",
|
|
26
|
+
name: "Claude Opus 4.8"
|
|
27
|
+
},
|
|
4
28
|
{
|
|
5
29
|
id: "claude-opus-4-7",
|
|
6
30
|
name: "Claude Opus 4.7"
|
|
@@ -20,10 +44,6 @@ const ANTHROPIC_MODELS = [
|
|
|
20
44
|
{
|
|
21
45
|
id: "claude-sonnet-4-5",
|
|
22
46
|
name: "Claude Sonnet 4.5"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
id: "claude-haiku-4-5",
|
|
26
|
-
name: "Claude Haiku 4.5"
|
|
27
47
|
}
|
|
28
48
|
];
|
|
29
49
|
class AnthropicSdkFactoryImpl {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/ai/AnthropicSdkFactory.js","sources":["../../../src/features/ai/AnthropicSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst ANTHROPIC_MODELS: IAiSdkModel[] = [\n { id: \"claude-opus-4-
|
|
1
|
+
{"version":3,"file":"features/ai/AnthropicSdkFactory.js","sources":["../../../src/features/ai/AnthropicSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst ANTHROPIC_MODELS: IAiSdkModel[] = [\n { id: \"claude-fable-5-1\", name: \"Claude Fable 5.1\" },\n { id: \"claude-opus-5\", name: \"Claude Opus 5\" },\n { id: \"claude-sonnet-5\", name: \"Claude Sonnet 5\" },\n { id: \"claude-haiku-4-5\", name: \"Claude Haiku 4.5\" },\n { id: \"claude-fable-5\", name: \"Claude Fable 5\" },\n { id: \"claude-opus-4-8\", name: \"Claude Opus 4.8\" },\n { id: \"claude-opus-4-7\", name: \"Claude Opus 4.7\" },\n { id: \"claude-opus-4-6\", name: \"Claude Opus 4.6\" },\n { id: \"claude-opus-4-5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n { id: \"claude-sonnet-4-5\", name: \"Claude Sonnet 4.5\" }\n];\n\nclass AnthropicSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"anthropic\";\n readonly name = \"Anthropic\";\n readonly models = ANTHROPIC_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createAnthropic } = await import(\"@ai-sdk/anthropic\");\n const provider = createAnthropic({\n apiKey: apiKey ?? process.env.WEBINY_API_ANTHROPIC_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const AnthropicSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: AnthropicSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["ANTHROPIC_MODELS","AnthropicSdkFactoryImpl","apiKey","createAnthropic","provider","process","modelId","AnthropicSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":";;AAIA,MAAMA,mBAAkC;IACpC;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAiB,MAAM;IAAgB;IAC7C;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAkB,MAAM;IAAiB;IAC/C;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAqB,MAAM;IAAoB;IACrD;QAAE,IAAI;QAAqB,MAAM;IAAoB;CACxD;AAED,MAAMC;IAKF,MAAM,QAAQC,MAAe,EAAmB;QAC5C,MAAM,EAAEC,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC;QACzC,MAAMC,WAAWD,gBAAgB;YAC7B,QAAQD,UAAUG,QAAQ,GAAG,CAAC,4BAA4B;QAC9D;QACA,OAAO;YACH,eAAeC,CAAAA,UAAWF,SAAS,IAAI,CAACE;QAC5C;IACJ;;aAZS,EAAE,GAAG;aACL,IAAI,GAAG;aACP,MAAM,GAAGN;;AAWtB;AAEO,MAAMO,sBAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# AI Models
|
|
2
|
+
|
|
3
|
+
This directory contains the AI SDK factory implementations that define which models are available in Webiny's AI Powerups.
|
|
4
|
+
|
|
5
|
+
## Selection criteria
|
|
6
|
+
|
|
7
|
+
Every model listed in a factory **must** support:
|
|
8
|
+
|
|
9
|
+
- **Tool/function calling** — AI Powerups relies on tools for structured output (content generation, entry comparison, image enrichment, etc.). Models without tool support will break these features at runtime.
|
|
10
|
+
- **Chat/text generation** — only conversational models are listed; embedding, image-generation, TTS, and other specialized models are excluded.
|
|
11
|
+
- **General availability** — preview-only models are excluded unless they fill a gap no GA model covers.
|
|
12
|
+
|
|
13
|
+
Models are ordered newest-first within each factory. Deprecated models that still work via the provider API are kept at the bottom of the list so existing user presets don't break.
|
|
14
|
+
|
|
15
|
+
## Model lifecycle
|
|
16
|
+
|
|
17
|
+
Each model entry in `IAiSdkModel` supports two optional `Date` fields:
|
|
18
|
+
|
|
19
|
+
- **`deprecated`** — the date the provider officially deprecated the model. The model still works but is no longer recommended.
|
|
20
|
+
- **`endOfLife`** — the date the provider will shut down the model. After this date, API requests to the model will fail.
|
|
21
|
+
|
|
22
|
+
Set these fields when the provider announces deprecation or end-of-life dates. The UI can use them to warn users about upcoming shutdowns or steer them toward replacements.
|
|
23
|
+
|
|
24
|
+
When a model reaches its `endOfLife` date, remove it from the factory in the next release — keeping it would cause runtime failures.
|
|
25
|
+
|
|
26
|
+
## Providers
|
|
27
|
+
|
|
28
|
+
### Anthropic (`AnthropicSdkFactory.ts`)
|
|
29
|
+
|
|
30
|
+
All Anthropic models listed are **Active**. Anthropic commits to a "not sooner than" retirement date but does not deprecate models until closer to retirement.
|
|
31
|
+
|
|
32
|
+
| Model ID | Name | Status | Retirement (not sooner than) |
|
|
33
|
+
| ------------------- | ----------------- | --------------- | ---------------------------- |
|
|
34
|
+
| `claude-fable-5-1` | Claude Fable 5.1 | Active | September 1, 2027 |
|
|
35
|
+
| `claude-opus-5` | Claude Opus 5 | Active | July 24, 2027 |
|
|
36
|
+
| `claude-sonnet-5` | Claude Sonnet 5 | Active | June 30, 2027 |
|
|
37
|
+
| `claude-haiku-4-5` | Claude Haiku 4.5 | Active | October 15, 2026 |
|
|
38
|
+
| `claude-fable-5` | Claude Fable 5 | Active (legacy) | June 9, 2027 |
|
|
39
|
+
| `claude-opus-4-8` | Claude Opus 4.8 | Active (legacy) | May 28, 2027 |
|
|
40
|
+
| `claude-opus-4-7` | Claude Opus 4.7 | Active (legacy) | April 16, 2027 |
|
|
41
|
+
| `claude-opus-4-6` | Claude Opus 4.6 | Active (legacy) | February 5, 2027 |
|
|
42
|
+
| `claude-opus-4-5` | Claude Opus 4.5 | Active (legacy) | November 24, 2026 |
|
|
43
|
+
| `claude-sonnet-4-6` | Claude Sonnet 4.6 | Active (legacy) | February 17, 2027 |
|
|
44
|
+
| `claude-sonnet-4-5` | Claude Sonnet 4.5 | Active (legacy) | September 29, 2026 |
|
|
45
|
+
|
|
46
|
+
All Claude models support tool use. Env var fallback: `WEBINY_API_ANTHROPIC_API_KEY`.
|
|
47
|
+
|
|
48
|
+
Source: https://platform.claude.com/docs/en/about-claude/model-deprecations
|
|
49
|
+
|
|
50
|
+
### OpenAI (`OpenAiSdkFactory.ts`)
|
|
51
|
+
|
|
52
|
+
| Model ID | Name | Status | Deprecated | End of life |
|
|
53
|
+
| --------------- | ------------- | ---------- | -------------- | ----------------- |
|
|
54
|
+
| `gpt-6-astra` | GPT-6 Astra | Active | — | — |
|
|
55
|
+
| `gpt-5.6-sol` | GPT-5.6 Sol | Active | — | — |
|
|
56
|
+
| `gpt-5.6-terra` | GPT-5.6 Terra | Active | — | — |
|
|
57
|
+
| `gpt-5.6-luna` | GPT-5.6 Luna | Active | — | — |
|
|
58
|
+
| `gpt-5.5` | GPT-5.5 | Active | — | — |
|
|
59
|
+
| `gpt-5.5-pro` | GPT-5.5 Pro | Active | — | — |
|
|
60
|
+
| `gpt-5.4` | GPT-5.4 | Active | — | — |
|
|
61
|
+
| `gpt-5.4-pro` | GPT-5.4 Pro | Active | — | — |
|
|
62
|
+
| `gpt-5.4-mini` | GPT-5.4 Mini | Active | — | — |
|
|
63
|
+
| `gpt-5.4-nano` | GPT-5.4 Nano | Active | — | — |
|
|
64
|
+
| `gpt-5.2` | GPT-5.2 | Active | — | — |
|
|
65
|
+
| `gpt-5.2-pro` | GPT-5.2 Pro | Active | — | — |
|
|
66
|
+
| `gpt-5` | GPT-5 | Active | — | — |
|
|
67
|
+
| `gpt-5-pro` | GPT-5 Pro | Active | — | — |
|
|
68
|
+
| `gpt-5-mini` | GPT-5 Mini | Active | — | — |
|
|
69
|
+
| `gpt-5-nano` | GPT-5 Nano | Active | — | — |
|
|
70
|
+
| `gpt-4.1` | GPT-4.1 | Active | — | — |
|
|
71
|
+
| `gpt-4.1-mini` | GPT-4.1 Mini | Active | — | — |
|
|
72
|
+
| `gpt-4o` | GPT-4o | Active | — | — |
|
|
73
|
+
| `gpt-4o-mini` | GPT-4o Mini | Active | — | — |
|
|
74
|
+
| `o3-pro` | o3 Pro | Deprecated | June 11, 2026 | December 11, 2026 |
|
|
75
|
+
| `o3` | o3 | Deprecated | June 11, 2026 | December 11, 2026 |
|
|
76
|
+
| `gpt-4.1-nano` | GPT-4.1 Nano | Deprecated | April 22, 2026 | October 23, 2026 |
|
|
77
|
+
| `o4-mini` | o4 Mini | Deprecated | April 22, 2026 | October 23, 2026 |
|
|
78
|
+
|
|
79
|
+
All listed models support function calling. Env var fallback: `WEBINY_API_OPENAI_API_KEY`.
|
|
80
|
+
|
|
81
|
+
Source: https://developers.openai.com/api/docs/deprecations
|
|
82
|
+
|
|
83
|
+
### Google (`GoogleSdkFactory.ts`)
|
|
84
|
+
|
|
85
|
+
| Model ID | Name | Status | End of life |
|
|
86
|
+
| ----------------------- | --------------------- | ------ | ----------- |
|
|
87
|
+
| `gemini-3.8-flash` | Gemini 3.8 Flash | Active | — |
|
|
88
|
+
| `gemini-3.7-flash` | Gemini 3.7 Flash | Active | — |
|
|
89
|
+
| `gemini-3.6-flash` | Gemini 3.6 Flash | Active | — |
|
|
90
|
+
| `gemini-3.5-flash` | Gemini 3.5 Flash | Active | — |
|
|
91
|
+
| `gemini-3.5-flash-lite` | Gemini 3.5 Flash Lite | Active | — |
|
|
92
|
+
| `gemini-3.1-flash-lite` | Gemini 3.1 Flash Lite | Active | May 7, 2027 |
|
|
93
|
+
| `gemini-2.5-pro` | Gemini 2.5 Pro | Active | — |
|
|
94
|
+
| `gemini-2.5-flash` | Gemini 2.5 Flash | Active | — |
|
|
95
|
+
| `gemini-2.5-flash-lite` | Gemini 2.5 Flash Lite | Active | — |
|
|
96
|
+
|
|
97
|
+
All listed models support function calling. `gemini-3.1-flash-lite` does not support streaming tool call arguments, but standard (non-streaming) function calling works.
|
|
98
|
+
|
|
99
|
+
Env var fallback: `WEBINY_API_GOOGLE_API_KEY`.
|
|
100
|
+
|
|
101
|
+
Source: https://ai.google.dev/gemini-api/docs/deprecations
|
|
102
|
+
|
|
103
|
+
## Adding a new model
|
|
104
|
+
|
|
105
|
+
1. Verify the model supports tool/function calling.
|
|
106
|
+
2. Add an entry to the `*_MODELS` array in the corresponding factory file. The `id` must match the provider's API model ID exactly.
|
|
107
|
+
3. If the model has known deprecation or end-of-life dates, set `deprecated` and/or `endOfLife` as `new Date("YYYY-MM-DD")`.
|
|
108
|
+
4. Update the table in this file.
|
|
109
|
+
|
|
110
|
+
## Adding a new provider
|
|
111
|
+
|
|
112
|
+
1. Create a new `<Provider>SdkFactory.ts` implementing `AiSdkFactory`.
|
|
113
|
+
2. Add the `@ai-sdk/<provider>` dependency via `yarn add` in `packages/api-core`.
|
|
114
|
+
3. Register the factory in `feature.ts`.
|
|
115
|
+
4. Update this file.
|
|
116
|
+
|
|
117
|
+
## Updating models
|
|
118
|
+
|
|
119
|
+
Check the provider docs periodically and update the lists:
|
|
120
|
+
|
|
121
|
+
- **New models**: add to the top of the active section.
|
|
122
|
+
- **Deprecated models**: set `deprecated` and `endOfLife` dates, move to the bottom of the array.
|
|
123
|
+
- **End-of-life reached**: remove from the factory. Keeping a dead model causes runtime failures.
|
|
124
|
+
- **Never remove a model before its end-of-life date** — users may have presets referencing it, and removing it breaks `ProvidersHandler` validation on save.
|
|
125
|
+
|
|
126
|
+
Last updated: September 2026.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AiSdkFactory as AiSdkFactoryAbstraction } from "./abstractions.js";
|
|
2
|
+
import type { IAiSdk, IAiSdkModel } from "./abstractions.js";
|
|
3
|
+
declare class GoogleSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {
|
|
4
|
+
readonly id = "google";
|
|
5
|
+
readonly name = "Google";
|
|
6
|
+
readonly models: IAiSdkModel[];
|
|
7
|
+
execute(apiKey?: string): Promise<IAiSdk>;
|
|
8
|
+
}
|
|
9
|
+
export declare const GoogleSdkFactory: import("@webiny/di").Implementation<typeof GoogleSdkFactoryImpl>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createImplementation } from "@webiny/feature/api";
|
|
2
|
+
import { AiSdkFactory } from "./abstractions.js";
|
|
3
|
+
const GOOGLE_MODELS = [
|
|
4
|
+
{
|
|
5
|
+
id: "gemini-3.8-flash",
|
|
6
|
+
name: "Gemini 3.8 Flash"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
id: "gemini-3.7-flash",
|
|
10
|
+
name: "Gemini 3.7 Flash"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: "gemini-3.6-flash",
|
|
14
|
+
name: "Gemini 3.6 Flash"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "gemini-3.5-flash",
|
|
18
|
+
name: "Gemini 3.5 Flash"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "gemini-3.5-flash-lite",
|
|
22
|
+
name: "Gemini 3.5 Flash Lite"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "gemini-3.1-flash-lite",
|
|
26
|
+
name: "Gemini 3.1 Flash Lite",
|
|
27
|
+
endOfLife: new Date("2027-05-07")
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "gemini-2.5-pro",
|
|
31
|
+
name: "Gemini 2.5 Pro"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: "gemini-2.5-flash",
|
|
35
|
+
name: "Gemini 2.5 Flash"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "gemini-2.5-flash-lite",
|
|
39
|
+
name: "Gemini 2.5 Flash Lite"
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
class GoogleSdkFactoryImpl {
|
|
43
|
+
async execute(apiKey) {
|
|
44
|
+
const { createGoogleGenerativeAI } = await import("@ai-sdk/google");
|
|
45
|
+
const provider = createGoogleGenerativeAI({
|
|
46
|
+
apiKey: apiKey ?? process.env.WEBINY_API_GOOGLE_API_KEY
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
languageModel: (modelId)=>provider.chat(modelId)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
constructor(){
|
|
53
|
+
this.id = "google";
|
|
54
|
+
this.name = "Google";
|
|
55
|
+
this.models = GOOGLE_MODELS;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const GoogleSdkFactory = createImplementation({
|
|
59
|
+
abstraction: AiSdkFactory,
|
|
60
|
+
implementation: GoogleSdkFactoryImpl,
|
|
61
|
+
dependencies: []
|
|
62
|
+
});
|
|
63
|
+
export { GoogleSdkFactory };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=GoogleSdkFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/ai/GoogleSdkFactory.js","sources":["../../../src/features/ai/GoogleSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst GOOGLE_MODELS: IAiSdkModel[] = [\n { id: \"gemini-3.8-flash\", name: \"Gemini 3.8 Flash\" },\n { id: \"gemini-3.7-flash\", name: \"Gemini 3.7 Flash\" },\n { id: \"gemini-3.6-flash\", name: \"Gemini 3.6 Flash\" },\n { id: \"gemini-3.5-flash\", name: \"Gemini 3.5 Flash\" },\n { id: \"gemini-3.5-flash-lite\", name: \"Gemini 3.5 Flash Lite\" },\n {\n id: \"gemini-3.1-flash-lite\",\n name: \"Gemini 3.1 Flash Lite\",\n endOfLife: new Date(\"2027-05-07\")\n },\n { id: \"gemini-2.5-pro\", name: \"Gemini 2.5 Pro\" },\n { id: \"gemini-2.5-flash\", name: \"Gemini 2.5 Flash\" },\n { id: \"gemini-2.5-flash-lite\", name: \"Gemini 2.5 Flash Lite\" }\n];\n\nclass GoogleSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"google\";\n readonly name = \"Google\";\n readonly models = GOOGLE_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createGoogleGenerativeAI } = await import(\"@ai-sdk/google\");\n const provider = createGoogleGenerativeAI({\n apiKey: apiKey ?? process.env.WEBINY_API_GOOGLE_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const GoogleSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: GoogleSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["GOOGLE_MODELS","Date","GoogleSdkFactoryImpl","apiKey","createGoogleGenerativeAI","provider","process","modelId","GoogleSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":";;AAIA,MAAMA,gBAA+B;IACjC;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAyB,MAAM;IAAwB;IAC7D;QACI,IAAI;QACJ,MAAM;QACN,WAAW,IAAIC,KAAK;IACxB;IACA;QAAE,IAAI;QAAkB,MAAM;IAAiB;IAC/C;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAyB,MAAM;IAAwB;CAChE;AAED,MAAMC;IAKF,MAAM,QAAQC,MAAe,EAAmB;QAC5C,MAAM,EAAEC,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC;QAClD,MAAMC,WAAWD,yBAAyB;YACtC,QAAQD,UAAUG,QAAQ,GAAG,CAAC,yBAAyB;QAC3D;QACA,OAAO;YACH,eAAeC,CAAAA,UAAWF,SAAS,IAAI,CAACE;QAC5C;IACJ;;aAZS,EAAE,GAAG;aACL,IAAI,GAAG;aACP,MAAM,GAAGP;;AAWtB;AAEO,MAAMQ,mBAAmBC,qBAAqB;IACjD,aAAaC;IACb,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -1,10 +1,38 @@
|
|
|
1
1
|
import { createImplementation } from "@webiny/feature/api";
|
|
2
2
|
import { AiSdkFactory } from "./abstractions.js";
|
|
3
3
|
const OPENAI_MODELS = [
|
|
4
|
+
{
|
|
5
|
+
id: "gpt-6-astra",
|
|
6
|
+
name: "GPT-6 Astra"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
id: "gpt-5.6-sol",
|
|
10
|
+
name: "GPT-5.6 Sol"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: "gpt-5.6-terra",
|
|
14
|
+
name: "GPT-5.6 Terra"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "gpt-5.6-luna",
|
|
18
|
+
name: "GPT-5.6 Luna"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "gpt-5.5",
|
|
22
|
+
name: "GPT-5.5"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "gpt-5.5-pro",
|
|
26
|
+
name: "GPT-5.5 Pro"
|
|
27
|
+
},
|
|
4
28
|
{
|
|
5
29
|
id: "gpt-5.4",
|
|
6
30
|
name: "GPT-5.4"
|
|
7
31
|
},
|
|
32
|
+
{
|
|
33
|
+
id: "gpt-5.4-pro",
|
|
34
|
+
name: "GPT-5.4 Pro"
|
|
35
|
+
},
|
|
8
36
|
{
|
|
9
37
|
id: "gpt-5.4-mini",
|
|
10
38
|
name: "GPT-5.4 Mini"
|
|
@@ -14,12 +42,28 @@ const OPENAI_MODELS = [
|
|
|
14
42
|
name: "GPT-5.4 Nano"
|
|
15
43
|
},
|
|
16
44
|
{
|
|
17
|
-
id: "gpt-5.
|
|
18
|
-
name: "GPT-5.
|
|
45
|
+
id: "gpt-5.2",
|
|
46
|
+
name: "GPT-5.2"
|
|
19
47
|
},
|
|
20
48
|
{
|
|
21
|
-
id: "gpt-5.
|
|
22
|
-
name: "GPT-5.
|
|
49
|
+
id: "gpt-5.2-pro",
|
|
50
|
+
name: "GPT-5.2 Pro"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "gpt-5",
|
|
54
|
+
name: "GPT-5"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "gpt-5-pro",
|
|
58
|
+
name: "GPT-5 Pro"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "gpt-5-mini",
|
|
62
|
+
name: "GPT-5 Mini"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "gpt-5-nano",
|
|
66
|
+
name: "GPT-5 Nano"
|
|
23
67
|
},
|
|
24
68
|
{
|
|
25
69
|
id: "gpt-4.1",
|
|
@@ -29,10 +73,6 @@ const OPENAI_MODELS = [
|
|
|
29
73
|
id: "gpt-4.1-mini",
|
|
30
74
|
name: "GPT-4.1 Mini"
|
|
31
75
|
},
|
|
32
|
-
{
|
|
33
|
-
id: "gpt-4.1-nano",
|
|
34
|
-
name: "GPT-4.1 Nano"
|
|
35
|
-
},
|
|
36
76
|
{
|
|
37
77
|
id: "gpt-4o",
|
|
38
78
|
name: "GPT-4o"
|
|
@@ -42,12 +82,28 @@ const OPENAI_MODELS = [
|
|
|
42
82
|
name: "GPT-4o Mini"
|
|
43
83
|
},
|
|
44
84
|
{
|
|
45
|
-
id: "
|
|
46
|
-
name: "
|
|
85
|
+
id: "o3-pro",
|
|
86
|
+
name: "o3 Pro",
|
|
87
|
+
deprecated: new Date("2026-06-11"),
|
|
88
|
+
endOfLife: new Date("2026-12-11")
|
|
47
89
|
},
|
|
48
90
|
{
|
|
49
91
|
id: "o3",
|
|
50
|
-
name: "o3"
|
|
92
|
+
name: "o3",
|
|
93
|
+
deprecated: new Date("2026-06-11"),
|
|
94
|
+
endOfLife: new Date("2026-12-11")
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: "gpt-4.1-nano",
|
|
98
|
+
name: "GPT-4.1 Nano",
|
|
99
|
+
deprecated: new Date("2026-04-22"),
|
|
100
|
+
endOfLife: new Date("2026-10-23")
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: "o4-mini",
|
|
104
|
+
name: "o4 Mini",
|
|
105
|
+
deprecated: new Date("2026-04-22"),
|
|
106
|
+
endOfLife: new Date("2026-10-23")
|
|
51
107
|
}
|
|
52
108
|
];
|
|
53
109
|
class OpenAiSdkFactoryImpl {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/ai/OpenAiSdkFactory.js","sources":["../../../src/features/ai/OpenAiSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst OPENAI_MODELS: IAiSdkModel[] = [\n { id: \"gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\" },\n { id: \"gpt-5.
|
|
1
|
+
{"version":3,"file":"features/ai/OpenAiSdkFactory.js","sources":["../../../src/features/ai/OpenAiSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst OPENAI_MODELS: IAiSdkModel[] = [\n { id: \"gpt-6-astra\", name: \"GPT-6 Astra\" },\n { id: \"gpt-5.6-sol\", name: \"GPT-5.6 Sol\" },\n { id: \"gpt-5.6-terra\", name: \"GPT-5.6 Terra\" },\n { id: \"gpt-5.6-luna\", name: \"GPT-5.6 Luna\" },\n { id: \"gpt-5.5\", name: \"GPT-5.5\" },\n { id: \"gpt-5.5-pro\", name: \"GPT-5.5 Pro\" },\n { id: \"gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-pro\", name: \"GPT-5.4 Pro\" },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\" },\n { id: \"gpt-5.2\", name: \"GPT-5.2\" },\n { id: \"gpt-5.2-pro\", name: \"GPT-5.2 Pro\" },\n { id: \"gpt-5\", name: \"GPT-5\" },\n { id: \"gpt-5-pro\", name: \"GPT-5 Pro\" },\n { id: \"gpt-5-mini\", name: \"GPT-5 Mini\" },\n { id: \"gpt-5-nano\", name: \"GPT-5 Nano\" },\n { id: \"gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"gpt-4o\", name: \"GPT-4o\" },\n { id: \"gpt-4o-mini\", name: \"GPT-4o Mini\" },\n {\n id: \"o3-pro\",\n name: \"o3 Pro\",\n deprecated: new Date(\"2026-06-11\"),\n endOfLife: new Date(\"2026-12-11\")\n },\n {\n id: \"o3\",\n name: \"o3\",\n deprecated: new Date(\"2026-06-11\"),\n endOfLife: new Date(\"2026-12-11\")\n },\n {\n id: \"gpt-4.1-nano\",\n name: \"GPT-4.1 Nano\",\n deprecated: new Date(\"2026-04-22\"),\n endOfLife: new Date(\"2026-10-23\")\n },\n {\n id: \"o4-mini\",\n name: \"o4 Mini\",\n deprecated: new Date(\"2026-04-22\"),\n endOfLife: new Date(\"2026-10-23\")\n }\n];\n\nclass OpenAiSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"openai\";\n readonly name = \"OpenAI\";\n readonly models = OPENAI_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\n const provider = createOpenAI({\n apiKey: apiKey ?? process.env.WEBINY_API_OPENAI_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const OpenAiSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: OpenAiSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["OPENAI_MODELS","Date","OpenAiSdkFactoryImpl","apiKey","createOpenAI","provider","process","modelId","OpenAiSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":";;AAIA,MAAMA,gBAA+B;IACjC;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAiB,MAAM;IAAgB;IAC7C;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAS,MAAM;IAAQ;IAC7B;QAAE,IAAI;QAAa,MAAM;IAAY;IACrC;QAAE,IAAI;QAAc,MAAM;IAAa;IACvC;QAAE,IAAI;QAAc,MAAM;IAAa;IACvC;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAU,MAAM;IAAS;IAC/B;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QACI,IAAI;QACJ,MAAM;QACN,YAAY,IAAIC,KAAK;QACrB,WAAW,IAAIA,KAAK;IACxB;IACA;QACI,IAAI;QACJ,MAAM;QACN,YAAY,IAAIA,KAAK;QACrB,WAAW,IAAIA,KAAK;IACxB;IACA;QACI,IAAI;QACJ,MAAM;QACN,YAAY,IAAIA,KAAK;QACrB,WAAW,IAAIA,KAAK;IACxB;IACA;QACI,IAAI;QACJ,MAAM;QACN,YAAY,IAAIA,KAAK;QACrB,WAAW,IAAIA,KAAK;IACxB;CACH;AAED,MAAMC;IAKF,MAAM,QAAQC,MAAe,EAAmB;QAC5C,MAAM,EAAEC,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC;QACtC,MAAMC,WAAWD,aAAa;YAC1B,QAAQD,UAAUG,QAAQ,GAAG,CAAC,yBAAyB;QAC3D;QACA,OAAO;YACH,eAAeC,CAAAA,UAAWF,SAAS,IAAI,CAACE;QAC5C;IACJ;;aAZS,EAAE,GAAG;aACL,IAAI,GAAG;aACP,MAAM,GAAGP;;AAWtB;AAEO,MAAMQ,mBAAmBC,qBAAqB;IACjD,aAAaC;IACb,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -5,6 +5,8 @@ import type { FlexibleSchema, ToolSet } from "ai";
|
|
|
5
5
|
export interface IAiSdkModel {
|
|
6
6
|
id: string;
|
|
7
7
|
name: string;
|
|
8
|
+
deprecated?: Date;
|
|
9
|
+
endOfLife?: Date;
|
|
8
10
|
}
|
|
9
11
|
export interface IAiSdk {
|
|
10
12
|
languageModel(modelId: string): LanguageModel;
|
|
@@ -55,6 +57,8 @@ export interface AiModel {
|
|
|
55
57
|
providerName: string;
|
|
56
58
|
modelId: string;
|
|
57
59
|
modelName: string;
|
|
60
|
+
deprecated: Date | undefined;
|
|
61
|
+
endOfLife: Date | undefined;
|
|
58
62
|
}
|
|
59
63
|
export interface IAi {
|
|
60
64
|
generateText(params: AiGenerateTextParams): ReturnType<typeof generateText>;
|
|
@@ -70,6 +74,14 @@ export declare namespace Ai {
|
|
|
70
74
|
type GenerateTextParams = AiGenerateTextParams;
|
|
71
75
|
type StreamTextParams = AiStreamTextParams;
|
|
72
76
|
}
|
|
77
|
+
export interface IAiModelRegistry {
|
|
78
|
+
listModels(): Promise<AiModel[]>;
|
|
79
|
+
}
|
|
80
|
+
/** Single source of truth for available AI models. Decoratable to restrict the model list. */
|
|
81
|
+
export declare const AiModelRegistry: import("@webiny/di").Abstraction<IAiModelRegistry>;
|
|
82
|
+
export declare namespace AiModelRegistry {
|
|
83
|
+
type Interface = IAiModelRegistry;
|
|
84
|
+
}
|
|
73
85
|
export interface IAiSdkTool<TInput = any> {
|
|
74
86
|
readonly name: string;
|
|
75
87
|
readonly description: string;
|
|
@@ -3,8 +3,9 @@ const AiSdk = createAbstraction("AiSdk");
|
|
|
3
3
|
const AiSdkFactory = createAbstraction("AiSdkFactory");
|
|
4
4
|
const AiConnectionFactory = createAbstraction("AiConnectionFactory");
|
|
5
5
|
const Ai = createAbstraction("Ai");
|
|
6
|
+
const AiModelRegistry = createAbstraction("AiModelRegistry");
|
|
6
7
|
const AiSdkTool = createAbstraction("AiSdkTool");
|
|
7
8
|
const AiSdkTools = createAbstraction("AiSdkTools");
|
|
8
|
-
export { Ai, AiConnectionFactory, AiSdk, AiSdkFactory, AiSdkTool, AiSdkTools };
|
|
9
|
+
export { Ai, AiConnectionFactory, AiModelRegistry, AiSdk, AiSdkFactory, AiSdkTool, AiSdkTools };
|
|
9
10
|
|
|
10
11
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/ai/abstractions.js","sources":["../../../src/features/ai/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { generateText } from \"ai\";\nimport type { streamText } from \"ai\";\nimport type { LanguageModel } from \"ai\";\nimport type { FlexibleSchema, ToolSet } from \"ai\";\n\n// AiSdk\n\nexport interface IAiSdkModel {\n id: string; // raw model id, e.g. \"claude-sonnet-4-5\"\n name: string; // human-friendly name, e.g. \"Claude Sonnet 4.5\"\n}\n\nexport interface IAiSdk {\n languageModel(modelId: string): LanguageModel;\n}\n\n/** A single AI SDK instance (e.g. OpenAI, Anthropic) that resolves model instances. */\nexport const AiSdk = createAbstraction<IAiSdk>(\"AiSdk\");\n\nexport namespace AiSdk {\n export type Interface = IAiSdk;\n}\n\n// AiSdkFactory\n\nexport interface IAiSdkFactory {\n readonly id: string; // machine id, e.g. \"anthropic\"\n readonly name: string; // human-friendly name, e.g. \"Anthropic\"\n readonly models: readonly IAiSdkModel[]; // static model list, no API call needed\n execute(apiKey?: string): Promise<IAiSdk>;\n}\n\n/** Factory that asynchronously initialises an AI SDK. Register one per provider namespace. */\nexport const AiSdkFactory = createAbstraction<IAiSdkFactory>(\"AiSdkFactory\");\n\nexport namespace AiSdkFactory {\n export type Interface = IAiSdkFactory;\n}\n\n// AiConnection\n\nexport interface IAiConnectionInline {\n readonly sdkName: string;\n readonly apiKey?: string;\n}\n\nexport interface IAiConnection extends IAiConnectionInline {\n readonly id: string;\n}\n\n// AiConnectionFactory\n\nexport interface IAiConnectionFactory {\n execute(): Promise<IAiConnection>;\n}\n\n/** Factory that asynchronously produces an AiConnection. */\nexport const AiConnectionFactory = createAbstraction<IAiConnectionFactory>(\"AiConnectionFactory\");\n\nexport namespace AiConnectionFactory {\n export type Interface = IAiConnectionFactory;\n}\n\n// Ai\n\ntype SDKGenerateTextParams = Parameters<typeof generateText>[0];\ntype SDKStreamTextParams = Parameters<typeof streamText>[0];\n\nexport type AiGenerateTextParams = Omit<SDKGenerateTextParams, \"model\"> & {\n model: string;\n connection?: string | IAiConnectionInline;\n};\nexport type AiStreamTextParams = Omit<SDKStreamTextParams, \"model\"> & {\n model: string;\n connection?: string | IAiConnectionInline;\n};\n\nexport interface AiModel {\n providerId: string; // e.g. \"anthropic\"\n providerName: string; // e.g. \"Anthropic\"\n modelId: string; // e.g. \"claude-sonnet-4-5\"\n modelName: string; // e.g. \"Claude Sonnet 4.5\"\n}\n\nexport interface IAi {\n generateText(params: AiGenerateTextParams): ReturnType<typeof generateText>;\n streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>>;\n listModels(): Promise<AiModel[]>;\n listModelsByConnections(): Promise<AiModel[]>;\n listModelsByConnection(connection: string | IAiConnectionInline): Promise<AiModel[]>;\n}\n\n/** Interact with AI language models using registered providers. */\nexport const Ai = createAbstraction<IAi>(\"Ai\");\n\nexport namespace Ai {\n export type Interface = IAi;\n export type GenerateTextParams = AiGenerateTextParams;\n export type StreamTextParams = AiStreamTextParams;\n}\n\n// AiSdkTool\n\nexport interface IAiSdkTool<TInput = any> {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: FlexibleSchema<TInput>;\n execute(input: TInput): Promise<unknown>;\n}\n\n/** A single tool that can be provided to AI generateText/streamText calls. */\nexport const AiSdkTool = createAbstraction<IAiSdkTool>(\"AiSdkTool\");\n\nexport namespace AiSdkTool {\n export type Interface = IAiSdkTool;\n}\n\n// AiSdkTools\n\nexport interface IAiSdkTools {\n getToolSet(): ToolSet;\n}\n\n/** Collection of AI SDK tools. Returns a ready-to-use ToolSet for generateText/streamText. */\nexport const AiSdkTools = createAbstraction<IAiSdkTools>(\"AiSdkTools\");\n\nexport namespace AiSdkTools {\n export type Interface = IAiSdkTools;\n}\n"],"names":["AiSdk","createAbstraction","AiSdkFactory","AiConnectionFactory","Ai","AiSdkTool","AiSdkTools"],"mappings":";
|
|
1
|
+
{"version":3,"file":"features/ai/abstractions.js","sources":["../../../src/features/ai/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { generateText } from \"ai\";\nimport type { streamText } from \"ai\";\nimport type { LanguageModel } from \"ai\";\nimport type { FlexibleSchema, ToolSet } from \"ai\";\n\n// AiSdk\n\nexport interface IAiSdkModel {\n id: string; // raw model id, e.g. \"claude-sonnet-4-5\"\n name: string; // human-friendly name, e.g. \"Claude Sonnet 4.5\"\n deprecated?: Date;\n endOfLife?: Date;\n}\n\nexport interface IAiSdk {\n languageModel(modelId: string): LanguageModel;\n}\n\n/** A single AI SDK instance (e.g. OpenAI, Anthropic) that resolves model instances. */\nexport const AiSdk = createAbstraction<IAiSdk>(\"AiSdk\");\n\nexport namespace AiSdk {\n export type Interface = IAiSdk;\n}\n\n// AiSdkFactory\n\nexport interface IAiSdkFactory {\n readonly id: string; // machine id, e.g. \"anthropic\"\n readonly name: string; // human-friendly name, e.g. \"Anthropic\"\n readonly models: readonly IAiSdkModel[]; // static model list, no API call needed\n execute(apiKey?: string): Promise<IAiSdk>;\n}\n\n/** Factory that asynchronously initialises an AI SDK. Register one per provider namespace. */\nexport const AiSdkFactory = createAbstraction<IAiSdkFactory>(\"AiSdkFactory\");\n\nexport namespace AiSdkFactory {\n export type Interface = IAiSdkFactory;\n}\n\n// AiConnection\n\nexport interface IAiConnectionInline {\n readonly sdkName: string;\n readonly apiKey?: string;\n}\n\nexport interface IAiConnection extends IAiConnectionInline {\n readonly id: string;\n}\n\n// AiConnectionFactory\n\nexport interface IAiConnectionFactory {\n execute(): Promise<IAiConnection>;\n}\n\n/** Factory that asynchronously produces an AiConnection. */\nexport const AiConnectionFactory = createAbstraction<IAiConnectionFactory>(\"AiConnectionFactory\");\n\nexport namespace AiConnectionFactory {\n export type Interface = IAiConnectionFactory;\n}\n\n// Ai\n\ntype SDKGenerateTextParams = Parameters<typeof generateText>[0];\ntype SDKStreamTextParams = Parameters<typeof streamText>[0];\n\nexport type AiGenerateTextParams = Omit<SDKGenerateTextParams, \"model\"> & {\n model: string;\n connection?: string | IAiConnectionInline;\n};\nexport type AiStreamTextParams = Omit<SDKStreamTextParams, \"model\"> & {\n model: string;\n connection?: string | IAiConnectionInline;\n};\n\nexport interface AiModel {\n providerId: string; // e.g. \"anthropic\"\n providerName: string; // e.g. \"Anthropic\"\n modelId: string; // e.g. \"claude-sonnet-4-5\"\n modelName: string; // e.g. \"Claude Sonnet 4.5\"\n deprecated: Date | undefined;\n endOfLife: Date | undefined;\n}\n\nexport interface IAi {\n generateText(params: AiGenerateTextParams): ReturnType<typeof generateText>;\n streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>>;\n listModels(): Promise<AiModel[]>;\n listModelsByConnections(): Promise<AiModel[]>;\n listModelsByConnection(connection: string | IAiConnectionInline): Promise<AiModel[]>;\n}\n\n/** Interact with AI language models using registered providers. */\nexport const Ai = createAbstraction<IAi>(\"Ai\");\n\nexport namespace Ai {\n export type Interface = IAi;\n export type GenerateTextParams = AiGenerateTextParams;\n export type StreamTextParams = AiStreamTextParams;\n}\n\n// AiModelRegistry\n\nexport interface IAiModelRegistry {\n listModels(): Promise<AiModel[]>;\n}\n\n/** Single source of truth for available AI models. Decoratable to restrict the model list. */\nexport const AiModelRegistry = createAbstraction<IAiModelRegistry>(\"AiModelRegistry\");\n\nexport namespace AiModelRegistry {\n export type Interface = IAiModelRegistry;\n}\n\n// AiSdkTool\n\nexport interface IAiSdkTool<TInput = any> {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: FlexibleSchema<TInput>;\n execute(input: TInput): Promise<unknown>;\n}\n\n/** A single tool that can be provided to AI generateText/streamText calls. */\nexport const AiSdkTool = createAbstraction<IAiSdkTool>(\"AiSdkTool\");\n\nexport namespace AiSdkTool {\n export type Interface = IAiSdkTool;\n}\n\n// AiSdkTools\n\nexport interface IAiSdkTools {\n getToolSet(): ToolSet;\n}\n\n/** Collection of AI SDK tools. Returns a ready-to-use ToolSet for generateText/streamText. */\nexport const AiSdkTools = createAbstraction<IAiSdkTools>(\"AiSdkTools\");\n\nexport namespace AiSdkTools {\n export type Interface = IAiSdkTools;\n}\n"],"names":["AiSdk","createAbstraction","AiSdkFactory","AiConnectionFactory","Ai","AiModelRegistry","AiSdkTool","AiSdkTools"],"mappings":";AAoBO,MAAMA,QAAQC,kBAA0B;AAgBxC,MAAMC,eAAeD,kBAAiC;AAwBtD,MAAME,sBAAsBF,kBAAwC;AAsCpE,MAAMG,KAAKH,kBAAuB;AAelC,MAAMI,kBAAkBJ,kBAAoC;AAgB5D,MAAMK,YAAYL,kBAA8B;AAahD,MAAMM,aAAaN,kBAA+B"}
|
package/features/ai/feature.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { OpenAiSdkFactory } from "./OpenAiSdkFactory.js";
|
|
3
3
|
import { AnthropicSdkFactory } from "./AnthropicSdkFactory.js";
|
|
4
|
+
import { GoogleSdkFactory } from "./GoogleSdkFactory.js";
|
|
4
5
|
import { Ai } from "./Ai.js";
|
|
6
|
+
import { AiModelRegistry } from "./AiModelRegistry.js";
|
|
5
7
|
import { AiSdkTools } from "./AiSdkTools.js";
|
|
6
8
|
import { AiOutputToolRegistry } from "./toolPipeline/AiOutputToolRegistry.js";
|
|
7
9
|
import { AiToolPipelineRunner } from "./toolPipeline/AiToolPipelineRunner.js";
|
|
@@ -11,7 +13,9 @@ const AiFeature = createFeature({
|
|
|
11
13
|
register (container) {
|
|
12
14
|
container.register(OpenAiSdkFactory);
|
|
13
15
|
container.register(AnthropicSdkFactory);
|
|
16
|
+
container.register(GoogleSdkFactory);
|
|
14
17
|
container.register(Ai);
|
|
18
|
+
container.register(AiModelRegistry);
|
|
15
19
|
container.register(AiSdkTools);
|
|
16
20
|
container.register(AiOutputToolRegistry);
|
|
17
21
|
container.register(AiToolPipelineRunner);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/ai/feature.js","sources":["../../../src/features/ai/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { OpenAiSdkFactory } from \"./OpenAiSdkFactory.js\";\nimport { AnthropicSdkFactory } from \"./AnthropicSdkFactory.js\";\nimport { Ai } from \"./Ai.js\";\nimport { AiSdkTools } from \"./AiSdkTools.js\";\nimport { AiOutputToolRegistry } from \"./toolPipeline/AiOutputToolRegistry.js\";\nimport { AiToolPipelineRunner } from \"./toolPipeline/AiToolPipelineRunner.js\";\nimport { DefaultTextExtractor } from \"./TextExtractor/DefaultTextExtractor.js\";\n\nexport const AiFeature = createFeature({\n name: \"AiFeature\",\n register(container) {\n container.register(OpenAiSdkFactory);\n container.register(AnthropicSdkFactory);\n container.register(Ai);\n container.register(AiSdkTools);\n container.register(AiOutputToolRegistry);\n container.register(AiToolPipelineRunner);\n container.register(DefaultTextExtractor);\n }\n});\n"],"names":["AiFeature","createFeature","container","OpenAiSdkFactory","AnthropicSdkFactory","Ai","AiSdkTools","AiOutputToolRegistry","AiToolPipelineRunner","DefaultTextExtractor"],"mappings":"
|
|
1
|
+
{"version":3,"file":"features/ai/feature.js","sources":["../../../src/features/ai/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { OpenAiSdkFactory } from \"./OpenAiSdkFactory.js\";\nimport { AnthropicSdkFactory } from \"./AnthropicSdkFactory.js\";\nimport { GoogleSdkFactory } from \"./GoogleSdkFactory.js\";\nimport { Ai } from \"./Ai.js\";\nimport { AiModelRegistry } from \"./AiModelRegistry.js\";\nimport { AiSdkTools } from \"./AiSdkTools.js\";\nimport { AiOutputToolRegistry } from \"./toolPipeline/AiOutputToolRegistry.js\";\nimport { AiToolPipelineRunner } from \"./toolPipeline/AiToolPipelineRunner.js\";\nimport { DefaultTextExtractor } from \"./TextExtractor/DefaultTextExtractor.js\";\n\nexport const AiFeature = createFeature({\n name: \"AiFeature\",\n register(container) {\n container.register(OpenAiSdkFactory);\n container.register(AnthropicSdkFactory);\n container.register(GoogleSdkFactory);\n container.register(Ai);\n container.register(AiModelRegistry);\n container.register(AiSdkTools);\n container.register(AiOutputToolRegistry);\n container.register(AiToolPipelineRunner);\n container.register(DefaultTextExtractor);\n }\n});\n"],"names":["AiFeature","createFeature","container","OpenAiSdkFactory","AnthropicSdkFactory","GoogleSdkFactory","Ai","AiModelRegistry","AiSdkTools","AiOutputToolRegistry","AiToolPipelineRunner","DefaultTextExtractor"],"mappings":";;;;;;;;;;AAWO,MAAMA,YAAYC,cAAc;IACnC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;QACnBP,UAAU,QAAQ,CAACQ;QACnBR,UAAU,QAAQ,CAACS;IACvB;AACJ"}
|
package/features/ai/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { AiSdk, AiSdkFactory, AiConnectionFactory, Ai, AiSdkTool, AiSdkTools } from "./abstractions.js";
|
|
2
|
-
export type { IAiConnection, IAiConnectionInline, AiModel, IAiSdkModel, IAiSdkTool, IAiSdkTools } from "./abstractions.js";
|
|
1
|
+
export { AiSdk, AiSdkFactory, AiConnectionFactory, Ai, AiModelRegistry, AiSdkTool, AiSdkTools } from "./abstractions.js";
|
|
2
|
+
export type { IAiConnection, IAiConnectionInline, AiModel, IAiSdkModel, IAiModelRegistry, IAiSdkTool, IAiSdkTools } from "./abstractions.js";
|
|
3
3
|
export { AiOutputTool, AiOutputToolRegistry, AiToolPipelineRunner } from "./toolPipeline/index.js";
|
|
4
4
|
export type { IAiOutputTool, IAiOutputToolRegistry, IAiToolPipelineRunner } from "./toolPipeline/index.js";
|
|
5
5
|
export { TextExtractor, DefaultTextExtractor } from "./TextExtractor/index.js";
|
package/features/ai/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Ai, AiConnectionFactory, AiSdk, AiSdkFactory, AiSdkTool, AiSdkTools } from "./abstractions.js";
|
|
1
|
+
export { Ai, AiConnectionFactory, AiModelRegistry, AiSdk, AiSdkFactory, AiSdkTool, AiSdkTools } from "./abstractions.js";
|
|
2
2
|
export { AiOutputTool, AiOutputToolRegistry, AiToolPipelineRunner } from "./toolPipeline/index.js";
|
|
3
3
|
export { DefaultTextExtractor, TextExtractor } from "./TextExtractor/index.js";
|
|
4
4
|
export { AiAfterGenerateTextEvent, AiAfterGenerateTextEventHandler, AiBeforeGenerateTextEvent, AiBeforeGenerateTextEventHandler, AiBeforeStreamTextEvent, AiBeforeStreamTextEventHandler, AiGenerateTextErrorEvent, AiGenerateTextErrorEventHandler } from "./events.js";
|
|
@@ -15,6 +15,7 @@ class RolesInstallerImpl {
|
|
|
15
15
|
}
|
|
16
16
|
async install() {
|
|
17
17
|
const rolesResult = await this.listRolesUseCase.execute();
|
|
18
|
+
if (rolesResult.isFail()) throw rolesResult.error;
|
|
18
19
|
const roles = rolesResult.value;
|
|
19
20
|
if (!roles.find((g)=>"full-access" === g.slug)) {
|
|
20
21
|
const result = await this.createRoleUseCase.execute({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/security/roles/Installer/RolesInstaller.js","sources":["../../../../../src/features/security/roles/Installer/RolesInstaller.ts"],"sourcesContent":["import { AppInstaller } from \"~/features/tenancy/InstallTenant/index.js\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { Role } from \"../shared/types.js\";\nimport { ListRolesUseCase } from \"~/features/security/roles/ListRoles/index.js\";\nimport { CreateRoleUseCase } from \"~/features/security/roles/CreateRole/index.js\";\nimport { DeleteRoleUseCase } from \"~/features/security/roles/DeleteRole/index.js\";\n\nclass RolesInstallerImpl implements AppInstaller.Interface {\n readonly alwaysRun = true;\n readonly appName = \"Security\";\n readonly dependsOn = [];\n private createdRoles: Role[] = [];\n\n constructor(\n private listRolesUseCase: ListRolesUseCase.Interface,\n private createRoleUseCase: CreateRoleUseCase.Interface,\n private deleteRoleUseCase: DeleteRoleUseCase.Interface\n ) {}\n\n async install(): Promise<void> {\n const rolesResult = await this.listRolesUseCase.execute();\n const roles = rolesResult.value;\n\n if (!roles.find(g => g.slug === \"full-access\")) {\n const result = await this.createRoleUseCase.execute({\n name: \"Full Access\",\n description: \"Grants full access to all apps.\",\n system: true,\n slug: \"full-access\",\n permissions: [{ name: \"*\" }]\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n this.createdRoles.push(result.value);\n }\n }\n\n async uninstall(): Promise<void> {\n for (const role of this.createdRoles) {\n await this.deleteRoleUseCase.execute(role.id);\n }\n }\n}\n\nexport const RoleInstaller = createImplementation({\n abstraction: AppInstaller,\n implementation: RolesInstallerImpl,\n dependencies: [ListRolesUseCase, CreateRoleUseCase, DeleteRoleUseCase]\n});\n"],"names":["RolesInstallerImpl","listRolesUseCase","createRoleUseCase","deleteRoleUseCase","rolesResult","roles","g","result","role","RoleInstaller","createImplementation","AppInstaller","ListRolesUseCase","CreateRoleUseCase","DeleteRoleUseCase"],"mappings":";;;;;AAOA,MAAMA;IAMF,YACYC,gBAA4C,EAC5CC,iBAA8C,EAC9CC,iBAA8C,CACxD;aAHUF,gBAAgB,GAAhBA;aACAC,iBAAiB,GAAjBA;aACAC,iBAAiB,GAAjBA;aARH,SAAS,GAAG;aACZ,OAAO,GAAG;aACV,SAAS,GAAG,EAAE;aACf,YAAY,GAAW,EAAE;IAM9B;IAEH,MAAM,UAAyB;QAC3B,MAAMC,cAAc,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO;QACvD,MAAMC,QAAQD,YAAY,KAAK;QAE/B,IAAI,CAACC,MAAM,IAAI,CAACC,CAAAA,IAAKA,AAAW,kBAAXA,EAAE,IAAI,GAAqB;YAC5C,MAAMC,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAChD,MAAM;gBACN,aAAa;gBACb,QAAQ;gBACR,MAAM;gBACN,aAAa;oBAAC;wBAAE,MAAM;oBAAI;iBAAE;YAChC;YAEA,IAAIA,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;YAGtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAACA,OAAO,KAAK;QACvC;IACJ;IAEA,MAAM,YAA2B;QAC7B,KAAK,MAAMC,QAAQ,IAAI,CAAC,YAAY,CAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACA,KAAK,EAAE;IAEpD;AACJ;AAEO,MAAMC,gBAAgBC,qBAAqB;IAC9C,aAAaC;IACb,gBAAgBX;IAChB,cAAc;QAACY;QAAkBC;QAAmBC;KAAkB;AAC1E"}
|
|
1
|
+
{"version":3,"file":"features/security/roles/Installer/RolesInstaller.js","sources":["../../../../../src/features/security/roles/Installer/RolesInstaller.ts"],"sourcesContent":["import { AppInstaller } from \"~/features/tenancy/InstallTenant/index.js\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { Role } from \"../shared/types.js\";\nimport { ListRolesUseCase } from \"~/features/security/roles/ListRoles/index.js\";\nimport { CreateRoleUseCase } from \"~/features/security/roles/CreateRole/index.js\";\nimport { DeleteRoleUseCase } from \"~/features/security/roles/DeleteRole/index.js\";\n\nclass RolesInstallerImpl implements AppInstaller.Interface {\n readonly alwaysRun = true;\n readonly appName = \"Security\";\n readonly dependsOn = [];\n private createdRoles: Role[] = [];\n\n constructor(\n private listRolesUseCase: ListRolesUseCase.Interface,\n private createRoleUseCase: CreateRoleUseCase.Interface,\n private deleteRoleUseCase: DeleteRoleUseCase.Interface\n ) {}\n\n async install(): Promise<void> {\n const rolesResult = await this.listRolesUseCase.execute();\n if (rolesResult.isFail()) {\n throw rolesResult.error;\n }\n const roles = rolesResult.value;\n\n if (!roles.find(g => g.slug === \"full-access\")) {\n const result = await this.createRoleUseCase.execute({\n name: \"Full Access\",\n description: \"Grants full access to all apps.\",\n system: true,\n slug: \"full-access\",\n permissions: [{ name: \"*\" }]\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n this.createdRoles.push(result.value);\n }\n }\n\n async uninstall(): Promise<void> {\n for (const role of this.createdRoles) {\n await this.deleteRoleUseCase.execute(role.id);\n }\n }\n}\n\nexport const RoleInstaller = createImplementation({\n abstraction: AppInstaller,\n implementation: RolesInstallerImpl,\n dependencies: [ListRolesUseCase, CreateRoleUseCase, DeleteRoleUseCase]\n});\n"],"names":["RolesInstallerImpl","listRolesUseCase","createRoleUseCase","deleteRoleUseCase","rolesResult","roles","g","result","role","RoleInstaller","createImplementation","AppInstaller","ListRolesUseCase","CreateRoleUseCase","DeleteRoleUseCase"],"mappings":";;;;;AAOA,MAAMA;IAMF,YACYC,gBAA4C,EAC5CC,iBAA8C,EAC9CC,iBAA8C,CACxD;aAHUF,gBAAgB,GAAhBA;aACAC,iBAAiB,GAAjBA;aACAC,iBAAiB,GAAjBA;aARH,SAAS,GAAG;aACZ,OAAO,GAAG;aACV,SAAS,GAAG,EAAE;aACf,YAAY,GAAW,EAAE;IAM9B;IAEH,MAAM,UAAyB;QAC3B,MAAMC,cAAc,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO;QACvD,IAAIA,YAAY,MAAM,IAClB,MAAMA,YAAY,KAAK;QAE3B,MAAMC,QAAQD,YAAY,KAAK;QAE/B,IAAI,CAACC,MAAM,IAAI,CAACC,CAAAA,IAAKA,AAAW,kBAAXA,EAAE,IAAI,GAAqB;YAC5C,MAAMC,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAChD,MAAM;gBACN,aAAa;gBACb,QAAQ;gBACR,MAAM;gBACN,aAAa;oBAAC;wBAAE,MAAM;oBAAI;iBAAE;YAChC;YAEA,IAAIA,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;YAGtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAACA,OAAO,KAAK;QACvC;IACJ;IAEA,MAAM,YAA2B;QAC7B,KAAK,MAAMC,QAAQ,IAAI,CAAC,YAAY,CAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACA,KAAK,EAAE;IAEpD;AACJ;AAEO,MAAMC,gBAAgBC,qBAAqB;IAC9C,aAAaC;IACb,gBAAgBX;IAChB,cAAc;QAACY;QAAkBC;QAAmBC;KAAkB;AAC1E"}
|
|
@@ -32,7 +32,6 @@ export declare class WcpContextImpl implements WcpContext.Interface {
|
|
|
32
32
|
canUseAiEntryGeneration(): boolean;
|
|
33
33
|
canUseAiEntryComparison(): boolean;
|
|
34
34
|
canUseAiEntryTranslation(): boolean;
|
|
35
|
-
canUseAbTesting(): boolean;
|
|
36
35
|
ensureCanUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL): void;
|
|
37
36
|
incrementSeats(): Promise<void>;
|
|
38
37
|
decrementSeats(): Promise<void>;
|
|
@@ -123,9 +123,6 @@ class WcpContextImpl {
|
|
|
123
123
|
canUseAiEntryTranslation() {
|
|
124
124
|
return this.license.canUseAiEntryTranslation();
|
|
125
125
|
}
|
|
126
|
-
canUseAbTesting() {
|
|
127
|
-
return this.license.canUseAbTesting();
|
|
128
|
-
}
|
|
129
126
|
ensureCanUseFeature(wcpFeatureId) {
|
|
130
127
|
if (this.license.canUseFeature(wcpFeatureId)) return;
|
|
131
128
|
let message = `The ${wcpFeatureId} Webiny Control Panel feature cannot be used because your project license does not permit it.`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/wcp/WcpContext/WcpContext.js","sources":["../../../../src/features/wcp/WcpContext/WcpContext.ts"],"sourcesContent":["import type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport { getWcpApiUrl, getWcpAppUrl, getWcpProjectEnvironment } from \"@webiny/wcp\";\nimport WError from \"@webiny/error\";\nimport type {\n DecryptedWcpProjectLicense,\n ILicense,\n WcpProjectEnvironment,\n WcpProject\n} from \"@webiny/wcp/types.js\";\nimport { WcpContext } from \"./abstractions.js\";\nimport { wcpFetch } from \"./utils.js\";\n\nconst wcpProjectEnvironment = getWcpProjectEnvironment();\n\nexport interface CreateWcpContextParams {\n testProjectLicense?: DecryptedWcpProjectLicense;\n}\n\nexport class WcpContextImpl implements WcpContext.Interface {\n constructor(private license: ILicense) {}\n\n private getWcpProjectUrl(path = \"\"): string | null {\n if (!wcpProjectEnvironment) {\n return null;\n }\n\n const orgId = wcpProjectEnvironment.org.id;\n const projectId = wcpProjectEnvironment.project.id;\n const url = [\"/orgs\", orgId, \"projects\", projectId, path].filter(Boolean).join(\"/\");\n return getWcpApiUrl(url);\n }\n\n private async updateSeats(operation: \"increment\" | \"decrement\"): Promise<void> {\n if (!wcpProjectEnvironment) {\n return;\n }\n\n const updateSeatsUrl = this.getWcpProjectUrl(\"package/seats\");\n\n const response = await wcpFetch({\n url: updateSeatsUrl!,\n authorization: wcpProjectEnvironment.apiKey,\n body: { operation },\n meta: {\n action: operation + \"Seats\"\n }\n });\n\n if (response.error) {\n const message = response.message || `Failed to ${operation} user seats.`;\n console.error(message, response.status, response.statusText);\n throw new WError(message, \"WCP_CANNOT_UPDATE_USER_TENANTS\");\n }\n }\n\n private async updateTenants(operation: \"increment\" | \"decrement\"): Promise<void> {\n if (!wcpProjectEnvironment) {\n return;\n }\n\n const updateTenantsUrl = this.getWcpProjectUrl(\"package/tenants\");\n\n const response = await wcpFetch({\n url: updateTenantsUrl!,\n authorization: wcpProjectEnvironment.apiKey,\n body: { operation },\n meta: {\n action: operation + \"Tenants\"\n }\n });\n\n if (response.error) {\n const message = response.message || `Failed to ${operation} tenants.`;\n console.error(message, response.status, response.statusText);\n throw new WError(message, \"WCP_CANNOT_UPDATE_USER_TENANTS\");\n }\n }\n\n getRawLicense(): DecryptedWcpProjectLicense | null {\n return this.license.getRawLicense();\n }\n\n getProject(): WcpProject | null {\n return this.license.getProject();\n }\n\n getProjectWithFeatureFlags(): WcpProject | null {\n return this.getProject();\n }\n\n getProjectEnvironment(): WcpProjectEnvironment | null {\n return wcpProjectEnvironment;\n }\n\n getProjectLicense(): ILicense {\n return this.license;\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL): boolean {\n return this.license.canUseFeature(wcpFeatureId);\n }\n\n canUseAacl(): boolean {\n return this.license.canUseAacl();\n }\n\n canUseTeams(): boolean {\n return this.license.canUseTeams();\n }\n\n canUseFolderLevelPermissions(): boolean {\n return this.license.canUseFolderLevelPermissions();\n }\n\n canUsePrivateFiles(): boolean {\n return this.license.canUsePrivateFiles();\n }\n\n canUseAuditLogs(): boolean {\n return this.license.canUseAuditLogs();\n }\n\n canUseRecordLocking(): boolean {\n return this.license.canUseRecordLocking();\n }\n\n canUseFileManagerThreatDetection(): boolean {\n return this.license.canUseFileManagerThreatDetection();\n }\n\n canUseWorkflows(): boolean {\n return this.license.canUseWorkflows();\n }\n\n canUseHcmsFieldPermissions(): boolean {\n return this.license.canUseHcmsFieldPermissions();\n }\n\n canUseAiImageEnrichment(): boolean {\n return this.license.canUseAiImageEnrichment();\n }\n\n canUseAiPageGeneration(): boolean {\n return this.license.canUseAiPageGeneration();\n }\n\n canUseAiPageTranslation(): boolean {\n return this.license.canUseAiPageTranslation();\n }\n\n canUseAiLexicalGeneration(): boolean {\n return this.license.canUseAiLexicalGeneration();\n }\n\n canUseAiEntryGeneration(): boolean {\n return this.license.canUseAiEntryGeneration();\n }\n\n canUseAiEntryComparison(): boolean {\n return this.license.canUseAiEntryComparison();\n }\n\n canUseAiEntryTranslation(): boolean {\n return this.license.canUseAiEntryTranslation();\n }\n\n
|
|
1
|
+
{"version":3,"file":"features/wcp/WcpContext/WcpContext.js","sources":["../../../../src/features/wcp/WcpContext/WcpContext.ts"],"sourcesContent":["import type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport { getWcpApiUrl, getWcpAppUrl, getWcpProjectEnvironment } from \"@webiny/wcp\";\nimport WError from \"@webiny/error\";\nimport type {\n DecryptedWcpProjectLicense,\n ILicense,\n WcpProjectEnvironment,\n WcpProject\n} from \"@webiny/wcp/types.js\";\nimport { WcpContext } from \"./abstractions.js\";\nimport { wcpFetch } from \"./utils.js\";\n\nconst wcpProjectEnvironment = getWcpProjectEnvironment();\n\nexport interface CreateWcpContextParams {\n testProjectLicense?: DecryptedWcpProjectLicense;\n}\n\nexport class WcpContextImpl implements WcpContext.Interface {\n constructor(private license: ILicense) {}\n\n private getWcpProjectUrl(path = \"\"): string | null {\n if (!wcpProjectEnvironment) {\n return null;\n }\n\n const orgId = wcpProjectEnvironment.org.id;\n const projectId = wcpProjectEnvironment.project.id;\n const url = [\"/orgs\", orgId, \"projects\", projectId, path].filter(Boolean).join(\"/\");\n return getWcpApiUrl(url);\n }\n\n private async updateSeats(operation: \"increment\" | \"decrement\"): Promise<void> {\n if (!wcpProjectEnvironment) {\n return;\n }\n\n const updateSeatsUrl = this.getWcpProjectUrl(\"package/seats\");\n\n const response = await wcpFetch({\n url: updateSeatsUrl!,\n authorization: wcpProjectEnvironment.apiKey,\n body: { operation },\n meta: {\n action: operation + \"Seats\"\n }\n });\n\n if (response.error) {\n const message = response.message || `Failed to ${operation} user seats.`;\n console.error(message, response.status, response.statusText);\n throw new WError(message, \"WCP_CANNOT_UPDATE_USER_TENANTS\");\n }\n }\n\n private async updateTenants(operation: \"increment\" | \"decrement\"): Promise<void> {\n if (!wcpProjectEnvironment) {\n return;\n }\n\n const updateTenantsUrl = this.getWcpProjectUrl(\"package/tenants\");\n\n const response = await wcpFetch({\n url: updateTenantsUrl!,\n authorization: wcpProjectEnvironment.apiKey,\n body: { operation },\n meta: {\n action: operation + \"Tenants\"\n }\n });\n\n if (response.error) {\n const message = response.message || `Failed to ${operation} tenants.`;\n console.error(message, response.status, response.statusText);\n throw new WError(message, \"WCP_CANNOT_UPDATE_USER_TENANTS\");\n }\n }\n\n getRawLicense(): DecryptedWcpProjectLicense | null {\n return this.license.getRawLicense();\n }\n\n getProject(): WcpProject | null {\n return this.license.getProject();\n }\n\n getProjectWithFeatureFlags(): WcpProject | null {\n return this.getProject();\n }\n\n getProjectEnvironment(): WcpProjectEnvironment | null {\n return wcpProjectEnvironment;\n }\n\n getProjectLicense(): ILicense {\n return this.license;\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL): boolean {\n return this.license.canUseFeature(wcpFeatureId);\n }\n\n canUseAacl(): boolean {\n return this.license.canUseAacl();\n }\n\n canUseTeams(): boolean {\n return this.license.canUseTeams();\n }\n\n canUseFolderLevelPermissions(): boolean {\n return this.license.canUseFolderLevelPermissions();\n }\n\n canUsePrivateFiles(): boolean {\n return this.license.canUsePrivateFiles();\n }\n\n canUseAuditLogs(): boolean {\n return this.license.canUseAuditLogs();\n }\n\n canUseRecordLocking(): boolean {\n return this.license.canUseRecordLocking();\n }\n\n canUseFileManagerThreatDetection(): boolean {\n return this.license.canUseFileManagerThreatDetection();\n }\n\n canUseWorkflows(): boolean {\n return this.license.canUseWorkflows();\n }\n\n canUseHcmsFieldPermissions(): boolean {\n return this.license.canUseHcmsFieldPermissions();\n }\n\n canUseAiImageEnrichment(): boolean {\n return this.license.canUseAiImageEnrichment();\n }\n\n canUseAiPageGeneration(): boolean {\n return this.license.canUseAiPageGeneration();\n }\n\n canUseAiPageTranslation(): boolean {\n return this.license.canUseAiPageTranslation();\n }\n\n canUseAiLexicalGeneration(): boolean {\n return this.license.canUseAiLexicalGeneration();\n }\n\n canUseAiEntryGeneration(): boolean {\n return this.license.canUseAiEntryGeneration();\n }\n\n canUseAiEntryComparison(): boolean {\n return this.license.canUseAiEntryComparison();\n }\n\n canUseAiEntryTranslation(): boolean {\n return this.license.canUseAiEntryTranslation();\n }\n\n ensureCanUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL): void {\n if (this.license.canUseFeature(wcpFeatureId)) {\n return;\n }\n\n let message = `The ${wcpFeatureId} Webiny Control Panel feature cannot be used because your project license does not permit it.`;\n if (wcpProjectEnvironment) {\n const { org, project } = wcpProjectEnvironment;\n const upgradeProjectLicenseLink = getWcpAppUrl(`/${org.id}/${project.id}/settings`);\n message += ` To upgrade your project license, please use the following link: ${upgradeProjectLicenseLink}.`;\n }\n\n throw new WError(message, \"WCP_CANNOT_USE_FEATURE\", { wcpFeatureId });\n }\n\n async incrementSeats(): Promise<void> {\n await this.updateSeats(\"increment\");\n }\n\n async decrementSeats(): Promise<void> {\n await this.updateSeats(\"decrement\");\n }\n\n async incrementTenants(): Promise<void> {\n await this.updateTenants(\"increment\");\n }\n\n async decrementTenants(): Promise<void> {\n await this.updateTenants(\"decrement\");\n }\n\n toDto() {\n return this.getRawLicense();\n }\n}\n"],"names":["wcpProjectEnvironment","getWcpProjectEnvironment","WcpContextImpl","license","path","orgId","projectId","url","Boolean","getWcpApiUrl","operation","updateSeatsUrl","response","wcpFetch","message","console","WError","updateTenantsUrl","wcpFeatureId","org","project","upgradeProjectLicenseLink","getWcpAppUrl"],"mappings":"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"}
|
|
@@ -69,9 +69,6 @@ declare class WcpContextWithFeatureFlagsDecoratorImpl implements WcpContext.Inte
|
|
|
69
69
|
};
|
|
70
70
|
};
|
|
71
71
|
};
|
|
72
|
-
abTesting: {
|
|
73
|
-
enabled: boolean;
|
|
74
|
-
};
|
|
75
72
|
};
|
|
76
73
|
};
|
|
77
74
|
} | null;
|
|
@@ -94,7 +91,6 @@ declare class WcpContextWithFeatureFlagsDecoratorImpl implements WcpContext.Inte
|
|
|
94
91
|
canUseAiEntryGeneration(): boolean;
|
|
95
92
|
canUseAiEntryComparison(): boolean;
|
|
96
93
|
canUseAiEntryTranslation(): boolean;
|
|
97
|
-
canUseAbTesting(): boolean;
|
|
98
94
|
ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL): void;
|
|
99
95
|
incrementSeats(): Promise<void>;
|
|
100
96
|
decrementSeats(): Promise<void>;
|
|
@@ -69,10 +69,6 @@ class WcpContextWithFeatureFlagsDecoratorImpl {
|
|
|
69
69
|
entryTranslation: flags.isAiEntryTranslationEnabled() ? project.package.features.aiPowerups?.options?.cms?.entryTranslation : false
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
},
|
|
73
|
-
abTesting: {
|
|
74
|
-
...project.package.features.abTesting,
|
|
75
|
-
enabled: flags.isAbTestingEnabled() ? project.package.features.abTesting?.enabled : false
|
|
76
72
|
}
|
|
77
73
|
}
|
|
78
74
|
}
|
|
@@ -135,9 +131,6 @@ class WcpContextWithFeatureFlagsDecoratorImpl {
|
|
|
135
131
|
canUseAiEntryTranslation() {
|
|
136
132
|
return this.decoratee.canUseAiEntryTranslation() && this.featureFlags.get().isAiEntryTranslationEnabled();
|
|
137
133
|
}
|
|
138
|
-
canUseAbTesting() {
|
|
139
|
-
return this.decoratee.canUseAbTesting() && this.featureFlags.get().isAbTestingEnabled();
|
|
140
|
-
}
|
|
141
134
|
ensureCanUseFeature(featureId) {
|
|
142
135
|
return this.decoratee.ensureCanUseFeature(featureId);
|
|
143
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js","sources":["../../../../../src/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.ts"],"sourcesContent":["import type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport { WcpContext } from \"../abstractions.js\";\nimport { FeatureFlags } from \"../../../featureFlags/abstractions.js\";\n\nclass WcpContextWithFeatureFlagsDecoratorImpl implements WcpContext.Interface {\n constructor(\n private featureFlags: FeatureFlags.Interface,\n private decoratee: WcpContext.Interface\n ) {}\n\n getRawLicense() {\n return this.decoratee.getRawLicense();\n }\n\n getProject() {\n return this.decoratee.getProject();\n }\n\n getProjectWithFeatureFlags() {\n const project = this.decoratee.getProjectWithFeatureFlags();\n if (!project) {\n return null;\n }\n\n const flags = this.featureFlags.get();\n\n return {\n ...project,\n package: {\n ...project.package,\n features: {\n ...project.package.features,\n multiTenancy: project.package.features.multiTenancy,\n advancedPublishingWorkflow: {\n ...project.package.features.advancedPublishingWorkflow,\n enabled: flags.isWorkflowsEnabled()\n ? project.package.features.advancedPublishingWorkflow.enabled\n : false\n },\n advancedAccessControlLayer: {\n ...project.package.features.advancedAccessControlLayer,\n enabled: flags.isAaclEnabled()\n ? project.package.features.advancedAccessControlLayer.enabled\n : false,\n options: {\n teams: flags.isTeamsEnabled()\n ? project.package.features.advancedAccessControlLayer.options.teams\n : false,\n privateFiles: flags.isPrivateFilesEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .privateFiles\n : false,\n folderLevelPermissions: flags.isFolderLevelPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .folderLevelPermissions\n : false,\n hcmsFieldPermissions: flags.isHcmsFieldPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .hcmsFieldPermissions\n : false\n }\n },\n auditLogs: {\n ...project.package.features.auditLogs,\n enabled: flags.isAuditLogsEnabled()\n ? project.package.features.auditLogs.enabled\n : false\n },\n recordLocking: {\n ...project.package.features.recordLocking,\n enabled: flags.isRecordLockingEnabled()\n ? project.package.features.recordLocking.enabled\n : false\n },\n fileManager: {\n ...project.package.features.fileManager,\n enabled: project.package.features.fileManager.enabled,\n options: {\n threatDetection: flags.isFileManagerThreatDetectionEnabled()\n ? project.package.features.fileManager.options.threatDetection\n : false\n }\n },\n aiPowerups: {\n ...project.package.features.aiPowerups,\n enabled: flags.isAiPowerupsEnabled()\n ? project.package.features.aiPowerups?.enabled\n : false,\n options: {\n websiteBuilder: {\n pageGeneration: flags.isAiPageGenerationEnabled()\n ? project.package.features.aiPowerups?.options?.websiteBuilder\n ?.pageGeneration\n : false,\n pageTranslation: flags.isAiPageTranslationEnabled()\n ? project.package.features.aiPowerups?.options?.websiteBuilder\n ?.pageTranslation\n : false\n },\n fileManager: {\n imageEnrichment: flags.isAiImageEnrichmentEnabled()\n ? project.package.features.aiPowerups?.options?.fileManager\n ?.imageEnrichment\n : false\n },\n lexicalGeneration: flags.isAiLexicalGenerationEnabled()\n ? project.package.features.aiPowerups?.options?.lexicalGeneration\n : false,\n cms: {\n entryGeneration: flags.isAiEntryGenerationEnabled()\n ? project.package.features.aiPowerups?.options?.cms\n ?.entryGeneration\n : false,\n entryComparison: flags.isAiEntryComparisonEnabled()\n ? project.package.features.aiPowerups?.options?.cms\n ?.entryComparison\n : false,\n entryTranslation: flags.isAiEntryTranslationEnabled()\n ? project.package.features.aiPowerups?.options?.cms\n ?.entryTranslation\n : false\n }\n }\n },\n abTesting: {\n ...project.package.features.abTesting,\n enabled: flags.isAbTestingEnabled()\n ? project.package.features.abTesting?.enabled\n : false\n }\n }\n }\n };\n }\n\n getProjectEnvironment() {\n return this.decoratee.getProjectEnvironment();\n }\n\n getProjectLicense() {\n return this.decoratee.getProjectLicense();\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.canUseFeature(wcpFeatureId);\n }\n\n canUseAacl() {\n return this.decoratee.canUseAacl() && this.featureFlags.get().isAaclEnabled();\n }\n\n canUseTeams() {\n return this.decoratee.canUseTeams() && this.featureFlags.get().isTeamsEnabled();\n }\n\n canUseFolderLevelPermissions() {\n return (\n this.decoratee.canUseFolderLevelPermissions() &&\n this.featureFlags.get().isFolderLevelPermissionsEnabled()\n );\n }\n\n canUsePrivateFiles() {\n return (\n this.decoratee.canUsePrivateFiles() && this.featureFlags.get().isPrivateFilesEnabled()\n );\n }\n\n canUseAuditLogs() {\n return this.decoratee.canUseAuditLogs() && this.featureFlags.get().isAuditLogsEnabled();\n }\n\n canUseRecordLocking() {\n return (\n this.decoratee.canUseRecordLocking() && this.featureFlags.get().isRecordLockingEnabled()\n );\n }\n\n canUseFileManagerThreatDetection() {\n return (\n this.decoratee.canUseFileManagerThreatDetection() &&\n this.featureFlags.get().isFileManagerThreatDetectionEnabled()\n );\n }\n\n canUseWorkflows() {\n return this.decoratee.canUseWorkflows() && this.featureFlags.get().isWorkflowsEnabled();\n }\n\n canUseHcmsFieldPermissions() {\n return (\n this.decoratee.canUseHcmsFieldPermissions() &&\n this.featureFlags.get().isHcmsFieldPermissionsEnabled()\n );\n }\n\n canUseAiImageEnrichment() {\n return (\n this.decoratee.canUseAiImageEnrichment() &&\n this.featureFlags.get().isAiImageEnrichmentEnabled()\n );\n }\n\n canUseAiPageGeneration() {\n return (\n this.decoratee.canUseAiPageGeneration() &&\n this.featureFlags.get().isAiPageGenerationEnabled()\n );\n }\n\n canUseAiPageTranslation() {\n return (\n this.decoratee.canUseAiPageTranslation() &&\n this.featureFlags.get().isAiPageTranslationEnabled()\n );\n }\n\n canUseAiLexicalGeneration() {\n return (\n this.decoratee.canUseAiLexicalGeneration() &&\n this.featureFlags.get().isAiLexicalGenerationEnabled()\n );\n }\n\n canUseAiEntryGeneration() {\n return (\n this.decoratee.canUseAiEntryGeneration() &&\n this.featureFlags.get().isAiEntryGenerationEnabled()\n );\n }\n\n canUseAiEntryComparison() {\n return (\n this.decoratee.canUseAiEntryComparison() &&\n this.featureFlags.get().isAiEntryComparisonEnabled()\n );\n }\n\n canUseAiEntryTranslation() {\n return (\n this.decoratee.canUseAiEntryTranslation() &&\n this.featureFlags.get().isAiEntryTranslationEnabled()\n );\n }\n\n canUseAbTesting() {\n return this.decoratee.canUseAbTesting() && this.featureFlags.get().isAbTestingEnabled();\n }\n\n ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.ensureCanUseFeature(featureId);\n }\n\n async incrementSeats() {\n return this.decoratee.incrementSeats();\n }\n\n async decrementSeats() {\n return this.decoratee.decrementSeats();\n }\n\n async incrementTenants() {\n return this.decoratee.incrementTenants();\n }\n\n async decrementTenants() {\n return this.decoratee.decrementTenants();\n }\n\n toDto() {\n return this.decoratee.toDto();\n }\n}\n\nexport const WcpContextWithFeatureFlagsDecorator = WcpContext.createDecorator({\n decorator: WcpContextWithFeatureFlagsDecoratorImpl,\n dependencies: [FeatureFlags]\n});\n"],"names":["WcpContextWithFeatureFlagsDecoratorImpl","featureFlags","decoratee","project","flags","wcpFeatureId","featureId","WcpContextWithFeatureFlagsDecorator","WcpContext","FeatureFlags"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js","sources":["../../../../../src/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.ts"],"sourcesContent":["import type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport { WcpContext } from \"../abstractions.js\";\nimport { FeatureFlags } from \"../../../featureFlags/abstractions.js\";\n\nclass WcpContextWithFeatureFlagsDecoratorImpl implements WcpContext.Interface {\n constructor(\n private featureFlags: FeatureFlags.Interface,\n private decoratee: WcpContext.Interface\n ) {}\n\n getRawLicense() {\n return this.decoratee.getRawLicense();\n }\n\n getProject() {\n return this.decoratee.getProject();\n }\n\n getProjectWithFeatureFlags() {\n const project = this.decoratee.getProjectWithFeatureFlags();\n if (!project) {\n return null;\n }\n\n const flags = this.featureFlags.get();\n\n return {\n ...project,\n package: {\n ...project.package,\n features: {\n ...project.package.features,\n multiTenancy: project.package.features.multiTenancy,\n advancedPublishingWorkflow: {\n ...project.package.features.advancedPublishingWorkflow,\n enabled: flags.isWorkflowsEnabled()\n ? project.package.features.advancedPublishingWorkflow.enabled\n : false\n },\n advancedAccessControlLayer: {\n ...project.package.features.advancedAccessControlLayer,\n enabled: flags.isAaclEnabled()\n ? project.package.features.advancedAccessControlLayer.enabled\n : false,\n options: {\n teams: flags.isTeamsEnabled()\n ? project.package.features.advancedAccessControlLayer.options.teams\n : false,\n privateFiles: flags.isPrivateFilesEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .privateFiles\n : false,\n folderLevelPermissions: flags.isFolderLevelPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .folderLevelPermissions\n : false,\n hcmsFieldPermissions: flags.isHcmsFieldPermissionsEnabled()\n ? project.package.features.advancedAccessControlLayer.options\n .hcmsFieldPermissions\n : false\n }\n },\n auditLogs: {\n ...project.package.features.auditLogs,\n enabled: flags.isAuditLogsEnabled()\n ? project.package.features.auditLogs.enabled\n : false\n },\n recordLocking: {\n ...project.package.features.recordLocking,\n enabled: flags.isRecordLockingEnabled()\n ? project.package.features.recordLocking.enabled\n : false\n },\n fileManager: {\n ...project.package.features.fileManager,\n enabled: project.package.features.fileManager.enabled,\n options: {\n threatDetection: flags.isFileManagerThreatDetectionEnabled()\n ? project.package.features.fileManager.options.threatDetection\n : false\n }\n },\n aiPowerups: {\n ...project.package.features.aiPowerups,\n enabled: flags.isAiPowerupsEnabled()\n ? project.package.features.aiPowerups?.enabled\n : false,\n options: {\n websiteBuilder: {\n pageGeneration: flags.isAiPageGenerationEnabled()\n ? project.package.features.aiPowerups?.options?.websiteBuilder\n ?.pageGeneration\n : false,\n pageTranslation: flags.isAiPageTranslationEnabled()\n ? project.package.features.aiPowerups?.options?.websiteBuilder\n ?.pageTranslation\n : false\n },\n fileManager: {\n imageEnrichment: flags.isAiImageEnrichmentEnabled()\n ? project.package.features.aiPowerups?.options?.fileManager\n ?.imageEnrichment\n : false\n },\n lexicalGeneration: flags.isAiLexicalGenerationEnabled()\n ? project.package.features.aiPowerups?.options?.lexicalGeneration\n : false,\n cms: {\n entryGeneration: flags.isAiEntryGenerationEnabled()\n ? project.package.features.aiPowerups?.options?.cms\n ?.entryGeneration\n : false,\n entryComparison: flags.isAiEntryComparisonEnabled()\n ? project.package.features.aiPowerups?.options?.cms\n ?.entryComparison\n : false,\n entryTranslation: flags.isAiEntryTranslationEnabled()\n ? project.package.features.aiPowerups?.options?.cms\n ?.entryTranslation\n : false\n }\n }\n }\n }\n }\n };\n }\n\n getProjectEnvironment() {\n return this.decoratee.getProjectEnvironment();\n }\n\n getProjectLicense() {\n return this.decoratee.getProjectLicense();\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.canUseFeature(wcpFeatureId);\n }\n\n canUseAacl() {\n return this.decoratee.canUseAacl() && this.featureFlags.get().isAaclEnabled();\n }\n\n canUseTeams() {\n return this.decoratee.canUseTeams() && this.featureFlags.get().isTeamsEnabled();\n }\n\n canUseFolderLevelPermissions() {\n return (\n this.decoratee.canUseFolderLevelPermissions() &&\n this.featureFlags.get().isFolderLevelPermissionsEnabled()\n );\n }\n\n canUsePrivateFiles() {\n return (\n this.decoratee.canUsePrivateFiles() && this.featureFlags.get().isPrivateFilesEnabled()\n );\n }\n\n canUseAuditLogs() {\n return this.decoratee.canUseAuditLogs() && this.featureFlags.get().isAuditLogsEnabled();\n }\n\n canUseRecordLocking() {\n return (\n this.decoratee.canUseRecordLocking() && this.featureFlags.get().isRecordLockingEnabled()\n );\n }\n\n canUseFileManagerThreatDetection() {\n return (\n this.decoratee.canUseFileManagerThreatDetection() &&\n this.featureFlags.get().isFileManagerThreatDetectionEnabled()\n );\n }\n\n canUseWorkflows() {\n return this.decoratee.canUseWorkflows() && this.featureFlags.get().isWorkflowsEnabled();\n }\n\n canUseHcmsFieldPermissions() {\n return (\n this.decoratee.canUseHcmsFieldPermissions() &&\n this.featureFlags.get().isHcmsFieldPermissionsEnabled()\n );\n }\n\n canUseAiImageEnrichment() {\n return (\n this.decoratee.canUseAiImageEnrichment() &&\n this.featureFlags.get().isAiImageEnrichmentEnabled()\n );\n }\n\n canUseAiPageGeneration() {\n return (\n this.decoratee.canUseAiPageGeneration() &&\n this.featureFlags.get().isAiPageGenerationEnabled()\n );\n }\n\n canUseAiPageTranslation() {\n return (\n this.decoratee.canUseAiPageTranslation() &&\n this.featureFlags.get().isAiPageTranslationEnabled()\n );\n }\n\n canUseAiLexicalGeneration() {\n return (\n this.decoratee.canUseAiLexicalGeneration() &&\n this.featureFlags.get().isAiLexicalGenerationEnabled()\n );\n }\n\n canUseAiEntryGeneration() {\n return (\n this.decoratee.canUseAiEntryGeneration() &&\n this.featureFlags.get().isAiEntryGenerationEnabled()\n );\n }\n\n canUseAiEntryComparison() {\n return (\n this.decoratee.canUseAiEntryComparison() &&\n this.featureFlags.get().isAiEntryComparisonEnabled()\n );\n }\n\n canUseAiEntryTranslation() {\n return (\n this.decoratee.canUseAiEntryTranslation() &&\n this.featureFlags.get().isAiEntryTranslationEnabled()\n );\n }\n\n ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL) {\n return this.decoratee.ensureCanUseFeature(featureId);\n }\n\n async incrementSeats() {\n return this.decoratee.incrementSeats();\n }\n\n async decrementSeats() {\n return this.decoratee.decrementSeats();\n }\n\n async incrementTenants() {\n return this.decoratee.incrementTenants();\n }\n\n async decrementTenants() {\n return this.decoratee.decrementTenants();\n }\n\n toDto() {\n return this.decoratee.toDto();\n }\n}\n\nexport const WcpContextWithFeatureFlagsDecorator = WcpContext.createDecorator({\n decorator: WcpContextWithFeatureFlagsDecoratorImpl,\n dependencies: [FeatureFlags]\n});\n"],"names":["WcpContextWithFeatureFlagsDecoratorImpl","featureFlags","decoratee","project","flags","wcpFeatureId","featureId","WcpContextWithFeatureFlagsDecorator","WcpContext","FeatureFlags"],"mappings":"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"}
|
package/graphql/wcp/graphql.js
CHANGED
|
@@ -18,7 +18,6 @@ const createWcpGraphQL = ()=>new GraphQLSchemaPlugin({
|
|
|
18
18
|
recordLocking: WcpProjectPackageFeaturesFeature
|
|
19
19
|
fileManager: WcpProjectPackageFeaturesFeature
|
|
20
20
|
aiPowerups: WcpProjectPackageFeaturesFeature
|
|
21
|
-
abTesting: WcpProjectPackageFeaturesFeature
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
type WcpProjectPackage {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/wcp/graphql.js","sources":["../../../src/graphql/wcp/graphql.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/index.js\";\nimport { ErrorResponse, Response } from \"@webiny/handler-graphql/responses.js\";\nimport { WcpContext } from \"~/features/wcp/WcpContext/index.js\";\n\nconst emptyResolver = () => ({});\n\nexport const createWcpGraphQL = () => {\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type WcpProjectPackageFeaturesFeature {\n enabled: Boolean\n options: JSON\n }\n\n type WcpProjectPackageFeatures {\n seats: WcpProjectPackageFeaturesFeature\n multiTenancy: WcpProjectPackageFeaturesFeature\n advancedPublishingWorkflow: WcpProjectPackageFeaturesFeature\n advancedAccessControlLayer: WcpProjectPackageFeaturesFeature\n auditLogs: WcpProjectPackageFeaturesFeature\n recordLocking: WcpProjectPackageFeaturesFeature\n fileManager: WcpProjectPackageFeaturesFeature\n aiPowerups: WcpProjectPackageFeaturesFeature\n
|
|
1
|
+
{"version":3,"file":"graphql/wcp/graphql.js","sources":["../../../src/graphql/wcp/graphql.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/index.js\";\nimport { ErrorResponse, Response } from \"@webiny/handler-graphql/responses.js\";\nimport { WcpContext } from \"~/features/wcp/WcpContext/index.js\";\n\nconst emptyResolver = () => ({});\n\nexport const createWcpGraphQL = () => {\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type WcpProjectPackageFeaturesFeature {\n enabled: Boolean\n options: JSON\n }\n\n type WcpProjectPackageFeatures {\n seats: WcpProjectPackageFeaturesFeature\n multiTenancy: WcpProjectPackageFeaturesFeature\n advancedPublishingWorkflow: WcpProjectPackageFeaturesFeature\n advancedAccessControlLayer: WcpProjectPackageFeaturesFeature\n auditLogs: WcpProjectPackageFeaturesFeature\n recordLocking: WcpProjectPackageFeaturesFeature\n fileManager: WcpProjectPackageFeaturesFeature\n aiPowerups: WcpProjectPackageFeaturesFeature\n }\n\n type WcpProjectPackage {\n features: WcpProjectPackageFeatures\n }\n\n type WcpProject {\n orgId: ID\n projectId: ID\n package: WcpProjectPackage\n }\n\n type WcpError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type WcpProjectResponse {\n data: WcpProject\n error: WcpError\n }\n\n type WcpQuery {\n getProject: WcpProjectResponse\n }\n\n type WcpMutation {\n updateProject: WcpProjectResponse\n }\n\n extend type Query {\n wcp: WcpQuery\n }\n\n extend type Mutation {\n wcp: WcpMutation\n }\n `,\n resolvers: {\n Query: {\n wcp: emptyResolver\n },\n WcpQuery: {\n getProject: async (_, __, context) => {\n try {\n const wcpContext = context.container.resolve(WcpContext);\n const project = wcpContext.getProjectWithFeatureFlags();\n\n if (!project) {\n throw Error(`Could not get project!`);\n }\n\n return new Response(project);\n } catch (e) {\n return new ErrorResponse({\n code: \"COULD_NOT_GET_PROJECT\",\n message: e.message,\n data: null,\n stack: e.stack\n });\n }\n }\n }\n }\n });\n};\n"],"names":["emptyResolver","createWcpGraphQL","GraphQLSchemaPlugin","_","__","context","wcpContext","WcpContext","project","Error","Response","e","ErrorResponse"],"mappings":";;;AAIA,MAAMA,gBAAgB,IAAO,EAAC;AAEvB,MAAMC,mBAAmB,IACrB,IAAIC,oBAAoB;QAC3B,UAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsDzB,CAAC;QACD,WAAW;YACP,OAAO;gBACH,KAAKF;YACT;YACA,UAAU;gBACN,YAAY,OAAOG,GAAGC,IAAIC;oBACtB,IAAI;wBACA,MAAMC,aAAaD,QAAQ,SAAS,CAAC,OAAO,CAACE;wBAC7C,MAAMC,UAAUF,WAAW,0BAA0B;wBAErD,IAAI,CAACE,SACD,MAAMC,MAAM;wBAGhB,OAAO,IAAIC,SAASF;oBACxB,EAAE,OAAOG,GAAG;wBACR,OAAO,IAAIC,cAAc;4BACrB,MAAM;4BACN,SAASD,EAAE,OAAO;4BAClB,MAAM;4BACN,OAAOA,EAAE,KAAK;wBAClB;oBACJ;gBACJ;YACJ;QACJ;IACJ"}
|
|
@@ -28,7 +28,6 @@ export declare class LegacyWcpContext implements WcpContextObject {
|
|
|
28
28
|
canUseAiEntryGeneration(): boolean;
|
|
29
29
|
canUseAiEntryComparison(): boolean;
|
|
30
30
|
canUseAiEntryTranslation(): boolean;
|
|
31
|
-
canUseAbTesting(): boolean;
|
|
32
31
|
ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL): void;
|
|
33
32
|
incrementSeats(): Promise<void>;
|
|
34
33
|
decrementSeats(): Promise<void>;
|
|
@@ -72,9 +72,6 @@ class LegacyWcpContext {
|
|
|
72
72
|
canUseAiEntryTranslation() {
|
|
73
73
|
return this.getWcpContext().canUseAiEntryTranslation();
|
|
74
74
|
}
|
|
75
|
-
canUseAbTesting() {
|
|
76
|
-
return this.getWcpContext().canUseAbTesting();
|
|
77
|
-
}
|
|
78
75
|
ensureCanUseFeature(featureId) {
|
|
79
76
|
this.getWcpContext().ensureCanUseFeature(featureId);
|
|
80
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy/wcp/LegacyWcpContext.js","sources":["../../../src/legacy/wcp/LegacyWcpContext.ts"],"sourcesContent":["import { Container } from \"@webiny/di\";\nimport type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport type {\n DecryptedWcpProjectLicense,\n ILicense,\n WcpProject,\n WcpProjectEnvironment\n} from \"@webiny/wcp/types.js\";\nimport { WcpContextObject } from \"~/features/wcp/WcpContext/types.js\";\nimport { WcpContext } from \"~/features/wcp/WcpContext/index.js\";\n\nexport class LegacyWcpContext implements WcpContextObject {\n constructor(private container: Container) {}\n\n private getWcpContext(): WcpContext.Interface {\n return this.container.resolve(WcpContext);\n }\n\n getRawLicense(): DecryptedWcpProjectLicense | null {\n return this.getWcpContext().getRawLicense();\n }\n\n getProject(): WcpProject | null {\n return this.getWcpContext().getProject();\n }\n\n getProjectWithFeatureFlags(): WcpProject | null {\n return this.getWcpContext().getProjectWithFeatureFlags();\n }\n\n getProjectLicense(): ILicense {\n return this.getWcpContext().getProjectLicense();\n }\n\n getProjectEnvironment(): WcpProjectEnvironment | null {\n return this.getWcpContext().getProjectEnvironment();\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL): boolean {\n return this.getWcpContext().canUseFeature(wcpFeatureId);\n }\n\n canUseAacl(): boolean {\n return this.getWcpContext().canUseAacl();\n }\n\n canUseTeams(): boolean {\n return this.getWcpContext().canUseTeams();\n }\n\n canUseFolderLevelPermissions(): boolean {\n return this.getWcpContext().canUseFolderLevelPermissions();\n }\n\n canUsePrivateFiles(): boolean {\n return this.getWcpContext().canUsePrivateFiles();\n }\n\n canUseAuditLogs(): boolean {\n return this.getWcpContext().canUseAuditLogs();\n }\n\n canUseRecordLocking(): boolean {\n return this.getWcpContext().canUseRecordLocking();\n }\n\n canUseFileManagerThreatDetection(): boolean {\n return this.getWcpContext().canUseFileManagerThreatDetection();\n }\n\n canUseWorkflows(): boolean {\n return this.getWcpContext().canUseWorkflows();\n }\n\n canUseHcmsFieldPermissions(): boolean {\n return this.getWcpContext().canUseHcmsFieldPermissions();\n }\n\n canUseAiImageEnrichment(): boolean {\n return this.getWcpContext().canUseAiImageEnrichment();\n }\n\n canUseAiPageGeneration(): boolean {\n return this.getWcpContext().canUseAiPageGeneration();\n }\n\n canUseAiPageTranslation(): boolean {\n return this.getWcpContext().canUseAiPageTranslation();\n }\n\n canUseAiLexicalGeneration(): boolean {\n return this.getWcpContext().canUseAiLexicalGeneration();\n }\n\n canUseAiEntryGeneration(): boolean {\n return this.getWcpContext().canUseAiEntryGeneration();\n }\n\n canUseAiEntryComparison(): boolean {\n return this.getWcpContext().canUseAiEntryComparison();\n }\n\n canUseAiEntryTranslation(): boolean {\n return this.getWcpContext().canUseAiEntryTranslation();\n }\n\n
|
|
1
|
+
{"version":3,"file":"legacy/wcp/LegacyWcpContext.js","sources":["../../../src/legacy/wcp/LegacyWcpContext.ts"],"sourcesContent":["import { Container } from \"@webiny/di\";\nimport type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\nimport type {\n DecryptedWcpProjectLicense,\n ILicense,\n WcpProject,\n WcpProjectEnvironment\n} from \"@webiny/wcp/types.js\";\nimport { WcpContextObject } from \"~/features/wcp/WcpContext/types.js\";\nimport { WcpContext } from \"~/features/wcp/WcpContext/index.js\";\n\nexport class LegacyWcpContext implements WcpContextObject {\n constructor(private container: Container) {}\n\n private getWcpContext(): WcpContext.Interface {\n return this.container.resolve(WcpContext);\n }\n\n getRawLicense(): DecryptedWcpProjectLicense | null {\n return this.getWcpContext().getRawLicense();\n }\n\n getProject(): WcpProject | null {\n return this.getWcpContext().getProject();\n }\n\n getProjectWithFeatureFlags(): WcpProject | null {\n return this.getWcpContext().getProjectWithFeatureFlags();\n }\n\n getProjectLicense(): ILicense {\n return this.getWcpContext().getProjectLicense();\n }\n\n getProjectEnvironment(): WcpProjectEnvironment | null {\n return this.getWcpContext().getProjectEnvironment();\n }\n\n canUseFeature(wcpFeatureId: keyof typeof WCP_FEATURE_LABEL): boolean {\n return this.getWcpContext().canUseFeature(wcpFeatureId);\n }\n\n canUseAacl(): boolean {\n return this.getWcpContext().canUseAacl();\n }\n\n canUseTeams(): boolean {\n return this.getWcpContext().canUseTeams();\n }\n\n canUseFolderLevelPermissions(): boolean {\n return this.getWcpContext().canUseFolderLevelPermissions();\n }\n\n canUsePrivateFiles(): boolean {\n return this.getWcpContext().canUsePrivateFiles();\n }\n\n canUseAuditLogs(): boolean {\n return this.getWcpContext().canUseAuditLogs();\n }\n\n canUseRecordLocking(): boolean {\n return this.getWcpContext().canUseRecordLocking();\n }\n\n canUseFileManagerThreatDetection(): boolean {\n return this.getWcpContext().canUseFileManagerThreatDetection();\n }\n\n canUseWorkflows(): boolean {\n return this.getWcpContext().canUseWorkflows();\n }\n\n canUseHcmsFieldPermissions(): boolean {\n return this.getWcpContext().canUseHcmsFieldPermissions();\n }\n\n canUseAiImageEnrichment(): boolean {\n return this.getWcpContext().canUseAiImageEnrichment();\n }\n\n canUseAiPageGeneration(): boolean {\n return this.getWcpContext().canUseAiPageGeneration();\n }\n\n canUseAiPageTranslation(): boolean {\n return this.getWcpContext().canUseAiPageTranslation();\n }\n\n canUseAiLexicalGeneration(): boolean {\n return this.getWcpContext().canUseAiLexicalGeneration();\n }\n\n canUseAiEntryGeneration(): boolean {\n return this.getWcpContext().canUseAiEntryGeneration();\n }\n\n canUseAiEntryComparison(): boolean {\n return this.getWcpContext().canUseAiEntryComparison();\n }\n\n canUseAiEntryTranslation(): boolean {\n return this.getWcpContext().canUseAiEntryTranslation();\n }\n\n ensureCanUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL): void {\n this.getWcpContext().ensureCanUseFeature(featureId);\n }\n\n async incrementSeats(): Promise<void> {\n await this.getWcpContext().incrementSeats();\n }\n\n async decrementSeats(): Promise<void> {\n await this.getWcpContext().decrementSeats();\n }\n\n async incrementTenants(): Promise<void> {\n await this.getWcpContext().incrementTenants();\n }\n\n async decrementTenants(): Promise<void> {\n await this.getWcpContext().decrementTenants();\n }\n\n toDto(): DecryptedWcpProjectLicense | null {\n return this.getWcpContext().toDto();\n }\n}\n"],"names":["LegacyWcpContext","container","WcpContext","wcpFeatureId","featureId"],"mappings":";AAWO,MAAMA;IACT,YAAoBC,SAAoB,CAAE;aAAtBA,SAAS,GAATA;IAAuB;IAEnC,gBAAsC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;IAClC;IAEA,gBAAmD;QAC/C,OAAO,IAAI,CAAC,aAAa,GAAG,aAAa;IAC7C;IAEA,aAAgC;QAC5B,OAAO,IAAI,CAAC,aAAa,GAAG,UAAU;IAC1C;IAEA,6BAAgD;QAC5C,OAAO,IAAI,CAAC,aAAa,GAAG,0BAA0B;IAC1D;IAEA,oBAA8B;QAC1B,OAAO,IAAI,CAAC,aAAa,GAAG,iBAAiB;IACjD;IAEA,wBAAsD;QAClD,OAAO,IAAI,CAAC,aAAa,GAAG,qBAAqB;IACrD;IAEA,cAAcC,YAA4C,EAAW;QACjE,OAAO,IAAI,CAAC,aAAa,GAAG,aAAa,CAACA;IAC9C;IAEA,aAAsB;QAClB,OAAO,IAAI,CAAC,aAAa,GAAG,UAAU;IAC1C;IAEA,cAAuB;QACnB,OAAO,IAAI,CAAC,aAAa,GAAG,WAAW;IAC3C;IAEA,+BAAwC;QACpC,OAAO,IAAI,CAAC,aAAa,GAAG,4BAA4B;IAC5D;IAEA,qBAA8B;QAC1B,OAAO,IAAI,CAAC,aAAa,GAAG,kBAAkB;IAClD;IAEA,kBAA2B;QACvB,OAAO,IAAI,CAAC,aAAa,GAAG,eAAe;IAC/C;IAEA,sBAA+B;QAC3B,OAAO,IAAI,CAAC,aAAa,GAAG,mBAAmB;IACnD;IAEA,mCAA4C;QACxC,OAAO,IAAI,CAAC,aAAa,GAAG,gCAAgC;IAChE;IAEA,kBAA2B;QACvB,OAAO,IAAI,CAAC,aAAa,GAAG,eAAe;IAC/C;IAEA,6BAAsC;QAClC,OAAO,IAAI,CAAC,aAAa,GAAG,0BAA0B;IAC1D;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,aAAa,GAAG,uBAAuB;IACvD;IAEA,yBAAkC;QAC9B,OAAO,IAAI,CAAC,aAAa,GAAG,sBAAsB;IACtD;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,aAAa,GAAG,uBAAuB;IACvD;IAEA,4BAAqC;QACjC,OAAO,IAAI,CAAC,aAAa,GAAG,yBAAyB;IACzD;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,aAAa,GAAG,uBAAuB;IACvD;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,aAAa,GAAG,uBAAuB;IACvD;IAEA,2BAAoC;QAChC,OAAO,IAAI,CAAC,aAAa,GAAG,wBAAwB;IACxD;IAEA,oBAAoBC,SAAyC,EAAQ;QACjE,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAACA;IAC7C;IAEA,MAAM,iBAAgC;QAClC,MAAM,IAAI,CAAC,aAAa,GAAG,cAAc;IAC7C;IAEA,MAAM,iBAAgC;QAClC,MAAM,IAAI,CAAC,aAAa,GAAG,cAAc;IAC7C;IAEA,MAAM,mBAAkC;QACpC,MAAM,IAAI,CAAC,aAAa,GAAG,gBAAgB;IAC/C;IAEA,MAAM,mBAAkC;QACpC,MAAM,IAAI,CAAC,aAAa,GAAG,gBAAgB;IAC/C;IAEA,QAA2C;QACvC,OAAO,IAAI,CAAC,aAAa,GAAG,KAAK;IACrC;AACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-core",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.a4f3e4ea8b",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,19 +14,20 @@
|
|
|
14
14
|
"./*": "./*"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@ai-sdk/anthropic": "4.0.
|
|
18
|
-
"@ai-sdk/
|
|
19
|
-
"@
|
|
17
|
+
"@ai-sdk/anthropic": "4.0.49",
|
|
18
|
+
"@ai-sdk/google": "4.0.64",
|
|
19
|
+
"@ai-sdk/openai": "4.0.60",
|
|
20
|
+
"@webiny/api": "0.0.0-unstable.a4f3e4ea8b",
|
|
20
21
|
"@webiny/di": "1.0.2",
|
|
21
|
-
"@webiny/error": "0.0.0-unstable.
|
|
22
|
-
"@webiny/feature": "0.0.0-unstable.
|
|
23
|
-
"@webiny/feature-flags": "0.0.0-unstable.
|
|
24
|
-
"@webiny/handler": "0.0.0-unstable.
|
|
25
|
-
"@webiny/handler-db": "0.0.0-unstable.
|
|
26
|
-
"@webiny/handler-graphql": "0.0.0-unstable.
|
|
27
|
-
"@webiny/plugins": "0.0.0-unstable.
|
|
28
|
-
"@webiny/utils": "0.0.0-unstable.
|
|
29
|
-
"@webiny/wcp": "0.0.0-unstable.
|
|
22
|
+
"@webiny/error": "0.0.0-unstable.a4f3e4ea8b",
|
|
23
|
+
"@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
|
|
24
|
+
"@webiny/feature-flags": "0.0.0-unstable.a4f3e4ea8b",
|
|
25
|
+
"@webiny/handler": "0.0.0-unstable.a4f3e4ea8b",
|
|
26
|
+
"@webiny/handler-db": "0.0.0-unstable.a4f3e4ea8b",
|
|
27
|
+
"@webiny/handler-graphql": "0.0.0-unstable.a4f3e4ea8b",
|
|
28
|
+
"@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
|
|
29
|
+
"@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
|
|
30
|
+
"@webiny/wcp": "0.0.0-unstable.a4f3e4ea8b",
|
|
30
31
|
"ai": "7.0.34",
|
|
31
32
|
"dataloader": "2.2.3",
|
|
32
33
|
"jose": "6.2.3",
|
|
@@ -39,9 +40,9 @@
|
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
42
|
"@types/jsonwebtoken": "9.0.10",
|
|
42
|
-
"@webiny/build-tools": "0.0.0-unstable.
|
|
43
|
-
"@webiny/handler-aws": "0.0.0-unstable.
|
|
44
|
-
"@webiny/project-utils": "0.0.0-unstable.
|
|
43
|
+
"@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
|
|
44
|
+
"@webiny/handler-aws": "0.0.0-unstable.a4f3e4ea8b",
|
|
45
|
+
"@webiny/project-utils": "0.0.0-unstable.a4f3e4ea8b",
|
|
45
46
|
"rimraf": "6.1.3",
|
|
46
47
|
"typescript": "7.0.2",
|
|
47
48
|
"vitest": "4.1.10"
|