@basementstudio/sanity-ai-image-plugin 0.1.1 → 0.1.2
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/package.json +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/presets/article-featured-image.d.ts +0 -3
- package/dist/presets/article-featured-image.d.ts.map +0 -1
- package/dist/presets/article-featured-image.js +0 -17
- package/dist/presets/article-featured-image.js.map +0 -1
- package/dist/server/constants.d.ts +0 -6
- package/dist/server/constants.d.ts.map +0 -1
- package/dist/server/constants.js +0 -17
- package/dist/server/constants.js.map +0 -1
- package/dist/server/handle-request.d.ts +0 -5
- package/dist/server/handle-request.d.ts.map +0 -1
- package/dist/server/handle-request.js +0 -122
- package/dist/server/handle-request.js.map +0 -1
- package/dist/server/types.d.ts +0 -28
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/types.js +0 -2
- package/dist/server/types.js.map +0 -1
- package/dist/server/utils.d.ts +0 -50
- package/dist/server/utils.d.ts.map +0 -1
- package/dist/server/utils.js +0 -274
- package/dist/server/utils.js.map +0 -1
- package/dist/server.d.ts +0 -3
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -3
- package/dist/server.js.map +0 -1
- package/dist/studio/components/asset-source.d.ts +0 -4
- package/dist/studio/components/asset-source.d.ts.map +0 -1
- package/dist/studio/components/asset-source.js +0 -169
- package/dist/studio/components/asset-source.js.map +0 -1
- package/dist/studio/components/frontend-rate-limit.d.ts +0 -29
- package/dist/studio/components/frontend-rate-limit.d.ts.map +0 -1
- package/dist/studio/components/frontend-rate-limit.js +0 -197
- package/dist/studio/components/frontend-rate-limit.js.map +0 -1
- package/dist/studio/components/generate-button-input.d.ts +0 -8
- package/dist/studio/components/generate-button-input.d.ts.map +0 -1
- package/dist/studio/components/generate-button-input.js +0 -194
- package/dist/studio/components/generate-button-input.js.map +0 -1
- package/dist/studio/components/input-router.d.ts +0 -7
- package/dist/studio/components/input-router.d.ts.map +0 -1
- package/dist/studio/components/input-router.js +0 -21
- package/dist/studio/components/input-router.js.map +0 -1
- package/dist/studio/files.d.ts +0 -9
- package/dist/studio/files.d.ts.map +0 -1
- package/dist/studio/files.js +0 -86
- package/dist/studio/files.js.map +0 -1
- package/dist/studio/frontend-rate-limit.d.ts +0 -29
- package/dist/studio/frontend-rate-limit.d.ts.map +0 -1
- package/dist/studio/frontend-rate-limit.js +0 -197
- package/dist/studio/frontend-rate-limit.js.map +0 -1
- package/dist/studio/plugin.d.ts +0 -3
- package/dist/studio/plugin.d.ts.map +0 -1
- package/dist/studio/plugin.js +0 -47
- package/dist/studio/plugin.js.map +0 -1
- package/dist/studio/settings/schema.d.ts +0 -8
- package/dist/studio/settings/schema.d.ts.map +0 -1
- package/dist/studio/settings/schema.js +0 -110
- package/dist/studio/settings/schema.js.map +0 -1
- package/dist/studio/settings/tool.d.ts +0 -3
- package/dist/studio/settings/tool.d.ts.map +0 -1
- package/dist/studio/settings/tool.js +0 -292
- package/dist/studio/settings/tool.js.map +0 -1
- package/dist/studio/settings-data.d.ts +0 -24
- package/dist/studio/settings-data.d.ts.map +0 -1
- package/dist/studio/settings-data.js +0 -99
- package/dist/studio/settings-data.js.map +0 -1
- package/dist/studio/shared-secret.d.ts +0 -9
- package/dist/studio/shared-secret.d.ts.map +0 -1
- package/dist/studio/shared-secret.js +0 -37
- package/dist/studio/shared-secret.js.map +0 -1
- package/dist/utils/config.d.ts +0 -3
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -59
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/context-fields.d.ts +0 -16
- package/dist/utils/context-fields.d.ts.map +0 -1
- package/dist/utils/context-fields.js +0 -104
- package/dist/utils/context-fields.js.map +0 -1
- package/dist/utils/document-paths.d.ts +0 -10
- package/dist/utils/document-paths.d.ts.map +0 -1
- package/dist/utils/document-paths.js +0 -33
- package/dist/utils/document-paths.js.map +0 -1
- package/dist/utils/models.d.ts +0 -22
- package/dist/utils/models.d.ts.map +0 -1
- package/dist/utils/models.js +0 -76
- package/dist/utils/models.js.map +0 -1
- package/dist/utils/prompts.d.ts +0 -2
- package/dist/utils/prompts.d.ts.map +0 -1
- package/dist/utils/prompts.js +0 -7
- package/dist/utils/prompts.js.map +0 -1
- package/dist/utils/shared.d.ts +0 -96
- package/dist/utils/shared.d.ts.map +0 -1
- package/dist/utils/shared.js +0 -17
- package/dist/utils/shared.js.map +0 -1
package/package.json
CHANGED
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"article-featured-image.d.ts","sourceRoot":"","sources":["../../src/presets/article-featured-image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE3D,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAM,GACxD,oBAAoB,CAkBtB"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export function createArticleFeaturedImageTarget(options = {}) {
|
|
2
|
-
return {
|
|
3
|
-
id: options.id || "article-featured-image",
|
|
4
|
-
type: "generateButton",
|
|
5
|
-
title: options.title || "Article Featured Image",
|
|
6
|
-
description: options.description ||
|
|
7
|
-
"Adds a Generate button that combines shared art direction, article context, and an optional editor prompt.",
|
|
8
|
-
dialogTitle: options.dialogTitle || "Generate Featured Image",
|
|
9
|
-
documentType: options.documentType || "article",
|
|
10
|
-
fieldPath: options.fieldPath || "featuredImage",
|
|
11
|
-
promptLabel: options.promptLabel || "Custom prompt",
|
|
12
|
-
promptPlaceholder: options.promptPlaceholder ||
|
|
13
|
-
"Optional custom instructions for this article image.",
|
|
14
|
-
suggestedContextFieldPaths: options.suggestedContextFieldPaths || ["title", "excerpt"],
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=article-featured-image.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"article-featured-image.js","sourceRoot":"","sources":["../../src/presets/article-featured-image.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gCAAgC,CAC9C,UAAuD,EAAE;IAEzD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,wBAAwB;QAC1C,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,wBAAwB;QAChD,WAAW,EACT,OAAO,CAAC,WAAW;YACnB,4GAA4G;QAC9G,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,yBAAyB;QAC7D,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,SAAS;QAC/C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,eAAe;QAC/C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,eAAe;QACnD,iBAAiB,EACf,OAAO,CAAC,iBAAiB;YACzB,sDAAsD;QACxD,0BAA0B,EACxB,OAAO,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KAC7D,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULT_MODEL: "gemini-2.5-flash-image" | "gemini-3.1-flash-image-preview" | "gpt-image-1";
|
|
2
|
-
export declare const DEFAULT_PROVIDER_API_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
3
|
-
export declare const DEFAULT_MAX_REFERENCE_FILE_BYTES: number;
|
|
4
|
-
export declare const SUPPORTED_REFERENCE_IMAGE_TYPES: Set<string>;
|
|
5
|
-
export declare const OPENAI_SUPPORTED_REFERENCE_IMAGE_TYPES: Set<string>;
|
|
6
|
-
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/server/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,6EAAmC,CAAC;AAC9D,eAAO,MAAM,wBAAwB,qDACe,CAAC;AACrD,eAAO,MAAM,gCAAgC,QAAkB,CAAC;AAEhE,eAAO,MAAM,+BAA+B,aAM1C,CAAC;AAEH,eAAO,MAAM,sCAAsC,aAIjD,CAAC"}
|
package/dist/server/constants.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_SUPPORTED_AI_IMAGE_MODEL } from "../utils/models";
|
|
2
|
-
export const DEFAULT_MODEL = DEFAULT_SUPPORTED_AI_IMAGE_MODEL;
|
|
3
|
-
export const DEFAULT_PROVIDER_API_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
4
|
-
export const DEFAULT_MAX_REFERENCE_FILE_BYTES = 8 * 1024 * 1024;
|
|
5
|
-
export const SUPPORTED_REFERENCE_IMAGE_TYPES = new Set([
|
|
6
|
-
"image/heic",
|
|
7
|
-
"image/heif",
|
|
8
|
-
"image/jpeg",
|
|
9
|
-
"image/png",
|
|
10
|
-
"image/webp",
|
|
11
|
-
]);
|
|
12
|
-
export const OPENAI_SUPPORTED_REFERENCE_IMAGE_TYPES = new Set([
|
|
13
|
-
"image/jpeg",
|
|
14
|
-
"image/png",
|
|
15
|
-
"image/webp",
|
|
16
|
-
]);
|
|
17
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/server/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAC9D,MAAM,CAAC,MAAM,wBAAwB,GACnC,kDAAkD,CAAC;AACrD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhE,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAC;IACrD,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sCAAsC,GAAG,IAAI,GAAG,CAAC;IAC5D,YAAY;IACZ,WAAW;IACX,YAAY;CACb,CAAC,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { RequestOptions } from "./types";
|
|
2
|
-
export { DEFAULT_MAX_REFERENCE_FILE_BYTES, DEFAULT_MODEL, DEFAULT_PROVIDER_API_URL, SUPPORTED_REFERENCE_IMAGE_TYPES, } from "./constants";
|
|
3
|
-
export type { RequestOptions, SuccessResponse } from "./types";
|
|
4
|
-
export declare function handleAiImageRequest(request: Request, options: RequestOptions): Promise<Response>;
|
|
5
|
-
//# sourceMappingURL=handle-request.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handle-request.d.ts","sourceRoot":"","sources":["../../src/server/handle-request.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,SAAS,CAAC;AAC/D,OAAO,EACL,gCAAgC,EAChC,aAAa,EACb,wBAAwB,EACxB,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/D,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CA4LnB"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { isSupportedAiImageModelId, resolveAllowedAiImageModel, SUPPORTED_AI_IMAGE_MODELS, } from "../utils/models";
|
|
2
|
-
import { generateImageWithModel, getErrorMessage, getErrorStatusCode, getFormRequestPayload, getMissingApiKeyErrorMessage, getProviderApiKey, getProviderDisplayName, getReferenceImageValidationError, getSameOriginValidationError, getSharedSecretValidationError, isMultipartFormData, jsonResponse, parseHeaderByteLength, resolveRequestOptions, } from "./utils";
|
|
3
|
-
export { DEFAULT_MAX_REFERENCE_FILE_BYTES, DEFAULT_MODEL, DEFAULT_PROVIDER_API_URL, SUPPORTED_REFERENCE_IMAGE_TYPES, } from "./constants";
|
|
4
|
-
export async function handleAiImageRequest(request, options) {
|
|
5
|
-
let requestOptions;
|
|
6
|
-
// Normalize server config up front so the rest of the handler can assume a
|
|
7
|
-
// single, fully-resolved set of limits and model choices.
|
|
8
|
-
try {
|
|
9
|
-
requestOptions = resolveRequestOptions(options);
|
|
10
|
-
}
|
|
11
|
-
catch (error) {
|
|
12
|
-
return jsonResponse({
|
|
13
|
-
error: getErrorMessage(error) ||
|
|
14
|
-
"AI Image Plugin server configuration is invalid.",
|
|
15
|
-
}, 500);
|
|
16
|
-
}
|
|
17
|
-
const sharedSecretError = getSharedSecretValidationError(request, requestOptions.sharedSecret);
|
|
18
|
-
if (sharedSecretError) {
|
|
19
|
-
return jsonResponse({
|
|
20
|
-
error: sharedSecretError.error,
|
|
21
|
-
}, sharedSecretError.status);
|
|
22
|
-
}
|
|
23
|
-
// Reject browser requests that do not come from the same Sanity Studio
|
|
24
|
-
// origin when same-origin enforcement is enabled.
|
|
25
|
-
if (requestOptions.enforceSameOrigin) {
|
|
26
|
-
const sameOriginError = getSameOriginValidationError(request);
|
|
27
|
-
if (sameOriginError) {
|
|
28
|
-
return jsonResponse({
|
|
29
|
-
error: sameOriginError.error,
|
|
30
|
-
}, sameOriginError.status);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// The endpoint only accepts multipart form submissions because prompt/model
|
|
34
|
-
// metadata and uploaded reference images arrive together.
|
|
35
|
-
if (!isMultipartFormData(request.headers.get("content-type"))) {
|
|
36
|
-
return jsonResponse({
|
|
37
|
-
error: "AI Image Plugin requires a multipart/form-data request.",
|
|
38
|
-
}, 415);
|
|
39
|
-
}
|
|
40
|
-
// Fail early on obviously oversized requests before parsing the body.
|
|
41
|
-
const contentLength = parseHeaderByteLength(request.headers.get("content-length"));
|
|
42
|
-
if (contentLength !== null &&
|
|
43
|
-
contentLength > requestOptions.maxTotalReferenceBytes) {
|
|
44
|
-
return jsonResponse({
|
|
45
|
-
error: `AI Image Plugin requests cannot exceed ${requestOptions.maxTotalReferenceBytes} bytes.`,
|
|
46
|
-
}, 413);
|
|
47
|
-
}
|
|
48
|
-
let formData;
|
|
49
|
-
// Parse the multipart payload into the prompt, optional model override, and
|
|
50
|
-
// the capped list of uploaded reference images.
|
|
51
|
-
try {
|
|
52
|
-
formData = await request.formData();
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return jsonResponse({
|
|
56
|
-
error: "AI Image Plugin could not read the upload payload.",
|
|
57
|
-
}, 400);
|
|
58
|
-
}
|
|
59
|
-
const { prompt, referenceImages, requestedModel } = getFormRequestPayload(formData, requestOptions.maxReferences);
|
|
60
|
-
if (!prompt) {
|
|
61
|
-
return jsonResponse({ error: "Prompt is required." }, 400);
|
|
62
|
-
}
|
|
63
|
-
// Resolve the effective model, then make sure it is both supported by the
|
|
64
|
-
// plugin and allowed by this installation's server config.
|
|
65
|
-
const modelId = requestedModel || requestOptions.defaultModel;
|
|
66
|
-
if (!isSupportedAiImageModelId(modelId)) {
|
|
67
|
-
return jsonResponse({
|
|
68
|
-
error: `AI Image Plugin does not support the model "${modelId}". Supported models are: ${SUPPORTED_AI_IMAGE_MODELS.join(", ")}.`,
|
|
69
|
-
}, 400);
|
|
70
|
-
}
|
|
71
|
-
if (!requestOptions.allowedModels.includes(modelId)) {
|
|
72
|
-
return jsonResponse({
|
|
73
|
-
error: `AI Image Plugin does not allow the model "${modelId}" for this installation.`,
|
|
74
|
-
}, 400);
|
|
75
|
-
}
|
|
76
|
-
const selectedModel = resolveAllowedAiImageModel(modelId, requestOptions.allowedModels);
|
|
77
|
-
const referenceImageError = getReferenceImageValidationError({
|
|
78
|
-
maxReferenceFileBytes: requestOptions.maxReferenceFileBytes,
|
|
79
|
-
maxTotalReferenceBytes: requestOptions.maxTotalReferenceBytes,
|
|
80
|
-
model: selectedModel,
|
|
81
|
-
referenceImages,
|
|
82
|
-
});
|
|
83
|
-
if (referenceImageError) {
|
|
84
|
-
return jsonResponse({
|
|
85
|
-
error: referenceImageError.error,
|
|
86
|
-
}, referenceImageError.status);
|
|
87
|
-
}
|
|
88
|
-
// Pick the provider credentials that match the selected model family.
|
|
89
|
-
const apiKey = getProviderApiKey(selectedModel, options);
|
|
90
|
-
if (!apiKey) {
|
|
91
|
-
return jsonResponse({
|
|
92
|
-
error: getMissingApiKeyErrorMessage(selectedModel),
|
|
93
|
-
}, 500);
|
|
94
|
-
}
|
|
95
|
-
// Delegate the actual image generation call and translate provider failures
|
|
96
|
-
// into a stable API response shape for the Studio client.
|
|
97
|
-
try {
|
|
98
|
-
const generatedImage = await generateImageWithModel({
|
|
99
|
-
apiKey,
|
|
100
|
-
model: selectedModel,
|
|
101
|
-
prompt,
|
|
102
|
-
referenceImages,
|
|
103
|
-
...(options.geminiApiUrl ? { geminiApiUrl: options.geminiApiUrl } : {}),
|
|
104
|
-
});
|
|
105
|
-
if (!generatedImage) {
|
|
106
|
-
return jsonResponse({
|
|
107
|
-
error: "AI Image Plugin returned a response, but no generated image was found.",
|
|
108
|
-
}, 502);
|
|
109
|
-
}
|
|
110
|
-
return jsonResponse({
|
|
111
|
-
...generatedImage,
|
|
112
|
-
model: selectedModel,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
return jsonResponse({
|
|
117
|
-
error: getErrorMessage(error) ||
|
|
118
|
-
`AI Image Plugin could not reach ${getProviderDisplayName(selectedModel)}.`,
|
|
119
|
-
}, getErrorStatusCode(error) || 502);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=handle-request.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handle-request.js","sourceRoot":"","sources":["../../src/server/handle-request.ts"],"names":[],"mappings":"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"}
|
package/dist/server/types.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { SupportedAiImageModelId } from "../utils/models";
|
|
2
|
-
export type GenerateImageFunction = (options: Record<string, unknown>) => Promise<{
|
|
3
|
-
image?: unknown;
|
|
4
|
-
}>;
|
|
5
|
-
export type GeneratedImagePayload = {
|
|
6
|
-
base64?: string;
|
|
7
|
-
mediaType?: string;
|
|
8
|
-
uint8Array?: Uint8Array;
|
|
9
|
-
};
|
|
10
|
-
export type SuccessResponse = {
|
|
11
|
-
data: string;
|
|
12
|
-
mimeType: string;
|
|
13
|
-
model: string;
|
|
14
|
-
};
|
|
15
|
-
export type RequestOptions = {
|
|
16
|
-
allowedModels?: SupportedAiImageModelId[];
|
|
17
|
-
apiKey?: string;
|
|
18
|
-
enforceSameOrigin?: boolean;
|
|
19
|
-
geminiApiUrl?: string;
|
|
20
|
-
googleApiKey?: string;
|
|
21
|
-
maxReferenceFileBytes?: number;
|
|
22
|
-
maxReferences?: number;
|
|
23
|
-
maxTotalReferenceBytes?: number;
|
|
24
|
-
model?: SupportedAiImageModelId;
|
|
25
|
-
openAiApiKey?: string;
|
|
26
|
-
sharedSecret: string;
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC"}
|
package/dist/server/types.js
DELETED
package/dist/server/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":""}
|
package/dist/server/utils.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { type SupportedAiImageModelId } from "../utils/models";
|
|
2
|
-
import type { RequestOptions } from "./types";
|
|
3
|
-
type ResolvedRequestOptions = {
|
|
4
|
-
allowedModels: SupportedAiImageModelId[];
|
|
5
|
-
defaultModel: SupportedAiImageModelId;
|
|
6
|
-
enforceSameOrigin: boolean;
|
|
7
|
-
maxReferenceFileBytes: number;
|
|
8
|
-
maxReferences: number;
|
|
9
|
-
maxTotalReferenceBytes: number;
|
|
10
|
-
sharedSecret: string;
|
|
11
|
-
};
|
|
12
|
-
type ValidationError = {
|
|
13
|
-
error: string;
|
|
14
|
-
status: number;
|
|
15
|
-
};
|
|
16
|
-
export declare function jsonResponse(body: Record<string, unknown>, status?: number): Response;
|
|
17
|
-
export declare function isFileEntry(value: FormDataEntryValue): value is File;
|
|
18
|
-
export declare function isMultipartFormData(contentType: string | null): boolean;
|
|
19
|
-
export declare function parseHeaderByteLength(value: string | null): number | null;
|
|
20
|
-
export declare function getSameOriginValidationError(request: Request): ValidationError | null;
|
|
21
|
-
export declare function getSharedSecretValidationError(request: Request, expectedSharedSecret: string): ValidationError | null;
|
|
22
|
-
export declare function resolveRequestOptions(options: RequestOptions): ResolvedRequestOptions;
|
|
23
|
-
export declare function getFormRequestPayload(formData: FormData, maxReferences: number): {
|
|
24
|
-
prompt: string;
|
|
25
|
-
referenceImages: File[];
|
|
26
|
-
requestedModel: string;
|
|
27
|
-
};
|
|
28
|
-
export declare function getReferenceImageValidationError(options: {
|
|
29
|
-
maxReferenceFileBytes: number;
|
|
30
|
-
maxTotalReferenceBytes: number;
|
|
31
|
-
model: SupportedAiImageModelId;
|
|
32
|
-
referenceImages: File[];
|
|
33
|
-
}): ValidationError | null;
|
|
34
|
-
export declare function getProviderApiKey(model: SupportedAiImageModelId, options: RequestOptions): string | null;
|
|
35
|
-
export declare function getProviderDisplayName(model: SupportedAiImageModelId): string;
|
|
36
|
-
export declare function getMissingApiKeyErrorMessage(model: SupportedAiImageModelId): string;
|
|
37
|
-
export declare function getErrorMessage(error: unknown): string | null;
|
|
38
|
-
export declare function getErrorStatusCode(error: unknown): number | null;
|
|
39
|
-
export declare function generateImageWithModel(options: {
|
|
40
|
-
apiKey: string;
|
|
41
|
-
geminiApiUrl?: string;
|
|
42
|
-
model: SupportedAiImageModelId;
|
|
43
|
-
prompt: string;
|
|
44
|
-
referenceImages: File[];
|
|
45
|
-
}): Promise<{
|
|
46
|
-
data: string;
|
|
47
|
-
mimeType: string;
|
|
48
|
-
} | null>;
|
|
49
|
-
export {};
|
|
50
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,uBAAuB,EAC7B,MAAM,iBAAiB,CAAC;AAUzB,OAAO,KAAK,EAGV,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,KAAK,sBAAsB,GAAG;IAC5B,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,YAAY,EAAE,uBAAuB,CAAC;IACtC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,SAAM,GACX,QAAQ,CAEV;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,IAAI,IAAI,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAIvE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQzE;AAID,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,GACf,eAAe,GAAG,IAAI,CAoBxB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,MAAM,GAC3B,eAAe,GAAG,IAAI,CAYxB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,GACtB,sBAAsB,CAoBxB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,MAAM,GACpB;IACD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB,CASA;AAID,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACxD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,eAAe,EAAE,IAAI,EAAE,CAAC;CACzB,GAAG,eAAe,GAAG,IAAI,CA2CzB;AAID,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,cAAc,GACtB,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAI7E;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,uBAAuB,GAC7B,MAAM,CAQR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM7D;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAwBhE;AAID,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,uBAAuB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,IAAI,EAAE,CAAC;CACzB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA6BrD"}
|
package/dist/server/utils.js
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import { Buffer } from "node:buffer";
|
|
2
|
-
import { createGoogleGenerativeAI } from "@ai-sdk/google";
|
|
3
|
-
import { createOpenAI } from "@ai-sdk/openai";
|
|
4
|
-
import * as aiSdk from "ai";
|
|
5
|
-
import { getDefaultAllowedAiImageModel, getSupportedAiImageModelDefinition, normalizeAllowedAiImageModels, } from "../utils/models";
|
|
6
|
-
import { MAX_REFERENCE_IMAGES, SHARED_SECRET_HEADER_NAME, } from "../utils/shared";
|
|
7
|
-
import { DEFAULT_MAX_REFERENCE_FILE_BYTES, OPENAI_SUPPORTED_REFERENCE_IMAGE_TYPES, SUPPORTED_REFERENCE_IMAGE_TYPES, } from "./constants";
|
|
8
|
-
// Small request-parsing helpers used directly by the main request handler.
|
|
9
|
-
export function jsonResponse(body, status = 200) {
|
|
10
|
-
return Response.json(body, { status });
|
|
11
|
-
}
|
|
12
|
-
export function isFileEntry(value) {
|
|
13
|
-
return typeof value !== "string";
|
|
14
|
-
}
|
|
15
|
-
export function isMultipartFormData(contentType) {
|
|
16
|
-
return typeof contentType === "string"
|
|
17
|
-
? contentType.toLowerCase().startsWith("multipart/form-data")
|
|
18
|
-
: false;
|
|
19
|
-
}
|
|
20
|
-
export function parseHeaderByteLength(value) {
|
|
21
|
-
if (!value) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
const parsedValue = Number(value);
|
|
25
|
-
return Number.isFinite(parsedValue) && parsedValue >= 0 ? parsedValue : null;
|
|
26
|
-
}
|
|
27
|
-
// Request-level validation helpers keep the handler readable while still
|
|
28
|
-
// returning precise HTTP errors for common failure modes.
|
|
29
|
-
export function getSameOriginValidationError(request) {
|
|
30
|
-
const requestOrigin = getRequestOrigin(request);
|
|
31
|
-
const normalizedOrigin = getNormalizedOrigin(request.headers.get("origin"));
|
|
32
|
-
if (!requestOrigin) {
|
|
33
|
-
return {
|
|
34
|
-
error: "AI Image Plugin could not determine the request origin.",
|
|
35
|
-
status: 400,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
if (!normalizedOrigin || normalizedOrigin !== requestOrigin) {
|
|
39
|
-
return {
|
|
40
|
-
error: "AI Image Plugin only accepts same-origin browser requests from Sanity Studio.",
|
|
41
|
-
status: 403,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
export function getSharedSecretValidationError(request, expectedSharedSecret) {
|
|
47
|
-
const providedSharedSecret = request.headers.get(SHARED_SECRET_HEADER_NAME);
|
|
48
|
-
if (!providedSharedSecret || providedSharedSecret !== expectedSharedSecret) {
|
|
49
|
-
return {
|
|
50
|
-
error: "AI Image Plugin requires a valid shared secret before generating images.",
|
|
51
|
-
status: 401,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
export function resolveRequestOptions(options) {
|
|
57
|
-
const allowedModels = normalizeAllowedModels(options);
|
|
58
|
-
const defaultModel = getDefaultModel(options, allowedModels);
|
|
59
|
-
const enforceSameOrigin = options.enforceSameOrigin !== false;
|
|
60
|
-
const maxReferenceFileBytes = options.maxReferenceFileBytes ?? DEFAULT_MAX_REFERENCE_FILE_BYTES;
|
|
61
|
-
const maxReferences = options.maxReferences ?? MAX_REFERENCE_IMAGES;
|
|
62
|
-
const maxTotalReferenceBytes = options.maxTotalReferenceBytes ?? maxReferences * maxReferenceFileBytes;
|
|
63
|
-
const sharedSecret = getSharedSecret(options);
|
|
64
|
-
return {
|
|
65
|
-
allowedModels,
|
|
66
|
-
defaultModel,
|
|
67
|
-
enforceSameOrigin,
|
|
68
|
-
maxReferenceFileBytes,
|
|
69
|
-
maxReferences,
|
|
70
|
-
maxTotalReferenceBytes,
|
|
71
|
-
sharedSecret,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
export function getFormRequestPayload(formData, maxReferences) {
|
|
75
|
-
return {
|
|
76
|
-
prompt: String(formData.get("prompt") || "").trim(),
|
|
77
|
-
requestedModel: String(formData.get("model") || "").trim(),
|
|
78
|
-
referenceImages: formData
|
|
79
|
-
.getAll("references")
|
|
80
|
-
.filter(isFileEntry)
|
|
81
|
-
.slice(0, maxReferences),
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
// Reference image rules depend on both configured byte limits and the
|
|
85
|
-
// capabilities of the selected model provider.
|
|
86
|
-
export function getReferenceImageValidationError(options) {
|
|
87
|
-
const totalReferenceBytes = options.referenceImages.reduce((totalBytes, referenceImage) => totalBytes + referenceImage.size, 0);
|
|
88
|
-
if (totalReferenceBytes > options.maxTotalReferenceBytes) {
|
|
89
|
-
return {
|
|
90
|
-
error: `Reference images cannot exceed ${options.maxTotalReferenceBytes} bytes in total.`,
|
|
91
|
-
status: 413,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
const modelDefinition = getSupportedAiImageModelDefinition(options.model);
|
|
95
|
-
for (const referenceImage of options.referenceImages) {
|
|
96
|
-
if (referenceImage.size > options.maxReferenceFileBytes) {
|
|
97
|
-
return {
|
|
98
|
-
error: `Reference images cannot exceed ${options.maxReferenceFileBytes} bytes each.`,
|
|
99
|
-
status: 413,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
if (!SUPPORTED_REFERENCE_IMAGE_TYPES.has(referenceImage.type)) {
|
|
103
|
-
return {
|
|
104
|
-
error: "Reference images must be PNG, JPEG, WEBP, HEIC, or HEIF files.",
|
|
105
|
-
status: 400,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
if (modelDefinition.provider === "openai" &&
|
|
109
|
-
!OPENAI_SUPPORTED_REFERENCE_IMAGE_TYPES.has(referenceImage.type)) {
|
|
110
|
-
return {
|
|
111
|
-
error: "Reference images for OpenAI models must be PNG, JPEG, or WEBP files.",
|
|
112
|
-
status: 400,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
// Provider helpers centralize API-key selection and user-facing provider names
|
|
119
|
-
// so the request handler stays focused on control flow.
|
|
120
|
-
export function getProviderApiKey(model, options) {
|
|
121
|
-
const modelDefinition = getSupportedAiImageModelDefinition(model);
|
|
122
|
-
if (modelDefinition.provider === "google") {
|
|
123
|
-
return options.googleApiKey || options.apiKey || null;
|
|
124
|
-
}
|
|
125
|
-
return options.openAiApiKey || null;
|
|
126
|
-
}
|
|
127
|
-
export function getProviderDisplayName(model) {
|
|
128
|
-
const modelDefinition = getSupportedAiImageModelDefinition(model);
|
|
129
|
-
return modelDefinition.provider === "google" ? "Google" : "OpenAI";
|
|
130
|
-
}
|
|
131
|
-
export function getMissingApiKeyErrorMessage(model) {
|
|
132
|
-
const modelDefinition = getSupportedAiImageModelDefinition(model);
|
|
133
|
-
if (modelDefinition.provider === "google") {
|
|
134
|
-
return "Missing Google API key. Add googleApiKey (or apiKey for backwards compatibility) before using AI Image Plugin.";
|
|
135
|
-
}
|
|
136
|
-
return "Missing OpenAI API key. Add openAiApiKey before using AI Image Plugin.";
|
|
137
|
-
}
|
|
138
|
-
export function getErrorMessage(error) {
|
|
139
|
-
if (!(error instanceof Error) || !error.message.trim()) {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
return error.message;
|
|
143
|
-
}
|
|
144
|
-
// Provider SDKs do not share a single error shape, so we look through a few
|
|
145
|
-
// common status locations before falling back to a generic 502.
|
|
146
|
-
export function getErrorStatusCode(error) {
|
|
147
|
-
if (!error || typeof error !== "object") {
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
if ("statusCode" in error && typeof error.statusCode === "number") {
|
|
151
|
-
return error.statusCode;
|
|
152
|
-
}
|
|
153
|
-
if ("status" in error && typeof error.status === "number") {
|
|
154
|
-
return error.status;
|
|
155
|
-
}
|
|
156
|
-
if ("response" in error &&
|
|
157
|
-
error.response &&
|
|
158
|
-
typeof error.response === "object" &&
|
|
159
|
-
"status" in error.response &&
|
|
160
|
-
typeof error.response.status === "number") {
|
|
161
|
-
return error.response.status;
|
|
162
|
-
}
|
|
163
|
-
return null;
|
|
164
|
-
}
|
|
165
|
-
// This wraps the AI SDK differences so the request handler can ask for "an
|
|
166
|
-
// image from model X" without caring which provider implementation is behind it.
|
|
167
|
-
export async function generateImageWithModel(options) {
|
|
168
|
-
const generateImage = getGenerateImage();
|
|
169
|
-
const modelDefinition = getSupportedAiImageModelDefinition(options.model);
|
|
170
|
-
const prompt = options.referenceImages.length > 0
|
|
171
|
-
? {
|
|
172
|
-
images: await Promise.all(options.referenceImages.map(toModelInput)),
|
|
173
|
-
text: options.prompt,
|
|
174
|
-
}
|
|
175
|
-
: options.prompt;
|
|
176
|
-
const model = modelDefinition.provider === "google"
|
|
177
|
-
? createGoogleGenerativeAI({
|
|
178
|
-
apiKey: options.apiKey,
|
|
179
|
-
...(options.geminiApiUrl ? { baseURL: options.geminiApiUrl } : {}),
|
|
180
|
-
}).image(options.model)
|
|
181
|
-
: createOpenAI({
|
|
182
|
-
apiKey: options.apiKey,
|
|
183
|
-
}).image(options.model);
|
|
184
|
-
const result = await generateImage({
|
|
185
|
-
aspectRatio: modelDefinition.defaultAspectRatio ?? null,
|
|
186
|
-
model,
|
|
187
|
-
prompt,
|
|
188
|
-
size: modelDefinition.defaultSize ?? null,
|
|
189
|
-
});
|
|
190
|
-
return getGeneratedImagePayload(result.image);
|
|
191
|
-
}
|
|
192
|
-
// Internal helpers below support the exported request/provider helpers without
|
|
193
|
-
// needing to leak implementation details across the server module boundary.
|
|
194
|
-
function getGenerateImage() {
|
|
195
|
-
const aiModule = aiSdk;
|
|
196
|
-
const generateImage = ("generateImage" in aiModule
|
|
197
|
-
? aiModule.generateImage
|
|
198
|
-
: aiModule.experimental_generateImage);
|
|
199
|
-
if (typeof generateImage !== "function") {
|
|
200
|
-
throw new Error('AI Image Plugin could not find generateImage in the installed "ai" package.');
|
|
201
|
-
}
|
|
202
|
-
return generateImage;
|
|
203
|
-
}
|
|
204
|
-
function getNormalizedOrigin(value) {
|
|
205
|
-
if (!value || value === "null") {
|
|
206
|
-
return null;
|
|
207
|
-
}
|
|
208
|
-
try {
|
|
209
|
-
return new URL(value).origin;
|
|
210
|
-
}
|
|
211
|
-
catch {
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
function getRequestOrigin(request) {
|
|
216
|
-
try {
|
|
217
|
-
return new URL(request.url).origin;
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
function normalizeAllowedModels(options) {
|
|
224
|
-
if (options.allowedModels) {
|
|
225
|
-
return normalizeAllowedAiImageModels(options.allowedModels);
|
|
226
|
-
}
|
|
227
|
-
if (options.model) {
|
|
228
|
-
return normalizeAllowedAiImageModels([options.model]);
|
|
229
|
-
}
|
|
230
|
-
return normalizeAllowedAiImageModels();
|
|
231
|
-
}
|
|
232
|
-
function getDefaultModel(options, allowedModels) {
|
|
233
|
-
if (!options.model) {
|
|
234
|
-
return getDefaultAllowedAiImageModel(allowedModels);
|
|
235
|
-
}
|
|
236
|
-
if (!allowedModels.includes(options.model)) {
|
|
237
|
-
throw new Error(`AI Image Plugin server configuration must include "${options.model}" in allowedModels.`);
|
|
238
|
-
}
|
|
239
|
-
return options.model;
|
|
240
|
-
}
|
|
241
|
-
function getSharedSecret(options) {
|
|
242
|
-
const sharedSecret = typeof options.sharedSecret === "string" ? options.sharedSecret.trim() : "";
|
|
243
|
-
if (!sharedSecret) {
|
|
244
|
-
throw new Error("AI Image Plugin server configuration must include a non-empty sharedSecret.");
|
|
245
|
-
}
|
|
246
|
-
return sharedSecret;
|
|
247
|
-
}
|
|
248
|
-
function getGeneratedImagePayload(image) {
|
|
249
|
-
if (!image || typeof image !== "object") {
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
const generatedImage = image;
|
|
253
|
-
const mimeType = typeof generatedImage.mediaType === "string" &&
|
|
254
|
-
generatedImage.mediaType.trim()
|
|
255
|
-
? generatedImage.mediaType
|
|
256
|
-
: "image/png";
|
|
257
|
-
if (typeof generatedImage.base64 === "string" && generatedImage.base64) {
|
|
258
|
-
return {
|
|
259
|
-
data: generatedImage.base64.replace(/^data:[^;]+;base64,/, ""),
|
|
260
|
-
mimeType,
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
if (generatedImage.uint8Array instanceof Uint8Array) {
|
|
264
|
-
return {
|
|
265
|
-
data: Buffer.from(generatedImage.uint8Array).toString("base64"),
|
|
266
|
-
mimeType,
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
return null;
|
|
270
|
-
}
|
|
271
|
-
async function toModelInput(file) {
|
|
272
|
-
return Buffer.from(await file.arrayBuffer());
|
|
273
|
-
}
|
|
274
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/server/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
DELETED
package/dist/server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC"}
|
package/dist/server.js
DELETED
package/dist/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,GAE1B,MAAM,gBAAgB,CAAC"}
|