{isLoading && (
diff --git a/apps/frontend/src/components/provider-preview/preview.provider.component.tsx b/apps/frontend/src/components/provider-preview/preview.provider.component.tsx
new file mode 100644
index 00000000..96a94735
--- /dev/null
+++ b/apps/frontend/src/components/provider-preview/preview.provider.component.tsx
@@ -0,0 +1,251 @@
+'use client';
+import 'reflect-metadata';
+import { FC, MutableRefObject, useEffect, useMemo } from 'react';
+import { FormProvider, useForm, useWatch } from 'react-hook-form';
+import { classValidatorResolver } from '@hookform/resolvers/class-validator';
+import { Providers } from '@gitroom/frontend/components/new-launch/providers/show.all.providers';
+import { getProviderSettingsMeta } from '@gitroom/frontend/components/new-launch/providers/high.order.provider';
+import {
+ IntegrationContext,
+ type IntegrationContextType,
+} from '@gitroom/frontend/components/launches/helpers/use.integration';
+import { newDayjs } from '@gitroom/frontend/components/layout/set.timezone';
+
+type MockIntegration = IntegrationContextType['integration'];
+
+export type ProviderPreviewValidation = {
+ isValid: boolean;
+ value: Record
;
+ errors: string[];
+ /** react-hook-form trigger() result. False = at least one DTO field failed. */
+ formValid: boolean;
+ /** Non-null when the provider's checkValidity() returned a string. */
+ checkValidityError: string | null;
+};
+
+export type ProviderPreviewHandle = {
+ getValues: () => Record;
+ validate: () => Promise;
+ /**
+ * Resolves the provider's `maximumCharacters` against the seeded
+ * integration.additionalSettings. Returns null when the provider doesn't
+ * declare a limit (caller should treat as unbounded / fall back).
+ */
+ getMaximumCharacters: () => number | null;
+};
+
+export type ProviderPreviewProps = {
+ /** Provider identifier (e.g. "tiktok", "instagram", "youtube"). */
+ provider: string;
+ /** Initial settings value (shape matches the provider's DTO). */
+ value?: Record;
+ /**
+ * Called on every form change with the current settings value — for the
+ * mobile WebView bridge this is what you postMessage back.
+ */
+ onChange?: (value: Record) => void;
+ /** Validator error messages from a previous failed save, rendered above the form. */
+ errors?: string[];
+ /**
+ * Stub integration to feed the SettingsComponent via IntegrationContext.
+ * Some providers (e.g. TikTok title) branch on `integration.additionalSettings`
+ * or `value[0].image` — pass what you have, leave the rest to defaults.
+ */
+ integration?: Partial;
+ /**
+ * Per-post media (outer array = thread entries, inner = media items).
+ * Forwarded to the provider's `checkValidity` during validate().
+ */
+ posts?: Array>;
+ /**
+ * Imperative handle populated on mount. The parent calls
+ * `controlRef.current?.validate()` / `.getValues()` to pull state on demand.
+ */
+ controlRef?: MutableRefObject;
+};
+
+const DEFAULT_INTEGRATION: MockIntegration = {
+ id: 'preview',
+ name: 'Preview',
+ identifier: '',
+ picture: '',
+ display: '',
+ type: 'social',
+ editor: 'normal' as const,
+ disabled: false,
+ inBetweenSteps: false,
+ additionalSettings: '[]',
+ changeProfilePicture: false,
+ changeNickName: false,
+ time: [] as { time: number }[],
+};
+
+/** Emits onChange whenever the form changes. Mounted inside FormProvider. */
+const FormChangeEmitter: FC<{
+ onChange?: (value: Record) => void;
+}> = ({ onChange }) => {
+ const values = useWatch();
+ useEffect(() => {
+ if (onChange) onChange(values ?? {});
+ }, [values, onChange]);
+ return null;
+};
+
+const flattenFormErrors = (errs: unknown): string[] => {
+ const out: string[] = [];
+ const walk = (node: unknown) => {
+ if (!node || typeof node !== 'object') return;
+ const n = node as Record;
+ if (typeof n.message === 'string') out.push(n.message);
+ if (n.types && typeof n.types === 'object') {
+ for (const t of Object.values(n.types as Record)) {
+ if (typeof t === 'string') out.push(t);
+ }
+ }
+ for (const [key, child] of Object.entries(n)) {
+ if (['message', 'type', 'types', 'ref', 'root'].includes(key)) continue;
+ walk(child);
+ }
+ };
+ walk(errs);
+ return out;
+};
+
+export const ProviderPreviewComponent: FC = ({
+ provider,
+ value,
+ onChange,
+ errors,
+ integration,
+ posts,
+ controlRef,
+}) => {
+ const meta = useMemo(() => {
+ const entry = Providers.find((p) => p.identifier === provider);
+ if (!entry) return null;
+ return getProviderSettingsMeta(entry.component);
+ }, [provider]);
+
+ // When `value` is absent or `{}`, don't feed it to react-hook-form at all —
+ // passing an empty object as `values` wipes out DTO-level defaults that the
+ // SettingsComponent relies on (e.g. tiktok privacy = PUBLIC).
+ const hasSeededValue =
+ !!value && typeof value === 'object' && Object.keys(value).length > 0;
+
+ const form = useForm({
+ resolver: meta?.dto ? classValidatorResolver(meta.dto) : undefined,
+ defaultValues: hasSeededValue ? value : undefined,
+ values: hasSeededValue ? value : undefined,
+ mode: 'all',
+ criteriaMode: 'all',
+ reValidateMode: 'onChange',
+ });
+
+ useEffect(() => {
+ if (!controlRef) return;
+ const resolveAdditionalSettings = (): unknown[] => {
+ const additional = (integration?.additionalSettings as
+ | string
+ | unknown[]
+ | undefined) ?? '[]';
+ if (Array.isArray(additional)) return additional;
+ try {
+ const parsed = JSON.parse(additional || '[]');
+ return Array.isArray(parsed) ? parsed : [];
+ } catch {
+ return [];
+ }
+ };
+ controlRef.current = {
+ getValues: () => form.getValues() as Record,
+ getMaximumCharacters: () => {
+ const max = meta?.maximumCharacters;
+ if (typeof max === 'number') return max;
+ if (typeof max === 'function') {
+ try {
+ return max(resolveAdditionalSettings());
+ } catch {
+ return null;
+ }
+ }
+ return null;
+ },
+ validate: async () => {
+ const formValid = await form.trigger(undefined, { shouldFocus: false });
+ const errs = flattenFormErrors(form.formState.errors);
+ let customError: string | true = true;
+ if (meta?.checkValidity) {
+ try {
+ customError = await meta.checkValidity(
+ posts ?? [],
+ form.getValues(),
+ resolveAdditionalSettings(),
+ );
+ } catch (e: any) {
+ customError = e?.message ?? 'checkValidity threw';
+ }
+ }
+ const checkValidityError =
+ customError === true ? null : customError;
+ if (checkValidityError) errs.push(checkValidityError);
+ return {
+ isValid: formValid && checkValidityError === null,
+ value: form.getValues() as Record,
+ errors: errs,
+ formValid,
+ checkValidityError,
+ };
+ },
+ };
+ return () => {
+ if (controlRef.current) controlRef.current = null;
+ };
+ }, [controlRef, form, meta, integration, posts]);
+
+ const contextValue = useMemo(
+ () => ({
+ date: newDayjs(),
+ integration: {
+ ...(DEFAULT_INTEGRATION as MockIntegration),
+ identifier: provider,
+ ...integration,
+ } as MockIntegration,
+ allIntegrations: [],
+ value: [],
+ }),
+ [provider, integration],
+ );
+
+ if (!meta) {
+ return Provider "{provider}" not found
;
+ }
+
+ const { SettingsComponent } = meta;
+ if (!SettingsComponent) {
+ return (
+
+ This provider has no configurable settings.
+
+ );
+ }
+
+ return (
+
+
+
+ {errors && errors.length > 0 && (
+
+
+ {errors.map((e, i) => (
+ {e}
+ ))}
+
+
+ )}
+
+
+
+
+
+ );
+};
diff --git a/apps/frontend/src/components/public-api/public.component.tsx b/apps/frontend/src/components/public-api/public.component.tsx
index 4d26dc8b..1a3eed98 100644
--- a/apps/frontend/src/components/public-api/public.component.tsx
+++ b/apps/frontend/src/components/public-api/public.component.tsx
@@ -213,10 +213,17 @@ const McpSection = ({
user.publicApi
);
+ const remoteUrl = `${mcpBase}/mcp/${user.publicApi}`;
+ const cliUrl = `${mcpBase}/mcp`;
+
const maskedConfig = revealed
? config
: config.replace(new RegExp(user.publicApi.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), '*'.repeat(user.publicApi.length));
+ const maskedRemoteUrl = revealed
+ ? remoteUrl
+ : remoteUrl.replace(user.publicApi, '*'.repeat(user.publicApi.length));
+
return (
@@ -261,40 +268,47 @@ const McpSection = ({
onClick={() => setMethod(m)}
>
{m === 'header'
- ? t('authorization_header', 'Authorization Header')
- : t('api_key_in_url', 'API Key in URL')}
+ ? t('cli_claude_code_codex', 'CLI (Claude Code / Codex)')
+ : t('remote_servers', 'Remote servers (ChatGPT, Claude)')}
))}
-
-
- {t('mcp_client', 'Client')}
+ {method === 'header' && (
+
+
+ {t('mcp_client', 'Client')}
+
+
+ {mcpClients.map((client) => (
+ setActiveClient(client)}
+ >
+ {client}
+
+ ))}
+
-
- {mcpClients.map((client) => (
- setActiveClient(client)}
- >
- {client}
-
- ))}
-
-
+ )}
- {hint}
+ {method === 'header'
+ ? hint
+ : t(
+ 'remote_server_url_hint',
+ 'Paste this URL into your remote MCP client (ChatGPT, Claude, etc.).'
+ )}
- {maskedConfig}
+ {method === 'header' ? maskedConfig : maskedRemoteUrl}
{revealed ? t('hide', 'Hide') : t('reveal', 'Reveal')}
-
+
+ {method === 'header' && (
+
+ )}
@@ -335,13 +358,28 @@ const McpSection = ({
);
};
-const cliSteps = [
+const localCliSteps = [
{
label: 'Install the CLI',
code: 'npm install -g postiz',
},
{
- label: 'Set your API key, copy it to your secret files',
+ label: 'Run: postiz auth:login',
+ code: 'postiz auth:login',
+ },
+ {
+ label: 'Install the Postiz skill for your AI agent',
+ code: 'npx skills add gitroomhq/postiz-agent',
+ },
+] as const;
+
+const ciCliSteps = [
+ {
+ label: 'Install the CLI',
+ code: 'npm install -g postiz',
+ },
+ {
+ label: 'Set your API key as an environment variable',
code: 'export POSTIZ_API_KEY="{API_KEY}"',
},
{
@@ -350,31 +388,29 @@ const cliSteps = [
},
] as const;
-const CliSection = ({
- apiKey,
- backendUrl,
-}: {
- apiKey: string;
- backendUrl: string;
-}) => {
+const CliSection = ({ apiKey }: { apiKey: string }) => {
const t = useT();
- const toaster = useToaster();
+ const [mode, setMode] = useState<'local' | 'ci'>('local');
const [revealed, setRevealed] = useState(false);
- const steps = cliSteps.map((step) => ({
- ...step,
- code: step.code.replace('{API_KEY}', apiKey),
- }));
+ const steps =
+ mode === 'local'
+ ? localCliSteps.map((step) => ({ ...step }))
+ : ciCliSteps.map((step) => ({
+ ...step,
+ code: step.code.replace('{API_KEY}', apiKey),
+ }));
- const maskedSteps = steps.map((step) => ({
- ...step,
- code: revealed
- ? step.code
- : step.code.replace(
- new RegExp(apiKey.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'),
- '*'.repeat(apiKey.length)
- ),
- }));
+ const displaySteps =
+ mode === 'ci' && !revealed
+ ? steps.map((step) => ({
+ ...step,
+ code: step.code.replace(
+ new RegExp(apiKey.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'),
+ '*'.repeat(apiKey.length)
+ ),
+ }))
+ : steps;
return (
@@ -402,7 +438,26 @@ const CliSection = ({
- {maskedSteps.map((step, i) => (
+
+ {(['local', 'ci'] as const).map((m) => (
+ setMode(m)}
+ >
+ {m === 'local'
+ ? t('locally', 'Locally')
+ : t('ci_remote_servers', 'CI / Remote servers')}
+
+ ))}
+
+ {displaySteps.map((step, i) => (
{i + 1}. {step.label}
@@ -413,36 +468,38 @@ const CliSection = ({
))}
-
setRevealed(!revealed)}
- className="cursor-pointer px-[16px] h-[36px] bg-btnSimple hover:bg-boxHover transition-colors rounded-[8px] text-[13px] font-[600] flex items-center gap-[6px]"
- >
- setRevealed(!revealed)}
+ className="cursor-pointer px-[16px] h-[36px] bg-btnSimple hover:bg-boxHover transition-colors rounded-[8px] text-[13px] font-[600] flex items-center gap-[6px]"
>
- {revealed ? (
- <>
-
-
-
- >
- ) : (
- <>
-
-
- >
- )}
-
- {revealed ? t('hide', 'Hide') : t('reveal', 'Reveal')}
-
+
+ {revealed ? (
+ <>
+
+
+
+ >
+ ) : (
+ <>
+
+
+ >
+ )}
+
+ {revealed ? t('hide', 'Hide') : t('reveal', 'Reveal')}
+
+ )}
s.code).join(' && ')}
label={t('copy_all', 'Copy All')}
@@ -643,7 +700,7 @@ const PublicApiContent = () => {
-
+
diff --git a/apps/frontend/src/proxy.ts b/apps/frontend/src/proxy.ts
index da712ea5..360c937e 100644
--- a/apps/frontend/src/proxy.ts
+++ b/apps/frontend/src/proxy.ts
@@ -46,6 +46,7 @@ export async function proxy(request: NextRequest) {
if (
nextUrl.pathname.startsWith('/uploads/') ||
nextUrl.pathname.startsWith('/p/') ||
+ nextUrl.pathname.startsWith('/provider/') ||
nextUrl.pathname.startsWith('/icons/')
) {
return topResponse;
diff --git a/apps/orchestrator/src/activities/post.activity.ts b/apps/orchestrator/src/activities/post.activity.ts
index 5467d353..b2e9a62b 100644
--- a/apps/orchestrator/src/activities/post.activity.ts
+++ b/apps/orchestrator/src/activities/post.activity.ts
@@ -24,6 +24,33 @@ import {
} from '@gitroom/nestjs-libraries/temporal/temporal.search.attribute';
import { SubscriptionService } from '@gitroom/nestjs-libraries/database/prisma/subscriptions/subscription.service';
+// Drops fields the workflow and downstream activities never read — biggest wins are `error` (grows per retry) and `childrenPost` (Prisma side-loads it on every recursive row).
+function slimPost(post: any) {
+ if (!post) return post;
+ const {
+ error,
+ childrenPost,
+ tags,
+ description,
+ title,
+ submittedForOrderId,
+ submittedForOrganizationId,
+ submittedForOrder,
+ submittedForOrganization,
+ lastMessageId,
+ parentPostId,
+ approvedSubmitForOrder,
+ deletedAt,
+ createdAt,
+ updatedAt,
+ payoutProblems,
+ comments,
+ errors,
+ ...rest
+ } = post;
+ return rest;
+}
+
@Injectable()
@Activity()
export class PostActivity {
@@ -49,7 +76,7 @@ export class PostActivity {
for (const post of list) {
await this._temporalService.client
.getRawClient()
- .workflow.signalWithStart('postWorkflowV101', {
+ .workflow.signalWithStart('postWorkflowV104', {
workflowId: `post_${post.id}`,
taskQueue: 'main',
signal: 'poke',
@@ -80,7 +107,7 @@ export class PostActivity {
@ActivityMethod()
async updatePost(id: string, postId: string, releaseURL: string) {
- return this._postService.updatePost(id, postId, releaseURL);
+ await this._postService.updatePost(id, postId, releaseURL);
}
@ActivityMethod()
@@ -101,7 +128,7 @@ export class PostActivity {
return [];
}
- return getPosts;
+ return getPosts.map(slimPost);
}
@ActivityMethod()
@@ -220,7 +247,7 @@ export class PostActivity {
digest = false,
type: NotificationType = 'success'
) {
- return this._notificationService.inAppNotification(
+ await this._notificationService.inAppNotification(
orgId,
subject,
message,
@@ -241,7 +268,7 @@ export class PostActivity {
@ActivityMethod()
async changeState(id: string, state: State, err?: any, body?: any) {
- return this._postService.changeState(id, state, err, body);
+ await this._postService.changeState(id, state, err, body);
}
@ActivityMethod()
@@ -266,7 +293,7 @@ export class PostActivity {
);
const post = await this._postService.getPostByForWebhookId(postId);
- return Promise.all(
+ await Promise.all(
webhooks.map(async (webhook) => {
try {
await fetch(webhook.url, {
@@ -303,7 +330,7 @@ export class PostActivity {
delay: number;
information: any;
}) {
- return this._integrationService.processInternalPlug(data);
+ await this._integrationService.processInternalPlug(data);
}
@ActivityMethod()
@@ -332,4 +359,36 @@ export class PostActivity {
return false;
}
}
+
+ @ActivityMethod()
+ async refreshTokenWithCause(
+ integration: Integration,
+ cause: string
+ ): Promise
{
+ const getIntegration = this._integrationManager.getSocialIntegration(
+ integration.providerIdentifier
+ );
+
+ try {
+ const refresh = await this._refreshIntegrationService.refresh(
+ integration,
+ cause
+ );
+ if (!refresh) {
+ return false;
+ }
+
+ if (getIntegration.refreshWait) {
+ await timer(10000);
+ }
+
+ return refresh;
+ } catch (err) {
+ await this._refreshIntegrationService.setBetweenSteps(
+ integration,
+ cause
+ );
+ return false;
+ }
+ }
}
diff --git a/apps/orchestrator/src/workflows/index.ts b/apps/orchestrator/src/workflows/index.ts
index 76b0d16f..b4da83e8 100644
--- a/apps/orchestrator/src/workflows/index.ts
+++ b/apps/orchestrator/src/workflows/index.ts
@@ -1,4 +1,7 @@
export * from './post-workflows/post.workflow.v1.0.1';
+export * from './post-workflows/post.workflow.v1.0.2';
+export * from './post-workflows/post.workflow.v1.0.3';
+export * from './post-workflows/post.workflow.v1.0.4';
export * from './autopost.workflow';
export * from './digest.email.workflow';
export * from './missing.post.workflow';
diff --git a/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.2.ts b/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.2.ts
new file mode 100644
index 00000000..65fea772
--- /dev/null
+++ b/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.2.ts
@@ -0,0 +1,410 @@
+import { PostActivity } from '@gitroom/orchestrator/activities/post.activity';
+import {
+ ActivityFailure,
+ ApplicationFailure,
+ startChild,
+ proxyActivities,
+ sleep,
+ defineSignal,
+ setHandler,
+} from '@temporalio/workflow';
+import dayjs from 'dayjs';
+import { Integration } from '@prisma/client';
+import { capitalize, sortBy } from 'lodash';
+import { PostResponse } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
+import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
+import { TypedSearchAttributes } from '@temporalio/common';
+import { postId as postIdSearchParam } from '@gitroom/nestjs-libraries/temporal/temporal.search.attribute';
+
+const proxyTaskQueue = (taskQueue: string) => {
+ return proxyActivities({
+ startToCloseTimeout: '10 minute',
+ taskQueue,
+ retry: {
+ maximumAttempts: 3,
+ backoffCoefficient: 1,
+ initialInterval: '2 minutes',
+ },
+ });
+};
+
+const {
+ getPostsList,
+ inAppNotification,
+ changeState,
+ updatePost,
+ sendWebhooks,
+ isCommentable,
+} = proxyActivities({
+ startToCloseTimeout: '10 minute',
+ retry: {
+ maximumAttempts: 3,
+ backoffCoefficient: 1,
+ initialInterval: '2 minutes',
+ },
+});
+
+const poke = defineSignal('poke');
+
+const iterate = Array.from({ length: 5 });
+
+export async function postWorkflowV102({
+ taskQueue,
+ postId,
+ organizationId,
+ postNow = false,
+}: {
+ taskQueue: string;
+ postId: string;
+ organizationId: string;
+ postNow?: boolean;
+}) {
+ // Dynamic task queue, for concurrency
+ const {
+ postSocial,
+ postComment,
+ getIntegrationById,
+ refreshTokenWithCause,
+ internalPlugs,
+ globalPlugs,
+ processInternalPlug,
+ processPlug,
+ } = proxyTaskQueue(taskQueue);
+
+ let poked = false;
+ setHandler(poke, () => {
+ poked = true;
+ });
+
+ const startTime = new Date();
+ // get all the posts and comments to post
+ const postsListBefore = await getPostsList(organizationId, postId);
+ const [post] = postsListBefore;
+
+ // in case doesn't exists for some reason, fail it
+ if (!post || (!postNow && post.state !== 'QUEUE')) {
+ return;
+ }
+
+ // if it's a repeatable post, we should ignore this.
+ if (!postNow) {
+ await sleep(
+ dayjs(post.publishDate).isBefore(dayjs())
+ ? 0
+ : dayjs(post.publishDate).diff(dayjs(), 'millisecond')
+ );
+ }
+
+ // if refresh is needed from last time, let's inform the user
+ if (post.integration?.refreshNeeded) {
+ await inAppNotification(
+ post.organizationId,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name}`,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name} because you need to reconnect it. Please enable it and try again.`,
+ true,
+ false,
+ 'info'
+ );
+ return;
+ }
+
+ // if it's disabled, inform the user
+ if (post.integration?.disabled) {
+ await inAppNotification(
+ post.organizationId,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name}`,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name} because it's disabled. Please enable it and try again.`,
+ true,
+ false,
+ 'info'
+ );
+ return;
+ }
+
+ // Do we need to post comment for this social?
+ const toComment: boolean =
+ postsListBefore.length === 1
+ ? false
+ : await isCommentable(post.integration);
+
+ const postsList = toComment ? postsListBefore : [postsListBefore[0]];
+
+ // list of all the saved results
+ const postsResults: PostResponse[] = [];
+
+ // iterate over the posts
+ for (let i = 0; i < postsList.length; i++) {
+ const before = postsResults.length;
+ // this is a small trick to repeat an action in case of token refresh
+ for (const _ of iterate) {
+ try {
+ // first post the main post
+ if (i === 0) {
+ postsResults.push(
+ ...(await postSocial(post.integration as Integration, [
+ postsList[i],
+ ]))
+ );
+
+ // then post the comments if any
+ } else {
+ if (postsList[i].delay) {
+ await sleep(60000 * Math.max(0, Number(postsList[i].delay ?? 0)));
+ }
+
+ postsResults.push(
+ ...(await postComment(
+ postsResults[0].postId,
+ postsResults.length === 1
+ ? undefined
+ : postsResults[i - 1].postId,
+ post.integration,
+ [postsList[i]]
+ ))
+ );
+ }
+
+ // mark post as successful
+ await updatePost(
+ postsList[i].id,
+ postsResults[i].postId,
+ postsResults[i].releaseURL
+ );
+
+ if (i === 0) {
+ // send notification on a sucessful post
+ await inAppNotification(
+ post.integration.organizationId,
+ `Your post has been published on ${capitalize(
+ post.integration.providerIdentifier
+ )}`,
+ `Your post has been published on ${capitalize(
+ post.integration.providerIdentifier
+ )} at ${postsResults[0].releaseURL}`,
+ true,
+ true
+ );
+ }
+
+ // break the current while to move to the next post
+ break;
+ } catch (err) {
+ // if token refresh is needed, do it and repeat
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ post.integration,
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ await changeState(postsList[0].id, 'ERROR', err, postsList);
+ return false;
+ }
+
+ post.integration.token = refresh.accessToken;
+ continue;
+ }
+
+ // for other errors, change state and inform the user if needed
+ await changeState(postsList[0].id, 'ERROR', err, postsList);
+
+ // specific case for bad body errors
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ await inAppNotification(
+ post.organizationId,
+ `Error posting${i === 0 ? ' ' : ' comments '}on ${
+ post.integration?.providerIdentifier
+ } for ${post?.integration?.name}`,
+ `An error occurred while posting${i === 0 ? ' ' : ' comments '}on ${
+ post.integration?.providerIdentifier
+ }${err?.cause?.message ? `: ${err?.cause?.message}` : ``}`,
+ true,
+ false,
+ 'fail'
+ );
+ return false;
+ }
+ }
+ }
+
+ if (postsResults.length === before) {
+ // all retries exhausted without success
+ return false;
+ }
+ }
+
+ // send webhooks for the post
+ await sendWebhooks(
+ postsResults[0].postId,
+ post.organizationId,
+ post.integration.id
+ );
+
+ // load internal plugs like repost by other users
+ const internalPlugsList = await internalPlugs(
+ post.integration,
+ JSON.parse(post.settings)
+ );
+
+ // load global plugs, like repost a post if it gets to a certain number of likes
+ const globalPlugsList = (await globalPlugs(post.integration)).reduce(
+ (all, current) => {
+ for (let i = 1; i <= current.totalRuns; i++) {
+ all.push({
+ ...current,
+ delay: current.delay * i,
+ });
+ }
+
+ return all;
+ },
+ []
+ );
+
+ // Check if the post is repeatable
+ const repeatPost = !post.intervalInDays
+ ? []
+ : [
+ {
+ type: 'repeat-post',
+ delay:
+ post.intervalInDays * 24 * 60 * 60 * 1000 -
+ (new Date().getTime() - startTime.getTime()),
+ },
+ ];
+
+ // Sort all the actions by delay, so we can process them in order
+ const list = sortBy(
+ [...internalPlugsList, ...globalPlugsList, ...repeatPost],
+ 'delay'
+ );
+
+ // process all the plugs in order, we are using while because in some cases we need to remove items from the list
+ while (list.length > 0) {
+ // get the next to process
+ const todo = list.shift();
+
+ // wait for the delay
+ await sleep(Math.max(0, Number(todo.delay ?? 0)));
+
+ // process internal plug
+ if (todo.type === 'internal-plug') {
+ for (const _ of iterate) {
+ try {
+ await processInternalPlug({ ...todo, post: postsResults[0].postId });
+ } catch (err) {
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ await getIntegrationById(organizationId, todo.integration),
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ break;
+ }
+
+ continue;
+ }
+ break;
+ }
+ }
+
+ // process global plug
+ if (todo.type === 'global') {
+ for (const _ of iterate) {
+ try {
+ const process = await processPlug({
+ ...todo,
+ postId: postsResults[0].postId,
+ });
+ if (process) {
+ const toDelete = list
+ .reduce((all, current, index) => {
+ if (current.plugId === todo.plugId) {
+ all.push(index);
+ }
+
+ return all;
+ }, [])
+ .reverse();
+
+ for (const index of toDelete) {
+ list.splice(index, 1);
+ }
+ }
+ } catch (err) {
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ post.integration,
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ break;
+ }
+
+ continue;
+ }
+
+ break;
+ }
+ }
+
+ // process repeat post in a new workflow, this is important so the other plugs can keep running
+ if (todo.type === 'repeat-post') {
+ await startChild(postWorkflowV102, {
+ parentClosePolicy: 'ABANDON',
+ args: [
+ {
+ taskQueue,
+ postId,
+ organizationId,
+ postNow: true,
+ },
+ ],
+ workflowId: `post_${post.id}_${makeId(10)}`,
+ typedSearchAttributes: new TypedSearchAttributes([
+ {
+ key: postIdSearchParam,
+ value: postId,
+ },
+ ]),
+ });
+ }
+ }
+}
diff --git a/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.3.ts b/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.3.ts
new file mode 100644
index 00000000..1c80a2ed
--- /dev/null
+++ b/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.3.ts
@@ -0,0 +1,430 @@
+import { PostActivity } from '@gitroom/orchestrator/activities/post.activity';
+import {
+ ActivityFailure,
+ ApplicationFailure,
+ startChild,
+ proxyActivities,
+ sleep,
+ defineSignal,
+ setHandler,
+} from '@temporalio/workflow';
+import dayjs from 'dayjs';
+import { Integration } from '@prisma/client';
+import { capitalize, sortBy } from 'lodash';
+import { PostResponse } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
+import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
+import { TypedSearchAttributes } from '@temporalio/common';
+import { postId as postIdSearchParam } from '@gitroom/nestjs-libraries/temporal/temporal.search.attribute';
+
+const proxyTaskQueue = (taskQueue: string) => {
+ return proxyActivities({
+ startToCloseTimeout: '10 minute',
+ taskQueue,
+ retry: {
+ maximumAttempts: 3,
+ backoffCoefficient: 1,
+ initialInterval: '2 minutes',
+ },
+ });
+};
+
+const {
+ getPostsList,
+ inAppNotification,
+ changeState,
+ updatePost,
+ sendWebhooks,
+ isCommentable,
+} = proxyActivities({
+ startToCloseTimeout: '10 minute',
+ retry: {
+ maximumAttempts: 3,
+ backoffCoefficient: 1,
+ initialInterval: '2 minutes',
+ },
+});
+
+const poke = defineSignal('poke');
+
+const iterate = Array.from({ length: 5 });
+
+export async function postWorkflowV103({
+ taskQueue,
+ postId,
+ organizationId,
+ postNow = false,
+}: {
+ taskQueue: string;
+ postId: string;
+ organizationId: string;
+ postNow?: boolean;
+}) {
+ // Dynamic task queue, for concurrency
+ const {
+ postSocial,
+ postComment,
+ getIntegrationById,
+ refreshTokenWithCause,
+ internalPlugs,
+ globalPlugs,
+ processInternalPlug,
+ processPlug,
+ } = proxyTaskQueue(taskQueue);
+
+ let poked = false;
+ setHandler(poke, () => {
+ poked = true;
+ });
+
+ const startTime = new Date();
+ // get all the posts and comments to post
+ const postsListBefore = await getPostsList(organizationId, postId);
+ const [post] = postsListBefore;
+
+ // in case doesn't exists for some reason, fail it
+ if (!post || (!postNow && post.state !== 'QUEUE')) {
+ await changeState(
+ postsListBefore[0].id,
+ 'ERROR',
+ 'Already posted',
+ postsListBefore
+ );
+ return;
+ }
+
+ // if it's a repeatable post, we should ignore this.
+ if (!postNow) {
+ await sleep(
+ dayjs(post.publishDate).isBefore(dayjs())
+ ? 0
+ : dayjs(post.publishDate).diff(dayjs(), 'millisecond')
+ );
+ }
+
+ // if refresh is needed from last time, let's inform the user
+ if (post.integration?.refreshNeeded) {
+ await inAppNotification(
+ post.organizationId,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name}`,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name} because you need to reconnect it. Please enable it and try again.`,
+ true,
+ false,
+ 'info'
+ );
+
+ await changeState(
+ postsListBefore[0].id,
+ 'ERROR',
+ 'Refresh channel needed',
+ postsListBefore
+ );
+ return;
+ }
+
+ // if it's disabled, inform the user
+ if (post.integration?.disabled) {
+ await inAppNotification(
+ post.organizationId,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name}`,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name} because it's disabled. Please enable it and try again.`,
+ true,
+ false,
+ 'info'
+ );
+
+ await changeState(
+ postsListBefore[0].id,
+ 'ERROR',
+ 'Channel disabled',
+ postsListBefore
+ );
+ return;
+ }
+
+ // Do we need to post comment for this social?
+ const toComment: boolean =
+ postsListBefore.length === 1
+ ? false
+ : await isCommentable(post.integration);
+
+ const postsList = toComment ? postsListBefore : [postsListBefore[0]];
+
+ // list of all the saved results
+ const postsResults: PostResponse[] = [];
+
+ // iterate over the posts
+ for (let i = 0; i < postsList.length; i++) {
+ const before = postsResults.length;
+ // this is a small trick to repeat an action in case of token refresh
+ for (const _ of iterate) {
+ try {
+ // first post the main post
+ if (i === 0) {
+ postsResults.push(
+ ...(await postSocial(post.integration as Integration, [
+ postsList[i],
+ ]))
+ );
+
+ // then post the comments if any
+ } else {
+ if (postsList[i].delay) {
+ await sleep(60000 * Math.max(0, Number(postsList[i].delay ?? 0)));
+ }
+
+ postsResults.push(
+ ...(await postComment(
+ postsResults[0].postId,
+ postsResults.length === 1
+ ? undefined
+ : postsResults[i - 1].postId,
+ post.integration,
+ [postsList[i]]
+ ))
+ );
+ }
+
+ // mark post as successful
+ await updatePost(
+ postsList[i].id,
+ postsResults[i].postId,
+ postsResults[i].releaseURL
+ );
+
+ if (i === 0) {
+ // send notification on a sucessful post
+ await inAppNotification(
+ post.integration.organizationId,
+ `Your post has been published on ${capitalize(
+ post.integration.providerIdentifier
+ )}`,
+ `Your post has been published on ${capitalize(
+ post.integration.providerIdentifier
+ )} at ${postsResults[0].releaseURL}`,
+ true,
+ true
+ );
+ }
+
+ // break the current while to move to the next post
+ break;
+ } catch (err) {
+ // if token refresh is needed, do it and repeat
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ post.integration,
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ await changeState(postsList[0].id, 'ERROR', err, postsList);
+ return false;
+ }
+
+ post.integration.token = refresh.accessToken;
+ continue;
+ }
+
+ // for other errors, change state and inform the user if needed
+ await changeState(postsList[0].id, 'ERROR', err, postsList);
+
+ // specific case for bad body errors
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ await inAppNotification(
+ post.organizationId,
+ `Error posting${i === 0 ? ' ' : ' comments '}on ${
+ post.integration?.providerIdentifier
+ } for ${post?.integration?.name}`,
+ `An error occurred while posting${i === 0 ? ' ' : ' comments '}on ${
+ post.integration?.providerIdentifier
+ }${err?.cause?.message ? `: ${err?.cause?.message}` : ``}`,
+ true,
+ false,
+ 'fail'
+ );
+ return false;
+ }
+ }
+ }
+
+ if (postsResults.length === before) {
+ // all retries exhausted without success
+ return false;
+ }
+ }
+
+ // send webhooks for the post
+ await sendWebhooks(
+ postsResults[0].postId,
+ post.organizationId,
+ post.integration.id
+ );
+
+ // load internal plugs like repost by other users
+ const internalPlugsList = await internalPlugs(
+ post.integration,
+ JSON.parse(post.settings)
+ );
+
+ // load global plugs, like repost a post if it gets to a certain number of likes
+ const globalPlugsList = (await globalPlugs(post.integration)).reduce(
+ (all, current) => {
+ for (let i = 1; i <= current.totalRuns; i++) {
+ all.push({
+ ...current,
+ delay: current.delay * i,
+ });
+ }
+
+ return all;
+ },
+ []
+ );
+
+ // Check if the post is repeatable
+ const repeatPost = !post.intervalInDays
+ ? []
+ : [
+ {
+ type: 'repeat-post',
+ delay:
+ post.intervalInDays * 24 * 60 * 60 * 1000 -
+ (new Date().getTime() - startTime.getTime()),
+ },
+ ];
+
+ // Sort all the actions by delay, so we can process them in order
+ const list = sortBy(
+ [...internalPlugsList, ...globalPlugsList, ...repeatPost],
+ 'delay'
+ );
+
+ // process all the plugs in order, we are using while because in some cases we need to remove items from the list
+ while (list.length > 0) {
+ // get the next to process
+ const todo = list.shift();
+
+ // wait for the delay
+ await sleep(Math.max(0, Number(todo.delay ?? 0)));
+
+ // process internal plug
+ if (todo.type === 'internal-plug') {
+ for (const _ of iterate) {
+ try {
+ await processInternalPlug({ ...todo, post: postsResults[0].postId });
+ } catch (err) {
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ await getIntegrationById(organizationId, todo.integration),
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ break;
+ }
+
+ continue;
+ }
+ break;
+ }
+ }
+
+ // process global plug
+ if (todo.type === 'global') {
+ for (const _ of iterate) {
+ try {
+ const process = await processPlug({
+ ...todo,
+ postId: postsResults[0].postId,
+ });
+ if (process) {
+ const toDelete = list
+ .reduce((all, current, index) => {
+ if (current.plugId === todo.plugId) {
+ all.push(index);
+ }
+
+ return all;
+ }, [])
+ .reverse();
+
+ for (const index of toDelete) {
+ list.splice(index, 1);
+ }
+ }
+ } catch (err) {
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ post.integration,
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ break;
+ }
+
+ continue;
+ }
+
+ break;
+ }
+ }
+
+ // process repeat post in a new workflow, this is important so the other plugs can keep running
+ if (todo.type === 'repeat-post') {
+ await startChild(postWorkflowV103, {
+ parentClosePolicy: 'ABANDON',
+ args: [
+ {
+ taskQueue,
+ postId,
+ organizationId,
+ postNow: true,
+ },
+ ],
+ workflowId: `post_${post.id}_${makeId(10)}`,
+ typedSearchAttributes: new TypedSearchAttributes([
+ {
+ key: postIdSearchParam,
+ value: postId,
+ },
+ ]),
+ });
+ }
+ }
+}
diff --git a/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.4.ts b/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.4.ts
new file mode 100644
index 00000000..c09d15a8
--- /dev/null
+++ b/apps/orchestrator/src/workflows/post-workflows/post.workflow.v1.0.4.ts
@@ -0,0 +1,439 @@
+import { PostActivity } from '@gitroom/orchestrator/activities/post.activity';
+import {
+ ActivityFailure,
+ ApplicationFailure,
+ startChild,
+ proxyActivities,
+ sleep,
+ defineSignal,
+ setHandler,
+} from '@temporalio/workflow';
+import dayjs from 'dayjs';
+import { Integration } from '@prisma/client';
+import { capitalize, sortBy } from 'lodash';
+import { PostResponse } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
+import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
+import { TypedSearchAttributes } from '@temporalio/common';
+import { postId as postIdSearchParam } from '@gitroom/nestjs-libraries/temporal/temporal.search.attribute';
+
+const proxyTaskQueue = (taskQueue: string) => {
+ return proxyActivities({
+ startToCloseTimeout: '10 minute',
+ taskQueue,
+ retry: {
+ maximumAttempts: 3,
+ backoffCoefficient: 1,
+ initialInterval: '2 minutes',
+ },
+ });
+};
+
+const {
+ getPostsList,
+ inAppNotification,
+ changeState,
+ updatePost,
+ sendWebhooks,
+ isCommentable,
+} = proxyActivities({
+ startToCloseTimeout: '10 minute',
+ retry: {
+ maximumAttempts: 3,
+ backoffCoefficient: 1,
+ initialInterval: '2 minutes',
+ },
+});
+
+const poke = defineSignal('poke');
+
+const iterate = Array.from({ length: 5 });
+
+export async function postWorkflowV104({
+ taskQueue,
+ postId,
+ organizationId,
+ postNow = false,
+}: {
+ taskQueue: string;
+ postId: string;
+ organizationId: string;
+ postNow?: boolean;
+}) {
+ // Dynamic task queue, for concurrency
+ const {
+ postSocial,
+ postComment,
+ getIntegrationById,
+ refreshTokenWithCause,
+ internalPlugs,
+ globalPlugs,
+ processInternalPlug,
+ processPlug,
+ } = proxyTaskQueue(taskQueue);
+
+ let poked = false;
+ setHandler(poke, () => {
+ poked = true;
+ });
+
+ const startTime = new Date();
+ // get all the posts and comments to post
+ const postsListBefore = await getPostsList(organizationId, postId);
+ const [post] = postsListBefore;
+
+ // in case doesn't exists for some reason, fail it
+ if (!post) {
+ await changeState(
+ postId,
+ 'ERROR',
+ 'No Post'
+ );
+ return;
+ }
+
+ if (!postNow && post.state !== 'QUEUE') {
+ await changeState(
+ postsListBefore[0].id,
+ 'ERROR',
+ 'Already posted',
+ postsListBefore
+ );
+ return;
+ }
+
+ // if it's a repeatable post, we should ignore this.
+ if (!postNow) {
+ await sleep(
+ dayjs(post.publishDate).isBefore(dayjs())
+ ? 0
+ : dayjs(post.publishDate).diff(dayjs(), 'millisecond')
+ );
+ }
+
+ // if refresh is needed from last time, let's inform the user
+ if (post.integration?.refreshNeeded) {
+ await inAppNotification(
+ post.organizationId,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name}`,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name} because you need to reconnect it. Please enable it and try again.`,
+ true,
+ false,
+ 'info'
+ );
+
+ await changeState(
+ postsListBefore[0].id,
+ 'ERROR',
+ 'Refresh channel needed',
+ postsListBefore
+ );
+ return;
+ }
+
+ // if it's disabled, inform the user
+ if (post.integration?.disabled) {
+ await inAppNotification(
+ post.organizationId,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name}`,
+ `We couldn't post to ${post.integration?.providerIdentifier} for ${post?.integration?.name} because it's disabled. Please enable it and try again.`,
+ true,
+ false,
+ 'info'
+ );
+
+ await changeState(
+ postsListBefore[0].id,
+ 'ERROR',
+ 'Channel disabled',
+ postsListBefore
+ );
+ return;
+ }
+
+ // Do we need to post comment for this social?
+ const toComment: boolean =
+ postsListBefore.length === 1
+ ? false
+ : await isCommentable(post.integration);
+
+ const postsList = toComment ? postsListBefore : [postsListBefore[0]];
+
+ // list of all the saved results
+ const postsResults: PostResponse[] = [];
+
+ // iterate over the posts
+ for (let i = 0; i < postsList.length; i++) {
+ const before = postsResults.length;
+ // this is a small trick to repeat an action in case of token refresh
+ for (const _ of iterate) {
+ try {
+ // first post the main post
+ if (i === 0) {
+ postsResults.push(
+ ...(await postSocial(post.integration as Integration, [
+ postsList[i],
+ ]))
+ );
+
+ // then post the comments if any
+ } else {
+ if (postsList[i].delay) {
+ await sleep(60000 * Math.max(0, Number(postsList[i].delay ?? 0)));
+ }
+
+ postsResults.push(
+ ...(await postComment(
+ postsResults[0].postId,
+ postsResults.length === 1
+ ? undefined
+ : postsResults[i - 1].postId,
+ post.integration,
+ [postsList[i]]
+ ))
+ );
+ }
+
+ // mark post as successful
+ await updatePost(
+ postsList[i].id,
+ postsResults[i].postId,
+ postsResults[i].releaseURL
+ );
+
+ if (i === 0) {
+ // send notification on a sucessful post
+ await inAppNotification(
+ post.integration.organizationId,
+ `Your post has been published on ${capitalize(
+ post.integration.providerIdentifier
+ )}`,
+ `Your post has been published on ${capitalize(
+ post.integration.providerIdentifier
+ )} at ${postsResults[0].releaseURL}`,
+ true,
+ true
+ );
+ }
+
+ // break the current while to move to the next post
+ break;
+ } catch (err) {
+ // if token refresh is needed, do it and repeat
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ post.integration,
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ await changeState(postsList[0].id, 'ERROR', err, postsList);
+ return false;
+ }
+
+ post.integration.token = refresh.accessToken;
+ continue;
+ }
+
+ // for other errors, change state and inform the user if needed
+ await changeState(postsList[0].id, 'ERROR', err, postsList);
+
+ // specific case for bad body errors
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ await inAppNotification(
+ post.organizationId,
+ `Error posting${i === 0 ? ' ' : ' comments '}on ${
+ post.integration?.providerIdentifier
+ } for ${post?.integration?.name}`,
+ `An error occurred while posting${i === 0 ? ' ' : ' comments '}on ${
+ post.integration?.providerIdentifier
+ }${err?.cause?.message ? `: ${err?.cause?.message}` : ``}`,
+ true,
+ false,
+ 'fail'
+ );
+ return false;
+ }
+ }
+ }
+
+ if (postsResults.length === before) {
+ // all retries exhausted without success
+ return false;
+ }
+ }
+
+ // send webhooks for the post
+ await sendWebhooks(
+ postsResults[0].postId,
+ post.organizationId,
+ post.integration.id
+ );
+
+ // load internal plugs like repost by other users
+ const internalPlugsList = await internalPlugs(
+ post.integration,
+ JSON.parse(post.settings)
+ );
+
+ // load global plugs, like repost a post if it gets to a certain number of likes
+ const globalPlugsList = (await globalPlugs(post.integration)).reduce(
+ (all, current) => {
+ for (let i = 1; i <= current.totalRuns; i++) {
+ all.push({
+ ...current,
+ delay: current.delay * i,
+ });
+ }
+
+ return all;
+ },
+ []
+ );
+
+ // Check if the post is repeatable
+ const repeatPost = !post.intervalInDays
+ ? []
+ : [
+ {
+ type: 'repeat-post',
+ delay:
+ post.intervalInDays * 24 * 60 * 60 * 1000 -
+ (new Date().getTime() - startTime.getTime()),
+ },
+ ];
+
+ // Sort all the actions by delay, so we can process them in order
+ const list = sortBy(
+ [...internalPlugsList, ...globalPlugsList, ...repeatPost],
+ 'delay'
+ );
+
+ // process all the plugs in order, we are using while because in some cases we need to remove items from the list
+ while (list.length > 0) {
+ // get the next to process
+ const todo = list.shift();
+
+ // wait for the delay
+ await sleep(Math.max(0, Number(todo.delay ?? 0)));
+
+ // process internal plug
+ if (todo.type === 'internal-plug') {
+ for (const _ of iterate) {
+ try {
+ await processInternalPlug({ ...todo, post: postsResults[0].postId });
+ } catch (err) {
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ await getIntegrationById(organizationId, todo.integration),
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ break;
+ }
+
+ continue;
+ }
+ break;
+ }
+ }
+
+ // process global plug
+ if (todo.type === 'global') {
+ for (const _ of iterate) {
+ try {
+ const process = await processPlug({
+ ...todo,
+ postId: postsResults[0].postId,
+ });
+ if (process) {
+ const toDelete = list
+ .reduce((all, current, index) => {
+ if (current.plugId === todo.plugId) {
+ all.push(index);
+ }
+
+ return all;
+ }, [])
+ .reverse();
+
+ for (const index of toDelete) {
+ list.splice(index, 1);
+ }
+ }
+ } catch (err) {
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'refresh_token'
+ ) {
+ const refresh = await refreshTokenWithCause(
+ post.integration,
+ err?.cause?.message || ''
+ );
+ if (!refresh || !refresh.accessToken) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (
+ err instanceof ActivityFailure &&
+ err.cause instanceof ApplicationFailure &&
+ err.cause.type === 'bad_body'
+ ) {
+ break;
+ }
+
+ continue;
+ }
+
+ break;
+ }
+ }
+
+ // process repeat post in a new workflow, this is important so the other plugs can keep running
+ if (todo.type === 'repeat-post') {
+ await startChild(postWorkflowV104, {
+ parentClosePolicy: 'ABANDON',
+ args: [
+ {
+ taskQueue,
+ postId,
+ organizationId,
+ postNow: true,
+ },
+ ],
+ workflowId: `post_${post.id}_${makeId(10)}`,
+ typedSearchAttributes: new TypedSearchAttributes([
+ {
+ key: postIdSearchParam,
+ value: postId,
+ },
+ ]),
+ });
+ }
+ }
+}
diff --git a/docker-compose.yaml b/docker-compose.yaml
index 7bf244d7..d65f45d7 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -31,6 +31,7 @@ services:
# CLOUDFLARE_REGION: 'auto'
# === Social Media API Settings
+ X_URL: ''
X_API_KEY: ''
X_API_SECRET: ''
LINKEDIN_CLIENT_ID: ''
diff --git a/libraries/helpers/src/utils/sanitize.post.content.ts b/libraries/helpers/src/utils/sanitize.post.content.ts
new file mode 100644
index 00000000..9f2d9861
--- /dev/null
+++ b/libraries/helpers/src/utils/sanitize.post.content.ts
@@ -0,0 +1,36 @@
+import DOMPurify from 'isomorphic-dompurify';
+
+const ALLOWED_TAGS = [
+ 'p',
+ 'br',
+ 'strong',
+ 'u',
+ 'a',
+ 'ul',
+ 'li',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'span',
+];
+
+const ALLOWED_ATTR = [
+ 'href',
+ 'target',
+ 'rel',
+ 'class',
+ 'data-mention-id',
+ 'data-mention-label',
+];
+
+export const sanitizePostContent = (value: unknown): string => {
+ if (typeof value !== 'string' || !value) {
+ return '';
+ }
+
+ return DOMPurify.sanitize(value, {
+ ALLOWED_TAGS,
+ ALLOWED_ATTR,
+ ALLOWED_URI_REGEXP: /^(?:https?:|mailto:|\/|#)/i,
+ });
+};
diff --git a/libraries/nestjs-libraries/src/agent/agent.graph.service.ts b/libraries/nestjs-libraries/src/agent/agent.graph.service.ts
index d4697e37..8a149fea 100644
--- a/libraries/nestjs-libraries/src/agent/agent.graph.service.ts
+++ b/libraries/nestjs-libraries/src/agent/agent.graph.service.ts
@@ -6,7 +6,7 @@ import {
} from '@langchain/core/messages';
import { END, START, StateGraph } from '@langchain/langgraph';
import { ChatOpenAI, DallEAPIWrapper } from '@langchain/openai';
-import { TavilySearchResults } from '@langchain/community/tools/tavily_search';
+import { TavilySearch } from '@langchain/tavily';
import { ToolNode } from '@langchain/langgraph/prebuilt';
import { ChatPromptTemplate } from '@langchain/core/prompts';
import dayjs from 'dayjs';
@@ -18,7 +18,7 @@ import { GeneratorDto } from '@gitroom/nestjs-libraries/dtos/generator/generator
const tools = !process.env.TAVILY_API_KEY
? []
- : [new TavilySearchResults({ maxResults: 3 })];
+ : [new TavilySearch({ maxResults: 3 })];
const toolNode = new ToolNode(tools);
const model = new ChatOpenAI({
diff --git a/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts b/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts
index daf9b315..42de6075 100644
--- a/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts
+++ b/libraries/nestjs-libraries/src/chat/agent.tool.interface.ts
@@ -1,16 +1,6 @@
-import type { ZodLikeSchema } from '@mastra/core/dist/types/zod-compat';
-import type {
- ToolExecutionContext,
-} from '@mastra/core/dist/tools/types';
-import { Tool } from '@mastra/core/dist/tools/tool';
+import type { ToolAction } from '@mastra/core/tools';
-export type ToolReturn = Tool<
- ZodLikeSchema,
- ZodLikeSchema,
- ZodLikeSchema,
- ZodLikeSchema,
- ToolExecutionContext
->;
+export type ToolReturn = ToolAction;
export interface AgentToolInterface {
name: string;
diff --git a/libraries/nestjs-libraries/src/chat/auth.context.ts b/libraries/nestjs-libraries/src/chat/auth.context.ts
index 989a2a53..8c709c87 100644
--- a/libraries/nestjs-libraries/src/chat/auth.context.ts
+++ b/libraries/nestjs-libraries/src/chat/auth.context.ts
@@ -1,20 +1,16 @@
-import { ToolAction } from '@mastra/core/dist/tools/types';
import { getAuth } from '@gitroom/nestjs-libraries/chat/async.storage';
-export const checkAuth: ToolAction['execute'] = async (
- { runtimeContext },
- options
+export const checkAuth = (
+ inputData: any,
+ context: any
) => {
const auth = getAuth();
- // @ts-ignore
- if (options?.extra?.authInfo || auth) {
- runtimeContext.set(
- // @ts-ignore
+ const authInfo = context?.mcp?.extra?.authInfo || auth;
+ if (authInfo && context?.requestContext) {
+ (context.requestContext as any).set(
'organization',
- // @ts-ignore
- JSON.stringify(options?.extra?.authInfo || auth)
+ JSON.stringify(authInfo)
);
- // @ts-ignore
- runtimeContext.set('ui', 'false');
+ (context.requestContext as any).set('ui', 'false');
}
};
diff --git a/libraries/nestjs-libraries/src/chat/load.tools.service.ts b/libraries/nestjs-libraries/src/chat/load.tools.service.ts
index d5908905..10118d94 100644
--- a/libraries/nestjs-libraries/src/chat/load.tools.service.ts
+++ b/libraries/nestjs-libraries/src/chat/load.tools.service.ts
@@ -43,10 +43,11 @@ export class LoadToolsService {
async agent() {
const tools = await this.loadTools();
return new Agent({
+ id: 'postiz',
name: 'postiz',
description: 'Agent that helps manage and schedule social media posts for users',
- instructions: ({ runtimeContext }) => {
- const ui: string = runtimeContext.get('ui' as never);
+ instructions: ({ requestContext }) => {
+ const ui: string = requestContext.get('ui' as never);
return `
Global information:
- Date (UTC): ${dayjs().format('YYYY-MM-DD HH:mm:ss')}
@@ -90,9 +91,7 @@ export class LoadToolsService {
memory: new Memory({
storage: pStore,
options: {
- threads: {
- generateTitle: true,
- },
+ generateTitle: true,
workingMemory: {
enabled: true,
schema: AgentState,
diff --git a/libraries/nestjs-libraries/src/chat/mastra.store.ts b/libraries/nestjs-libraries/src/chat/mastra.store.ts
index d5601601..4dc00896 100644
--- a/libraries/nestjs-libraries/src/chat/mastra.store.ts
+++ b/libraries/nestjs-libraries/src/chat/mastra.store.ts
@@ -1,5 +1,6 @@
-import { PostgresStore, PgVector } from '@mastra/pg';
+import { PostgresStore } from '@mastra/pg';
export const pStore = new PostgresStore({
- connectionString: process.env.DATABASE_URL,
+ id: 'postiz-store',
+ connectionString: process.env.DATABASE_URL!,
});
diff --git a/libraries/nestjs-libraries/src/chat/oauth-middleware.ts b/libraries/nestjs-libraries/src/chat/oauth-middleware.ts
new file mode 100644
index 00000000..7262f037
--- /dev/null
+++ b/libraries/nestjs-libraries/src/chat/oauth-middleware.ts
@@ -0,0 +1,251 @@
+/**
+ * OAuth Middleware for MCP Server
+ *
+ * Implements OAuth 2.0 Protected Resource support per RFC 9728 for MCP servers.
+ * Based on Mastra's implementation at commit 27c37ca.
+ *
+ * @see https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
+ * @see https://www.rfc-editor.org/rfc/rfc9728.html
+ */
+
+import type * as http from 'node:http';
+
+import type { MCPServerOAuthConfig, TokenValidationResult } from './oauth-types';
+import {
+ generateProtectedResourceMetadata,
+ generateWWWAuthenticateHeader,
+ extractBearerToken,
+} from './oauth-types';
+
+interface OAuthMiddlewareLogger {
+ debug?: (message: string, ...args: unknown[]) => void;
+}
+
+export interface OAuthMiddlewareOptions {
+ oauth: MCPServerOAuthConfig;
+ mcpPath?: string;
+ logger?: OAuthMiddlewareLogger;
+}
+
+export interface OAuthMiddlewareResult {
+ proceed: boolean;
+ handled: boolean;
+ tokenValidation?: TokenValidationResult;
+}
+
+export function createOAuthMiddleware(options: OAuthMiddlewareOptions) {
+ const { oauth, mcpPath = '/mcp', logger } = options;
+
+ const protectedResourceMetadata = generateProtectedResourceMetadata(oauth);
+ const wellKnownPath = '/.well-known/oauth-protected-resource';
+ const resourceMetadataUrl = new URL(wellKnownPath, oauth.resource).toString();
+
+ return async function oauthMiddleware(
+ req: http.IncomingMessage,
+ res: http.ServerResponse,
+ url: URL,
+ ): Promise {
+ logger?.debug?.(`OAuth middleware: ${req.method} ${url.pathname}`);
+
+ // Handle Protected Resource Metadata endpoint (RFC 9728)
+ if (url.pathname === wellKnownPath && req.method === 'GET') {
+ logger?.debug?.('OAuth middleware: Serving Protected Resource Metadata');
+ res.writeHead(200, {
+ 'Content-Type': 'application/json',
+ 'Cache-Control': 'max-age=3600',
+ 'Access-Control-Allow-Origin': '*',
+ });
+ res.end(JSON.stringify(protectedResourceMetadata));
+ return { proceed: false, handled: true };
+ }
+
+ // Handle CORS preflight for metadata endpoint
+ if (url.pathname === wellKnownPath && req.method === 'OPTIONS') {
+ res.writeHead(204, {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type',
+ 'Access-Control-Max-Age': '86400',
+ });
+ res.end();
+ return { proceed: false, handled: true };
+ }
+
+ // Only protect the MCP endpoint
+ if (!url.pathname.startsWith(mcpPath)) {
+ return { proceed: true, handled: false };
+ }
+
+ // Extract and validate bearer token
+ const authHeader = req.headers['authorization'];
+ const token = extractBearerToken(authHeader as string | undefined);
+
+ if (!token) {
+ logger?.debug?.('OAuth middleware: No bearer token provided');
+ res.writeHead(401, {
+ 'Content-Type': 'application/json',
+ 'WWW-Authenticate': generateWWWAuthenticateHeader({ resourceMetadataUrl }),
+ });
+ res.end(
+ JSON.stringify({
+ error: 'unauthorized',
+ error_description: 'Bearer token required',
+ }),
+ );
+ return { proceed: false, handled: true };
+ }
+
+ // Validate the token
+ if (oauth.validateToken) {
+ logger?.debug?.('OAuth middleware: Validating token');
+ const validationResult = await oauth.validateToken(token, oauth.resource);
+
+ if (!validationResult.valid) {
+ logger?.debug?.(`OAuth middleware: Token validation failed: ${validationResult.error}`);
+ res.writeHead(401, {
+ 'Content-Type': 'application/json',
+ 'WWW-Authenticate': generateWWWAuthenticateHeader({
+ resourceMetadataUrl,
+ additionalParams: {
+ error: validationResult.error || 'invalid_token',
+ ...(validationResult.errorDescription && {
+ error_description: validationResult.errorDescription,
+ }),
+ },
+ }),
+ });
+ res.end(
+ JSON.stringify({
+ error: validationResult.error || 'invalid_token',
+ error_description: validationResult.errorDescription || 'Token validation failed',
+ }),
+ );
+ return { proceed: false, handled: true, tokenValidation: validationResult };
+ }
+
+ logger?.debug?.('OAuth middleware: Token validated successfully');
+ return { proceed: true, handled: false, tokenValidation: validationResult };
+ }
+
+ // If no validateToken function provided, accept the token
+ logger?.debug?.('OAuth middleware: No token validation configured, accepting token');
+ return {
+ proceed: true,
+ handled: false,
+ tokenValidation: { valid: true },
+ };
+ };
+}
+
+export function createStaticTokenValidator(validTokens: string[]): MCPServerOAuthConfig['validateToken'] {
+ const tokenSet = new Set(validTokens);
+ return async (token: string): Promise => {
+ if (tokenSet.has(token)) {
+ return { valid: true, scopes: ['mcp:read', 'mcp:write'] };
+ }
+ return {
+ valid: false,
+ error: 'invalid_token',
+ errorDescription: 'Token not recognized',
+ };
+ };
+}
+
+interface IntrospectionResponse {
+ active: boolean;
+ scope?: string;
+ client_id?: string;
+ username?: string;
+ token_type?: string;
+ exp?: number;
+ iat?: number;
+ nbf?: number;
+ sub?: string;
+ aud?: string | string[];
+ iss?: string;
+ jti?: string;
+ [key: string]: unknown;
+}
+
+export function createIntrospectionValidator(
+ introspectionEndpoint: string,
+ clientCredentials?: { clientId: string; clientSecret: string },
+): MCPServerOAuthConfig['validateToken'] {
+ return async (token: string, resource: string): Promise => {
+ try {
+ const headers: Record = {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ };
+
+ if (clientCredentials) {
+ if (clientCredentials.clientId.includes(':')) {
+ return {
+ valid: false,
+ error: 'invalid_request',
+ errorDescription: 'clientId cannot contain a colon character per RFC 7617',
+ };
+ }
+ const credentials = Buffer.from(`${clientCredentials.clientId}:${clientCredentials.clientSecret}`).toString(
+ 'base64',
+ );
+ headers['Authorization'] = `Basic ${credentials}`;
+ }
+
+ const response = await fetch(introspectionEndpoint, {
+ method: 'POST',
+ headers,
+ body: new URLSearchParams({
+ token,
+ token_type_hint: 'access_token',
+ }),
+ });
+
+ if (!response.ok) {
+ return {
+ valid: false,
+ error: 'server_error',
+ errorDescription: `Introspection failed: ${response.status}`,
+ };
+ }
+
+ const data = (await response.json()) as IntrospectionResponse;
+
+ if (!data.active) {
+ return {
+ valid: false,
+ error: 'invalid_token',
+ errorDescription: 'Token is not active',
+ };
+ }
+
+ if (data.aud) {
+ const audiences = Array.isArray(data.aud) ? data.aud : [data.aud];
+ if (!audiences.includes(resource)) {
+ return {
+ valid: false,
+ error: 'invalid_token',
+ errorDescription: 'Token audience does not match this resource',
+ };
+ }
+ }
+
+ return {
+ valid: true,
+ scopes:
+ data.scope
+ ?.trim()
+ .split(' ')
+ .filter(s => s !== '') || [],
+ subject: data.sub,
+ expiresAt: data.exp,
+ claims: data as Record,
+ };
+ } catch (error) {
+ return {
+ valid: false,
+ error: 'server_error',
+ errorDescription: error instanceof Error ? error.message : 'Introspection failed',
+ };
+ }
+ };
+}
\ No newline at end of file
diff --git a/libraries/nestjs-libraries/src/chat/oauth-types.ts b/libraries/nestjs-libraries/src/chat/oauth-types.ts
new file mode 100644
index 00000000..67b4ec44
--- /dev/null
+++ b/libraries/nestjs-libraries/src/chat/oauth-types.ts
@@ -0,0 +1,104 @@
+/**
+ * OAuth Types for MCP Authentication
+ *
+ * Standalone types and helpers for OAuth-protected MCP servers.
+ * Based on Mastra's implementation at commit 27c37ca.
+ *
+ * @see https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
+ * @see https://www.rfc-editor.org/rfc/rfc9728.html
+ */
+
+import type * as http from 'node:http';
+
+/**
+ * Configuration for OAuth-protected MCP server.
+ */
+export interface MCPServerOAuthConfig {
+ resource: string;
+ authorizationServers: string[];
+ scopesSupported?: string[];
+ resourceName?: string;
+ resourceDocumentation?: string;
+ validateToken?: (token: string, resource: string) => Promise;
+}
+
+/**
+ * Result of token validation.
+ */
+export interface TokenValidationResult {
+ valid: boolean;
+ error?: string;
+ errorDescription?: string;
+ scopes?: string[];
+ subject?: string;
+ expiresAt?: number;
+ claims?: Record;
+}
+
+/**
+ * Options for OAuth-related HTTP responses.
+ */
+export interface OAuthResponseOptions {
+ resourceMetadataUrl?: string;
+ additionalParams?: Record;
+}
+
+/**
+ * Protected Resource Metadata per RFC 9728.
+ */
+export interface OAuthProtectedResourceMetadata {
+ resource: string;
+ authorization_servers: string[];
+ scopes_supported?: string[];
+ bearer_methods_supported?: string[];
+ resource_name?: string;
+ resource_documentation?: string;
+}
+
+function escapeHeaderValue(value: string): string {
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
+}
+
+export function generateWWWAuthenticateHeader(options: OAuthResponseOptions = {}): string {
+ const params: string[] = [];
+
+ if (options.resourceMetadataUrl) {
+ params.push(`resource_metadata="${escapeHeaderValue(options.resourceMetadataUrl)}"`);
+ }
+
+ if (options.additionalParams) {
+ for (const [key, value] of Object.entries(options.additionalParams)) {
+ params.push(`${key}="${escapeHeaderValue(value)}"`);
+ }
+ }
+
+ if (params.length === 0) {
+ return 'Bearer';
+ }
+
+ return `Bearer ${params.join(', ')}`;
+}
+
+export function generateProtectedResourceMetadata(config: MCPServerOAuthConfig): OAuthProtectedResourceMetadata {
+ return {
+ resource: config.resource,
+ authorization_servers: config.authorizationServers,
+ scopes_supported: config.scopesSupported ?? ['mcp:read', 'mcp:write'],
+ bearer_methods_supported: ['header'],
+ ...(config.resourceName && { resource_name: config.resourceName }),
+ ...(config.resourceDocumentation && {
+ resource_documentation: config.resourceDocumentation,
+ }),
+ };
+}
+
+export function extractBearerToken(authHeader: string | null | undefined): string | undefined {
+ if (!authHeader) return undefined;
+
+ const prefix = 'bearer ';
+ if (authHeader.length <= prefix.length) return undefined;
+ if (authHeader.slice(0, prefix.length).toLowerCase() !== prefix) return undefined;
+
+ const token = authHeader.slice(prefix.length).trim();
+ return token || undefined;
+}
\ No newline at end of file
diff --git a/libraries/nestjs-libraries/src/chat/start.mcp.ts b/libraries/nestjs-libraries/src/chat/start.mcp.ts
index cc2dd5d7..31231715 100644
--- a/libraries/nestjs-libraries/src/chat/start.mcp.ts
+++ b/libraries/nestjs-libraries/src/chat/start.mcp.ts
@@ -6,6 +6,18 @@ import { randomUUID } from 'crypto';
import { OrganizationService } from '@gitroom/nestjs-libraries/database/prisma/organizations/organization.service';
import { OAuthService } from '@gitroom/nestjs-libraries/database/prisma/oauth/oauth.service';
import { runWithContext } from './async.storage';
+import { createOAuthMiddleware } from './oauth-middleware';
+const fixAcceptHeader = (req: Request) => {
+ const value = 'application/json, text/event-stream';
+ req.headers.accept = value;
+ const idx = req.rawHeaders.findIndex((h) => h.toLowerCase() === 'accept');
+ if (idx !== -1) {
+ req.rawHeaders[idx + 1] = value;
+ } else {
+ req.rawHeaders.push('Accept', value);
+ }
+};
+
export const startMcp = async (app: INestApplication) => {
const mastraService = app.get(MastraService, { strict: false });
const organizationService = app.get(OrganizationService, { strict: false });
@@ -22,7 +34,7 @@ export const startMcp = async (app: INestApplication) => {
const mastra = await mastraService.mastra();
const agent = mastra.getAgent('postiz');
- const tools = await agent.getTools();
+ const tools = await agent.listTools();
const serverConfig = {
name: 'Postiz MCP',
@@ -33,6 +45,91 @@ export const startMcp = async (app: INestApplication) => {
const server = new MCPServer(serverConfig);
+ const oauthMiddleware = createOAuthMiddleware({
+ oauth: {
+ resource: new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL!).toString(),
+ authorizationServers: [process.env.NEXT_PUBLIC_BACKEND_URL!],
+ validateToken: async (token: string) => {
+ const org = await resolveAuth(token);
+ if (!org) {
+ return { valid: false, error: 'invalid_token', errorDescription: 'Invalid API Key or OAuth token' };
+ }
+ return { valid: true, subject: token };
+ },
+ },
+ mcpPath: '/mcp-oauth',
+ });
+
+ if (process.env.OPENAI_APP_CHALLANGE) {
+ app.use('/.well-known/openai-apps-challenge', (req: Request, res: Response) => {
+ res.setHeader('Content-Type', 'text/plain');
+ res.send(process.env.OPENAI_APP_CHALLANGE);
+ });
+ }
+
+ app.use('/.well-known/oauth-protected-resource', async (req: Request, res: Response) => {
+ const url = new URL('/.well-known/oauth-protected-resource', process.env.NEXT_PUBLIC_BACKEND_URL);
+ await oauthMiddleware(req, res, url);
+ });
+
+ app.use('/.well-known/oauth-authorization-server', async (req: Request, res: Response) => {
+ res.setHeader('Access-Control-Allow-Origin', '*');
+ if (req.method === 'OPTIONS') {
+ res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
+ res.writeHead(204);
+ res.end();
+ return;
+ }
+ res.setHeader('Content-Type', 'application/json');
+ res.setHeader('Cache-Control', 'max-age=3600');
+ res.json({
+ issuer: process.env.NEXT_PUBLIC_BACKEND_URL,
+ authorization_endpoint: `${process.env.FRONTEND_URL}/oauth/authorize`,
+ token_endpoint: `${process.env.NEXT_PUBLIC_OVERRIDE_BACKEND_URL || process.env.NEXT_PUBLIC_BACKEND_URL}/oauth/token`,
+ response_types_supported: ['code'],
+ grant_types_supported: ['authorization_code'],
+ code_challenge_methods_supported: ['S256'],
+ scopes_supported: ['mcp:read', 'mcp:write'],
+ });
+ });
+
+ app.use('/mcp-oauth', async (req: Request, res: Response, next: () => void) => {
+ // Skip if this is the /mcp/:id route
+ if (req.path !== '/' && req.path !== '') {
+ next();
+ return;
+ }
+
+ const url = new URL('/mcp-oauth', process.env.NEXT_PUBLIC_BACKEND_URL);
+
+ const result = await oauthMiddleware(req, res, url);
+ if (!result.proceed) return;
+
+ const token = result.tokenValidation?.subject;
+ const auth = await resolveAuth(token!);
+ if (!auth) {
+ res.status(401).json({ error: 'invalid_token', error_description: 'Could not resolve organization' });
+ return;
+ }
+
+ fixAcceptHeader(req);
+ await runWithContext({ requestId: token!, auth }, async () => {
+ await server.startHTTP({
+ url: url,
+ httpPath: url.pathname,
+ options: {
+ sessionIdGenerator: () => {
+ return randomUUID();
+ },
+ enableJsonResponse: true,
+ },
+ req,
+ res,
+ });
+ });
+ });
+
app.use('/mcp', async (req: Request, res: Response, next: () => void) => {
// Skip if this is the /mcp/:id route
if (req.path !== '/' && req.path !== '') {
@@ -67,6 +164,7 @@ export const startMcp = async (app: INestApplication) => {
const url = new URL('/mcp', process.env.NEXT_PUBLIC_BACKEND_URL);
+ fixAcceptHeader(req);
// @ts-ignore
await runWithContext({ requestId: token, auth: req.auth }, async () => {
await server.startHTTP({
@@ -76,6 +174,7 @@ export const startMcp = async (app: INestApplication) => {
sessionIdGenerator: () => {
return randomUUID();
},
+ enableJsonResponse: true,
},
req,
res,
@@ -108,6 +207,7 @@ export const startMcp = async (app: INestApplication) => {
process.env.NEXT_PUBLIC_BACKEND_URL
);
+ fixAcceptHeader(req);
await runWithContext(
// @ts-ignore
{ requestId: req.params.id, auth: req.auth },
@@ -119,6 +219,7 @@ export const startMcp = async (app: INestApplication) => {
sessionIdGenerator: () => {
return randomUUID();
},
+ enableJsonResponse: true,
},
req,
res,
diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts
index f475f189..0dfb63ed 100644
--- a/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/generate.image.tool.ts
@@ -20,6 +20,15 @@ export class GenerateImageTool implements AgentToolInterface {
in case the user specified a platform that requires attachment and attachment was not provided,
ask if they want to generate a picture of a video.
`,
+ mcp: {
+ annotations: {
+ title: 'Generate Image',
+ readOnlyHint: false,
+ destructiveHint: false,
+ idempotentHint: false,
+ openWorldHint: true,
+ },
+ },
inputSchema: z.object({
prompt: z.string(),
}),
@@ -27,13 +36,11 @@ export class GenerateImageTool implements AgentToolInterface {
id: z.string(),
path: z.string(),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
- // @ts-ignore
- const org = JSON.parse(runtimeContext.get('organization') as string);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
+ const org = JSON.parse((context?.requestContext as any)?.get('organization') as string);
const image = await this._mediaService.generateImage(
- context.prompt,
+ inputData.prompt,
org
);
diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts
index 453b7660..80031473 100644
--- a/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/generate.video.options.tool.ts
@@ -1,6 +1,5 @@
import {
AgentToolInterface,
- ToolReturn,
} from '@gitroom/nestjs-libraries/chat/agent.tool.interface';
import { createTool } from '@mastra/core/tools';
import { Injectable } from '@nestjs/common';
@@ -18,6 +17,16 @@ export class GenerateVideoOptionsTool implements AgentToolInterface {
return createTool({
id: 'generateVideoOptions',
description: `All the options to generate videos, some tools might require another call to generateVideoFunction`,
+ inputSchema: z.object({}),
+ mcp: {
+ annotations: {
+ title: 'List Video Generation Options',
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ },
outputSchema: z.object({
video: z.array(
z.object({
@@ -33,9 +42,8 @@ export class GenerateVideoOptionsTool implements AgentToolInterface {
})
),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
const videos = this._videoManagerService.getAllVideos();
console.log(
JSON.stringify(
diff --git a/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts b/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts
index c8d4eb35..f5d19f11 100644
--- a/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/generate.video.tool.ts
@@ -25,6 +25,15 @@ export class GenerateVideoTool implements AgentToolInterface {
run() {
return createTool({
id: 'generateVideoTool',
+ mcp: {
+ annotations: {
+ title: 'Generate Video',
+ readOnlyHint: false,
+ destructiveHint: false,
+ idempotentHint: false,
+ openWorldHint: true,
+ },
+ },
description: `Generate video to use in a post,
in case the user specified a platform that requires attachment and attachment was not provided,
ask if they want to generate a picture of a video.
@@ -48,20 +57,18 @@ export class GenerateVideoTool implements AgentToolInterface {
outputSchema: z.object({
url: z.string(),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
- // @ts-ignore
- const org = JSON.parse(runtimeContext.get('organization') as string);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
+ const org = JSON.parse((context?.requestContext as any)?.get('organization') as string);
const value = await this._mediaService.generateVideo(org, {
- type: context.identifier,
- output: context.output,
- customParams: context.customParams.reduce(
- (all, current) => ({
+ type: inputData.identifier,
+ output: inputData.output,
+ customParams: inputData.customParams.reduce(
+ (all: Record, current: { key: string; value: any }) => ({
...all,
[current.key]: current.value,
}),
- {}
+ {} as Record
),
});
diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts
index 98d54ce2..c457b00f 100644
--- a/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/integration.list.tool.ts
@@ -1,13 +1,11 @@
import {
AgentToolInterface,
- ToolReturn,
} from '@gitroom/nestjs-libraries/chat/agent.tool.interface';
import { createTool } from '@mastra/core/tools';
import { Injectable } from '@nestjs/common';
import { IntegrationService } from '@gitroom/nestjs-libraries/database/prisma/integrations/integration.service';
import z from 'zod';
import { checkAuth } from '@gitroom/nestjs-libraries/chat/auth.context';
-import { getAuth } from '@gitroom/nestjs-libraries/chat/async.storage';
@Injectable()
export class IntegrationListTool implements AgentToolInterface {
@@ -18,6 +16,16 @@ export class IntegrationListTool implements AgentToolInterface {
return createTool({
id: 'integrationList',
description: `This tool list available integrations to schedule posts to`,
+ inputSchema: z.object({}),
+ mcp: {
+ annotations: {
+ title: 'List Integrations',
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ },
outputSchema: z.object({
output: z.array(
z.object({
@@ -28,14 +36,10 @@ export class IntegrationListTool implements AgentToolInterface {
})
),
}),
- execute: async (args, options) => {
- console.log(getAuth());
- console.log(options);
- const { context, runtimeContext } = args;
- checkAuth(args, options);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
const organizationId = JSON.parse(
- // @ts-ignore
- runtimeContext.get('organization') as string
+ (context?.requestContext as any)?.get('organization') as string
).id;
return {
diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts b/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts
index 078bea72..dc3c3f52 100644
--- a/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/integration.schedule.post.ts
@@ -31,6 +31,15 @@ export class IntegrationSchedulePostTool implements AgentToolInterface {
run() {
return createTool({
id: 'schedulePostTool',
+ mcp: {
+ annotations: {
+ title: 'Schedule Social Media Post',
+ readOnlyHint: false,
+ destructiveHint: false,
+ idempotentHint: false,
+ openWorldHint: true,
+ },
+ },
description: `
This tool allows you to schedule a post to a social media platform, based on integrationSchema tool.
So for example:
@@ -114,17 +123,15 @@ If the tools return errors, you would need to rerun it with the right parameters
)
.or(z.object({ errors: z.string() })),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
const organizationId = JSON.parse(
- // @ts-ignore
- runtimeContext.get('organization') as string
+ (context?.requestContext as any)?.get('organization') as string
).id;
const finalOutput = [];
const integrations = {} as Record;
- for (const platform of context.socialPost) {
+ for (const platform of inputData.socialPost) {
integrations[platform.integrationId] =
await this._integrationService.getIntegrationById(
organizationId,
@@ -142,7 +149,7 @@ If the tools return errors, you would need to rerun it with the right parameters
const obj = Object.assign(
newDTO,
platform.settings.reduce(
- (acc, s) => ({
+ (acc: AllProvidersSettings, s: { key: string; value: any }) => ({
...acc,
[s.key]: s.value,
}),
@@ -180,7 +187,7 @@ If the tools return errors, you would need to rerun it with the right parameters
}
}
- for (const post of context.socialPost) {
+ for (const post of inputData.socialPost) {
const integration = integrations[post.integrationId];
if (!integration) {
@@ -197,7 +204,7 @@ If the tools return errors, you would need to rerun it with the right parameters
integration,
group: makeId(10),
settings: post.settings.reduce(
- (acc, s) => ({
+ (acc: AllProvidersSettings, s: { key: string; value: any }) => ({
...acc,
[s.key]: s.value,
}),
@@ -205,11 +212,11 @@ If the tools return errors, you would need to rerun it with the right parameters
__type: integration.providerIdentifier,
} as AllProvidersSettings
),
- value: post.postsAndComments.map((p) => ({
+ value: post.postsAndComments.map((p: any) => ({
content: p.content,
id: makeId(10),
delay: 0,
- image: p.attachments.map((p) => ({
+ image: p.attachments.map((p: any) => ({
id: makeId(10),
path: p,
})),
diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts
index b03e7c5b..0415f3b0 100644
--- a/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/integration.trigger.tool.ts
@@ -26,6 +26,15 @@ export class IntegrationTriggerTool implements AgentToolInterface {
id: 'triggerTool',
description: `After using the integrationSchema, we sometimes miss details we can\'t ask from the user, like ids.
Sometimes this tool requires to user prompt for some settings, like a word to search for. methodName is required [input:callable-tools]`,
+ mcp: {
+ annotations: {
+ title: 'Trigger Integration Tool',
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: false,
+ openWorldHint: true,
+ },
+ },
inputSchema: z.object({
integrationId: z.string().describe('The id of the integration'),
methodName: z
@@ -43,19 +52,17 @@ export class IntegrationTriggerTool implements AgentToolInterface {
outputSchema: z.object({
output: z.array(z.record(z.string(), z.any())),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
- console.log('triggerTool', context);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
+ console.log('triggerTool', inputData);
const organizationId = JSON.parse(
- // @ts-ignore
- runtimeContext.get('organization') as string
+ (context?.requestContext as any)?.get('organization') as string
).id;
const getIntegration =
await this._integrationService.getIntegrationById(
organizationId,
- context.integrationId
+ inputData.integrationId
);
if (!getIntegration) {
@@ -78,10 +85,10 @@ export class IntegrationTriggerTool implements AgentToolInterface {
if (
// @ts-ignore
!tools[integrationProvider.identifier].some(
- (p) => p.methodName === context.methodName
+ (p) => p.methodName === inputData.methodName
) ||
// @ts-ignore
- !integrationProvider[context.methodName]
+ !integrationProvider[inputData.methodName]
) {
return { output: 'tool not found' };
}
@@ -89,14 +96,14 @@ export class IntegrationTriggerTool implements AgentToolInterface {
while (true) {
try {
// @ts-ignore
- const load = await integrationProvider[context.methodName](
+ const load = await integrationProvider[inputData.methodName](
getIntegration.token,
- context.dataSchema.reduce(
- (all, current) => ({
+ inputData.dataSchema.reduce(
+ (all: Record, current: { key: string; value: string }) => ({
...all,
[current.key]: current.value,
}),
- {}
+ {} as Record
),
getIntegration.internalId,
getIntegration
diff --git a/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts b/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts
index 1e1e28a0..14bd16dd 100644
--- a/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/integration.validation.tool.ts
@@ -22,6 +22,15 @@ export class IntegrationValidationTool implements AgentToolInterface {
Sometimes we might get a schema back the requires some id, for that, you can get information from 'tools'
And use the triggerTool function.
`,
+ mcp: {
+ annotations: {
+ title: 'Get Integration Schema',
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ },
inputSchema: z.object({
isPremium: z
.boolean()
@@ -72,11 +81,10 @@ export class IntegrationValidationTool implements AgentToolInterface {
),
}),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
const integration = socialIntegrationList.find(
- (p) => p.identifier === context.platform
+ (p) => p.identifier === inputData.platform
)!;
if (!integration) {
@@ -85,7 +93,7 @@ export class IntegrationValidationTool implements AgentToolInterface {
};
}
- const maxLength = integration.maxLength(context.isPremium);
+ const maxLength = integration.maxLength(inputData.isPremium);
const schemas = !integration.dto
? false
: getValidationSchemas()[integration.dto.name];
diff --git a/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts b/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts
index 2a116d91..b5c7cbf1 100644
--- a/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts
+++ b/libraries/nestjs-libraries/src/chat/tools/video.function.tool.ts
@@ -18,18 +18,26 @@ export class VideoFunctionTool implements AgentToolInterface {
return createTool({
id: 'videoFunctionTool',
description: `Sometimes when we want to generate videos we might need to get some additional information like voice_id, etc`,
+ mcp: {
+ annotations: {
+ title: 'Video Function Helper',
+ readOnlyHint: true,
+ destructiveHint: false,
+ idempotentHint: true,
+ openWorldHint: false,
+ },
+ },
inputSchema: z.object({
identifier: z.string(),
functionName: z.string(),
}),
- execute: async (args, options) => {
- const { context, runtimeContext } = args;
- checkAuth(args, options);
+ execute: async (inputData, context) => {
+ checkAuth(inputData, context);
const videos = this._videoManagerService.getAllVideos();
const findVideo = videos.find(
(p) =>
- p.identifier === context.identifier &&
- p.tools.some((p) => p.functionName === context.functionName)
+ p.identifier === inputData.identifier &&
+ p.tools.some((p) => p.functionName === inputData.functionName)
);
if (!findVideo) {
@@ -39,7 +47,7 @@ export class VideoFunctionTool implements AgentToolInterface {
const func = await this._moduleRef
// @ts-ignore
.get(findVideo.target, { strict: false })
- [context.functionName]();
+ [inputData.functionName]();
return func;
},
});
diff --git a/libraries/nestjs-libraries/src/database/prisma/database.module.ts b/libraries/nestjs-libraries/src/database/prisma/database.module.ts
index 3a2f2a84..fbd79189 100644
--- a/libraries/nestjs-libraries/src/database/prisma/database.module.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/database.module.ts
@@ -40,6 +40,8 @@ import { OAuthRepository } from '@gitroom/nestjs-libraries/database/prisma/oauth
import { OAuthService } from '@gitroom/nestjs-libraries/database/prisma/oauth/oauth.service';
import { AnnouncementsRepository } from '@gitroom/nestjs-libraries/database/prisma/announcements/announcements.repository';
import { AnnouncementsService } from '@gitroom/nestjs-libraries/database/prisma/announcements/announcements.service';
+import { ErrorsRepository } from '@gitroom/nestjs-libraries/database/prisma/errors/errors.repository';
+import { ErrorsService } from '@gitroom/nestjs-libraries/database/prisma/errors/errors.service';
@Global()
@Module({
@@ -89,6 +91,8 @@ import { AnnouncementsService } from '@gitroom/nestjs-libraries/database/prisma/
VideoManager,
AnnouncementsRepository,
AnnouncementsService,
+ ErrorsRepository,
+ ErrorsService,
],
get exports() {
return this.providers;
diff --git a/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.ts b/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.ts
new file mode 100644
index 00000000..6f3bb51e
--- /dev/null
+++ b/libraries/nestjs-libraries/src/database/prisma/errors/errors.repository.ts
@@ -0,0 +1,143 @@
+import { PrismaRepository } from '@gitroom/nestjs-libraries/database/prisma/prisma.service';
+import { Injectable } from '@nestjs/common';
+
+const UNKNOWN_TOKEN = 'An unknown error occurred';
+
+interface ListErrorsParams {
+ page?: number;
+ limit?: number;
+ platform?: string;
+ email?: string;
+ unknownFirst?: boolean;
+}
+
+@Injectable()
+export class ErrorsRepository {
+ constructor(private _errors: PrismaRepository<'errors'>) {}
+
+ private buildWhere(params: ListErrorsParams) {
+ const where: any = {};
+ if (params.platform) {
+ where.platform = params.platform;
+ }
+ if (params.email) {
+ where.organization = {
+ users: {
+ some: {
+ user: {
+ email: { contains: params.email, mode: 'insensitive' },
+ },
+ },
+ },
+ };
+ }
+ return where;
+ }
+
+ private get include() {
+ return {
+ organization: {
+ select: {
+ id: true,
+ name: true,
+ users: {
+ select: {
+ user: { select: { id: true, email: true, name: true } },
+ },
+ },
+ },
+ },
+ post: { select: { id: true, content: true } },
+ } as const;
+ }
+
+ async listPlatforms() {
+ const rows = await this._errors.model.errors.findMany({
+ distinct: ['platform'],
+ select: { platform: true },
+ orderBy: { platform: 'asc' },
+ });
+ return rows.map((r) => r.platform);
+ }
+
+ async listErrors(params: ListErrorsParams) {
+ const page = Math.max(0, params.page || 0);
+ const limit = Math.min(Math.max(1, params.limit || 20), 100);
+ const skip = page * limit;
+ const where = this.buildWhere(params);
+ const include = this.include;
+
+ if (!params.unknownFirst) {
+ const [items, total] = await Promise.all([
+ this._errors.model.errors.findMany({
+ where,
+ orderBy: { createdAt: 'desc' },
+ skip,
+ take: limit,
+ include,
+ }),
+ this._errors.model.errors.count({ where }),
+ ]);
+ return {
+ items,
+ total,
+ page,
+ limit,
+ hasMore: skip + items.length < total,
+ };
+ }
+
+ const unknownWhere = { ...where, message: { contains: UNKNOWN_TOKEN } };
+ const knownWhere = {
+ ...where,
+ NOT: { message: { contains: UNKNOWN_TOKEN } },
+ };
+
+ const [unknownTotal, knownTotal] = await Promise.all([
+ this._errors.model.errors.count({ where: unknownWhere }),
+ this._errors.model.errors.count({ where: knownWhere }),
+ ]);
+
+ let unknownItems: any[] = [];
+ let knownItems: any[] = [];
+
+ if (skip < unknownTotal) {
+ const takeUnknown = Math.min(unknownTotal - skip, limit);
+ unknownItems = await this._errors.model.errors.findMany({
+ where: unknownWhere,
+ orderBy: { createdAt: 'desc' },
+ skip,
+ take: takeUnknown,
+ include,
+ });
+ const remaining = limit - unknownItems.length;
+ if (remaining > 0) {
+ knownItems = await this._errors.model.errors.findMany({
+ where: knownWhere,
+ orderBy: { createdAt: 'desc' },
+ skip: 0,
+ take: remaining,
+ include,
+ });
+ }
+ } else {
+ knownItems = await this._errors.model.errors.findMany({
+ where: knownWhere,
+ orderBy: { createdAt: 'desc' },
+ skip: skip - unknownTotal,
+ take: limit,
+ include,
+ });
+ }
+
+ const items = [...unknownItems, ...knownItems];
+ const total = unknownTotal + knownTotal;
+ return {
+ items,
+ total,
+ page,
+ limit,
+ hasMore: skip + items.length < total,
+ };
+ }
+}
diff --git a/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.ts b/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.ts
new file mode 100644
index 00000000..63d3c3ea
--- /dev/null
+++ b/libraries/nestjs-libraries/src/database/prisma/errors/errors.service.ts
@@ -0,0 +1,21 @@
+import { Injectable } from '@nestjs/common';
+import { ErrorsRepository } from '@gitroom/nestjs-libraries/database/prisma/errors/errors.repository';
+
+@Injectable()
+export class ErrorsService {
+ constructor(private _errorsRepository: ErrorsRepository) {}
+
+ listErrors(params: {
+ page?: number;
+ limit?: number;
+ platform?: string;
+ email?: string;
+ unknownFirst?: boolean;
+ }) {
+ return this._errorsRepository.listErrors(params);
+ }
+
+ listPlatforms() {
+ return this._errorsRepository.listPlatforms();
+ }
+}
diff --git a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts
index cd0e5d79..15434d6c 100644
--- a/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/integrations/integration.repository.ts
@@ -71,7 +71,7 @@ export class IntegrationRepository {
async checkPreviousConnections(org: string, id: string) {
const findIt = await this._integration.model.integration.findMany({
where: {
- rootInternalId: id.split('_').pop(),
+ rootInternalId: id,
},
select: {
organizationId: true,
@@ -263,7 +263,7 @@ export class IntegrationRepository {
...postTimes,
organizationId: org,
refreshNeeded: false,
- rootInternalId: internalId.split('_').pop(),
+ rootInternalId: internalId,
...(customInstanceDetails ? { customInstanceDetails } : {}),
additionalSettings: additionalSettings
? JSON.stringify(additionalSettings)
@@ -304,7 +304,7 @@ export class IntegrationRepository {
internalId: internalId,
},
})
- )?.rootInternalId || internalId.split('_').pop()!;
+ )?.rootInternalId || internalId;
await this._integration.model.integration.updateMany({
where: {
diff --git a/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts b/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts
index d6389f06..208def20 100644
--- a/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/media/media.repository.ts
@@ -72,13 +72,24 @@ export class MediaRepository {
});
}
- async getMedia(org: string, page: number) {
+ async getMedia(org: string, page: number, search?: string) {
const pageNum = (page || 1) - 1;
+ const trimmedSearch = search?.trim();
+ const searchFilter = trimmedSearch
+ ? {
+ originalName: {
+ contains: trimmedSearch,
+ mode: 'insensitive' as const,
+ },
+ }
+ : {};
const query = {
where: {
organization: {
id: org,
},
+ deletedAt: null,
+ ...searchFilter,
},
};
const pages = Math.ceil((await this._media.model.media.count(query)) / 18);
@@ -86,6 +97,7 @@ export class MediaRepository {
where: {
organizationId: org,
deletedAt: null,
+ ...searchFilter,
},
orderBy: {
createdAt: 'desc',
diff --git a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts
index 66bdac84..a7b4f510 100644
--- a/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/media/media.service.ts
@@ -56,8 +56,8 @@ export class MediaService {
return this._mediaRepository.saveFile(org, fileName, filePath, originalName);
}
- getMedia(org: string, page: number) {
- return this._mediaRepository.getMedia(org, page);
+ getMedia(org: string, page: number, search?: string) {
+ return this._mediaRepository.getMedia(org, page, search);
}
saveMediaInformation(org: string, data: SaveMediaInformationDto) {
diff --git a/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts b/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts
index 1dce2267..be031e24 100644
--- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.repository.ts
@@ -37,8 +37,8 @@ export class PostsRepository {
disabled: false,
},
publishDate: {
- gte: dayjs.utc().subtract(2, 'hour').toDate(),
- lt: dayjs.utc().add(2, 'hour').toDate(),
+ gte: dayjs.utc().subtract(2, 'day').toDate(),
+ lt: dayjs.utc().toDate(),
},
state: 'QUEUE',
deletedAt: null,
diff --git a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts
index 86e53bd6..2ca5c875 100644
--- a/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts
+++ b/libraries/nestjs-libraries/src/database/prisma/posts/posts.service.ts
@@ -706,7 +706,7 @@ export class PostsService {
try {
await this._temporalService.client
.getRawClient()
- ?.workflow.start('postWorkflowV101', {
+ ?.workflow.start('postWorkflowV104', {
workflowId: `post_${postId}`,
taskQueue: 'main',
workflowIdConflictPolicy: 'TERMINATE_EXISTING',
@@ -784,6 +784,31 @@ export class PostsService {
return this._postRepository.changeState(id, state, err, body);
}
+ async changePostStatus(
+ orgId: string,
+ id: string,
+ status: 'draft' | 'schedule'
+ ) {
+ const getPostById = await this._postRepository.getPostById(id, orgId);
+ if (!getPostById) {
+ throw new BadRequestException('Post not found');
+ }
+
+ const state: State = status === 'draft' ? 'DRAFT' : 'QUEUE';
+ await this._postRepository.changeState(id, state);
+
+ try {
+ await this.startWorkflow(
+ getPostById.integration.providerIdentifier.split('-')[0].toLowerCase(),
+ getPostById.id,
+ orgId,
+ state
+ );
+ } catch (err) {}
+
+ return { id, state };
+ }
+
async changeDate(
orgId: string,
id: string,
diff --git a/libraries/nestjs-libraries/src/dtos/oauth/create-oauth-app.dto.ts b/libraries/nestjs-libraries/src/dtos/oauth/create-oauth-app.dto.ts
index aca4dab4..b9fe002a 100644
--- a/libraries/nestjs-libraries/src/dtos/oauth/create-oauth-app.dto.ts
+++ b/libraries/nestjs-libraries/src/dtos/oauth/create-oauth-app.dto.ts
@@ -17,6 +17,6 @@ export class CreateOAuthAppDto {
@IsString()
@IsDefined()
- @IsUrl()
+ @IsUrl({ require_tld: false })
redirectUrl: string;
}
diff --git a/libraries/nestjs-libraries/src/dtos/oauth/update-oauth-app.dto.ts b/libraries/nestjs-libraries/src/dtos/oauth/update-oauth-app.dto.ts
index 3cb4461b..e2a537a7 100644
--- a/libraries/nestjs-libraries/src/dtos/oauth/update-oauth-app.dto.ts
+++ b/libraries/nestjs-libraries/src/dtos/oauth/update-oauth-app.dto.ts
@@ -17,6 +17,6 @@ export class UpdateOAuthAppDto {
@IsString()
@IsOptional()
- @IsUrl()
+ @IsUrl({ require_tld: false })
redirectUrl?: string;
}
diff --git a/libraries/nestjs-libraries/src/dtos/posts/change.post.status.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/change.post.status.dto.ts
new file mode 100644
index 00000000..466502bf
--- /dev/null
+++ b/libraries/nestjs-libraries/src/dtos/posts/change.post.status.dto.ts
@@ -0,0 +1,6 @@
+import { IsIn } from 'class-validator';
+
+export class ChangePostStatusDto {
+ @IsIn(['draft', 'schedule'])
+ status: 'draft' | 'schedule';
+}
diff --git a/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts
index 21001e4c..89c86fa3 100644
--- a/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts
+++ b/libraries/nestjs-libraries/src/dtos/posts/create.post.dto.ts
@@ -12,7 +12,7 @@ import {
ValidateIf,
ValidateNested,
} from 'class-validator';
-import { Type } from 'class-transformer';
+import { Transform, Type } from 'class-transformer';
import { MediaDto } from '@gitroom/nestjs-libraries/dtos/media/media.dto';
import {
allProviders,
@@ -20,6 +20,7 @@ import {
EmptySettings,
} from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/all.providers.settings';
import { ValidContent } from '@gitroom/helpers/utils/valid.images';
+import { sanitizePostContent } from '@gitroom/helpers/utils/sanitize.post.content';
export class Integration {
@IsDefined()
@@ -31,6 +32,7 @@ export class PostContent {
@IsDefined()
@IsString()
@Validate(ValidContent)
+ @Transform(({ value }) => sanitizePostContent(value))
content: string;
@IsOptional()
diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts
index 07e1f8e1..4a8f2a13 100644
--- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts
+++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts
@@ -39,6 +39,9 @@ export class RedditSettingsDtoInner {
@IsString()
@MinLength(2)
@IsDefined()
+ @JSONSchema({
+ description: 'Must be any of link, self (normal post), image, video, videogif',
+ })
type: string;
@IsUrl()
diff --git a/libraries/nestjs-libraries/src/dtos/webhooks/ssrf.safe.dispatcher.ts b/libraries/nestjs-libraries/src/dtos/webhooks/ssrf.safe.dispatcher.ts
new file mode 100644
index 00000000..f72317f8
--- /dev/null
+++ b/libraries/nestjs-libraries/src/dtos/webhooks/ssrf.safe.dispatcher.ts
@@ -0,0 +1,39 @@
+import { Agent } from 'undici';
+import dns from 'node:dns';
+import net from 'node:net';
+import { isBlockedIp } from './webhook.url.validator';
+
+// Pins DNS resolution: every resolved IP is checked with `isBlockedIp` and
+// the caller (undici) connects to that same set. Closes the TOCTOU window
+// `isSafePublicHttpsUrl` alone leaves open (see GHSA-f7jj-p389-4w45).
+export const ssrfSafeDispatcher = new Agent({
+ connect: {
+ lookup(hostname, options, callback) {
+ if (net.isIP(hostname)) {
+ const family = net.isIP(hostname);
+ if (isBlockedIp(hostname)) {
+ return callback(new Error('Blocked IP'), '', 0);
+ }
+ return options && (options as any).all
+ ? callback(null, [{ address: hostname, family }] as any, family)
+ : callback(null, hostname, family);
+ }
+
+ dns.lookup(hostname, options, (err, address: any, family: any) => {
+ if (err) return callback(err, '', 0);
+ if (Array.isArray(address)) {
+ for (const entry of address) {
+ if (isBlockedIp(entry.address)) {
+ return callback(new Error('Blocked IP'), '', 0);
+ }
+ }
+ return callback(null, address as any, 0);
+ }
+ if (isBlockedIp(address)) {
+ return callback(new Error('Blocked IP'), '', 0);
+ }
+ callback(null, address, family);
+ });
+ },
+ },
+});
diff --git a/libraries/nestjs-libraries/src/dtos/webhooks/webhook.url.validator.ts b/libraries/nestjs-libraries/src/dtos/webhooks/webhook.url.validator.ts
index 3ce28433..d79be0e6 100644
--- a/libraries/nestjs-libraries/src/dtos/webhooks/webhook.url.validator.ts
+++ b/libraries/nestjs-libraries/src/dtos/webhooks/webhook.url.validator.ts
@@ -9,109 +9,113 @@ import { URL } from 'node:url';
import dns from 'node:dns/promises';
import net from 'node:net';
+export function isBlockedIPv4(ip: string): boolean {
+ const [a, b] = ip.split('.').map(Number);
+
+ if ([a, b].some((n) => Number.isNaN(n))) return true;
+
+ return (
+ a === 0 || // 0.0.0.0/8
+ a === 10 || // 10.0.0.0/8
+ a === 127 || // 127.0.0.0/8
+ (a === 169 && b === 254) || // 169.254.0.0/16
+ (a === 172 && b >= 16 && b <= 31) || // 172.16.0.0/12
+ (a === 192 && b === 168) || // 192.168.0.0/16
+ (a === 100 && b >= 64 && b <= 127) || // 100.64.0.0/10
+ (a === 198 && (b === 18 || b === 19)) || // 198.18.0.0/15
+ a >= 224 // multicast/reserved
+ );
+}
+
+export function isBlockedIPv6(ip: string): boolean {
+ const normalized = ip.toLowerCase();
+
+ return (
+ normalized === '::1' || // loopback
+ normalized === '::' || // unspecified
+ normalized.startsWith('fe80:') || // link-local
+ normalized.startsWith('fc') || // unique local fc00::/7
+ normalized.startsWith('fd') || // unique local fd00::/7
+ normalized.startsWith('ff') // multicast
+ );
+}
+
+export function isBlockedIp(ip: string): boolean {
+ const version = net.isIP(ip);
+ if (version === 4) {
+ return isBlockedIPv4(ip);
+ }
+ if (version === 6) {
+ // IPv4-mapped IPv6 (::ffff:a.b.c.d) — extract and check as IPv4
+ const mapped = ip.toLowerCase().match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
+ if (mapped) {
+ return isBlockedIPv4(mapped[1]);
+ }
+ return isBlockedIPv6(ip);
+ }
+ return true;
+}
+
+export async function isSafePublicHttpsUrl(value: unknown): Promise {
+ if (typeof value !== 'string' || !value.trim()) {
+ return false;
+ }
+
+ let parsed: URL;
+ try {
+ parsed = new URL(value);
+ } catch {
+ return false;
+ }
+
+ if (parsed.protocol !== 'https:') {
+ return false;
+ }
+
+ if (!parsed.hostname) {
+ return false;
+ }
+
+ const hostname = parsed.hostname.toLowerCase().replace(/^\[|\]$/g, '');
+
+ if (hostname === 'localhost') {
+ return false;
+ }
+
+ // If user supplied a literal IP directly, validate it immediately
+ const literalIpVersion = net.isIP(hostname);
+ if (literalIpVersion) {
+ return !isBlockedIp(hostname);
+ }
+
+ try {
+ const records = await dns.lookup(hostname, { all: true });
+
+ if (!records.length) {
+ return false;
+ }
+
+ for (const record of records) {
+ if (isBlockedIp(record.address)) {
+ return false;
+ }
+ }
+
+ return true;
+ } catch {
+ return false;
+ }
+}
+
@ValidatorConstraint({ name: 'IsSafeWebhookUrl', async: true })
export class IsSafeWebhookUrlConstraint implements ValidatorConstraintInterface {
async validate(value: unknown, _args: ValidationArguments): Promise {
- if (typeof value !== 'string' || !value.trim()) {
- return false;
- }
-
- let parsed: URL;
- try {
- parsed = new URL(value);
- } catch {
- return false;
- }
-
- if (parsed.protocol !== 'https:') {
- return false;
- }
-
- if (!parsed.hostname) {
- return false;
- }
-
- const hostname = parsed.hostname.toLowerCase();
-
- if (hostname === 'localhost') {
- return false;
- }
-
- // Optional: block explicit ports other than 443
- // if (parsed.port && parsed.port !== '443') {
- // return false;
- // }
-
- // If user supplied a literal IP directly, validate it immediately
- const literalIpVersion = net.isIP(hostname);
- if (literalIpVersion) {
- return !this.isBlockedIp(hostname);
- }
-
- try {
- const records = await dns.lookup(hostname, { all: true });
-
- if (!records.length) {
- return false;
- }
-
- for (const record of records) {
- if (this.isBlockedIp(record.address)) {
- return false;
- }
- }
-
- return true;
- } catch {
- return false;
- }
+ return isSafePublicHttpsUrl(value);
}
defaultMessage(_args: ValidationArguments): string {
return 'URL must be a public HTTPS URL and must not resolve to localhost, private, loopback, or link-local addresses';
}
-
- private isBlockedIp(ip: string): boolean {
- const version = net.isIP(ip);
- if (version === 4) {
- return this.isBlockedIPv4(ip);
- }
- if (version === 6) {
- return this.isBlockedIPv6(ip);
- }
- return true;
- }
-
- private isBlockedIPv4(ip: string): boolean {
- const [a, b] = ip.split('.').map(Number);
-
- if ([a, b].some((n) => Number.isNaN(n))) return true;
-
- return (
- a === 0 || // 0.0.0.0/8
- a === 10 || // 10.0.0.0/8
- a === 127 || // 127.0.0.0/8
- (a === 169 && b === 254) || // 169.254.0.0/16
- (a === 172 && b >= 16 && b <= 31) || // 172.16.0.0/12
- (a === 192 && b === 168) || // 192.168.0.0/16
- (a === 100 && b >= 64 && b <= 127) || // 100.64.0.0/10
- (a === 198 && (b === 18 || b === 19)) || // 198.18.0.0/15
- a >= 224 // multicast/reserved
- );
- }
-
- private isBlockedIPv6(ip: string): boolean {
- const normalized = ip.toLowerCase();
-
- return (
- normalized === '::1' || // loopback
- normalized === '::' || // unspecified
- normalized.startsWith('fe80:') || // link-local
- normalized.startsWith('fc') || // unique local fc00::/7
- normalized.startsWith('fd') || // unique local fd00::/7
- normalized.startsWith('ff') // multicast
- );
- }
}
export function IsSafeWebhookUrl(validationOptions?: ValidationOptions) {
diff --git a/libraries/nestjs-libraries/src/integrations/refresh.integration.service.ts b/libraries/nestjs-libraries/src/integrations/refresh.integration.service.ts
index a14d990b..0689bdc6 100644
--- a/libraries/nestjs-libraries/src/integrations/refresh.integration.service.ts
+++ b/libraries/nestjs-libraries/src/integrations/refresh.integration.service.ts
@@ -16,12 +16,12 @@ export class RefreshIntegrationService {
private _integrationService: IntegrationService,
private _temporalService: TemporalService
) {}
- async refresh(integration: Integration): Promise {
+ async refresh(integration: Integration, cause = ''): Promise {
const socialProvider = this._integrationManager.getSocialIntegration(
integration.providerIdentifier
);
- const refresh = await this.refreshProcess(integration, socialProvider);
+ const refresh = await this.refreshProcess(integration, socialProvider, cause);
if (!refresh) {
return false as const;
@@ -44,11 +44,12 @@ export class RefreshIntegrationService {
return refresh;
}
- public async setBetweenSteps(integration: Integration) {
+ public async setBetweenSteps(integration: Integration, cause = '') {
await this._integrationService.setBetweenRefreshSteps(integration.id);
await this._integrationService.informAboutRefreshError(
integration.organizationId,
- integration
+ integration,
+ cause
);
}
@@ -69,7 +70,8 @@ export class RefreshIntegrationService {
private async refreshProcess(
integration: Integration,
- socialProvider: SocialProvider
+ socialProvider: SocialProvider,
+ cause = ''
): Promise {
const refresh: false | AuthTokenDetails = await socialProvider
.refreshToken(integration.refreshToken)
@@ -83,7 +85,8 @@ export class RefreshIntegrationService {
await this._integrationService.informAboutRefreshError(
integration.organizationId,
- integration
+ integration,
+ cause
);
await this._integrationService.disconnectChannel(
diff --git a/libraries/nestjs-libraries/src/integrations/social.abstract.ts b/libraries/nestjs-libraries/src/integrations/social.abstract.ts
index ec13f7f6..c52cf107 100644
--- a/libraries/nestjs-libraries/src/integrations/social.abstract.ts
+++ b/libraries/nestjs-libraries/src/integrations/social.abstract.ts
@@ -51,7 +51,8 @@ export abstract class SocialAbstract {
maxConcurrentJob = 1;
public handleErrors(
- body: string
+ body: string,
+ status: number,
):
| { type: 'refresh-token' | 'bad-body' | 'retry'; value: string }
| undefined {
@@ -78,7 +79,7 @@ export abstract class SocialAbstract {
try {
value = await func();
} catch (err) {
- const handle = this.handleErrors(safeStringify(err));
+ const handle = this.handleErrors(safeStringify(err), 200);
value = { err: true, value: 'Unknown Error', ...(handle || {}) };
}
@@ -121,7 +122,7 @@ export abstract class SocialAbstract {
json = '{}';
}
- const handleError = this.handleErrors(json || '{}');
+ const handleError = this.handleErrors(json || '{}', request.status);
if (
request.status === 429 ||
diff --git a/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts b/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts
index 6402920a..a70f36ce 100644
--- a/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/discord.provider.ts
@@ -42,7 +42,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
).json();
const { application } = await (
- await fetch('https://discord.com/api/oauth2/@me', {
+ await this.fetch('https://discord.com/api/oauth2/@me', {
headers: {
Authorization: `Bearer ${access_token}`,
},
@@ -99,7 +99,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
this.checkScopes(this.scopes, scope.split(' '));
const { application } = await (
- await fetch('https://discord.com/api/oauth2/@me', {
+ await this.fetch('https://discord.com/api/oauth2/@me', {
headers: {
Authorization: `Bearer ${access_token}`,
},
@@ -120,7 +120,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
@Tool({ description: 'Channels', dataSchema: [] })
async channels(accessToken: string, params: any, id: string) {
const list = await (
- await fetch(`https://discord.com/api/guilds/${id}/channels`, {
+ await this.fetch(`https://discord.com/api/guilds/${id}/channels`, {
headers: {
Authorization: `Bot ${process.env.DISCORD_BOT_TOKEN_ID}`,
},
@@ -171,7 +171,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
}
const data = await (
- await fetch(`https://discord.com/api/channels/${channel}/messages`, {
+ await this.fetch(`https://discord.com/api/channels/${channel}/messages`, {
method: 'POST',
headers: {
Authorization: `Bot ${process.env.DISCORD_BOT_TOKEN_ID}`,
@@ -208,7 +208,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
// Create thread if this is the first comment
if (!lastCommentId) {
const { id: threadId } = await (
- await fetch(
+ await this.fetch(
`https://discord.com/api/channels/${channel}/messages/${postId}/threads`,
{
method: 'POST',
@@ -224,9 +224,6 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
)
).json();
threadChannel = threadId;
- } else {
- // Extract thread channel from the last comment's URL or use channel directly
- threadChannel = channel;
}
const form = new FormData();
@@ -234,7 +231,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
'payload_json',
JSON.stringify({
content: commentPost.message.replace(/\[\[\[(@.*?)]]]/g, (match, p1) => {
- return `<${p1}>`;
+ return `<${p1}>`;
}),
attachments: commentPost.media?.map((p, index) => ({
id: index,
@@ -257,7 +254,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
}
const data = await (
- await fetch(
+ await this.fetch(
`https://discord.com/api/channels/${threadChannel}/messages`,
{
method: 'POST',
@@ -281,7 +278,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
async changeNickname(id: string, accessToken: string, name: string) {
await (
- await fetch(`https://discord.com/api/guilds/${id}/members/@me`, {
+ await this.fetch(`https://discord.com/api/guilds/${id}/members/@me`, {
method: 'PATCH',
headers: {
Authorization: `Bot ${process.env.DISCORD_BOT_TOKEN_ID}`,
@@ -305,7 +302,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
integration: Integration
) {
const allRoles = await (
- await fetch(`https://discord.com/api/guilds/${id}/roles`, {
+ await this.fetch(`https://discord.com/api/guilds/${id}/roles`, {
headers: {
Authorization: `Bot ${process.env.DISCORD_BOT_TOKEN_ID}`,
'Content-Type': 'application/json',
@@ -320,7 +317,7 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
.filter((f: any) => f.name !== '@everyone' && f.name !== '@here');
const list = await (
- await fetch(
+ await this.fetch(
`https://discord.com/api/guilds/${id}/members/search?query=${data.query}`,
{
headers: {
@@ -368,4 +365,47 @@ export class DiscordProvider extends SocialAbstract implements SocialProvider {
}
return `[[[@${idOrHandle.replace('@', '')}]]]`;
}
+
+ override handleErrors(
+ body: string
+ ):
+ | { type: 'refresh-token' | 'bad-body' | 'retry'; value: string }
+ | undefined {
+ if (body.includes('50001')) {
+ return {
+ type: 'bad-body',
+ value: "Bot doesn't have access to this channel",
+ };
+ }
+
+ if (body.includes('50013')) {
+ return {
+ type: 'bad-body',
+ value: 'Bot lacks permission to send messages in this channel',
+ };
+ }
+
+ if (body.includes('10003')) {
+ return {
+ type: 'bad-body',
+ value: 'Channel no longer exists',
+ };
+ }
+
+ if (body.includes('40005')) {
+ return {
+ type: 'bad-body',
+ value: "Attachment exceeds Discord's size limit",
+ };
+ }
+
+ if (body.includes('20028')) {
+ return {
+ type: 'retry',
+ value: 'Rate limited by Discord',
+ };
+ }
+
+ return undefined;
+ }
}
diff --git a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts
index 052ef46a..ab03455a 100644
--- a/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/facebook.provider.ts
@@ -31,7 +31,10 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
}
dto = FacebookDto;
- override handleErrors(body: string):
+ override handleErrors(
+ body: string,
+ status: number
+ ):
| {
type: 'refresh-token' | 'bad-body';
value: string;
@@ -129,7 +132,8 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
if (body.indexOf('1404112') > -1) {
return {
type: 'bad-body' as const,
- value: 'For security reasons, your account has limited access to the site for a few days',
+ value:
+ 'For security reasons, your account has limited access to the site for a few days',
};
}
@@ -155,6 +159,14 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
};
}
+ if (status === 401) {
+ return {
+ type: 'bad-body' as const,
+ value:
+ 'An unknown error occurred, please try again later or contact support',
+ };
+ }
+
return undefined;
}
@@ -289,8 +301,9 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
// Also fetch pages via Business Manager API to discover pages
// not selected during the OAuth page selection step
try {
- let bizUrl: string | undefined =
- `https://graph.facebook.com/v20.0/me/businesses?access_token=${accessToken}`;
+ let bizUrl:
+ | string
+ | undefined = `https://graph.facebook.com/v20.0/me/businesses?access_token=${accessToken}`;
while (bizUrl) {
const bizResponse = await (await fetch(bizUrl)).json();
@@ -357,8 +370,9 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
// 2. Check Business Manager owned_pages and client_pages
try {
- let bizUrl: string | undefined =
- `https://graph.facebook.com/v20.0/me/businesses?access_token=${accessToken}`;
+ let bizUrl:
+ | string
+ | undefined = `https://graph.facebook.com/v20.0/me/businesses?access_token=${accessToken}`;
while (bizUrl) {
const bizResponse = await (await fetch(bizUrl)).json();
@@ -642,3 +656,4 @@ export class FacebookProvider extends SocialAbstract implements SocialProvider {
}
}
}
+
diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts
index 435d23e9..74ace32b 100644
--- a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts
@@ -52,7 +52,10 @@ export class InstagramProvider
};
}
- public override handleErrors(body: string):
+ public override handleErrors(
+ body: string,
+ status: number
+ ):
| {
type: 'refresh-token' | 'bad-body' | 'retry';
value: string;
@@ -92,7 +95,7 @@ export class InstagramProvider
if (body.toLowerCase().indexOf('session has been invalidated') > -1) {
return {
type: 'refresh-token' as const,
- value: 'Please re-authenticate your Instagram account',
+ value: 'You session has been invalidated, this can usually happen from frequent posting, please re-authenticate, and wait 1-2 days before posting again',
};
}
@@ -272,7 +275,8 @@ export class InstagramProvider
if (body.indexOf('190,') > -1) {
return {
type: 'bad-body' as const,
- value: 'The account is missing some permissions to perform this action, please re-add the account and allow all permissions',
+ value:
+ 'The account is missing some permissions to perform this action, please re-add the account and allow all permissions',
};
}
@@ -308,7 +312,7 @@ export class InstagramProvider
if (body.indexOf('param collaborators is not allowed') > -1) {
return {
type: 'bad-body' as const,
- value: 'Collaborators are not allowed for carousel'
+ value: 'Collaborators are not allowed for carousel',
};
}
@@ -439,8 +443,9 @@ export class InstagramProvider
// Also fetch pages via Business Manager API to discover pages
// not selected during the OAuth page selection step
try {
- let bizUrl: string | undefined =
- `https://graph.facebook.com/v20.0/me/businesses?access_token=${accessToken}`;
+ let bizUrl:
+ | string
+ | undefined = `https://graph.facebook.com/v20.0/me/businesses?access_token=${accessToken}`;
while (bizUrl) {
const bizResponse = await (await fetch(bizUrl)).json();
@@ -536,7 +541,9 @@ export class InstagramProvider
? `&caption=${encodeURIComponent(firstPost.message)}`
: ``;
const isCarousel =
- (firstPost?.media?.length || 0) > 1 && !isStory ? `&is_carousel_item=true` : ``;
+ (firstPost?.media?.length || 0) > 1 && !isStory
+ ? `&is_carousel_item=true`
+ : ``;
const mediaType =
m.path.indexOf('.mp4') > -1
? firstPost?.media?.length === 1
@@ -797,7 +804,7 @@ export class InstagramProvider
date: number,
type = 'graph.facebook.com'
): Promise {
- const until = dayjs().endOf('day').unix();
+ const until = dayjs().startOf('day').unix();
const since = dayjs().subtract(date, 'day').unix();
const { data, ...all } = await (
diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts
index 5681d09e..6051e403 100644
--- a/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/instagram.standalone.provider.ts
@@ -40,11 +40,12 @@ export class InstagramStandaloneProvider
}
public override handleErrors(
- body: string
+ body: string,
+ status: number
):
| { type: 'refresh-token' | 'bad-body' | 'retry'; value: string }
| undefined {
- return instagramProvider.handleErrors(body);
+ return instagramProvider.handleErrors(body, status);
}
async refreshToken(refresh_token: string): Promise {
diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
index a8aed73a..a87f3a6f 100644
--- a/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.page.provider.ts
@@ -254,7 +254,7 @@ export class LinkedinPageProvider
).json();
return {
- id: `p_${id}`,
+ id: id,
accessToken,
refreshToken,
expiresIn,
diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
index 81b2fded..978b237b 100644
--- a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts
@@ -478,14 +478,13 @@ export class LinkedinProvider extends SocialAbstract implements SocialProvider {
private async prepareMediaBuffer(mediaUrl: string): Promise {
const isVideo = mediaUrl.indexOf('mp4') > -1;
+ const isGif = lookup(mediaUrl) === 'image/gif';
- if (isVideo) {
+ if (isVideo || isGif) {
return Buffer.from(await readOrFetch(mediaUrl));
}
- return await sharp(await readOrFetch(mediaUrl), {
- animated: lookup(mediaUrl) === 'image/gif',
- })
+ return await sharp(await readOrFetch(mediaUrl), { animated: false })
.toFormat('jpeg')
.resize({ width: 1000 })
.toBuffer();
diff --git a/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts b/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts
index 377b93db..56165c8f 100644
--- a/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/pinterest.provider.ts
@@ -10,7 +10,10 @@ import { PinterestSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/provi
import axios from 'axios';
import FormData from 'form-data';
import { timer } from '@gitroom/helpers/utils/timer';
-import { SocialAbstract } from '@gitroom/nestjs-libraries/integrations/social.abstract';
+import {
+ BadBody,
+ SocialAbstract,
+} from '@gitroom/nestjs-libraries/integrations/social.abstract';
import dayjs from 'dayjs';
import { Tool } from '@gitroom/nestjs-libraries/integrations/tool.decorator';
import { Rules } from '@gitroom/nestjs-libraries/chat/rules.description.decorator';
@@ -159,7 +162,7 @@ export class PinterestProvider
@Tool({ description: 'List of boards', dataSchema: [] })
async boards(accessToken: string) {
const { items } = await (
- await fetch('https://api.pinterest.com/v5/boards', {
+ await fetch('https://api.pinterest.com/v5/boards?page_size=250', {
method: 'GET',
headers: {
Authorization: `Bearer ${accessToken}`,
@@ -236,6 +239,15 @@ export class PinterestProvider
)
).json();
+ if (mediafile.status === 'failed') {
+ throw new BadBody(
+ 'pinterest',
+ JSON.stringify({}),
+ {} as any,
+ 'The file is corrupted and cannot be uploaded'
+ );
+ }
+
await timer(30000);
statusCode = mediafile.status;
}
@@ -414,7 +426,9 @@ export class PinterestProvider
result.push({
label: 'Outbound Clicks',
percentageChange: 0,
- data: [{ total: String(lifetimeMetrics.OUTBOUND_CLICK), date: today }],
+ data: [
+ { total: String(lifetimeMetrics.OUTBOUND_CLICK), date: today },
+ ],
});
}
diff --git a/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts b/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts
index 08da96be..ae8fcc3c 100644
--- a/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/reddit.provider.ts
@@ -184,15 +184,19 @@ export class RedditProvider extends SocialAbstract implements SocialProvider {
const valueArray: PostResponse[] = [];
for (const firstPostSettings of post.settings.subreddit) {
+ const kind =
+ firstPostSettings.value.type === 'media'
+ ? post.media[0].path.indexOf('mp4') > -1
+ ? 'video'
+ : 'image'
+ : firstPostSettings.value.type;
const postData = {
api_type: 'json',
title: firstPostSettings.value.title || '',
kind:
- firstPostSettings.value.type === 'media'
- ? post.media[0].path.indexOf('mp4') > -1
- ? 'video'
- : 'image'
- : firstPostSettings.value.type,
+ ['link', 'self', 'image', 'video', 'videogif'].indexOf(kind) > -1
+ ? kind
+ : 'self',
...(firstPostSettings.value.flair
? { flair_id: firstPostSettings.value.flair.id }
: {}),
@@ -218,10 +222,7 @@ export class RedditProvider extends SocialAbstract implements SocialProvider {
}
: {}),
text: post.message,
- sr:
- firstPostSettings.value.subreddit.indexOf('/r/') > -1
- ? firstPostSettings.value.subreddit
- : `/r/${firstPostSettings.value.subreddit}`,
+ sr: firstPostSettings.value.subreddit.replace('/r/', '').toLowerCase(),
};
const all = await (
diff --git a/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts b/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts
index b3b042db..768403e0 100644
--- a/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/tiktok.provider.ts
@@ -184,7 +184,7 @@ export class TiktokProvider extends SocialAbstract implements SocialProvider {
if (body.indexOf('url_ownership_unverified') > -1) {
return {
type: 'bad-body' as const,
- value: 'URL ownership not verified, please verify domain ownership',
+ value: 'You have to upload the picture/video to Postiz when sending a URL',
};
}
diff --git a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
index 2cf7f282..68284508 100644
--- a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts
@@ -1,4 +1,5 @@
import { TweetV2, TwitterApi } from 'twitter-api-v2';
+import { createHmac, randomBytes } from 'crypto';
import {
AnalyticsData,
AuthTokenDetails,
@@ -45,6 +46,24 @@ export class XProvider extends SocialAbstract implements SocialProvider {
value: string;
}
| undefined {
+ if (body.includes('You are not permitted to perform this action')) {
+ return {
+ type: 'bad-body',
+ value: 'There is a problem posting, please edit your post and check character count and media attachments',
+ }
+ }
+ if (body.includes('maximum of one cashtag')) {
+ return {
+ type: 'bad-body',
+ value: 'There can be maximum of one cashtag ($SYMBOL) per post',
+ };
+ }
+ if (body.includes('maximum of 4 items')) {
+ return {
+ type: 'bad-body',
+ value: 'There must be a maximum of 4 items per post',
+ };
+ }
if (body.includes('Unsupported Authentication')) {
return {
type: 'refresh-token',
@@ -308,6 +327,54 @@ export class XProvider extends SocialAbstract implements SocialProvider {
});
}
+ private signOAuth1(
+ method: string,
+ url: string,
+ accessToken: string,
+ accessSecret: string
+ ): string {
+ const pct = (s: string) =>
+ encodeURIComponent(s)
+ .replace(/!/g, '%21')
+ .replace(/\*/g, '%2A')
+ .replace(/'/g, '%27')
+ .replace(/\(/g, '%28')
+ .replace(/\)/g, '%29');
+
+ const params: Record = {
+ oauth_consumer_key: process.env.X_API_KEY!,
+ oauth_nonce: randomBytes(16).toString('hex'),
+ oauth_signature_method: 'HMAC-SHA1',
+ oauth_timestamp: String(Math.floor(Date.now() / 1000)),
+ oauth_token: accessToken,
+ oauth_version: '1.0',
+ };
+
+ const paramString = Object.keys(params)
+ .sort()
+ .map((k) => `${pct(k)}=${pct(params[k])}`)
+ .join('&');
+
+ const baseString = [
+ method.toUpperCase(),
+ pct(url.split('?')[0]),
+ pct(paramString),
+ ].join('&');
+
+ const signingKey = `${pct(process.env.X_API_SECRET!)}&${pct(accessSecret)}`;
+ params.oauth_signature = createHmac('sha1', signingKey)
+ .update(baseString)
+ .digest('base64');
+
+ return (
+ 'OAuth ' +
+ Object.keys(params)
+ .sort()
+ .map((k) => `${pct(k)}="${pct(params[k])}"`)
+ .join(', ')
+ );
+ }
+
private async uploadMedia(
client: TwitterApi,
postDetails: PostDetails[]
@@ -370,6 +437,7 @@ export class XProvider extends SocialAbstract implements SocialProvider {
paid_partnership?: boolean;
}>[]
): Promise {
+ const [accessTokenSplit, accessSecretSplit] = accessToken.split(':');
const client = await this.getClient(accessToken);
const {
data: { username },
@@ -386,30 +454,43 @@ export class XProvider extends SocialAbstract implements SocialProvider {
const media_ids = (uploadAll[firstPost.id] || []).filter((f) => f);
- // @ts-ignore
- const { data }: { data: { id: string } } = await this.runInConcurrent(
- async () =>
- // @ts-ignore
- client.v2.tweet({
- ...(!firstPost?.settings?.who_can_reply_post ||
- firstPost?.settings?.who_can_reply_post === 'everyone'
- ? {}
- : {
- reply_settings: firstPost?.settings?.who_can_reply_post,
- }),
- ...(firstPost?.settings?.community
- ? {
- share_with_followers: true,
- community_id:
- firstPost?.settings?.community?.split('/').pop() || '',
- }
- : {}),
- text: firstPost.message,
- ...(media_ids.length ? { media: { media_ids } } : {}),
- made_with_ai: !!firstPost?.settings?.made_with_ai,
- paid_partnership: !!firstPost?.settings?.paid_partnership,
- })
- );
+ const tweetUrl = 'https://api.x.com/2/tweets';
+ const tweetBody = {
+ ...(!firstPost?.settings?.who_can_reply_post ||
+ firstPost?.settings?.who_can_reply_post === 'everyone'
+ ? {}
+ : {
+ reply_settings: firstPost?.settings?.who_can_reply_post,
+ }),
+ ...(firstPost?.settings?.community
+ ? {
+ share_with_followers: true,
+ community_id:
+ firstPost?.settings?.community?.split('/').pop() || '',
+ }
+ : {}),
+ text: firstPost.message,
+ ...(media_ids.length ? { media: { media_ids } } : {}),
+ made_with_ai: !!firstPost?.settings?.made_with_ai,
+ paid_partnership: !!firstPost?.settings?.paid_partnership,
+ };
+
+ const tweetResponse = await this.fetch(tweetUrl, {
+ method: 'POST',
+ headers: {
+ Authorization: this.signOAuth1(
+ 'POST',
+ tweetUrl,
+ accessTokenSplit,
+ accessSecretSplit
+ ),
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(tweetBody),
+ });
+ const { data } = (await tweetResponse.json()) as {
+ data: { id: string };
+ };
return [
{
@@ -434,6 +515,7 @@ export class XProvider extends SocialAbstract implements SocialProvider {
}>[],
integration: Integration
): Promise {
+ const [accessTokenSplit, accessSecretSplit] = accessToken.split(':');
const client = await this.getClient(accessToken);
const {
data: { username },
@@ -452,18 +534,31 @@ export class XProvider extends SocialAbstract implements SocialProvider {
const replyToId = lastCommentId || postId;
- // @ts-ignore
- const { data }: { data: { id: string } } = await this.runInConcurrent(
- async () =>
- // @ts-ignore
- client.v2.tweet({
- text: commentPost.message,
- ...(media_ids.length ? { media: { media_ids } } : {}),
- reply: { in_reply_to_tweet_id: replyToId },
- made_with_ai: !!commentPost?.settings?.made_with_ai,
- paid_partnership: !!commentPost?.settings?.paid_partnership,
- })
- );
+ const tweetUrl = 'https://api.x.com/2/tweets';
+ const tweetBody = {
+ text: commentPost.message,
+ ...(media_ids.length ? { media: { media_ids } } : {}),
+ reply: { in_reply_to_tweet_id: replyToId },
+ made_with_ai: !!commentPost?.settings?.made_with_ai,
+ paid_partnership: !!commentPost?.settings?.paid_partnership,
+ };
+
+ const tweetResponse = await this.fetch(tweetUrl, {
+ method: 'POST',
+ headers: {
+ Authorization: this.signOAuth1(
+ 'POST',
+ tweetUrl,
+ accessTokenSplit,
+ accessSecretSplit
+ ),
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(tweetBody),
+ });
+ const { data } = (await tweetResponse.json()) as {
+ data: { id: string };
+ };
return [
{
diff --git a/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts b/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts
index 0254c429..1a7f33fa 100644
--- a/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts
+++ b/libraries/nestjs-libraries/src/integrations/social/youtube.provider.ts
@@ -150,7 +150,7 @@ export class YoutubeProvider extends SocialAbstract implements SocialProvider {
return {
accessToken: credentials.access_token!,
expiresIn: unixTimestamp!,
- refreshToken: credentials.refresh_token!,
+ refreshToken: credentials.refresh_token ?? refresh_token,
id: data.id!,
name: data.name!,
picture: data?.picture || '',
diff --git a/libraries/nestjs-libraries/src/services/stripe.service.ts b/libraries/nestjs-libraries/src/services/stripe.service.ts
index 05fa74df..f21bd66c 100644
--- a/libraries/nestjs-libraries/src/services/stripe.service.ts
+++ b/libraries/nestjs-libraries/src/services/stripe.service.ts
@@ -856,7 +856,7 @@ export class StripeService {
limit: 100,
});
- return charges.data
+ const chargeList = charges.data
.filter((f) => f.status === 'succeeded')
.map((charge) => ({
id: charge.id,
@@ -867,7 +867,33 @@ export class StripeService {
refunded: charge.refunded,
amount_refunded: charge.amount_refunded,
description: charge.description,
+ receipt_url: charge.receipt_url || null,
+ invoice: (charge as any).invoice || null,
}));
+
+ const invoiceIds = chargeList
+ .map((c) => c.invoice)
+ .filter((id): id is string => !!id && typeof id === 'string');
+
+ const invoicePdfMap: Record = {};
+ for (const invoiceId of invoiceIds) {
+ try {
+ const inv = await stripe.invoices.retrieve(invoiceId);
+ if (inv.invoice_pdf) {
+ invoicePdfMap[invoiceId] = inv.invoice_pdf;
+ }
+ } catch {
+ // ignore if invoice can't be fetched
+ }
+ }
+
+ return chargeList.map((charge) => ({
+ ...charge,
+ invoice_pdf:
+ charge.invoice && invoicePdfMap[charge.invoice as string]
+ ? invoicePdfMap[charge.invoice as string]
+ : null,
+ }));
}
async refundCharges(organizationId: string, chargeIds: string[]) {
diff --git a/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts b/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts
index 42f38004..032646de 100644
--- a/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts
+++ b/libraries/nestjs-libraries/src/upload/cloudflare.storage.ts
@@ -6,6 +6,25 @@ import mime from 'mime-types';
import { getExtension } from 'mime';
import { IUploadProvider } from './upload.interface';
import axios from 'axios';
+import { isSafePublicHttpsUrl } from '@gitroom/nestjs-libraries/dtos/webhooks/webhook.url.validator';
+import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher';
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { fromBuffer } = require('file-type');
+
+const ALLOWED_MIME_TYPES = new Set([
+ 'image/jpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/webp',
+ 'image/avif',
+ 'image/bmp',
+ 'image/tiff',
+ 'video/mp4',
+ 'audio/mpeg',
+ 'audio/mp4',
+ 'audio/wav',
+ 'audio/ogg',
+]);
class CloudflareStorage implements IUploadProvider {
private _client: S3Client;
@@ -58,20 +77,27 @@ class CloudflareStorage implements IUploadProvider {
}
async uploadSimple(path: string) {
- const loadImage = await fetch(path);
- const contentType =
- loadImage?.headers?.get('content-type') ||
- loadImage?.headers?.get('Content-Type');
- const extension = getExtension(contentType) ||
- path.split('?')[0].split('#')[0].split('.').pop() ||
- 'bin';
+ if (!(await isSafePublicHttpsUrl(path))) {
+ throw new Error('Unsafe URL');
+ }
+ const loadImage = await fetch(path, {
+ // @ts-ignore — undici option, not in lib.dom fetch types
+ dispatcher: ssrfSafeDispatcher,
+ });
+ const body = Buffer.from(await loadImage.arrayBuffer());
+ const detected = await fromBuffer(body);
+ if (!detected || !ALLOWED_MIME_TYPES.has(detected.mime)) {
+ throw new Error('Unsupported file type.');
+ }
+ const extension = detected.ext;
+ const safeContentType = detected.mime;
const id = makeId(10);
const params = {
Bucket: this._bucketName,
Key: `${id}.${extension}`,
- Body: Buffer.from(await loadImage.arrayBuffer()),
- ContentType: contentType,
+ Body: body,
+ ContentType: safeContentType,
ChecksumMode: 'DISABLED',
};
@@ -83,8 +109,13 @@ class CloudflareStorage implements IUploadProvider {
async uploadFile(file: Express.Multer.File): Promise {
try {
+ const detected = await fromBuffer(file.buffer);
+ if (!detected || !ALLOWED_MIME_TYPES.has(detected.mime)) {
+ throw new Error('Unsupported file type.');
+ }
const id = makeId(10);
- const extension = mime.extension(file.mimetype) || '';
+ const extension = detected.ext;
+ const safeContentType = detected.mime;
// Create the PutObjectCommand to upload the file to Cloudflare R2
const command = new PutObjectCommand({
@@ -92,6 +123,7 @@ class CloudflareStorage implements IUploadProvider {
ACL: 'public-read',
Key: `${id}.${extension}`,
Body: file.buffer,
+ ContentType: safeContentType,
});
await this._client.send(command);
diff --git a/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts b/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts
index add65c38..c24c9504 100644
--- a/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts
+++ b/libraries/nestjs-libraries/src/upload/custom.upload.validation.ts
@@ -1,37 +1,58 @@
import {
BadRequestException,
- FileTypeValidator,
Injectable,
- MaxFileSizeValidator,
- ParseFilePipe,
PipeTransform,
} from '@nestjs/common';
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { fromBuffer } = require('file-type');
+
+const ALLOWED_MIME_TYPES = new Set([
+ 'image/jpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/webp',
+ 'image/avif',
+ 'image/bmp',
+ 'image/tiff',
+ 'video/mp4',
+]);
@Injectable()
export class CustomFileValidationPipe implements PipeTransform {
async transform(value: any) {
- if (!value) {
- throw 'No file provided.';
- }
-
- if (!value.mimetype) {
+ if (!value || typeof value !== 'object') {
return value;
}
- // Set the maximum file size based on the MIME type
- const maxSize = this.getMaxSize(value.mimetype);
- const validation =
- (value.mimetype.startsWith('image/') ||
- value.mimetype.startsWith('video/mp4')) &&
- value.size <= maxSize;
-
- if (validation) {
+ // Skip non-file parameters (org, body, query, etc.)
+ if (!('buffer' in value) && !('mimetype' in value) && !('fieldname' in value)) {
return value;
}
- throw new BadRequestException(
- `File size exceeds the maximum allowed size of ${maxSize} bytes.`
- );
+ if (!value.buffer || !Buffer.isBuffer(value.buffer)) {
+ throw new BadRequestException('Invalid file upload.');
+ }
+
+ const detected = await fromBuffer(value.buffer);
+ if (!detected || !ALLOWED_MIME_TYPES.has(detected.mime)) {
+ throw new BadRequestException('Unsupported file type.');
+ }
+
+ const maxSize = this.getMaxSize(detected.mime);
+ if (value.size > maxSize) {
+ throw new BadRequestException(
+ `File size exceeds the maximum allowed size of ${maxSize} bytes.`
+ );
+ }
+
+ value.mimetype = detected.mime;
+ const safeBase = (value.originalname || 'upload')
+ .replace(/\.[^./\\]*$/, '')
+ .replace(/[\\/]/g, '_')
+ .slice(0, 100) || 'upload';
+ value.originalname = `${safeBase}.${detected.ext}`;
+
+ return value;
}
private getMaxSize(mimeType: string): number {
diff --git a/libraries/nestjs-libraries/src/upload/local.storage.ts b/libraries/nestjs-libraries/src/upload/local.storage.ts
index a03c1bd9..3c064f69 100644
--- a/libraries/nestjs-libraries/src/upload/local.storage.ts
+++ b/libraries/nestjs-libraries/src/upload/local.storage.ts
@@ -3,11 +3,36 @@ import { mkdirSync, unlink, writeFileSync } from 'fs';
// @ts-ignore
import mime from 'mime';
import { extname } from 'path';
+import { isSafePublicHttpsUrl } from '@gitroom/nestjs-libraries/dtos/webhooks/webhook.url.validator';
+import { ssrfSafeDispatcher } from '@gitroom/nestjs-libraries/dtos/webhooks/ssrf.safe.dispatcher';
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { fromBuffer } = require('file-type');
+
+const LOCAL_STORAGE_ALLOWED_MIME = new Set([
+ 'image/jpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/webp',
+ 'image/avif',
+ 'image/bmp',
+ 'image/tiff',
+ 'video/mp4',
+ 'audio/mpeg',
+ 'audio/mp4',
+ 'audio/wav',
+ 'audio/ogg',
+]);
export class LocalStorage implements IUploadProvider {
constructor(private uploadDirectory: string) {}
async uploadSimple(path: string) {
- const loadImage = await fetch(path);
+ if (!(await isSafePublicHttpsUrl(path))) {
+ throw new Error('Unsafe URL');
+ }
+ const loadImage = await fetch(path, {
+ // @ts-ignore — undici option, not in lib.dom fetch types
+ dispatcher: ssrfSafeDispatcher,
+ });
const contentType =
loadImage?.headers?.get('content-type') ||
loadImage?.headers?.get('Content-Type');
@@ -39,6 +64,13 @@ export class LocalStorage implements IUploadProvider {
async uploadFile(file: Express.Multer.File): Promise {
try {
+ const detected = await fromBuffer(file.buffer);
+ if (!detected || !LOCAL_STORAGE_ALLOWED_MIME.has(detected.mime)) {
+ throw new Error('Unsupported file type.');
+ }
+ const safeExt = `.${detected.ext}`;
+ const safeMime = detected.mime;
+
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
@@ -53,19 +85,16 @@ export class LocalStorage implements IUploadProvider {
.map(() => Math.round(Math.random() * 16).toString(16))
.join('');
- const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
- const publicPath = `${innerPath}/${randomName}${extname(
- file.originalname
- )}`;
+ const filePath = `${dir}/${randomName}${safeExt}`;
+ const publicPath = `${innerPath}/${randomName}${safeExt}`;
- // Logic to save the file to the filesystem goes here
writeFileSync(filePath, file.buffer);
return {
- filename: `${randomName}${extname(file.originalname)}`,
+ filename: `${randomName}${safeExt}`,
path: process.env.FRONTEND_URL + '/uploads' + publicPath,
- mimetype: file.mimetype,
- originalname: file.originalname,
+ mimetype: safeMime,
+ originalname: `${randomName}${safeExt}`,
};
} catch (err) {
console.error('Error uploading file to Local Storage:', err);
diff --git a/libraries/nestjs-libraries/src/upload/r2.uploader.ts b/libraries/nestjs-libraries/src/upload/r2.uploader.ts
index 482ef38b..a0ba2250 100644
--- a/libraries/nestjs-libraries/src/upload/r2.uploader.ts
+++ b/libraries/nestjs-libraries/src/upload/r2.uploader.ts
@@ -6,12 +6,34 @@ import {
CompleteMultipartUploadCommand,
AbortMultipartUploadCommand,
PutObjectCommand,
+ GetObjectCommand,
+ DeleteObjectCommand,
} from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { Request, Response } from 'express';
import crypto from 'crypto';
import path from 'path';
import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { fromBuffer } = require('file-type');
+
+const ALLOWED_EXT_TO_MIME: Record = {
+ '.jpg': 'image/jpeg',
+ '.jpeg': 'image/jpeg',
+ '.png': 'image/png',
+ '.gif': 'image/gif',
+ '.webp': 'image/webp',
+ '.avif': 'image/avif',
+ '.bmp': 'image/bmp',
+ '.tif': 'image/tiff',
+ '.tiff': 'image/tiff',
+ '.mp4': 'video/mp4',
+};
+
+function normalizeExtension(filename: string): string | null {
+ const ext = path.extname(filename || '').toLowerCase();
+ return ALLOWED_EXT_TO_MIME[ext] ? ext : null;
+}
const {
CLOUDFLARE_ACCOUNT_ID,
@@ -60,16 +82,21 @@ export default async function handleR2Upload(
export async function simpleUpload(
data: Buffer,
originalFilename: string,
- contentType: string
+ _contentType: string
) {
- const fileExtension = path.extname(originalFilename); // Extract extension
- const randomFilename = generateRandomString() + fileExtension; // Append extension
+ const detected = await fromBuffer(data);
+ if (!detected || !Object.values(ALLOWED_EXT_TO_MIME).includes(detected.mime)) {
+ throw new Error('Unsupported file type.');
+ }
+ const fileExtension = `.${detected.ext}`;
+ const safeContentType = detected.mime;
+ const randomFilename = generateRandomString() + fileExtension;
const params = {
Bucket: CLOUDFLARE_BUCKETNAME,
Key: randomFilename,
Body: data,
- ContentType: contentType,
+ ContentType: safeContentType,
};
const command = new PutObjectCommand({ ...params });
@@ -79,15 +106,19 @@ export async function simpleUpload(
}
export async function createMultipartUpload(req: Request, res: Response) {
- const { file, fileHash, contentType } = req.body;
- const fileExtension = path.extname(file.name); // Extract extension
- const randomFilename = generateRandomString() + fileExtension; // Append extension
+ const { file, fileHash } = req.body;
+ const safeExt = normalizeExtension(file?.name || '');
+ if (!safeExt) {
+ return res.status(400).json({ message: 'Unsupported file type.' });
+ }
+ const safeContentType = ALLOWED_EXT_TO_MIME[safeExt];
+ const randomFilename = generateRandomString() + safeExt;
try {
const params = {
Bucket: CLOUDFLARE_BUCKETNAME,
Key: `${randomFilename}`,
- ContentType: contentType,
+ ContentType: safeContentType,
Metadata: {
'x-amz-meta-file-hash': fileHash,
},
@@ -159,13 +190,6 @@ export async function completeMultipartUpload(req: Request, res: Response) {
const { key, uploadId, parts } = req.body;
try {
- const params = {
- Bucket: CLOUDFLARE_BUCKETNAME,
- Key: key,
- UploadId: uploadId,
- MultipartUpload: { Parts: parts },
- };
-
const command = new CompleteMultipartUploadCommand({
Bucket: CLOUDFLARE_BUCKETNAME,
Key: key,
@@ -173,6 +197,40 @@ export async function completeMultipartUpload(req: Request, res: Response) {
MultipartUpload: { Parts: parts },
});
const response = await R2.send(command);
+
+ const safeExt = normalizeExtension(key || '');
+ if (!safeExt) {
+ await R2.send(
+ new DeleteObjectCommand({ Bucket: CLOUDFLARE_BUCKETNAME, Key: key })
+ );
+ return res.status(400).json({ message: 'Unsupported file type.' });
+ }
+ const expectedMime = ALLOWED_EXT_TO_MIME[safeExt];
+
+ const head = await R2.send(
+ new GetObjectCommand({
+ Bucket: CLOUDFLARE_BUCKETNAME,
+ Key: key,
+ Range: 'bytes=0-4100',
+ })
+ );
+ const chunks: Buffer[] = [];
+ // @ts-ignore
+ for await (const chunk of head.Body as AsyncIterable) {
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
+ }
+ const prefix = Buffer.concat(chunks);
+ const detected = await fromBuffer(prefix);
+
+ if (!detected || detected.mime !== expectedMime) {
+ await R2.send(
+ new DeleteObjectCommand({ Bucket: CLOUDFLARE_BUCKETNAME, Key: key })
+ );
+ return res
+ .status(400)
+ .json({ message: 'File contents do not match declared type.' });
+ }
+
response.Location =
process.env.CLOUDFLARE_BUCKET_URL +
'/' +
diff --git a/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts b/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts
index 31a49760..48d976e6 100644
--- a/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts
+++ b/libraries/react-shared-libraries/src/sentry/initialize.sentry.client.ts
@@ -8,7 +8,7 @@ export const initializeSentryClient = (environment: string, dsn: string) =>
Sentry.browserTracingIntegration(),
Sentry.browserProfilingIntegration(),
Sentry.replayIntegration({
- maskAllText: true,
+ maskAllText: false,
maskAllInputs: true,
}),
Sentry.feedbackIntegration({
diff --git a/package.json b/package.json
index 1fbd3fae..e9af9fc5 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,6 @@
"dev-backend": "pnpm run --filter ./apps/backend --filter ./apps/frontend --parallel dev",
"pm2": "pnpm run pm2-run",
"publish-sdk": "pnpm run --filter ./apps/sdk publish",
- "publish-cli": "pnpm run --filter ./apps/cli publish",
"pm2-run": "pm2 delete all || true && pnpm run prisma-db-push && pnpm run --parallel pm2 && pm2 logs",
"dev:stripe": "pnpm dlx concurrently \"stripe listen --forward-to localhost:3000/stripe\" \"pnpm run dev\"",
"build": "pnpm -r --workspace-concurrency=1 --filter ./apps/frontend --filter ./apps/backend --filter ./apps/orchestrator run build",
@@ -23,7 +22,6 @@
"build:frontend": "rm -rf apps/frontend/dist && pnpm --filter ./apps/frontend run build",
"build:orchestrator": "rm -rf apps/orchestrator/dist && pnpm --filter ./apps/orchestrator run build",
"build:extension": "rm -rf apps/extension/dist && pnpm --filter ./apps/extension run build",
- "build:cli": "rm -rf apps/cli/dist && pnpm --filter ./apps/cli run build",
"dev:backend": "rm -rf apps/backend/dist && pnpm --filter ./apps/backend run dev",
"dev:frontend": "rm -rf apps/frontend/dist && pnpm --filter ./apps/frontend run dev",
"dev:orchestrator": "rm -rf apps/orchestrator/dist && pnpm --filter ./apps/orchestrator run dev",
@@ -42,7 +40,7 @@
"test": "jest --coverage --detectOpenHandles --reporters=default --reporters=jest-junit"
},
"dependencies": {
- "@ag-ui/mastra": "0.2.0",
+ "@ag-ui/mastra": "^1.0.1",
"@ai-sdk/openai": "^2.0.52",
"@atproto/api": "^0.15.15",
"@aws-sdk/client-s3": "^3.787.0",
@@ -54,18 +52,20 @@
"@copilotkit/runtime": "1.10.6",
"@dub/analytics": "^0.0.32",
"@hookform/resolvers": "^3.3.4",
- "@langchain/community": "^0.3.40",
- "@langchain/core": "^0.3.44",
- "@langchain/langgraph": "^0.2.63",
- "@langchain/openai": "^0.5.5",
- "@meronex/icons": "^4.0.0",
+ "@langchain/community": "^1.1.27",
+ "@langchain/core": "^1.1.39",
+ "@langchain/langgraph": "^1.2.8",
+ "@langchain/openai": "^1.4.3",
+ "@langchain/tavily": "^1.2.0",
"@mantine/core": "^5.10.5",
"@mantine/dates": "^5.10.5",
"@mantine/hooks": "^5.10.5",
"@mantine/modals": "^5.10.5",
- "@mastra/core": "^0.20.2",
- "@mastra/memory": "^0.15.6",
- "@mastra/pg": "^0.17.2",
+ "@mastra/core": "^1.21.0",
+ "@mastra/mcp": "^1.4.1",
+ "@mastra/memory": "^1.13.0",
+ "@mastra/pg": "^1.8.5",
+ "@meronex/icons": "^4.0.0",
"@modelcontextprotocol/sdk": "^1.22.0",
"@nest-lab/throttler-storage-redis": "^1.2.0",
"@nestjs/cli": "10.0.2",
@@ -143,7 +143,7 @@
"accept-language": "^3.0.20",
"array-move": "^4.0.0",
"async-mutex": "^0.5.0",
- "axios": "^1.7.7",
+ "axios": "^1.14.0",
"bcrypt": "^5.1.1",
"bottleneck": "^2.19.5",
"bs58": "^6.0.0",
@@ -166,6 +166,7 @@
"evp_bytestokey": "^1.0.3",
"facebook-nodejs-business-sdk": "^21.0.5",
"fast-xml-parser": "^4.5.1",
+ "file-type": "^16.5.4",
"google-auth-library": "^9.11.0",
"googleapis": "^137.1.0",
"hot-reload-extension-vite": "^1.0.13",
@@ -175,10 +176,11 @@
"i18next-resources-to-backend": "^1.2.1",
"image-to-pdf": "^3.0.2",
"ioredis": "^5.3.2",
+ "isomorphic-dompurify": "^3.10.0",
"json-to-graphql-query": "^2.2.5",
"jsonwebtoken": "^9.0.2",
"lodash": "^4.17.21",
- "mastra": "^0.13.2",
+ "mastra": "^1.3.19",
"md5": "^2.3.0",
"mime": "^3.0.0",
"mime-types": "^2.1.35",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 120c5fcb..604e01c6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,8 +17,8 @@ importers:
.:
dependencies:
'@ag-ui/mastra':
- specifier: 0.2.0
- version: 0.2.0(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@copilotkit/runtime@1.10.6(f12a340d274d725e3b3c5f801023ae18))(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
+ specifier: ^1.0.1
+ version: 1.0.1(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@copilotkit/runtime@1.10.6(53cb17873d4b9fb44549f8e02ffc4a35))(@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)
'@ai-sdk/openai':
specifier: ^2.0.52
version: 2.0.98(zod@3.25.76)
@@ -45,7 +45,7 @@ importers:
version: 1.10.6(@types/react@19.1.8)(graphql@16.13.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@copilotkit/runtime':
specifier: 1.10.6
- version: 1.10.6(f12a340d274d725e3b3c5f801023ae18)
+ version: 1.10.6(53cb17873d4b9fb44549f8e02ffc4a35)
'@dub/analytics':
specifier: ^0.0.32
version: 0.0.32
@@ -53,17 +53,20 @@ importers:
specifier: ^3.3.4
version: 3.10.0(react-hook-form@7.71.2(react@19.2.4))
'@langchain/community':
- specifier: ^0.3.40
- version: 0.3.59(9266573ded5fda56099eca4ab106a463)
+ specifier: ^1.1.27
+ version: 1.1.27(1c9dd0a5a712999c5a106df86779aa3b)
'@langchain/core':
- specifier: ^0.3.44
- version: 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ specifier: ^1.1.39
+ version: 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
'@langchain/langgraph':
- specifier: ^0.2.63
- version: 0.2.74(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.1(zod@3.25.76))
+ specifier: ^1.2.8
+ version: 1.2.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)
'@langchain/openai':
- specifier: ^0.5.5
- version: 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ specifier: ^1.4.3
+ version: 1.4.3(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/tavily':
+ specifier: ^1.2.0
+ version: 1.2.0(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))
'@mantine/core':
specifier: ^5.10.5
version: 5.10.5(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.2.4))(@mantine/hooks@5.10.5(react@19.2.4))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -77,14 +80,17 @@ importers:
specifier: ^5.10.5
version: 5.10.5(@mantine/core@5.10.5(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.2.4))(@mantine/hooks@5.10.5(react@19.2.4))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@mantine/hooks@5.10.5(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@mastra/core':
- specifier: ^0.20.2
- version: 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
+ specifier: ^1.21.0
+ version: 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
+ '@mastra/mcp':
+ specifier: ^1.4.1
+ version: 1.4.1(@cfworker/json-schema@4.1.1)(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)
'@mastra/memory':
- specifier: ^0.15.6
- version: 0.15.13(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(react@19.2.4)(zod@3.25.76)
+ specifier: ^1.13.0
+ version: 1.13.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)
'@mastra/pg':
- specifier: ^0.17.2
- version: 0.17.10(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(pg-query-stream@4.10.3(pg@8.16.3))
+ specifier: ^1.8.5
+ version: 1.8.5(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))
'@meronex/icons':
specifier: ^4.0.0
version: 4.0.0(react@19.2.4)
@@ -96,7 +102,7 @@ importers:
version: 1.2.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@nestjs/throttler@6.5.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(reflect-metadata@0.1.14))(ioredis@5.10.0)(reflect-metadata@0.1.14)
'@nestjs/cli':
specifier: 10.0.2
- version: 10.0.2(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@3.5.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ version: 10.0.2(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@3.5.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
'@nestjs/common':
specifier: ^10.0.2
version: 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2)
@@ -138,7 +144,7 @@ importers:
version: 10.45.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)
'@sentry/nextjs':
specifier: ^10.26.0
- version: 10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.2.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ version: 10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.2.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
'@sentry/profiling-node':
specifier: ^10.25.0
version: 10.45.0
@@ -177,7 +183,7 @@ importers:
version: 1.15.0
'@temporalio/worker':
specifier: ^1.14.0
- version: 1.15.0(@swc/helpers@0.5.13)(esbuild@0.25.12)(tslib@2.8.1)
+ version: 1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1)
'@temporalio/workflow':
specifier: ^1.14.0
version: 1.15.0
@@ -320,8 +326,8 @@ importers:
specifier: ^0.5.0
version: 0.5.0
axios:
- specifier: ^1.7.7
- version: 1.13.6(debug@4.4.3)
+ specifier: ^1.14.0
+ version: 1.14.0(debug@4.4.3)
bcrypt:
specifier: ^5.1.1
version: 5.1.1
@@ -388,6 +394,9 @@ importers:
fast-xml-parser:
specifier: ^4.5.1
version: 4.5.4
+ file-type:
+ specifier: ^16.5.4
+ version: 16.5.4
google-auth-library:
specifier: ^9.11.0
version: 9.15.1
@@ -415,6 +424,9 @@ importers:
ioredis:
specifier: ^5.3.2
version: 5.10.0
+ isomorphic-dompurify:
+ specifier: ^3.10.0
+ version: 3.10.0(@noble/hashes@2.0.1)(canvas@2.11.2)
json-to-graphql-query:
specifier: ^2.2.5
version: 2.3.0
@@ -425,8 +437,8 @@ importers:
specifier: ^4.17.21
version: 4.17.23
mastra:
- specifier: ^0.13.2
- version: 0.13.4(@cfworker/json-schema@4.1.1)(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.5.4)(zod@3.25.76)
+ specifier: ^1.3.19
+ version: 1.3.19(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)
md5:
specifier: ^2.3.0
version: 2.3.0
@@ -450,7 +462,7 @@ importers:
version: 3.0.1(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))
nestjs-temporal-core:
specifier: ^3.2.0
- version: 3.2.3(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.25.12)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.1.14)(rxjs@7.8.2)
+ version: 3.2.3(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.1.14)(rxjs@7.8.2)
next:
specifier: 16.2.1
version: 16.2.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)
@@ -655,7 +667,7 @@ importers:
version: 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@nestjs/microservices@10.4.22)(@nestjs/platform-express@10.4.22)
'@pmmmwh/react-refresh-webpack-plugin':
specifier: ^0.5.7
- version: 0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ version: 0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
'@svgr/webpack':
specifier: ^8.0.1
version: 8.1.0(typescript@5.5.4)
@@ -670,7 +682,7 @@ importers:
version: 1.5.7(@swc/helpers@0.5.13)
'@tailwindcss/vite':
specifier: ^4.0.17
- version: 4.2.1(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))
+ version: 4.2.1(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))
'@testing-library/react':
specifier: 16.3.0
version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -718,7 +730,7 @@ importers:
version: 7.18.0(eslint@8.57.0)(typescript@5.5.4)
'@vitejs/plugin-react':
specifier: ^4.2.0
- version: 4.7.0(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))
+ version: 4.7.0(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))
'@vitest/coverage-v8':
specifier: 1.6.0
version: 1.6.0(vitest@3.1.4)
@@ -793,30 +805,28 @@ importers:
version: 0.10.0
ts-jest:
specifier: ^29.1.0
- version: 29.4.6(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.25.12)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4)
+ version: 29.4.6(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.27.7)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4)
ts-node:
specifier: 10.9.2
version: 10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)
tsup:
specifier: ^8.5.0
- version: 8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.4.38)(typescript@5.5.4)(yaml@2.8.2)
+ version: 8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.4.38)(typescript@5.5.4)(yaml@2.8.3)
typescript:
specifier: 5.5.4
version: 5.5.4
vite:
specifier: ^6.3.5
- version: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ version: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
vite-tsconfig-paths:
specifier: ^5.1.4
- version: 5.1.4(typescript@5.5.4)(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))
+ version: 5.1.4(typescript@5.5.4)(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))
vitest:
specifier: 3.1.4
- version: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ version: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
apps/backend: {}
- apps/cli: {}
-
apps/commands: {}
apps/extension: {}
@@ -866,14 +876,14 @@ packages:
'@ag-ui/client': '>=0.0.42'
'@ag-ui/core': '>=0.0.42'
- '@ag-ui/mastra@0.2.0':
- resolution: {integrity: sha512-4d2LwT15I/B87HSeEMqqtdy2n9L+FieAhVmYK6XFSImWnXS4G0YVe+qfncIHMwRnq4XtGM8F9uq6tzaMK8/qdA==}
+ '@ag-ui/mastra@1.0.1':
+ resolution: {integrity: sha512-8XcsAdZVweiQU7HeZW4sD9x4oXOk3VJ7piK3eihwIzVkEvd8YtfiPgwNlOzNxT6my8IHaHIuKtAlxLS/wo3TKQ==}
peerDependencies:
- '@ag-ui/client': '>=0.0.40'
- '@ag-ui/core': '>=0.0.39'
- '@copilotkit/runtime': ^1.10.5
- '@mastra/core': '>=0.20.1'
- zod: ^3.25.67
+ '@ag-ui/client': '>=0.0.44'
+ '@ag-ui/core': '>=0.0.44'
+ '@copilotkit/runtime': 0.0.0-mme-ag-ui-0-0-46-20260227141603
+ '@mastra/client-js': '>=1.0.0-0 <2.0.0-0'
+ '@mastra/core': '>=1.0.0-0 <2.0.0-0'
'@ag-ui/proto@0.0.47':
resolution: {integrity: sha512-+KCrkeVeR6MulWoYUq9Fwm22gFlI9aKG50eKYRtbTM/Yuei/Che5vjbF297XfSnGUunzScrOmdnTeTCprrtb7A==}
@@ -926,12 +936,24 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
+ '@ai-sdk/provider-utils@3.0.20':
+ resolution: {integrity: sha512-iXHVe0apM2zUEzauqJwqmpC37A5rihrStAih5Ks+JE32iTe4LZ58y17UGBjpQQTCRw9YxMeo2UFLxLpBluyvLQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.25.76 || ^4.1.8
+
'@ai-sdk/provider-utils@3.0.22':
resolution: {integrity: sha512-fFT1KfUUKktfAFm5mClJhS1oux9tP2qgzmEZVl5UdwltQ1LO/s8hd7znVrgKzivwv1s1FIPza0s9OpJaNB/vHw==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
+ '@ai-sdk/provider-utils@4.0.0':
+ resolution: {integrity: sha512-HyCyOls9I3a3e38+gtvOJOEjuw9KRcvbBnCL5GBuSmJvS9Jh9v3fz7pRC6ha1EUo/ZH1zwvLWYXBMtic8MTguA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.25.76 || ^4.1.8
+
'@ai-sdk/provider@1.1.3':
resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==}
engines: {node: '>=18'}
@@ -944,6 +966,14 @@ packages:
resolution: {integrity: sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==}
engines: {node: '>=18'}
+ '@ai-sdk/provider@3.0.0':
+ resolution: {integrity: sha512-m9ka3ptkPQbaHHZHqDXDF9C9B5/Mav0KTdky1k2HZ3/nrW2t1AgObxIVPyGDWQNS9FXT/FS6PIoSjpcP/No8rQ==}
+ engines: {node: '>=18'}
+
+ '@ai-sdk/provider@3.0.5':
+ resolution: {integrity: sha512-2Xmoq6DBJqmSl80U6V9z5jJSJP7ehaJJQMy2iFUqTay06wdCqTnPVBBQbtEL8RCChenL+q5DC5H5WzU3vV3v8w==}
+ engines: {node: '>=18'}
+
'@ai-sdk/react@1.2.12':
resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==}
engines: {node: '>=18'}
@@ -1022,6 +1052,21 @@ packages:
peerDependencies:
'@types/json-schema': ^7.0.15
+ '@asamuzakjp/css-color@5.1.11':
+ resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
+ '@asamuzakjp/dom-selector@7.1.1':
+ resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
+ '@asamuzakjp/generational-cache@1.0.1':
+ resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
+ '@asamuzakjp/nwsapi@2.3.9':
+ resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
+
'@atproto/api@0.15.27':
resolution: {integrity: sha512-ok/WGafh1nz4t8pEQGtAF/32x2E2VDWU4af6BajkO5Gky2jp2q6cv6aB2A5yuvNNcc3XkYMYipsqVHVwLPMF9g==}
@@ -1920,6 +1965,10 @@ packages:
'@borewit/text-codec@0.2.1':
resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==}
+ '@bramus/specificity@2.4.2':
+ resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
+ hasBin: true
+
'@browserbasehq/sdk@2.7.0':
resolution: {integrity: sha512-1iwuj3fChplMq+S66M9tGb9ZXA4e7Vi8MjqQQ6/T6rzoAWLGfDnEAPbgTOU479o+Mi3of5/6YXk1oIHKTw0NBw==}
@@ -1944,11 +1993,11 @@ packages:
'@cfworker/json-schema@4.1.1':
resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==}
- '@clack/core@0.5.0':
- resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==}
+ '@clack/core@1.2.0':
+ resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==}
- '@clack/prompts@0.11.0':
- resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==}
+ '@clack/prompts@1.2.0':
+ resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==}
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
@@ -1995,6 +2044,42 @@ packages:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
+ '@csstools/color-helpers@6.0.2':
+ resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==}
+ engines: {node: '>=20.19.0'}
+
+ '@csstools/css-calc@3.2.0':
+ resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^4.0.0
+ '@csstools/css-tokenizer': ^4.0.0
+
+ '@csstools/css-color-parser@4.1.0':
+ resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^4.0.0
+ '@csstools/css-tokenizer': ^4.0.0
+
+ '@csstools/css-parser-algorithms@4.0.0':
+ resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^4.0.0
+
+ '@csstools/css-syntax-patches-for-csstree@1.1.3':
+ resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==}
+ peerDependencies:
+ css-tree: ^3.2.1
+ peerDependenciesMeta:
+ css-tree:
+ optional: true
+
+ '@csstools/css-tokenizer@4.0.0':
+ resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
+ engines: {node: '>=20.19.0'}
+
'@cypress/request-promise@5.0.0':
resolution: {integrity: sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w==}
engines: {node: '>=0.10.0'}
@@ -2104,6 +2189,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.27.7':
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.25.12':
resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines: {node: '>=18'}
@@ -2116,6 +2207,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.27.7':
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.25.12':
resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines: {node: '>=18'}
@@ -2128,6 +2225,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.27.7':
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.25.12':
resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines: {node: '>=18'}
@@ -2140,6 +2243,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.27.7':
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.25.12':
resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines: {node: '>=18'}
@@ -2152,6 +2261,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.27.7':
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.12':
resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines: {node: '>=18'}
@@ -2164,6 +2279,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.27.7':
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.25.12':
resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines: {node: '>=18'}
@@ -2176,6 +2297,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.27.7':
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.12':
resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines: {node: '>=18'}
@@ -2188,6 +2315,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.27.7':
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.25.12':
resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines: {node: '>=18'}
@@ -2200,6 +2333,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.27.7':
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.12':
resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines: {node: '>=18'}
@@ -2212,6 +2351,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.27.7':
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.12':
resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines: {node: '>=18'}
@@ -2224,6 +2369,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.27.7':
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.12':
resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines: {node: '>=18'}
@@ -2236,6 +2387,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.27.7':
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.12':
resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines: {node: '>=18'}
@@ -2248,6 +2405,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.27.7':
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.12':
resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines: {node: '>=18'}
@@ -2260,6 +2423,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.27.7':
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.12':
resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines: {node: '>=18'}
@@ -2272,6 +2441,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.27.7':
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.12':
resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines: {node: '>=18'}
@@ -2284,6 +2459,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.27.7':
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.12':
resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines: {node: '>=18'}
@@ -2296,6 +2477,12 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.27.7':
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-arm64@0.25.12':
resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines: {node: '>=18'}
@@ -2308,6 +2495,12 @@ packages:
cpu: [arm64]
os: [netbsd]
+ '@esbuild/netbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.12':
resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines: {node: '>=18'}
@@ -2320,6 +2513,12 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.27.7':
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.25.12':
resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines: {node: '>=18'}
@@ -2332,6 +2531,12 @@ packages:
cpu: [arm64]
os: [openbsd]
+ '@esbuild/openbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.12':
resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines: {node: '>=18'}
@@ -2344,6 +2549,12 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.27.7':
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openharmony-arm64@0.25.12':
resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
engines: {node: '>=18'}
@@ -2356,6 +2567,12 @@ packages:
cpu: [arm64]
os: [openharmony]
+ '@esbuild/openharmony-arm64@0.27.7':
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
'@esbuild/sunos-x64@0.25.12':
resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines: {node: '>=18'}
@@ -2368,6 +2585,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.27.7':
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.25.12':
resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines: {node: '>=18'}
@@ -2380,6 +2603,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.27.7':
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.12':
resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines: {node: '>=18'}
@@ -2392,6 +2621,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.27.7':
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.12':
resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
@@ -2404,6 +2639,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.27.7':
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.9.1':
resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2431,6 +2672,15 @@ packages:
resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==}
engines: {node: '>=18'}
+ '@exodus/bytes@1.15.0':
+ resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+ peerDependencies:
+ '@noble/hashes': ^1.8.0 || ^2.0.0
+ peerDependenciesMeta:
+ '@noble/hashes':
+ optional: true
+
'@expo/devcert@1.2.1':
resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==}
@@ -2867,6 +3117,10 @@ packages:
resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==}
engines: {node: '>=12'}
+ '@isaacs/ttlcache@2.1.4':
+ resolution: {integrity: sha512-7kMz0BJpMvgAMkyglums7B2vtrn5g0a0am77JY0GjkZZNetOBCFn7AG7gKCwT0QPiXyxW7YIQSgtARknUEOcxQ==}
+ engines: {node: '>=12'}
+
'@istanbuljs/load-nyc-config@1.1.0':
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
@@ -3129,6 +3383,22 @@ packages:
peerDependencies:
'@langchain/core': '>=0.3.58 <0.4.0'
+ '@langchain/classic@1.0.27':
+ resolution: {integrity: sha512-dMq8rgt3cy/QoHrB6HIKobievyW00DfuZcASG0aMy47Pf5TQq3vZM2tLT1kkCBe2yJnncQwqmAzxoEgFLJZrcw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@langchain/core': ^1.0.0
+ cheerio: '*'
+ peggy: ^5.1.0
+ typeorm: '*'
+ peerDependenciesMeta:
+ cheerio:
+ optional: true
+ peggy:
+ optional: true
+ typeorm:
+ optional: true
+
'@langchain/community@0.3.59':
resolution: {integrity: sha512-lYoVFC9wArWMXaixDgIadTE22jk4ZYAvSHHmwaMRagkGr5f4kyqMeJ83UUeW76XPx2cBy2fRSO+acSgqSuWE6A==}
engines: {node: '>=18'}
@@ -3509,10 +3779,379 @@ packages:
youtubei.js:
optional: true
+ '@langchain/community@1.1.27':
+ resolution: {integrity: sha512-s2U3w7QV7QpkFtY1eZMni4poz+nKLFclpDi3a7hUbZ67ttsGaU9WkZ2BiLuzLIs+IFaUvON/KcGkE8EqAl9aPA==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@arcjet/redact': ^v1.2.0
+ '@aws-crypto/sha256-js': ^5.0.0
+ '@aws-sdk/client-dynamodb': ^3.1001.0
+ '@aws-sdk/client-lambda': ^3.1001.0
+ '@aws-sdk/client-s3': ^3.1001.0
+ '@aws-sdk/client-sagemaker-runtime': ^3.1001.0
+ '@aws-sdk/client-sfn': ^3.1001.0
+ '@aws-sdk/credential-provider-node': ^3.388.0
+ '@aws-sdk/dsql-signer': '*'
+ '@azure/search-documents': ^12.2.0
+ '@azure/storage-blob': ^12.31.0
+ '@browserbasehq/sdk': '*'
+ '@browserbasehq/stagehand': ^1.0.0
+ '@clickhouse/client': ^0.2.5
+ '@datastax/astra-db-ts': ^1.0.0
+ '@elastic/elasticsearch': ^8.4.0
+ '@getmetal/metal-sdk': '*'
+ '@getzep/zep-cloud': ^1.0.6
+ '@getzep/zep-js': ^2.0.2
+ '@gomomento/sdk-core': ^1.117.2
+ '@google-cloud/storage': ^6.10.1 || ^7.7.0
+ '@gradientai/nodejs-sdk': ^1.2.0
+ '@huggingface/inference': ^4.13.14
+ '@huggingface/transformers': ^3.8.1
+ '@ibm-cloud/watsonx-ai': '*'
+ '@lancedb/lancedb': ^0.19.1
+ '@langchain/core': ^1.1.38
+ '@layerup/layerup-security': ^1.5.12
+ '@libsql/client': ^0.17.0
+ '@mendable/firecrawl-js': ^4.15.2
+ '@mlc-ai/web-llm': '*'
+ '@mozilla/readability': '*'
+ '@neondatabase/serverless': '*'
+ '@notionhq/client': ^5.11.1
+ '@opensearch-project/opensearch': '*'
+ '@pinecone-database/pinecone': '*'
+ '@planetscale/database': ^1.8.0
+ '@premai/prem-sdk': ^0.3.25
+ '@qdrant/js-client-rest': '*'
+ '@raycast/api': ^1.55.2
+ '@rockset/client': ^0.9.1
+ '@smithy/eventstream-codec': ^4.2.10
+ '@smithy/protocol-http': ^5.3.10
+ '@smithy/signature-v4': ^5.3.10
+ '@smithy/util-utf8': ^4.2.2
+ '@spider-cloud/spider-client': ^0.2.0
+ '@supabase/supabase-js': ^2.45.0
+ '@tensorflow-models/universal-sentence-encoder': '*'
+ '@tensorflow/tfjs-core': '*'
+ '@upstash/ratelimit': ^1.1.3 || ^2.0.3
+ '@upstash/redis': ^1.20.6
+ '@upstash/vector': ^1.1.1
+ '@vercel/kv': '*'
+ '@vercel/postgres': '*'
+ '@writerai/writer-sdk': ^3.6.0
+ '@xata.io/client': ^0.30.1
+ '@xenova/transformers': '*'
+ '@zilliz/milvus2-sdk-node': '>=2.3.5'
+ apify-client: ^2.22.2
+ assemblyai: ^4.25.1
+ azion: ^3.1.2
+ better-sqlite3: '>=9.4.0 <13.0.0'
+ cassandra-driver: ^4.7.2
+ cborg: ^4.5.8
+ cheerio: ^1.2.0
+ chromadb: '*'
+ closevector-common: 0.1.3
+ closevector-node: 0.1.6
+ closevector-web: 0.1.6
+ cohere-ai: '*'
+ convex: ^1.32.0
+ couchbase: ^4.6.1
+ crypto-js: ^4.2.0
+ d3-dsv: ^3.0.1
+ discord.js: ^14.25.1
+ duck-duck-scrape: ^2.2.5
+ epub2: ^3.0.1
+ faiss-node: '*'
+ fast-xml-parser: '*'
+ firebase-admin: ^13.6.1
+ google-auth-library: '*'
+ googleapis: '*'
+ hnswlib-node: ^3.0.0
+ html-to-text: ^9.0.5
+ ibm-cloud-sdk-core: '*'
+ ignore: ^7.0.5
+ interface-datastore: ^9.0.2
+ ioredis: ^5.3.2
+ it-all: ^3.0.4
+ jsdom: '*'
+ jsonwebtoken: ^9.0.3
+ lodash: ^4.17.23
+ lunary: ^0.7.10
+ mammoth: ^1.11.0
+ mariadb: ^3.5.1
+ mem0ai: ^2.2.4
+ mongodb: '*'
+ mysql2: ^3.19.1
+ neo4j-driver: '*'
+ node-llama-cpp: '>=3.0.0'
+ notion-to-md: ^3.1.0
+ officeparser: ^6.0.4
+ openai: '*'
+ pdf-parse: 2.4.5
+ pg: ^8.11.0
+ pg-copy-streams: ^7.0.0
+ pickleparser: ^0.2.1
+ playwright: ^1.58.2
+ portkey-ai: ^3.0.3
+ puppeteer: '*'
+ pyodide: '>=0.24.1 <0.27.0'
+ redis: '*'
+ replicate: '*'
+ sonix-speech-recognition: ^2.1.1
+ srt-parser-2: ^1.2.3
+ typeorm: ^0.3.28
+ typesense: ^3.0.1
+ usearch: ^1.1.1
+ voy-search: 0.6.3
+ weaviate-client: '*'
+ word-extractor: '*'
+ ws: ^8.14.2
+ youtubei.js: '*'
+ peerDependenciesMeta:
+ '@arcjet/redact':
+ optional: true
+ '@aws-crypto/sha256-js':
+ optional: true
+ '@aws-sdk/client-dynamodb':
+ optional: true
+ '@aws-sdk/client-lambda':
+ optional: true
+ '@aws-sdk/client-s3':
+ optional: true
+ '@aws-sdk/client-sagemaker-runtime':
+ optional: true
+ '@aws-sdk/client-sfn':
+ optional: true
+ '@aws-sdk/credential-provider-node':
+ optional: true
+ '@aws-sdk/dsql-signer':
+ optional: true
+ '@azure/search-documents':
+ optional: true
+ '@azure/storage-blob':
+ optional: true
+ '@browserbasehq/sdk':
+ optional: true
+ '@clickhouse/client':
+ optional: true
+ '@datastax/astra-db-ts':
+ optional: true
+ '@elastic/elasticsearch':
+ optional: true
+ '@getmetal/metal-sdk':
+ optional: true
+ '@getzep/zep-cloud':
+ optional: true
+ '@getzep/zep-js':
+ optional: true
+ '@gomomento/sdk-core':
+ optional: true
+ '@google-cloud/storage':
+ optional: true
+ '@gradientai/nodejs-sdk':
+ optional: true
+ '@huggingface/inference':
+ optional: true
+ '@huggingface/transformers':
+ optional: true
+ '@lancedb/lancedb':
+ optional: true
+ '@layerup/layerup-security':
+ optional: true
+ '@libsql/client':
+ optional: true
+ '@mendable/firecrawl-js':
+ optional: true
+ '@mlc-ai/web-llm':
+ optional: true
+ '@mozilla/readability':
+ optional: true
+ '@neondatabase/serverless':
+ optional: true
+ '@notionhq/client':
+ optional: true
+ '@opensearch-project/opensearch':
+ optional: true
+ '@pinecone-database/pinecone':
+ optional: true
+ '@planetscale/database':
+ optional: true
+ '@premai/prem-sdk':
+ optional: true
+ '@qdrant/js-client-rest':
+ optional: true
+ '@raycast/api':
+ optional: true
+ '@rockset/client':
+ optional: true
+ '@smithy/eventstream-codec':
+ optional: true
+ '@smithy/protocol-http':
+ optional: true
+ '@smithy/signature-v4':
+ optional: true
+ '@smithy/util-utf8':
+ optional: true
+ '@spider-cloud/spider-client':
+ optional: true
+ '@supabase/supabase-js':
+ optional: true
+ '@tensorflow-models/universal-sentence-encoder':
+ optional: true
+ '@tensorflow/tfjs-core':
+ optional: true
+ '@upstash/ratelimit':
+ optional: true
+ '@upstash/redis':
+ optional: true
+ '@upstash/vector':
+ optional: true
+ '@vercel/kv':
+ optional: true
+ '@vercel/postgres':
+ optional: true
+ '@writerai/writer-sdk':
+ optional: true
+ '@xata.io/client':
+ optional: true
+ '@xenova/transformers':
+ optional: true
+ '@zilliz/milvus2-sdk-node':
+ optional: true
+ apify-client:
+ optional: true
+ assemblyai:
+ optional: true
+ azion:
+ optional: true
+ better-sqlite3:
+ optional: true
+ cassandra-driver:
+ optional: true
+ cborg:
+ optional: true
+ cheerio:
+ optional: true
+ chromadb:
+ optional: true
+ closevector-common:
+ optional: true
+ closevector-node:
+ optional: true
+ closevector-web:
+ optional: true
+ cohere-ai:
+ optional: true
+ convex:
+ optional: true
+ couchbase:
+ optional: true
+ crypto-js:
+ optional: true
+ d3-dsv:
+ optional: true
+ discord.js:
+ optional: true
+ duck-duck-scrape:
+ optional: true
+ epub2:
+ optional: true
+ faiss-node:
+ optional: true
+ fast-xml-parser:
+ optional: true
+ firebase-admin:
+ optional: true
+ google-auth-library:
+ optional: true
+ googleapis:
+ optional: true
+ hnswlib-node:
+ optional: true
+ html-to-text:
+ optional: true
+ ignore:
+ optional: true
+ interface-datastore:
+ optional: true
+ ioredis:
+ optional: true
+ it-all:
+ optional: true
+ jsdom:
+ optional: true
+ jsonwebtoken:
+ optional: true
+ lodash:
+ optional: true
+ lunary:
+ optional: true
+ mammoth:
+ optional: true
+ mariadb:
+ optional: true
+ mem0ai:
+ optional: true
+ mongodb:
+ optional: true
+ mysql2:
+ optional: true
+ neo4j-driver:
+ optional: true
+ node-llama-cpp:
+ optional: true
+ notion-to-md:
+ optional: true
+ officeparser:
+ optional: true
+ pdf-parse:
+ optional: true
+ pg:
+ optional: true
+ pg-copy-streams:
+ optional: true
+ pickleparser:
+ optional: true
+ playwright:
+ optional: true
+ portkey-ai:
+ optional: true
+ puppeteer:
+ optional: true
+ pyodide:
+ optional: true
+ redis:
+ optional: true
+ replicate:
+ optional: true
+ sonix-speech-recognition:
+ optional: true
+ srt-parser-2:
+ optional: true
+ typeorm:
+ optional: true
+ typesense:
+ optional: true
+ usearch:
+ optional: true
+ voy-search:
+ optional: true
+ weaviate-client:
+ optional: true
+ word-extractor:
+ optional: true
+ ws:
+ optional: true
+ youtubei.js:
+ optional: true
+
'@langchain/core@0.3.80':
resolution: {integrity: sha512-vcJDV2vk1AlCwSh3aBm/urQ1ZrlXFFBocv11bz/NBUfLWD5/UDNMzwPdaAd2dKvNmTWa9FM2lirLU3+JCf4cRA==}
engines: {node: '>=18'}
+ '@langchain/core@1.1.39':
+ resolution: {integrity: sha512-DP9c7TREy6iA7HnywstmUAsNyJNYTFpRg2yBfQ+6H0l1HnvQzei9GsQ36GeOLxgRaD3vm9K8urCcawSC7yQpCw==}
+ engines: {node: '>=20'}
+
'@langchain/google-common@0.1.8':
resolution: {integrity: sha512-8auqWw2PMPhcHQHS+nMN3tVZrUPgSLckUaFeOHDOeSBiDvBd4KCybPwyl2oCwMDGvmyIxvOOckkMdeGaJ92vpQ==}
engines: {node: '>=18'}
@@ -3525,25 +4164,11 @@ packages:
peerDependencies:
'@langchain/core': '>=0.2.21 <0.4.0'
- '@langchain/langgraph-checkpoint@0.0.18':
- resolution: {integrity: sha512-IS7zJj36VgY+4pf8ZjsVuUWef7oTwt1y9ylvwu0aLuOn1d0fg05Om9DLm3v2GZ2Df6bhLV1kfWAM0IAl9O5rQQ==}
+ '@langchain/langgraph-checkpoint@1.0.1':
+ resolution: {integrity: sha512-HM0cJLRpIsSlWBQ/xuDC67l52SqZ62Bh2Y61DX+Xorqwoh5e1KxYvfCD7GnSTbWWhjBOutvnR0vPhu4orFkZfw==}
engines: {node: '>=18'}
peerDependencies:
- '@langchain/core': '>=0.2.31 <0.4.0'
-
- '@langchain/langgraph-sdk@0.0.112':
- resolution: {integrity: sha512-/9W5HSWCqYgwma6EoOspL4BGYxGxeJP6lIquPSF4FA0JlKopaUv58ucZC3vAgdJyCgg6sorCIV/qg7SGpEcCLw==}
- peerDependencies:
- '@langchain/core': '>=0.2.31 <0.4.0'
- react: 19.2.4
- react-dom: 19.2.4
- peerDependenciesMeta:
- '@langchain/core':
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
+ '@langchain/core': ^1.0.1
'@langchain/langgraph-sdk@0.0.70':
resolution: {integrity: sha512-O8I12bfeMVz5fOrXnIcK4IdRf50IqyJTO458V56wAIHLNoi4H8/JHM+2M+Y4H2PtslXIGnvomWqlBd0eY5z/Og==}
@@ -3570,11 +4195,32 @@ packages:
react-dom:
optional: true
- '@langchain/langgraph@0.2.74':
- resolution: {integrity: sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==}
+ '@langchain/langgraph-sdk@1.8.8':
+ resolution: {integrity: sha512-4OoqFAvPloOTZ6oPxXbJngz4FLJO8QSXb+BQV3qvNTvmfu1LQA7cCEqSNLYX9MoC340PbnDkHNgUtjajwkDHRg==}
+ peerDependencies:
+ '@langchain/core': ^1.1.16
+ react: 19.2.4
+ react-dom: 19.2.4
+ svelte: ^4.0.0 || ^5.0.0
+ vue: ^3.0.0
+ peerDependenciesMeta:
+ '@langchain/core':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ svelte:
+ optional: true
+ vue:
+ optional: true
+
+ '@langchain/langgraph@1.2.8':
+ resolution: {integrity: sha512-kKkRpC5xFz1e6vPivE7lwRJa5oahLAMaVQvVGZdTa6uJIchIYJDIuM1n93FqGvg8aYVcgYU4FENtKKC5Eh1JYw==}
engines: {node: '>=18'}
peerDependencies:
- '@langchain/core': '>=0.2.36 <0.3.0 || >=0.3.40 < 0.4.0'
+ '@langchain/core': ^1.1.16
+ zod: ^3.25.32 || ^4.2.0
zod-to-json-schema: ^3.x
peerDependenciesMeta:
zod-to-json-schema:
@@ -3592,12 +4238,36 @@ packages:
peerDependencies:
'@langchain/core': '>=0.3.58 <0.4.0'
+ '@langchain/openai@1.4.1':
+ resolution: {integrity: sha512-jaHk4TnLqWrQ1KYmavvwCImW6x8pBy6LLTK73tzSMg7HBLbq0g/l7EkpMcxZWDOvyufuCXUqO2bj47apcOhw6Q==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@langchain/core': ^1.1.38
+
+ '@langchain/openai@1.4.3':
+ resolution: {integrity: sha512-psf/e06nJ9YFXG67VVaKw6dAEeHLSc6wSbB3+sXpe6zEdpvC7+fyiEIxY6HntBkBU/uyqdeSt8Uu5WL+pQD+vg==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@langchain/core': ^1.1.39
+
+ '@langchain/tavily@1.2.0':
+ resolution: {integrity: sha512-aPLPgtw8+b/Rnr3H+X8H8z98T/Y7JuCE4B5eqRDHoEWgZvMDUFF7divqwQqCTMq2deQttlVrm5bN5JbKaAR7/w==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@langchain/core': ^1.0.0
+
'@langchain/textsplitters@0.1.0':
resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==}
engines: {node: '>=18'}
peerDependencies:
'@langchain/core': '>=0.2.21 <0.4.0'
+ '@langchain/textsplitters@1.0.1':
+ resolution: {integrity: sha512-rheJlB01iVtrOUzttscutRgLybPH9qR79EyzBEbf1u97ljWyuxQfCwIWK+SjoQTM9O8M7GGLLRBSYE26Jmcoww==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@langchain/core': ^1.0.0
+
'@langchain/weaviate@0.2.3':
resolution: {integrity: sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w==}
engines: {node: '>=18'}
@@ -3688,33 +4358,44 @@ packages:
peerDependencies:
zod: ^3.25.0 || ^4.0.0
- '@mastra/deployer@0.19.1':
- resolution: {integrity: sha512-J1jC+BnR7VPEodraHO7IWswhAxbDOX/TPuO3+0kOM5efS95nHdTx2P6HwoensRdpyOmoimN3nHG8ApeP1VePOA==}
+ '@mastra/core@1.21.0':
+ resolution: {integrity: sha512-DgFZpdvR1XR6tE/ocX+bhjlzGfjuSDPfiF0aWFYXpmvs66fKeLE/S/tWxkhWOPGr64e3fCU6U1GGOaPI1nh7OA==}
+ engines: {node: '>=22.13.0'}
peerDependencies:
- '@mastra/core': '>=0.19.1-0 <0.20.0-0'
zod: ^3.25.0 || ^4.0.0
- '@mastra/loggers@0.10.19':
- resolution: {integrity: sha512-H4qTgqKt3YJxz6B1I0lOPqRpOpR8gEzYYNZ6iO/TGQ11r+wvug/i80MAKr0B1IBZvr9l18vr7wjYCdTxPqaAGg==}
+ '@mastra/deployer@1.21.0':
+ resolution: {integrity: sha512-+B9z1bNCS+cXHHy8GRtNzYP9N5zjRucK3MicSc28fzPCxGib7SbqDJdLvUIRdtaxBLG9chKqM2enToPuALKwSQ==}
+ engines: {node: '>=22.13.0'}
peerDependencies:
- '@mastra/core': '>=0.18.1-0 <0.25.0-0'
-
- '@mastra/mcp@0.13.5':
- resolution: {integrity: sha512-GFHOHTbUY8PuEwzObIVCaHF855M4S4xIOnNJE1WJeEsPvWOllyL+y1Wz3HGjusrAfZIDrZ8j8Z5Diqxf3KTW/A==}
- peerDependencies:
- '@mastra/core': '>=0.20.1-0 <0.22.0-0'
+ '@mastra/core': '>=1.0.0-0 <2.0.0-0'
zod: ^3.25.0 || ^4.0.0
- '@mastra/memory@0.15.13':
- resolution: {integrity: sha512-88RBgT1VIseyvKdkzVJFw88gtFmf/+6vOMwJaeLzSq++oHtoD+A0nkUvCtuX3aYsicpf5IPUBnvEgJ9pH6J/gg==}
+ '@mastra/loggers@1.1.0':
+ resolution: {integrity: sha512-SwEsBsckP3/00th4iV80k5/rj2OjaArIR8fedPq4MMnWS1a6HurXjnFF4ISGHuiTVvsx15a+3sRVy0IfSFp+QQ==}
+ engines: {node: '>=22.13.0'}
peerDependencies:
- '@mastra/core': '>=0.20.1-0 <0.25.0-0'
+ '@mastra/core': '>=1.0.0-0 <2.0.0-0'
+
+ '@mastra/mcp@1.4.1':
+ resolution: {integrity: sha512-LvFSh7NlKB7sMNfJKy/38h4QNN49Kqo6MmeM4mT6l3D8obUyYaFtrscmosuEoD7JnRx0ASuptGWKW0x+Afxp1Q==}
+ engines: {node: '>=22.13.0'}
+ peerDependencies:
+ '@mastra/core': '>=1.0.0-0 <2.0.0-0'
zod: ^3.25.0 || ^4.0.0
- '@mastra/pg@0.17.10':
- resolution: {integrity: sha512-+aP8FpDI6Y32ZO4TYqVdxWtoJXc4ZUp0joltRZwUwazond8WB7i7ZTw8BzWoaKsEcEumf5EMoYwxUPJrV90sZA==}
+ '@mastra/memory@1.13.0':
+ resolution: {integrity: sha512-fNAQ/C2ArKhmZwcRoy8oD1dEDKdIXyZrFMFX52GJzPcntlKx5YsL58BOB3kilFi/kFzfEE6h3nemv0CgI7l+SA==}
+ engines: {node: '>=22.13.0'}
peerDependencies:
- '@mastra/core': '>=0.20.1-0 <0.25.0-0'
+ '@mastra/core': '>=1.4.1-0 <2.0.0-0'
+ zod: ^3.25.0 || ^4.0.0
+
+ '@mastra/pg@1.8.5':
+ resolution: {integrity: sha512-TNHA1KfgLrFjkjxuCDvn0s2Kqd9J4ivxbqGxOG4LA43SP8djYVoergigk5Us1JDktFIxGQru/HmS3HIOti0/tg==}
+ engines: {node: '>=22.13.0'}
+ peerDependencies:
+ '@mastra/core': '>=1.4.0-0 <2.0.0-0'
'@mastra/schema-compat@0.11.4':
resolution: {integrity: sha512-oh3+enP3oYftZlmJAKQQj5VXR86KgTMwfMnwALZyLk04dPSWfVD2wGytoDg5Qbi3rX9qHj6g0rMNa0CUjR6aTg==}
@@ -3722,16 +4403,17 @@ packages:
ai: ^4.0.0 || ^5.0.0
zod: ^3.25.0 || ^4.0.0
- '@mastra/schema-compat@0.11.9':
- resolution: {integrity: sha512-LXEChx5n3bcuSFWQ5Wn9K2spLEpzHGf+DCnAeryuecpOo8VGLJ2QCK9Ugsnfjuc6hC0Ha73HvL1AD8zDhjmYOg==}
+ '@mastra/schema-compat@1.2.7':
+ resolution: {integrity: sha512-t63E0f5HcH8neXPfs3D5x4qqQM6Pf/pbhFUVk0cTC0bFo6609sT/+189I+2HY4sbAF3uzurOgy2fXIS4vfMkOA==}
+ engines: {node: '>=22.13.0'}
peerDependencies:
- ai: ^4.0.0 || ^5.0.0
zod: ^3.25.0 || ^4.0.0
- '@mastra/server@0.19.1':
- resolution: {integrity: sha512-JN1CyUf8C+MjpCuGVaRA2RMpUOsl2Cum2oNm5NZlwa9CIKdiU4pO2mF3Fa7/I7xsx3rQSBoaFv9ItvFXOob+MQ==}
+ '@mastra/server@1.21.0':
+ resolution: {integrity: sha512-VZTzNlsumEpibXjvDDyTbY9UzBgwa+TGO7CRReP+oaqfxu+kFi98ni9LuVGRQ8Hm9RhzuaO+PeRaVkxKgLN9oQ==}
+ engines: {node: '>=22.13.0'}
peerDependencies:
- '@mastra/core': '>=0.19.1-0 <0.20.0-0'
+ '@mastra/core': '>=1.13.2-0 <2.0.0-0'
zod: ^3.25.0 || ^4.0.0
'@meronex/icons@4.0.0':
@@ -3991,9 +4673,6 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
- '@neon-rs/load@0.1.82':
- resolution: {integrity: sha512-H4Gu2o5kPp+JOEhRrOQCnJnf7X6sv9FBLttM/wSbb4efsgFWeHzfU/ItZ01E5qqEk+U6QGdeVO7lxXIAtYHr5A==}
-
'@nest-lab/throttler-storage-redis@1.2.0':
resolution: {integrity: sha512-tMkUyo68NCKTR+zILk+EC35SMYBtDPZY2mCj7ZaCietWGVTnuP4zwq9ERYfvU6kJv6h8teNZrC6MJCmY6/dljw==}
peerDependencies:
@@ -5220,6 +5899,9 @@ packages:
'@posthog/core@1.23.2':
resolution: {integrity: sha512-zTDdda9NuSHrnwSOfFMxX/pyXiycF4jtU1kTr8DL61dHhV+7LF6XF1ndRZZTuaGGbfbb/GJYkEsjEX9SXfNZeQ==}
+ '@posthog/core@1.7.1':
+ resolution: {integrity: sha512-kjK0eFMIpKo9GXIbts8VtAknsoZ18oZorANdtuTj1CbgS28t4ZVq//HAWhnxEuXRTrtkd+SUJ6Ux3j2Af8NCuA==}
+
'@posthog/types@1.359.1':
resolution: {integrity: sha512-oQihoHWLnOkSkzOToCWKNigbJ7UZcIkl+rSJuq2PLwL7EB0Q/r1UGSbVCkrPH8xtPbYpi7w4TVpMrg41TMT+LQ==}
@@ -5751,25 +6433,10 @@ packages:
peerDependencies:
'@redis/client': ^1.0.0
- '@redis/bloom@5.11.0':
- resolution: {integrity: sha512-KYiVilAhAFN3057afUb/tfYJpsEyTkQB+tQcn5gVVA7DgcNOAj8lLxe4j8ov8BF6I9C1Fe/kwlbuAICcTMX8Lw==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@redis/client': ^5.11.0
-
'@redis/client@1.6.1':
resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==}
engines: {node: '>=14'}
- '@redis/client@5.11.0':
- resolution: {integrity: sha512-GHoprlNQD51Xq2Ztd94HHV94MdFZQ3CVrpA04Fz8MVoHM0B7SlbmPEVIjwTbcv58z8QyjnrOuikS0rWF03k5dQ==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@node-rs/xxhash': ^1.1.0
- peerDependenciesMeta:
- '@node-rs/xxhash':
- optional: true
-
'@redis/graph@1.1.1':
resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==}
peerDependencies:
@@ -5780,34 +6447,16 @@ packages:
peerDependencies:
'@redis/client': ^1.0.0
- '@redis/json@5.11.0':
- resolution: {integrity: sha512-1iAy9kAtcD0quB21RbPTbUqqy+T2Uu2JxucwE+B4A+VaDbIRvpZR6DMqV8Iqaws2YxJYB3GC5JVNzPYio2ErUg==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@redis/client': ^5.11.0
-
'@redis/search@1.2.0':
resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==}
peerDependencies:
'@redis/client': ^1.0.0
- '@redis/search@5.11.0':
- resolution: {integrity: sha512-g1l7f3Rnyk/xI99oGHIgWHSKFl45Re5YTIcO8j/JE8olz389yUFyz2+A6nqVy/Zi031VgPDWscbbgOk8hlhZ3g==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@redis/client': ^5.11.0
-
'@redis/time-series@1.1.0':
resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==}
peerDependencies:
'@redis/client': ^1.0.0
- '@redis/time-series@5.11.0':
- resolution: {integrity: sha512-TWFeOcU4xkj0DkndnOyhtxvX1KWD+78UHT3XX3x3XRBUGWeQrKo3jqzDsZwxbggUgf9yLJr/akFHXru66X5UQA==}
- engines: {node: '>= 18'}
- peerDependencies:
- '@redis/client': ^5.11.0
-
'@remirror/core-constants@3.0.0':
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
@@ -5843,11 +6492,11 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
- '@rollup/plugin-alias@5.1.1':
- resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
- engines: {node: '>=14.0.0'}
+ '@rollup/plugin-alias@6.0.0':
+ resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ rollup: '>=4.0.0'
peerDependenciesMeta:
rollup:
optional: true
@@ -5861,8 +6510,8 @@ packages:
rollup:
optional: true
- '@rollup/plugin-commonjs@28.0.9':
- resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==}
+ '@rollup/plugin-commonjs@29.0.2':
+ resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==}
engines: {node: '>=16.0.0 || 14 >= 14.17'}
peerDependencies:
rollup: ^2.68.0||^3.0.0||^4.0.0
@@ -5919,111 +6568,56 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.50.2':
- resolution: {integrity: sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==}
- cpu: [arm]
- os: [android]
-
'@rollup/rollup-android-arm-eabi@4.59.0':
resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.50.2':
- resolution: {integrity: sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==}
- cpu: [arm64]
- os: [android]
-
'@rollup/rollup-android-arm64@4.59.0':
resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.50.2':
- resolution: {integrity: sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==}
- cpu: [arm64]
- os: [darwin]
-
'@rollup/rollup-darwin-arm64@4.59.0':
resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.50.2':
- resolution: {integrity: sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==}
- cpu: [x64]
- os: [darwin]
-
'@rollup/rollup-darwin-x64@4.59.0':
resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.50.2':
- resolution: {integrity: sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==}
- cpu: [arm64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-arm64@4.59.0':
resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.50.2':
- resolution: {integrity: sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==}
- cpu: [x64]
- os: [freebsd]
-
'@rollup/rollup-freebsd-x64@4.59.0':
resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.50.2':
- resolution: {integrity: sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm-gnueabihf@4.59.0':
resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.50.2':
- resolution: {integrity: sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==}
- cpu: [arm]
- os: [linux]
-
'@rollup/rollup-linux-arm-musleabihf@4.59.0':
resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.50.2':
- resolution: {integrity: sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-arm64-gnu@4.59.0':
resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.50.2':
- resolution: {integrity: sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==}
- cpu: [arm64]
- os: [linux]
-
'@rollup/rollup-linux-arm64-musl@4.59.0':
resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.50.2':
- resolution: {integrity: sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==}
- cpu: [loong64]
- os: [linux]
-
'@rollup/rollup-linux-loong64-gnu@4.59.0':
resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
cpu: [loong64]
@@ -6034,11 +6628,6 @@ packages:
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.50.2':
- resolution: {integrity: sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==}
- cpu: [ppc64]
- os: [linux]
-
'@rollup/rollup-linux-ppc64-gnu@4.59.0':
resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
cpu: [ppc64]
@@ -6049,51 +6638,26 @@ packages:
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.50.2':
- resolution: {integrity: sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-gnu@4.59.0':
resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.50.2':
- resolution: {integrity: sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==}
- cpu: [riscv64]
- os: [linux]
-
'@rollup/rollup-linux-riscv64-musl@4.59.0':
resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.50.2':
- resolution: {integrity: sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==}
- cpu: [s390x]
- os: [linux]
-
'@rollup/rollup-linux-s390x-gnu@4.59.0':
resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.50.2':
- resolution: {integrity: sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-linux-x64-gnu@4.59.0':
resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.50.2':
- resolution: {integrity: sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==}
- cpu: [x64]
- os: [linux]
-
'@rollup/rollup-linux-x64-musl@4.59.0':
resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
cpu: [x64]
@@ -6104,31 +6668,16 @@ packages:
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.50.2':
- resolution: {integrity: sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==}
- cpu: [arm64]
- os: [openharmony]
-
'@rollup/rollup-openharmony-arm64@4.59.0':
resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.50.2':
- resolution: {integrity: sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==}
- cpu: [arm64]
- os: [win32]
-
'@rollup/rollup-win32-arm64-msvc@4.59.0':
resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.50.2':
- resolution: {integrity: sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==}
- cpu: [ia32]
- os: [win32]
-
'@rollup/rollup-win32-ia32-msvc@4.59.0':
resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
cpu: [ia32]
@@ -6139,11 +6688,6 @@ packages:
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.50.2':
- resolution: {integrity: sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==}
- cpu: [x64]
- os: [win32]
-
'@rollup/rollup-win32-x64-msvc@4.59.0':
resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
cpu: [x64]
@@ -6967,6 +7511,67 @@ packages:
peerDependencies:
'@solana/web3.js': '*'
+ '@standard-community/standard-json@0.3.5':
+ resolution: {integrity: sha512-4+ZPorwDRt47i+O7RjyuaxHRK/37QY/LmgxlGrRrSTLYoFatEOzvqIc85GTlM18SFZ5E91C+v0o/M37wZPpUHA==}
+ peerDependencies:
+ '@standard-schema/spec': ^1.0.0
+ '@types/json-schema': ^7.0.15
+ '@valibot/to-json-schema': ^1.3.0
+ arktype: ^2.1.20
+ effect: ^3.16.8
+ quansync: ^0.2.11
+ sury: ^10.0.0
+ typebox: ^1.0.17
+ valibot: ^1.1.0
+ zod: ^3.25.0 || ^4.0.0
+ zod-to-json-schema: ^3.24.5
+ peerDependenciesMeta:
+ '@valibot/to-json-schema':
+ optional: true
+ arktype:
+ optional: true
+ effect:
+ optional: true
+ sury:
+ optional: true
+ typebox:
+ optional: true
+ valibot:
+ optional: true
+ zod:
+ optional: true
+ zod-to-json-schema:
+ optional: true
+
+ '@standard-community/standard-openapi@0.2.9':
+ resolution: {integrity: sha512-htj+yldvN1XncyZi4rehbf9kLbu8os2Ke/rfqoZHCMHuw34kiF3LP/yQPdA0tQ940y8nDq3Iou8R3wG+AGGyvg==}
+ peerDependencies:
+ '@standard-community/standard-json': ^0.3.5
+ '@standard-schema/spec': ^1.0.0
+ arktype: ^2.1.20
+ effect: ^3.17.14
+ openapi-types: ^12.1.3
+ sury: ^10.0.0
+ typebox: ^1.0.0
+ valibot: ^1.1.0
+ zod: ^3.25.0 || ^4.0.0
+ zod-openapi: ^4
+ peerDependenciesMeta:
+ arktype:
+ optional: true
+ effect:
+ optional: true
+ sury:
+ optional: true
+ typebox:
+ optional: true
+ valibot:
+ optional: true
+ zod:
+ optional: true
+ zod-openapi:
+ optional: true
+
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
@@ -8641,9 +9246,6 @@ packages:
'@webcomponents/custom-elements@1.6.0':
resolution: {integrity: sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww==}
- '@webcontainer/env@1.1.1':
- resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==}
-
'@whatwg-node/disposablestack@0.0.6':
resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==}
engines: {node: '>=18.0.0'}
@@ -8686,6 +9288,9 @@ packages:
'@xtuc/long@4.2.2':
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+ '@zeit/schemas@2.36.0':
+ resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==}
+
abab@2.0.6:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
deprecated: Use your platform's native atob() and btoa() methods instead
@@ -8844,6 +9449,9 @@ packages:
anser@1.4.10:
resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==}
+ ansi-align@3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -8984,10 +9592,6 @@ packages:
asn1@0.2.6:
resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
- assert-options@0.8.3:
- resolution: {integrity: sha512-s6v4HnA+vYSGO4eZX+F+I3gvF74wPk+m6Z1Q3w1Dsg4Pnv/R24vhKAasoMVZGvDpOOfTg1Qz4ptZnEbuy95XsQ==}
- engines: {node: '>=14.0.0'}
-
assert-plus@1.0.0:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
engines: {node: '>=0.8'}
@@ -9051,8 +9655,8 @@ packages:
resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
engines: {node: '>=4'}
- axios@1.13.6:
- resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==}
+ axios@1.14.0:
+ resolution: {integrity: sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==}
axobject-query@3.2.4:
resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==}
@@ -9168,6 +9772,9 @@ packages:
resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==}
engines: {node: '>= 10.0.0'}
+ bidi-js@1.0.3:
+ resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
+
big.js@5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
@@ -9231,6 +9838,10 @@ packages:
bowser@2.14.1:
resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==}
+ boxen@7.0.0:
+ resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==}
+ engines: {node: '>=14.16'}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
@@ -9311,13 +9922,6 @@ packages:
resolution: {integrity: sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw==}
engines: {node: '>=6.14.2'}
- builtins@5.1.0:
- resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==}
-
- bundle-name@4.1.0:
- resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
- engines: {node: '>=18'}
-
bundle-require@5.1.0:
resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -9328,6 +9932,10 @@ packages:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
+ bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+
bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
@@ -9378,6 +9986,10 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
+ camelcase@7.0.1:
+ resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
+ engines: {node: '>=14.16'}
+
caniuse-lite@1.0.30001777:
resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==}
@@ -9401,10 +10013,18 @@ packages:
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
engines: {node: '>=18'}
+ chalk-template@0.4.0:
+ resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==}
+ engines: {node: '>=12'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
+ chalk@5.0.1:
+ resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
chalk@5.6.2:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
@@ -9532,6 +10152,10 @@ packages:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
+ cli-boxes@3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+
cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
@@ -9555,6 +10179,10 @@ packages:
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ clipboardy@3.0.0:
+ resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
cliui@6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
@@ -9751,6 +10379,10 @@ packages:
constant-case@3.0.4:
resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
+ content-disposition@0.5.2:
+ resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==}
+ engines: {node: '>= 0.6'}
+
content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
@@ -9921,6 +10553,10 @@ packages:
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+ css-tree@3.2.1:
+ resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
css-what@6.2.2:
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
engines: {node: '>= 6'}
@@ -9987,6 +10623,10 @@ packages:
resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==}
engines: {node: '>=14'}
+ data-urls@7.0.0:
+ resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines: {node: '>= 0.4'}
@@ -10002,9 +10642,6 @@ packages:
date-fns@3.6.0:
resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
- date-fns@4.1.0:
- resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
-
dateformat@4.6.3:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
@@ -10030,15 +10667,6 @@ packages:
supports-color:
optional: true
- debug@4.3.1:
- resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -10086,6 +10714,10 @@ packages:
resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==}
engines: {node: '>= 0.4'}
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -10097,14 +10729,6 @@ packages:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- default-browser-id@5.0.1:
- resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
- engines: {node: '>=18'}
-
- default-browser@5.5.0:
- resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
- engines: {node: '>=18'}
-
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -10116,10 +10740,6 @@ packages:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
- define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
-
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -10267,6 +10887,9 @@ packages:
resolution: {integrity: sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==}
engines: {node: '>=20'}
+ dompurify@3.4.1:
+ resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==}
+
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
@@ -10285,6 +10908,10 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
+ dotenv@17.4.0:
+ resolution: {integrity: sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==}
+ engines: {node: '>=12'}
+
draggabilly@3.0.0:
resolution: {integrity: sha512-aEs+B6prbMZQMxc9lgTpCBfyCUhRur/VFucHhIOvlvvdARTj7TcDmX/cdOUtqbjJJUh7+agyJXR5Z6IFe1MxwQ==}
@@ -10395,6 +11022,10 @@ packages:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
+ entities@8.0.0:
+ resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==}
+ engines: {node: '>=20.19.0'}
+
error-ex@1.3.4:
resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
@@ -10469,6 +11100,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.27.7:
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -10735,9 +11371,9 @@ packages:
exifr@7.1.3:
resolution: {integrity: sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw==}
- exit-hook@4.0.0:
- resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==}
- engines: {node: '>=18'}
+ exit-hook@5.1.0:
+ resolution: {integrity: sha512-INjr2xyxHo7bhAqf5ong++GZPPnpcuBcaXUKt03yf7Fie9yWD7FapL4teOU0+awQazGs5ucBh7xWs/AD+6nhog==}
+ engines: {node: '>=20'}
exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
@@ -10779,6 +11415,10 @@ packages:
resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==}
engines: {node: '>=4'}
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -10843,12 +11483,21 @@ packages:
fast-stable-stringify@1.0.0:
resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==}
+ fast-string-truncated-width@1.2.1:
+ resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==}
+
+ fast-string-width@1.1.0:
+ resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==}
+
fast-text-encoding@1.0.6:
resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==}
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+ fast-wrap-ansi@0.1.6:
+ resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==}
+
fast-xml-builder@1.0.0:
resolution: {integrity: sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==}
@@ -11344,6 +11993,10 @@ packages:
resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+ gray-matter@4.0.3:
+ resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
+ engines: {node: '>=6.0'}
+
groq-sdk@0.5.0:
resolution: {integrity: sha512-RVmhW7qZ+XZoy5fIuSdx/LGQJONpL8MHgZEW7dFwTdgkzStub2XQx6OKv28CHogijdwH41J+Npj/z2jBPu3vmw==}
@@ -11363,6 +12016,11 @@ packages:
engines: {node: '>=0.4.7'}
hasBin: true
+ handlebars@4.7.9:
+ resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
happy-dom@15.11.7:
resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==}
engines: {node: '>=18.0.0'}
@@ -11581,6 +12239,25 @@ packages:
zod-openapi:
optional: true
+ hono-openapi@1.3.0:
+ resolution: {integrity: sha512-xDvCWpWEIv0weEmnl3EjRQzqbHIO8LnfzMuYOCmbuyE5aes6aXxLg4vM3ybnoZD5TiTUkA6PuRQPJs3R7WRBig==}
+ peerDependencies:
+ '@hono/standard-validator': ^0.2.0
+ '@standard-community/standard-json': ^0.3.5
+ '@standard-community/standard-openapi': ^0.2.9
+ '@types/json-schema': ^7.0.15
+ hono: ^4.8.3
+ openapi-types: ^12.1.3
+ peerDependenciesMeta:
+ '@hono/standard-validator':
+ optional: true
+ hono:
+ optional: true
+
+ hono@4.12.10:
+ resolution: {integrity: sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==}
+ engines: {node: '>=16.9.0'}
+
hono@4.12.5:
resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==}
engines: {node: '>=16.9.0'}
@@ -11595,6 +12272,10 @@ packages:
resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
engines: {node: '>=12'}
+ html-encoding-sniffer@6.0.0:
+ resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
html-entities@2.6.0:
resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
@@ -11730,6 +12411,11 @@ packages:
engines: {node: '>=16.x'}
hasBin: true
+ image-size@2.0.2:
+ resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
+ engines: {node: '>=16.x'}
+ hasBin: true
+
image-to-pdf@3.0.2:
resolution: {integrity: sha512-6/IQCt4f384zjQ1w8P7FHIN/tF0mau8RbAIydT/+wyfZ1RAb8E2fiKe9t/k0V880h0d3zRpw9Q1bM5AIgVL/4g==}
@@ -11816,10 +12502,6 @@ packages:
resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
engines: {node: '>= 12'}
- ip-regex@4.3.0:
- resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
- engines: {node: '>=8'}
-
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
@@ -11910,10 +12592,9 @@ packages:
engines: {node: '>=8'}
hasBin: true
- is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
is-extendable@1.0.1:
resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
@@ -11952,11 +12633,6 @@ packages:
is-hotkey@0.1.8:
resolution: {integrity: sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ==}
- is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
-
is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
@@ -12015,6 +12691,10 @@ packages:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
+ is-port-reachable@4.0.0:
+ resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -12071,9 +12751,6 @@ packages:
resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
engines: {node: '>=18'}
- is-url@1.2.4:
- resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
-
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@@ -12090,14 +12767,6 @@ packages:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
- is-wsl@3.1.1:
- resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
- engines: {node: '>=16'}
-
- is2@2.0.9:
- resolution: {integrity: sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==}
- engines: {node: '>=v0.10.0'}
-
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
@@ -12117,6 +12786,10 @@ packages:
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
engines: {node: '>=0.10.0'}
+ isomorphic-dompurify@3.10.0:
+ resolution: {integrity: sha512-Gj2duy4dACsP/FLPvwJ3+MXTlGtOo+O4yfpA0jdxuz/sZlbZzazGzScajOHRwH7PCy4j3bh5ibLGJY4/Rb5kGQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
+
isomorphic-ws@4.0.1:
resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
peerDependencies:
@@ -12428,6 +13101,15 @@ packages:
canvas:
optional: true
+ jsdom@29.1.0:
+ resolution: {integrity: sha512-YNUc7fB9QuvSSQWfrH0xF+TyABkxUwx8sswgIDaCrw4Hol8BghdZDkITtZheRJeMtzWlnTfsM3bBBusRvpO1wg==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
+ peerDependencies:
+ canvas: ^3.0.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
@@ -12550,6 +13232,10 @@ packages:
keyvaluestorage-interface@1.0.0:
resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
@@ -12636,6 +13322,26 @@ packages:
openai:
optional: true
+ langsmith@0.5.17:
+ resolution: {integrity: sha512-/MEqTL50YH2SUZJtRl4+xI/tIgvu8OG5v6PMALKNkznjIelzf9q9kw0xxj1PC+r/ammMjVD1V2z9JmiT3AMqsQ==}
+ peerDependencies:
+ '@opentelemetry/api': '*'
+ '@opentelemetry/exporter-trace-otlp-proto': '*'
+ '@opentelemetry/sdk-trace-base': '*'
+ openai: '*'
+ ws: '>=7'
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@opentelemetry/exporter-trace-otlp-proto':
+ optional: true
+ '@opentelemetry/sdk-trace-base':
+ optional: true
+ openai:
+ optional: true
+ ws:
+ optional: true
+
language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
@@ -12915,8 +13621,12 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.2.6:
- resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==}
+ lru-cache@11.2.7:
+ resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==}
+ engines: {node: 20 || >=22}
+
+ lru-cache@11.3.5:
+ resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
engines: {node: 20 || >=22}
lru-cache@4.1.5:
@@ -12988,11 +13698,12 @@ packages:
marky@1.3.0:
resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
- mastra@0.13.4:
- resolution: {integrity: sha512-p9abBTH65OgmZwQVDLkegikeuEg7kruKHOs9IKc2slrv83FcCXGevQDNMWa533iuAjEOE2ev85jcsZ+7ZSpKLA==}
+ mastra@1.3.19:
+ resolution: {integrity: sha512-ZN1ZQ4mjK2t9KNdD/kSBNr4m2TlEfcbGxWGHtnVQ5bU6Vn0YywCDhESEa+4djIVO88jkqb+8ETFavsTiCecLsg==}
+ engines: {node: '>=22.13.0'}
hasBin: true
peerDependencies:
- '@mastra/core': '>=0.17.0-0 <0.20.0-0'
+ '@mastra/core': '>=1.1.0-0 <2.0.0-0'
zod: ^3.25.0 || ^4.0.0
material-icons@1.13.14:
@@ -13077,6 +13788,9 @@ packages:
mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+ mdn-data@2.27.1:
+ resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
+
mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
@@ -13344,6 +14058,10 @@ packages:
resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
hasBin: true
+ mime-db@1.33.0:
+ resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==}
+ engines: {node: '>= 0.6'}
+
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@@ -13355,6 +14073,10 @@ packages:
mime-match@1.0.2:
resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==}
+ mime-types@2.1.18:
+ resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==}
+ engines: {node: '>= 0.6'}
+
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
@@ -13491,9 +14213,6 @@ packages:
ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
- ms@2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -13562,6 +14281,11 @@ packages:
resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==}
hasBin: true
+ needle@2.9.1:
+ resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+
negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
@@ -13870,10 +14594,6 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
- open@10.2.0:
- resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
- engines: {node: '>=18'}
-
open@7.4.2:
resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
engines: {node: '>=8'}
@@ -13914,6 +14634,18 @@ packages:
zod:
optional: true
+ openai@6.34.0:
+ resolution: {integrity: sha512-yEr2jdGf4tVFYG6ohmr3pF6VJuveP0EA/sS8TBx+4Eq5NT10alu5zg2dmxMXMgqpihRDQlFGpRt2XwsGj+Fyxw==}
+ hasBin: true
+ peerDependencies:
+ ws: ^8.18.0
+ zod: ^3.25 || ^4.0
+ peerDependenciesMeta:
+ ws:
+ optional: true
+ zod:
+ optional: true
+
openapi-types@12.1.3:
resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
@@ -14015,6 +14747,10 @@ packages:
resolution: {integrity: sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==}
engines: {node: '>=18'}
+ p-queue@9.1.2:
+ resolution: {integrity: sha512-ktsDOALzTYTWWF1PbkNVg2rOt+HaOaMWJMUnt7T3qf5tvZ1L8dBW3tObzprBcXNMKkwj+yFSLqHso0x+UFcJXw==}
+ engines: {node: '>=20'}
+
p-retry@4.6.2:
resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
engines: {node: '>=8'}
@@ -14023,6 +14759,10 @@ packages:
resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==}
engines: {node: '>=16.17'}
+ p-retry@7.1.1:
+ resolution: {integrity: sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==}
+ engines: {node: '>=20'}
+
p-timeout@3.2.0:
resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
engines: {node: '>=8'}
@@ -14031,6 +14771,10 @@ packages:
resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==}
engines: {node: '>=14.16'}
+ p-timeout@7.0.1:
+ resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==}
+ engines: {node: '>=20'}
+
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
@@ -14092,6 +14836,9 @@ packages:
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ parse5@8.0.1:
+ resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==}
+
parseley@0.12.1:
resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
@@ -14116,6 +14863,9 @@ packages:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
+ path-is-inside@1.0.2:
+ resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==}
+
path-key@2.0.1:
resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
engines: {node: '>=4'}
@@ -14189,51 +14939,22 @@ packages:
pg-connection-string@2.12.0:
resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==}
- pg-cursor@2.19.0:
- resolution: {integrity: sha512-J5cF1MUz7LRJ9emOqF/06QjabMHMZy587rSPF0UuA8rCwKeeYl2co8Pp+6k5UU9YrAYHMzWkLxilfZB0hqsWWw==}
- peerDependencies:
- pg: ^8
-
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
- pg-minify@1.8.0:
- resolution: {integrity: sha512-jO/oJOununpx8DzKgvSsWm61P8JjwXlaxSlbbfTBo1nvSWoo/+I6qZYaSN96jm/KDwa5d+JMQwPGgcP6HXDRow==}
- engines: {node: '>=16.0.0'}
-
pg-pool@3.13.0:
resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==}
peerDependencies:
pg: '>=8.0'
- pg-promise@11.15.0:
- resolution: {integrity: sha512-EUXpXn90yPVPKxQH4qqUAEVcApd2tp/JdR3wG6LzBUgaXTUYqwmuXG4vFhhZTCctzhfzRA20EbORb9H4aAgUHA==}
- engines: {node: '>=16.0'}
- peerDependencies:
- pg-query-stream: 4.10.3
-
pg-protocol@1.13.0:
resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==}
- pg-query-stream@4.10.3:
- resolution: {integrity: sha512-h2utrzpOIzeT9JfaqfvBbVuvCfBjH86jNfVrGGTbyepKAIOyTfDew0lAt8bbJjs9n/I5bGDl7S2sx6h5hPyJxw==}
- peerDependencies:
- pg: ^8
-
pg-types@2.2.0:
resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
engines: {node: '>=4'}
- pg@8.16.3:
- resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==}
- engines: {node: '>= 16.0.0'}
- peerDependencies:
- pg-native: '>=3.0.1'
- peerDependenciesMeta:
- pg-native:
- optional: true
-
pg@8.20.0:
resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==}
engines: {node: '>= 16.0.0'}
@@ -14288,6 +15009,10 @@ packages:
pino-std-serializers@7.1.0:
resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
+ pino@10.3.1:
+ resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
+ hasBin: true
+
pino@7.11.0:
resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==}
hasBin: true
@@ -14431,16 +15156,12 @@ packages:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'}
- postgres@3.4.8:
- resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==}
- engines: {node: '>=12'}
-
posthog-js@1.359.1:
resolution: {integrity: sha512-Gy/eX02im6ON0zMxfTR61GNk1sjgLT9rVGfBQ5C757/WS4mN3vTUJveQYoX9jr3y0pqPZ57DqCcf6zcw++bpzQ==}
- posthog-node@4.18.0:
- resolution: {integrity: sha512-XROs1h+DNatgKh/AlIlCtDxWzwrKdYDb2mOs58n4yN8BkGN9ewqeQwG5ApS4/IzwCb7HPttUkOVulkYatd2PIw==}
- engines: {node: '>=15.0.0'}
+ posthog-node@5.17.2:
+ resolution: {integrity: sha512-lz3YJOr0Nmiz0yHASaINEDHqoV+0bC3eD8aZAG+Ky292dAnVYul+ga/dMX8KCBXg8hHfKdxw0SztYD5j6dgUqQ==}
+ engines: {node: '>=20'}
preact@10.28.4:
resolution: {integrity: sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==}
@@ -14493,6 +15214,9 @@ packages:
resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
+ probe-image-size@7.2.3:
+ resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==}
+
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
@@ -14626,6 +15350,10 @@ packages:
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ proxy-from-env@2.1.0:
+ resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
+ engines: {node: '>=10'}
+
pseudomap@1.0.2:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
@@ -14735,6 +15463,10 @@ packages:
randomfill@1.0.4:
resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
+ range-parser@1.2.0:
+ resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==}
+ engines: {node: '>= 0.6'}
+
range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
@@ -14750,6 +15482,10 @@ packages:
resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
engines: {node: '>= 0.10'}
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
react-colorful@5.6.1:
resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
peerDependencies:
@@ -15086,10 +15822,6 @@ packages:
redis@4.7.1:
resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==}
- redis@5.11.0:
- resolution: {integrity: sha512-YwXjATVDT+AuxcyfOwZn046aml9jMlQPvU1VXIlLDVAExe0u93aTfPYSeRgG4p9Q/Jlkj+LXJ1XEoFV+j2JKcQ==}
- engines: {node: '>= 18'}
-
redux@4.2.1:
resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==}
@@ -15130,6 +15862,13 @@ packages:
resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
engines: {node: '>=4'}
+ registry-auth-token@3.3.2:
+ resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==}
+
+ registry-url@3.1.0:
+ resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==}
+ engines: {node: '>=0.10.0'}
+
regjsgen@0.8.0:
resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
@@ -15326,22 +16065,11 @@ packages:
esbuild: '>=0.18.0'
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
- rollup-plugin-node-externals@8.1.2:
- resolution: {integrity: sha512-EuB6/lolkMLK16gvibUjikERq5fCRVIGwD2xue/CrM8D0pz5GXD2V6N8IrgxegwbcUoKkUFI8VYCEEv8MMvgpA==}
- engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'}
- peerDependencies:
- rollup: ^4.0.0
-
rollup@2.79.2:
resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==}
engines: {node: '>=10.0.0'}
hasBin: true
- rollup@4.50.2:
- resolution: {integrity: sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
rollup@4.59.0:
resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -15367,10 +16095,6 @@ packages:
resolution: {integrity: sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==}
engines: {node: '>=6.0.0', npm: '>=3.10.0'}
- run-applescript@7.1.0:
- resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
- engines: {node: '>=18'}
-
run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
@@ -15462,6 +16186,10 @@ packages:
sdp@2.12.0:
resolution: {integrity: sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==}
+ section-matter@1.0.0:
+ resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
+ engines: {node: '>=4'}
+
secure-json-parse@2.7.0:
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
@@ -15508,6 +16236,9 @@ packages:
resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==}
engines: {node: '>=0.10.0'}
+ serve-handler@6.1.7:
+ resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==}
+
serve-static@1.16.3:
resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==}
engines: {node: '>= 0.8.0'}
@@ -15516,6 +16247,11 @@ packages:
resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
engines: {node: '>= 18'}
+ serve@14.2.6:
+ resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
server-only@0.0.1:
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
@@ -15737,10 +16473,6 @@ packages:
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- spex@3.4.1:
- resolution: {integrity: sha512-Br0Mu3S+c70kr4keXF+6K4B8ohR+aJjI9s7SbdsI3hliE1Riz4z+FQk7FQL+r7X1t90KPkpuKwQyITpCIQN9mg==}
- engines: {node: '>=14.0.0'}
-
split-on-first@1.1.0:
resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
engines: {node: '>=6'}
@@ -15808,6 +16540,9 @@ packages:
stream-json@1.9.1:
resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
+ stream-parser@0.3.1:
+ resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==}
+
stream-shift@1.0.3:
resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
@@ -15871,6 +16606,10 @@ packages:
resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
engines: {node: '>=12'}
+ strip-bom-string@1.0.0:
+ resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+ engines: {node: '>=0.10.0'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@@ -15891,6 +16630,10 @@ packages:
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
engines: {node: '>=18'}
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -16065,9 +16808,6 @@ packages:
engines: {node: '>=10'}
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
- tcp-port-used@1.0.2:
- resolution: {integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==}
-
terser-webpack-plugin@5.3.17:
resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==}
engines: {node: '>= 10.13.0'}
@@ -16118,6 +16858,10 @@ packages:
thread-stream@3.1.0:
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+ thread-stream@4.0.0:
+ resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
+ engines: {node: '>=20'}
+
throat@5.0.0:
resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
@@ -16181,10 +16925,17 @@ packages:
tldts-core@6.1.86:
resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
+ tldts-core@7.0.28:
+ resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==}
+
tldts@6.1.86:
resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
hasBin: true
+ tldts@7.0.28:
+ resolution: {integrity: sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==}
+ hasBin: true
+
tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -16219,6 +16970,9 @@ packages:
resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==}
engines: {node: '>=14.16'}
+ tokenx@1.3.0:
+ resolution: {integrity: sha512-NLdXTEZkKiO0gZuLtMoZKjCXTREXeZZt8nnnNeyoXtNZAfG/GKGSbQtLU5STspc0rMSwcA+UJfWZkbNU01iKmQ==}
+
toposort@2.0.2:
resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==}
@@ -16242,6 +16996,10 @@ packages:
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
engines: {node: '>=16'}
+ tough-cookie@6.0.1:
+ resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==}
+ engines: {node: '>=16'}
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -16253,6 +17011,10 @@ packages:
resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==}
engines: {node: '>=14'}
+ tr46@6.0.0:
+ resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
+ engines: {node: '>=20'}
+
transloadit@3.0.2:
resolution: {integrity: sha512-FvhKs0EBiQufK29irGLM/4aMIrfU5S/TiHB3h+DcO2hjRnVVM2WC278UQJCrNO4L/REE8IKWx/mQzQW2MrrLsg==}
engines: {node: '>= 10.0.0'}
@@ -16563,6 +17325,10 @@ packages:
resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==}
engines: {node: '>=20.18.1'}
+ undici@7.25.0:
+ resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==}
+ engines: {node: '>=20.18.1'}
+
unicode-canonical-property-names-ecmascript@2.0.1:
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
engines: {node: '>=4'}
@@ -16739,6 +17505,9 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
+ update-check@1.5.4:
+ resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==}
+
upper-case-first@2.0.2:
resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
@@ -16866,6 +17635,10 @@ packages:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
+ uuid@13.0.0:
+ resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==}
+ hasBin: true
+
uuid@3.4.0:
resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
@@ -17045,6 +17818,10 @@ packages:
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
engines: {node: '>=14'}
+ w3c-xmlserializer@5.0.0:
+ resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
+ engines: {node: '>=18'}
+
walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
@@ -17086,6 +17863,10 @@ packages:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
+ webidl-conversions@8.0.1:
+ resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==}
+ engines: {node: '>=20'}
+
webpack-node-externals@3.0.0:
resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==}
engines: {node: '>=6'}
@@ -17139,6 +17920,10 @@ packages:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
+ whatwg-mimetype@5.0.0:
+ resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==}
+ engines: {node: '>=20'}
+
whatwg-url@11.0.0:
resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
engines: {node: '>=12'}
@@ -17147,6 +17932,10 @@ packages:
resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==}
engines: {node: '>=14'}
+ whatwg-url@16.0.1:
+ resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
@@ -17186,6 +17975,10 @@ packages:
wide-align@1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+ widest-line@4.0.1:
+ resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
+ engines: {node: '>=12'}
+
wildcard@1.1.2:
resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==}
@@ -17270,14 +18063,14 @@ packages:
utf-8-validate:
optional: true
- wsl-utils@0.1.0:
- resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
- engines: {node: '>=18'}
-
xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
+ xml-name-validator@5.0.0:
+ resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
+ engines: {node: '>=18'}
+
xml2js@0.5.0:
resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==}
engines: {node: '>=4.0.0'}
@@ -17334,6 +18127,11 @@ packages:
engines: {node: '>= 14.6'}
hasBin: true
+ yaml@2.8.3:
+ resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
yargs-parser@18.1.3:
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
engines: {node: '>=6'}
@@ -17358,8 +18156,8 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-spinner@0.2.3:
- resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==}
+ yocto-spinner@1.1.0:
+ resolution: {integrity: sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA==}
engines: {node: '>=18.19'}
yoctocolors@2.1.2:
@@ -17479,32 +18277,17 @@ snapshots:
- react
- react-dom
- '@ag-ui/mastra@0.2.0(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@copilotkit/runtime@1.10.6(f12a340d274d725e3b3c5f801023ae18))(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)':
+ '@ag-ui/mastra@1.0.1(@ag-ui/client@0.0.47)(@ag-ui/core@0.0.47)(@copilotkit/runtime@1.10.6(53cb17873d4b9fb44549f8e02ffc4a35))(@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)':
dependencies:
'@ag-ui/client': 0.0.47
'@ag-ui/core': 0.0.47
'@ai-sdk/ui-utils': 1.2.11(zod@3.25.76)
- '@copilotkit/runtime': 1.10.6(f12a340d274d725e3b3c5f801023ae18)
+ '@copilotkit/runtime': 1.10.6(53cb17873d4b9fb44549f8e02ffc4a35)
'@mastra/client-js': 0.15.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
rxjs: 7.8.1
- zod: 3.25.76
transitivePeerDependencies:
- - '@hono/arktype-validator'
- - '@hono/effect-validator'
- - '@hono/typebox-validator'
- - '@hono/valibot-validator'
- - '@hono/zod-validator'
- - '@sinclair/typebox'
- - '@valibot/to-json-schema'
- - arktype
- - effect
- - encoding
- - openapi-types
- - react
- - supports-color
- - valibot
- - zod-openapi
+ - zod
'@ag-ui/proto@0.0.47':
dependencies:
@@ -17563,6 +18346,13 @@ snapshots:
eventsource-parser: 3.0.6
zod: 3.25.76
+ '@ai-sdk/provider-utils@3.0.20(zod@3.25.76)':
+ dependencies:
+ '@ai-sdk/provider': 2.0.1
+ '@standard-schema/spec': 1.1.0
+ eventsource-parser: 3.0.6
+ zod: 3.25.76
+
'@ai-sdk/provider-utils@3.0.22(zod@3.25.76)':
dependencies:
'@ai-sdk/provider': 2.0.1
@@ -17570,6 +18360,13 @@ snapshots:
eventsource-parser: 3.0.6
zod: 3.25.76
+ '@ai-sdk/provider-utils@4.0.0(zod@3.25.76)':
+ dependencies:
+ '@ai-sdk/provider': 3.0.0
+ '@standard-schema/spec': 1.1.0
+ eventsource-parser: 3.0.6
+ zod: 3.25.76
+
'@ai-sdk/provider@1.1.3':
dependencies:
json-schema: 0.4.0
@@ -17582,6 +18379,14 @@ snapshots:
dependencies:
json-schema: 0.4.0
+ '@ai-sdk/provider@3.0.0':
+ dependencies:
+ json-schema: 0.4.0
+
+ '@ai-sdk/provider@3.0.5':
+ dependencies:
+ json-schema: 0.4.0
+
'@ai-sdk/react@1.2.12(react@19.2.4)(zod@3.25.76)':
dependencies:
'@ai-sdk/provider-utils': 2.2.8(zod@3.25.76)
@@ -17690,6 +18495,26 @@ snapshots:
'@types/json-schema': 7.0.15
js-yaml: 4.1.1
+ '@asamuzakjp/css-color@5.1.11':
+ dependencies:
+ '@asamuzakjp/generational-cache': 1.0.1
+ '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-tokenizer': 4.0.0
+
+ '@asamuzakjp/dom-selector@7.1.1':
+ dependencies:
+ '@asamuzakjp/generational-cache': 1.0.1
+ '@asamuzakjp/nwsapi': 2.3.9
+ bidi-js: 1.0.3
+ css-tree: 3.2.1
+ is-potential-custom-element-name: 1.0.1
+
+ '@asamuzakjp/generational-cache@1.0.1': {}
+
+ '@asamuzakjp/nwsapi@2.3.9': {}
+
'@atproto/api@0.15.27':
dependencies:
'@atproto/common-web': 0.4.18
@@ -19240,6 +20065,10 @@ snapshots:
'@borewit/text-codec@0.2.1': {}
+ '@bramus/specificity@2.4.2':
+ dependencies:
+ css-tree: 3.2.1
+
'@browserbasehq/sdk@2.7.0':
dependencies:
'@types/node': 18.16.9
@@ -19281,15 +20110,16 @@ snapshots:
'@cfworker/json-schema@4.1.1': {}
- '@clack/core@0.5.0':
+ '@clack/core@1.2.0':
dependencies:
- picocolors: 1.1.1
+ fast-wrap-ansi: 0.1.6
sisteransi: 1.0.5
- '@clack/prompts@0.11.0':
+ '@clack/prompts@1.2.0':
dependencies:
- '@clack/core': 0.5.0
- picocolors: 1.1.1
+ '@clack/core': 1.2.0
+ fast-string-width: 1.1.0
+ fast-wrap-ansi: 0.1.6
sisteransi: 1.0.5
'@colors/colors@1.5.0':
@@ -19372,7 +20202,7 @@ snapshots:
- encoding
- graphql
- '@copilotkit/runtime@1.10.6(f12a340d274d725e3b3c5f801023ae18)':
+ '@copilotkit/runtime@1.10.6(53cb17873d4b9fb44549f8e02ffc4a35)':
dependencies:
'@ag-ui/client': 0.0.47
'@ag-ui/core': 0.0.47
@@ -19382,12 +20212,12 @@ snapshots:
'@anthropic-ai/sdk': 0.57.0
'@copilotkit/shared': 1.10.6
'@graphql-yoga/plugin-defer-stream': 3.18.0(graphql-yoga@5.18.0(graphql@16.13.1))(graphql@16.13.1)
- '@langchain/aws': 0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
- '@langchain/community': 0.3.59(60b357dc096a3106ab16514b06ce052e)
+ '@langchain/aws': 0.1.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))
+ '@langchain/community': 0.3.59(1289a407569d1b0c8cf61ad0c2bcf37c)
'@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)
- '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@19.2.4)
- '@langchain/openai': 0.4.9(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)
+ '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@19.2.4)
+ '@langchain/openai': 0.4.9(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
'@scarf/scarf': 1.4.0
class-transformer: 0.5.1
class-validator: 0.14.4
@@ -19396,7 +20226,7 @@ snapshots:
graphql-scalars: 1.25.0(graphql@16.13.1)
graphql-yoga: 5.18.0(graphql@16.13.1)
groq-sdk: 0.5.0
- langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.13.6)(cheerio@1.2.0)(handlebars@4.7.8)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.14.0)(cheerio@1.2.0)(handlebars@4.7.9)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
partial-json: 0.1.7
pino: 9.14.0
@@ -19591,6 +20421,30 @@ snapshots:
dependencies:
'@jridgewell/trace-mapping': 0.3.9
+ '@csstools/color-helpers@6.0.2': {}
+
+ '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-tokenizer': 4.0.0
+
+ '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
+ dependencies:
+ '@csstools/color-helpers': 6.0.2
+ '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-tokenizer': 4.0.0
+
+ '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)':
+ dependencies:
+ '@csstools/css-tokenizer': 4.0.0
+
+ '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)':
+ optionalDependencies:
+ css-tree: 3.2.1
+
+ '@csstools/css-tokenizer@4.0.0': {}
+
'@cypress/request-promise@5.0.0(@cypress/request@3.0.10)(request@2.88.2)':
dependencies:
'@cypress/request': 3.0.10
@@ -19762,156 +20616,234 @@ snapshots:
'@esbuild/aix-ppc64@0.27.3':
optional: true
+ '@esbuild/aix-ppc64@0.27.7':
+ optional: true
+
'@esbuild/android-arm64@0.25.12':
optional: true
'@esbuild/android-arm64@0.27.3':
optional: true
+ '@esbuild/android-arm64@0.27.7':
+ optional: true
+
'@esbuild/android-arm@0.25.12':
optional: true
'@esbuild/android-arm@0.27.3':
optional: true
+ '@esbuild/android-arm@0.27.7':
+ optional: true
+
'@esbuild/android-x64@0.25.12':
optional: true
'@esbuild/android-x64@0.27.3':
optional: true
+ '@esbuild/android-x64@0.27.7':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.12':
optional: true
'@esbuild/darwin-arm64@0.27.3':
optional: true
+ '@esbuild/darwin-arm64@0.27.7':
+ optional: true
+
'@esbuild/darwin-x64@0.25.12':
optional: true
'@esbuild/darwin-x64@0.27.3':
optional: true
+ '@esbuild/darwin-x64@0.27.7':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.12':
optional: true
'@esbuild/freebsd-arm64@0.27.3':
optional: true
+ '@esbuild/freebsd-arm64@0.27.7':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.12':
optional: true
'@esbuild/freebsd-x64@0.27.3':
optional: true
+ '@esbuild/freebsd-x64@0.27.7':
+ optional: true
+
'@esbuild/linux-arm64@0.25.12':
optional: true
'@esbuild/linux-arm64@0.27.3':
optional: true
+ '@esbuild/linux-arm64@0.27.7':
+ optional: true
+
'@esbuild/linux-arm@0.25.12':
optional: true
'@esbuild/linux-arm@0.27.3':
optional: true
+ '@esbuild/linux-arm@0.27.7':
+ optional: true
+
'@esbuild/linux-ia32@0.25.12':
optional: true
'@esbuild/linux-ia32@0.27.3':
optional: true
+ '@esbuild/linux-ia32@0.27.7':
+ optional: true
+
'@esbuild/linux-loong64@0.25.12':
optional: true
'@esbuild/linux-loong64@0.27.3':
optional: true
+ '@esbuild/linux-loong64@0.27.7':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.12':
optional: true
'@esbuild/linux-mips64el@0.27.3':
optional: true
+ '@esbuild/linux-mips64el@0.27.7':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.12':
optional: true
'@esbuild/linux-ppc64@0.27.3':
optional: true
+ '@esbuild/linux-ppc64@0.27.7':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.12':
optional: true
'@esbuild/linux-riscv64@0.27.3':
optional: true
+ '@esbuild/linux-riscv64@0.27.7':
+ optional: true
+
'@esbuild/linux-s390x@0.25.12':
optional: true
'@esbuild/linux-s390x@0.27.3':
optional: true
+ '@esbuild/linux-s390x@0.27.7':
+ optional: true
+
'@esbuild/linux-x64@0.25.12':
optional: true
'@esbuild/linux-x64@0.27.3':
optional: true
+ '@esbuild/linux-x64@0.27.7':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.12':
optional: true
'@esbuild/netbsd-arm64@0.27.3':
optional: true
+ '@esbuild/netbsd-arm64@0.27.7':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.12':
optional: true
'@esbuild/netbsd-x64@0.27.3':
optional: true
+ '@esbuild/netbsd-x64@0.27.7':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.12':
optional: true
'@esbuild/openbsd-arm64@0.27.3':
optional: true
+ '@esbuild/openbsd-arm64@0.27.7':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.12':
optional: true
'@esbuild/openbsd-x64@0.27.3':
optional: true
+ '@esbuild/openbsd-x64@0.27.7':
+ optional: true
+
'@esbuild/openharmony-arm64@0.25.12':
optional: true
'@esbuild/openharmony-arm64@0.27.3':
optional: true
+ '@esbuild/openharmony-arm64@0.27.7':
+ optional: true
+
'@esbuild/sunos-x64@0.25.12':
optional: true
'@esbuild/sunos-x64@0.27.3':
optional: true
+ '@esbuild/sunos-x64@0.27.7':
+ optional: true
+
'@esbuild/win32-arm64@0.25.12':
optional: true
'@esbuild/win32-arm64@0.27.3':
optional: true
+ '@esbuild/win32-arm64@0.27.7':
+ optional: true
+
'@esbuild/win32-ia32@0.25.12':
optional: true
'@esbuild/win32-ia32@0.27.3':
optional: true
+ '@esbuild/win32-ia32@0.27.7':
+ optional: true
+
'@esbuild/win32-x64@0.25.12':
optional: true
'@esbuild/win32-x64@0.27.3':
optional: true
+ '@esbuild/win32-x64@0.27.7':
+ optional: true
+
'@eslint-community/eslint-utils@4.9.1(eslint@8.57.0)':
dependencies:
eslint: 8.57.0
@@ -19942,6 +20874,10 @@ snapshots:
'@ethereumjs/rlp': 5.0.2
ethereum-cryptography: 2.2.1
+ '@exodus/bytes@1.15.0(@noble/hashes@2.0.1)':
+ optionalDependencies:
+ '@noble/hashes': 2.0.1
+
'@expo/devcert@1.2.1':
dependencies:
'@expo/sudo-prompt': 9.3.2
@@ -20386,6 +21322,8 @@ snapshots:
'@isaacs/ttlcache@1.4.1': {}
+ '@isaacs/ttlcache@2.1.4': {}
+
'@istanbuljs/load-nyc-config@1.1.0':
dependencies:
camelcase: 5.3.1
@@ -20774,28 +21712,50 @@ snapshots:
'@kurkle/color@0.3.4': {}
- '@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))':
+ '@langchain/aws@0.1.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))':
dependencies:
'@aws-sdk/client-bedrock-agent-runtime': 3.1003.0
'@aws-sdk/client-bedrock-runtime': 3.1003.0
'@aws-sdk/client-kendra': 3.1003.0
'@aws-sdk/credential-provider-node': 3.972.17
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
transitivePeerDependencies:
- aws-crt
- '@langchain/community@0.3.59(60b357dc096a3106ab16514b06ce052e)':
+ '@langchain/classic@1.0.27(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(cheerio@1.2.0)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/openai': 1.4.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/textsplitters': 1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))
+ handlebars: 4.7.9
+ js-yaml: 4.1.1
+ jsonpointer: 5.0.1
+ openapi-types: 12.1.3
+ uuid: 10.0.0
+ yaml: 2.8.3
+ zod: 3.25.76
+ optionalDependencies:
+ cheerio: 1.2.0
+ langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ transitivePeerDependencies:
+ - '@opentelemetry/api'
+ - '@opentelemetry/exporter-trace-otlp-proto'
+ - '@opentelemetry/sdk-trace-base'
+ - openai
+ - ws
+
+ '@langchain/community@0.3.59(1289a407569d1b0c8cf61ad0c2bcf37c)':
dependencies:
'@browserbasehq/stagehand': 1.14.0(@playwright/test@1.58.2)(bufferutil@4.1.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(utf-8-validate@5.0.10)(zod@3.25.76)
'@ibm-cloud/watsonx-ai': 1.7.9
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
- '@langchain/weaviate': 0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/weaviate': 0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
binary-extensions: 2.3.0
flat: 5.0.2
ibm-cloud-sdk-core: 5.4.8
js-yaml: 4.1.1
- langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.13.6)(cheerio@1.2.0)(handlebars@4.7.8)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.14.0)(cheerio@1.2.0)(handlebars@4.7.9)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
langsmith: 0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
math-expression-evaluator: 2.0.7
openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
@@ -20809,7 +21769,6 @@ snapshots:
'@aws-sdk/client-s3': 3.1003.0
'@aws-sdk/credential-provider-node': 3.972.17
'@browserbasehq/sdk': 2.7.0
- '@smithy/util-utf8': 2.3.0
'@upstash/redis': 1.36.3
cheerio: 1.2.0
crypto-js: 4.2.0
@@ -20817,12 +21776,11 @@ snapshots:
google-auth-library: 9.15.1
googleapis: 137.1.0
html-to-text: 9.0.5
- ignore: 5.3.2
ioredis: 5.10.0
jsdom: 22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10)
jsonwebtoken: 9.0.3
lodash: 4.17.23
- pg: 8.16.3
+ pg: 8.20.0
playwright: 1.58.2
redis: 4.7.1
weaviate-client: 3.12.0
@@ -20848,32 +21806,27 @@ snapshots:
- handlebars
- peggy
- '@langchain/community@0.3.59(9266573ded5fda56099eca4ab106a463)':
+ '@langchain/community@1.1.27(1c9dd0a5a712999c5a106df86779aa3b)':
dependencies:
'@browserbasehq/stagehand': 1.14.0(@playwright/test@1.58.2)(bufferutil@4.1.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(utf-8-validate@5.0.10)(zod@3.25.76)
'@ibm-cloud/watsonx-ai': 1.7.9
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
- '@langchain/weaviate': 0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
+ '@langchain/classic': 1.0.27(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(cheerio@1.2.0)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/openai': 1.4.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
binary-extensions: 2.3.0
flat: 5.0.2
ibm-cloud-sdk-core: 5.4.8
js-yaml: 4.1.1
- langchain: 0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.13.6)(cheerio@1.2.0)(handlebars@4.7.8)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
- langsmith: 0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
math-expression-evaluator: 2.0.7
openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
uuid: 10.0.0
zod: 3.25.76
optionalDependencies:
'@aws-crypto/sha256-js': 5.2.0
- '@aws-sdk/client-bedrock-agent-runtime': 3.1003.0
- '@aws-sdk/client-bedrock-runtime': 3.1003.0
- '@aws-sdk/client-kendra': 3.1003.0
'@aws-sdk/client-s3': 3.1003.0
'@aws-sdk/credential-provider-node': 3.972.17
'@browserbasehq/sdk': 2.7.0
- '@smithy/util-utf8': 2.3.0
'@upstash/redis': 1.36.3
cheerio: 1.2.0
crypto-js: 4.2.0
@@ -20881,35 +21834,19 @@ snapshots:
google-auth-library: 9.15.1
googleapis: 137.1.0
html-to-text: 9.0.5
- ignore: 5.3.2
ioredis: 5.10.0
jsdom: 22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10)
jsonwebtoken: 9.0.3
lodash: 4.17.23
- pg: 8.16.3
+ pg: 8.20.0
playwright: 1.58.2
redis: 4.7.1
weaviate-client: 3.12.0
ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
transitivePeerDependencies:
- - '@langchain/anthropic'
- - '@langchain/aws'
- - '@langchain/cerebras'
- - '@langchain/cohere'
- - '@langchain/deepseek'
- - '@langchain/google-genai'
- - '@langchain/google-vertexai'
- - '@langchain/google-vertexai-web'
- - '@langchain/groq'
- - '@langchain/mistralai'
- - '@langchain/ollama'
- - '@langchain/xai'
- '@opentelemetry/api'
- '@opentelemetry/exporter-trace-otlp-proto'
- '@opentelemetry/sdk-trace-base'
- - axios
- - encoding
- - handlebars
- peggy
'@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))':
@@ -20952,48 +21889,57 @@ snapshots:
- '@opentelemetry/sdk-trace-base'
- openai
- '@langchain/google-common@0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)':
+ '@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@cfworker/json-schema': 4.1.1
+ '@standard-schema/spec': 1.1.0
+ ansi-styles: 5.2.0
+ camelcase: 6.3.0
+ decamelize: 1.2.0
+ js-tiktoken: 1.0.21
+ langsmith: 0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ mustache: 4.2.0
+ p-queue: 6.6.2
+ uuid: 11.1.0
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@opentelemetry/api'
+ - '@opentelemetry/exporter-trace-otlp-proto'
+ - '@opentelemetry/sdk-trace-base'
+ - openai
+ - ws
+
+ '@langchain/google-common@0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)':
+ dependencies:
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
uuid: 10.0.0
zod-to-json-schema: 3.25.1(zod@3.25.76)
transitivePeerDependencies:
- zod
- '@langchain/google-gauth@0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)':
+ '@langchain/google-gauth@0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/google-common': 0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/google-common': 0.1.8(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(zod@3.25.76)
google-auth-library: 8.9.0
transitivePeerDependencies:
- encoding
- supports-color
- zod
- '@langchain/langgraph-checkpoint@0.0.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))':
+ '@langchain/langgraph-checkpoint@1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
uuid: 10.0.0
- '@langchain/langgraph-sdk@0.0.112(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@19.2.4)':
dependencies:
'@types/json-schema': 7.0.15
p-queue: 6.6.2
p-retry: 4.6.2
uuid: 9.0.1
optionalDependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
-
- '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react@19.2.4)':
- dependencies:
- '@types/json-schema': 7.0.15
- p-queue: 6.6.2
- p-retry: 4.6.2
- uuid: 9.0.1
- optionalDependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
react: 19.2.4
'@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
@@ -21007,11 +21953,23 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- '@langchain/langgraph@0.2.74(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.1(zod@3.25.76))':
+ '@langchain/langgraph-sdk@1.8.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/langgraph-checkpoint': 0.0.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
- '@langchain/langgraph-sdk': 0.0.112(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@types/json-schema': 7.0.15
+ p-queue: 9.1.2
+ p-retry: 7.1.1
+ uuid: 13.0.0
+ optionalDependencies:
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ '@langchain/langgraph@1.2.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)':
+ dependencies:
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))
+ '@langchain/langgraph-sdk': 1.8.8(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@standard-schema/spec': 1.1.0
uuid: 10.0.0
zod: 3.25.76
optionalDependencies:
@@ -21019,10 +21977,12 @@ snapshots:
transitivePeerDependencies:
- react
- react-dom
+ - svelte
+ - vue
- '@langchain/openai@0.4.9(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
+ '@langchain/openai@0.4.9(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
js-tiktoken: 1.0.21
openai: 4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
zod: 3.25.76
@@ -21031,23 +21991,51 @@ snapshots:
- encoding
- ws
- '@langchain/openai@0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
+ '@langchain/openai@0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
js-tiktoken: 1.0.21
openai: 5.23.2(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
zod: 3.25.76
transitivePeerDependencies:
- ws
- '@langchain/textsplitters@0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))':
+ '@langchain/openai@1.4.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ js-tiktoken: 1.0.21
+ openai: 6.34.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - ws
+
+ '@langchain/openai@1.4.3(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))':
+ dependencies:
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ js-tiktoken: 1.0.21
+ openai: 6.34.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - ws
+
+ '@langchain/tavily@1.2.0(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))':
+ dependencies:
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ zod: 3.25.76
+
+ '@langchain/textsplitters@0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))':
+ dependencies:
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
js-tiktoken: 1.0.21
- '@langchain/weaviate@0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))':
+ '@langchain/textsplitters@1.0.1(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))':
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/core': 1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ js-tiktoken: 1.0.21
+
+ '@langchain/weaviate@0.2.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))':
+ dependencies:
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
uuid: 10.0.0
weaviate-client: 3.12.0
transitivePeerDependencies:
@@ -21211,8 +22199,8 @@ snapshots:
ai-v5: ai@5.0.60(zod@3.25.76)
date-fns: 3.6.0
dotenv: 16.6.1
- hono: 4.12.5
- hono-openapi: 0.4.8(hono@4.12.5)(openapi-types@12.1.3)(zod@3.25.76)
+ hono: 4.12.10
+ hono-openapi: 0.4.8(hono@4.12.10)(openapi-types@12.1.3)(zod@3.25.76)
js-tiktoken: 1.0.21
json-schema: 0.4.0
json-schema-to-zod: 2.7.0
@@ -21241,35 +22229,76 @@ snapshots:
- valibot
- zod-openapi
- '@mastra/deployer@0.19.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)':
+ '@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)':
+ dependencies:
+ '@a2a-js/sdk': 0.2.5
+ '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.20(zod@3.25.76)'
+ '@ai-sdk/provider-utils-v6': '@ai-sdk/provider-utils@4.0.0(zod@3.25.76)'
+ '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.1'
+ '@ai-sdk/provider-v6': '@ai-sdk/provider@3.0.5'
+ '@ai-sdk/ui-utils-v5': '@ai-sdk/ui-utils@1.2.11(zod@3.25.76)'
+ '@isaacs/ttlcache': 2.1.4
+ '@lukeed/uuid': 2.0.1
+ '@mastra/schema-compat': 1.2.7(zod@3.25.76)
+ '@modelcontextprotocol/sdk': 1.27.1(@cfworker/json-schema@4.1.1)(zod@3.25.76)
+ '@sindresorhus/slugify': 2.2.1
+ '@standard-schema/spec': 1.1.0
+ ajv: 8.18.0
+ dotenv: 17.4.0
+ execa: 9.6.1
+ gray-matter: 4.0.3
+ hono: 4.12.10
+ hono-openapi: 1.3.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(hono@4.12.10)(openapi-types@12.1.3)
+ ignore: 7.0.5
+ js-tiktoken: 1.0.21
+ json-schema: 0.4.0
+ lru-cache: 11.2.7
+ p-map: 7.0.4
+ p-retry: 7.1.1
+ picomatch: 4.0.3
+ radash: 12.1.1
+ tokenx: 1.3.0
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ xxhash-wasm: 1.1.0
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@cfworker/json-schema'
+ - '@hono/standard-validator'
+ - '@standard-community/standard-json'
+ - '@standard-community/standard-openapi'
+ - '@types/json-schema'
+ - bufferutil
+ - openapi-types
+ - supports-color
+ - utf-8-validate
+
+ '@mastra/deployer@1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)':
dependencies:
'@babel/core': 7.29.0
- '@babel/helper-module-imports': 7.28.6
'@babel/preset-typescript': 7.28.5(@babel/core@7.29.0)
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
- '@mastra/server': 0.19.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(zod@3.25.76)
- '@neon-rs/load': 0.1.82
- '@optimize-lodash/rollup-plugin': 5.1.0(rollup@4.50.2)
- '@rollup/plugin-alias': 5.1.1(rollup@4.50.2)
- '@rollup/plugin-commonjs': 28.0.9(rollup@4.50.2)
- '@rollup/plugin-esm-shim': 0.1.8(rollup@4.50.2)
- '@rollup/plugin-json': 6.1.0(rollup@4.50.2)
- '@rollup/plugin-node-resolve': 16.0.3(rollup@4.50.2)
- '@rollup/plugin-virtual': 3.0.2(rollup@4.50.2)
+ '@babel/traverse': 7.29.0
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
+ '@mastra/server': 1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)
+ '@optimize-lodash/rollup-plugin': 5.1.0(rollup@4.59.0)
+ '@rollup/plugin-alias': 6.0.0(rollup@4.59.0)
+ '@rollup/plugin-commonjs': 29.0.2(rollup@4.59.0)
+ '@rollup/plugin-esm-shim': 0.1.8(rollup@4.59.0)
+ '@rollup/plugin-json': 6.1.0(rollup@4.59.0)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0)
+ '@rollup/plugin-virtual': 3.0.2(rollup@4.59.0)
'@sindresorhus/slugify': 2.2.1
- builtins: 5.1.0
- detect-libc: 2.1.2
- dotenv: 16.6.1
+ '@types/babel__traverse': 7.28.0
empathic: 2.0.0
- esbuild: 0.25.12
+ esbuild: 0.27.7
find-workspaces: 0.3.1
fs-extra: 11.3.4
- hono: 4.12.5
+ hono: 4.12.10
local-pkg: 1.1.2
resolve-from: 5.0.0
- rollup: 4.50.2
- rollup-plugin-esbuild: 6.2.1(esbuild@0.25.12)(rollup@4.50.2)
- rollup-plugin-node-externals: 8.1.2(rollup@4.50.2)
+ resolve.exports: 2.0.3
+ rollup: 4.59.0
+ rollup-plugin-esbuild: 6.2.1(esbuild@0.27.7)(rollup@4.59.0)
+ strip-json-comments: 5.0.3
tinyglobby: 0.2.15
typescript-paths: 1.5.1(typescript@5.5.4)
zod: 3.25.76
@@ -21277,61 +22306,49 @@ snapshots:
- supports-color
- typescript
- '@mastra/loggers@0.10.19(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))':
+ '@mastra/loggers@1.1.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))':
dependencies:
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
- pino: 9.14.0
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
+ pino: 10.3.1
pino-pretty: 13.1.3
- '@mastra/mcp@0.13.5(@cfworker/json-schema@4.1.1)(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)':
+ '@mastra/mcp@1.4.1(@cfworker/json-schema@4.1.1)(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)':
dependencies:
'@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
'@modelcontextprotocol/sdk': 1.27.1(@cfworker/json-schema@4.1.1)(zod@3.25.76)
- date-fns: 4.1.0
- exit-hook: 4.0.0
+ exit-hook: 5.1.0
fast-deep-equal: 3.1.3
- uuid: 11.1.0
+ uuid: 13.0.0
zod: 3.25.76
- zod-from-json-schema: 0.5.2
- zod-from-json-schema-v3: zod-from-json-schema@0.0.5
transitivePeerDependencies:
- '@cfworker/json-schema'
- '@types/json-schema'
- supports-color
- '@mastra/memory@0.15.13(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(react@19.2.4)(zod@3.25.76)':
+ '@mastra/memory@1.13.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)':
dependencies:
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
- '@mastra/schema-compat': 0.11.9(ai@4.3.19(react@19.2.4)(zod@3.25.76))(zod@3.25.76)
- '@upstash/redis': 1.36.3
- ai: 4.3.19(react@19.2.4)(zod@3.25.76)
- ai-v5: ai@5.0.60(zod@3.25.76)
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
+ '@mastra/schema-compat': 1.2.7(zod@3.25.76)
async-mutex: 0.5.0
- js-tiktoken: 1.0.21
+ image-size: 2.0.2
json-schema: 0.4.0
- pg: 8.20.0
- pg-pool: 3.13.0(pg@8.20.0)
- postgres: 3.4.8
- redis: 5.11.0
+ lru-cache: 11.2.7
+ probe-image-size: 7.2.3
+ tokenx: 1.3.0
xxhash-wasm: 1.1.0
zod: 3.25.76
- zod-to-json-schema: 3.25.1(zod@3.25.76)
transitivePeerDependencies:
- - '@node-rs/xxhash'
- - pg-native
- - react
+ - supports-color
- '@mastra/pg@0.17.10(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(pg-query-stream@4.10.3(pg@8.16.3))':
+ '@mastra/pg@1.8.5(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))':
dependencies:
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
async-mutex: 0.5.0
pg: 8.20.0
- pg-promise: 11.15.0(pg-query-stream@4.10.3(pg@8.16.3))
xxhash-wasm: 1.1.0
transitivePeerDependencies:
- pg-native
- - pg-query-stream
'@mastra/schema-compat@0.11.4(ai@4.3.19(react@19.2.4)(zod@3.25.76))(zod@3.25.76)':
dependencies:
@@ -21342,19 +22359,18 @@ snapshots:
zod-from-json-schema-v3: zod-from-json-schema@0.0.5
zod-to-json-schema: 3.25.1(zod@3.25.76)
- '@mastra/schema-compat@0.11.9(ai@4.3.19(react@19.2.4)(zod@3.25.76))(zod@3.25.76)':
+ '@mastra/schema-compat@1.2.7(zod@3.25.76)':
dependencies:
- ai: 4.3.19(react@19.2.4)(zod@3.25.76)
- json-schema: 0.4.0
json-schema-to-zod: 2.7.0
zod: 3.25.76
zod-from-json-schema: 0.5.2
zod-from-json-schema-v3: zod-from-json-schema@0.0.5
zod-to-json-schema: 3.25.1(zod@3.25.76)
- '@mastra/server@0.19.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(zod@3.25.76)':
+ '@mastra/server@1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)':
dependencies:
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
+ hono: 4.12.10
zod: 3.25.76
'@meronex/icons@4.0.0(react@19.2.4)':
@@ -21605,8 +22621,6 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@neon-rs/load@0.1.82': {}
-
'@nest-lab/throttler-storage-redis@1.2.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@nestjs/throttler@6.5.0(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(reflect-metadata@0.1.14))(ioredis@5.10.0)(reflect-metadata@0.1.14)':
dependencies:
'@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2)
@@ -21616,13 +22630,13 @@ snapshots:
reflect-metadata: 0.1.14
tslib: 2.8.1
- '@nestjs/axios@4.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.13.6)(rxjs@7.8.2)':
+ '@nestjs/axios@4.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.14.0)(rxjs@7.8.2)':
dependencies:
'@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)
- axios: 1.13.6(debug@4.4.3)
+ axios: 1.14.0(debug@4.4.3)
rxjs: 7.8.2
- '@nestjs/cli@10.0.2(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@3.5.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)':
+ '@nestjs/cli@10.0.2(@swc/cli@0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@3.5.3))(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)':
dependencies:
'@angular-devkit/core': 16.1.0(chokidar@3.5.3)
'@angular-devkit/schematics': 16.1.0(chokidar@3.5.3)
@@ -21632,7 +22646,7 @@ snapshots:
chokidar: 3.5.3
cli-table3: 0.6.3
commander: 4.1.1
- fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.1.3)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.1.3)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
inquirer: 8.2.5
node-emoji: 1.11.0
ora: 5.4.1
@@ -21644,7 +22658,7 @@ snapshots:
tsconfig-paths: 4.2.0
tsconfig-paths-webpack-plugin: 4.0.1
typescript: 5.1.3
- webpack: 5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
webpack-node-externals: 3.0.0
optionalDependencies:
'@swc/cli': 0.3.14(@swc/core@1.5.7(@swc/helpers@0.5.13))(chokidar@3.5.3)
@@ -21840,7 +22854,7 @@ snapshots:
'@neynar/nodejs-sdk@3.137.0(@nestjs/microservices@10.4.22)(@nestjs/platform-express@10.4.22)(bufferutil@4.1.0)(class-transformer@0.5.1)(class-validator@0.14.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)':
dependencies:
'@openapitools/openapi-generator-cli': 2.30.2(@nestjs/microservices@10.4.22)(@nestjs/platform-express@10.4.22)(class-transformer@0.5.1)(class-validator@0.14.4)
- axios: 1.13.6(debug@4.4.3)
+ axios: 1.14.0(debug@4.4.3)
semver: 7.7.4
viem: 2.47.0(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)
transitivePeerDependencies:
@@ -21949,11 +22963,11 @@ snapshots:
'@openapitools/openapi-generator-cli@2.30.2(@nestjs/microservices@10.4.22)(@nestjs/platform-express@10.4.22)(class-transformer@0.5.1)(class-validator@0.14.4)':
dependencies:
'@inquirer/select': 1.3.3
- '@nestjs/axios': 4.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.13.6)(rxjs@7.8.2)
+ '@nestjs/axios': 4.0.1(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.14.0)(rxjs@7.8.2)
'@nestjs/common': 11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nestjs/core': 11.1.16(@nestjs/common@11.1.16(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/microservices@10.4.22)(@nestjs/platform-express@10.4.22)(reflect-metadata@0.2.2)(rxjs@7.8.2)
'@nuxtjs/opencollective': 0.3.2
- axios: 1.13.6(debug@4.4.3)
+ axios: 1.14.0(debug@4.4.3)
chalk: 4.1.2
commander: 8.3.0
compare-versions: 6.1.1
@@ -22981,11 +23995,11 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0)
- '@optimize-lodash/rollup-plugin@5.1.0(rollup@4.50.2)':
+ '@optimize-lodash/rollup-plugin@5.1.0(rollup@4.59.0)':
dependencies:
'@optimize-lodash/transform': 3.0.6
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
- rollup: 4.50.2
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
+ rollup: 4.59.0
'@optimize-lodash/transform@3.0.6':
dependencies:
@@ -23118,7 +24132,7 @@ snapshots:
dependencies:
playwright: 1.58.2
- '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))':
+ '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.10.0)(type-fest@4.41.0)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))':
dependencies:
ansi-html: 0.0.9
core-js-pure: 3.48.0
@@ -23128,7 +24142,7 @@ snapshots:
react-refresh: 0.10.0
schema-utils: 4.3.3
source-map: 0.7.6
- webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
optionalDependencies:
type-fest: 4.41.0
@@ -23140,6 +24154,10 @@ snapshots:
dependencies:
cross-spawn: 7.0.6
+ '@posthog/core@1.7.1':
+ dependencies:
+ cross-spawn: 7.0.6
+
'@posthog/types@1.359.1': {}
'@postiz/wallets@0.0.1(@babel/runtime@7.28.6)(@react-native-async-storage/async-storage@1.24.0(react-native@0.84.1(@babel/core@7.29.0)(@types/react@19.1.8)(bufferutil@4.1.0)(react@19.2.4)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10))(@types/react@19.1.8)(@upstash/redis@1.36.3)(bs58@6.0.0)(bufferutil@4.1.0)(ioredis@5.10.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.25.76)':
@@ -23758,20 +24776,12 @@ snapshots:
dependencies:
'@redis/client': 1.6.1
- '@redis/bloom@5.11.0(@redis/client@5.11.0)':
- dependencies:
- '@redis/client': 5.11.0
-
'@redis/client@1.6.1':
dependencies:
cluster-key-slot: 1.1.2
generic-pool: 3.9.0
yallist: 4.0.0
- '@redis/client@5.11.0':
- dependencies:
- cluster-key-slot: 1.1.2
-
'@redis/graph@1.1.1(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
@@ -23780,26 +24790,14 @@ snapshots:
dependencies:
'@redis/client': 1.6.1
- '@redis/json@5.11.0(@redis/client@5.11.0)':
- dependencies:
- '@redis/client': 5.11.0
-
'@redis/search@1.2.0(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
- '@redis/search@5.11.0(@redis/client@5.11.0)':
- dependencies:
- '@redis/client': 5.11.0
-
'@redis/time-series@1.1.0(@redis/client@1.6.1)':
dependencies:
'@redis/client': 1.6.1
- '@redis/time-series@5.11.0(@redis/client@5.11.0)':
- dependencies:
- '@redis/client': 5.11.0
-
'@remirror/core-constants@3.0.0': {}
'@reown/appkit-common@1.7.2(bufferutil@4.1.0)(typescript@5.5.4)(utf-8-validate@5.0.10)(zod@3.22.4)':
@@ -24030,9 +25028,9 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.27': {}
- '@rollup/plugin-alias@5.1.1(rollup@4.50.2)':
+ '@rollup/plugin-alias@6.0.0(rollup@4.59.0)':
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.59.0
'@rollup/plugin-commonjs@28.0.1(rollup@4.59.0)':
dependencies:
@@ -24046,9 +25044,9 @@ snapshots:
optionalDependencies:
rollup: 4.59.0
- '@rollup/plugin-commonjs@28.0.9(rollup@4.50.2)':
+ '@rollup/plugin-commonjs@29.0.2(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
commondir: 1.0.1
estree-walker: 2.0.2
fdir: 6.5.0(picomatch@4.0.3)
@@ -24056,48 +25054,40 @@ snapshots:
magic-string: 0.30.21
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.59.0
- '@rollup/plugin-esm-shim@0.1.8(rollup@4.50.2)':
+ '@rollup/plugin-esm-shim@0.1.8(rollup@4.59.0)':
dependencies:
magic-string: 0.30.21
mlly: 1.8.1
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.59.0
- '@rollup/plugin-json@6.1.0(rollup@4.50.2)':
+ '@rollup/plugin-json@6.1.0(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.59.0
- '@rollup/plugin-node-resolve@16.0.3(rollup@4.50.2)':
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.11
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.59.0
- '@rollup/plugin-virtual@3.0.2(rollup@4.50.2)':
+ '@rollup/plugin-virtual@3.0.2(rollup@4.59.0)':
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.59.0
'@rollup/pluginutils@4.2.1':
dependencies:
estree-walker: 2.0.2
picomatch: 2.3.1
- '@rollup/pluginutils@5.3.0(rollup@4.50.2)':
- dependencies:
- '@types/estree': 1.0.8
- estree-walker: 2.0.2
- picomatch: 4.0.3
- optionalDependencies:
- rollup: 4.50.2
-
'@rollup/pluginutils@5.3.0(rollup@4.59.0)':
dependencies:
'@types/estree': 1.0.8
@@ -24106,141 +25096,78 @@ snapshots:
optionalDependencies:
rollup: 4.59.0
- '@rollup/rollup-android-arm-eabi@4.50.2':
- optional: true
-
'@rollup/rollup-android-arm-eabi@4.59.0':
optional: true
- '@rollup/rollup-android-arm64@4.50.2':
- optional: true
-
'@rollup/rollup-android-arm64@4.59.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.50.2':
- optional: true
-
'@rollup/rollup-darwin-arm64@4.59.0':
optional: true
- '@rollup/rollup-darwin-x64@4.50.2':
- optional: true
-
'@rollup/rollup-darwin-x64@4.59.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.50.2':
- optional: true
-
'@rollup/rollup-freebsd-arm64@4.59.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.50.2':
- optional: true
-
'@rollup/rollup-freebsd-x64@4.59.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.50.2':
- optional: true
-
'@rollup/rollup-linux-arm-gnueabihf@4.59.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.50.2':
- optional: true
-
'@rollup/rollup-linux-arm-musleabihf@4.59.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.50.2':
- optional: true
-
'@rollup/rollup-linux-arm64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.50.2':
- optional: true
-
'@rollup/rollup-linux-arm64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.50.2':
- optional: true
-
'@rollup/rollup-linux-loong64-gnu@4.59.0':
optional: true
'@rollup/rollup-linux-loong64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.50.2':
- optional: true
-
'@rollup/rollup-linux-ppc64-gnu@4.59.0':
optional: true
'@rollup/rollup-linux-ppc64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.50.2':
- optional: true
-
'@rollup/rollup-linux-riscv64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.50.2':
- optional: true
-
'@rollup/rollup-linux-riscv64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.50.2':
- optional: true
-
'@rollup/rollup-linux-s390x-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.50.2':
- optional: true
-
'@rollup/rollup-linux-x64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.50.2':
- optional: true
-
'@rollup/rollup-linux-x64-musl@4.59.0':
optional: true
'@rollup/rollup-openbsd-x64@4.59.0':
optional: true
- '@rollup/rollup-openharmony-arm64@4.50.2':
- optional: true
-
'@rollup/rollup-openharmony-arm64@4.59.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.50.2':
- optional: true
-
'@rollup/rollup-win32-arm64-msvc@4.59.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.50.2':
- optional: true
-
'@rollup/rollup-win32-ia32-msvc@4.59.0':
optional: true
'@rollup/rollup-win32-x64-gnu@4.59.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.50.2':
- optional: true
-
'@rollup/rollup-win32-x64-msvc@4.59.0':
optional: true
@@ -24434,7 +25361,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@sentry/nextjs@10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.2.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))':
+ '@sentry/nextjs@10.45.0(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(next@16.2.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3))(react@19.2.4)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.40.0
@@ -24446,7 +25373,7 @@ snapshots:
'@sentry/opentelemetry': 10.45.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.40.0)
'@sentry/react': 10.45.0(react@19.2.4)
'@sentry/vercel-edge': 10.45.0
- '@sentry/webpack-plugin': 5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ '@sentry/webpack-plugin': 5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
next: 16.2.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-macros@3.1.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.3)
rollup: 4.59.0
stacktrace-parser: 0.1.11
@@ -24542,11 +25469,11 @@ snapshots:
'@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0)
'@sentry/core': 10.45.0
- '@sentry/webpack-plugin@5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))':
+ '@sentry/webpack-plugin@5.1.1(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))':
dependencies:
'@sentry/bundler-plugin-core': 5.1.1
uuid: 9.0.1
- webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
transitivePeerDependencies:
- encoding
- supports-color
@@ -25443,6 +26370,23 @@ snapshots:
eventemitter3: 5.0.4
uuid: 9.0.1
+ '@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/json-schema': 7.0.15
+ quansync: 0.2.11
+ optionalDependencies:
+ zod: 3.25.76
+ zod-to-json-schema: 3.25.1(zod@3.25.76)
+
+ '@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76)':
+ dependencies:
+ '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)
+ '@standard-schema/spec': 1.1.0
+ openapi-types: 12.1.3
+ optionalDependencies:
+ zod: 3.25.76
+
'@standard-schema/spec@1.1.0': {}
'@stripe/react-stripe-js@5.6.1(@stripe/stripe-js@8.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
@@ -25728,12 +26672,12 @@ snapshots:
postcss: 8.5.8
tailwindcss: 4.2.1
- '@tailwindcss/vite@4.2.1(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))':
+ '@tailwindcss/vite@4.2.1(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))':
dependencies:
'@tailwindcss/node': 4.2.1
'@tailwindcss/oxide': 4.2.1
tailwindcss: 4.2.1
- vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
'@tanstack/react-virtual@3.13.21(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
@@ -25784,7 +26728,7 @@ snapshots:
long: 5.3.2
protobufjs: 7.5.4
- '@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.25.12)(tslib@2.8.1)':
+ '@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1)':
dependencies:
'@grpc/grpc-js': 1.14.3
'@swc/core': 1.5.7(@swc/helpers@0.5.13)
@@ -25803,11 +26747,11 @@ snapshots:
protobufjs: 7.5.4
rxjs: 7.8.2
source-map: 0.7.6
- source-map-loader: 4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ source-map-loader: 4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
supports-color: 8.1.1
- swc-loader: 0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ swc-loader: 0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
unionfs: 4.6.0
- webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
transitivePeerDependencies:
- '@swc/helpers'
- esbuild
@@ -27166,6 +28110,7 @@ snapshots:
'@upstash/redis@1.36.3':
dependencies:
uncrypto: 0.1.3
+ optional: true
'@urql/core@5.2.0(graphql@16.13.1)':
dependencies:
@@ -27176,7 +28121,7 @@ snapshots:
'@vercel/oidc@3.2.0': {}
- '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))':
+ '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -27184,7 +28129,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
transitivePeerDependencies:
- supports-color
@@ -27203,7 +28148,7 @@ snapshots:
std-env: 3.10.0
strip-literal: 2.1.1
test-exclude: 6.0.0
- vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
transitivePeerDependencies:
- supports-color
@@ -27214,13 +28159,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))':
+ '@vitest/mocker@3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))':
dependencies:
'@vitest/spy': 3.1.4
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
'@vitest/pretty-format@3.1.4':
dependencies:
@@ -27254,7 +28199,7 @@ snapshots:
pathe: 1.1.2
picocolors: 1.1.1
sirv: 2.0.4
- vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vitest: 3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
'@vitest/utils@1.6.0':
dependencies:
@@ -27909,8 +28854,6 @@ snapshots:
'@webcomponents/custom-elements@1.6.0': {}
- '@webcontainer/env@1.1.1': {}
-
'@whatwg-node/disposablestack@0.0.6':
dependencies:
'@whatwg-node/promise-helpers': 1.3.2
@@ -27984,6 +28927,8 @@ snapshots:
'@xtuc/long@4.2.2': {}
+ '@zeit/schemas@2.36.0': {}
+
abab@2.0.6: {}
abbrev@1.1.1: {}
@@ -28135,6 +29080,10 @@ snapshots:
anser@1.4.10: {}
+ ansi-align@3.0.1:
+ dependencies:
+ string-width: 4.2.3
+
ansi-colors@4.1.3: {}
ansi-escapes@4.3.2:
@@ -28291,8 +29240,6 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- assert-options@0.8.3: {}
-
assert-plus@1.0.0: {}
assert@2.1.0:
@@ -28346,11 +29293,11 @@ snapshots:
axe-core@4.11.1: {}
- axios@1.13.6(debug@4.4.3):
+ axios@1.14.0(debug@4.4.3):
dependencies:
follow-redirects: 1.15.11(debug@4.4.3)
form-data: 4.0.5
- proxy-from-env: 1.1.0
+ proxy-from-env: 2.1.0
transitivePeerDependencies:
- debug
@@ -28493,6 +29440,10 @@ snapshots:
- encoding
- supports-color
+ bidi-js@1.0.3:
+ dependencies:
+ require-from-string: 2.0.2
+
big.js@5.2.2: {}
big.js@6.2.2: {}
@@ -28579,6 +29530,17 @@ snapshots:
bowser@2.14.1: {}
+ boxen@7.0.0:
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 7.0.1
+ chalk: 5.6.2
+ cli-boxes: 3.0.0
+ string-width: 5.1.2
+ type-fest: 2.19.0
+ widest-line: 4.0.1
+ wrap-ansi: 8.1.0
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -28696,14 +29658,6 @@ snapshots:
dependencies:
node-gyp-build: 4.8.4
- builtins@5.1.0:
- dependencies:
- semver: 7.7.4
-
- bundle-name@4.1.0:
- dependencies:
- run-applescript: 7.1.0
-
bundle-require@5.1.0(esbuild@0.27.3):
dependencies:
esbuild: 0.27.3
@@ -28713,6 +29667,8 @@ snapshots:
dependencies:
streamsearch: 1.1.0
+ bytes@3.0.0: {}
+
bytes@3.1.2: {}
cac@6.7.14: {}
@@ -28764,6 +29720,8 @@ snapshots:
camelcase@6.3.0: {}
+ camelcase@7.0.1: {}
+
caniuse-lite@1.0.30001777: {}
canvas@2.11.2:
@@ -28795,11 +29753,17 @@ snapshots:
loupe: 3.2.1
pathval: 2.0.1
+ chalk-template@0.4.0:
+ dependencies:
+ chalk: 4.1.2
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
+ chalk@5.0.1: {}
+
chalk@5.6.2: {}
change-case@4.1.2:
@@ -28964,6 +29928,8 @@ snapshots:
clean-stack@2.2.0: {}
+ cli-boxes@3.0.0: {}
+
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
@@ -28982,6 +29948,12 @@ snapshots:
client-only@0.0.1: {}
+ clipboardy@3.0.0:
+ dependencies:
+ arch: 2.2.0
+ execa: 5.1.1
+ is-wsl: 2.2.0
+
cliui@6.0.0:
dependencies:
string-width: 4.2.3
@@ -29175,6 +30147,8 @@ snapshots:
tslib: 2.8.1
upper-case: 2.0.2
+ content-disposition@0.5.2: {}
+
content-disposition@0.5.4:
dependencies:
safe-buffer: 5.2.1
@@ -29377,6 +30351,11 @@ snapshots:
mdn-data: 2.0.30
source-map-js: 1.2.1
+ css-tree@3.2.1:
+ dependencies:
+ mdn-data: 2.27.1
+ source-map-js: 1.2.1
+
css-what@6.2.2: {}
cssesc@3.0.0: {}
@@ -29432,6 +30411,13 @@ snapshots:
whatwg-mimetype: 3.0.0
whatwg-url: 12.0.1
+ data-urls@7.0.0(@noble/hashes@2.0.1):
+ dependencies:
+ whatwg-mimetype: 5.0.0
+ whatwg-url: 16.0.1(@noble/hashes@2.0.1)
+ transitivePeerDependencies:
+ - '@noble/hashes'
+
data-view-buffer@1.0.2:
dependencies:
call-bound: 1.0.4
@@ -29452,8 +30438,6 @@ snapshots:
date-fns@3.6.0: {}
- date-fns@4.1.0: {}
-
dateformat@4.6.3: {}
dayjs@1.11.13: {}
@@ -29468,10 +30452,6 @@ snapshots:
dependencies:
ms: 2.1.3
- debug@4.3.1:
- dependencies:
- ms: 2.1.2
-
debug@4.4.3(supports-color@5.5.0):
dependencies:
ms: 2.1.3
@@ -29523,19 +30503,14 @@ snapshots:
which-collection: 1.0.2
which-typed-array: 1.1.20
+ deep-extend@0.6.0: {}
+
deep-is@0.1.4: {}
deepmerge@2.2.1: {}
deepmerge@4.3.1: {}
- default-browser-id@5.0.1: {}
-
- default-browser@5.5.0:
- dependencies:
- bundle-name: 4.1.0
- default-browser-id: 5.0.1
-
defaults@1.0.4:
dependencies:
clone: 1.0.4
@@ -29548,8 +30523,6 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- define-lazy-prop@3.0.0: {}
-
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
@@ -29674,6 +30647,10 @@ snapshots:
optionalDependencies:
'@types/trusted-types': 2.0.7
+ dompurify@3.4.1:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
domutils@3.2.2:
dependencies:
dom-serializer: 2.0.0
@@ -29696,6 +30673,8 @@ snapshots:
dotenv@16.6.1: {}
+ dotenv@17.4.0: {}
+
draggabilly@3.0.0:
dependencies:
get-size: 3.0.0
@@ -29813,6 +30792,8 @@ snapshots:
entities@7.0.1: {}
+ entities@8.0.0: {}
+
error-ex@1.3.4:
dependencies:
is-arrayish: 0.2.1
@@ -30013,6 +30994,35 @@ snapshots:
'@esbuild/win32-ia32': 0.27.3
'@esbuild/win32-x64': 0.27.3
+ esbuild@0.27.7:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.7
+ '@esbuild/android-arm': 0.27.7
+ '@esbuild/android-arm64': 0.27.7
+ '@esbuild/android-x64': 0.27.7
+ '@esbuild/darwin-arm64': 0.27.7
+ '@esbuild/darwin-x64': 0.27.7
+ '@esbuild/freebsd-arm64': 0.27.7
+ '@esbuild/freebsd-x64': 0.27.7
+ '@esbuild/linux-arm': 0.27.7
+ '@esbuild/linux-arm64': 0.27.7
+ '@esbuild/linux-ia32': 0.27.7
+ '@esbuild/linux-loong64': 0.27.7
+ '@esbuild/linux-mips64el': 0.27.7
+ '@esbuild/linux-ppc64': 0.27.7
+ '@esbuild/linux-riscv64': 0.27.7
+ '@esbuild/linux-s390x': 0.27.7
+ '@esbuild/linux-x64': 0.27.7
+ '@esbuild/netbsd-arm64': 0.27.7
+ '@esbuild/netbsd-x64': 0.27.7
+ '@esbuild/openbsd-arm64': 0.27.7
+ '@esbuild/openbsd-x64': 0.27.7
+ '@esbuild/openharmony-arm64': 0.27.7
+ '@esbuild/sunos-x64': 0.27.7
+ '@esbuild/win32-arm64': 0.27.7
+ '@esbuild/win32-ia32': 0.27.7
+ '@esbuild/win32-x64': 0.27.7
+
escalade@3.2.0: {}
escape-html@1.0.3: {}
@@ -30422,7 +31432,7 @@ snapshots:
exifr@7.1.3: {}
- exit-hook@4.0.0: {}
+ exit-hook@5.1.0: {}
exit@0.1.2: {}
@@ -30523,6 +31533,10 @@ snapshots:
ext-list: 2.2.2
sort-keys-length: 1.0.1
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
extend@3.0.2: {}
external-editor@3.1.0:
@@ -30537,7 +31551,7 @@ snapshots:
facebook-nodejs-business-sdk@21.0.5:
dependencies:
- axios: 1.13.6(debug@4.4.3)
+ axios: 1.14.0(debug@4.4.3)
currency-codes: 1.5.1
iso-3166-1: 2.1.1
js-sha256: 0.9.0
@@ -30585,10 +31599,20 @@ snapshots:
fast-stable-stringify@1.0.0: {}
+ fast-string-truncated-width@1.2.1: {}
+
+ fast-string-width@1.1.0:
+ dependencies:
+ fast-string-truncated-width: 1.2.1
+
fast-text-encoding@1.0.6: {}
fast-uri@3.1.0: {}
+ fast-wrap-ansi@0.1.6:
+ dependencies:
+ fast-string-width: 1.1.0
+
fast-xml-builder@1.0.0: {}
fast-xml-parser@4.5.4:
@@ -30797,7 +31821,7 @@ snapshots:
forever-agent@0.6.1: {}
- fork-ts-checker-webpack-plugin@8.0.0(typescript@5.1.3)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)):
+ fork-ts-checker-webpack-plugin@8.0.0(typescript@5.1.3)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)):
dependencies:
'@babel/code-frame': 7.29.0
chalk: 4.1.2
@@ -30812,7 +31836,7 @@ snapshots:
semver: 7.7.4
tapable: 2.3.0
typescript: 5.1.3
- webpack: 5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
form-data-encoder@1.7.2: {}
@@ -31217,6 +32241,13 @@ snapshots:
graphql@16.13.1: {}
+ gray-matter@4.0.3:
+ dependencies:
+ js-yaml: 3.14.2
+ kind-of: 6.0.3
+ section-matter: 1.0.0
+ strip-bom-string: 1.0.0
+
groq-sdk@0.5.0:
dependencies:
'@types/node': 18.16.9
@@ -31268,6 +32299,15 @@ snapshots:
optionalDependencies:
uglify-js: 3.19.3
+ handlebars@4.7.9:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
happy-dom@15.11.7:
dependencies:
entities: 4.5.0
@@ -31531,14 +32571,25 @@ snapshots:
dependencies:
react-is: 16.13.1
- hono-openapi@0.4.8(hono@4.12.5)(openapi-types@12.1.3)(zod@3.25.76):
+ hono-openapi@0.4.8(hono@4.12.10)(openapi-types@12.1.3)(zod@3.25.76):
dependencies:
json-schema-walker: 2.0.0
openapi-types: 12.1.3
optionalDependencies:
- hono: 4.12.5
+ hono: 4.12.10
zod: 3.25.76
+ hono-openapi@1.3.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(hono@4.12.10)(openapi-types@12.1.3):
+ dependencies:
+ '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76)
+ '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76)
+ '@types/json-schema': 7.0.15
+ openapi-types: 12.1.3
+ optionalDependencies:
+ hono: 4.12.10
+
+ hono@4.12.10: {}
+
hono@4.12.5: {}
hookified@1.15.1: {}
@@ -31554,6 +32605,12 @@ snapshots:
dependencies:
whatwg-encoding: 2.0.0
+ html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1):
+ dependencies:
+ '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1)
+ transitivePeerDependencies:
+ - '@noble/hashes'
+
html-entities@2.6.0: {}
html-escaper@2.0.2: {}
@@ -31679,7 +32736,7 @@ snapshots:
'@types/debug': 4.1.12
'@types/node': 18.19.130
'@types/tough-cookie': 4.0.5
- axios: 1.13.6(debug@4.4.3)
+ axios: 1.14.0(debug@4.4.3)
camelcase: 6.3.0
debug: 4.4.3(supports-color@5.5.0)
dotenv: 16.6.1
@@ -31689,7 +32746,7 @@ snapshots:
isstream: 0.1.2
jsonwebtoken: 9.0.3
mime-types: 2.1.35
- retry-axios: 2.6.0(axios@1.13.6)
+ retry-axios: 2.6.0(axios@1.14.0)
tough-cookie: 4.1.4
transitivePeerDependencies:
- supports-color
@@ -31720,6 +32777,8 @@ snapshots:
dependencies:
queue: 6.0.2
+ image-size@2.0.2: {}
+
image-to-pdf@3.0.2:
dependencies:
pdfkit: 0.15.2
@@ -31850,8 +32909,6 @@ snapshots:
ip-address@10.1.0: {}
- ip-regex@4.3.0: {}
-
ipaddr.js@1.9.1: {}
iron-webcrypto@1.2.1: {}
@@ -31939,7 +32996,7 @@ snapshots:
is-docker@2.2.1: {}
- is-docker@3.0.0: {}
+ is-extendable@0.1.1: {}
is-extendable@1.0.1:
dependencies:
@@ -31973,10 +33030,6 @@ snapshots:
is-hotkey@0.1.8: {}
- is-inside-container@1.0.0:
- dependencies:
- is-docker: 3.0.0
-
is-interactive@1.0.0: {}
is-map@2.0.3: {}
@@ -32016,6 +33069,8 @@ snapshots:
is-plain-object@5.0.0: {}
+ is-port-reachable@4.0.0: {}
+
is-potential-custom-element-name@1.0.1: {}
is-promise@4.0.0: {}
@@ -32064,8 +33119,6 @@ snapshots:
is-unicode-supported@2.1.0: {}
- is-url@1.2.4: {}
-
is-weakmap@2.0.2: {}
is-weakref@1.1.1:
@@ -32081,16 +33134,6 @@ snapshots:
dependencies:
is-docker: 2.2.1
- is-wsl@3.1.1:
- dependencies:
- is-inside-container: 1.0.0
-
- is2@2.0.9:
- dependencies:
- deep-is: 0.1.4
- ip-regex: 4.3.0
- is-url: 1.2.4
-
isarray@1.0.0: {}
isarray@2.0.5: {}
@@ -32103,6 +33146,14 @@ snapshots:
isobject@3.0.1: {}
+ isomorphic-dompurify@3.10.0(@noble/hashes@2.0.1)(canvas@2.11.2):
+ dependencies:
+ dompurify: 3.4.1
+ jsdom: 29.1.0(@noble/hashes@2.0.1)(canvas@2.11.2)
+ transitivePeerDependencies:
+ - '@noble/hashes'
+ - canvas
+
isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10)):
dependencies:
ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10)
@@ -32678,6 +33729,34 @@ snapshots:
- supports-color
- utf-8-validate
+ jsdom@29.1.0(@noble/hashes@2.0.1)(canvas@2.11.2):
+ dependencies:
+ '@asamuzakjp/css-color': 5.1.11
+ '@asamuzakjp/dom-selector': 7.1.1
+ '@bramus/specificity': 2.4.2
+ '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1)
+ '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1)
+ css-tree: 3.2.1
+ data-urls: 7.0.0(@noble/hashes@2.0.1)
+ decimal.js: 10.6.0
+ html-encoding-sniffer: 6.0.0(@noble/hashes@2.0.1)
+ is-potential-custom-element-name: 1.0.1
+ lru-cache: 11.3.5
+ parse5: 8.0.1
+ saxes: 6.0.0
+ symbol-tree: 3.2.4
+ tough-cookie: 6.0.1
+ undici: 7.25.0
+ w3c-xmlserializer: 5.0.0
+ webidl-conversions: 8.0.1
+ whatwg-mimetype: 5.0.0
+ whatwg-url: 16.0.1(@noble/hashes@2.0.1)
+ xml-name-validator: 5.0.0
+ optionalDependencies:
+ canvas: 2.11.2
+ transitivePeerDependencies:
+ - '@noble/hashes'
+
jsesc@3.1.0: {}
json-bigint@1.0.0:
@@ -32808,17 +33887,19 @@ snapshots:
keyvaluestorage-interface@1.0.0: {}
+ kind-of@6.0.3: {}
+
kleur@3.0.3: {}
kleur@4.1.5: {}
konva@10.2.0: {}
- langchain@0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.13.6)(cheerio@1.2.0)(handlebars@4.7.8)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)):
+ langchain@0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.14.0)(cheerio@1.2.0)(handlebars@4.7.9)(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)):
dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
- '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
+ '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
+ '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
+ '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
js-tiktoken: 1.0.21
js-yaml: 4.1.1
jsonpointer: 5.0.1
@@ -32829,36 +33910,10 @@ snapshots:
yaml: 2.8.2
zod: 3.25.76
optionalDependencies:
- '@langchain/aws': 0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
- axios: 1.13.6(debug@4.4.3)
+ '@langchain/aws': 0.1.15(@langchain/core@1.1.39(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)))
+ axios: 1.14.0(debug@4.4.3)
cheerio: 1.2.0
- handlebars: 4.7.8
- transitivePeerDependencies:
- - '@opentelemetry/api'
- - '@opentelemetry/exporter-trace-otlp-proto'
- - '@opentelemetry/sdk-trace-base'
- - openai
- - ws
-
- langchain@0.3.37(@langchain/aws@0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))))(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(axios@1.13.6)(cheerio@1.2.0)(handlebars@4.7.8)(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)):
- dependencies:
- '@langchain/core': 0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- '@langchain/openai': 0.5.18(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))
- '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
- js-tiktoken: 1.0.21
- js-yaml: 4.1.1
- jsonpointer: 5.0.1
- langsmith: 0.3.87(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))
- openapi-types: 12.1.3
- p-retry: 4.6.2
- uuid: 10.0.0
- yaml: 2.8.2
- zod: 3.25.76
- optionalDependencies:
- '@langchain/aws': 0.1.15(@langchain/core@0.3.80(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)))
- axios: 1.13.6(debug@4.4.3)
- cheerio: 1.2.0
- handlebars: 4.7.8
+ handlebars: 4.7.9
transitivePeerDependencies:
- '@opentelemetry/api'
- '@opentelemetry/exporter-trace-otlp-proto'
@@ -32894,6 +33949,17 @@ snapshots:
'@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0)
openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
+ langsmith@0.5.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0))(openai@6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)):
+ dependencies:
+ p-queue: 6.6.2
+ uuid: 10.0.0
+ optionalDependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0)
+ openai: 6.27.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76)
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+
language-subtag-registry@0.3.23: {}
language-tags@1.0.5:
@@ -33132,7 +34198,9 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.2.6: {}
+ lru-cache@11.2.7: {}
+
+ lru-cache@11.3.5: {}
lru-cache@4.1.5:
dependencies:
@@ -33204,45 +34272,30 @@ snapshots:
marky@1.3.0: {}
- mastra@0.13.4(@cfworker/json-schema@4.1.1)(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.5.4)(zod@3.25.76):
+ mastra@1.3.19(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76):
dependencies:
- '@clack/prompts': 0.11.0
+ '@clack/prompts': 1.2.0
'@expo/devcert': 1.2.1
- '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76)
- '@mastra/deployer': 0.19.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)
- '@mastra/loggers': 0.10.19(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))
- '@mastra/mcp': 0.13.5(@cfworker/json-schema@4.1.1)(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.4)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)
- '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))
- '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@webcontainer/env': 1.1.1
- commander: 12.1.0
- dotenv: 16.6.1
+ '@mastra/core': 1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76)
+ '@mastra/deployer': 1.21.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))(typescript@5.5.4)(zod@3.25.76)
+ '@mastra/loggers': 1.1.0(@mastra/core@1.21.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@3.25.76))(zod@3.25.76))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@3.25.76))(@types/json-schema@7.0.15)(bufferutil@4.1.0)(openapi-types@12.1.3)(utf-8-validate@5.0.10)(zod@3.25.76))
+ commander: 14.0.3
+ dotenv: 17.4.0
execa: 9.6.1
fs-extra: 11.3.4
get-port: 7.1.0
- open: 10.2.0
+ local-pkg: 1.1.2
picocolors: 1.1.1
- posthog-node: 4.18.0
+ posthog-node: 5.17.2
prettier: 3.8.1
+ semver: 7.7.4
+ serve: 14.2.6
+ serve-handler: 6.1.7
shell-quote: 1.8.3
strip-json-comments: 5.0.3
- tcp-port-used: 1.0.2
- yocto-spinner: 0.2.3
+ yocto-spinner: 1.1.0
zod: 3.25.76
- zod-to-json-schema: 3.25.1(zod@3.25.76)
transitivePeerDependencies:
- - '@cfworker/json-schema'
- - '@opentelemetry/api'
- - '@types/json-schema'
- - debug
- - encoding
- supports-color
- typescript
@@ -33471,6 +34524,8 @@ snapshots:
mdn-data@2.0.30: {}
+ mdn-data@2.27.1: {}
+
mdurl@2.0.0: {}
media-typer@0.3.0: {}
@@ -33553,7 +34608,7 @@ snapshots:
metro-cache: 0.83.5
metro-core: 0.83.5
metro-runtime: 0.83.5
- yaml: 2.8.2
+ yaml: 2.8.3
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -34040,6 +35095,8 @@ snapshots:
bn.js: 4.12.3
brorand: 1.1.0
+ mime-db@1.33.0: {}
+
mime-db@1.52.0: {}
mime-db@1.54.0: {}
@@ -34048,6 +35105,10 @@ snapshots:
dependencies:
wildcard: 1.1.2
+ mime-types@2.1.18:
+ dependencies:
+ mime-db: 1.33.0
+
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
@@ -34150,8 +35211,6 @@ snapshots:
ms@2.0.0: {}
- ms@2.1.2: {}
-
ms@2.1.3: {}
ms@3.0.0-canary.1: {}
@@ -34221,6 +35280,14 @@ snapshots:
ncp@2.0.0: {}
+ needle@2.9.1:
+ dependencies:
+ debug: 3.2.7
+ iconv-lite: 0.4.24
+ sax: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
negotiator@0.6.3: {}
negotiator@0.6.4: {}
@@ -34242,13 +35309,13 @@ snapshots:
'@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2)
'@supercharge/request-ip': 1.2.0
- nestjs-temporal-core@3.2.3(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.25.12)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.1.14)(rxjs@7.8.2):
+ nestjs-temporal-core@3.2.3(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.22)(@temporalio/client@1.15.0)(@temporalio/common@1.15.0)(@temporalio/worker@1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1))(@temporalio/workflow@1.15.0)(reflect-metadata@0.1.14)(rxjs@7.8.2):
dependencies:
'@nestjs/common': 10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2)
'@nestjs/core': 10.4.22(@nestjs/common@10.4.22(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.22)(@nestjs/platform-express@10.4.22)(reflect-metadata@0.1.14)(rxjs@7.8.2)
'@temporalio/client': 1.15.0
'@temporalio/common': 1.15.0
- '@temporalio/worker': 1.15.0(@swc/helpers@0.5.13)(esbuild@0.25.12)(tslib@2.8.1)
+ '@temporalio/worker': 1.15.0(@swc/helpers@0.5.13)(esbuild@0.27.7)(tslib@2.8.1)
'@temporalio/workflow': 1.15.0
ms: 2.1.3
reflect-metadata: 0.1.14
@@ -34540,13 +35607,6 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
- open@10.2.0:
- dependencies:
- default-browser: 5.5.0
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- wsl-utils: 0.1.0
-
open@7.4.2:
dependencies:
is-docker: 2.2.1
@@ -34577,6 +35637,11 @@ snapshots:
ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
zod: 3.25.76
+ openai@6.34.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(zod@3.25.76):
+ optionalDependencies:
+ ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)
+ zod: 3.25.76
+
openapi-types@12.1.3: {}
openapi3-ts@3.2.0:
@@ -34719,6 +35784,11 @@ snapshots:
eventemitter3: 5.0.4
p-timeout: 6.1.4
+ p-queue@9.1.2:
+ dependencies:
+ eventemitter3: 5.0.4
+ p-timeout: 7.0.1
+
p-retry@4.6.2:
dependencies:
'@types/retry': 0.12.0
@@ -34730,12 +35800,18 @@ snapshots:
is-network-error: 1.3.1
retry: 0.13.1
+ p-retry@7.1.1:
+ dependencies:
+ is-network-error: 1.3.1
+
p-timeout@3.2.0:
dependencies:
p-finally: 1.0.0
p-timeout@6.1.4: {}
+ p-timeout@7.0.1: {}
+
p-try@2.2.0: {}
pac-proxy-agent@7.2.0:
@@ -34824,6 +35900,10 @@ snapshots:
dependencies:
entities: 6.0.1
+ parse5@8.0.1:
+ dependencies:
+ entities: 8.0.0
+
parseley@0.12.1:
dependencies:
leac: 0.6.0
@@ -34847,6 +35927,8 @@ snapshots:
path-is-absolute@1.0.1: {}
+ path-is-inside@1.0.2: {}
+
path-key@2.0.1: {}
path-key@3.1.1: {}
@@ -34862,7 +35944,7 @@ snapshots:
path-scurry@2.0.2:
dependencies:
- lru-cache: 11.2.6
+ lru-cache: 11.2.7
minipass: 7.1.3
path-to-regexp@0.1.12: {}
@@ -34909,39 +35991,14 @@ snapshots:
pg-connection-string@2.12.0: {}
- pg-cursor@2.19.0(pg@8.16.3):
- dependencies:
- pg: 8.16.3
-
pg-int8@1.0.1: {}
- pg-minify@1.8.0: {}
-
- pg-pool@3.13.0(pg@8.16.3):
- dependencies:
- pg: 8.16.3
-
pg-pool@3.13.0(pg@8.20.0):
dependencies:
pg: 8.20.0
- pg-promise@11.15.0(pg-query-stream@4.10.3(pg@8.16.3)):
- dependencies:
- assert-options: 0.8.3
- pg: 8.16.3
- pg-minify: 1.8.0
- pg-query-stream: 4.10.3(pg@8.16.3)
- spex: 3.4.1
- transitivePeerDependencies:
- - pg-native
-
pg-protocol@1.13.0: {}
- pg-query-stream@4.10.3(pg@8.16.3):
- dependencies:
- pg: 8.16.3
- pg-cursor: 2.19.0(pg@8.16.3)
-
pg-types@2.2.0:
dependencies:
pg-int8: 1.0.1
@@ -34950,16 +36007,6 @@ snapshots:
postgres-date: 1.0.7
postgres-interval: 1.2.0
- pg@8.16.3:
- dependencies:
- pg-connection-string: 2.12.0
- pg-pool: 3.13.0(pg@8.16.3)
- pg-protocol: 1.13.0
- pg-types: 2.2.0
- pgpass: 1.0.5
- optionalDependencies:
- pg-cloudflare: 1.3.0
-
pg@8.20.0:
dependencies:
pg-connection-string: 2.12.0
@@ -35034,6 +36081,20 @@ snapshots:
pino-std-serializers@7.1.0: {}
+ pino@10.3.1:
+ dependencies:
+ '@pinojs/redact': 0.4.0
+ atomic-sleep: 1.0.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 3.0.0
+ pino-std-serializers: 7.1.0
+ process-warning: 5.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.1
+ thread-stream: 4.0.0
+
pino@7.11.0:
dependencies:
atomic-sleep: 1.0.0
@@ -35156,13 +36217,13 @@ snapshots:
postcss: 8.5.8
ts-node: 10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)
- postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.4.38)(yaml@2.8.2):
+ postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.4.38)(yaml@2.8.3):
dependencies:
lilconfig: 3.1.3
optionalDependencies:
jiti: 2.6.1
postcss: 8.4.38
- yaml: 2.8.2
+ yaml: 2.8.3
postcss-nested@6.2.0(postcss@8.5.8):
dependencies:
@@ -35204,8 +36265,6 @@ snapshots:
dependencies:
xtend: 4.0.2
- postgres@3.4.8: {}
-
posthog-js@1.359.1:
dependencies:
'@opentelemetry/api': 1.9.0
@@ -35222,11 +36281,9 @@ snapshots:
query-selector-shadow-dom: 1.0.1
web-vitals: 5.1.0
- posthog-node@4.18.0:
+ posthog-node@5.17.2:
dependencies:
- axios: 1.13.6(debug@4.4.3)
- transitivePeerDependencies:
- - debug
+ '@posthog/core': 1.7.1
preact@10.28.4: {}
@@ -35268,6 +36325,14 @@ snapshots:
prismjs@1.30.0: {}
+ probe-image-size@7.2.3:
+ dependencies:
+ lodash.merge: 4.6.2
+ needle: 2.9.1
+ stream-parser: 0.3.1
+ transitivePeerDependencies:
+ - supports-color
+
process-nextick-args@2.0.1: {}
process-warning@1.0.0: {}
@@ -35462,6 +36527,8 @@ snapshots:
proxy-from-env@1.1.0: {}
+ proxy-from-env@2.1.0: {}
+
pseudomap@1.0.2: {}
psl@1.15.0:
@@ -35578,6 +36645,8 @@ snapshots:
randombytes: 2.1.0
safe-buffer: 5.2.1
+ range-parser@1.2.0: {}
+
range-parser@1.2.1: {}
rasterizehtml@1.4.1:
@@ -35601,6 +36670,13 @@ snapshots:
iconv-lite: 0.7.2
unpipe: 1.0.0
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
react-colorful@5.6.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
@@ -36016,16 +37092,6 @@ snapshots:
'@redis/search': 1.2.0(@redis/client@1.6.1)
'@redis/time-series': 1.1.0(@redis/client@1.6.1)
- redis@5.11.0:
- dependencies:
- '@redis/bloom': 5.11.0(@redis/client@5.11.0)
- '@redis/client': 5.11.0
- '@redis/json': 5.11.0(@redis/client@5.11.0)
- '@redis/search': 5.11.0(@redis/client@5.11.0)
- '@redis/time-series': 5.11.0(@redis/client@5.11.0)
- transitivePeerDependencies:
- - '@node-rs/xxhash'
-
redux@4.2.1:
dependencies:
'@babel/runtime': 7.28.6
@@ -36091,6 +37157,15 @@ snapshots:
unicode-match-property-ecmascript: 2.0.0
unicode-match-property-value-ecmascript: 2.2.1
+ registry-auth-token@3.3.2:
+ dependencies:
+ rc: 1.2.8
+ safe-buffer: 5.2.1
+
+ registry-url@3.1.0:
+ dependencies:
+ rc: 1.2.8
+
regjsgen@0.8.0: {}
regjsparser@0.13.0:
@@ -36338,9 +37413,9 @@ snapshots:
restructure@2.0.1: {}
- retry-axios@2.6.0(axios@1.13.6):
+ retry-axios@2.6.0(axios@1.14.0):
dependencies:
- axios: 1.13.6(debug@4.4.3)
+ axios: 1.14.0(debug@4.4.3)
retry@0.10.1: {}
@@ -36363,52 +37438,21 @@ snapshots:
hash-base: 3.1.2
inherits: 2.0.4
- rollup-plugin-esbuild@6.2.1(esbuild@0.25.12)(rollup@4.50.2):
+ rollup-plugin-esbuild@6.2.1(esbuild@0.27.7)(rollup@4.59.0):
dependencies:
debug: 4.4.3(supports-color@5.5.0)
es-module-lexer: 1.7.0
- esbuild: 0.25.12
+ esbuild: 0.27.7
get-tsconfig: 4.13.6
- rollup: 4.50.2
+ rollup: 4.59.0
unplugin-utils: 0.2.5
transitivePeerDependencies:
- supports-color
- rollup-plugin-node-externals@8.1.2(rollup@4.50.2):
- dependencies:
- rollup: 4.50.2
-
rollup@2.79.2:
optionalDependencies:
fsevents: 2.3.3
- rollup@4.50.2:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.50.2
- '@rollup/rollup-android-arm64': 4.50.2
- '@rollup/rollup-darwin-arm64': 4.50.2
- '@rollup/rollup-darwin-x64': 4.50.2
- '@rollup/rollup-freebsd-arm64': 4.50.2
- '@rollup/rollup-freebsd-x64': 4.50.2
- '@rollup/rollup-linux-arm-gnueabihf': 4.50.2
- '@rollup/rollup-linux-arm-musleabihf': 4.50.2
- '@rollup/rollup-linux-arm64-gnu': 4.50.2
- '@rollup/rollup-linux-arm64-musl': 4.50.2
- '@rollup/rollup-linux-loong64-gnu': 4.50.2
- '@rollup/rollup-linux-ppc64-gnu': 4.50.2
- '@rollup/rollup-linux-riscv64-gnu': 4.50.2
- '@rollup/rollup-linux-riscv64-musl': 4.50.2
- '@rollup/rollup-linux-s390x-gnu': 4.50.2
- '@rollup/rollup-linux-x64-gnu': 4.50.2
- '@rollup/rollup-linux-x64-musl': 4.50.2
- '@rollup/rollup-openharmony-arm64': 4.50.2
- '@rollup/rollup-win32-arm64-msvc': 4.50.2
- '@rollup/rollup-win32-ia32-msvc': 4.50.2
- '@rollup/rollup-win32-x64-msvc': 4.50.2
- fsevents: 2.3.3
-
rollup@4.59.0:
dependencies:
'@types/estree': 1.0.8
@@ -36476,8 +37520,6 @@ snapshots:
dependencies:
sdp: 2.12.0
- run-applescript@7.1.0: {}
-
run-async@2.4.1: {}
run-async@3.0.0: {}
@@ -36576,6 +37618,11 @@ snapshots:
sdp@2.12.0: {}
+ section-matter@1.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ kind-of: 6.0.3
+
secure-json-parse@2.7.0: {}
secure-json-parse@4.1.0: {}
@@ -36638,6 +37685,16 @@ snapshots:
serialize-error@2.1.0: {}
+ serve-handler@6.1.7:
+ dependencies:
+ bytes: 3.0.0
+ content-disposition: 0.5.2
+ mime-types: 2.1.18
+ minimatch: 3.1.5
+ path-is-inside: 1.0.2
+ path-to-regexp: 3.3.0
+ range-parser: 1.2.0
+
serve-static@1.16.3:
dependencies:
encodeurl: 2.0.0
@@ -36656,6 +37713,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ serve@14.2.6:
+ dependencies:
+ '@zeit/schemas': 2.36.0
+ ajv: 8.18.0
+ arg: 5.0.2
+ boxen: 7.0.0
+ chalk: 5.0.1
+ chalk-template: 0.4.0
+ clipboardy: 3.0.0
+ compression: 1.8.1
+ is-port-reachable: 4.0.0
+ serve-handler: 6.1.7
+ update-check: 1.5.4
+ transitivePeerDependencies:
+ - supports-color
+
server-only@0.0.1: {}
set-blocking@2.0.0: {}
@@ -36927,11 +38000,11 @@ snapshots:
source-map-js@1.2.1: {}
- source-map-loader@4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)):
+ source-map-loader@4.0.2(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)):
dependencies:
iconv-lite: 0.6.3
source-map-js: 1.2.1
- webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
source-map-support@0.5.13:
dependencies:
@@ -36955,8 +38028,6 @@ snapshots:
space-separated-tokens@2.0.2: {}
- spex@3.4.1: {}
-
split-on-first@1.1.0: {}
split2@3.2.2:
@@ -37019,6 +38090,12 @@ snapshots:
dependencies:
stream-chain: 2.2.5
+ stream-parser@0.3.1:
+ dependencies:
+ debug: 2.6.9
+ transitivePeerDependencies:
+ - supports-color
+
stream-shift@1.0.3: {}
streamsearch@1.1.0: {}
@@ -37113,6 +38190,8 @@ snapshots:
dependencies:
ansi-regex: 6.2.2
+ strip-bom-string@1.0.0: {}
+
strip-bom@3.0.0: {}
strip-bom@4.0.0: {}
@@ -37123,6 +38202,8 @@ snapshots:
strip-final-newline@4.0.0: {}
+ strip-json-comments@2.0.1: {}
+
strip-json-comments@3.1.1: {}
strip-json-comments@5.0.3: {}
@@ -37237,11 +38318,11 @@ snapshots:
swagger-ui-dist@5.17.14: {}
- swc-loader@0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)):
+ swc-loader@0.2.7(@swc/core@1.5.7(@swc/helpers@0.5.13))(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)):
dependencies:
'@swc/core': 1.5.7(@swc/helpers@0.5.13)
'@swc/counter': 0.1.3
- webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
sweetalert2@11.4.8: {}
@@ -37305,34 +38386,27 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
- tcp-port-used@1.0.2:
- dependencies:
- debug: 4.3.1
- is2: 2.0.9
- transitivePeerDependencies:
- - supports-color
-
- terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)):
+ terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
terser: 5.46.0
- webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
optionalDependencies:
'@swc/core': 1.5.7(@swc/helpers@0.5.13)
- esbuild: 0.25.12
+ esbuild: 0.27.7
- terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)):
+ terser-webpack-plugin@5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
terser: 5.46.0
- webpack: 5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)
+ webpack: 5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)
optionalDependencies:
'@swc/core': 1.5.7(@swc/helpers@0.5.13)
- esbuild: 0.25.12
+ esbuild: 0.27.7
terser@5.46.0:
dependencies:
@@ -37371,6 +38445,10 @@ snapshots:
dependencies:
real-require: 0.2.0
+ thread-stream@4.0.0:
+ dependencies:
+ real-require: 0.2.0
+
throat@5.0.0: {}
throttleit@2.1.0: {}
@@ -37414,10 +38492,16 @@ snapshots:
tldts-core@6.1.86: {}
+ tldts-core@7.0.28: {}
+
tldts@6.1.86:
dependencies:
tldts-core: 6.1.86
+ tldts@7.0.28:
+ dependencies:
+ tldts-core: 7.0.28
+
tmp@0.0.33:
dependencies:
os-tmpdir: 1.0.2
@@ -37454,6 +38538,8 @@ snapshots:
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
+ tokenx@1.3.0: {}
+
toposort@2.0.2: {}
totalist@3.0.1: {}
@@ -37476,6 +38562,10 @@ snapshots:
dependencies:
tldts: 6.1.86
+ tough-cookie@6.0.1:
+ dependencies:
+ tldts: 7.0.28
+
tr46@0.0.3: {}
tr46@3.0.0:
@@ -37486,6 +38576,10 @@ snapshots:
dependencies:
punycode: 2.3.1
+ tr46@6.0.0:
+ dependencies:
+ punycode: 2.3.1
+
transloadit@3.0.2:
dependencies:
debug: 4.4.3(supports-color@5.5.0)
@@ -37538,7 +38632,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- ts-jest@29.4.6(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.25.12)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4):
+ ts-jest@29.4.6(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.27.7)(jest-util@29.7.0)(jest@29.7.0(@types/node@18.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4)))(typescript@5.5.4):
dependencies:
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
@@ -37556,7 +38650,7 @@ snapshots:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.29.0)
- esbuild: 0.25.12
+ esbuild: 0.27.7
jest-util: 29.7.0
ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.13))(@types/node@18.16.9)(typescript@5.5.4):
@@ -37608,7 +38702,7 @@ snapshots:
tslib@2.8.1: {}
- tsup@8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.4.38)(typescript@5.5.4)(yaml@2.8.2):
+ tsup@8.5.1(@swc/core@1.5.7(@swc/helpers@0.5.13))(jiti@2.6.1)(postcss@8.4.38)(typescript@5.5.4)(yaml@2.8.3):
dependencies:
bundle-require: 5.1.0(esbuild@0.27.3)
cac: 6.7.14
@@ -37619,7 +38713,7 @@ snapshots:
fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
- postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.4.38)(yaml@2.8.2)
+ postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.4.38)(yaml@2.8.3)
resolve-from: 5.0.0
rollup: 4.59.0
source-map: 0.7.6
@@ -37808,6 +38902,8 @@ snapshots:
undici@7.22.0: {}
+ undici@7.25.0: {}
+
unicode-canonical-property-names-ecmascript@2.0.1: {}
unicode-match-property-ecmascript@2.0.0:
@@ -37969,7 +39065,7 @@ snapshots:
chokidar: 5.0.0
destr: 2.0.5
h3: 1.15.5
- lru-cache: 11.2.6
+ lru-cache: 11.2.7
node-fetch-native: 1.6.7
ofetch: 1.5.1
ufo: 1.6.3
@@ -37986,6 +39082,11 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
+ update-check@1.5.4:
+ dependencies:
+ registry-auth-token: 3.3.2
+ registry-url: 3.1.0
+
upper-case-first@2.0.2:
dependencies:
tslib: 2.8.1
@@ -38096,6 +39197,8 @@ snapshots:
uuid@11.1.0: {}
+ uuid@13.0.0: {}
+
uuid@3.4.0: {}
uuid@8.3.2: {}
@@ -38219,13 +39322,13 @@ snapshots:
- utf-8-validate
- zod
- vite-node@3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2):
+ vite-node@3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3):
dependencies:
cac: 6.7.14
debug: 4.4.3(supports-color@5.5.0)
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -38240,18 +39343,18 @@ snapshots:
- tsx
- yaml
- vite-tsconfig-paths@5.1.4(typescript@5.5.4)(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)):
+ vite-tsconfig-paths@5.1.4(typescript@5.5.4)(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)):
dependencies:
debug: 4.4.3(supports-color@5.5.0)
globrex: 0.1.2
tsconfck: 3.1.6(typescript@5.5.4)
optionalDependencies:
- vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
transitivePeerDependencies:
- supports-color
- typescript
- vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2):
+ vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -38266,12 +39369,12 @@ snapshots:
lightningcss: 1.31.1
sass: 1.97.3
terser: 5.46.0
- yaml: 2.8.2
+ yaml: 2.8.3
- vitest@3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2):
+ vitest@3.1.4(@types/debug@4.1.12)(@types/node@18.16.9)(@vitest/ui@1.6.0)(happy-dom@15.11.7)(jiti@2.6.1)(jsdom@22.1.0(bufferutil@4.1.0)(canvas@2.11.2)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3):
dependencies:
'@vitest/expect': 3.1.4
- '@vitest/mocker': 3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2))
+ '@vitest/mocker': 3.1.4(vite@6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.1.4
'@vitest/snapshot': 3.1.4
@@ -38288,8 +39391,8 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
- vite-node: 3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.2)
+ vite: 6.4.1(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
+ vite-node: 3.1.4(@types/node@18.16.9)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)(terser@5.46.0)(yaml@2.8.3)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
@@ -38321,6 +39424,10 @@ snapshots:
dependencies:
xml-name-validator: 4.0.0
+ w3c-xmlserializer@5.0.0:
+ dependencies:
+ xml-name-validator: 5.0.0
+
walker@1.0.8:
dependencies:
makeerror: 1.0.12
@@ -38366,11 +39473,13 @@ snapshots:
webidl-conversions@7.0.0: {}
+ webidl-conversions@8.0.1: {}
+
webpack-node-externals@3.0.0: {}
webpack-sources@3.3.4: {}
- webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12):
+ webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -38394,7 +39503,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
- terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.105.4(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
watchpack: 2.5.1
webpack-sources: 3.3.4
transitivePeerDependencies:
@@ -38402,7 +39511,7 @@ snapshots:
- esbuild
- uglify-js
- webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12):
+ webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -38425,7 +39534,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.3.0
- terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.25.12))
+ terser-webpack-plugin: 5.3.17(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7)(webpack@5.87.0(@swc/core@1.5.7(@swc/helpers@0.5.13))(esbuild@0.27.7))
watchpack: 2.5.1
webpack-sources: 3.3.4
transitivePeerDependencies:
@@ -38452,6 +39561,8 @@ snapshots:
whatwg-mimetype@4.0.0: {}
+ whatwg-mimetype@5.0.0: {}
+
whatwg-url@11.0.0:
dependencies:
tr46: 3.0.0
@@ -38462,6 +39573,14 @@ snapshots:
tr46: 4.1.1
webidl-conversions: 7.0.0
+ whatwg-url@16.0.1(@noble/hashes@2.0.1):
+ dependencies:
+ '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1)
+ tr46: 6.0.0
+ webidl-conversions: 8.0.1
+ transitivePeerDependencies:
+ - '@noble/hashes'
+
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
@@ -38527,6 +39646,10 @@ snapshots:
dependencies:
string-width: 4.2.3
+ widest-line@4.0.1:
+ dependencies:
+ string-width: 5.1.2
+
wildcard@1.1.2: {}
windows-release@4.0.0:
@@ -38589,12 +39712,10 @@ snapshots:
bufferutil: 4.1.0
utf-8-validate: 6.0.6
- wsl-utils@0.1.0:
- dependencies:
- is-wsl: 3.1.1
-
xml-name-validator@4.0.0: {}
+ xml-name-validator@5.0.0: {}
+
xml2js@0.5.0:
dependencies:
sax: 1.5.0
@@ -38630,6 +39751,8 @@ snapshots:
yaml@2.8.2: {}
+ yaml@2.8.3: {}
+
yargs-parser@18.1.3:
dependencies:
camelcase: 5.3.1
@@ -38665,7 +39788,7 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-spinner@0.2.3:
+ yocto-spinner@1.1.0:
dependencies:
yoctocolors: 2.1.2
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 5d95366a..c2abe7bf 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -25,6 +25,7 @@
"noFallthroughCasesInSwitch": true,
"strict": true,
"paths": {
+ "@langchain/langgraph/prebuilt": ["node_modules/@langchain/langgraph/dist/prebuilt/index.d.ts"],
"@gitroom/backend/*": ["apps/backend/src/*"],
"@gitroom/frontend/*": ["apps/frontend/src/*"],
"@gitroom/helpers/*": ["libraries/helpers/src/*"],
diff --git a/var/docker/nginx.conf b/var/docker/nginx.conf
index 346ef62b..2adaa125 100644
--- a/var/docker/nginx.conf
+++ b/var/docker/nginx.conf
@@ -35,6 +35,19 @@ http {
location /uploads/ {
alias /uploads/;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header Content-Security-Policy "default-src 'none'; img-src 'self'; media-src 'self'; style-src 'none'; script-src 'none'; frame-ancestors 'none'; sandbox" always;
+ types {
+ image/jpeg jpg jpeg;
+ image/png png;
+ image/gif gif;
+ image/webp webp;
+ image/avif avif;
+ image/bmp bmp;
+ image/tiff tif tiff;
+ video/mp4 mp4;
+ }
+ default_type application/octet-stream;
}
location / {