UNPKG

@teenth/sdk-tool

Version:

sdk-tool with R2 storage support

231 lines (230 loc) 7.16 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.kieChat = exports.grsaiStatus = exports.replicateFlux = exports.tuziFlux = exports.grsaiResult = exports.grsaiNanoBananaChat = exports.grsaiChat = exports.type = exports.handleChatCallback = exports.flux = void 0; const request_1 = require("../request"); const grsai_secret = process.env.GRSAI_SECRET; const tuzi_secret = process.env.TUZI_SECRET; const kie_secret = process.env.KIE_SECRET; const urlPrefix = process.env.URL_PREFIX; exports.flux = __importStar(require("./flux")); if (!grsai_secret || !tuzi_secret || !kie_secret || !urlPrefix) { throw new Error(`Missing environment variables: grsai_secret: ${grsai_secret}, tuzi_secret: ${tuzi_secret}, kie_secret: ${kie_secret}, urlPrefix: ${urlPrefix}`); } function formatUrls(urls) { if (Array.isArray(urls)) { return urls; } if (urls) { return [urls]; } return null; } // 兼容各个平台的回调参数处理 const handleChatCallback = (data) => { // kie if (data.code) { if (data.code === 200) { const { taskId, info } = data.data; return { id: taskId, url: info.result_urls?.[0], status: "succeeded", results: info.result_urls, }; } return { id: data.taskId, url: "", status: "failed", results: [], }; } if (data.results) { return { id: data.id, url: data.results[0]?.url, status: data.status, results: data.results, }; } // grsai return { id: data.id, url: data.url, status: data.status, results: [], }; }; exports.handleChatCallback = handleChatCallback; const grsaiHeader = { "Content-Type": "application/json", Authorization: `Bearer ${grsai_secret}`, }; const tuziHeader = { "Content-Type": "application/json", Authorization: `Bearer ${tuzi_secret}`, }; const kieHeader = { "Content-Type": "application/json", Authorization: `Bearer ${kie_secret}`, }; exports.type = { GRSAI: "grsai", TUZI: "tuzi", }; async function grsaiChat(req) { const response = await (0, request_1.post)("https://grsai.dakka.com.cn/v1/draw/completions", { method: "POST", headers: grsaiHeader, body: { model: "sora-image", prompt: req.prompt, size: req.aspectRatio, variants: 1, urls: formatUrls(req.userImg), webHook: req.webHook, shutProgress: false, }, }); return response; } exports.grsaiChat = grsaiChat; async function grsaiNanoBananaChat(req) { const response = await (0, request_1.post)("https://grsai.dakka.com.cn/v1/draw/nano-banana", { method: "POST", headers: grsaiHeader, body: { model: req.model || "nano-banana", prompt: req.prompt, urls: formatUrls(req.userImg), webHook: req.webHook, shutProgress: false, }, }); return response; } exports.grsaiNanoBananaChat = grsaiNanoBananaChat; async function grsaiResult(id) { const response = await (0, request_1.post)(`https://grsai.dakka.com.cn/v1/draw/completions`, { method: "POST", headers: grsaiHeader, body: { id, }, }); return response; } exports.grsaiResult = grsaiResult; async function tuziFlux(req) { console.log("tuziFlux 后续不在维护", req); const prompt = `${req.userImg}, ${req.prompt}`; const res = await fetch("https://api.tu-zi.com/v1/images/generations", { method: "POST", headers: tuziHeader, body: JSON.stringify({ model: "flux-kontext-pro", prompt, aspect_ratio: req.aspectRatio, output_format: "png", safety_tolerance: 2, prompt_upsampling: false, }), }); if (res.ok) { const data = await res.json(); return data; } else { const error = await res.text(); return { code: 500, data: null, message: error, }; } } exports.tuziFlux = tuziFlux; async function replicateFlux(req) { console.log("replicateFlux 后续不在维护", req); const prompt = `${req.userImg}, ${req.prompt}`; const res = await fetch("https://api.replicate.com/v1/models/black-forest-labs/flux-kontext-pro/predictions", { method: "POST", headers: tuziHeader, body: JSON.stringify({ model: "flux-kontext-pro", prompt, aspect_ratio: req.aspectRatio, output_format: "png", safety_tolerance: 2, prompt_upsampling: false, }), }); if (res.ok) { const data = await res.json(); return data; } else { const error = await res.text(); return { code: 500, data: null, message: error, }; } } exports.replicateFlux = replicateFlux; async function grsaiStatus() { const res = await (0, request_1.get)(`https://grsai.dakka.com.cn/client/common/getModelStatus?model=sora-image`, { method: "GET", headers: grsaiHeader, }); return res; } exports.grsaiStatus = grsaiStatus; async function kieChat(req) { console.log("kieChat flux 后续不在维护", req); const res = await (0, request_1.post)("https://kieai.erweima.ai/api/v1/flux/kontext/generate", { method: "POST", headers: kieHeader, body: { prompt: req.prompt, input_image: req.userImg, size: req.aspectRatio, output_format: "png", enableFallback: true, fallbackModel: "GPT_IMAGE_1", callBackUrl: req.webHook, }, }); const { data } = res; return { code: 200, data: { id: data.taskId, }, }; } exports.kieChat = kieChat;