From 8ab1af20f3f5213a26152124003407172ff57aa3 Mon Sep 17 00:00:00 2001 From: Vladislav Tupikin Date: Sat, 17 May 2025 17:41:37 +0300 Subject: [PATCH 1/3] README.md redesigned --- README.md | 257 ++++++++++++++++++++++------------------------------ favicon.svg | 7 -- 2 files changed, 109 insertions(+), 155 deletions(-) delete mode 100644 favicon.svg diff --git a/README.md b/README.md index 35669fd3..b5707d60 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,99 @@
Confluence.js logo -NPM version -NPM downloads per month -build status -license + NPM version + NPM downloads per month + build status + license -JavaScript / TypeScript library for Node.JS and browsers to easily interact with Atlassian Confluence API + JavaScript/TypeScript library for Node.js and browsers to interact with Atlassian Confluence API
## About -confluence.js is a powerful [Node.JS](https://nodejs.org/) / Browser module that allows you to interact with the [Confluence API](https://developer.atlassian.com/cloud/confluence/rest/intro/) very easily. +Confluence.js is a powerful Node.js and browser-compatible module that provides seamless interaction with: +- [Confluence Cloud REST API](https://developer.atlassian.com/cloud/confluence/rest/) -Usability, consistency, and performance are key focuses of confluence.js, and it also has nearly 100% coverage of the Confluence API. It receives new Confluence features shortly after they arrive in the API. +Designed for developer experience and performance, it offers full API coverage and stays updated with new Confluence features. -## Table of contents +## Table of Contents -- [Installation](#installation) +- [Getting Started](#getting-started) + - [Installation](#installation) + - [Quick Example](#quick-example) +- [Documentation](#documentation) - [Usage](#usage) - [Authentication](#authentication) - - [Basic](#basic-authentication) + - [Basic Auth](#basic-authentication) - [OAuth 2.0](#oauth-20) - [JWT](#jwt) - - [Your first request and using algorithm](#your-first-request-and-using-algorithm) - - [`apiPrefix` config parameter](#apiprefix-config-parameter) -- [Decreasing Webpack bundle size](#decreasing-webpack-bundle-size) -- [Take a look at our other products](#take-a-look-at-our-other-products) + - [First Request](#first-request) + - [API Structure](#api-structure) + - [Custom API Prefix](#custom-api-prefix) +- [Tree Shaking](#tree-shaking) +- [Other Products](#other-products) - [License](#license) -## Installation +## Getting Started -**Node.js 20.0.0 or newer is required.** +### Installation -Install with the npm: +**Requires Node.js 20.0.0 or newer** ```bash +# npm npm install confluence.js -``` - -Install with the yarn: -```bash +# yarn yarn add confluence.js + +# pnpm +pnpm add confluence.js ``` -Install with the pnpm +### Quick Example -```bash -pnpm add confluence.js +Create a Confluence space in 3 steps: + +```typescript +import { ConfluenceClient } from 'confluence.js'; + +const client = new ConfluenceClient({ + host: 'https://your-domain.atlassian.net', + authentication: { + basic: { + email: 'your@email.com', + apiToken: 'YOUR_API_TOKEN', // Create one: https://id.atlassian.com/manage-profile/security/api-tokens + }, + }, +}); + +async function createSpace() { + const space = await client.space.createSpace({ + name: 'Project Galaxy', + key: 'GALAXY', + }); + console.log(`Space created: ${space.key}`); +} + +createSpace(); ``` -## Usage +## Documentation -#### Authentication +Full API reference and guides available at: +[https://mrrefactoring.github.io/confluence.js/](https://mrrefactoring.github.io/confluence.js/) -There are several types of authentication to gain access to the Confluence API. Let's take a look at a few of them below +## Usage -##### [Basic authentication](https://developer.atlassian.com/cloud/confluence/basic-auth-for-rest-apis/) +### Authentication -// TODO refine -Basic authentication allows you to log in with credentials. -How to release API Token, read how to do it [here](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/), and use it together with email. +#### Basic Authentication -```typescript -import { ConfluenceClient } from 'confluence.js'; +1. Create an API token: [Atlassian Account Settings](https://id.atlassian.com/manage-profile/security/api-tokens) +2. Configure the client: +```typescript const client = new ConfluenceClient({ host: 'https://your-domain.atlassian.net', authentication: { @@ -77,15 +105,11 @@ const client = new ConfluenceClient({ }); ``` -##### [OAuth 2.0](https://developer.atlassian.com/cloud/confluence/oauth-2-3lo-apps/) - -Only the authorization token is currently supported. To release it, you need to read the [documentation](https://developer.atlassian.com/cloud/confluence/oauth-2-3lo-apps/) and write your own code to get the token. +#### OAuth 2.0 -Example of usage +Implement OAuth 2.0 flow using Atlassian's [documentation](https://developer.atlassian.com/cloud/confluence/oauth-2-3lo-apps/): ```typescript -import { ConfluenceClient } from 'confluence.js'; - const client = new ConfluenceClient({ host: 'https://your-domain.atlassian.net', authentication: { @@ -96,121 +120,57 @@ const client = new ConfluenceClient({ }); ``` -##### [JWT](https://developer.atlassian.com/cloud/confluence/understanding-jwt/) +#### JWT -```typescript -import { ConfluenceClient } from 'confluence.js'; +For server-to-server integration: +```typescript const client = new ConfluenceClient({ host: 'https://your-domain.atlassian.net', authentication: { jwt: { - issuer: 'ISSUER', - secret: 'shhhh', + issuer: 'your-client-id', + secret: 'your-secret-key', expiryTimeSeconds: 180, }, }, }); ``` -#### Your first request and using algorithm +### First Request -```typescript -import { ConfluenceClient } from 'confluence.js'; // Or import ServerClient if using standalone (Server) API +Create a page in an existing space: -const client = new ConfluenceClient({ - host: 'https://your-domain.atlassian.net', - authentication: { - basic: { - email: 'YOUR_EMAIL', - apiToken: 'YOUR_API_TOKEN', +```typescript +const page = await client.content.createContent({ + title: 'Project Overview', + type: 'page', + space: { key: 'GALAXY' }, + body: { + storage: { + value: '

Welcome to our project documentation

', + representation: 'storage', }, }, }); -async function main() { - const space = await client.space.createSpace({ - name: 'My new space', - key: 'SPACENAME', - }); - - console.log(space); -} - -main(); - -// Expected output: -// { -// id: 558714, -// key: 'SPACENAME', -// name: 'My new space', -// description: { -// plain: { -// value: '', -// representation: 'plain', -// embeddedContent: [] -// }, -// _expandable: {view: ''} -// }, -// homepage: { -// id: '555312', -// type: 'page', -// status: 'current', -// title: 'My new space Home', -// macroRenderedOutput: {}, -// extensions: {position: 581}, -// _expandable: { -// container: '/rest/api/space/SPACENAME', -// metadata: '', -// restrictions: '/rest/api/content/555312/restriction/byOperation', -// history: '/rest/api/content/555312/history', -// body: '', -// version: '', -// descendants: '/rest/api/content/555312/descendant', -// space: '/rest/api/space/SPACENAME', -// childTypes: '', -// operations: '', -// schedulePublishDate: '', -// children: '/rest/api/content/555312/child', -// ancestors: '' -// }, -// _links: { -// self: 'https://xxx.atlassian.net/wiki/rest/api/content/555312', -// tinyui: '/x/qIoI', -// editui: '/pages/resumedraft.action?draftId=555312', -// webui: '/spaces/SPACENAME/overview' -// } -// }, -// type: 'global', -// permissions: [...], -// status: 'current', -// _expandable: { -// settings: '/rest/api/space/SPACENAME/settings', -// metadata: '', -// operations: '', -// lookAndFeel: '/rest/api/settings/lookandfeel?spaceKey=SPACENAME', -// identifiers: '', -// icon: '', -// theme: '/rest/api/space/SPACENAME/theme', -// history: '' -// }, -// _links: { -// context: '/wiki', -// self: 'https://xxx.atlassian.net/wiki/rest/api/space/SPACENAME', -// collection: '/rest/api/space', -// webui: '/spaces/SPACENAME', -// base: 'https://xxx.atlassian.net/wiki' -// } -// } +console.log(`Page created: ${page.title}`); ``` -The algorithm for using the library: +### API Structure + +Access endpoints using `client..` pattern: ```typescript -client..(parametersObject); +// Get space details +const space = await client.space.getSpace({ spaceKey: 'GALAXY' }); + +// Search content +const results = await client.search.search({ cql: 'title~"Project"' }); ``` -Available groups: +
+ 🔽 Available API Groups - [analytics](https://developer.atlassian.com/cloud/confluence/rest/api-group-analytics/) - [audit](https://developer.atlassian.com/cloud/confluence/rest/api-group-audit) @@ -244,45 +204,46 @@ Available groups: - [themes](https://developer.atlassian.com/cloud/confluence/rest/api-group-themes/#api-group-themes) - [users](https://developer.atlassian.com/cloud/confluence/rest/api-group-users/#api-group-users) -The name of the methods is the name of the endpoint in the group without spaces and in `camelCase`. +
-The parameters depend on the specific endpoint. For more information, [see here](https://mrrefactoring.github.io/confluence.js/). +### Custom API Prefix -#### `apiPrefix` config parameter - -The `apiPrefix` parameter is used to specify the prefix for the API. For example, if you use the custom domain `https://mydomain.atlassian.net/api` for API. - -Example of use: +For custom API endpoints: ```typescript -import { ConfluenceClient } from 'confluence.js'; - const client = new ConfluenceClient({ - host: 'https://your-domain.atlassian.net', - apiPrefix: '/api', + host: 'https://custom-domain.com', + apiPrefix: '/confluence-api', // Default: '/wiki/rest/api' }); ``` -## Decreasing Webpack bundle size +## Tree Shaking -If you use Webpack and need to reduce the size of the assembly, you can create your client with only the groups you use. +Optimize bundle size by importing only needed modules: ```typescript +// custom-client.ts import { BaseClient } from 'confluence.js'; import { Content } from 'confluence.js/api/content'; import { Space } from 'confluence.js/api/space'; -export class CustomConfluenceClient extends BaseClient { +export class CustomClient extends BaseClient { content = new Content(this); space = new Space(this); } + +// Usage +const client = new CustomClient({ /* config */ }); +await client.space.getSpace({ spaceKey: 'GALAXY' }); ``` -## Take a look at our other products +## Other Products -* [Jira.js](https://github.com/MrRefactoring/jira.js) - A JavaScript / TypeScript wrapper for the JIRA REST API -* [Trello.js](https://github.com/MrRefactoring/trello.js) - JavaScript / TypeScript library for Node.JS and browsers to easily interact with Atlassian Trello API +Explore our other Atlassian integration libraries: +- [Jira.js](https://github.com/MrRefactoring/jira.js) - Jira API wrapper +- [Trello.js](https://github.com/MrRefactoring/trello.js) - Trello API integration ## License -Distributed under the MIT License. See `LICENSE` for more information. +MIT License © MrRefactoring +See [LICENSE](https://github.com/mrrefactoring/confluence.js/blob/develop/LICENSE) for details. diff --git a/favicon.svg b/favicon.svg deleted file mode 100644 index 08be5dab..00000000 --- a/favicon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - From fcdbb7485a0298a8eaadbf01d77d4069c6d0361b Mon Sep 17 00:00:00 2001 From: Vladislav Tupikin Date: Wed, 16 Jul 2025 23:47:42 +0300 Subject: [PATCH 2/3] incremental api changes (#146) * incremental api changes * changelog updated * readme updated * readme updated * import fixes --- CHANGELOG.md | 53 +- README.md | 63 +- eslint.config.ts | 27 +- package.json | 57 +- pnpm-lock.yaml | 1759 ++++++++--------- src/api/analytics.ts | 2 +- src/api/audit.ts | 6 +- src/api/content.ts | 45 +- src/api/contentAttachments.ts | 7 +- src/api/contentBody.ts | 120 +- src/api/contentChildrenAndDescendants.ts | 42 +- src/api/contentComments.ts | 5 + src/api/contentLabels.ts | 26 +- src/api/contentMacroBody.ts | 80 +- src/api/contentPermissions.ts | 2 +- src/api/contentProperties.ts | 25 + src/api/contentRestrictions.ts | 26 +- src/api/contentStates.ts | 52 +- src/api/contentVersions.ts | 10 +- src/api/contentWatches.ts | 2 +- src/api/dynamicModules.ts | 2 +- src/api/experimental.ts | 22 +- src/api/group.ts | 171 +- src/api/index.ts | 1 + src/api/inlineTasks.ts | 13 + src/api/labelInfo.ts | 2 +- src/api/longRunningTask.ts | 3 +- src/api/models/spaceCreate.ts | 13 +- src/api/models/spacePrivateCreate.ts | 13 +- .../bulkAsyncConvertContentBodyRequest.ts | 88 + .../bulkAsyncConvertContentBodyResponse.ts | 4 + src/api/parameters/deleteGroupById.ts | 4 + src/api/parameters/downloadAttachment.ts | 6 + src/api/parameters/getContentsWithState.ts | 17 + .../parameters/getGroupMembersByGroupId.ts | 7 + .../parameters/getGroupMembershipsForUser.ts | 4 + src/api/parameters/getTasks.ts | 2 + src/api/parameters/getUser.ts | 4 + src/api/parameters/index.ts | 4 + src/api/parameters/searchUser.ts | 7 + src/api/relation.ts | 28 +- src/api/search.ts | 9 +- src/api/settings.ts | 6 +- src/api/space.ts | 36 +- src/api/spacePermissions.ts | 2 +- src/api/spaceProperties.ts | 25 + src/api/spaceSettings.ts | 2 +- src/api/template.ts | 2 +- src/api/themes.ts | 2 +- src/api/userProperties.ts | 185 ++ src/api/users.ts | 30 +- src/clients/baseClient.ts | 6 +- src/clients/confluenceClient.ts | 6 + src/config.ts | 5 +- .../createJWTAuthentication.ts | 2 +- tests/unit/api/contentBody.test.ts | 97 + tests/unit/api/group.test.ts | 381 ++++ tests/unit/clients/baseClient.test.ts | 35 + tests/unit/clients/confluenceClient.test.ts | 31 + tests/unit/index.test.ts | 2 +- 60 files changed, 2517 insertions(+), 1171 deletions(-) create mode 100644 src/api/parameters/bulkAsyncConvertContentBodyRequest.ts create mode 100644 src/api/parameters/bulkAsyncConvertContentBodyResponse.ts create mode 100644 src/api/parameters/deleteGroupById.ts create mode 100644 src/api/parameters/getContentsWithState.ts create mode 100644 src/api/userProperties.ts create mode 100644 tests/unit/api/contentBody.test.ts create mode 100644 tests/unit/api/group.test.ts create mode 100644 tests/unit/clients/baseClient.test.ts create mode 100644 tests/unit/clients/confluenceClient.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f71b9c68..078c9e4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,54 @@ # Changelog +## [2.1.0] - 2025-07-17 +### **Deprecations** ⚠️ +- **Package dependencies**: + - Replaced deprecated `atlassian-jwt` with `@atlassian/atlassian-jwt`. +- **Content APIs**: + - Deprecated all content-related methods due to [Confluence API changes](https://developer.atlassian.com/cloud/confluence/changelog/#CHANGE-2520): + - `content.getContent`, `content.createContent`, `content.getContentById`, `content.updateContent`, `content.deleteContent` + - `content.getHistoryForContent`, `contentAttachments.getAttachments`, `contentBody.convertContentBody` + - `contentChildrenAndDescendants.getContentChildren`, `contentChildrenAndDescendants.getContentChildrenByType` + - `ContentComments`, `contentLabels.getLabelsForContent`, `ContentProperties` + - `contentVersions.getContentVersions`, `contentVersions.getContentVersion` +- **Group APIs**: + - Deprecated group-related methods: + - `group.removeGroup`, `group.getGroupByQueryParam`, `group.getGroupByName` + - `group.getMembersByQueryParam`, `group.getGroupMembers` +- **Other APIs**: + - Deprecated `InlineTasks`, `SpaceProperties`, `users.getBulkUserMigration` + - Deprecated content restriction methods: + - `contentRestrictions.getContentRestrictionStatusForGroup` + - `contentRestrictions.addGroupToContentRestriction` + - `contentRestrictions.removeGroupByName` + - Deprecated `settings.setLookAndFeelSettings` + - Deprecated space-related methods: + - `space.getSpaces`, `space.getSpace`, `space.getContentForSpace`, `space.getContentByTypeForSpace` + +### **New Features** ✨ +- **New endpoints**: + - Added `contentBody.bulkAsyncConvertContentBodyResponse` and `contentBody.bulkAsyncConvertContentBodyRequest` + - Added `contentStates.getContentsWithState` method + - Introduced new `UserProperties` API +- **API improvements**: + - Added `status` property to `contentAttachments.downloadAttachment` + - Added `key` property to `longRunningTask.getTasks` + - Added `sitePermissionTypeFilter` property to `search.searchUser` + - Added `alias` property to both `space.createSpace` and `space.createPrivateSpace` + +### **API Changes** 🔄 +- **Experimental methods moved**: + - Moved experimental user property methods to `userProperties` namespace: + - `getUserProperties`, `getUserProperty`, `createUserProperty`, `updateUserProperty`, `deleteUserProperty` +- **Parameter fixes**: + - Simplified `group.removeGroupById` parameters (no longer requires `operationKey` and `groupId`) + +### **Other Changes** +- **Package structure**: + - Reordered `exports` in `package.json` for better module resolution + +--- + ## [2.0.0] - 2025-05-09 ### **Breaking Changes** ⚠️ - **Deprecated APIs removed**: APIs marked as deprecated in v1.x have been removed. @@ -19,12 +68,12 @@ - **Telemetry**: All telemetry/tracking code has been removed. - No data is collected by the package. -### [1.7.3] - 2024-03-04 +## [1.7.3] - 2024-03-04 - Dependencies updated - Expand properties added for few endpoints -### [1.7.2] - 2023-12-01 +## [1.7.2] - 2023-12-01 Changes in this version: diff --git a/README.md b/README.md index b5707d60..a77e639b 100644 --- a/README.md +++ b/README.md @@ -172,37 +172,38 @@ const results = await client.search.search({ cql: 'title~"Project"' });
🔽 Available API Groups -- [analytics](https://developer.atlassian.com/cloud/confluence/rest/api-group-analytics/) -- [audit](https://developer.atlassian.com/cloud/confluence/rest/api-group-audit) -- [content](https://developer.atlassian.com/cloud/confluence/rest/api-group-content/) -- [contentAttachments](https://developer.atlassian.com/cloud/confluence/rest/api-group-content---attachments/#api-group-content---attachments) -- [contentBody](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-body/#api-group-content-body) -- [contentChildrenAndDescendants](https://developer.atlassian.com/cloud/confluence/rest/api-group-content---children-and-descendants/#api-group-content---children-and-descendants) -- [contentComments](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-comments/#api-group-content-comments) -- [contentLabels](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-labels/#api-group-content-labels) -- [contentMacroBody](https://developer.atlassian.com/cloud/confluence/rest/api-group-content---macro-body/#api-group-content---macro-body) -- [contentPermissions](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-permissions/#api-group-content-permissions) -- [contentProperties](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-properties/#api-group-content-properties) -- [contentRestrictions](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-restrictions/#api-group-content-restrictions) -- [contentStates](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-states/#api-group-content-states) -- [contentVersions](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-versions/#api-group-content-versions) -- [contentWatches](https://developer.atlassian.com/cloud/confluence/rest/api-group-content-watches/#api-group-content-watches) -- [dynamicModules](https://developer.atlassian.com/cloud/confluence/rest/api-group-dynamic-modules/#api-group-dynamic-modules) -- [experimental](https://developer.atlassian.com/cloud/confluence/rest/api-group-experimental/#api-group-experimental) -- [group](https://developer.atlassian.com/cloud/confluence/rest/api-group-group/#api-group-group) -- [inlineTasks](https://developer.atlassian.com/cloud/confluence/rest/api-group-inline-tasks/#api-group-inline-tasks) -- [labelInfo](https://developer.atlassian.com/cloud/confluence/rest/api-group-label-info/#api-group-label-info) -- [longRunningTask](https://developer.atlassian.com/cloud/confluence/rest/api-group-long-running-task/#api-group-long-running-task) -- [relation](https://developer.atlassian.com/cloud/confluence/rest/api-group-relation/#api-group-relation) -- [search](https://developer.atlassian.com/cloud/confluence/rest/api-group-search/#api-group-search) -- [settings](https://developer.atlassian.com/cloud/confluence/rest/api-group-settings/#api-group-settings) -- [space](https://developer.atlassian.com/cloud/confluence/rest/api-group-space/#api-group-space) -- [spacePermissions](https://developer.atlassian.com/cloud/confluence/rest/api-group-space-permissions/#api-group-space-permissions) -- [spaceProperties](https://developer.atlassian.com/cloud/confluence/rest/api-group-space-properties/#api-group-space-properties) -- [spaceSettings](https://developer.atlassian.com/cloud/confluence/rest/api-group-space-settings/#api-group-space-settings) -- [template](https://developer.atlassian.com/cloud/confluence/rest/api-group-template/#api-group-template) -- [themes](https://developer.atlassian.com/cloud/confluence/rest/api-group-themes/#api-group-themes) -- [users](https://developer.atlassian.com/cloud/confluence/rest/api-group-users/#api-group-users) +- [audit](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-audit/#api-group-audit) +- [analytics](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-analytics/#api-group-analytics) +- [content](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content/#api-group-content) +- [contentAttachments](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content---attachments/#api-group-content---attachments) +- [contentBody](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-body/#api-group-content-body) +- [contentChildrenAndDescendants](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content---children-and-descendants/#api-group-content---children-and-descendants) +- contentComments - was deprecated +- [contentMacroBody](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content---macro-body/#api-group-content---macro-body) +- [contentLabels](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-labels/#api-group-content-labels) +- [contentPermissions](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-permissions/#api-group-content-permissions) +- contentProperties - was deprecated +- [contentRestrictions](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-restrictions/#api-group-content-restrictions) +- [contentStates](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-states/#api-group-content-states) +- [contentVersions](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-versions/#api-group-content-versions) +- [contentWatches](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content-watches/#api-group-content-watches) +- [dynamicModules](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-dynamic-modules/#api-group-dynamic-modules) +- [experimental](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-experimental/#api-group-experimental) +- [group](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-group/#api-group-group) +- inlineTasks - was deprecated +- [labelInfo](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-label-info/#api-group-label-info) +- [longRunningTask](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-long-running-task/#api-group-long-running-task) +- [relation](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-relation/#api-group-relation) +- [search](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-search/#api-group-search) +- [settings](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-settings/#api-group-settings) +- [space](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-space/#api-group-space) +- [spacePermissions](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-space-permissions/#api-group-space-permissions) +- spaceProperties - was deprecated +- [spaceSettings](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-space-settings/#api-group-space-settings) +- [template](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-template/#api-group-template) +- [themes](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-themes/#api-group-themes) +- [users](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-users/#api-group-users) +- [userProperties](https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-user-properties/#api-group-user-properties)
diff --git a/eslint.config.ts b/eslint.config.ts index 2954ddc6..ad85b7d7 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -2,8 +2,7 @@ import js from '@eslint/js'; import globals from 'globals'; import tseslint from 'typescript-eslint'; import { defineConfig } from 'eslint/config'; -import stylisticJs from '@stylistic/eslint-plugin-js'; -import stylisticTs from '@stylistic/eslint-plugin-ts'; +import stylistic from '@stylistic/eslint-plugin'; export default defineConfig([ { files: ['**/*.{js,mjs,cjs,ts}'], plugins: { js }, extends: ['js/recommended'] }, @@ -17,13 +16,12 @@ export default defineConfig([ }, }, plugins: { - '@stylistic/js': stylisticJs, - '@stylistic/ts': stylisticTs, + '@stylistic': stylistic, }, rules: { - '@stylistic/js/no-trailing-spaces': 'error', - '@stylistic/ts/indent': ['error', 2], - '@stylistic/ts/lines-between-class-members': [ + '@stylistic/comma-dangle': ['error', 'always-multiline'], + '@stylistic/indent': ['error', 2], + '@stylistic/lines-between-class-members': [ 'error', 'always', { @@ -31,7 +29,9 @@ export default defineConfig([ exceptAfterSingleLine: true, }, ], - '@stylistic/ts/padding-line-between-statements': [ + '@stylistic/no-trailing-spaces': 'error', + '@stylistic/object-curly-spacing': ['error', 'always'], + '@stylistic/padding-line-between-statements': [ 'error', // Return statements { blankLine: 'always', prev: '*', next: 'return' }, @@ -39,8 +39,8 @@ export default defineConfig([ { blankLine: 'always', prev: 'import', next: '*' }, { blankLine: 'any', prev: 'import', next: 'import' }, ], - '@stylistic/ts/quotes': ['error', 'single'], - '@stylistic/ts/semi': ['error', 'always'], + '@stylistic/quotes': ['error', 'single'], + '@stylistic/semi': ['error', 'always'], '@typescript-eslint/consistent-type-imports': [ 'error', { @@ -49,14 +49,9 @@ export default defineConfig([ }, ], '@typescript-eslint/no-empty-object-type': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', // todo fix it - '@typescript-eslint/no-unnecessary-condition': 'error', // todo fix it - '@typescript-eslint/no-unsafe-argument': 'off', // todo fix it - '@typescript-eslint/no-unsafe-assignment': 'off', // todo fix it - '@typescript-eslint/no-unsafe-call': 'off', // todo fix it + '@typescript-eslint/no-unnecessary-condition': 'error', '@typescript-eslint/no-unsafe-member-access': 'off', '@typescript-eslint/prefer-optional-chain': 'error', - '@stylistic/ts/object-curly-spacing': ["error", "always"] }, }, ]); diff --git a/package.json b/package.json index a8a624e9..5d5aa8a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "confluence.js", - "version": "2.0.0", + "version": "2.1.0", "description": "confluence.js is a powerful Node.JS/Browser module that allows you to interact with the Confluence API very easily", "author": "Vladislav Tupikin ", "license": "MIT", @@ -16,13 +16,13 @@ "exports": { ".": { "types": "./dist/esm/types/index.d.ts", - "import": "./dist/esm/index.mjs", - "require": "./dist/cjs/index.cjs" + "require": "./dist/cjs/index.cjs", + "import": "./dist/esm/index.mjs" }, "./*": { "types": "./dist/esm/types/*.d.ts", - "import": "./dist/esm/*.mjs", - "require": "./dist/cjs/*.cjs" + "require": "./dist/cjs/*.cjs", + "import": "./dist/esm/*.mjs" }, "./package.json": "./package.json" }, @@ -52,39 +52,40 @@ "lint:fix": "pnpm run lint --fix", "test:unit": "vitest run tests/unit --minWorkers=1 --maxWorkers=8 --sequence.concurrent", "test:integration": "vitest run tests/integration --bail=1 --no-file-parallelism --max-concurrency 1 -c vitest.config.mts --hookTimeout 100000 --testTimeout 100000", - "code:formatting": "npm run prettier && npm run lint:fix" + "replace:wiki-rest": "grep -rl '/wiki/rest' src/api | xargs sed -i '' 's|/wiki/rest||g'", + "replace:all": "pnpm run replace:wiki-rest", + "code:formatting": "pnpm run replace:all && pnpm run prettier && pnpm run lint:fix" }, "dependencies": { - "atlassian-jwt": "^2.0.3", - "axios": "^1.9.0", - "form-data": "^4.0.2", + "@atlassian/atlassian-jwt": "^2.2.0", + "axios": "^1.10.0", + "form-data": "^4.0.3", "oauth": "^0.10.2", - "zod": "^3.24.4" + "zod": "^3.25.76" }, "devDependencies": { - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.31.0", "@rollup/plugin-alias": "^5.1.1", - "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-node-resolve": "^16.0.1", - "@rollup/plugin-typescript": "^12.1.2", - "@stylistic/eslint-plugin-js": "^4.2.0", - "@stylistic/eslint-plugin-ts": "^4.2.0", - "@types/express": "^4.17.21", - "@types/node": "^20.17.46", + "@rollup/plugin-typescript": "^12.1.4", + "@stylistic/eslint-plugin": "^5.2.0", + "@types/express": "^4.17.23", + "@types/node": "^20.19.8", "@types/oauth": "^0.9.6", - "dotenv": "^16.5.0", - "eslint": "^9.26.0", - "globals": "^16.1.0", + "dotenv": "^17.2.0", + "eslint": "^9.31.0", + "globals": "^16.3.0", "jiti": "^2.4.2", - "prettier": "^3.5.3", - "prettier-plugin-jsdoc": "^1.3.2", - "rollup": "^4.40.2", - "rollup-plugin-esnext-to-nodenext": "^1.0.0", - "rollup-plugin-node-externals": "^8.0.0", + "prettier": "^3.6.2", + "prettier-plugin-jsdoc": "^1.3.3", + "rollup": "^4.45.1", + "rollup-plugin-esnext-to-nodenext": "^1.0.1", + "rollup-plugin-node-externals": "^8.0.1", "tslib": "^2.8.1", - "typedoc": "^0.28.4", + "typedoc": "^0.28.7", "typescript": "^5.8.3", - "typescript-eslint": "^8.32.1", - "vitest": "^3.1.3" + "typescript-eslint": "^8.37.0", + "vitest": "^3.2.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16782cc3..bd4dcfce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,243 +8,250 @@ importers: .: dependencies: - atlassian-jwt: - specifier: ^2.0.3 - version: 2.0.3 + '@atlassian/atlassian-jwt': + specifier: ^2.2.0 + version: 2.2.0 axios: - specifier: ^1.9.0 - version: 1.9.0 + specifier: ^1.10.0 + version: 1.10.0 form-data: - specifier: ^4.0.2 - version: 4.0.2 + specifier: ^4.0.3 + version: 4.0.3 oauth: specifier: ^0.10.2 version: 0.10.2 zod: - specifier: ^3.24.4 - version: 3.24.4 + specifier: ^3.25.76 + version: 3.25.76 devDependencies: '@eslint/js': - specifier: ^9.26.0 - version: 9.26.0 + specifier: ^9.31.0 + version: 9.31.0 '@rollup/plugin-alias': specifier: ^5.1.1 - version: 5.1.1(rollup@4.40.2) + version: 5.1.1(rollup@4.45.1) '@rollup/plugin-commonjs': - specifier: ^28.0.3 - version: 28.0.3(rollup@4.40.2) + specifier: ^28.0.6 + version: 28.0.6(rollup@4.45.1) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.1(rollup@4.40.2) + version: 16.0.1(rollup@4.45.1) '@rollup/plugin-typescript': - specifier: ^12.1.2 - version: 12.1.2(rollup@4.40.2)(tslib@2.8.1)(typescript@5.8.3) - '@stylistic/eslint-plugin-js': - specifier: ^4.2.0 - version: 4.2.0(eslint@9.26.0(jiti@2.4.2)) - '@stylistic/eslint-plugin-ts': - specifier: ^4.2.0 - version: 4.2.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^12.1.4 + version: 12.1.4(rollup@4.45.1)(tslib@2.8.1)(typescript@5.8.3) + '@stylistic/eslint-plugin': + specifier: ^5.2.0 + version: 5.2.0(eslint@9.31.0(jiti@2.4.2)) '@types/express': - specifier: ^4.17.21 - version: 4.17.21 + specifier: ^4.17.23 + version: 4.17.23 '@types/node': - specifier: ^20.17.46 - version: 20.17.46 + specifier: ^20.19.8 + version: 20.19.8 '@types/oauth': specifier: ^0.9.6 version: 0.9.6 dotenv: - specifier: ^16.5.0 - version: 16.5.0 + specifier: ^17.2.0 + version: 17.2.0 eslint: - specifier: ^9.26.0 - version: 9.26.0(jiti@2.4.2) + specifier: ^9.31.0 + version: 9.31.0(jiti@2.4.2) globals: - specifier: ^16.1.0 - version: 16.1.0 + specifier: ^16.3.0 + version: 16.3.0 jiti: specifier: ^2.4.2 version: 2.4.2 prettier: - specifier: ^3.5.3 - version: 3.5.3 + specifier: ^3.6.2 + version: 3.6.2 prettier-plugin-jsdoc: - specifier: ^1.3.2 - version: 1.3.2(prettier@3.5.3) + specifier: ^1.3.3 + version: 1.3.3(prettier@3.6.2) rollup: - specifier: ^4.40.2 - version: 4.40.2 + specifier: ^4.45.1 + version: 4.45.1 rollup-plugin-esnext-to-nodenext: - specifier: ^1.0.0 - version: 1.0.0(rollup@4.40.2) + specifier: ^1.0.1 + version: 1.0.1(rollup@4.45.1) rollup-plugin-node-externals: - specifier: ^8.0.0 - version: 8.0.0(rollup@4.40.2) + specifier: ^8.0.1 + version: 8.0.1(rollup@4.45.1) tslib: specifier: ^2.8.1 version: 2.8.1 typedoc: - specifier: ^0.28.4 - version: 0.28.4(typescript@5.8.3) + specifier: ^0.28.7 + version: 0.28.7(typescript@5.8.3) typescript: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.32.1 - version: 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^8.37.0 + version: 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) vitest: - specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1) + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0) packages: - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + '@atlassian/atlassian-jwt@2.2.0': + resolution: {integrity: sha512-h6hLnbRFTEVOB0xa8n0TfQCDZ1hUPFGClrbQbO9ryIGeEsNGG2Vy2S8BWrYJBQrirMmj+FHfVVsbs1M9DIC80Q==} + engines: {node: '>= 0.4.0'} + + '@esbuild/aix-ppc64@0.25.6': + resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + '@esbuild/android-arm64@0.25.6': + resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + '@esbuild/android-arm@0.25.6': + resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + '@esbuild/android-x64@0.25.6': + resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + '@esbuild/darwin-arm64@0.25.6': + resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + '@esbuild/darwin-x64@0.25.6': + resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + '@esbuild/freebsd-arm64@0.25.6': + resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + '@esbuild/freebsd-x64@0.25.6': + resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + '@esbuild/linux-arm64@0.25.6': + resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + '@esbuild/linux-arm@0.25.6': + resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + '@esbuild/linux-ia32@0.25.6': + resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + '@esbuild/linux-loong64@0.25.6': + resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + '@esbuild/linux-mips64el@0.25.6': + resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + '@esbuild/linux-ppc64@0.25.6': + resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + '@esbuild/linux-riscv64@0.25.6': + resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + '@esbuild/linux-s390x@0.25.6': + resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + '@esbuild/linux-x64@0.25.6': + resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + '@esbuild/netbsd-arm64@0.25.6': + resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + '@esbuild/netbsd-x64@0.25.6': + resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + '@esbuild/openbsd-arm64@0.25.6': + resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + '@esbuild/openbsd-x64@0.25.6': + resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + '@esbuild/openharmony-arm64@0.25.6': + resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.6': + resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + '@esbuild/win32-arm64@0.25.6': + resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + '@esbuild/win32-ia32@0.25.6': + resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + '@esbuild/win32-x64@0.25.6': + resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -259,36 +266,36 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.26.0': - resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} + '@eslint/js@9.31.0': + resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + '@eslint/plugin-kit@0.3.3': + resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@gerrit0/mini-shiki@3.4.0': - resolution: {integrity: sha512-48lKoQegmfJ0iyR/jRz5OrYOSM3WewG9YWCPqUvYFEC54shQO8RsAaspaK/2PRHVVnjekRqfAFvq8pwCpIo5ig==} + '@gerrit0/mini-shiki@3.7.0': + resolution: {integrity: sha512-7iY9wg4FWXmeoFJpUL2u+tsmh0d0jcEJHAIzVxl3TG4KL493JNnisdLAILZ77zcD+z3J0keEXZ+lFzUgzQzPDg==} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -310,12 +317,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@modelcontextprotocol/sdk@1.11.1': - resolution: {integrity: sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==} - engines: {node: '>=18'} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -338,8 +341,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@28.0.3': - resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} + '@rollup/plugin-commonjs@28.0.6': + resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -356,8 +359,8 @@ packages: rollup: optional: true - '@rollup/plugin-typescript@12.1.2': - resolution: {integrity: sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==} + '@rollup/plugin-typescript@12.1.4': + resolution: {integrity: sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.14.0||^3.0.0||^4.0.0 @@ -369,8 +372,8 @@ packages: tslib: optional: true - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -378,135 +381,132 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.40.2': - resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==} + '@rollup/rollup-android-arm-eabi@4.45.1': + resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.40.2': - resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==} + '@rollup/rollup-android-arm64@4.45.1': + resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.40.2': - resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==} + '@rollup/rollup-darwin-arm64@4.45.1': + resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.2': - resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==} + '@rollup/rollup-darwin-x64@4.45.1': + resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.40.2': - resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==} + '@rollup/rollup-freebsd-arm64@4.45.1': + resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.40.2': - resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==} + '@rollup/rollup-freebsd-x64@4.45.1': + resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.40.2': - resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==} + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.40.2': - resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==} + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.2': - resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==} + '@rollup/rollup-linux-arm64-gnu@4.45.1': + resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.2': - resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==} + '@rollup/rollup-linux-arm64-musl@4.45.1': + resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.2': - resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==} + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': - resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==} + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.40.2': - resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==} + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.40.2': - resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==} + '@rollup/rollup-linux-riscv64-musl@4.45.1': + resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.40.2': - resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==} + '@rollup/rollup-linux-s390x-gnu@4.45.1': + resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.40.2': - resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==} + '@rollup/rollup-linux-x64-gnu@4.45.1': + resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.2': - resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==} + '@rollup/rollup-linux-x64-musl@4.45.1': + resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.40.2': - resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==} + '@rollup/rollup-win32-arm64-msvc@4.45.1': + resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.2': - resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==} + '@rollup/rollup-win32-ia32-msvc@4.45.1': + resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.40.2': - resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==} + '@rollup/rollup-win32-x64-msvc@4.45.1': + resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} cpu: [x64] os: [win32] - '@shikijs/engine-oniguruma@3.4.0': - resolution: {integrity: sha512-zwcWlZ4OQuJ/+1t32ClTtyTU1AiDkK1lhtviRWoq/hFqPjCNyLj22bIg9rB7BfoZKOEOfrsGz7No33BPCf+WlQ==} + '@shikijs/engine-oniguruma@3.8.0': + resolution: {integrity: sha512-Tx7kR0oFzqa+rY7t80LjN8ZVtHO3a4+33EUnBVx2qYP3fGxoI9H0bvnln5ySelz9SIUTsS0/Qn+9dg5zcUMsUw==} - '@shikijs/langs@3.4.0': - resolution: {integrity: sha512-bQkR+8LllaM2duU9BBRQU0GqFTx7TuF5kKlw/7uiGKoK140n1xlLAwCgXwSxAjJ7Htk9tXTFwnnsJTCU5nDPXQ==} + '@shikijs/langs@3.8.0': + resolution: {integrity: sha512-mfGYuUgjQ5GgXinB5spjGlBVhG2crKRpKkfADlp8r9k/XvZhtNXxyOToSnCEnF0QNiZnJjlt5MmU9PmhRdwAbg==} - '@shikijs/themes@3.4.0': - resolution: {integrity: sha512-YPP4PKNFcFGLxItpbU0ZW1Osyuk8AyZ24YEFaq04CFsuCbcqydMvMUTi40V2dkc0qs1U2uZFrnU6s5zI6IH+uA==} + '@shikijs/themes@3.8.0': + resolution: {integrity: sha512-yaZiLuyO23sXe16JFU76KyUMTZCJi4EMQKIrdQt7okoTzI4yAaJhVXT2Uy4k8yBIEFRiia5dtD7gC1t8m6y3oQ==} - '@shikijs/types@3.4.0': - resolution: {integrity: sha512-EUT/0lGiE//7j5N/yTMNMT3eCWNcHJLrRKxT0NDXWIfdfSmFJKfPX7nMmRBrQnWboAzIsUziCThrYMMhjbMS1A==} + '@shikijs/types@3.8.0': + resolution: {integrity: sha512-I/b/aNg0rP+kznVDo7s3UK8jMcqEGTtoPDdQ+JlQ2bcJIyu/e2iRvl42GLIDMK03/W1YOHOuhlhQ7aM+XbKUeg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@stylistic/eslint-plugin-js@4.2.0': - resolution: {integrity: sha512-MiJr6wvyzMYl/wElmj8Jns8zH7Q1w8XoVtm+WM6yDaTrfxryMyb8n0CMxt82fo42RoLIfxAEtM6tmQVxqhk0/A==} + '@stylistic/eslint-plugin@5.2.0': + resolution: {integrity: sha512-RCEdbREv9EBiToUBQTlRhVYKG093I6ZnnQ990j08eJ6uRZh71DXkOnoxtTLfDQ6utVCVQzrhZFHZP0zfrfOIjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' - '@stylistic/eslint-plugin-ts@4.2.0': - resolution: {integrity: sha512-j2o2GvOx9v66x8hmp/HJ+0T+nOppiO5ycGsCkifh7JPGgjxEhpkGmIGx3RWsoxpWbad3VCX8e8/T8n3+7ze1Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=9.0.0' + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -514,20 +514,23 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.23': + resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -541,14 +544,14 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.17.46': - resolution: {integrity: sha512-0PQHLhZPWOxGW4auogW0eOQAuNIlCYvibIpG67ja0TOJ6/sehu+1en7sfceUn+QQtx4Rk3GxbLNwPh0Cav7TWw==} + '@types/node@20.19.8': + resolution: {integrity: sha512-HzbgCY53T6bfu4tT7Aq3TvViJyHjLjPNaAS3HOuMc9pw97KHsUtXNX4L+wu59g1WnjsZSko35MbEqnO58rihhw==} '@types/oauth@0.9.6': resolution: {integrity: sha512-H9TRCVKBNOhZZmyHLqFt9drPM9l+ShWiqqJijU1B8P3DX3ub84NjxDuy+Hjrz+fEca5Kwip3qPMKNyiLgNJtIA==} - '@types/qs@6.9.18': - resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -556,118 +559,105 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.5': + resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@1.15.8': + resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} + '@typescript-eslint/eslint-plugin@8.37.0': + resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.37.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} + '@typescript-eslint/parser@8.37.0': + resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.32.0': - resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} + '@typescript-eslint/project-service@8.37.0': + resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.32.0': - resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==} + '@typescript-eslint/scope-manager@8.37.0': + resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.32.0': - resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==} + '@typescript-eslint/tsconfig-utils@8.37.0': + resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} + '@typescript-eslint/type-utils@8.37.0': + resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.32.0': - resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==} + '@typescript-eslint/types@8.37.0': + resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.37.0': + resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} + '@typescript-eslint/utils@8.37.0': + resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.32.0': - resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} + '@typescript-eslint/visitor-keys@8.37.0': + resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/expect@3.1.3': - resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@3.1.3': - resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.3': - resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.1.3': - resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@3.1.3': - resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@3.1.3': - resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@3.1.3': - resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} acorn-jsx@5.3.2: @@ -675,8 +665,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -690,6 +680,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -697,12 +690,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - atlassian-jwt@2.0.3: - resolution: {integrity: sha512-G9oO3HHS1UKgsLRXj6nNKv2TY6g3PleBCdzHwbFeVKg+18GBFIMRz+ApxuOuWAgcL7RngNFF5rGNtw1Ss3hvTg==} - engines: {node: '>= 0.4.0'} - - axios@1.9.0: - resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -710,15 +699,15 @@ packages: binary-searching@2.0.5: resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -744,9 +733,9 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@5.2.1: + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -780,32 +769,35 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -813,8 +805,8 @@ packages: supports-color: optional: true - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} @@ -839,11 +831,15 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@17.2.0: + resolution: {integrity: sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -853,6 +849,10 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -880,8 +880,8 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + esbuild@0.25.6: + resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} engines: {node: '>=18'} hasBin: true @@ -892,20 +892,20 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.26.0: - resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} + eslint@9.31.0: + resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -914,8 +914,8 @@ packages: jiti: optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.6.0: @@ -944,27 +944,13 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - eventsource-parser@3.0.1: - resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} - express-rate-limit@7.5.0: - resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} - engines: {node: '>= 16'} - peerDependencies: - express: ^4.11 || 5 || ^5.0.0-beta.1 - - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -982,8 +968,8 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -998,8 +984,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} find-up@5.0.0: @@ -1022,17 +1008,17 @@ packages: debug: optional: true - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.3: + resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} engines: {node: '>= 6'} forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} @@ -1062,8 +1048,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@16.1.0: - resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} engines: {node: '>=18'} gopd@1.2.0: @@ -1093,16 +1079,16 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} import-fresh@3.3.1: @@ -1139,9 +1125,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -1152,6 +1135,9 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1188,8 +1174,8 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -1214,18 +1200,21 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -1297,17 +1286,14 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1316,6 +1302,9 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1327,17 +1316,13 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} oauth@0.10.2: resolution: {integrity: sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -1346,9 +1331,6 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1380,15 +1362,14 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} picocolors@1.1.1: @@ -1402,26 +1383,26 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-jsdoc@1.3.2: - resolution: {integrity: sha512-LNi9eq0TjyZn/PUNf/SYQxxUvGg5FLK4alEbi3i/S+2JbMyTu790c/puFueXzx09KP44oWCJ+TaHRyM/a0rKJQ==} + prettier-plugin-jsdoc@1.3.3: + resolution: {integrity: sha512-YIxejcbPYK4N58jHGiXjYvrCzBMyvV2AEMSoF5LvqqeMEI0nsmww57I6NGnpVc0AU9ncFCTEBoYHN/xuBf80YA==} engines: {node: '>=14.13.1 || >=16.0.0'} peerDependencies: prettier: ^3.0.0 - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true @@ -1440,8 +1421,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -1451,8 +1432,8 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} resolve-from@4.0.0: @@ -1468,27 +1449,23 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup-plugin-esnext-to-nodenext@1.0.0: - resolution: {integrity: sha512-3rPZyEspYJMR78W6UB61GQrsO1yYz8P52pZwEJh48Ub4UuQ2bnLYPsOBAUnPDmu7A/AiA3sJmc+d/gWb0LoHoQ==} + rollup-plugin-esnext-to-nodenext@1.0.1: + resolution: {integrity: sha512-ZIIIIh1znP3nmM6fGOmKk4Em2SMfM6uZWFq7DQsBqXzescw15jDygrKF2POQgSZ8c0tygXebp/KRbmEPqR2UAA==} engines: {node: '>=20'} peerDependencies: rollup: ^4 - rollup-plugin-node-externals@8.0.0: - resolution: {integrity: sha512-2HIOpWsWn5DqBoYl6iCAmB4kd5GoGbF68PR4xKR1YBPvywiqjtYvDEjHFodyqRL51iAMDITP074Zxs0OKs6F+g==} + rollup-plugin-node-externals@8.0.1: + resolution: {integrity: sha512-j6uve/BPEyHCmQuXpu5/LT5qXw69QLIi6YnFrs6F7tmGFXjkFDT0zqZMt0KaMuWSvkcxJFBklsKfYYoKKEPwyw==} engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'} peerDependencies: rollup: ^4.0.0 - rollup@4.40.2: - resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==} + rollup@4.45.1: + resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -1498,18 +1475,18 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -1559,6 +1536,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1573,20 +1553,20 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: @@ -1597,8 +1577,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - ts-add-js-extension@1.6.5: - resolution: {integrity: sha512-ijPXEuexDZorzkqBRGwYSS9tyqJYhhCvK92qIRussMnQD7FC4b38aL58XDI5OhLMQUR5fAyA9FCQmV+RCRfukA==} + ts-add-js-extension@1.6.6: + resolution: {integrity: sha512-rPOBNrOULi/CjVHraGrDa0vuWDmuMszmIXGNaGe2UGfrBH0/bZWTTsh82uQ+INKp9cJYziKNTCG2knzBlWvW4A==} hasBin: true ts-api-utils@2.1.0: @@ -1614,19 +1594,19 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typedoc@0.28.4: - resolution: {integrity: sha512-xKvKpIywE1rnqqLgjkoq0F3wOqYaKO9nV6YkkSat6IxOWacUCc/7Es0hR3OPmkIqkPoEn7U3x+sYdG72rstZQA==} + typedoc@0.28.7: + resolution: {integrity: sha512-lpz0Oxl6aidFkmS90VQDQjk/Qf2iw0IUvFqirdONBdj7jPSN9mGXhy66BcGNDxx5ZMyKKiBVAREvPEzT6Uxipw==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x - typescript-eslint@8.32.1: - resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} + typescript-eslint@8.37.0: + resolution: {integrity: sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1640,8 +1620,8 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -1653,28 +1633,32 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite-node@3.1.3: - resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.0.4: + resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -1702,16 +1686,16 @@ packages: yaml: optional: true - vitest@3.1.3: - resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.3 - '@vitest/ui': 3.1.3 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -1744,129 +1728,132 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yaml@2.7.1: - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} - engines: {node: '>= 14'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} hasBin: true yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} - peerDependencies: - zod: ^3.24.1 - - zod@3.24.4: - resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} snapshots: - '@esbuild/aix-ppc64@0.25.4': + '@atlassian/atlassian-jwt@2.2.0': + dependencies: + express: 4.21.2 + jsuri: 1.3.1 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + + '@esbuild/aix-ppc64@0.25.6': optional: true - '@esbuild/android-arm64@0.25.4': + '@esbuild/android-arm64@0.25.6': optional: true - '@esbuild/android-arm@0.25.4': + '@esbuild/android-arm@0.25.6': optional: true - '@esbuild/android-x64@0.25.4': + '@esbuild/android-x64@0.25.6': optional: true - '@esbuild/darwin-arm64@0.25.4': + '@esbuild/darwin-arm64@0.25.6': optional: true - '@esbuild/darwin-x64@0.25.4': + '@esbuild/darwin-x64@0.25.6': optional: true - '@esbuild/freebsd-arm64@0.25.4': + '@esbuild/freebsd-arm64@0.25.6': optional: true - '@esbuild/freebsd-x64@0.25.4': + '@esbuild/freebsd-x64@0.25.6': optional: true - '@esbuild/linux-arm64@0.25.4': + '@esbuild/linux-arm64@0.25.6': optional: true - '@esbuild/linux-arm@0.25.4': + '@esbuild/linux-arm@0.25.6': optional: true - '@esbuild/linux-ia32@0.25.4': + '@esbuild/linux-ia32@0.25.6': optional: true - '@esbuild/linux-loong64@0.25.4': + '@esbuild/linux-loong64@0.25.6': optional: true - '@esbuild/linux-mips64el@0.25.4': + '@esbuild/linux-mips64el@0.25.6': optional: true - '@esbuild/linux-ppc64@0.25.4': + '@esbuild/linux-ppc64@0.25.6': optional: true - '@esbuild/linux-riscv64@0.25.4': + '@esbuild/linux-riscv64@0.25.6': optional: true - '@esbuild/linux-s390x@0.25.4': + '@esbuild/linux-s390x@0.25.6': optional: true - '@esbuild/linux-x64@0.25.4': + '@esbuild/linux-x64@0.25.6': optional: true - '@esbuild/netbsd-arm64@0.25.4': + '@esbuild/netbsd-arm64@0.25.6': optional: true - '@esbuild/netbsd-x64@0.25.4': + '@esbuild/netbsd-x64@0.25.6': optional: true - '@esbuild/openbsd-arm64@0.25.4': + '@esbuild/openbsd-arm64@0.25.6': optional: true - '@esbuild/openbsd-x64@0.25.4': + '@esbuild/openbsd-x64@0.25.6': optional: true - '@esbuild/sunos-x64@0.25.4': + '@esbuild/openharmony-arm64@0.25.6': optional: true - '@esbuild/win32-arm64@0.25.4': + '@esbuild/sunos-x64@0.25.6': optional: true - '@esbuild/win32-ia32@0.25.4': + '@esbuild/win32-arm64@0.25.6': optional: true - '@esbuild/win32-x64@0.25.4': + '@esbuild/win32-ia32@0.25.6': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.4.2))': + '@esbuild/win32-x64@0.25.6': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': dependencies: - eslint: 9.26.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.2': {} + '@eslint/config-helpers@0.3.0': {} - '@eslint/core@0.13.0': + '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 + debug: 4.4.1 + espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 @@ -1876,21 +1863,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.26.0': {} + '@eslint/js@9.31.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.8': + '@eslint/plugin-kit@0.3.3': dependencies: - '@eslint/core': 0.13.0 + '@eslint/core': 0.15.1 levn: 0.4.1 - '@gerrit0/mini-shiki@3.4.0': + '@gerrit0/mini-shiki@3.7.0': dependencies: - '@shikijs/engine-oniguruma': 3.4.0 - '@shikijs/langs': 3.4.0 - '@shikijs/themes': 3.4.0 - '@shikijs/types': 3.4.0 + '@shikijs/engine-oniguruma': 3.8.0 + '@shikijs/langs': 3.8.0 + '@shikijs/themes': 3.8.0 + '@shikijs/types': 3.8.0 '@shikijs/vscode-textmate': 10.0.2 '@humanfs/core@0.19.1': {} @@ -1906,22 +1893,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@modelcontextprotocol/sdk@1.11.1': - dependencies: - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - express: 5.1.0 - express-rate-limit: 7.5.0(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.24.4 - zod-to-json-schema: 3.24.5(zod@3.24.4) - transitivePeerDependencies: - - supports-color + '@jridgewell/sourcemap-codec@1.5.4': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -1935,179 +1907,179 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@rollup/plugin-alias@5.1.1(rollup@4.40.2)': + '@rollup/plugin-alias@5.1.1(rollup@4.45.1)': optionalDependencies: - rollup: 4.40.2 + rollup: 4.45.1 - '@rollup/plugin-commonjs@28.0.3(rollup@4.40.2)': + '@rollup/plugin-commonjs@28.0.6(rollup@4.45.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.2) + '@rollup/pluginutils': 5.2.0(rollup@4.45.1) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.40.2 + rollup: 4.45.1 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.40.2)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.45.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.2) + '@rollup/pluginutils': 5.2.0(rollup@4.45.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.40.2 + rollup: 4.45.1 - '@rollup/plugin-typescript@12.1.2(rollup@4.40.2)(tslib@2.8.1)(typescript@5.8.3)': + '@rollup/plugin-typescript@12.1.4(rollup@4.45.1)(tslib@2.8.1)(typescript@5.8.3)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.2) + '@rollup/pluginutils': 5.2.0(rollup@4.45.1) resolve: 1.22.10 typescript: 5.8.3 optionalDependencies: - rollup: 4.40.2 + rollup: 4.45.1 tslib: 2.8.1 - '@rollup/pluginutils@5.1.4(rollup@4.40.2)': + '@rollup/pluginutils@5.2.0(rollup@4.45.1)': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.40.2 + rollup: 4.45.1 - '@rollup/rollup-android-arm-eabi@4.40.2': + '@rollup/rollup-android-arm-eabi@4.45.1': optional: true - '@rollup/rollup-android-arm64@4.40.2': + '@rollup/rollup-android-arm64@4.45.1': optional: true - '@rollup/rollup-darwin-arm64@4.40.2': + '@rollup/rollup-darwin-arm64@4.45.1': optional: true - '@rollup/rollup-darwin-x64@4.40.2': + '@rollup/rollup-darwin-x64@4.45.1': optional: true - '@rollup/rollup-freebsd-arm64@4.40.2': + '@rollup/rollup-freebsd-arm64@4.45.1': optional: true - '@rollup/rollup-freebsd-x64@4.40.2': + '@rollup/rollup-freebsd-x64@4.45.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.2': + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.2': + '@rollup/rollup-linux-arm-musleabihf@4.45.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.2': + '@rollup/rollup-linux-arm64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.2': + '@rollup/rollup-linux-arm64-musl@4.45.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.2': + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.2': + '@rollup/rollup-linux-riscv64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.2': + '@rollup/rollup-linux-riscv64-musl@4.45.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.2': + '@rollup/rollup-linux-s390x-gnu@4.45.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.2': + '@rollup/rollup-linux-x64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-x64-musl@4.40.2': + '@rollup/rollup-linux-x64-musl@4.45.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.2': + '@rollup/rollup-win32-arm64-msvc@4.45.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.2': + '@rollup/rollup-win32-ia32-msvc@4.45.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.2': + '@rollup/rollup-win32-x64-msvc@4.45.1': optional: true - '@shikijs/engine-oniguruma@3.4.0': + '@shikijs/engine-oniguruma@3.8.0': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.8.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.4.0': + '@shikijs/langs@3.8.0': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.8.0 - '@shikijs/themes@3.4.0': + '@shikijs/themes@3.8.0': dependencies: - '@shikijs/types': 3.4.0 + '@shikijs/types': 3.8.0 - '@shikijs/types@3.4.0': + '@shikijs/types@3.8.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 '@shikijs/vscode-textmate@10.0.2': {} - '@stylistic/eslint-plugin-js@4.2.0(eslint@9.26.0(jiti@2.4.2))': + '@stylistic/eslint-plugin@5.2.0(eslint@9.31.0(jiti@2.4.2))': dependencies: - eslint: 9.26.0(jiti@2.4.2) - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@typescript-eslint/types': 8.37.0 + eslint: 9.31.0(jiti@2.4.2) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.3 - '@stylistic/eslint-plugin-ts@4.2.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@types/body-parser@1.19.6': dependencies: - '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - transitivePeerDependencies: - - supports-color - - typescript + '@types/connect': 3.4.38 + '@types/node': 20.19.8 - '@types/body-parser@1.19.5': + '@types/chai@5.2.2': dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.17.46 + '@types/deep-eql': 4.0.2 '@types/connect@3.4.38': dependencies: - '@types/node': 20.17.46 + '@types/node': 20.19.8 '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 - '@types/estree@1.0.7': {} + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 20.17.46 - '@types/qs': 6.9.18 + '@types/node': 20.19.8 + '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 + '@types/send': 0.17.5 - '@types/express@4.17.21': + '@types/express@4.17.23': dependencies: - '@types/body-parser': 1.19.5 + '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.18 - '@types/serve-static': 1.15.7 + '@types/qs': 6.14.0 + '@types/serve-static': 1.15.8 '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/http-errors@2.0.4': {} + '@types/http-errors@2.0.5': {} '@types/json-schema@7.0.15': {} @@ -2119,197 +2091,178 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@20.17.46': + '@types/node@20.19.8': dependencies: - undici-types: 6.19.8 + undici-types: 6.21.0 '@types/oauth@0.9.6': dependencies: - '@types/node': 20.17.46 + '@types/node': 20.19.8 - '@types/qs@6.9.18': {} + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} '@types/resolve@1.20.2': {} - '@types/send@0.17.4': + '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.17.46 + '@types/node': 20.19.8 - '@types/serve-static@1.15.7': + '@types/serve-static@1.15.8': dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.17.46 - '@types/send': 0.17.4 + '@types/http-errors': 2.0.5 + '@types/node': 20.19.8 + '@types/send': 0.17.5 '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.37.0 + eslint: 9.31.0(jiti@2.4.2) graphemer: 1.4.0 - ignore: 7.0.4 + ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.37.0 + debug: 4.4.1 + eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.32.0': - dependencies: - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/visitor-keys': 8.32.0 - - '@typescript-eslint/scope-manager@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - - '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.26.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 + debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.32.0': {} + '@typescript-eslint/scope-manager@8.37.0': + dependencies: + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/visitor-keys': 8.37.0 - '@typescript-eslint/types@8.32.1': {} + '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 - '@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/visitor-keys': 8.32.0 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.31.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + '@typescript-eslint/types@8.37.0': {} + + '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.0 + '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/visitor-keys': 8.37.0 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.0 - '@typescript-eslint/types': 8.32.0 - '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.37.0 + '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.32.0': - dependencies: - '@typescript-eslint/types': 8.32.0 - eslint-visitor-keys: 4.2.0 - - '@typescript-eslint/visitor-keys@8.32.1': + '@typescript-eslint/visitor-keys@8.37.0': dependencies: - '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 + '@typescript-eslint/types': 8.37.0 + eslint-visitor-keys: 4.2.1 - '@vitest/expect@3.1.3': + '@vitest/expect@3.2.4': dependencies: - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 - chai: 5.2.0 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1))': + '@vitest/mocker@3.2.4(vite@7.0.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0))': dependencies: - '@vitest/spy': 3.1.3 + '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1) + vite: 7.0.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0) - '@vitest/pretty-format@3.1.3': + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.3': + '@vitest/runner@3.2.4': dependencies: - '@vitest/utils': 3.1.3 + '@vitest/utils': 3.2.4 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.1.3': + '@vitest/snapshot@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.3 + '@vitest/pretty-format': 3.2.4 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.3': + '@vitest/spy@3.2.4': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@3.1.3': + '@vitest/utils@3.2.4': dependencies: - '@vitest/pretty-format': 3.1.3 - loupe: 3.1.3 + '@vitest/pretty-format': 3.2.4 + loupe: 3.1.4 tinyrainbow: 2.0.0 - accepts@2.0.0: + accepts@1.3.8: dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 + mime-types: 2.1.35 + negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.1 + acorn: 8.15.0 - acorn@8.14.1: {} + acorn@8.15.0: {} ajv@6.12.6: dependencies: @@ -2324,19 +2277,16 @@ snapshots: argparse@2.0.1: {} + array-flatten@1.1.1: {} + assertion-error@2.0.1: {} asynckit@0.4.0: {} - atlassian-jwt@2.0.3: - dependencies: - jsuri: 1.3.1 - lodash: 4.17.21 - - axios@1.9.0: + axios@1.10.0: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.2 + form-data: 4.0.3 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -2345,26 +2295,29 @@ snapshots: binary-searching@2.0.5: {} - body-parser@2.2.0: + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.0 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 http-errors: 2.0.0 - iconv-lite: 0.6.3 + iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.0 - type-is: 2.0.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 transitivePeerDependencies: - supports-color - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -2388,13 +2341,13 @@ snapshots: callsites@3.1.0: {} - chai@5.2.0: + chai@5.2.1: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 + loupe: 3.1.4 + pathval: 2.0.1 chalk@4.1.2: dependencies: @@ -2421,20 +2374,15 @@ snapshots: concat-map@0.0.1: {} - content-disposition@1.0.0: + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 content-type@1.0.5: {} - cookie-signature@1.2.2: {} + cookie-signature@1.0.6: {} - cookie@0.7.2: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 + cookie@0.7.1: {} cross-spawn@7.0.6: dependencies: @@ -2442,11 +2390,15 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debug@4.4.0: + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.1: dependencies: ms: 2.1.3 - decode-named-character-reference@1.1.0: + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -2462,11 +2414,13 @@ snapshots: dequal@2.0.3: {} + destroy@1.2.0: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 - dotenv@16.5.0: {} + dotenv@17.2.0: {} dunder-proto@1.0.1: dependencies: @@ -2476,6 +2430,8 @@ snapshots: ee-first@1.1.1: {} + encodeurl@1.0.2: {} + encodeurl@2.0.0: {} entities@4.5.0: {} @@ -2497,71 +2453,71 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild@0.25.4: + esbuild@0.25.6: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 + '@esbuild/aix-ppc64': 0.25.6 + '@esbuild/android-arm': 0.25.6 + '@esbuild/android-arm64': 0.25.6 + '@esbuild/android-x64': 0.25.6 + '@esbuild/darwin-arm64': 0.25.6 + '@esbuild/darwin-x64': 0.25.6 + '@esbuild/freebsd-arm64': 0.25.6 + '@esbuild/freebsd-x64': 0.25.6 + '@esbuild/linux-arm': 0.25.6 + '@esbuild/linux-arm64': 0.25.6 + '@esbuild/linux-ia32': 0.25.6 + '@esbuild/linux-loong64': 0.25.6 + '@esbuild/linux-mips64el': 0.25.6 + '@esbuild/linux-ppc64': 0.25.6 + '@esbuild/linux-riscv64': 0.25.6 + '@esbuild/linux-s390x': 0.25.6 + '@esbuild/linux-x64': 0.25.6 + '@esbuild/netbsd-arm64': 0.25.6 + '@esbuild/netbsd-x64': 0.25.6 + '@esbuild/openbsd-arm64': 0.25.6 + '@esbuild/openbsd-x64': 0.25.6 + '@esbuild/openharmony-arm64': 0.25.6 + '@esbuild/sunos-x64': 0.25.6 + '@esbuild/win32-arm64': 0.25.6 + '@esbuild/win32-ia32': 0.25.6 + '@esbuild/win32-x64': 0.25.6 escape-html@1.0.3: {} escape-string-regexp@4.0.0: {} - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@9.26.0(jiti@2.4.2): + eslint@9.31.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.13.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.26.0 - '@eslint/plugin-kit': 0.2.8 + '@eslint/js': 9.31.0 + '@eslint/plugin-kit': 0.3.3 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@modelcontextprotocol/sdk': 1.11.1 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -2576,17 +2532,16 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - zod: 3.24.4 optionalDependencies: jiti: 2.4.2 transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esquery@1.6.0: dependencies: @@ -2602,52 +2557,46 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} etag@1.8.1: {} - eventsource-parser@3.0.1: {} + expect-type@1.2.2: {} - eventsource@3.0.7: + express@4.21.2: dependencies: - eventsource-parser: 3.0.1 - - expect-type@1.2.1: {} - - express-rate-limit@7.5.0(express@5.1.0): - dependencies: - express: 5.1.0 - - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.0 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 + finalhandler: 1.3.1 + fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 on-finished: 2.4.1 - once: 1.4.0 parseurl: 1.3.3 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.14.0 + qs: 6.13.0 range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 statuses: 2.0.1 - type-is: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: - supports-color @@ -2670,7 +2619,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -2682,14 +2631,15 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@2.1.0: + finalhandler@1.3.1: dependencies: - debug: 4.4.0 + debug: 2.6.9 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 statuses: 2.0.1 + unpipe: 1.0.0 transitivePeerDependencies: - supports-color @@ -2707,16 +2657,17 @@ snapshots: follow-redirects@1.15.9: {} - form-data@4.0.2: + form-data@4.0.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 forwarded@0.2.0: {} - fresh@2.0.0: {} + fresh@0.5.2: {} fsevents@2.3.3: optional: true @@ -2751,7 +2702,7 @@ snapshots: globals@14.0.0: {} - globals@16.1.0: {} + globals@16.3.0: {} gopd@1.2.0: {} @@ -2777,13 +2728,13 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - iconv-lite@0.6.3: + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 ignore@5.3.2: {} - ignore@7.0.4: {} + ignore@7.0.5: {} import-fresh@3.3.1: dependencies: @@ -2810,16 +2761,16 @@ snapshots: is-number@7.0.0: {} - is-promise@4.0.0: {} - is-reference@1.2.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 isexe@2.0.0: {} jiti@2.4.2: {} + js-tokens@9.0.1: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -2853,13 +2804,13 @@ snapshots: lodash@4.17.21: {} - loupe@3.1.3: {} + loupe@3.1.4: {} lunr@2.3.9: {} magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 markdown-it@14.1.0: dependencies: @@ -2876,7 +2827,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -2895,15 +2846,17 @@ snapshots: mdurl@2.0.0: {} - media-typer@1.1.0: {} + media-typer@0.3.0: {} - merge-descriptors@2.0.0: {} + merge-descriptors@1.0.3: {} merge2@1.4.1: {} + methods@1.1.2: {} + micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -2978,7 +2931,7 @@ snapshots: micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -3015,8 +2968,8 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 - decode-named-character-reference: 1.1.0 + debug: 4.4.1 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -3041,23 +2994,21 @@ snapshots: mime-db@1.52.0: {} - mime-db@1.54.0: {} - mime-types@2.1.35: dependencies: mime-db: 1.52.0 - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 + mime@1.6.0: {} minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 + + ms@2.0.0: {} ms@2.1.3: {} @@ -3065,22 +3016,16 @@ snapshots: natural-compare@1.4.0: {} - negotiator@1.0.0: {} + negotiator@0.6.3: {} oauth@0.10.2: {} - object-assign@4.1.1: {} - object-inspect@1.13.4: {} on-finished@2.4.1: dependencies: ee-first: 1.1.1 - once@1.4.0: - dependencies: - wrappy: 1.0.2 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -3110,11 +3055,11 @@ snapshots: path-parse@1.0.7: {} - path-to-regexp@8.2.0: {} + path-to-regexp@0.1.12: {} pathe@2.0.3: {} - pathval@2.0.0: {} + pathval@2.0.1: {} picocolors@1.1.1: {} @@ -3122,9 +3067,9 @@ snapshots: picomatch@4.0.2: {} - pkce-challenge@5.0.0: {} + picomatch@4.0.3: {} - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -3132,16 +3077,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-jsdoc@1.3.2(prettier@3.5.3): + prettier-plugin-jsdoc@1.3.3(prettier@3.6.2): dependencies: binary-searching: 2.0.5 comment-parser: 1.4.1 mdast-util-from-markdown: 2.0.2 - prettier: 3.5.3 + prettier: 3.6.2 transitivePeerDependencies: - supports-color - prettier@3.5.3: {} + prettier@3.6.2: {} proxy-addr@2.0.7: dependencies: @@ -3154,7 +3099,7 @@ snapshots: punycode@2.3.1: {} - qs@6.14.0: + qs@6.13.0: dependencies: side-channel: 1.1.0 @@ -3162,11 +3107,11 @@ snapshots: range-parser@1.2.1: {} - raw-body@3.0.0: + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 - iconv-lite: 0.6.3 + iconv-lite: 0.4.24 unpipe: 1.0.0 resolve-from@4.0.0: {} @@ -3179,51 +3124,41 @@ snapshots: reusify@1.1.0: {} - rollup-plugin-esnext-to-nodenext@1.0.0(rollup@4.40.2): + rollup-plugin-esnext-to-nodenext@1.0.1(rollup@4.45.1): dependencies: - rollup: 4.40.2 - ts-add-js-extension: 1.6.5 + rollup: 4.45.1 + ts-add-js-extension: 1.6.6 - rollup-plugin-node-externals@8.0.0(rollup@4.40.2): + rollup-plugin-node-externals@8.0.1(rollup@4.45.1): dependencies: - rollup: 4.40.2 + rollup: 4.45.1 - rollup@4.40.2: + rollup@4.45.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.2 - '@rollup/rollup-android-arm64': 4.40.2 - '@rollup/rollup-darwin-arm64': 4.40.2 - '@rollup/rollup-darwin-x64': 4.40.2 - '@rollup/rollup-freebsd-arm64': 4.40.2 - '@rollup/rollup-freebsd-x64': 4.40.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 - '@rollup/rollup-linux-arm-musleabihf': 4.40.2 - '@rollup/rollup-linux-arm64-gnu': 4.40.2 - '@rollup/rollup-linux-arm64-musl': 4.40.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 - '@rollup/rollup-linux-riscv64-gnu': 4.40.2 - '@rollup/rollup-linux-riscv64-musl': 4.40.2 - '@rollup/rollup-linux-s390x-gnu': 4.40.2 - '@rollup/rollup-linux-x64-gnu': 4.40.2 - '@rollup/rollup-linux-x64-musl': 4.40.2 - '@rollup/rollup-win32-arm64-msvc': 4.40.2 - '@rollup/rollup-win32-ia32-msvc': 4.40.2 - '@rollup/rollup-win32-x64-msvc': 4.40.2 + '@rollup/rollup-android-arm-eabi': 4.45.1 + '@rollup/rollup-android-arm64': 4.45.1 + '@rollup/rollup-darwin-arm64': 4.45.1 + '@rollup/rollup-darwin-x64': 4.45.1 + '@rollup/rollup-freebsd-arm64': 4.45.1 + '@rollup/rollup-freebsd-x64': 4.45.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 + '@rollup/rollup-linux-arm-musleabihf': 4.45.1 + '@rollup/rollup-linux-arm64-gnu': 4.45.1 + '@rollup/rollup-linux-arm64-musl': 4.45.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-musl': 4.45.1 + '@rollup/rollup-linux-s390x-gnu': 4.45.1 + '@rollup/rollup-linux-x64-gnu': 4.45.1 + '@rollup/rollup-linux-x64-musl': 4.45.1 + '@rollup/rollup-win32-arm64-msvc': 4.45.1 + '@rollup/rollup-win32-ia32-msvc': 4.45.1 + '@rollup/rollup-win32-x64-msvc': 4.45.1 fsevents: 2.3.3 - router@2.2.0: - dependencies: - debug: 4.4.0 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.2.0 - transitivePeerDependencies: - - supports-color - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -3232,17 +3167,19 @@ snapshots: safer-buffer@2.1.2: {} - semver@7.7.1: {} + semver@7.7.2: {} - send@1.2.0: + send@0.19.0: dependencies: - debug: 4.4.0 - encodeurl: 2.0.0 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 - fresh: 2.0.0 + fresh: 0.5.2 http-errors: 2.0.0 - mime-types: 3.0.1 + mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 @@ -3250,12 +3187,12 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@2.2.0: + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.0 + send: 0.19.0 transitivePeerDependencies: - supports-color @@ -3307,6 +3244,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -3317,16 +3258,16 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.13: + tinyglobby@0.2.14: dependencies: - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.0.2: {} + tinypool@1.1.1: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} to-regex-range@5.0.1: dependencies: @@ -3334,7 +3275,7 @@ snapshots: toidentifier@1.0.1: {} - ts-add-js-extension@1.6.5: + ts-add-js-extension@1.6.6: dependencies: typescript: 5.8.3 @@ -3348,27 +3289,27 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-is@2.0.1: + type-is@1.6.18: dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 + media-typer: 0.3.0 + mime-types: 2.1.35 - typedoc@0.28.4(typescript@5.8.3): + typedoc@0.28.7(typescript@5.8.3): dependencies: - '@gerrit0/mini-shiki': 3.4.0 + '@gerrit0/mini-shiki': 3.7.0 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 typescript: 5.8.3 - yaml: 2.7.1 + yaml: 2.8.0 - typescript-eslint@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.26.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -3377,7 +3318,7 @@ snapshots: uc.micro@2.1.0: {} - undici-types@6.19.8: {} + undici-types@6.21.0: {} unist-util-stringify-position@4.0.0: dependencies: @@ -3389,15 +3330,17 @@ snapshots: dependencies: punycode: 2.3.1 + utils-merge@1.0.1: {} + vary@1.1.2: {} - vite-node@3.1.3(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1): + vite-node@3.2.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1) + vite: 7.0.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -3412,46 +3355,48 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1): + vite@7.0.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0): dependencies: - esbuild: 0.25.4 - fdir: 6.4.4(picomatch@4.0.2) + esbuild: 0.25.6 + fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.40.2 - tinyglobby: 0.2.13 + postcss: 8.5.6 + rollup: 4.45.1 + tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 20.17.46 + '@types/node': 20.19.8 fsevents: 2.3.3 jiti: 2.4.2 - yaml: 2.7.1 - - vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1): - dependencies: - '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1)) - '@vitest/pretty-format': 3.1.3 - '@vitest/runner': 3.1.3 - '@vitest/snapshot': 3.1.3 - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 - chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.2.1 + yaml: 2.8.0 + + vitest@3.2.4(@types/debug@4.1.12)(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.0.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 + debug: 4.4.1 + expect-type: 1.2.2 magic-string: 0.30.17 pathe: 2.0.3 + picomatch: 4.0.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1) - vite-node: 3.1.3(@types/node@20.17.46)(jiti@2.4.2)(yaml@2.7.1) + vite: 7.0.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0) + vite-node: 3.2.4(@types/node@20.19.8)(jiti@2.4.2)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 20.17.46 + '@types/node': 20.19.8 transitivePeerDependencies: - jiti - less @@ -3477,14 +3422,8 @@ snapshots: word-wrap@1.2.5: {} - wrappy@1.0.2: {} - - yaml@2.7.1: {} + yaml@2.8.0: {} yocto-queue@0.1.0: {} - zod-to-json-schema@3.24.5(zod@3.24.4): - dependencies: - zod: 3.24.4 - - zod@3.24.4: {} + zod@3.25.76: {} diff --git a/src/api/analytics.ts b/src/api/analytics.ts index 2efe31d6..4a279487 100644 --- a/src/api/analytics.ts +++ b/src/api/analytics.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Analytics { diff --git a/src/api/audit.ts b/src/api/audit.ts index bd14bc45..7d20efd9 100644 --- a/src/api/audit.ts +++ b/src/api/audit.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Audit { @@ -155,7 +155,7 @@ export class Audit { } /** - * Sets the retention period for records in the audit log. The retention period can be set to a maximum of 20 years. + * Sets the retention period for records in the audit log. The retention period can be set to a maximum of 1 year. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Confluence Administrator' global * permission. @@ -165,7 +165,7 @@ export class Audit { callback: Callback, ): Promise; /** - * Sets the retention period for records in the audit log. The retention period can be set to a maximum of 20 years. + * Sets the retention period for records in the audit log. The retention period can be set to a maximum of 1 year. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Confluence Administrator' global * permission. diff --git a/src/api/content.ts b/src/api/content.ts index 0c37eaac..86fb8106 100644 --- a/src/api/content.ts +++ b/src/api/content.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Content { @@ -14,6 +14,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Only content that the user has permission to view will be returned. + * + * @deprecated Will be removed in next major version. */ async getContent( parameters: Parameters.GetContent | undefined, @@ -26,6 +28,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Only content that the user has permission to view will be returned. + * + * @deprecated Will be removed in next major version. */ async getContent(parameters?: Parameters.GetContent, callback?: never): Promise; async getContent( @@ -63,6 +67,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Add' permission for the space that the * content will be created in, and permission to view the draft if publishing a draft. + * + * @deprecated Will be removed in next major version. */ async createContent( parameters: Parameters.CreateContent | undefined, @@ -79,6 +85,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Add' permission for the space that the * content will be created in, and permission to view the draft if publishing a draft. + * + * @deprecated Will be removed in next major version. */ async createContent(parameters?: Parameters.CreateContent, callback?: never): Promise; async createContent( @@ -223,12 +231,7 @@ export class Content { }, data: { ...parameters, - version: parameters.version, - title: parameters.title, - type: parameters.type, status: parameters.bodyStatus, - space: parameters.space, - ancestors: parameters.ancestors, }, }; @@ -241,12 +244,13 @@ export class Content { * * When additional results are available, returns `next` and `prev` URLs to retrieve them in subsequent calls. The * URLs each contain a cursor that points to the appropriate set of results. Use `limit` to specify the number of - * results returned in each call. Example subsequent call (taken from example response): - * - * https://your-domain.atlassian.net/wiki/rest/api/content/search?cql=type=page&limit=25&cursor=raNDoMsTRiNg + * results returned in each call. * * The response to this will have a `prev` URL similar to the `next` in the example response. * + * If the expand query parameter is used with the `body.export_view` and/or `body.styled_view` properties, then the + * query limit parameter will be restricted to a maximum value of 25. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Only content that the user has permission to view will be returned. */ @@ -260,12 +264,13 @@ export class Content { * * When additional results are available, returns `next` and `prev` URLs to retrieve them in subsequent calls. The * URLs each contain a cursor that points to the appropriate set of results. Use `limit` to specify the number of - * results returned in each call. Example subsequent call (taken from example response): - * - * https://your-domain.atlassian.net/wiki/rest/api/content/search?cql=type=page&limit=25&cursor=raNDoMsTRiNg + * results returned in each call. * * The response to this will have a `prev` URL similar to the `next` in the example response. * + * If the expand query parameter is used with the `body.export_view` and/or `body.styled_view` properties, then the + * query limit parameter will be restricted to a maximum value of 25. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Only content that the user has permission to view will be returned. */ @@ -299,6 +304,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getContentById(parameters: Parameters.GetContentById, callback: Callback): Promise; /** @@ -308,6 +315,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getContentById(parameters: Parameters.GetContentById, callback?: never): Promise; async getContentById( @@ -336,6 +345,8 @@ export class Content { * Note, updating draft content is currently not supported. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async updateContent(parameters: Parameters.UpdateContent, callback: Callback): Promise; /** @@ -345,6 +356,8 @@ export class Content { * Note, updating draft content is currently not supported. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async updateContent(parameters: Parameters.UpdateContent, callback?: never): Promise; async updateContent( @@ -383,6 +396,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Delete' permission for the space that the * content is in. + * + * @deprecated Will be removed in next major version. */ async deleteContent(parameters: Parameters.DeleteContent, callback: Callback): Promise; /** @@ -397,6 +412,8 @@ export class Content { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Delete' permission for the space that the * content is in. + * + * @deprecated Will be removed in next major version. */ async deleteContent(parameters: Parameters.DeleteContent, callback?: never): Promise; async deleteContent(parameters: Parameters.DeleteContent, callback?: Callback): Promise { @@ -415,6 +432,8 @@ export class Content { * Returns the most recent update for a piece of content. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. + * + * @deprecated Will be removed in next major version. */ async getHistoryForContent( parameters: Parameters.GetHistoryForContent, @@ -424,6 +443,8 @@ export class Content { * Returns the most recent update for a piece of content. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. + * + * @deprecated Will be removed in next major version. */ async getHistoryForContent( parameters: Parameters.GetHistoryForContent, diff --git a/src/api/contentAttachments.ts b/src/api/contentAttachments.ts index ac3628f2..2f9937d0 100644 --- a/src/api/contentAttachments.ts +++ b/src/api/contentAttachments.ts @@ -2,8 +2,8 @@ import FormData from 'form-data'; import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentAttachments { @@ -16,6 +16,8 @@ export class ContentAttachments { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getAttachments>( parameters: Parameters.GetAttachments, @@ -28,6 +30,8 @@ export class ContentAttachments { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getAttachments>( parameters: Parameters.GetAttachments, @@ -273,6 +277,7 @@ export class ContentAttachments { responseType: 'arraybuffer', params: { version: parameters.version, + status: parameters.status, }, }; diff --git a/src/api/contentBody.ts b/src/api/contentBody.ts index b0a598f9..a76c40bc 100644 --- a/src/api/contentBody.ts +++ b/src/api/contentBody.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentBody { @@ -20,6 +20,8 @@ export class ContentBody { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: If request specifies 'contentIdContext', * 'View' permission for the space, and permission to view the content. + * + * @deprecated Will be removed in next major version. */ async convertContentBody( parameters: Parameters.ConvertContentBody, @@ -38,6 +40,8 @@ export class ContentBody { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: If request specifies 'contentIdContext', * 'View' permission for the space, and permission to view the content. + * + * @deprecated Will be removed in next major version. */ async convertContentBody( parameters: Parameters.ConvertContentBody, @@ -72,7 +76,9 @@ export class ContentBody { * * Supported conversions: * - * - Storage: export_view + * - Atlas_doc_format: editor, export_view, storage, styled_view, view + * - Storage: atlas_doc_format, editor, export_view, styled_view, view + * - Editor: storage * * No other conversions are supported at the moment. Once a conversion is completed, it will be available for 5 * minutes at the result endpoint. @@ -90,7 +96,9 @@ export class ContentBody { * * Supported conversions: * - * - Storage: export_view + * - Atlas_doc_format: editor, export_view, storage, styled_view, view + * - Storage: atlas_doc_format, editor, export_view, styled_view, view + * - Editor: storage * * No other conversions are supported at the moment. Once a conversion is completed, it will be available for 5 * minutes at the result endpoint. @@ -127,8 +135,8 @@ export class ContentBody { } /** - * Returns the Asynchronous Content Body for the corresponding asyncId if the task is complete or returns the status - * of the task. + * Returns the asynchronous content body for the corresponding id if the task is complete or returns the status of the + * task. * * After the task is completed, the result can be obtained for 5 minutes, or until an identical conversion request is * made again, with allowCache query param set to false. @@ -141,8 +149,8 @@ export class ContentBody { callback: Callback, ): Promise; /** - * Returns the Asynchronous Content Body for the corresponding asyncId if the task is complete or returns the status - * of the task. + * Returns the asynchronous content body for the corresponding id if the task is complete or returns the status of the + * task. * * After the task is completed, the result can be obtained for 5 minutes, or until an identical conversion request is * made again, with allowCache query param set to false. @@ -165,4 +173,102 @@ export class ContentBody { return this.client.sendRequest(config, callback); } + + /** + * Returns the content body for the corresponding `asyncId` of a completed conversion task. If the task is not + * completed, the task status is returned instead. + * + * Once a conversion task is completed, the result can be obtained for up to 5 minutes, or until an identical + * conversion request is made again with the `allowCache` parameter set to false. + * + * Note that there is a maximum limit of 50 task results per request to this endpoint. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async bulkAsyncConvertContentBodyResponse( + parameters: Parameters.BulkAsyncConvertContentBodyResponse, + callback: Callback, + ): Promise; + /** + * Returns the content body for the corresponding `asyncId` of a completed conversion task. If the task is not + * completed, the task status is returned instead. + * + * Once a conversion task is completed, the result can be obtained for up to 5 minutes, or until an identical + * conversion request is made again with the `allowCache` parameter set to false. + * + * Note that there is a maximum limit of 50 task results per request to this endpoint. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async bulkAsyncConvertContentBodyResponse( + parameters: Parameters.BulkAsyncConvertContentBodyResponse, + callback?: never, + ): Promise; + async bulkAsyncConvertContentBodyResponse( + parameters: Parameters.BulkAsyncConvertContentBodyResponse, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: '/api/contentbody/convert/async/bulk/tasks', + method: 'GET', + params: { + ids: parameters.ids, + }, + }; + + return this.client.sendRequest(config, callback); + } + + /** + * Asynchronously converts content bodies from one format to another format in bulk. Use the Content body REST API to + * get the status of conversion tasks. Note that there is a maximum limit of 10 conversions per request to this + * endpoint. + * + * Supported conversions: + * + * - Storage: editor, export_view, styled_view, view + * - Editor: storage + * + * Once a conversion task is completed, it is available for polling for up to 5 minutes. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and + * permission to view the content if the `spaceKeyContext` or `contentIdContext` are present. + */ + async bulkAsyncConvertContentBodyRequest( + parameters: Parameters.BulkAsyncConvertContentBodyRequest, + callback: Callback, + ): Promise; + /** + * Asynchronously converts content bodies from one format to another format in bulk. Use the Content body REST API to + * get the status of conversion tasks. Note that there is a maximum limit of 10 conversions per request to this + * endpoint. + * + * Supported conversions: + * + * - Storage: editor, export_view, styled_view, view + * - Editor: storage + * + * Once a conversion task is completed, it is available for polling for up to 5 minutes. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and + * permission to view the content if the `spaceKeyContext` or `contentIdContext` are present. + */ + async bulkAsyncConvertContentBodyRequest( + parameters: Parameters.BulkAsyncConvertContentBodyRequest, + callback?: never, + ): Promise; + async bulkAsyncConvertContentBodyRequest( + parameters: Parameters.BulkAsyncConvertContentBodyRequest, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: '/api/contentbody/convert/async/bulk/tasks', + method: 'POST', + data: parameters, + }; + + return this.client.sendRequest(config, callback); + } } diff --git a/src/api/contentChildrenAndDescendants.ts b/src/api/contentChildrenAndDescendants.ts index c7a82a19..9c3c40e7 100644 --- a/src/api/contentChildrenAndDescendants.ts +++ b/src/api/contentChildrenAndDescendants.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentChildrenAndDescendants { @@ -24,6 +24,8 @@ export class ContentChildrenAndDescendants { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentChildren( parameters: Parameters.GetContentChildren, @@ -46,6 +48,8 @@ export class ContentChildrenAndDescendants { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentChildren( parameters: Parameters.GetContentChildren, @@ -119,6 +123,8 @@ export class ContentChildrenAndDescendants { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentChildrenByType( parameters: Parameters.GetContentChildrenByType, @@ -140,6 +146,8 @@ export class ContentChildrenAndDescendants { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentChildrenByType( parameters: Parameters.GetContentChildrenByType, @@ -169,7 +177,11 @@ export class ContentChildrenAndDescendants { * * A piece of content has different types of descendants, depending on its type: * - * - `page`: descendant is `page`, `comment`, `attachment` + * - `page`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `whiteboard`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `database`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `embed`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `folder`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` * - `blogpost`: descendant is `comment`, `attachment` * - `attachment`: descendant is `comment` * - `comment`: descendant is `attachment` @@ -191,7 +203,11 @@ export class ContentChildrenAndDescendants { * * A piece of content has different types of descendants, depending on its type: * - * - `page`: descendant is `page`, `comment`, `attachment` + * - `page`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `whiteboard`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `database`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `embed`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `folder`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` * - `blogpost`: descendant is `comment`, `attachment` * - `attachment`: descendant is `comment` * - `comment`: descendant is `attachment` @@ -228,13 +244,20 @@ export class ContentChildrenAndDescendants { * * A piece of content has different types of descendants, depending on its type: * - * - `page`: descendant is `page`, `comment`, `attachment` + * - `page`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `whiteboard`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `database`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `embed`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `folder`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` * - `blogpost`: descendant is `comment`, `attachment` * - `attachment`: descendant is `comment` * - `comment`: descendant is `attachment` * * Custom content types that are provided by apps can also be returned. * + * If the expand query parameter is used with the `body.export_view` and/or `body.styled_view` properties, then the + * query limit parameter will be restricted to a maximum value of 25. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. */ @@ -249,13 +272,20 @@ export class ContentChildrenAndDescendants { * * A piece of content has different types of descendants, depending on its type: * - * - `page`: descendant is `page`, `comment`, `attachment` + * - `page`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `whiteboard`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `database`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `embed`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` + * - `folder`: descendant is `page`, `whiteboard`, `database`, `embed`, `folder`, `comment`, `attachment` * - `blogpost`: descendant is `comment`, `attachment` * - `attachment`: descendant is `comment` * - `comment`: descendant is `attachment` * * Custom content types that are provided by apps can also be returned. * + * If the expand query parameter is used with the `body.export_view` and/or `body.styled_view` properties, then the + * query limit parameter will be restricted to a maximum value of 25. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. */ @@ -329,6 +359,7 @@ export class ContentChildrenAndDescendants { * * - `space`: page will be copied to the specified space as a root page on the space * - `parent_page`: page will be copied as a child of the specified parent page + * - `parent_content`: page will be copied as a child of the specified parent content * - `existing_page`: page will be copied and replace the specified page * * By default, the following objects are expanded: `space`, `history`, `version`. @@ -344,6 +375,7 @@ export class ContentChildrenAndDescendants { * * - `space`: page will be copied to the specified space as a root page on the space * - `parent_page`: page will be copied as a child of the specified parent page + * - `parent_content`: page will be copied as a child of the specified parent content * - `existing_page`: page will be copied and replace the specified page * * By default, the following objects are expanded: `space`, `history`, `version`. diff --git a/src/api/contentComments.ts b/src/api/contentComments.ts index 9884e4fa..5fd67382 100644 --- a/src/api/contentComments.ts +++ b/src/api/contentComments.ts @@ -4,6 +4,7 @@ import type { Callback } from '../callback'; import type { Client } from '../clients'; import type { RequestConfig } from '../requestConfig'; +/** @deprecated Will be removed in next major version. */ export class ContentComments { constructor(private client: Client) {} @@ -12,6 +13,8 @@ export class ContentComments { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentComments( parameters: Parameters.GetContentComments, @@ -22,6 +25,8 @@ export class ContentComments { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentComments( parameters: Parameters.GetContentComments, diff --git a/src/api/contentLabels.ts b/src/api/contentLabels.ts index b56258d1..60a90a44 100644 --- a/src/api/contentLabels.ts +++ b/src/api/contentLabels.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentLabels { @@ -12,6 +12,8 @@ export class ContentLabels { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getLabelsForContent( parameters: Parameters.GetLabelsForContent, @@ -22,6 +24,8 @@ export class ContentLabels { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getLabelsForContent( parameters: Parameters.GetLabelsForContent, @@ -91,8 +95,9 @@ export class ContentLabels { } /** - * Removes a label from a piece of content. This is similar to [Remove label from - * content](#api-content-id-label-label-delete) except that the label name is specified via a query parameter. + * Removes a label from a piece of content. Labels can't be deleted from archived content. This is similar to [Remove + * label from content](#api-content-id-label-label-delete) except that the label name is specified via a query + * parameter. * * Use this method if the label name has "/" characters, as [Remove label from content using query * parameter](#api-content-id-label-delete) does not accept "/" characters for the label name. @@ -104,8 +109,9 @@ export class ContentLabels { callback: Callback, ): Promise; /** - * Removes a label from a piece of content. This is similar to [Remove label from - * content](#api-content-id-label-label-delete) except that the label name is specified via a query parameter. + * Removes a label from a piece of content. Labels can't be deleted from archived content. This is similar to [Remove + * label from content](#api-content-id-label-label-delete) except that the label name is specified via a query + * parameter. * * Use this method if the label name has "/" characters, as [Remove label from content using query * parameter](#api-content-id-label-delete) does not accept "/" characters for the label name. @@ -132,8 +138,9 @@ export class ContentLabels { } /** - * Removes a label from a piece of content. This is similar to [Remove label from content using query - * parameter](#api-content-id-label-delete) except that the label name is specified via a path parameter. + * Removes a label from a piece of content. Labels can't be deleted from archived content. This is similar to [Remove + * label from content using query parameter](#api-content-id-label-delete) except that the label name is specified via + * a path parameter. * * Use this method if the label name does not have "/" characters, as the path parameter does not accept "/" * characters for security reasons. Otherwise, use [Remove label from content using query @@ -146,8 +153,9 @@ export class ContentLabels { callback: Callback, ): Promise; /** - * Removes a label from a piece of content. This is similar to [Remove label from content using query - * parameter](#api-content-id-label-delete) except that the label name is specified via a path parameter. + * Removes a label from a piece of content. Labels can't be deleted from archived content. This is similar to [Remove + * label from content using query parameter](#api-content-id-label-delete) except that the label name is specified via + * a path parameter. * * Use this method if the label name does not have "/" characters, as the path parameter does not accept "/" * characters for security reasons. Otherwise, use [Remove label from content using query diff --git a/src/api/contentMacroBody.ts b/src/api/contentMacroBody.ts index 660307fa..a6b969a0 100644 --- a/src/api/contentMacroBody.ts +++ b/src/api/contentMacroBody.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentMacroBody { @@ -16,10 +16,23 @@ export class ContentMacroBody { * '50884bd9-0cb8-41d5-98be-f80943c14f96'. The ID is then persisted as new versions of content are created, and is * only modified by Confluence if there are conflicting IDs. * + * For Forge macros, the value for macro ID is the "local ID" of that particular ADF node. This value can be retrieved + * either client-side by calling view.getContext() and accessing "localId" on the resulting object, or server-side by + * examining the "local-id" parameter node inside the "parameters" node. + * + * Note that there are other attributes named "local-id", but only this particular one is used to store the macro ID. + * + * Example: com.atlassian.ecosystem + * e9c4aa10-73fa-417c-888d-48c719ae4165 + * + * * Note, to preserve backwards compatibility this resource will also match on the hash of the macro body, even if a * macro ID is found. This check will eventually become redundant, as macro IDs are generated for pages and * transparently propagate out to all instances. * + * This backwards compatibility logic does not apply to Forge macros; those can only be retrieved by their ID. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content that the * macro is in. */ @@ -36,10 +49,23 @@ export class ContentMacroBody { * '50884bd9-0cb8-41d5-98be-f80943c14f96'. The ID is then persisted as new versions of content are created, and is * only modified by Confluence if there are conflicting IDs. * + * For Forge macros, the value for macro ID is the "local ID" of that particular ADF node. This value can be retrieved + * either client-side by calling view.getContext() and accessing "localId" on the resulting object, or server-side by + * examining the "local-id" parameter node inside the "parameters" node. + * + * Note that there are other attributes named "local-id", but only this particular one is used to store the macro ID. + * + * Example: com.atlassian.ecosystem + * e9c4aa10-73fa-417c-888d-48c719ae4165 + * + * * Note, to preserve backwards compatibility this resource will also match on the hash of the macro body, even if a * macro ID is found. This check will eventually become redundant, as macro IDs are generated for pages and * transparently propagate out to all instances. * + * This backwards compatibility logic does not apply to Forge macros; those can only be retrieved by their ID. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content that the * macro is in. */ @@ -68,10 +94,23 @@ export class ContentMacroBody { * '50884bd9-0cb8-41d5-98be-f80943c14f96'. The ID is then persisted as new versions of content are created, and is * only modified by Confluence if there are conflicting IDs. * + * For Forge macros, the value for macro ID is the "local ID" of that particular ADF node. This value can be retrieved + * either client-side by calling view.getContext() and accessing "localId" on the resulting object, or server-side by + * examining the "local-id" parameter node inside the "parameters" node. + * + * Note that there are other attributes named "local-id", but only this particular one is used to store the macro ID. + * + * Example: com.atlassian.ecosystem + * e9c4aa10-73fa-417c-888d-48c719ae4165 + * + * * Note, to preserve backwards compatibility this resource will also match on the hash of the macro body, even if a * macro ID is found. This check will eventually become redundant, as macro IDs are generated for pages and * transparently propagate out to all instances. * + * This backwards compatibility logic does not apply to Forge macros; those can only be retrieved by their ID. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content that the * macro is in. */ @@ -88,10 +127,23 @@ export class ContentMacroBody { * '50884bd9-0cb8-41d5-98be-f80943c14f96'. The ID is then persisted as new versions of content are created, and is * only modified by Confluence if there are conflicting IDs. * + * For Forge macros, the value for macro ID is the "local ID" of that particular ADF node. This value can be retrieved + * either client-side by calling view.getContext() and accessing "localId" on the resulting object, or server-side by + * examining the "local-id" parameter node inside the "parameters" node. + * + * Note that there are other attributes named "local-id", but only this particular one is used to store the macro ID. + * + * Example: com.atlassian.ecosystem + * e9c4aa10-73fa-417c-888d-48c719ae4165 + * + * * Note, to preserve backwards compatibility this resource will also match on the hash of the macro body, even if a * macro ID is found. This check will eventually become redundant, as macro IDs are generated for pages and * transparently propagate out to all instances. * + * This backwards compatibility logic does not apply to Forge macros; those can only be retrieved by their ID. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content that the * macro is in. */ @@ -125,10 +177,23 @@ export class ContentMacroBody { * '884bd9-0cb8-41d5-98be-f80943c14f96'. The ID is then persisted as new versions of content are created, and is only * modified by Confluence if there are conflicting IDs. * + * For Forge macros, the value for macro ID is the "local ID" of that particular ADF node. This value can be retrieved + * either client-side by calling view.getContext() and accessing "localId" on the resulting object, or server-side by + * examining the "local-id" parameter node inside the "parameters" node. + * + * Note that there are other attributes named "local-id", but only this particular one is used to store the macro ID. + * + * Example: com.atlassian.ecosystem + * e9c4aa10-73fa-417c-888d-48c719ae4165 + * + * * Note, to preserve backwards compatibility this resource will also match on the hash of the macro body, even if a * macro ID is found. This check will eventually become redundant, as macro IDs are generated for pages and * transparently propagate out to all instances. * + * This backwards compatibility logic does not apply to Forge macros; those can only be retrieved by their ID. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content that the * macro is in. */ @@ -145,10 +210,23 @@ export class ContentMacroBody { * '884bd9-0cb8-41d5-98be-f80943c14f96'. The ID is then persisted as new versions of content are created, and is only * modified by Confluence if there are conflicting IDs. * + * For Forge macros, the value for macro ID is the "local ID" of that particular ADF node. This value can be retrieved + * either client-side by calling view.getContext() and accessing "localId" on the resulting object, or server-side by + * examining the "local-id" parameter node inside the "parameters" node. + * + * Note that there are other attributes named "local-id", but only this particular one is used to store the macro ID. + * + * Example: com.atlassian.ecosystem + * e9c4aa10-73fa-417c-888d-48c719ae4165 + * + * * Note, to preserve backwards compatibility this resource will also match on the hash of the macro body, even if a * macro ID is found. This check will eventually become redundant, as macro IDs are generated for pages and * transparently propagate out to all instances. * + * This backwards compatibility logic does not apply to Forge macros; those can only be retrieved by their ID. + * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content that the * macro is in. */ diff --git a/src/api/contentPermissions.ts b/src/api/contentPermissions.ts index 471412bb..87283425 100644 --- a/src/api/contentPermissions.ts +++ b/src/api/contentPermissions.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentPermissions { diff --git a/src/api/contentProperties.ts b/src/api/contentProperties.ts index 571cf304..109ff46d 100644 --- a/src/api/contentProperties.ts +++ b/src/api/contentProperties.ts @@ -4,6 +4,7 @@ import type { Callback } from '../callback'; import type { Client } from '../clients'; import type { RequestConfig } from '../requestConfig'; +/** @deprecated Will be removed in next major version. */ export class ContentProperties { constructor(private client: Client) {} @@ -13,6 +14,8 @@ export class ContentProperties { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentProperties( parameters: Parameters.GetContentProperties, @@ -24,6 +27,8 @@ export class ContentProperties { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentProperties( parameters: Parameters.GetContentProperties, @@ -58,6 +63,8 @@ export class ContentProperties { * `metadata.properties` of the request. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async createContentProperty( parameters: Parameters.CreateContentProperty, @@ -74,6 +81,8 @@ export class ContentProperties { * `metadata.properties` of the request. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async createContentProperty( parameters: Parameters.CreateContentProperty, @@ -101,6 +110,8 @@ export class ContentProperties { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentProperty( parameters: Parameters.GetContentProperty, @@ -112,6 +123,8 @@ export class ContentProperties { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space, and * permission to view the content if it is a page. + * + * @deprecated Will be removed in next major version. */ async getContentProperty( parameters: Parameters.GetContentProperty, @@ -144,6 +157,8 @@ export class ContentProperties { * `metadata.properties` of the request. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async createContentPropertyForKey( parameters: Parameters.CreateContentPropertyForKey, @@ -160,6 +175,8 @@ export class ContentProperties { * `metadata.properties` of the request. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async createContentPropertyForKey( parameters: Parameters.CreateContentPropertyForKey, @@ -186,6 +203,8 @@ export class ContentProperties { * [Confluence entity properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async updateContentProperty( parameters: Parameters.UpdateContentProperty, @@ -197,6 +216,8 @@ export class ContentProperties { * [Confluence entity properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async updateContentProperty( parameters: Parameters.UpdateContentProperty, @@ -223,6 +244,8 @@ export class ContentProperties { * properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async deleteContentProperty( parameters: Parameters.DeleteContentProperty, @@ -233,6 +256,8 @@ export class ContentProperties { * properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content. + * + * @deprecated Will be removed in next major version. */ async deleteContentProperty(parameters: Parameters.DeleteContentProperty, callback?: never): Promise; async deleteContentProperty( diff --git a/src/api/contentRestrictions.ts b/src/api/contentRestrictions.ts index 609f302e..ef8346ad 100644 --- a/src/api/contentRestrictions.ts +++ b/src/api/contentRestrictions.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentRestrictions { @@ -221,13 +221,15 @@ export class ContentRestrictions { * Returns whether the specified content restriction applies to a group. For example, if a page with `id=123` has a * `read` restriction for the `admins` group, the following request will return `true`: * - * `https://your-domain.atlassian.net/wiki/rest/api/content/123/restriction/byOperation/read/group/admins` + * `https://your-domain.atlassian.net/api/content/123/restriction/byOperation/read/group/admins` * * Note that a response of `true` does not guarantee that the group can view the page, as it does not account for * account-inherited restrictions, space permissions, or even product access. For more information, see [Confluence * permissions](https://confluence.atlassian.com/x/_AozKw). * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. + * + * @deprecated Will be removed in next major version. */ async getContentRestrictionStatusForGroup( parameters: Parameters.GetContentRestrictionStatusForGroup, @@ -237,13 +239,15 @@ export class ContentRestrictions { * Returns whether the specified content restriction applies to a group. For example, if a page with `id=123` has a * `read` restriction for the `admins` group, the following request will return `true`: * - * `https://your-domain.atlassian.net/wiki/rest/api/content/123/restriction/byOperation/read/group/admins` + * `https://your-domain.atlassian.net/api/content/123/restriction/byOperation/read/group/admins` * * Note that a response of `true` does not guarantee that the group can view the page, as it does not account for * account-inherited restrictions, space permissions, or even product access. For more information, see [Confluence * permissions](https://confluence.atlassian.com/x/_AozKw). * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. + * + * @deprecated Will be removed in next major version. */ async getContentRestrictionStatusForGroup( parameters: Parameters.GetContentRestrictionStatusForGroup, @@ -266,6 +270,8 @@ export class ContentRestrictions { * content. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to edit the content. + * + * @deprecated Will be removed in next major version. */ async addGroupToContentRestriction( parameters: Parameters.AddGroupToContentRestriction, @@ -276,6 +282,8 @@ export class ContentRestrictions { * content. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to edit the content. + * + * @deprecated Will be removed in next major version. */ async addGroupToContentRestriction( parameters: Parameters.AddGroupToContentRestriction, @@ -298,6 +306,8 @@ export class ContentRestrictions { * content. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to edit the content. + * + * @deprecated Will be removed in next major version. */ async removeGroupByName(parameters: Parameters.RemoveGroupByName, callback: Callback): Promise; /** @@ -305,6 +315,8 @@ export class ContentRestrictions { * content. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to edit the content. + * + * @deprecated Will be removed in next major version. */ async removeGroupByName(parameters: Parameters.RemoveGroupByName, callback?: never): Promise; async removeGroupByName( @@ -323,7 +335,7 @@ export class ContentRestrictions { * Returns whether the specified content restriction applies to a group. For example, if a page with `id=123` has a * `read` restriction for the `123456` group id, the following request will return `true`: * - * `https://your-domain.atlassian.net/wiki/rest/api/content/123/restriction/byOperation/read/byGroupId/123456` + * `https://your-domain.atlassian.net/api/content/123/restriction/byOperation/read/byGroupId/123456` * * Note that a response of `true` does not guarantee that the group can view the page, as it does not account for * account-inherited restrictions, space permissions, or even product access. For more information, see [Confluence @@ -339,7 +351,7 @@ export class ContentRestrictions { * Returns whether the specified content restriction applies to a group. For example, if a page with `id=123` has a * `read` restriction for the `123456` group id, the following request will return `true`: * - * `https://your-domain.atlassian.net/wiki/rest/api/content/123/restriction/byOperation/read/byGroupId/123456` + * `https://your-domain.atlassian.net/api/content/123/restriction/byOperation/read/byGroupId/123456` * * Note that a response of `true` does not guarantee that the group can view the page, as it does not account for * account-inherited restrictions, space permissions, or even product access. For more information, see [Confluence @@ -426,7 +438,7 @@ export class ContentRestrictions { * `read` restriction for a user with an account ID of `384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192`, the following * request will return `true`: * - * `https://your-domain.atlassian.net/wiki/rest/api/content/123/restriction/byOperation/read/user?accountId=384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192` + * `https://your-domain.atlassian.net/api/content/123/restriction/byOperation/read/user?accountId=384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192` * * Note that a response of `true` does not guarantee that the user can view the page, as it does not account for * account-inherited restrictions, space permissions, or even product access. For more information, see [Confluence @@ -443,7 +455,7 @@ export class ContentRestrictions { * `read` restriction for a user with an account ID of `384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192`, the following * request will return `true`: * - * `https://your-domain.atlassian.net/wiki/rest/api/content/123/restriction/byOperation/read/user?accountId=384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192` + * `https://your-domain.atlassian.net/api/content/123/restriction/byOperation/read/user?accountId=384093:32b4d9w0-f6a5-3535-11a3-9c8c88d10192` * * Note that a response of `true` does not guarantee that the user can view the page, as it does not account for * account-inherited restrictions, space permissions, or even product access. For more information, see [Confluence diff --git a/src/api/contentStates.ts b/src/api/contentStates.ts index 6ded5f6b..ce2f69ff 100644 --- a/src/api/contentStates.ts +++ b/src/api/contentStates.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentStates { @@ -191,7 +191,7 @@ export class ContentStates { /** * Get content states that are suggested in the space. * - * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Space view permission + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. */ async getSpaceContentStates( parameters: Parameters.GetSpaceContentStates, @@ -200,7 +200,7 @@ export class ContentStates { /** * Get content states that are suggested in the space. * - * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Space view permission + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. */ async getSpaceContentStates( parameters: Parameters.GetSpaceContentStates, @@ -222,7 +222,7 @@ export class ContentStates { * Get object describing whether content states are allowed at all, if custom content states or space content states * are restricted, and a list of space content states allowed for the space if they are not restricted. * - * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Space admin permission + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Admin' permission for the space. */ async getContentStateSettings( parameters: Parameters.GetContentStateSettings, @@ -232,7 +232,7 @@ export class ContentStates { * Get object describing whether content states are allowed at all, if custom content states or space content states * are restricted, and a list of space content states allowed for the space if they are not restricted. * - * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Space admin permission + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Admin' permission for the space. */ async getContentStateSettings( parameters: Parameters.GetContentStateSettings, @@ -249,4 +249,46 @@ export class ContentStates { return this.client.sendRequest(config, callback); } + + /** + * Returns all content that has the provided content state in a space. + * + * If the expand query parameter is used with the `body.export_view` and/or `body.styled_view` properties, then the + * query limit parameter will be restricted to a maximum value of 25. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. + */ + async getContentsWithState( + parameters: Parameters.GetContentsWithState, + callback: Callback, + ): Promise; + /** + * Returns all content that has the provided content state in a space. + * + * If the expand query parameter is used with the `body.export_view` and/or `body.styled_view` properties, then the + * query limit parameter will be restricted to a maximum value of 25. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. + */ + async getContentsWithState( + parameters: Parameters.GetContentsWithState, + callback?: never, + ): Promise; + async getContentsWithState( + parameters: Parameters.GetContentsWithState, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/space/${parameters.spaceKey}/state/content`, + method: 'GET', + params: { + 'state-id': parameters.stateId, + expand: parameters.expand, + limit: parameters.limit, + start: parameters.start, + }, + }; + + return this.client.sendRequest(config, callback); + } } diff --git a/src/api/contentVersions.ts b/src/api/contentVersions.ts index b392bec5..29ef35c6 100644 --- a/src/api/contentVersions.ts +++ b/src/api/contentVersions.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentVersions { @@ -12,6 +12,8 @@ export class ContentVersions { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getContentVersions( parameters: Parameters.GetContentVersions, @@ -22,6 +24,8 @@ export class ContentVersions { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getContentVersions( parameters: Parameters.GetContentVersions, @@ -88,6 +92,8 @@ export class ContentVersions { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getContentVersion( parameters: Parameters.GetContentVersion, @@ -98,6 +104,8 @@ export class ContentVersions { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content. If the * content is a blog post, 'View' permission for the space is required. + * + * @deprecated Will be removed in next major version. */ async getContentVersion(parameters: Parameters.GetContentVersion, callback?: never): Promise; async getContentVersion( diff --git a/src/api/contentWatches.ts b/src/api/contentWatches.ts index 03ab004c..5c16d9b0 100644 --- a/src/api/contentWatches.ts +++ b/src/api/contentWatches.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class ContentWatches { diff --git a/src/api/dynamicModules.ts b/src/api/dynamicModules.ts index ab385fd1..63c1fe93 100644 --- a/src/api/dynamicModules.ts +++ b/src/api/dynamicModules.ts @@ -1,6 +1,6 @@ import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class DynamicModules { diff --git a/src/api/experimental.ts b/src/api/experimental.ts index 31dd3f9d..c9b26ec4 100644 --- a/src/api/experimental.ts +++ b/src/api/experimental.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Experimental { @@ -150,6 +150,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.getUserProperties` instead. */ async getUserProperties( parameters: Parameters.GetUserProperties, @@ -162,6 +164,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.getUserProperties` instead. */ async getUserProperties( parameters: Parameters.GetUserProperties, @@ -190,6 +194,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.getUserProperty` instead. */ async getUserProperty( parameters: Parameters.GetUserProperty, @@ -202,6 +208,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.getUserProperty` instead. */ async getUserProperty(parameters: Parameters.GetUserProperty, callback?: never): Promise; async getUserProperty( @@ -224,6 +232,8 @@ export class Experimental { * `Note:` the number of properties which could be created per app in a tenant for each user might be restricted by * fixed system limits. **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access * the Confluence site ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.createUserProperty` instead. */ async createUserProperty( parameters: Parameters.CreateUserProperty, @@ -237,6 +247,8 @@ export class Experimental { * `Note:` the number of properties which could be created per app in a tenant for each user might be restricted by * fixed system limits. **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access * the Confluence site ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.createUserProperty` instead. */ async createUserProperty(parameters: Parameters.CreateUserProperty, callback?: never): Promise; async createUserProperty( @@ -262,6 +274,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.updateUserProperty` instead. */ async updateUserProperty(parameters: Parameters.UpdateUserProperty, callback: Callback): Promise; /** @@ -272,6 +286,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.updateUserProperty` instead. */ async updateUserProperty(parameters: Parameters.UpdateUserProperty, callback?: never): Promise; async updateUserProperty( @@ -296,6 +312,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.deleteUserProperty` instead. */ async deleteUserProperty(parameters: Parameters.DeleteUserProperty, callback: Callback): Promise; /** @@ -305,6 +323,8 @@ export class Experimental { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `userProperties.deleteUserProperty` instead. */ async deleteUserProperty(parameters: Parameters.DeleteUserProperty, callback?: never): Promise; async deleteUserProperty( diff --git a/src/api/group.ts b/src/api/group.ts index fc32c81a..dd43c205 100644 --- a/src/api/group.ts +++ b/src/api/group.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Group { @@ -72,12 +72,16 @@ export class Group { * Delete user group. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: User must be a site admin. + * + * @deprecated Will be removed in next major version. */ async removeGroup(parameters: Parameters.RemoveGroup, callback: Callback): Promise; /** * Delete user group. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: User must be a site admin. + * + * @deprecated Will be removed in next major version. */ async removeGroup(parameters: Parameters.RemoveGroup, callback?: never): Promise; async removeGroup(parameters: Parameters.RemoveGroup, callback?: Callback): Promise { @@ -97,6 +101,8 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getGroupByQueryParam( parameters: Parameters.GetGroupByQueryParam, @@ -107,6 +113,8 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getGroupByQueryParam( parameters: Parameters.GetGroupByQueryParam, @@ -164,14 +172,14 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: User must be a site admin. */ - async removeGroupById(parameters: Parameters.RemoveGroupById, callback: Callback): Promise; + async removeGroupById(parameters: Parameters.DeleteGroupById, callback: Callback): Promise; /** * Delete user group. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: User must be a site admin. */ - async removeGroupById(parameters: Parameters.RemoveGroupById, callback?: never): Promise; - async removeGroupById(parameters: Parameters.RemoveGroupById, callback?: Callback): Promise { + async removeGroupById(parameters: Parameters.DeleteGroupById, callback?: never): Promise; + async removeGroupById(parameters: Parameters.DeleteGroupById, callback?: Callback): Promise { const config: RequestConfig = { url: '/api/group/by-id', method: 'DELETE', @@ -190,6 +198,8 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getGroupByName(parameters: Parameters.GetGroupByName, callback: Callback): Promise; /** @@ -199,6 +209,8 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getGroupByName(parameters: Parameters.GetGroupByName, callback?: never): Promise; async getGroupByName( @@ -218,6 +230,8 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getMembersByQueryParam( parameters: Parameters.GetMembersByQueryParam, @@ -228,6 +242,8 @@ export class Group { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getMembersByQueryParam( parameters: Parameters.GetMembersByQueryParam, @@ -251,6 +267,31 @@ export class Group { return this.client.sendRequest(config, callback); } + /** Get search results of groups by partial query provided. */ + async searchGroups( + parameters: Parameters.SearchGroups, + callback: Callback, + ): Promise; + /** Get search results of groups by partial query provided. */ + async searchGroups(parameters: Parameters.SearchGroups, callback?: never): Promise; + async searchGroups( + parameters: Parameters.SearchGroups, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: '/api/group/picker', + method: 'GET', + params: { + query: parameters.query, + start: parameters.start, + limit: parameters.limit, + shouldReturnTotalSize: parameters.shouldReturnTotalSize, + }, + }; + + return this.client.sendRequest(config, callback); + } + /** * Returns the users that are members of a group. * @@ -259,8 +300,8 @@ export class Group { * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). */ - async getGroupMembers( - parameters: Parameters.GetGroupMembers, + async getGroupMembersByGroupId( + parameters: Parameters.GetGroupMembersByGroupId, callback: Callback, ): Promise; /** @@ -271,42 +312,22 @@ export class Group { * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). */ - async getGroupMembers(parameters: Parameters.GetGroupMembers, callback?: never): Promise; - async getGroupMembers( - parameters: Parameters.GetGroupMembers, - callback?: Callback, - ): Promise { - const config: RequestConfig = { - url: `/api/group/${parameters.groupName}/member`, - method: 'GET', - params: { - start: parameters.start, - limit: parameters.limit, - }, - }; - - return this.client.sendRequest(config, callback); - } - - /** Get search results of groups by partial query provided. */ - async searchGroups( - parameters: Parameters.SearchGroups, - callback: Callback, - ): Promise; - /** Get search results of groups by partial query provided. */ - async searchGroups(parameters: Parameters.SearchGroups, callback?: never): Promise; - async searchGroups( - parameters: Parameters.SearchGroups, + async getGroupMembersByGroupId( + parameters: Parameters.GetGroupMembersByGroupId, + callback?: never, + ): Promise; + async getGroupMembersByGroupId( + parameters: Parameters.GetGroupMembersByGroupId, callback?: Callback, ): Promise { const config: RequestConfig = { - url: '/api/group/picker', + url: `/api/group/${parameters.groupId}/membersByGroupId`, method: 'GET', params: { - query: parameters.query, start: parameters.start, limit: parameters.limit, shouldReturnTotalSize: parameters.shouldReturnTotalSize, + expand: parameters.expand, }, }; @@ -383,47 +404,6 @@ export class Group { return this.client.sendRequest(config, callback); } - /** - * Returns the users that are members of a group. - * - * Use updated Get group API - * - * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site - * ('Can use' global permission). - */ - async getGroupMembersByGroupId( - parameters: Parameters.GetGroupMembersByGroupId, - callback: Callback, - ): Promise; - /** - * Returns the users that are members of a group. - * - * Use updated Get group API - * - * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site - * ('Can use' global permission). - */ - async getGroupMembersByGroupId( - parameters: Parameters.GetGroupMembersByGroupId, - callback?: never, - ): Promise; - async getGroupMembersByGroupId( - parameters: Parameters.GetGroupMembersByGroupId, - callback?: Callback, - ): Promise { - const config: RequestConfig = { - url: `/api/group/${parameters.groupId}/membersByGroupId`, - method: 'GET', - params: { - start: parameters.start, - limit: parameters.limit, - shouldReturnTotalSize: parameters.shouldReturnTotalSize, - }, - }; - - return this.client.sendRequest(config, callback); - } - /** * Adds a user as a member in a group. * @@ -481,4 +461,45 @@ export class Group { return this.client.sendRequest(config, callback); } + + /** + * Returns the users that are members of a group. + * + * Use updated Get group API + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `group.getGroupMembersByGroupId` + */ + async getGroupMembers( + parameters: Parameters.GetGroupMembers, + callback: Callback, + ): Promise; + /** + * Returns the users that are members of a group. + * + * Use updated Get group API + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + * + * @deprecated Will be removed in next major version. Use `group.getGroupMembersByGroupId` + */ + async getGroupMembers(parameters: Parameters.GetGroupMembers, callback?: never): Promise; + async getGroupMembers( + parameters: Parameters.GetGroupMembers, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/group/${parameters.groupName}/member`, + method: 'GET', + params: { + start: parameters.start, + limit: parameters.limit, + }, + }; + + return this.client.sendRequest(config, callback); + } } diff --git a/src/api/index.ts b/src/api/index.ts index 6dad8436..f3241061 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -29,3 +29,4 @@ export * from './spaceSettings'; export * from './template'; export * from './themes'; export * from './users'; +export * from './userProperties'; diff --git a/src/api/inlineTasks.ts b/src/api/inlineTasks.ts index 74c621fb..599699c0 100644 --- a/src/api/inlineTasks.ts +++ b/src/api/inlineTasks.ts @@ -4,6 +4,7 @@ import type { Callback } from '../callback'; import type { Client } from '../clients'; import type { RequestConfig } from '../requestConfig'; +/** @deprecated Will be removed in next major version. */ export class InlineTasks { constructor(private client: Client) {} @@ -12,6 +13,8 @@ export class InlineTasks { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Only tasks in contents that the user has permission to view are returned. + * + * @deprecated Will be removed in next major version. */ async searchTasks( parameters: Parameters.SearchTasks | undefined, @@ -22,6 +25,8 @@ export class InlineTasks { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Only tasks in contents that the user has permission to view are returned. + * + * @deprecated Will be removed in next major version. */ async searchTasks(parameters?: Parameters.SearchTasks, callback?: never): Promise; async searchTasks( @@ -57,6 +62,8 @@ export class InlineTasks { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content associated * with the task. + * + * @deprecated Will be removed in next major version. */ async getTaskById(parameters: Parameters.GetTaskById, callback: Callback): Promise; /** @@ -64,6 +71,8 @@ export class InlineTasks { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the content associated * with the task. + * + * @deprecated Will be removed in next major version. */ async getTaskById(parameters: Parameters.GetTaskById, callback?: never): Promise; async getTaskById(parameters: Parameters.GetTaskById, callback?: Callback): Promise { @@ -80,6 +89,8 @@ export class InlineTasks { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content associated * with the task. + * + * @deprecated Will be removed in next major version. */ async updateTaskById(parameters: Parameters.UpdateTaskById, callback: Callback): Promise; /** @@ -87,6 +98,8 @@ export class InlineTasks { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to update the content associated * with the task. + * + * @deprecated Will be removed in next major version. */ async updateTaskById(parameters: Parameters.UpdateTaskById, callback?: never): Promise; async updateTaskById( diff --git a/src/api/labelInfo.ts b/src/api/labelInfo.ts index 78a187f8..72fc39e6 100644 --- a/src/api/labelInfo.ts +++ b/src/api/labelInfo.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class LabelInfo { diff --git a/src/api/longRunningTask.ts b/src/api/longRunningTask.ts index 995c76ef..f2a7e0b1 100644 --- a/src/api/longRunningTask.ts +++ b/src/api/longRunningTask.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class LongRunningTask { @@ -34,6 +34,7 @@ export class LongRunningTask { url: '/api/longtask', method: 'GET', params: { + key: parameters?.key, start: parameters?.start, limit: parameters?.limit, }, diff --git a/src/api/models/spaceCreate.ts b/src/api/models/spaceCreate.ts index 50ae88e1..1dd2274d 100644 --- a/src/api/models/spaceCreate.ts +++ b/src/api/models/spaceCreate.ts @@ -3,10 +3,19 @@ import type { SpacePermission } from './spacePermission'; /** This is the request object used when creating a new space. */ export interface SpaceCreate { - /** The key for the new space. Format: See [Space keys](https://confluence.atlassian.com/x/lqNMMQ). */ - key: string; /** The name of the new space. */ name: string; + /** + * The key for the new space. Format: See [Space keys](https://confluence.atlassian.com/x/lqNMMQ). If `alias` is not + * provided, this is required. + */ + key?: string; + /** + * This field will be used as the new identifier for the space in confluence page URLs. If the property is not + * provided the alias will be the provided key. This property is experimental and may be changed or removed in the + * future. + */ + alias?: string; description?: SpaceDescriptionCreate; /** * The permissions for the new space. If no permissions are provided, the [Confluence default space diff --git a/src/api/models/spacePrivateCreate.ts b/src/api/models/spacePrivateCreate.ts index ff1e3df5..700e859d 100644 --- a/src/api/models/spacePrivateCreate.ts +++ b/src/api/models/spacePrivateCreate.ts @@ -3,10 +3,19 @@ import type { SpacePermissionCreate } from './spacePermissionCreate'; /** This is the request object used when creating a new private space. */ export interface SpacePrivateCreate { - /** The key for the new space. Format: See [Space keys](https://confluence.atlassian.com/x/lqNMMQ). */ - key: string; /** The name of the new space. */ name: string; + /** + * The key for the new space. Format: See [Space keys](https://confluence.atlassian.com/x/lqNMMQ). If `alias` is not + * provided, this is required. + */ + key?: string; + /** + * This field will be used as the new identifier for the space in confluence page URLs. If the property is not + * provided the alias will be the provided key. This property is experimental and may be changed or removed in the + * future. + */ + alias?: string; description?: SpaceDescriptionCreate; /** * The permissions for the new space. If no permissions are provided, the [Confluence default space diff --git a/src/api/parameters/bulkAsyncConvertContentBodyRequest.ts b/src/api/parameters/bulkAsyncConvertContentBodyRequest.ts new file mode 100644 index 00000000..adeffae0 --- /dev/null +++ b/src/api/parameters/bulkAsyncConvertContentBodyRequest.ts @@ -0,0 +1,88 @@ +import type { OneOrMany } from '../../interfaces'; + +export interface BulkAsyncConvertContentBodyRequest { + /** The name of the target format for the content body conversion. */ + to: string; + /** This object is used when creating or updating content. */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + body: Record & { + /** The body of the content in the relevant format. */ + value: string; + /** The content format type. Set the value of this property to the name of the format being used, e.g. 'storage'. */ + representation: + | 'view' + | 'export_view' + | 'styled_view' + | 'storage' + | 'editor' + | 'editor2' + | 'anonymous_export_view' + | 'wiki' + | 'atlas_doc_format' + | 'plain' + | 'raw' + | string; + }; + /** + * A multi-value, comma-separated parameter indicating which properties of the content to expand and populate. Expands + * are dependent on the `to` conversion format and may be irrelevant for certain conversions (e.g. + * `macroRenderedOutput` is redundant when converting to `view` format). + * + * If rendering to `view` format, and the body content being converted includes arbitrary nested content (such as + * macros); then it is necessary to include webresource expands in the request. Webresources for content body are the + * batched JS and CSS dependencies for any nested dynamic content (i.e. macros). + */ + expand?: OneOrMany< + | 'embeddedContent' + | 'mediaToken' + | 'macroRenderedOutput' + | 'webresource.superbatch.uris.js' + | 'webresource.superbatch.uris.css' + | 'webresource.superbatch.uris.all' + | 'webresource.superbatch.tags.all' + | 'webresource.superbatch.tags.css' + | 'webresource.superbatch.tags.js' + | 'webresource.uris.js' + | 'webresource.uris.css' + | 'webresource.uris.all' + | 'webresource.tags.all' + | 'webresource.tags.css' + | 'webresource.tags.js' + >; + /** + * Mode used for rendering embedded content, such as attachments. + * + * - `current` renders the embedded content using the latest version. + * - `version-at-save renders` the embedded content using the version at the time of save. + * + * @default current + */ + embeddedContentRender?: 'current' | 'version-at-save' | string; + /** + * The content ID used to find the space for resolving embedded content (page includes, files, and links) in the + * content body. For example, if the source content contains the link + * + * `` and the `contentIdContext=123` parameter is + * provided, then the link will be converted into a link to the "Example page" page in the same space that has the + * content with ID=123. Note that `spaceKeyContext` will be ignored if this parameter is provided. + */ + contentIdContext?: string; + /** + * The space key used for resolving embedded content (page includes, files, and links) in the content body. For + * example, if the source content contains the link `` + * and the `spaceKeyContext=TEST` parameter is provided, then the link will be converted into a link to the "Example + * page" page in the "TEST" space. + */ + spaceKeyContext?: string; + /** + * If `false`, the cache will erase its current value and begin a new conversion. If `true`, the cache will not erase + * its current value, and will set the status of the async conversion to “RERUNNING”. Once the data is updated, the + * status will change to “COMPLETED”. Large macros that take a long time to convert and that need not be immediately + * up to date (e.g. a macro in which the new conversion result is the same as a previous conversion result that was + * completed within the last 5 minutes) should set this field to `true`. Cache values are stored per user per content + * body and expansions. + * + * @default false + */ + allowCache?: boolean; +} diff --git a/src/api/parameters/bulkAsyncConvertContentBodyResponse.ts b/src/api/parameters/bulkAsyncConvertContentBodyResponse.ts new file mode 100644 index 00000000..3c443c40 --- /dev/null +++ b/src/api/parameters/bulkAsyncConvertContentBodyResponse.ts @@ -0,0 +1,4 @@ +export interface BulkAsyncConvertContentBodyResponse { + /** The asyncIds of the conversion tasks. */ + ids: string[]; +} diff --git a/src/api/parameters/deleteGroupById.ts b/src/api/parameters/deleteGroupById.ts new file mode 100644 index 00000000..e3a35d21 --- /dev/null +++ b/src/api/parameters/deleteGroupById.ts @@ -0,0 +1,4 @@ +export interface DeleteGroupById { + /** Id of the group to delete. */ + id: string; +} diff --git a/src/api/parameters/downloadAttachment.ts b/src/api/parameters/downloadAttachment.ts index dc88dbf8..669d1fa1 100644 --- a/src/api/parameters/downloadAttachment.ts +++ b/src/api/parameters/downloadAttachment.ts @@ -8,4 +8,10 @@ export interface DownloadAttachment { * the attachment. */ version?: number; + /** + * The statuses allowed on the retrieved attachment. If this parameter is absent, it will default to `current`. + * + * @default current + */ + status?: string | string[]; } diff --git a/src/api/parameters/getContentsWithState.ts b/src/api/parameters/getContentsWithState.ts new file mode 100644 index 00000000..0eb99e8c --- /dev/null +++ b/src/api/parameters/getContentsWithState.ts @@ -0,0 +1,17 @@ +export interface GetContentsWithState { + /** The key of the space to be queried for its content state settings. */ + spaceKey: string; + /** The id of the content state to filter content by */ + stateId: number; + /** + * A multi-value parameter indicating which properties of the content to expand. Options include: space, version, + * history, children, etc. + * + * Ex: (space, version); + */ + expand?: string[]; + /** Maximum number of results to return */ + limit?: number; + /** Number of result to start returning. (0 indexed) */ + start?: number; +} diff --git a/src/api/parameters/getGroupMembersByGroupId.ts b/src/api/parameters/getGroupMembersByGroupId.ts index 45f4cbd1..8ce74ee5 100644 --- a/src/api/parameters/getGroupMembersByGroupId.ts +++ b/src/api/parameters/getGroupMembersByGroupId.ts @@ -10,4 +10,11 @@ export interface GetGroupMembersByGroupId { * operation; use it if your use case needs this value. */ shouldReturnTotalSize?: boolean; + /** + * A multi-value parameter indicating which properties of the user to expand. + * + * - `operations` returns the operations that the user is allowed to do. + * - `personalSpace` returns the user's personal space, if it exists. + */ + expand?: 'operations' | 'personalSpace' | string | ('operations' | 'personalSpace' | string)[]; } diff --git a/src/api/parameters/getGroupMembershipsForUser.ts b/src/api/parameters/getGroupMembershipsForUser.ts index 95f12da1..a38603a8 100644 --- a/src/api/parameters/getGroupMembershipsForUser.ts +++ b/src/api/parameters/getGroupMembershipsForUser.ts @@ -2,11 +2,15 @@ export interface GetGroupMembershipsForUser { /** * This parameter is no longer available and will be removed from the documentation soon. Use `accountId` instead. See * the [deprecation notice](/cloud/confluence/deprecation-notice-user-privacy-api-migration-guide/) for details. + * + * @deprecated Will be removed in next major version. */ key?: string; /** * This parameter is no longer available and will be removed from the documentation soon. Use `accountId` instead. See * the [deprecation notice](/cloud/confluence/deprecation-notice-user-privacy-api-migration-guide/) for details. + * + * @deprecated Will be removed in next major version. */ username?: string; /** diff --git a/src/api/parameters/getTasks.ts b/src/api/parameters/getTasks.ts index eeeb995a..14b63d07 100644 --- a/src/api/parameters/getTasks.ts +++ b/src/api/parameters/getTasks.ts @@ -1,4 +1,6 @@ export interface GetTasks { + /** The key of the tasks. */ + key?: string; /** The starting index of the returned tasks. */ start?: number; /** The maximum number of tasks to return per page. Note, this may be restricted by fixed system limits. */ diff --git a/src/api/parameters/getUser.ts b/src/api/parameters/getUser.ts index f508bd22..93ac79e9 100644 --- a/src/api/parameters/getUser.ts +++ b/src/api/parameters/getUser.ts @@ -2,11 +2,15 @@ export interface GetUser { /** * This parameter is no longer available and will be removed from the documentation soon. Use `accountId` instead. See * the [deprecation notice](/cloud/confluence/deprecation-notice-user-privacy-api-migration-guide/) for details. + * + * @deprecated Will be removed in next major version. */ key?: string; /** * This parameter is no longer available and will be removed from the documentation soon. Use `accountId` instead. See * the [deprecation notice](/cloud/confluence/deprecation-notice-user-privacy-api-migration-guide/) for details. + * + * @deprecated Will be removed in next major version. */ username?: string; /** diff --git a/src/api/parameters/index.ts b/src/api/parameters/index.ts index 384f8814..5e9a0d02 100644 --- a/src/api/parameters/index.ts +++ b/src/api/parameters/index.ts @@ -14,6 +14,8 @@ export * from './addUserToGroupByGroupId'; export * from './archivePages'; export * from './asyncConvertContentBodyRequest'; export * from './asyncConvertContentBodyResponse'; +export * from './bulkAsyncConvertContentBodyRequest'; +export * from './bulkAsyncConvertContentBodyResponse'; export * from './checkContentPermission'; export * from './convertContentBody'; export * from './copyPage'; @@ -35,6 +37,7 @@ export * from './createUserProperty'; export * from './deleteContent'; export * from './deleteContentProperty'; export * from './deleteContentVersion'; +export * from './deleteGroupById'; export * from './deleteLabelFromSpace'; export * from './deletePageTree'; export * from './deleteRelationship'; @@ -71,6 +74,7 @@ export * from './getContentRestrictionStatusForGroup'; export * from './getContentRestrictionStatusForUser'; export * from './getContentState'; export * from './getContentStateSettings'; +export * from './getContentsWithState'; export * from './getContentTemplate'; export * from './getContentTemplates'; export * from './getContentVersion'; diff --git a/src/api/parameters/searchUser.ts b/src/api/parameters/searchUser.ts index 1823531f..b646bfd5 100644 --- a/src/api/parameters/searchUser.ts +++ b/src/api/parameters/searchUser.ts @@ -24,4 +24,11 @@ export interface SearchUser { * - `personalSpace` returns the personal space of the user. */ expand?: string[]; + /** + * Filters users by permission type. Use `none` to default to licensed users, `externalCollaborator` for + * external/guest users, and `all` to include all permission types. + * + * @default none + */ + sitePermissionTypeFilter?: 'all' | 'externalCollaborator' | 'none' | string; } diff --git a/src/api/relation.ts b/src/api/relation.ts index 4d6c0ef4..43c0b84e 100644 --- a/src/api/relation.ts +++ b/src/api/relation.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Relation { @@ -12,8 +12,8 @@ export class Relation { * way. * * For example, the following method finds all content that the current user has an 'ignore' relationship with: `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/ignore/from/user/current/to/content` Note, 'ignore' is an - * example custom relationship type. + * https://your-domain.atlassian.net/api/relation/ignore/from/user/current/to/content` Note, 'ignore' is an example + * custom relationship type. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view both the target entity * and source entity. @@ -27,8 +27,8 @@ export class Relation { * way. * * For example, the following method finds all content that the current user has an 'ignore' relationship with: `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/ignore/from/user/current/to/content` Note, 'ignore' is an - * example custom relationship type. + * https://your-domain.atlassian.net/api/relation/ignore/from/user/current/to/content` Note, 'ignore' is an example + * custom relationship type. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view both the target entity * and source entity. @@ -64,7 +64,7 @@ export class Relation { * * For example, you can use this method to find whether the current user has selected a particular page as a favorite * (i.e. 'save for later'): `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/favourite/from/user/current/to/content/123` + * https://your-domain.atlassian.net/api/relation/favourite/from/user/current/to/content/123` * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view both the target entity * and source entity. @@ -79,7 +79,7 @@ export class Relation { * * For example, you can use this method to find whether the current user has selected a particular page as a favorite * (i.e. 'save for later'): `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/favourite/from/user/current/to/content/123` + * https://your-domain.atlassian.net/api/relation/favourite/from/user/current/to/content/123` * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view both the target entity * and source entity. @@ -109,7 +109,7 @@ export class Relation { * default, but you can use this method to create any type of relationship between two entities. * * For example, the following method creates a 'sibling' relationship between two pieces of content: `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/sibling/from/content/123/to/content/456` + * https://your-domain.atlassian.net/api/relation/sibling/from/content/123/to/content/456` * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). @@ -123,7 +123,7 @@ export class Relation { * default, but you can use this method to create any type of relationship between two entities. * * For example, the following method creates a 'sibling' relationship between two pieces of content: `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/sibling/from/content/123/to/content/456` + * https://your-domain.atlassian.net/api/relation/sibling/from/content/123/to/content/456` * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). @@ -189,9 +189,8 @@ export class Relation { * way. * * For example, the following method finds all users that have a 'collaborator' relationship to a piece of content - * with an ID of '1234': `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/collaborator/to/content/1234/from/user` Note, - * 'collaborator' is an example custom relationship type. + * with an ID of '1234': `GET https://your-domain.atlassian.net/api/relation/collaborator/to/content/1234/from/user` + * Note, 'collaborator' is an example custom relationship type. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view both the target entity * and source entity. @@ -205,9 +204,8 @@ export class Relation { * way. * * For example, the following method finds all users that have a 'collaborator' relationship to a piece of content - * with an ID of '1234': `GET - * https://your-domain.atlassian.net/wiki/rest/api/relation/collaborator/to/content/1234/from/user` Note, - * 'collaborator' is an example custom relationship type. + * with an ID of '1234': `GET https://your-domain.atlassian.net/api/relation/collaborator/to/content/1234/from/user` + * Note, 'collaborator' is an example custom relationship type. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view both the target entity * and source entity. diff --git a/src/api/search.ts b/src/api/search.ts index 64f581bf..b4df14fc 100644 --- a/src/api/search.ts +++ b/src/api/search.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Search { @@ -67,6 +67,9 @@ export class Search { * Searches for users using user-specific queries from the [Confluence Query Language * (CQL)](https://developer.atlassian.com/cloud/confluence/advanced-searching-using-cql/). * + * Note that CQL input queries submitted through the `/api/search/user` endpoint only support user-specific fields + * like `user`, `user.fullname`, `user.accountid`, and `user.userkey`. + * * Note that some user fields may be set to null depending on the user's privacy settings. These are: email, * profilePicture, displayName, and timeZone. */ @@ -78,6 +81,9 @@ export class Search { * Searches for users using user-specific queries from the [Confluence Query Language * (CQL)](https://developer.atlassian.com/cloud/confluence/advanced-searching-using-cql/). * + * Note that CQL input queries submitted through the `/api/search/user` endpoint only support user-specific fields + * like `user`, `user.fullname`, `user.accountid`, and `user.userkey`. + * * Note that some user fields may be set to null depending on the user's privacy settings. These are: email, * profilePicture, displayName, and timeZone. */ @@ -97,6 +103,7 @@ export class Search { start: parameters.start, limit: parameters.limit, expand: parameters.expand, + sitePermissionTypeFilter: parameters.sitePermissionTypeFilter, }, }; diff --git a/src/api/settings.ts b/src/api/settings.ts index 5807fded..d7cdae05 100644 --- a/src/api/settings.ts +++ b/src/api/settings.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Settings { @@ -180,6 +180,8 @@ export class Settings { * space. Note, the default space settings are inherited from the current global settings. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Admin' permission for the space. + * + * @deprecated Will be removed in next major version. */ async setLookAndFeelSettings( parameters: Parameters.SetLookAndFeelSettings | undefined, @@ -190,6 +192,8 @@ export class Settings { * space. Note, the default space settings are inherited from the current global settings. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Admin' permission for the space. + * + * @deprecated Will be removed in next major version. */ async setLookAndFeelSettings( parameters?: Parameters.SetLookAndFeelSettings, diff --git a/src/api/space.ts b/src/api/space.ts index 37c81a5d..ecfeb88e 100644 --- a/src/api/space.ts +++ b/src/api/space.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import { paramSerializer } from '../paramSerializer'; import type { RequestConfig } from '../requestConfig'; @@ -14,6 +14,8 @@ export class Space { * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Note, the returned list will only contain spaces that the current user has * permission to view. + * + * @deprecated Will be removed in next major version. */ async getSpaces( parameters: Parameters.GetSpaces | undefined, @@ -25,6 +27,8 @@ export class Space { * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). Note, the returned list will only contain spaces that the current user has * permission to view. + * + * @deprecated Will be removed in next major version. */ async getSpaces(parameters?: Parameters.GetSpaces, callback?: never): Promise; async getSpaces(parameters?: Parameters.GetSpaces, callback?: Callback): Promise { @@ -68,8 +72,9 @@ export class Space { url: '/api/space', method: 'POST', data: { - key: parameters?.key, name: parameters?.name, + key: parameters?.key, + alias: parameters?.alias, description: parameters?.description, permissions: parameters?.permissions, }, @@ -105,8 +110,9 @@ export class Space { url: '/api/space/_private', method: 'POST', data: { - key: parameters?.key, name: parameters?.name, + key: parameters?.key, + alias: parameters?.alias, description: parameters?.description, permissions: parameters?.permissions, }, @@ -120,6 +126,8 @@ export class Space { * space. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. + * + * @deprecated Will be removed in next major version. */ async getSpace(parameters: Parameters.GetSpace, callback: Callback): Promise; /** @@ -127,6 +135,8 @@ export class Space { * space. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. + * + * @deprecated Will be removed in next major version. */ async getSpace(parameters: Parameters.GetSpace, callback?: never): Promise; async getSpace(parameters: Parameters.GetSpace, callback?: Callback): Promise { @@ -176,17 +186,17 @@ export class Space { } /** - * Deletes a space. Note, the space will be deleted in a long running task. Therefore, the space may not be deleted - * yet when this method has returned. Clients should poll the status link that is returned in the response until the - * task completes. + * Permanently deletes a space without sending it to the trash. Note, the space will be deleted in a long running + * task. Therefore, the space may not be deleted yet when this method has returned. Clients should poll the status + * link that is returned in the response until the task completes. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Admin' permission for the space. */ async deleteSpace(parameters: Parameters.DeleteSpace, callback: Callback): Promise; /** - * Deletes a space. Note, the space will be deleted in a long running task. Therefore, the space may not be deleted - * yet when this method has returned. Clients should poll the status link that is returned in the response until the - * task completes. + * Permanently deletes a space without sending it to the trash. Note, the space will be deleted in a long running + * task. Therefore, the space may not be deleted yet when this method has returned. Clients should poll the status + * link that is returned in the response until the task completes. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Admin' permission for the space. */ @@ -209,6 +219,8 @@ export class Space { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. Note, the * returned list will only contain content that the current user has permission to view. + * + * @deprecated Will be removed in next major version. */ async getContentForSpace( parameters: Parameters.GetContentForSpace, @@ -220,6 +232,8 @@ export class Space { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. Note, the * returned list will only contain content that the current user has permission to view. + * + * @deprecated Will be removed in next major version. */ async getContentForSpace( parameters: Parameters.GetContentForSpace, @@ -248,6 +262,8 @@ export class Space { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. Note, the * returned list will only contain content that the current user has permission to view. + * + * @deprecated Will be removed in next major version. */ async getContentByTypeForSpace( parameters: Parameters.GetContentByTypeForSpace, @@ -258,6 +274,8 @@ export class Space { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'View' permission for the space. Note, the * returned list will only contain content that the current user has permission to view. + * + * @deprecated Will be removed in next major version. */ async getContentByTypeForSpace( parameters: Parameters.GetContentByTypeForSpace, diff --git a/src/api/spacePermissions.ts b/src/api/spacePermissions.ts index b78b6d31..f1b14c4f 100644 --- a/src/api/spacePermissions.ts +++ b/src/api/spacePermissions.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class SpacePermissions { diff --git a/src/api/spaceProperties.ts b/src/api/spaceProperties.ts index c127fabe..b7fe0731 100644 --- a/src/api/spaceProperties.ts +++ b/src/api/spaceProperties.ts @@ -4,6 +4,7 @@ import type { Callback } from '../callback'; import type { Client } from '../clients'; import type { RequestConfig } from '../requestConfig'; +/** @deprecated Will be removed in next major version. */ export class SpaceProperties { constructor(private client: Client) {} @@ -11,6 +12,8 @@ export class SpaceProperties { * Returns all properties for the given space. Space properties are a key-value storage associated with a space. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘View’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async getSpaceProperties( parameters: Parameters.GetSpaceProperties, @@ -20,6 +23,8 @@ export class SpaceProperties { * Returns all properties for the given space. Space properties are a key-value storage associated with a space. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘View’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async getSpaceProperties( parameters: Parameters.GetSpaceProperties, @@ -46,6 +51,8 @@ export class SpaceProperties { * Creates a new space property. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async createSpaceProperty( parameters: Parameters.CreateSpaceProperty, @@ -55,6 +62,8 @@ export class SpaceProperties { * Creates a new space property. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async createSpaceProperty( parameters: Parameters.CreateSpaceProperty, @@ -81,6 +90,8 @@ export class SpaceProperties { * Returns a space property. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘View’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async getSpaceProperty( parameters: Parameters.GetSpaceProperty, @@ -90,6 +101,8 @@ export class SpaceProperties { * Returns a space property. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘View’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async getSpaceProperty( parameters: Parameters.GetSpaceProperty, @@ -115,6 +128,8 @@ export class SpaceProperties { * property is passed as a path parameter, rather than in the request body. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async createSpacePropertyForKey( parameters: Parameters.CreateSpacePropertyForKey, @@ -125,6 +140,8 @@ export class SpaceProperties { * property is passed as a path parameter, rather than in the request body. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async createSpacePropertyForKey( parameters: Parameters.CreateSpacePropertyForKey, @@ -149,6 +166,8 @@ export class SpaceProperties { * Updates a space property. Note, you cannot update the key of a space property, only the value. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async updateSpaceProperty( parameters: Parameters.UpdateSpaceProperty, @@ -158,6 +177,8 @@ export class SpaceProperties { * Updates a space property. Note, you cannot update the key of a space property, only the value. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async updateSpaceProperty( parameters: Parameters.UpdateSpaceProperty, @@ -183,12 +204,16 @@ export class SpaceProperties { * Deletes a space property. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async deleteSpaceProperty(parameters: Parameters.DeleteSpaceProperty, callback: Callback): Promise; /** * Deletes a space property. * * **[Permissions required](https://confluence.atlassian.com/x/_AozKw)**: ‘Admin’ permission for the space. + * + * @deprecated Will be removed in next major version. */ async deleteSpaceProperty(parameters: Parameters.DeleteSpaceProperty, callback?: never): Promise; async deleteSpaceProperty( diff --git a/src/api/spaceSettings.ts b/src/api/spaceSettings.ts index 5fa4218e..aab1685b 100644 --- a/src/api/spaceSettings.ts +++ b/src/api/spaceSettings.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class SpaceSettings { diff --git a/src/api/template.ts b/src/api/template.ts index e635e220..52975269 100644 --- a/src/api/template.ts +++ b/src/api/template.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Template { diff --git a/src/api/themes.ts b/src/api/themes.ts index 1bbc4f42..b95f09e4 100644 --- a/src/api/themes.ts +++ b/src/api/themes.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Themes { diff --git a/src/api/userProperties.ts b/src/api/userProperties.ts new file mode 100644 index 00000000..a5fcba89 --- /dev/null +++ b/src/api/userProperties.ts @@ -0,0 +1,185 @@ +import type * as Models from './models'; +import type * as Parameters from './parameters'; +import type { Client } from '../clients'; +import type { Callback } from '../callback'; +import type { RequestConfig } from '../requestConfig'; + +export class UserProperties { + constructor(private client: Client) {} + + /** + * Returns the properties for a user as list of property keys. For more information about user properties, see + * [Confluence entity properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). + * `Note`, these properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async getUserProperties( + parameters: Parameters.GetUserProperties, + callback: Callback, + ): Promise; + /** + * Returns the properties for a user as list of property keys. For more information about user properties, see + * [Confluence entity properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). + * `Note`, these properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async getUserProperties( + parameters: Parameters.GetUserProperties, + callback?: never, + ): Promise; + async getUserProperties( + parameters: Parameters.GetUserProperties, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/user/${parameters.userId}/property`, + method: 'GET', + params: { + start: parameters.start, + limit: parameters.limit, + }, + }; + + return this.client.sendRequest(config, callback); + } + + /** + * Returns the property corresponding to `key` for a user. For more information about user properties, see [Confluence + * entity properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these + * properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async getUserProperty( + parameters: Parameters.GetUserProperty, + callback: Callback, + ): Promise; + /** + * Returns the property corresponding to `key` for a user. For more information about user properties, see [Confluence + * entity properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these + * properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async getUserProperty(parameters: Parameters.GetUserProperty, callback?: never): Promise; + async getUserProperty( + parameters: Parameters.GetUserProperty, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/user/${parameters.userId}/property/${parameters.key}`, + method: 'GET', + }; + + return this.client.sendRequest(config, callback); + } + + /** + * Creates a property for a user. For more information about user properties, see [Confluence entity properties] + * (https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these properties stored + * against a user are on a Confluence site level and not space/content level. + * + * `Note:` the number of properties which could be created per app in a tenant for each user might be restricted by + * fixed system limits. **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access + * the Confluence site ('Can use' global permission). + */ + async createUserProperty( + parameters: Parameters.CreateUserProperty, + callback: Callback, + ): Promise; + /** + * Creates a property for a user. For more information about user properties, see [Confluence entity properties] + * (https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these properties stored + * against a user are on a Confluence site level and not space/content level. + * + * `Note:` the number of properties which could be created per app in a tenant for each user might be restricted by + * fixed system limits. **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access + * the Confluence site ('Can use' global permission). + */ + async createUserProperty(parameters: Parameters.CreateUserProperty, callback?: never): Promise; + async createUserProperty( + parameters: Parameters.CreateUserProperty, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/user/${parameters.userId}/property/${parameters.key}`, + method: 'POST', + data: { + value: parameters.value, + }, + }; + + return this.client.sendRequest(config, callback); + } + + /** + * Updates a property for the given user. Note, you cannot update the key of a user property, only the value. For more + * information about user properties, see [Confluence entity + * properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these + * properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async updateUserProperty(parameters: Parameters.UpdateUserProperty, callback: Callback): Promise; + /** + * Updates a property for the given user. Note, you cannot update the key of a user property, only the value. For more + * information about user properties, see [Confluence entity + * properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these + * properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async updateUserProperty(parameters: Parameters.UpdateUserProperty, callback?: never): Promise; + async updateUserProperty( + parameters: Parameters.UpdateUserProperty, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/user/${parameters.userId}/property/${parameters.key}`, + method: 'PUT', + data: { + value: parameters.value, + }, + }; + + return this.client.sendRequest(config, callback); + } + + /** + * Deletes a property for the given user. For more information about user properties, see [Confluence entity + * properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these + * properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async deleteUserProperty(parameters: Parameters.DeleteUserProperty, callback: Callback): Promise; + /** + * Deletes a property for the given user. For more information about user properties, see [Confluence entity + * properties](https://developer.atlassian.com/cloud/confluence/confluence-entity-properties/). `Note`, these + * properties stored against a user are on a Confluence site level and not space/content level. + * + * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site + * ('Can use' global permission). + */ + async deleteUserProperty(parameters: Parameters.DeleteUserProperty, callback?: never): Promise; + async deleteUserProperty( + parameters: Parameters.DeleteUserProperty, + callback?: Callback, + ): Promise { + const config: RequestConfig = { + url: `/api/user/${parameters.userId}/property/${parameters.key}`, + method: 'DELETE', + }; + + return this.client.sendRequest(config, callback); + } +} diff --git a/src/api/users.ts b/src/api/users.ts index 9d869f4d..a2c97e29 100644 --- a/src/api/users.ts +++ b/src/api/users.ts @@ -1,7 +1,7 @@ import type * as Models from './models'; import type * as Parameters from './parameters'; -import type { Callback } from '../callback'; import type { Client } from '../clients'; +import type { Callback } from '../callback'; import type { RequestConfig } from '../requestConfig'; export class Users { @@ -153,7 +153,8 @@ export class Users { } /** - * Returns user details for the ids provided in request. + * Returns user details for the ids provided in the request. Currently this API returns a maximum of 100 results. If + * more than 100 account ids are passed in, then the first 100 will be returned. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). @@ -163,7 +164,8 @@ export class Users { callback: Callback, ): Promise; /** - * Returns user details for the ids provided in request. + * Returns user details for the ids provided in the request. Currently this API returns a maximum of 100 results. If + * more than 100 account ids are passed in, then the first 100 will be returned. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). @@ -190,8 +192,10 @@ export class Users { } /** - * Returns a user's email address. This API is only available to apps approved by Atlassian, according to these + * Returns a user's email address regardless of the user’s profile visibility settings. For Connect apps, this API is + * only available to apps approved by Atlassian, according to these * [guidelines](https://community.developer.atlassian.com/t/guidelines-for-requesting-access-to-email-address/27603). + * For Forge apps, this API only supports access via asApp() requests. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). @@ -201,8 +205,10 @@ export class Users { callback: Callback, ): Promise; /** - * Returns a user's email address. This API is only available to apps approved by Atlassian, according to these + * Returns a user's email address regardless of the user’s profile visibility settings. For Connect apps, this API is + * only available to apps approved by Atlassian, according to these * [guidelines](https://community.developer.atlassian.com/t/guidelines-for-requesting-access-to-email-address/27603). + * For Forge apps, this API only supports access via asApp() requests. * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site * ('Can use' global permission). @@ -227,9 +233,10 @@ export class Users { } /** - * Returns user email addresses for a set of accountIds. This API is only available to apps approved by Atlassian, - * according to these + * Returns a user's email address regardless of the user’s profile visibility settings. For Connect apps, this API is + * only available to apps approved by Atlassian, according to these * [guidelines](https://community.developer.atlassian.com/t/guidelines-for-requesting-access-to-email-address/27603). + * For Forge apps, this API only supports access via asApp() requests. * * Any accounts which are not available will not be included in the result. * @@ -241,9 +248,10 @@ export class Users { callback: Callback, ): Promise; /** - * Returns user email addresses for a set of accountIds. This API is only available to apps approved by Atlassian, - * according to these + * Returns a user's email address regardless of the user’s profile visibility settings. For Connect apps, this API is + * only available to apps approved by Atlassian, according to these * [guidelines](https://community.developer.atlassian.com/t/guidelines-for-requesting-access-to-email-address/27603). + * For Forge apps, this API only supports access via asApp() requests. * * Any accounts which are not available will not be included in the result. * @@ -275,6 +283,8 @@ export class Users { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Confluence Administrator' global permission * if specifying a user, otherwise permission to access the Confluence site ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getBulkUserMigration( parameters: Parameters.GetBulkUserMigration, @@ -286,6 +296,8 @@ export class Users { * * **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: 'Confluence Administrator' global permission * if specifying a user, otherwise permission to access the Confluence site ('Can use' global permission). + * + * @deprecated Will be removed in next major version. */ async getBulkUserMigration( parameters: Parameters.GetBulkUserMigration, diff --git a/src/clients/baseClient.ts b/src/clients/baseClient.ts index d831dd5d..fefa64f8 100644 --- a/src/clients/baseClient.ts +++ b/src/clients/baseClient.ts @@ -4,11 +4,7 @@ import axios from 'axios'; import { getAuthenticationToken } from '~/services'; import type { Callback } from '~/callback'; import type { Client } from './client'; -import { - ConfigSchema, - type Config, - type Error as ConfluenceError, -} from '~/config'; +import { ConfigSchema, type Config, type Error as ConfluenceError } from '~/config'; import type { RequestConfig } from '~/requestConfig'; import { ZodError } from 'zod'; diff --git a/src/clients/confluenceClient.ts b/src/clients/confluenceClient.ts index 6d87723b..2492e222 100644 --- a/src/clients/confluenceClient.ts +++ b/src/clients/confluenceClient.ts @@ -32,6 +32,7 @@ import { Template, Themes, Users, + UserProperties, } from '../api'; export class ConfluenceClient extends BaseClient { @@ -48,10 +49,12 @@ export class ConfluenceClient extends BaseClient { contentAttachments = new ContentAttachments(this); contentBody = new ContentBody(this); contentChildrenAndDescendants = new ContentChildrenAndDescendants(this); + /** @deprecated Will be removed in next major version. */ contentComments = new ContentComments(this); contentLabels = new ContentLabels(this); contentMacroBody = new ContentMacroBody(this); contentPermissions = new ContentPermissions(this); + /** @deprecated Will be removed in next major version. */ contentProperties = new ContentProperties(this); contentRestrictions = new ContentRestrictions(this); contentStates = new ContentStates(this); @@ -60,6 +63,7 @@ export class ConfluenceClient extends BaseClient { dynamicModules = new DynamicModules(this); experimental = new Experimental(this); group = new Group(this); + /** @deprecated Will be removed in next major version. */ inlineTasks = new InlineTasks(this); labelInfo = new LabelInfo(this); longRunningTask = new LongRunningTask(this); @@ -68,9 +72,11 @@ export class ConfluenceClient extends BaseClient { settings = new Settings(this); space = new Space(this); spacePermissions = new SpacePermissions(this); + /** @deprecated Will be removed in next major version. */ spaceProperties = new SpaceProperties(this); spaceSettings = new SpaceSettings(this); template = new Template(this); themes = new Themes(this); users = new Users(this); + userProperties = new UserProperties(this); } diff --git a/src/config.ts b/src/config.ts index 1fbd828e..e7ef4313 100644 --- a/src/config.ts +++ b/src/config.ts @@ -54,7 +54,10 @@ export const MiddlewaresSchema = z.object({ }); export const ConfigSchema = z.object({ - host: z.string().url({ message: 'Couldn\'t parse the host URL. Perhaps you forgot to add \'http://\' or \'https://\' at the beginning of the URL?' }), + host: z.string().url({ + message: + 'Couldn\'t parse the host URL. Perhaps you forgot to add \'http://\' or \'https://\' at the beginning of the URL?', + }), baseRequestConfig: z.optional(RequestConfigSchema), authentication: z.optional(AuthenticationSchema), middlewares: z.optional(MiddlewaresSchema), diff --git a/src/services/authenticationService/authentications/createJWTAuthentication.ts b/src/services/authenticationService/authentications/createJWTAuthentication.ts index da8b8b32..ae48f7bd 100644 --- a/src/services/authenticationService/authentications/createJWTAuthentication.ts +++ b/src/services/authenticationService/authentications/createJWTAuthentication.ts @@ -1,4 +1,4 @@ -import * as jwt from 'atlassian-jwt'; +import * as jwt from '@atlassian/atlassian-jwt'; import type { JWT } from '~'; export function createJWTAuthentication( diff --git a/tests/unit/api/contentBody.test.ts b/tests/unit/api/contentBody.test.ts new file mode 100644 index 00000000..ec390e31 --- /dev/null +++ b/tests/unit/api/contentBody.test.ts @@ -0,0 +1,97 @@ +import { describe, it, expect, vi } from 'vitest'; +import { ContentBody } from '~/api/contentBody'; + +describe('asyncConvertContentBodyRequest', () => { + const mockClient = { + sendRequest: vi.fn().mockResolvedValue({ id: '123' }), + }; + const client = new ContentBody(mockClient); + + it('should handle all parameters correctly in the request config', async () => { + const testParams = { + to: 'view', + value: '

test content

', + representation: 'storage', + spaceKeyContext: 'TEST', + contentIdContext: '12345', + allowCache: true, + embeddedContentRender: 'full', + expand: 'body.view', + additionalProperties: { + customProp: 'value', + }, + }; + + await client.asyncConvertContentBodyRequest(testParams); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/contentbody/convert/async/view', + method: 'POST', + params: { + spaceKeyContext: 'TEST', + contentIdContext: '12345', + allowCache: true, + embeddedContentRender: 'full', + expand: 'body.view', + }, + data: { + value: '

test content

', + representation: 'storage', + customProp: 'value', + }, + }), + undefined, + ); + }); + + it('should handle callback when provided', async () => { + const testParams = { + to: 'view', + value: '

test content

', + representation: 'storage', + }; + const mockCallback = vi.fn(); + + await client.asyncConvertContentBodyRequest(testParams, mockCallback); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.any(Object), + mockCallback, + ); + }); + + it('should return a promise with AsyncId when no callback provided', async () => { + const testParams = { + to: 'view', + value: '

test content

', + representation: 'storage', + }; + + const result = await client.asyncConvertContentBodyRequest(testParams); + expect(result).toEqual({ id: '123' }); + }); + + it('should handle minimal required parameters', async () => { + const testParams = { + to: 'view', + value: '

test content

', + representation: 'storage', + }; + + await client.asyncConvertContentBodyRequest(testParams); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/contentbody/convert/async/view', + method: 'POST', + params: {}, + data: { + value: '

test content

', + representation: 'storage', + }, + }), + undefined, + ); + }); +}); diff --git a/tests/unit/api/group.test.ts b/tests/unit/api/group.test.ts new file mode 100644 index 00000000..87ddb16a --- /dev/null +++ b/tests/unit/api/group.test.ts @@ -0,0 +1,381 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { Group } from '~/api'; +import type { Client } from '~/clients'; + +describe('Group', () => { + let mockClient: Client; + let group: Group; + + beforeEach(() => { + mockClient = { + sendRequest: vi.fn(), + } as unknown as Client; + group = new Group(mockClient); + }); + + describe('method availability', () => { + it('should have getGroups method', () => { + expect(group.getGroups).toBeDefined(); + expect(typeof group.getGroups).toBe('function'); + }); + + it('should have createGroup method', () => { + expect(group.createGroup).toBeDefined(); + expect(typeof group.createGroup).toBe('function'); + }); + + it('should have removeGroup method', () => { + expect(group.removeGroup).toBeDefined(); + expect(typeof group.removeGroup).toBe('function'); + }); + + it('should have getGroupByQueryParam method', () => { + expect(group.getGroupByQueryParam).toBeDefined(); + expect(typeof group.getGroupByQueryParam).toBe('function'); + }); + + it('should have getGroupByGroupId method', () => { + expect(group.getGroupByGroupId).toBeDefined(); + expect(typeof group.getGroupByGroupId).toBe('function'); + }); + + it('should have removeGroupById method', () => { + expect(group.removeGroupById).toBeDefined(); + expect(typeof group.removeGroupById).toBe('function'); + }); + + it('should have getGroupByName method', () => { + expect(group.getGroupByName).toBeDefined(); + expect(typeof group.getGroupByName).toBe('function'); + }); + + it('should have getMembersByQueryParam method', () => { + expect(group.getMembersByQueryParam).toBeDefined(); + expect(typeof group.getMembersByQueryParam).toBe('function'); + }); + + it('should have getGroupMembers method', () => { + expect(group.getGroupMembers).toBeDefined(); + expect(typeof group.getGroupMembers).toBe('function'); + }); + + it('should have searchGroups method', () => { + expect(group.searchGroups).toBeDefined(); + expect(typeof group.searchGroups).toBe('function'); + }); + + it('should have addUserToGroupByGroupId method', () => { + expect(group.addUserToGroupByGroupId).toBeDefined(); + expect(typeof group.addUserToGroupByGroupId).toBe('function'); + }); + + it('should have removeMemberFromGroupByGroupId method', () => { + expect(group.removeMemberFromGroupByGroupId).toBeDefined(); + expect(typeof group.removeMemberFromGroupByGroupId).toBe('function'); + }); + + it('should have getGroupMembersByGroupId method', () => { + expect(group.getGroupMembersByGroupId).toBeDefined(); + expect(typeof group.getGroupMembersByGroupId).toBe('function'); + }); + + it('should have addUserToGroup method', () => { + expect(group.addUserToGroup).toBeDefined(); + expect(typeof group.addUserToGroup).toBe('function'); + }); + + it('should have removeMemberFromGroup method', () => { + expect(group.removeMemberFromGroup).toBeDefined(); + expect(typeof group.removeMemberFromGroup).toBe('function'); + }); + }); + + describe('method implementations', () => { + it('getGroups should call client.sendRequest with correct config', async () => { + const params = { start: 0, limit: 50, accessType: 'some-type' }; + await group.getGroups(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group', + method: 'GET', + params: { + start: params.start, + limit: params.limit, + accessType: params.accessType, + }, + }), + undefined, + ); + }); + + it('createGroup should call client.sendRequest with correct config', async () => { + const params = { name: 'test-group' }; + await group.createGroup(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group', + method: 'POST', + data: { + name: params.name, + }, + }), + undefined, + ); + }); + + it('removeGroup should call client.sendRequest with correct config', async () => { + const params = { name: 'test-group' }; + await group.removeGroup(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group', + method: 'DELETE', + params: { + name: params.name, + }, + }), + undefined, + ); + }); + + it('getGroupByQueryParam should call client.sendRequest with correct config', async () => { + const params = { name: 'test-group' }; + await group.getGroupByQueryParam(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/by-name', + method: 'GET', + params: { + name: params.name, + }, + }), + undefined, + ); + }); + + it('getGroupByGroupId should call client.sendRequest with correct config', async () => { + const params = { id: '12345' }; + await group.getGroupByGroupId(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/by-id', + method: 'GET', + params: { + id: params.id, + }, + }), + undefined, + ); + }); + + it('removeGroupById should call client.sendRequest with correct config', async () => { + const params = { id: '12345' }; + await group.removeGroupById(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/by-id', + method: 'DELETE', + params: { + id: params.id, + }, + }), + undefined, + ); + }); + + it('getGroupByName should call client.sendRequest with correct config', async () => { + const params = { groupName: 'test-group' }; + await group.getGroupByName(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/test-group', + method: 'GET', + }), + undefined, + ); + }); + + it('getMembersByQueryParam should call client.sendRequest with correct config', async () => { + const params = { + name: 'test-group', + start: 0, + limit: 50, + shouldReturnTotalSize: true, + }; + await group.getMembersByQueryParam(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/member', + method: 'GET', + params: { + name: params.name, + start: params.start, + limit: params.limit, + shouldReturnTotalSize: params.shouldReturnTotalSize, + }, + }), + undefined, + ); + }); + + it('getGroupMembers should call client.sendRequest with correct config', async () => { + const params = { + groupName: 'test-group', + start: 0, + limit: 50, + }; + await group.getGroupMembers(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/test-group/member', + method: 'GET', + params: { + start: params.start, + limit: params.limit, + }, + }), + undefined, + ); + }); + + it('searchGroups should call client.sendRequest with correct config', async () => { + const params = { + query: 'test', + start: 0, + limit: 50, + shouldReturnTotalSize: true, + }; + await group.searchGroups(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/picker', + method: 'GET', + params: { + query: params.query, + start: params.start, + limit: params.limit, + shouldReturnTotalSize: params.shouldReturnTotalSize, + }, + }), + undefined, + ); + }); + + it('addUserToGroupByGroupId should call client.sendRequest with correct config', async () => { + const params = { + groupId: '12345', + accountId: '67890', + }; + await group.addUserToGroupByGroupId(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/userByGroupId', + method: 'POST', + params: { + groupId: params.groupId, + }, + data: { + accountId: params.accountId, + }, + }), + undefined, + ); + }); + + it('removeMemberFromGroupByGroupId should call client.sendRequest with correct config', async () => { + const params = { + groupId: '12345', + accountId: '67890', + }; + await group.removeMemberFromGroupByGroupId(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/userByGroupId', + method: 'DELETE', + params: { + groupId: params.groupId, + accountId: params.accountId, + }, + }), + undefined, + ); + }); + + it('getGroupMembersByGroupId should call client.sendRequest with correct config', async () => { + const params = { + groupId: '12345', + start: 0, + limit: 50, + shouldReturnTotalSize: true, + }; + await group.getGroupMembersByGroupId(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/12345/membersByGroupId', + method: 'GET', + params: { + start: params.start, + limit: params.limit, + shouldReturnTotalSize: params.shouldReturnTotalSize, + }, + }), + undefined, + ); + }); + + it('addUserToGroup should call client.sendRequest with correct config', async () => { + const params = { + name: 'test-group', + accountId: '67890', + }; + await group.addUserToGroup(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/user', + method: 'POST', + params: { + name: params.name, + }, + data: { + accountId: params.accountId, + }, + }), + undefined, + ); + }); + + it('removeMemberFromGroup should call client.sendRequest with correct config', async () => { + const params = { + name: 'test-group', + accountId: '67890', + }; + await group.removeMemberFromGroup(params); + + expect(mockClient.sendRequest).toHaveBeenCalledWith( + expect.objectContaining({ + url: '/api/group/user', + method: 'DELETE', + params: { + name: params.name, + accountId: params.accountId, + }, + }), + undefined, + ); + }); + }); +}); diff --git a/tests/unit/clients/baseClient.test.ts b/tests/unit/clients/baseClient.test.ts new file mode 100644 index 00000000..e865567c --- /dev/null +++ b/tests/unit/clients/baseClient.test.ts @@ -0,0 +1,35 @@ +import { describe, it, expect } from 'vitest'; +import { BaseClient } from '~/clients/baseClient'; +import type { Config } from '~/config'; + +describe('BaseClient', () => { + describe('constructor', () => { + it('should set default apiPrefix if not provided', () => { + const config: Config = { host: 'https://example.com' }; + + new BaseClient(config); + + expect(config.apiPrefix).toBe('/wiki/rest/'); + }); + + it('should keep provided apiPrefix if specified', () => { + const config: Config = { + host: 'https://example.com', + apiPrefix: '/custom/api/', + }; + + new BaseClient(config); + + expect(config.apiPrefix).toBe('/custom/api/'); + }); + + it('should throw ZodError when config validation fails', () => { + const config = { + host: 'invalid-url', // Invalid URL should fail validation + apiPrefix: '/wiki/rest/', + }; + + expect(() => new BaseClient(config)).toThrowError('Couldn\'t parse the host URL. Perhaps you forgot to add \'http://\' or \'https://\' at the beginning of the URL?'); + }); + }); +}); diff --git a/tests/unit/clients/confluenceClient.test.ts b/tests/unit/clients/confluenceClient.test.ts new file mode 100644 index 00000000..a8936298 --- /dev/null +++ b/tests/unit/clients/confluenceClient.test.ts @@ -0,0 +1,31 @@ +import { beforeEach, describe, expect, it } from 'vitest'; +import { ConfluenceClient } from '~/clients'; + +describe('Confluence Client', () => { + let instance: ConfluenceClient; + + beforeEach(() => { + instance = new ConfluenceClient({ host: 'https://127.0.0.1' }); + }); + + it('should have contentComments api group', () => { + expect(instance).toHaveProperty('contentComments'); + }); + + it('should have contentProperties api group', () => { + expect(instance).toHaveProperty('contentProperties'); + }); + + it('should have inlineTasks api group', () => { + expect(instance).toHaveProperty('inlineTasks'); + }); + + it('should have spaceProperties api group', () => { + expect(instance).toHaveProperty('spaceProperties'); + }); + + it('should have userProperties api group', () => { + expect(instance).toHaveProperty('userProperties'); + }); +}); + diff --git a/tests/unit/index.test.ts b/tests/unit/index.test.ts index be88dbce..69fd8061 100644 --- a/tests/unit/index.test.ts +++ b/tests/unit/index.test.ts @@ -6,7 +6,7 @@ import type { RequestConfig } from '../../src'; import { BaseClient, - ConfluenceClient + ConfluenceClient, } from '../../src'; describe('Type definitions', () => { From bbb00d8ffe1643084764ce7563141e28b05e760c Mon Sep 17 00:00:00 2001 From: Vladislav Tupikin Date: Thu, 17 Jul 2025 00:12:43 +0300 Subject: [PATCH 3/3] #145: add `start` and `limit` properties for `contentChildrenAndDescendants.getContentChildren` (#148) --- CHANGELOG.md | 1 + src/api/contentChildrenAndDescendants.ts | 2 + src/api/parameters/getContentChildren.ts | 8 ++- .../api/contentChildrenAndDescendants.test.ts | 55 +++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tests/unit/api/contentChildrenAndDescendants.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 078c9e4a..ec3bd0f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ - Added `key` property to `longRunningTask.getTasks` - Added `sitePermissionTypeFilter` property to `search.searchUser` - Added `alias` property to both `space.createSpace` and `space.createPrivateSpace` + - #145 Added `start` and `limit` properties to `contentChildrenAndDescendants.getContentChildren`. Thanks to @javierbrea for requesting this feature. ### **API Changes** 🔄 - **Experimental methods moved**: diff --git a/src/api/contentChildrenAndDescendants.ts b/src/api/contentChildrenAndDescendants.ts index 9c3c40e7..a5985464 100644 --- a/src/api/contentChildrenAndDescendants.ts +++ b/src/api/contentChildrenAndDescendants.ts @@ -65,6 +65,8 @@ export class ContentChildrenAndDescendants { params: { expand: parameters.expand, parentVersion: parameters.parentVersion, + start: parameters.start, + limit: parameters.limit, }, }; diff --git a/src/api/parameters/getContentChildren.ts b/src/api/parameters/getContentChildren.ts index 3f7a320c..0e08c893 100644 --- a/src/api/parameters/getContentChildren.ts +++ b/src/api/parameters/getContentChildren.ts @@ -1,3 +1,5 @@ +import type { OneOrMany } from '../../interfaces'; + export interface GetContentChildren { /** The ID of the content to be queried for its children. */ id: string; @@ -9,7 +11,11 @@ export interface GetContentChildren { * - `page` returns all child pages of the content. * - Custom content types that are provided by apps are also supported. */ - expand?: string[]; + expand?: OneOrMany<'attachment' | 'comments' | 'page' | string>; /** The version of the parent content to retrieve children for. Currently, this only works for the latest version. */ parentVersion?: number; + /** The starting index of the returned content children. */ + start?: number; + /** The maximum number of content children to return per page. */ + limit?: number; } diff --git a/tests/unit/api/contentChildrenAndDescendants.test.ts b/tests/unit/api/contentChildrenAndDescendants.test.ts new file mode 100644 index 00000000..4313ec99 --- /dev/null +++ b/tests/unit/api/contentChildrenAndDescendants.test.ts @@ -0,0 +1,55 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { ContentChildrenAndDescendants } from '~/api/contentChildrenAndDescendants'; +import type { RequestConfig } from '~/requestConfig'; + +describe('getContentChildren', () => { + let client: ContentChildrenAndDescendants; + const mockSendRequest = vi.fn(); + + beforeEach(() => { + // Create a fresh instance for each test + mockSendRequest.mockReset(); + mockSendRequest.mockResolvedValue({}); + client = new ContentChildrenAndDescendants({ + sendRequest: mockSendRequest, + }); + }); + + it('should use all parameters in the request config', async () => { + // Arrange + const testParams = { + id: '12345', + expand: ['body.view', 'version'], + parentVersion: 2, + start: 10, + limit: 25, + }; + + // Mock the successful response + mockSendRequest.mockResolvedValue({ + page: [], + comment: [], + attachment: [], + }); + + // Act + await client.getContentChildren(testParams); + + // Assert + expect(mockSendRequest).toHaveBeenCalledTimes(1); + + const calledConfig: RequestConfig = mockSendRequest.mock.calls[0][0]; + + // Verify URL construction with content ID + expect(calledConfig.url).toBe(`/api/content/${testParams.id}/child`); + expect(calledConfig.method).toBe('GET'); + + // Verify all query parameters + expect(calledConfig.params).toEqual({ + expand: testParams.expand, + parentVersion: testParams.parentVersion, + start: testParams.start, + limit: testParams.limit, + }); + }); +});