From 87f95f938013aee202ed67fbbcecb9514bf8f637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Levasseur?= Date: Mon, 8 Jun 2026 11:06:56 -0400 Subject: [PATCH 1/3] chore(client): fix client type bundle (#15268) --- packages/client/rollup.dts.config.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/client/rollup.dts.config.mjs b/packages/client/rollup.dts.config.mjs index 13e8fc6fbab..b8b2ddf0c17 100644 --- a/packages/client/rollup.dts.config.mjs +++ b/packages/client/rollup.dts.config.mjs @@ -9,7 +9,6 @@ export default { plugins: [ dts({ tsconfig: './tsconfig.build.json', - respectExternal: true, }), ], } From b2bea798b8afb0f9aad4263b35d0964620f812e1 Mon Sep 17 00:00:00 2001 From: Mak <98408710+makhlouf1102@users.noreply.github.com> Date: Mon, 8 Jun 2026 11:27:08 -0400 Subject: [PATCH 2/3] fix(linear): support OAuth fallback without webhooks (#15269) Co-authored-by: Makhlouf Hennine Co-authored-by: Makhlouf Hennine Co-authored-by: Makhlouf Hennine --- integrations/linear/definitions/states.ts | 5 + integrations/linear/integration.definition.ts | 2 +- integrations/linear/src/misc/linear.ts | 6 +- integrations/linear/src/oauth-wizard.ts | 107 ++++++++++++++++-- integrations/linear/src/setup.ts | 65 ++++++++++- 5 files changed, 167 insertions(+), 18 deletions(-) diff --git a/integrations/linear/definitions/states.ts b/integrations/linear/definitions/states.ts index 549f5c22e3a..417b66b06b4 100644 --- a/integrations/linear/definitions/states.ts +++ b/integrations/linear/definitions/states.ts @@ -31,6 +31,11 @@ export const states = { .optional() .title('Wizard Phase') .describe('Which leg of the two-phase OAuth wizard is currently expected on /oauth callback'), + runtimeActor: z + .enum(['user', 'app']) + .optional() + .title('Runtime Actor') + .describe('Which Linear OAuth actor type was used for the runtime credentials'), }), }, diff --git a/integrations/linear/integration.definition.ts b/integrations/linear/integration.definition.ts index 8011988a6ef..04485c04396 100644 --- a/integrations/linear/integration.definition.ts +++ b/integrations/linear/integration.definition.ts @@ -9,7 +9,7 @@ import listable from './bp_modules/listable' import { actions, channels, events, configuration, configurations, user, states, entities } from './definitions' export const INTEGRATION_NAME = 'linear' -export const INTEGRATION_VERSION = '2.5.2' +export const INTEGRATION_VERSION = '2.6.0' export default new IntegrationDefinition({ name: INTEGRATION_NAME, diff --git a/integrations/linear/src/misc/linear.ts b/integrations/linear/src/misc/linear.ts index 02e6135b325..558fb814137 100644 --- a/integrations/linear/src/misc/linear.ts +++ b/integrations/linear/src/misc/linear.ts @@ -243,7 +243,7 @@ export class LinearOauthClient { }) const useDesk = useDeskOAuth(environment) const linearOauthClient = new LinearOauthClient(useDesk) - const actor: Actor = effectiveStateName === 'adminCredentials' ? 'user' : 'app' + const actor: Actor = effectiveStateName === 'adminCredentials' ? 'user' : (environment.runtimeActor ?? 'app') const credentials = await linearOauthClient.resolveValidCredentials(effectivePayload, actor) if (credentials.accessToken !== effectivePayload.accessToken) { @@ -319,8 +319,8 @@ export const registerWebhook = async ({ logger.forBot().info('Linear webhook registered successfully.') } -export const revokeToken = async (token: string) => { - const form = new URLSearchParams({ token, token_type_hint: 'access_token' }) +export const revokeToken = async (token: string, tokenTypeHint: 'access_token' | 'refresh_token' = 'access_token') => { + const form = new URLSearchParams({ token, token_type_hint: tokenTypeHint }) try { await axios.post(`${linearEndpoint}/oauth/revoke`, form.toString(), { headers: oauthHeaders }) } catch (err: unknown) { diff --git a/integrations/linear/src/oauth-wizard.ts b/integrations/linear/src/oauth-wizard.ts index f79699991d9..57029584d07 100644 --- a/integrations/linear/src/oauth-wizard.ts +++ b/integrations/linear/src/oauth-wizard.ts @@ -7,7 +7,8 @@ import * as bp from '.botpress' const REDIRECT_URI = `${process.env.BP_WEBHOOK_URL}/oauth` const APP_SCOPES = 'read,write,issues:create,comments:create' -const ADMIN_SCOPES = 'read,write,admin' +const ADMIN_SCOPES = 'read,write,admin,issues:create,comments:create' +const USER_ACTOR_FALLBACK_STEP = 'use-user-actor' const _buildAuthorizeUrl = ({ clientId, @@ -29,6 +30,54 @@ const _buildAuthorizeUrl = ({ `&state=${state}` + `&scope=${scopes}` +const _saveUserActorRuntimeCredentials = async ({ + ctx, + client, + responses, + setIntegrationIdentifier, +}: Pick & + Pick) => { + const { + state: { payload: environment }, + } = await client.getState({ + type: 'integration', + name: 'environment', + id: ctx.integrationId, + }) + const { + state: { payload: adminCredentials }, + } = await client.getState({ + type: 'integration', + name: 'adminCredentials', + id: ctx.integrationId, + }) + + if (!adminCredentials.accessToken) { + return responses.endWizard({ + success: false, + errorMessage: 'Cannot install with user actor because user OAuth credentials are missing.', + }) + } + + const linearClient = new LinearClient({ accessToken: adminCredentials.accessToken }) + await client.setState({ + type: 'integration', + name: 'credentials', + id: ctx.integrationId, + payload: adminCredentials, + }) + await client.setState({ + type: 'integration', + name: 'environment', + id: ctx.integrationId, + payload: { ...environment, runtimeActor: 'user' }, + }) + + const organization = await linearClient.organization + setIntegrationIdentifier(organization.id) + return responses.endWizard({ success: true }) +} + const _startStep: oauthWizard.WizardStepHandler = async ({ ctx, client, query, responses }) => { const searchParams = new URLSearchParams(query) const payload = { @@ -60,9 +109,38 @@ const _oauthCallbackStep: oauthWizard.WizardStepHandler = async responses, setIntegrationIdentifier, }) => { + const { + state: { payload: environment }, + } = await client.getState({ + type: 'integration', + name: 'environment', + id: ctx.integrationId, + }) + const error = query.get('error') if (error) { const description = query.get('error_description') ?? '' + if (environment.wizardPhase === 'app') { + logger.forBot().warn(`Linear app-actor OAuth failed (${error}: ${description}). Asking for user-actor fallback.`) + return responses.displayButtons({ + pageTitle: 'Linear app authorization failed', + htmlOrMarkdownPageContents: + 'You can continue without automatic webhooks. Botpress will still be able to call Linear using your account, but Linear events will not be sent back to Botpress unless webhooks are configured by a workspace admin.', + buttons: [ + { + label: 'Install without webhooks', + buttonType: 'primary', + action: 'navigate', + navigateToStep: USER_ACTOR_FALLBACK_STEP, + }, + { + label: 'Cancel', + buttonType: 'secondary', + action: 'close', + }, + ], + }) + } return responses.endWizard({ success: false, errorMessage: `OAuth error: ${error} - ${description}` }) } @@ -71,13 +149,6 @@ const _oauthCallbackStep: oauthWizard.WizardStepHandler = async return responses.endWizard({ success: false, errorMessage: 'Authorization code not present in OAuth callback' }) } - const { - state: { payload: environment }, - } = await client.getState({ - type: 'integration', - name: 'environment', - id: ctx.integrationId, - }) const useDesk = useDeskOAuth(environment) const linearOauthClient = new LinearOauthClient(useDesk) const tokenActor = environment.wizardPhase === 'app' ? 'app' : 'user' @@ -91,6 +162,12 @@ const _oauthCallbackStep: oauthWizard.WizardStepHandler = async id: ctx.integrationId, payload: credentials, }) + await client.setState({ + type: 'integration', + name: 'environment', + id: ctx.integrationId, + payload: { ...environment, runtimeActor: 'app' }, + }) const linearClient = new LinearClient({ accessToken: credentials.accessToken }) const organization = await linearClient.organization @@ -133,8 +210,22 @@ const _oauthCallbackStep: oauthWizard.WizardStepHandler = async ) } +const _useUserActorStep: oauthWizard.WizardStepHandler = async ({ + ctx, + client, + responses, + setIntegrationIdentifier, +}) => + _saveUserActorRuntimeCredentials({ + ctx, + client, + responses, + setIntegrationIdentifier, + }) + export const buildOAuthWizard = (props: bp.HandlerProps) => new oauthWizard.OAuthWizardBuilder(props) .addStep({ id: 'start', handler: _startStep }) .addStep({ id: 'oauth-callback', handler: _oauthCallbackStep }) + .addStep({ id: USER_ACTOR_FALLBACK_STEP, handler: _useUserActorStep }) .build() diff --git a/integrations/linear/src/setup.ts b/integrations/linear/src/setup.ts index d8069f08f88..5369524dbeb 100644 --- a/integrations/linear/src/setup.ts +++ b/integrations/linear/src/setup.ts @@ -2,14 +2,68 @@ import { RuntimeError } from '@botpress/client' import { LinearOauthClient, registerWebhook, revokeToken, unregisterWebhook } from './misc/linear' import * as bp from '.botpress' +const INSUFFICIENT_LINEAR_ROLE_ERROR = 'Invalid role: admin required' +const WEBHOOK_REGISTRATION_ADMIN_REQUIRED_MESSAGE = + 'You must be an admin on the Linear workspace to automatically register webhooks. ' + + 'You may still use the integration without webhooks, but some functionality will be limited or unavailable. ' + + 'In order to fully configure the integration, please connect to a Linear account on which you are an admin.' + const _isWebhookManuallyRegistered = (ctx: bp.HandlerProps['ctx']) => ctx.configurationType === 'apiKey' && ctx.configuration.webhookSigningSecret +const _revokeCredentials = async (credentials: { accessToken?: string; refreshToken?: string }) => { + if (credentials.accessToken) { + await revokeToken(credentials.accessToken, 'access_token') + } + if (credentials.refreshToken) { + await revokeToken(credentials.refreshToken, 'refresh_token') + } +} + +const _getWebhookRegistrationErrorMessage = (errorMessage: string) => { + if (errorMessage.includes(INSUFFICIENT_LINEAR_ROLE_ERROR)) { + return WEBHOOK_REGISTRATION_ADMIN_REQUIRED_MESSAGE + } + + return `Failed to register webhook: ${errorMessage}` +} + +const _reportWebhookRegistrationIssue = (logger: bp.HandlerProps['logger'], errorMessage: string) => { + if (!errorMessage.includes(INSUFFICIENT_LINEAR_ROLE_ERROR)) { + return + } + + logger.issue({ + type: 'issue', + title: 'Linear webhook registration requires an admin', + description: WEBHOOK_REGISTRATION_ADMIN_REQUIRED_MESSAGE, + category: 'configuration', + groupBy: ['linear_webhook_admin_required'], + code: 'linear_webhook_admin_required', + data: { + details: { + raw: INSUFFICIENT_LINEAR_ROLE_ERROR, + pretty: WEBHOOK_REGISTRATION_ADMIN_REQUIRED_MESSAGE, + }, + }, + }) +} + export const register: bp.IntegrationProps['register'] = async ({ client, ctx, logger }) => { const manuallyRegistered = _isWebhookManuallyRegistered(ctx) logger.forBot().info('Registering Linear integration.') if (!manuallyRegistered) { + const { + state: { payload: environment }, + } = await client.getState({ type: 'integration', name: 'environment', id: ctx.integrationId }) + + if (environment.runtimeActor === 'user') { + logger.forBot().info('Skipping automatic Linear webhook registration: integration is using user-actor OAuth.') + logger.forBot().info(`Linear integration registered successfully (integrationId="${ctx.integrationId}").`) + return + } + const linearClient = await LinearOauthClient.createAdmin({ client, ctx }) const webhookUrl = `${process.env.BP_WEBHOOK_URL}/${ctx.webhookId}` logger.forBot().info('Registering Linear webhook') @@ -18,7 +72,8 @@ export const register: bp.IntegrationProps['register'] = async ({ client, ctx, l logger.forBot().info('Linear webhook registered') } catch (thrown) { const errorMessage = thrown instanceof Error ? thrown.message : String(thrown) - throw new RuntimeError(`Failed to register webhook: ${errorMessage}`) + _reportWebhookRegistrationIssue(logger, errorMessage) + throw new RuntimeError(_getWebhookRegistrationErrorMessage(errorMessage)) } } else { logger @@ -47,11 +102,9 @@ export const unregister: bp.IntegrationProps['unregister'] = async ({ client, ct client.getState({ type: 'integration', name: 'credentials', id: ctx.integrationId }), client.getState({ type: 'integration', name: 'adminCredentials', id: ctx.integrationId }), ]) - if (appState.payload.accessToken) { - await revokeToken(appState.payload.accessToken) - } - if (adminState.payload.accessToken) { - await revokeToken(adminState.payload.accessToken) + await _revokeCredentials(appState.payload) + if (adminState.payload.accessToken !== appState.payload.accessToken) { + await _revokeCredentials(adminState.payload) } logger.forBot().info('Linear integration unregistration completed.') } catch (thrown) { From 73e4ca96e6758886e908e3ad3d944fdd0957c806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Levasseur?= Date: Mon, 8 Jun 2026 13:13:56 -0400 Subject: [PATCH 3/3] chore(cognitive): replace tsup by rollup dts plugin (#15267) --- packages/cognitive/package.json | 7 +- packages/cognitive/rollup.dts.config.mjs | 14 ++ pnpm-lock.yaml | 217 ++++------------------- 3 files changed, 52 insertions(+), 186 deletions(-) create mode 100644 packages/cognitive/rollup.dts.config.mjs diff --git a/packages/cognitive/package.json b/packages/cognitive/package.json index 12b73d73b8a..6e0b234f133 100644 --- a/packages/cognitive/package.json +++ b/packages/cognitive/package.json @@ -11,7 +11,7 @@ }, "scripts": { "check:type": "tsc --noEmit", - "build:type": "tsup --tsconfig tsconfig.build.json ./src/index.ts --dts-resolve --dts-only --clean", + "build:type": "rollup -c rollup.dts.config.mjs", "build:neutral": "ts-node -T ./build.ts --neutral", "build": "pnpm build:neutral && pnpm build:type && size-limit", "test:e2e": "vitest run --dir ./e2e", @@ -43,8 +43,9 @@ "axios": "^1.7.9", "dotenv": "^16.4.4", "esbuild": "^0.25.10", - "size-limit": "^11.1.6", - "tsup": "^8.0.2" + "rollup": "^4.60.4", + "rollup-plugin-dts": "^6.4.1", + "size-limit": "^11.1.6" }, "engines": { "node": ">=18.0.0" diff --git a/packages/cognitive/rollup.dts.config.mjs b/packages/cognitive/rollup.dts.config.mjs new file mode 100644 index 00000000000..b8b2ddf0c17 --- /dev/null +++ b/packages/cognitive/rollup.dts.config.mjs @@ -0,0 +1,14 @@ +import dts from 'rollup-plugin-dts' + +export default { + input: './src/index.ts', + external: [/node_modules/], + output: { + file: './dist/index.d.ts', + }, + plugins: [ + dts({ + tsconfig: './tsconfig.build.json', + }), + ], +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af962abcc06..6fd65c1f4ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3068,12 +3068,15 @@ importers: esbuild: specifier: ^0.25.10 version: 0.25.10 + rollup: + specifier: ^4.60.4 + version: 4.60.4 + rollup-plugin-dts: + specifier: ^6.4.1 + version: 6.4.1(rollup@4.60.4)(typescript@5.9.3) size-limit: specifier: ^11.1.6 version: 11.1.6 - tsup: - specifier: ^8.0.2 - version: 8.0.2(@microsoft/api-extractor@7.49.0(@types/node@22.16.4))(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.16.4)(typescript@5.9.3))(typescript@5.9.3) packages/common: dependencies: @@ -4393,10 +4396,6 @@ packages: '@bpinternal/yargs-extra@0.0.3': resolution: {integrity: sha512-e/unlq0LX4CJUv1jGOv1UgwB/h2M0NCXnwD4lEw496GpkQikO668RS+BBlRhkqdGfZmvKDkXZZ96xJCn+i6Ymg==} - '@bpinternal/zui@2.3.0': - resolution: {integrity: sha512-U7LJnejsjB4tyzozP4ZuW2gs5CRqRtl4d1yAys56x0NDIlbxR5xF4lSSfSewLg9+gn0seyxDVRjZYrfMd2MbTg==} - engines: {node: '>=18.0.0'} - '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} @@ -5725,48 +5724,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-arm64-musl@1.58.0': resolution: {integrity: sha512-zSoYRo5dxHLcUx93Stl2hW3hSNjPt99O70eRVWt5A1zwJ+FPjeCCANCD2a9R4JbHsdcl11TIQOjyigcRVOH2mw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxlint/binding-linux-ppc64-gnu@1.58.0': resolution: {integrity: sha512-NQ0U/lqxH2/VxBYeAIvMNUK1y0a1bJ3ZicqkF2c6wfakbEciP9jvIE4yNzCFpZaqeIeRYaV7AVGqEO1yrfVPjA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-gnu@1.58.0': resolution: {integrity: sha512-X9J+kr3gIC9FT8GuZt0ekzpNUtkBVzMVU4KiKDSlocyQuEgi3gBbXYN8UkQiV77FTusLDPsovjo95YedHr+3yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-musl@1.58.0': resolution: {integrity: sha512-CDze3pi1OO3Wvb/QsXjmLEY4XPKGM6kIo82ssNOgmcl1IdndF9VSGAE38YLhADWmOac7fjqhBw82LozuUVxD0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxlint/binding-linux-s390x-gnu@1.58.0': resolution: {integrity: sha512-b/89glbxFaEAcA6Uf1FvCNecBJEgcUTsV1quzrqXM/o4R1M4u+2KCVuyGCayN2UpsRWtGGLb+Ver0tBBpxaPog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-gnu@1.58.0': resolution: {integrity: sha512-0/yYpkq9VJFCEcuRlrViGj8pJUFFvNS4EkEREaN7CB1EcLXJIaVSSa5eCihwBGXtOZxhnblWgxks9juRdNQI7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-musl@1.58.0': resolution: {integrity: sha512-hr6FNvmcAXiH+JxSvaJ4SJ1HofkdqEElXICW9sm3/Rd5eC3t7kzvmLyRAB3NngKO2wzXRCAm4Z/mGWfrsS4X8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxlint/binding-openharmony-arm64@1.58.0': resolution: {integrity: sha512-R+O368VXgRql1K6Xar+FEo7NEwfo13EibPMoTv3sesYQedRXd6m30Dh/7lZMxnrQVFfeo4EOfYIP4FpcgWQNHg==} @@ -6076,36 +6083,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.3': resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.3': resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.3': resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.3': resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.3': resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.3': resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} @@ -6133,175 +6146,113 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/rollup-android-arm-eabi@4.24.2': - resolution: {integrity: sha512-ufoveNTKDg9t/b7nqI3lwbCG/9IJMhADBNjjz/Jn6LxIZxD7T5L8l2uO/wD99945F1Oo8FvgbbZJRguyk/BdzA==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.60.4': resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.24.2': - resolution: {integrity: sha512-iZoYCiJz3Uek4NI0J06/ZxUgwAfNzqltK0MptPDO4OR0a88R4h0DSELMsflS6ibMCJ4PnLvq8f7O1d7WexUvIA==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.60.4': resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.24.2': - resolution: {integrity: sha512-/UhrIxobHYCBfhi5paTkUDQ0w+jckjRZDZ1kcBL132WeHZQ6+S5v9jQPVGLVrLbNUebdIRpIt00lQ+4Z7ys4Rg==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.60.4': resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.24.2': - resolution: {integrity: sha512-1F/jrfhxJtWILusgx63WeTvGTwE4vmsT9+e/z7cZLKU8sBMddwqw3UV5ERfOV+H1FuRK3YREZ46J4Gy0aP3qDA==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.60.4': resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.24.2': - resolution: {integrity: sha512-1YWOpFcGuC6iGAS4EI+o3BV2/6S0H+m9kFOIlyFtp4xIX5rjSnL3AwbTBxROX0c8yWtiWM7ZI6mEPTI7VkSpZw==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.60.4': resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.24.2': - resolution: {integrity: sha512-3qAqTewYrCdnOD9Gl9yvPoAoFAVmPJsBvleabvx4bnu1Kt6DrB2OALeRVag7BdWGWLhP1yooeMLEi6r2nYSOjg==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.4': resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.24.2': - resolution: {integrity: sha512-ArdGtPHjLqWkqQuoVQ6a5UC5ebdX8INPuJuJNWRe0RGa/YNhVvxeWmCTFQ7LdmNCSUzVZzxAvUznKaYx645Rig==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.24.2': - resolution: {integrity: sha512-B6UHHeNnnih8xH6wRKB0mOcJGvjZTww1FV59HqJoTJ5da9LCG6R4SEBt6uPqzlawv1LoEXSS0d4fBlHNWl6iYw==} - cpu: [arm] - os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.4': resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} cpu: [arm] os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.24.2': - resolution: {integrity: sha512-kr3gqzczJjSAncwOS6i7fpb4dlqcvLidqrX5hpGBIM1wtt0QEVtf4wFaAwVv8QygFU8iWUMYEoJZWuWxyua4GQ==} - cpu: [arm64] - os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.4': resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.24.2': - resolution: {integrity: sha512-TDdHLKCWgPuq9vQcmyLrhg/bgbOvIQ8rtWQK7MRxJ9nvaxKx38NvY7/Lo6cYuEnNHqf6rMqnivOIPIQt6H2AoA==} - cpu: [arm64] - os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.4': resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.4': resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.4': resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} cpu: [loong64] os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.24.2': - resolution: {integrity: sha512-xv9vS648T3X4AxFFZGWeB5Dou8ilsv4VVqJ0+loOIgDO20zIhYfDLkk5xoQiej2RiSQkld9ijF/fhLeonrz2mw==} - cpu: [ppc64] - os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.4': resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.4': resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} cpu: [ppc64] os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.24.2': - resolution: {integrity: sha512-tbtXwnofRoTt223WUZYiUnbxhGAOVul/3StZ947U4A5NNjnQJV5irKMm76G0LGItWs6y+SCjUn/Q0WaMLkEskg==} - cpu: [riscv64] - os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.4': resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.4': resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} cpu: [riscv64] os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.24.2': - resolution: {integrity: sha512-gc97UebApwdsSNT3q79glOSPdfwgwj5ELuiyuiMY3pEWMxeVqLGKfpDFoum4ujivzxn6veUPzkGuSYoh5deQ2Q==} - cpu: [s390x] - os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.4': resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} cpu: [s390x] os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.24.2': - resolution: {integrity: sha512-jOG/0nXb3z+EM6SioY8RofqqmZ+9NKYvJ6QQaa9Mvd3RQxlH68/jcB/lpyVt4lCiqr04IyaC34NzhUqcXbB5FQ==} - cpu: [x64] - os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.4': resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] - - '@rollup/rollup-linux-x64-musl@4.24.2': - resolution: {integrity: sha512-XAo7cJec80NWx9LlZFEJQxqKOMz/lX3geWs2iNT5CHIERLFfd90f3RYLLjiCBm1IMaQ4VOX/lTC9lWfzzQm14Q==} - cpu: [x64] - os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.4': resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.4': resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} @@ -6313,21 +6264,11 @@ packages: cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.24.2': - resolution: {integrity: sha512-A+JAs4+EhsTjnPQvo9XY/DC0ztaws3vfqzrMNMKlwQXuniBKOIIvAAI8M0fBYiTCxQnElYu7mLk7JrhlQ+HeOw==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.60.4': resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.24.2': - resolution: {integrity: sha512-ZhcrakbqA1SCiJRMKSU64AZcYzlZ/9M5LaYil9QWxx9vLnkQ9Vnkve17Qn4SjlipqIIBFKjBES6Zxhnvh0EAEw==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.4': resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} cpu: [ia32] @@ -6338,11 +6279,6 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.24.2': - resolution: {integrity: sha512-2mLH46K1u3r6uwc95hU+OR9q/ggYMpnS7pSp83Ece1HUQgF9Nh/QwTK5rcgbFnV9j+08yBrU5sA/P0RK2MSBNA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.4': resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} cpu: [x64] @@ -11799,11 +11735,6 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 || ^6.0 - rollup@4.24.2: - resolution: {integrity: sha512-do/DFGq5g6rdDhdpPq5qb2ecoczeK6y+2UAjdJ5trjQJj5f1AiVdLRWRc9A9/fFukfvJRgM0UXzxBIYMovm5ww==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.60.4: resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -14819,8 +14750,6 @@ snapshots: yargs: 17.7.2 yn: 4.0.0 - '@bpinternal/zui@2.3.0': {} - '@colors/colors@1.6.0': {} '@cspotcode/source-map-support@0.8.1': @@ -16410,63 +16339,33 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/rollup-android-arm-eabi@4.24.2': - optional: true - '@rollup/rollup-android-arm-eabi@4.60.4': optional: true - '@rollup/rollup-android-arm64@4.24.2': - optional: true - '@rollup/rollup-android-arm64@4.60.4': optional: true - '@rollup/rollup-darwin-arm64@4.24.2': - optional: true - '@rollup/rollup-darwin-arm64@4.60.4': optional: true - '@rollup/rollup-darwin-x64@4.24.2': - optional: true - '@rollup/rollup-darwin-x64@4.60.4': optional: true - '@rollup/rollup-freebsd-arm64@4.24.2': - optional: true - '@rollup/rollup-freebsd-arm64@4.60.4': optional: true - '@rollup/rollup-freebsd-x64@4.24.2': - optional: true - '@rollup/rollup-freebsd-x64@4.60.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.24.2': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.24.2': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.24.2': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.24.2': - optional: true - '@rollup/rollup-linux-arm64-musl@4.60.4': optional: true @@ -16476,39 +16375,24 @@ snapshots: '@rollup/rollup-linux-loong64-musl@4.60.4': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.24.2': - optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.4': optional: true '@rollup/rollup-linux-ppc64-musl@4.60.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.24.2': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.4': optional: true '@rollup/rollup-linux-riscv64-musl@4.60.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.24.2': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.24.2': - optional: true - '@rollup/rollup-linux-x64-gnu@4.60.4': optional: true - '@rollup/rollup-linux-x64-musl@4.24.2': - optional: true - '@rollup/rollup-linux-x64-musl@4.60.4': optional: true @@ -16518,24 +16402,15 @@ snapshots: '@rollup/rollup-openharmony-arm64@4.60.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.24.2': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.24.2': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.4': optional: true '@rollup/rollup-win32-x64-gnu@4.60.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.24.2': - optional: true - '@rollup/rollup-win32-x64-msvc@4.60.4': optional: true @@ -23595,30 +23470,6 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup@4.24.2: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.2 - '@rollup/rollup-android-arm64': 4.24.2 - '@rollup/rollup-darwin-arm64': 4.24.2 - '@rollup/rollup-darwin-x64': 4.24.2 - '@rollup/rollup-freebsd-arm64': 4.24.2 - '@rollup/rollup-freebsd-x64': 4.24.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.2 - '@rollup/rollup-linux-arm-musleabihf': 4.24.2 - '@rollup/rollup-linux-arm64-gnu': 4.24.2 - '@rollup/rollup-linux-arm64-musl': 4.24.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.2 - '@rollup/rollup-linux-riscv64-gnu': 4.24.2 - '@rollup/rollup-linux-s390x-gnu': 4.24.2 - '@rollup/rollup-linux-x64-gnu': 4.24.2 - '@rollup/rollup-linux-x64-musl': 4.24.2 - '@rollup/rollup-win32-arm64-msvc': 4.24.2 - '@rollup/rollup-win32-ia32-msvc': 4.24.2 - '@rollup/rollup-win32-x64-msvc': 4.24.2 - fsevents: 2.3.3 - rollup@4.60.4: dependencies: '@types/estree': 1.0.8 @@ -24905,7 +24756,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.47 - rollup: 4.24.2 + rollup: 4.60.4 optionalDependencies: '@types/node': 22.16.4 fsevents: 2.3.3