#344 Upgrading the openai package to v4 (#383)

* #344 Upgrading the openai package to v4

* Create neat-roses-wait.md

* Fixed a couple of issues with the openai v4 upgrade

* Added fine tuning job tasks
This commit is contained in:
Eric Allam
2023-08-24 11:48:39 +01:00
committed by GitHub
parent 708ebbde14
commit 403acac5ef
7 changed files with 393 additions and 261 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@trigger.dev/openai": patch
---
#344 Upgrading the openai package to v4
+2 -2
View File
@@ -28,9 +28,9 @@ client.defineJob({
run: async (payload, io, ctx) => { run: async (payload, io, ctx) => {
const models = await io.openai.listModels("list-models"); const models = await io.openai.listModels("list-models");
if (models.data.length > 0) { if (models.length > 0) {
await io.openai.retrieveModel("get-model", { await io.openai.retrieveModel("get-model", {
model: models.data[0].id, model: models[0].id,
}); });
} }
+2 -3
View File
@@ -24,10 +24,9 @@
"build:tsup": "tsup" "build:tsup": "tsup"
}, },
"dependencies": { "dependencies": {
"openai": "^3.3.0", "openai": "^4.2.0",
"@trigger.dev/sdk": "workspace:^2.0.10", "@trigger.dev/sdk": "workspace:^2.0.10",
"@trigger.dev/integration-kit": "workspace:^2.0.10", "@trigger.dev/integration-kit": "workspace:^2.0.10"
"zod": "3.21.4"
}, },
"engines": { "engines": {
"node": ">=16.8.0" "node": ">=16.8.0"
+5 -7
View File
@@ -1,5 +1,5 @@
import type { IntegrationClient, TriggerIntegration } from "@trigger.dev/sdk"; import type { IntegrationClient, TriggerIntegration } from "@trigger.dev/sdk";
import { Configuration, OpenAIApi } from "openai"; import OpenAIApi from "openai";
import * as tasks from "./tasks"; import * as tasks from "./tasks";
import { OpenAIIntegrationOptions } from "./types"; import { OpenAIIntegrationOptions } from "./types";
@@ -28,12 +28,10 @@ export class OpenAI implements TriggerIntegration<IntegrationClient<OpenAIApi, t
throw `Can't create OpenAI integration (${options.id}) as apiKey was undefined`; throw `Can't create OpenAI integration (${options.id}) as apiKey was undefined`;
} }
this.native = new OpenAIApi( this.native = new OpenAIApi({
new Configuration({ apiKey: options.apiKey,
apiKey: options.apiKey, organization: options.organization,
organization: options.organization, });
})
);
this.client = { this.client = {
tasks, tasks,
+3 -24
View File
@@ -1,8 +1,7 @@
import { CreateCompletionResponseUsage, CreateEmbeddingResponseUsage } from "openai"; import OpenAI from "openai";
import { z } from "zod";
export function createTaskUsageProperties( export function createTaskUsageProperties(
usage: CreateCompletionResponseUsage | CreateEmbeddingResponseUsage | undefined usage: OpenAI.Completions.CompletionUsage | OpenAI.CreateEmbeddingResponse.Usage | undefined
) { ) {
if (!usage) { if (!usage) {
return; return;
@@ -28,26 +27,6 @@ export function createTaskUsageProperties(
]; ];
} }
const OpenAIErrorSchema = z.object({
response: z.object({
data: z.object({
error: z.object({
code: z.string().nullable().optional(),
message: z.string(),
type: z.string(),
}),
}),
}),
});
export function onTaskError(error: unknown) { export function onTaskError(error: unknown) {
const openAIError = OpenAIErrorSchema.safeParse(error); return;
if (!openAIError.success) {
return;
}
const { message, code, type } = openAIError.data.response.data.error;
return new Error(`${type}: ${message}${code ? ` (${code})` : ""}`);
} }
+250 -166
View File
@@ -1,36 +1,20 @@
import type { AuthenticatedTask } from "@trigger.dev/sdk"; import type { AuthenticatedTask } from "@trigger.dev/sdk";
import { import OpenAI from "openai";
CreateChatCompletionRequest,
CreateCompletionRequest,
CreateEditRequest,
CreateEmbeddingRequest,
CreateFineTuneRequest,
CreateImageRequest,
OpenAIApi,
} from "openai";
import { OpenAIIntegrationAuth } from "./types"; import { OpenAIIntegrationAuth } from "./types";
import { redactString } from "@trigger.dev/sdk"; import { redactString } from "@trigger.dev/sdk";
import { Prettify, fileFromString, fileFromUrl, truncate } from "@trigger.dev/integration-kit"; import { Prettify, fileFromString, fileFromUrl, truncate } from "@trigger.dev/integration-kit";
import { createTaskUsageProperties, onTaskError } from "./taskUtils"; import { createTaskUsageProperties, onTaskError } from "./taskUtils";
type OpenAIClientType = InstanceType<typeof OpenAIApi>; type OpenAIClientType = InstanceType<typeof OpenAI>;
type RetrieveModelRequest = {
model: string;
};
type RetrieveModelResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["retrieveModel"]>>["data"]
>;
export const retrieveModel: AuthenticatedTask< export const retrieveModel: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<RetrieveModelRequest>, { model: string },
RetrieveModelResponseData OpenAI.Models.Model
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.retrieveModel(params.model).then((res) => res.data); return await client.models.retrieve(params.model);
}, },
init: (params) => { init: (params) => {
return { return {
@@ -47,16 +31,12 @@ export const retrieveModel: AuthenticatedTask<
}, },
}; };
type ListModelsResponseData = Awaited<ReturnType<OpenAIClientType["listModels"]>>["data"]; export const listModels: AuthenticatedTask<OpenAIClientType, void, OpenAI.Models.Model[]> = {
export const listModels: AuthenticatedTask<
OpenAIClientType,
void,
Prettify<ListModelsResponseData>
> = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.listModels().then((res) => res.data); const response = await client.models.list();
return response.data;
}, },
init: (params) => { init: (params) => {
return { return {
@@ -70,15 +50,15 @@ export const listModels: AuthenticatedTask<
export const createCompletion: AuthenticatedTask< export const createCompletion: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateCompletionRequest>, Prettify<OpenAI.CompletionCreateParamsNonStreaming>,
Prettify<Awaited<ReturnType<OpenAIClientType["createCompletion"]>>["data"]> OpenAI.Completion
> = { > = {
run: async (params, client, task) => { run: async (params, client, task) => {
const response = await client.createCompletion(params); const response = await client.completions.create(params);
task.outputProperties = createTaskUsageProperties(response.data.usage); task.outputProperties = createTaskUsageProperties(response.usage);
return response.data; return response;
}, },
init: (params) => { init: (params) => {
return { return {
@@ -95,18 +75,14 @@ export const createCompletion: AuthenticatedTask<
}, },
}; };
type CreateCompletionResponseData = Awaited<
ReturnType<OpenAIClientType["createCompletion"]>
>["data"];
export const backgroundCreateCompletion: AuthenticatedTask< export const backgroundCreateCompletion: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateCompletionRequest>, Prettify<OpenAI.CompletionCreateParamsNonStreaming>,
Prettify<CreateCompletionResponseData>, Prettify<OpenAI.Completion>,
OpenAIIntegrationAuth OpenAIIntegrationAuth
> = { > = {
run: async (params, client, task, io, auth) => { run: async (params, client, task, io, auth) => {
const response = await io.backgroundFetch<CreateCompletionResponseData>( const response = await io.backgroundFetch<OpenAI.Completion>(
"background", "background",
"https://api.openai.com/v1/completions", "https://api.openai.com/v1/completions",
{ {
@@ -139,22 +115,18 @@ export const backgroundCreateCompletion: AuthenticatedTask<
}, },
}; };
type CreateChatCompetionResponseData = Awaited<
ReturnType<OpenAIClientType["createChatCompletion"]>
>["data"];
export const createChatCompletion: AuthenticatedTask< export const createChatCompletion: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateChatCompletionRequest>, Prettify<OpenAI.Chat.CompletionCreateParamsNonStreaming>,
Prettify<CreateChatCompetionResponseData> Prettify<OpenAI.Chat.ChatCompletion>
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client, task) => { run: async (params, client, task) => {
const response = await client.createChatCompletion(params); const response = await client.chat.completions.create(params);
task.outputProperties = createTaskUsageProperties(response.data.usage); task.outputProperties = createTaskUsageProperties(response.usage);
return response.data; return response;
}, },
init: (params) => { init: (params) => {
return { return {
@@ -173,12 +145,12 @@ export const createChatCompletion: AuthenticatedTask<
export const backgroundCreateChatCompletion: AuthenticatedTask< export const backgroundCreateChatCompletion: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateChatCompletionRequest>, Prettify<OpenAI.Chat.CompletionCreateParamsNonStreaming>,
Prettify<CreateChatCompetionResponseData>, Prettify<OpenAI.Chat.ChatCompletion>,
OpenAIIntegrationAuth OpenAIIntegrationAuth
> = { > = {
run: async (params, client, task, io, auth) => { run: async (params, client, task, io, auth) => {
const response = await io.backgroundFetch<CreateChatCompetionResponseData>( const response = await io.backgroundFetch<OpenAI.Chat.ChatCompletion>(
"background", "background",
"https://api.openai.com/v1/chat/completions", "https://api.openai.com/v1/chat/completions",
{ {
@@ -229,20 +201,21 @@ export const backgroundCreateChatCompletion: AuthenticatedTask<
}, },
}; };
type CreateEditResponseData = Prettify<Awaited<ReturnType<OpenAIClientType["createEdit"]>>["data"]>; /**
* @deprecated The Edits API is deprecated; please use Chat Completions instead.
*/
export const createEdit: AuthenticatedTask< export const createEdit: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateEditRequest>, Prettify<OpenAI.EditCreateParams>,
CreateEditResponseData OpenAI.Edit
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client, task) => { run: async (params, client, task) => {
const response = await client.createEdit(params); const response = await client.edits.create(params);
task.outputProperties = createTaskUsageProperties(response.data.usage); task.outputProperties = createTaskUsageProperties(response.usage);
return response.data; return response;
}, },
init: (params) => { init: (params) => {
let properties = [ let properties = [
@@ -273,20 +246,16 @@ export const createEdit: AuthenticatedTask<
}, },
}; };
type CreateImageResponseData = Prettify< export const generateImage: AuthenticatedTask<
Awaited<ReturnType<OpenAIClientType["createImage"]>>["data"]
>;
export const createImage: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateImageRequest>, Prettify<OpenAI.Images.ImageGenerateParams>,
CreateImageResponseData OpenAI.Images.ImagesResponse
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client, task) => { run: async (params, client, task) => {
const response = await client.createImage(params); const response = await client.images.generate(params);
return response.data; return response;
}, },
init: (params) => { init: (params) => {
let properties = [ let properties = [
@@ -326,6 +295,8 @@ export const createImage: AuthenticatedTask<
}, },
}; };
export const createImage = generateImage;
export type CreateImageEditRequest = { export type CreateImageEditRequest = {
image: string | File; image: string | File;
prompt: string; prompt: string;
@@ -336,31 +307,27 @@ export type CreateImageEditRequest = {
user?: string; user?: string;
}; };
type CreateImageEditResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["createImageEdit"]>>["data"]
>;
export const createImageEdit: AuthenticatedTask< export const createImageEdit: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateImageEditRequest>, Prettify<CreateImageEditRequest>,
CreateImageEditResponseData OpenAI.Images.ImagesResponse
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client, task) => { run: async (params, client, task) => {
const file = typeof params.image === "string" ? await fileFromUrl(params.image) : params.image; const file = typeof params.image === "string" ? await fileFromUrl(params.image) : params.image;
const mask = typeof params.mask === "string" ? await fileFromUrl(params.mask) : params.mask; const mask = typeof params.mask === "string" ? await fileFromUrl(params.mask) : params.mask;
const response = await client.createImageEdit( const response = await client.images.edit({
file, image: file,
params.prompt, prompt: params.prompt,
mask, mask: mask,
params.n, n: params.n,
params.size, size: params.size,
params.response_format, response_format: params.response_format,
params.user user: params.user,
); });
return response.data; return response;
}, },
init: (params) => { init: (params) => {
let properties = []; let properties = [];
@@ -408,10 +375,6 @@ export const createImageEdit: AuthenticatedTask<
}, },
}; };
type CreateImageVariationResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["createImageVariation"]>>["data"]
>;
export type CreateImageVariationRequest = { export type CreateImageVariationRequest = {
image: string | File; image: string | File;
n?: number; n?: number;
@@ -423,15 +386,19 @@ export type CreateImageVariationRequest = {
export const createImageVariation: AuthenticatedTask< export const createImageVariation: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateImageVariationRequest>, Prettify<CreateImageVariationRequest>,
CreateImageVariationResponseData OpenAI.Images.ImagesResponse
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client, task) => { run: async (params, client, task) => {
const file = typeof params.image === "string" ? await fileFromUrl(params.image) : params.image; const file = typeof params.image === "string" ? await fileFromUrl(params.image) : params.image;
const response = await client const response = await client.images.createVariation({
.createImageVariation(file, params.n, params.size, params.response_format, params.user) image: file,
.then((res) => res.data); n: params.n,
size: params.size,
response_format: params.response_format,
user: params.user,
});
return response; return response;
}, },
@@ -476,22 +443,18 @@ export const createImageVariation: AuthenticatedTask<
}, },
}; };
type CreateEmbeddingResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["createEmbedding"]>>["data"]
>;
export const createEmbedding: AuthenticatedTask< export const createEmbedding: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateEmbeddingRequest>, Prettify<OpenAI.EmbeddingCreateParams>,
CreateEmbeddingResponseData OpenAI.Embeddings.CreateEmbeddingResponse
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client, task) => { run: async (params, client, task) => {
const response = await client.createEmbedding(params); const response = await client.embeddings.create(params);
task.outputProperties = createTaskUsageProperties(response.data.usage); task.outputProperties = createTaskUsageProperties(response.usage);
return response.data; return response;
}, },
init: (params) => { init: (params) => {
return { return {
@@ -503,20 +466,11 @@ export const createEmbedding: AuthenticatedTask<
label: "Model", label: "Model",
text: params.model, text: params.model,
}, },
{
label: "Input",
text:
typeof params.input === "string"
? truncate(params.input, 40)
: truncate(params.input.at(0) ?? "none", 40),
},
], ],
}; };
}, },
}; };
type CreateFileResponseData = Awaited<ReturnType<OpenAIClientType["createFile"]>>["data"];
type CreateFileRequest = { type CreateFileRequest = {
file: string | File; file: string | File;
fileName?: string; fileName?: string;
@@ -526,7 +480,7 @@ type CreateFileRequest = {
export const createFile: AuthenticatedTask< export const createFile: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateFileRequest>, Prettify<CreateFileRequest>,
Prettify<CreateFileResponseData> Prettify<OpenAI.Files.FileObject>
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
@@ -538,7 +492,7 @@ export const createFile: AuthenticatedTask<
file = params.file; file = params.file;
} }
return client.createFile(file, params.purpose).then((res) => res.data); return client.files.create({ file, purpose: params.purpose });
}, },
init: (params) => { init: (params) => {
return { return {
@@ -559,12 +513,12 @@ export const createFile: AuthenticatedTask<
}, },
}; };
type ListFilesResponseData = Prettify<Awaited<ReturnType<OpenAIClientType["listFiles"]>>["data"]>; export const listFiles: AuthenticatedTask<OpenAIClientType, void, OpenAI.Files.FileObject[]> = {
export const listFiles: AuthenticatedTask<OpenAIClientType, void, ListFilesResponseData> = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.listFiles().then((res) => res.data); const response = await client.files.list();
return response.data;
}, },
init: (params) => { init: (params) => {
return { return {
@@ -587,7 +541,7 @@ type CreateFineTuneFileRequest = {
export const createFineTuneFile: AuthenticatedTask< export const createFineTuneFile: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateFineTuneFileRequest>, Prettify<CreateFineTuneFileRequest>,
Prettify<CreateFileResponseData> Prettify<OpenAI.Files.FileObject>
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
@@ -596,7 +550,7 @@ export const createFineTuneFile: AuthenticatedTask<
params.fileName params.fileName
); );
return client.createFile(file, "fine-tune").then((res) => res.data); return client.files.create({ file, purpose: "fine-tune" });
}, },
init: (params) => { init: (params) => {
return { return {
@@ -613,18 +567,14 @@ export const createFineTuneFile: AuthenticatedTask<
}, },
}; };
type CreateFineTuneResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["createFineTune"]>>["data"]
>;
export const createFineTune: AuthenticatedTask< export const createFineTune: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<CreateFineTuneRequest>, Prettify<OpenAI.FineTuneCreateParams>,
CreateFineTuneResponseData OpenAI.FineTunes.FineTune
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.createFineTune(params).then((res) => res.data); return client.fineTunes.create(params);
}, },
init: (params) => { init: (params) => {
let properties = [ let properties = [
@@ -657,41 +607,36 @@ export const createFineTune: AuthenticatedTask<
}, },
}; };
type ListFineTunesResponseData = Prettify< export const listFineTunes: AuthenticatedTask<OpenAIClientType, void, OpenAI.FineTunes.FineTune[]> =
Awaited<ReturnType<OpenAIClientType["listFineTunes"]>>["data"] {
>; onError: onTaskError,
run: async (params, client) => {
const response = await client.fineTunes.list();
export const listFineTunes: AuthenticatedTask<OpenAIClientType, void, ListFineTunesResponseData> = { return response.data;
onError: onTaskError, },
run: async (params, client) => { init: (params) => {
return client.listFineTunes().then((res) => res.data); return {
}, name: "List fine tunes",
init: (params) => { params,
return { icon: "openai",
name: "List fine tunes", properties: [],
params, };
icon: "openai", },
properties: [], };
};
},
};
type SpecificFineTuneRequest = { type SpecificFineTuneRequest = {
fineTuneId: string; fineTuneId: string;
}; };
type RetrieveFineTuneResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["retrieveFineTune"]>>["data"]
>;
export const retrieveFineTune: AuthenticatedTask< export const retrieveFineTune: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<SpecificFineTuneRequest>, Prettify<SpecificFineTuneRequest>,
RetrieveFineTuneResponseData OpenAI.FineTunes.FineTune
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.retrieveFineTune(params.fineTuneId).then((res) => res.data); return client.fineTunes.retrieve(params.fineTuneId);
}, },
init: (params) => { init: (params) => {
return { return {
@@ -708,18 +653,14 @@ export const retrieveFineTune: AuthenticatedTask<
}, },
}; };
type CancelFineTuneResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["cancelFineTune"]>>["data"]
>;
export const cancelFineTune: AuthenticatedTask< export const cancelFineTune: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<SpecificFineTuneRequest>, Prettify<SpecificFineTuneRequest>,
CancelFineTuneResponseData OpenAI.FineTunes.FineTune
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.cancelFineTune(params.fineTuneId).then((res) => res.data); return client.fineTunes.cancel(params.fineTuneId);
}, },
init: (params) => { init: (params) => {
return { return {
@@ -736,18 +677,14 @@ export const cancelFineTune: AuthenticatedTask<
}, },
}; };
type ListFineTuneEventsResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["listFineTuneEvents"]>>["data"]
>;
export const listFineTuneEvents: AuthenticatedTask< export const listFineTuneEvents: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<SpecificFineTuneRequest>, Prettify<SpecificFineTuneRequest>,
ListFineTuneEventsResponseData OpenAI.FineTuneEventsListResponse
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.listFineTuneEvents(params.fineTuneId, false).then((res) => res.data); return client.fineTunes.listEvents(params.fineTuneId, { stream: false });
}, },
init: (params) => { init: (params) => {
return { return {
@@ -768,18 +705,14 @@ type DeleteFineTunedModelRequest = {
fineTunedModelId: string; fineTunedModelId: string;
}; };
type DeleteFineTuneResponseData = Prettify<
Awaited<ReturnType<OpenAIClientType["deleteModel"]>>["data"]
>;
export const deleteFineTune: AuthenticatedTask< export const deleteFineTune: AuthenticatedTask<
OpenAIClientType, OpenAIClientType,
Prettify<DeleteFineTunedModelRequest>, Prettify<DeleteFineTunedModelRequest>,
DeleteFineTuneResponseData OpenAI.Models.ModelDeleted
> = { > = {
onError: onTaskError, onError: onTaskError,
run: async (params, client) => { run: async (params, client) => {
return client.deleteModel(params.fineTunedModelId).then((res) => res.data); return client.models.del(params.fineTunedModelId);
}, },
init: (params) => { init: (params) => {
return { return {
@@ -795,3 +728,154 @@ export const deleteFineTune: AuthenticatedTask<
}; };
}, },
}; };
/**
* Creates a job that fine-tunes a specified model from a given dataset.
*
* Response includes details of the enqueued job including job status and the name
* of the fine-tuned models once complete.
*
* [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning)
*/
export const createFineTuningJob: AuthenticatedTask<
OpenAIClientType,
Prettify<OpenAI.FineTuning.JobCreateParams>,
OpenAI.FineTuning.FineTuningJob
> = {
onError: onTaskError,
run: async (params, client) => {
return client.fineTuning.jobs.create(params);
},
init: (params) => {
let properties = [
{
label: "File ID",
text: params.training_file,
},
];
if (params.model) {
properties.push({
label: "Model",
text: params.model,
});
}
if (params.validation_file) {
properties.push({
label: "Validation file",
text: params.validation_file,
});
}
return {
name: "Create Fine Tuning Job",
params,
icon: "openai",
properties,
};
},
};
/**
* Get info about a fine-tuning job.
*
* [Learn more about fine-tuning](https://platform.openai.com/docs/guides/fine-tuning)
*/
export const retrieveFineTuningJob: AuthenticatedTask<
OpenAIClientType,
{ id: string },
OpenAI.FineTuning.FineTuningJob
> = {
onError: onTaskError,
run: async (params, client) => {
return client.fineTuning.jobs.retrieve(params.id);
},
init: (params) => {
return {
name: "Retrieve Fine Tuning Job",
params,
icon: "openai",
properties: [
{
label: "Job ID",
text: params.id,
},
],
};
},
};
export const cancelFineTuningJob: AuthenticatedTask<
OpenAIClientType,
{ id: string },
OpenAI.FineTuning.FineTuningJob
> = {
onError: onTaskError,
run: async (params, client) => {
return client.fineTuning.jobs.cancel(params.id);
},
init: (params) => {
return {
name: "Cancel Fine Tuning Job",
params,
icon: "openai",
properties: [
{
label: "Job ID",
text: params.id,
},
],
};
},
};
export const listFineTuningJobEvents: AuthenticatedTask<
OpenAIClientType,
{ id: string },
OpenAI.FineTuning.FineTuningJobEvent[]
> = {
onError: onTaskError,
run: async (params, client) => {
const response = await client.fineTuning.jobs.listEvents(params.id);
return response.data;
},
init: (params) => {
return {
name: "List Fine Tuning Job Events",
params,
icon: "openai",
properties: [
{
label: "Job ID",
text: params.id,
},
],
};
},
};
/**
* List your organization's fine-tuning jobs
*/
export const listFineTuningJobs: AuthenticatedTask<
OpenAIClientType,
OpenAI.FineTuning.JobListParams,
OpenAI.FineTuning.FineTuningJob[]
> = {
onError: onTaskError,
run: async (params, client) => {
const response = await client.fineTuning.jobs.list(params);
return response.data;
},
init: (params) => {
return {
name: "List Fine Tuning Jobs",
params,
icon: "openai",
properties: [],
};
},
};
+125 -58
View File
@@ -344,7 +344,7 @@ importers:
devDependencies: devDependencies:
eslint: 8.31.0 eslint: 8.31.0
eslint-config-prettier: 8.6.0_eslint@8.31.0 eslint-config-prettier: 8.6.0_eslint@8.31.0
eslint-config-turbo: 1.10.12_eslint@8.31.0 eslint-config-turbo: 1.10.13_eslint@8.31.0
eslint-plugin-react: 7.31.8_eslint@8.31.0 eslint-plugin-react: 7.31.8_eslint@8.31.0
typescript: 4.9.4 typescript: 4.9.4
@@ -644,15 +644,13 @@ importers:
'@trigger.dev/sdk': workspace:^2.0.10 '@trigger.dev/sdk': workspace:^2.0.10
'@trigger.dev/tsconfig': workspace:* '@trigger.dev/tsconfig': workspace:*
'@types/node': '18' '@types/node': '18'
openai: ^3.3.0 openai: ^4.2.0
rimraf: ^3.0.2 rimraf: ^3.0.2
tsup: ^6.5.0 tsup: ^6.5.0
zod: 3.21.4
dependencies: dependencies:
'@trigger.dev/integration-kit': link:../../packages/integration-kit '@trigger.dev/integration-kit': link:../../packages/integration-kit
'@trigger.dev/sdk': link:../../packages/trigger-sdk '@trigger.dev/sdk': link:../../packages/trigger-sdk
openai: 3.3.0 openai: 4.2.0
zod: 3.21.4
devDependencies: devDependencies:
'@trigger.dev/tsconfig': link:../../config-packages/tsconfig '@trigger.dev/tsconfig': link:../../config-packages/tsconfig
'@types/node': 18.15.13 '@types/node': 18.15.13
@@ -802,6 +800,9 @@ importers:
tsup: 7.1.0_typescript@4.9.4 tsup: 7.1.0_typescript@4.9.4
typescript: 4.9.4 typescript: 4.9.4
packages/astro:
specifiers: {}
packages/cli: packages/cli:
specifiers: specifiers:
'@gmrchk/cli-testing-library': ^0.1.2 '@gmrchk/cli-testing-library': ^0.1.2
@@ -5210,7 +5211,7 @@ packages:
engines: {node: ^8.13.0 || >=10.10.0} engines: {node: ^8.13.0 || >=10.10.0}
dependencies: dependencies:
'@grpc/proto-loader': 0.7.7 '@grpc/proto-loader': 0.7.7
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@grpc/proto-loader/0.7.7: /@grpc/proto-loader/0.7.7:
@@ -5420,7 +5421,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies: dependencies:
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
chalk: 4.1.2 chalk: 4.1.2
jest-message-util: 29.6.2 jest-message-util: 29.6.2
jest-util: 29.6.2 jest-util: 29.6.2
@@ -5441,14 +5442,14 @@ packages:
'@jest/test-result': 29.6.2 '@jest/test-result': 29.6.2
'@jest/transform': 29.6.2 '@jest/transform': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.7.1 ci-info: 3.7.1
exit: 0.1.2 exit: 0.1.2
graceful-fs: 4.2.10 graceful-fs: 4.2.10
jest-changed-files: 29.5.0 jest-changed-files: 29.5.0
jest-config: 29.6.2_@types+node@20.5.0 jest-config: 29.6.2_@types+node@20.5.2
jest-haste-map: 29.6.2 jest-haste-map: 29.6.2
jest-message-util: 29.6.2 jest-message-util: 29.6.2
jest-regex-util: 29.4.3 jest-regex-util: 29.4.3
@@ -5476,7 +5477,7 @@ packages:
dependencies: dependencies:
'@jest/fake-timers': 29.6.2 '@jest/fake-timers': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
jest-mock: 29.6.2 jest-mock: 29.6.2
dev: true dev: true
@@ -5536,7 +5537,7 @@ packages:
'@jest/transform': 29.6.2 '@jest/transform': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@jridgewell/trace-mapping': 0.3.19 '@jridgewell/trace-mapping': 0.3.19
'@types/node': 20.5.0 '@types/node': 20.5.2
chalk: 4.1.2 chalk: 4.1.2
collect-v8-coverage: 1.0.2 collect-v8-coverage: 1.0.2
exit: 0.1.2 exit: 0.1.2
@@ -5646,7 +5647,7 @@ packages:
dependencies: dependencies:
'@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1 '@types/istanbul-reports': 3.0.1
'@types/node': 20.5.0 '@types/node': 20.5.2
'@types/yargs': 16.0.5 '@types/yargs': 16.0.5
chalk: 4.1.2 chalk: 4.1.2
dev: true dev: true
@@ -5658,7 +5659,7 @@ packages:
'@jest/schemas': 29.6.0 '@jest/schemas': 29.6.0
'@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1 '@types/istanbul-reports': 3.0.1
'@types/node': 20.5.0 '@types/node': 20.5.2
'@types/yargs': 17.0.19 '@types/yargs': 17.0.19
chalk: 4.1.2 chalk: 4.1.2
dev: true dev: true
@@ -9093,7 +9094,7 @@ packages:
resolution: {integrity: sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==} resolution: {integrity: sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==}
engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} engines: {node: '>= 12.13.0', npm: '>= 6.12.0'}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@slack/types/2.8.0: /@slack/types/2.8.0:
@@ -9920,7 +9921,7 @@ packages:
'@storybook/types': 7.0.9 '@storybook/types': 7.0.9
'@types/detect-port': 1.3.2 '@types/detect-port': 1.3.2
'@types/node': 16.18.11 '@types/node': 16.18.11
'@types/node-fetch': 2.6.2 '@types/node-fetch': 2.6.4
'@types/pretty-hrtime': 1.0.1 '@types/pretty-hrtime': 1.0.1
'@types/semver': 7.3.13 '@types/semver': 7.3.13
better-opn: 2.1.1 better-opn: 2.1.1
@@ -10943,7 +10944,7 @@ packages:
/@types/bunyan/1.8.7: /@types/bunyan/1.8.7:
resolution: {integrity: sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg==} resolution: {integrity: sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/cacheable-request/6.0.3: /@types/cacheable-request/6.0.3:
@@ -10951,7 +10952,7 @@ packages:
dependencies: dependencies:
'@types/http-cache-semantics': 4.0.1 '@types/http-cache-semantics': 4.0.1
'@types/keyv': 3.1.4 '@types/keyv': 3.1.4
'@types/node': 20.5.0 '@types/node': 20.5.2
'@types/responselike': 1.0.0 '@types/responselike': 1.0.0
/@types/chai-subset/1.3.3: /@types/chai-subset/1.3.3:
@@ -10973,7 +10974,7 @@ packages:
/@types/connect/3.4.35: /@types/connect/3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
/@types/content-disposition/0.5.5: /@types/content-disposition/0.5.5:
resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==}
@@ -11089,19 +11090,19 @@ packages:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
dependencies: dependencies:
'@types/minimatch': 5.1.2 '@types/minimatch': 5.1.2
'@types/node': 20.5.0 '@types/node': 20.5.2
/@types/glob/8.1.0: /@types/glob/8.1.0:
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
dependencies: dependencies:
'@types/minimatch': 5.1.2 '@types/minimatch': 5.1.2
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: true dev: true
/@types/graceful-fs/4.1.6: /@types/graceful-fs/4.1.6:
resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: true dev: true
/@types/gradient-string/1.1.2: /@types/gradient-string/1.1.2:
@@ -11123,7 +11124,7 @@ packages:
'@types/hapi__catbox': 10.2.4 '@types/hapi__catbox': 10.2.4
'@types/hapi__mimos': 4.1.4 '@types/hapi__mimos': 4.1.4
'@types/hapi__shot': 4.1.2 '@types/hapi__shot': 4.1.2
'@types/node': 20.5.0 '@types/node': 20.5.2
joi: 17.7.0 joi: 17.7.0
dev: false dev: false
@@ -11186,7 +11187,7 @@ packages:
/@types/is-stream/1.1.0: /@types/is-stream/1.1.0:
resolution: {integrity: sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==} resolution: {integrity: sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/istanbul-lib-coverage/2.0.4: /@types/istanbul-lib-coverage/2.0.4:
@@ -11262,7 +11263,7 @@ packages:
'@types/http-errors': 2.0.1 '@types/http-errors': 2.0.1
'@types/keygrip': 1.0.2 '@types/keygrip': 1.0.2
'@types/koa-compose': 3.2.5 '@types/koa-compose': 3.2.5
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/koa__router/8.0.7: /@types/koa__router/8.0.7:
@@ -11310,7 +11311,7 @@ packages:
/@types/memcached/2.2.7: /@types/memcached/2.2.7:
resolution: {integrity: sha512-ImJbz1i8pl+OnyhYdIDnHe8jAuM8TOwM/7VsciqhYX3IL0jPPUToAtVxklfcWFGYckahEYZxhd9FS0z3MM1dpA==} resolution: {integrity: sha512-ImJbz1i8pl+OnyhYdIDnHe8jAuM8TOwM/7VsciqhYX3IL0jPPUToAtVxklfcWFGYckahEYZxhd9FS0z3MM1dpA==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/mime-db/1.43.1: /@types/mime-db/1.43.1:
@@ -11343,7 +11344,7 @@ packages:
/@types/mysql/2.15.19: /@types/mysql/2.15.19:
resolution: {integrity: sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ==} resolution: {integrity: sha512-wSRg2QZv14CWcZXkgdvHbbV2ACufNy5EgI8mBBxnJIptchv7DBy/h53VMa2jDhyo0C9MO4iowE6z9vF8Ja1DkQ==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/node-fetch/2.6.2: /@types/node-fetch/2.6.2:
@@ -11353,6 +11354,12 @@ packages:
form-data: 3.0.1 form-data: 3.0.1
dev: true dev: true
/@types/node-fetch/2.6.4:
resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
dependencies:
'@types/node': 20.5.2
form-data: 3.0.1
/@types/node/12.20.55: /@types/node/12.20.55:
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
@@ -11372,7 +11379,6 @@ packages:
/@types/node/18.17.1: /@types/node/18.17.1:
resolution: {integrity: sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==} resolution: {integrity: sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==}
dev: true
/@types/node/20.4.2: /@types/node/20.4.2:
resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==} resolution: {integrity: sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==}
@@ -11386,6 +11392,7 @@ packages:
/@types/node/20.5.0: /@types/node/20.5.0:
resolution: {integrity: sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==} resolution: {integrity: sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==}
dev: true
/@types/node/20.5.2: /@types/node/20.5.2:
resolution: {integrity: sha512-5j/lXt7unfPOUlrKC34HIaedONleyLtwkKggiD/0uuMfT8gg2EOpg0dz4lCD15Ga7muC+1WzJZAjIB9simWd6Q==} resolution: {integrity: sha512-5j/lXt7unfPOUlrKC34HIaedONleyLtwkKggiD/0uuMfT8gg2EOpg0dz4lCD15Ga7muC+1WzJZAjIB9simWd6Q==}
@@ -11409,7 +11416,7 @@ packages:
/@types/pg/8.6.1: /@types/pg/8.6.1:
resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
pg-protocol: 1.6.0 pg-protocol: 1.6.0
pg-types: 2.2.0 pg-types: 2.2.0
dev: false dev: false
@@ -11417,7 +11424,7 @@ packages:
/@types/pg/8.6.6: /@types/pg/8.6.6:
resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
pg-protocol: 1.6.0 pg-protocol: 1.6.0
pg-types: 2.2.0 pg-types: 2.2.0
dev: false dev: false
@@ -11458,7 +11465,7 @@ packages:
/@types/responselike/1.0.0: /@types/responselike/1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
/@types/retry/0.12.0: /@types/retry/0.12.0:
resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
@@ -11483,7 +11490,7 @@ packages:
/@types/set-cookie-parser/2.4.2: /@types/set-cookie-parser/2.4.2:
resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: true dev: true
/@types/shimmer/1.0.2: /@types/shimmer/1.0.2:
@@ -11512,13 +11519,13 @@ packages:
/@types/tedious/4.0.9: /@types/tedious/4.0.9:
resolution: {integrity: sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==} resolution: {integrity: sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/through/0.0.30: /@types/through/0.0.30:
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: true dev: true
/@types/tinycolor2/1.4.3: /@types/tinycolor2/1.4.3:
@@ -11539,7 +11546,7 @@ packages:
/@types/websocket/1.0.5: /@types/websocket/1.0.5:
resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==} resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
/@types/ws/8.5.4: /@types/ws/8.5.4:
@@ -11568,7 +11575,7 @@ packages:
resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
requiresBuild: true requiresBuild: true
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
dev: false dev: false
optional: true optional: true
@@ -12710,7 +12717,7 @@ packages:
/axios/0.26.1: /axios/0.26.1:
resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
dependencies: dependencies:
follow-redirects: 1.15.2_debug@4.3.2 follow-redirects: 1.15.2
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
dev: false dev: false
@@ -12718,7 +12725,7 @@ packages:
/axios/0.27.2: /axios/0.27.2:
resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
dependencies: dependencies:
follow-redirects: 1.15.2_debug@4.3.2 follow-redirects: 1.15.2
form-data: 4.0.0 form-data: 4.0.0
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@@ -12726,7 +12733,7 @@ packages:
/axios/1.4.0: /axios/1.4.0:
resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==}
dependencies: dependencies:
follow-redirects: 1.15.2_debug@4.3.2 follow-redirects: 1.15.2
form-data: 4.0.0 form-data: 4.0.0
proxy-from-env: 1.1.0 proxy-from-env: 1.1.0
transitivePeerDependencies: transitivePeerDependencies:
@@ -12928,6 +12935,10 @@ packages:
/balanced-match/1.0.2: /balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
/base-64/0.1.0:
resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==}
dev: false
/base/0.11.2: /base/0.11.2:
resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -13579,6 +13590,10 @@ packages:
/chardet/0.7.0: /chardet/0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
/charenc/0.0.2:
resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
dev: false
/check-error/1.0.2: /check-error/1.0.2:
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
dev: true dev: true
@@ -14108,6 +14123,10 @@ packages:
shebang-command: 2.0.0 shebang-command: 2.0.0
which: 2.0.2 which: 2.0.2
/crypt/0.0.2:
resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
dev: false
/crypto-js/4.1.1: /crypto-js/4.1.1:
resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==}
dev: false dev: false
@@ -14308,6 +14327,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.2
dev: false
/debug/4.3.4: /debug/4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -14611,6 +14631,13 @@ packages:
engines: {node: '>=0.3.1'} engines: {node: '>=0.3.1'}
dev: true dev: true
/digest-fetch/1.3.0:
resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==}
dependencies:
base-64: 0.1.0
md5: 2.3.0
dev: false
/dir-glob/2.2.2: /dir-glob/2.2.2:
resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==}
engines: {node: '>=4'} engines: {node: '>=4'}
@@ -15575,13 +15602,13 @@ packages:
eslint: 8.31.0 eslint: 8.31.0
dev: true dev: true
/eslint-config-turbo/1.10.12_eslint@8.31.0: /eslint-config-turbo/1.10.13_eslint@8.31.0:
resolution: {integrity: sha512-z3jfh+D7UGYlzMWGh+Kqz++hf8LOE96q3o5R8X4HTjmxaBWlLAWG+0Ounr38h+JLR2TJno0hU9zfzoPNkR9BdA==} resolution: {integrity: sha512-Ffa0SxkRCPMtfUX/HDanEqsWoLwZTQTAXO9W4IsOtycb2MzJDrVcLmoFW5sMwCrg7gjqbrC4ZJoD+1SPPzIVqg==}
peerDependencies: peerDependencies:
eslint: '>6.6.0' eslint: '>6.6.0'
dependencies: dependencies:
eslint: 8.31.0 eslint: 8.31.0
eslint-plugin-turbo: 1.10.12_eslint@8.31.0 eslint-plugin-turbo: 1.10.13_eslint@8.31.0
dev: true dev: true
/eslint-doc-generator/1.4.3_eslint@8.45.0: /eslint-doc-generator/1.4.3_eslint@8.45.0:
@@ -16324,8 +16351,8 @@ packages:
- typescript - typescript
dev: true dev: true
/eslint-plugin-turbo/1.10.12_eslint@8.31.0: /eslint-plugin-turbo/1.10.13_eslint@8.31.0:
resolution: {integrity: sha512-uNbdj+ohZaYo4tFJ6dStRXu2FZigwulR1b3URPXe0Q8YaE7thuekKNP+54CHtZPH9Zey9dmDx5btAQl9mfzGOw==} resolution: {integrity: sha512-el4AAmn0zXmvHEyp1h0IQMfse10Vy8g5Vbg4IU3+vD9CSj5sDbX07iFVt8sCKg7og9Q5FAa9mXzlCf7t4vYgzg==}
peerDependencies: peerDependencies:
eslint: '>6.6.0' eslint: '>6.6.0'
dependencies: dependencies:
@@ -16800,7 +16827,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies: dependencies:
'@jest/expect-utils': 29.6.2 '@jest/expect-utils': 29.6.2
'@types/node': 20.5.0 '@types/node': 20.5.2
jest-get-type: 29.4.3 jest-get-type: 29.4.3
jest-matcher-utils: 29.6.2 jest-matcher-utils: 29.6.2
jest-message-util: 29.6.2 jest-message-util: 29.6.2
@@ -17198,7 +17225,6 @@ packages:
peerDependenciesMeta: peerDependenciesMeta:
debug: debug:
optional: true optional: true
dev: false
/follow-redirects/1.15.2_debug@4.3.2: /follow-redirects/1.15.2_debug@4.3.2:
resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
@@ -17210,6 +17236,7 @@ packages:
optional: true optional: true
dependencies: dependencies:
debug: 4.3.2 debug: 4.3.2
dev: false
/for-each/0.3.3: /for-each/0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
@@ -17276,6 +17303,10 @@ packages:
webpack: 5.80.0_uhpfu7q6noim4yjdo6qt2aajgu webpack: 5.80.0_uhpfu7q6noim4yjdo6qt2aajgu
dev: true dev: true
/form-data-encoder/1.7.2:
resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
dev: false
/form-data-encoder/2.1.4: /form-data-encoder/2.1.4:
resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
engines: {node: '>= 14.17'} engines: {node: '>= 14.17'}
@@ -17297,7 +17328,6 @@ packages:
asynckit: 0.4.0 asynckit: 0.4.0
combined-stream: 1.0.8 combined-stream: 1.0.8
mime-types: 2.1.35 mime-types: 2.1.35
dev: true
/form-data/4.0.0: /form-data/4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
@@ -17312,6 +17342,14 @@ packages:
engines: {node: '>=0.4.x'} engines: {node: '>=0.4.x'}
dev: true dev: true
/formdata-node/4.4.1:
resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
engines: {node: '>= 12.20'}
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 4.0.0-beta.3
dev: false
/formdata-polyfill/4.0.10: /formdata-polyfill/4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'} engines: {node: '>=12.20.0'}
@@ -19054,7 +19092,7 @@ packages:
'@jest/expect': 29.6.2 '@jest/expect': 29.6.2
'@jest/test-result': 29.6.2 '@jest/test-result': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
chalk: 4.1.2 chalk: 4.1.2
co: 4.6.0 co: 4.6.0
dedent: 1.5.1 dedent: 1.5.1
@@ -19144,7 +19182,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/jest-config/29.6.2_@types+node@20.5.0: /jest-config/29.6.2_@types+node@20.5.2:
resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==} resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies: peerDependencies:
@@ -19159,7 +19197,7 @@ packages:
'@babel/core': 7.21.8 '@babel/core': 7.21.8
'@jest/test-sequencer': 29.6.2 '@jest/test-sequencer': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
babel-jest: 29.6.2_@babel+core@7.21.8 babel-jest: 29.6.2_@babel+core@7.21.8
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.7.1 ci-info: 3.7.1
@@ -19219,7 +19257,7 @@ packages:
'@jest/environment': 29.6.2 '@jest/environment': 29.6.2
'@jest/fake-timers': 29.6.2 '@jest/fake-timers': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
jest-mock: 29.6.2 jest-mock: 29.6.2
jest-util: 29.6.2 jest-util: 29.6.2
dev: true dev: true
@@ -19235,7 +19273,7 @@ packages:
dependencies: dependencies:
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/graceful-fs': 4.1.6 '@types/graceful-fs': 4.1.6
'@types/node': 20.5.0 '@types/node': 20.5.2
anymatch: 3.1.3 anymatch: 3.1.3
fb-watchman: 2.0.2 fb-watchman: 2.0.2
graceful-fs: 4.2.10 graceful-fs: 4.2.10
@@ -19254,7 +19292,7 @@ packages:
dependencies: dependencies:
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/graceful-fs': 4.1.6 '@types/graceful-fs': 4.1.6
'@types/node': 20.5.0 '@types/node': 20.5.2
anymatch: 3.1.3 anymatch: 3.1.3
fb-watchman: 2.0.2 fb-watchman: 2.0.2
graceful-fs: 4.2.10 graceful-fs: 4.2.10
@@ -19368,7 +19406,7 @@ packages:
'@jest/test-result': 29.6.2 '@jest/test-result': 29.6.2
'@jest/transform': 29.6.2 '@jest/transform': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
chalk: 4.1.2 chalk: 4.1.2
emittery: 0.13.1 emittery: 0.13.1
graceful-fs: 4.2.10 graceful-fs: 4.2.10
@@ -19399,7 +19437,7 @@ packages:
'@jest/test-result': 29.6.2 '@jest/test-result': 29.6.2
'@jest/transform': 29.6.2 '@jest/transform': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
chalk: 4.1.2 chalk: 4.1.2
cjs-module-lexer: 1.2.3 cjs-module-lexer: 1.2.3
collect-v8-coverage: 1.0.2 collect-v8-coverage: 1.0.2
@@ -19451,7 +19489,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies: dependencies:
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.7.1 ci-info: 3.7.1
graceful-fs: 4.2.10 graceful-fs: 4.2.10
@@ -19476,7 +19514,7 @@ packages:
dependencies: dependencies:
'@jest/test-result': 29.6.2 '@jest/test-result': 29.6.2
'@jest/types': 29.6.1 '@jest/types': 29.6.1
'@types/node': 20.5.0 '@types/node': 20.5.2
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 4.1.2 chalk: 4.1.2
emittery: 0.13.1 emittery: 0.13.1
@@ -19488,7 +19526,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'} engines: {node: '>= 10.13.0'}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
dev: true dev: true
@@ -19497,7 +19535,7 @@ packages:
resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==} resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies: dependencies:
'@types/node': 20.5.0 '@types/node': 20.5.2
jest-util: 29.6.2 jest-util: 29.6.2
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
@@ -20281,6 +20319,14 @@ packages:
remove-accents: 0.4.2 remove-accents: 0.4.2
dev: false dev: false
/md5/2.3.0:
resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
dependencies:
charenc: 0.0.2
crypt: 0.0.2
is-buffer: 1.1.6
dev: false
/mdast-util-definitions/4.0.0: /mdast-util-definitions/4.0.0:
resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
dependencies: dependencies:
@@ -21972,6 +22018,22 @@ packages:
- debug - debug
dev: false dev: false
/openai/4.2.0:
resolution: {integrity: sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==}
hasBin: true
dependencies:
'@types/node': 18.17.1
'@types/node-fetch': 2.6.4
abort-controller: 3.0.0
agentkeepalive: 4.5.0
digest-fetch: 1.3.0
form-data-encoder: 1.7.2
formdata-node: 4.4.1
node-fetch: 2.6.12
transitivePeerDependencies:
- encoding
dev: false
/openapi-fetch/0.6.2: /openapi-fetch/0.6.2:
resolution: {integrity: sha512-Faj29Kzh7oCbt1bz6vAGNKtRJlV/GolOQTx87eYUnfCK7eVXdN9jQVojroc7tcJ5OQgyhbeOqD7LS/8UtGBnMQ==} resolution: {integrity: sha512-Faj29Kzh7oCbt1bz6vAGNKtRJlV/GolOQTx87eYUnfCK7eVXdN9jQVojroc7tcJ5OQgyhbeOqD7LS/8UtGBnMQ==}
dev: false dev: false
@@ -27202,6 +27264,11 @@ packages:
resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
/web-streams-polyfill/4.0.0-beta.3:
resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
engines: {node: '>= 14'}
dev: false
/webidl-conversions/3.0.1: /webidl-conversions/3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}