Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 51 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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:

Expand Down
63 changes: 32 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,37 +172,38 @@ const results = await client.search.search({ cql: 'title~"Project"' });
<details>
<summary>🔽 Available API Groups</summary>

- [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)

</details>

Expand Down
27 changes: 11 additions & 16 deletions eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'] },
Expand All @@ -17,30 +16,31 @@ 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',
{
exceptAfterOverload: true,
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' },
// Import statements
{ 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',
{
Expand All @@ -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"]
},
},
]);
57 changes: 29 additions & 28 deletions package.json
Original file line number Diff line number Diff line change
@@ -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 <vladislav.tupikin@icloud.com>",
"license": "MIT",
Expand All @@ -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"
},
Expand Down Expand Up @@ -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"
}
}
Loading