@inductiv/node-red-openai-api
Version:
Enhance your Node-RED projects with advanced AI capabilities.
132 lines (119 loc) • 3.48 kB
JavaScript
"use strict";
const admin = require("./admin/methods.js");
const assistants = require("./assistants/methods.js");
const audio = require("./audio/methods.js");
const batch = require("./batch/methods.js");
const chat = require("./chat/methods.js");
const chatkit = require("./chatkit/methods.js");
const container_files = require("./container-files/methods.js");
const containers = require("./containers/methods.js");
const conversations = require("./conversations/methods.js");
const embeddings = require("./embeddings/methods.js");
const evals = require("./evals/methods.js");
const files = require("./files/methods.js");
const fine_tuning = require("./fine-tuning/methods.js");
const images = require("./images/methods.js");
const messages = require("./messages/methods.js");
const models = require("./models/methods.js");
const moderations = require("./moderations/methods.js");
const realtime = require("./realtime/methods.js");
const responses = require("./responses/methods.js");
const runs = require("./runs/methods.js");
const skills = require("./skills/methods.js");
const threads = require("./threads/methods.js");
const uploads = require("./uploads/methods.js");
const vectorStoreFileBatches = require("./vector-store-file-batches/methods.js");
const vectorStoreFiles = require("./vector-store-files/methods.js");
const vectorStores = require("./vector-stores/methods.js");
const videos = require("./videos/methods.js");
const webhooks = require("./webhooks/methods.js");
function normalizeHeaderOrQueryName(headerOrQueryName) {
if (typeof headerOrQueryName !== "string") {
return "Authorization";
}
const trimmedHeaderOrQueryName = headerOrQueryName.trim();
return trimmedHeaderOrQueryName || "Authorization";
}
function createApiKeyTransportParams(apiKey, apiKeyTransport = {}) {
if (!apiKey) {
return {};
}
const headerOrQueryName = normalizeHeaderOrQueryName(
apiKeyTransport.headerOrQueryName
);
if (apiKeyTransport.isQuery) {
return {
defaultHeaders: {
Authorization: null,
},
defaultQuery: {
[headerOrQueryName]: apiKey,
},
};
}
if (headerOrQueryName.toLowerCase() === "authorization") {
return {};
}
return {
defaultHeaders: {
Authorization: null,
[headerOrQueryName]: apiKey,
},
};
}
class OpenaiApi {
constructor(apiKeyOrOptions, baseURL, organization, apiKeyTransport) {
const options =
typeof apiKeyOrOptions === "object" &&
apiKeyOrOptions !== null &&
!Array.isArray(apiKeyOrOptions)
? apiKeyOrOptions
: {
apiKey: apiKeyOrOptions,
baseURL,
organization,
apiKeyTransport,
};
this.clientParams = {
apiKey: options.apiKey ?? null,
adminAPIKey: options.adminAPIKey ?? null,
baseURL: options.baseURL,
organization: options.organization,
...createApiKeyTransportParams(options.apiKey, options.apiKeyTransport),
};
}
}
// Attach all exported methods as instance methods
Object.assign(
OpenaiApi.prototype,
admin,
assistants,
audio,
batch,
chat,
chatkit,
container_files,
containers,
conversations,
embeddings,
evals,
files,
fine_tuning,
images,
messages,
models,
moderations,
realtime,
responses,
runs,
skills,
threads,
uploads,
videos,
webhooks,
vectorStoreFileBatches,
vectorStoreFiles,
vectorStores
);
// Export the class
module.exports = OpenaiApi;