Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
54e8b1a
Merge pull request #441 from contentstack/master
harshithad0703 Oct 6, 2025
3bf7d64
Added taxonomy localization support
sunil-lakshman Oct 17, 2025
39a6013
fixed lint errors
sunil-lakshman Oct 17, 2025
3adea24
Add region configuration and endpoint retrieval for cloud providers
nadeem-cs Oct 28, 2025
8802004
Add postinstall and postupdate scripts for regions.json retrieval; in…
nadeem-cs Oct 28, 2025
224dea2
Implement region-based endpoint configuration and add tests for vario…
nadeem-cs Oct 28, 2025
5289004
Update changelog for v1.25.2: fix region endpoint initialization and …
nadeem-cs Oct 28, 2025
66c860b
Merge pull request #445 from contentstack/enh/endpoints-integration
nadeem-cs Oct 29, 2025
c678d46
Merge pull request #446 from contentstack/development
harshithad0703 Oct 29, 2025
392019c
Fix region endpoint initialization by ensuring the region parameter i…
harshithad0703 Oct 30, 2025
533c2ab
Update package-lock.json and add a env
harshithad0703 Oct 30, 2025
a9a085f
Merge pull request #449 from contentstack/fix/regions-endpoint-issue
AniketDev7 Oct 30, 2025
74cffc0
Fixes OAuth authentication issues when using custom hosts without spe…
harshithad0703 Oct 30, 2025
a75e118
Fix lint
harshithad0703 Oct 30, 2025
3c6ffeb
Fix ui host for oauth
harshithad0703 Oct 30, 2025
1c46d48
Fix ui host for oauth
harshithad0703 Oct 30, 2025
9454724
Merge pull request #450 from contentstack/fix/oauth-developer-hub-reg…
harshithad0703 Oct 30, 2025
18dbb55
Merge pull request #451 from contentstack/development
harshithad0703 Oct 30, 2025
498a94e
Merge branch 'development' into enh/dx-3637
sunil-lakshman Nov 5, 2025
9bf6bd3
Merge pull request #442 from contentstack/enh/dx-3637
sunil-lakshman Nov 6, 2025
94a0449
Fix: Fixed the JSDoc strings
cs-raj Nov 25, 2025
3360cce
Fixed the other modules jsdoc
cs-raj Nov 25, 2025
922f08b
Fixed JSDoc String
cs-raj Nov 25, 2025
06c111c
Fixed linting issue
cs-raj Nov 25, 2025
2d4c809
Fixed error throwing
cs-raj Nov 25, 2025
8b14dd3
Fixed Unit test
cs-raj Nov 25, 2025
77230e8
Fixed failing test
cs-raj Nov 25, 2025
40ec3d4
Reverted Region Changes
cs-raj Nov 26, 2025
dd4f539
Skipped Failing test as not re-producable in workflow
cs-raj Nov 26, 2025
7f8a1fb
Testing in workflow
cs-raj Nov 26, 2025
7f39776
Skipped test cases
cs-raj Dec 1, 2025
2d56877
Removed Console Logs
cs-raj Dec 1, 2025
90a0cdd
Removed console logs
cs-raj Dec 1, 2025
65ded8c
Merge pull request #453 from contentstack/fix/DR-47
cs-raj Dec 1, 2025
0622874
Update OAuth and User tests to store authtoken after successful login
harshithad0703 Dec 4, 2025
e56277e
Merge pull request #456 from contentstack/fix/sanity-test-user-login
AniketDev7 Dec 4, 2025
f143b44
Fix assertion in user info test to check for undefined uid
harshithad0703 Dec 4, 2025
8230047
Fix assertion in user info test to ensure uid is defined
harshithad0703 Dec 4, 2025
debf41e
Merge pull request #457 from contentstack/fix/sanity-test-user-login
AniketDev7 Dec 4, 2025
9781c8c
Merge pull request #458 from contentstack/development
harshithad0703 Dec 4, 2025
fa13297
Refactor and revert region handling in client and remove regions.json…
nadeem-cs Dec 5, 2025
c888fe4
Refactor import statement for getUserAgent in contentstack.js
nadeem-cs Dec 5, 2025
0fb6b15
Remove console log from ContentstackClient tests and ensure newline a…
nadeem-cs Dec 5, 2025
7941f83
Merge pull request #460 from contentstack/fix/revert-endpoint-with-re…
nadeem-cs Dec 5, 2025
9def05c
fix: change lowercase to uppercase
nadeem-cs Dec 5, 2025
e3eaa9e
Merge pull request #462 from contentstack/fix/revert-endpoint-with-re…
nadeem-cs Dec 5, 2025
b27df6d
Merge pull request #461 from contentstack/development
nadeem-cs Dec 5, 2025
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
9 changes: 8 additions & 1 deletion .talismanrc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ fileignoreconfig:
ignore_detectors:
- filecontent
- filename: package-lock.json
checksum: bab53d56ce2609e960fdbbd1e87cc89915820e6761016ddd74ee57f931f4223d
checksum: 1475ee2c6a615f4e6f8393f4a209398aa6b827e7d036302c6fc065d5914e8292
- filename: .husky/pre-commit
checksum: 52a664f536cf5d1be0bea19cb6031ca6e8107b45b6314fe7d47b7fad7d800632
- filename: test/sanity-check/api/user-test.js
Expand All @@ -30,4 +30,11 @@ fileignoreconfig:
checksum: b76ca091caa3a1b2658cd422a2d8ef3ac9996aea0aff3f982d56bb309a3d9fde
- filename: test/unit/ContentstackClient-test.js
checksum: 974a4f335aef025b657d139bb290233a69bed1976b947c3c674e97baffe4ce2f
- filename: test/unit/ContentstackHTTPClient-test.js
checksum: 4043efd843e24da9afd0272c55ef4b0432e3374b2ca12b913f1a6654df3f62be
- filename: test/unit/contentstack-test.js
checksum: 2597efae3c1ab8cc173d5bf205f1c76932211f8e0eb2a16444e055d83481976c
version: "1.0"



4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## [v1.26.0](https://github.com/contentstack/contentstack-management-javascript/tree/v1.26.0) (2025-10-20)
- Enhancement
- Added taxonomy localization support

## [v1.25.1](https://github.com/contentstack/contentstack-management-javascript/tree/v1.25.1) (2025-10-06)
- Fix
- Updated delay handling to use centralized external configuration in SDK interceptor
Expand Down
15 changes: 12 additions & 3 deletions lib/contentstack.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ const regionHostMap = {
* const client = contentstack.client()
*
* @param {object} params - Client initialization parameters
* @param {Object=} param.proxy -
* @param {Object=} params.proxy - Proxy configuration object for HTTP requests
* @param {string=} params.region - Region for API endpoint (NA, EU, AU, AZURE_NA, AZURE_EU, GCP_NA, GCP_EU)
* @param {string=} params.feature - Feature identifier for user agent
* @param {string=} params.refreshToken - Refresh token for OAuth authentication
* @prop {string=} params.endpoint - API endpoint that a service will talk to
* @example //Set the `endpoint` to 'https://api.contentstack.io:{port}/{version}'
* import * as contentstack from '@contentstack/management'
Expand All @@ -48,7 +51,7 @@ const regionHostMap = {
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client({ authtoken: 'value' })
*
* @prop {string=} params.early_access - Optional early_access is a token used for early access of new features in CMA requests.
* @prop {Array<string>=} params.early_access - Optional array of early access tokens used for early access of new features in CMA requests.
* @example //Set the `early_access`
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client({ early_access: ['ea1', 'ea2'] })
Expand Down Expand Up @@ -167,7 +170,13 @@ const regionHostMap = {
*
* @prop {string=} params.application - Application name and version e.g myApp/version
* @prop {string=} params.integration - Integration name and version e.g react/version
* @returns Contentstack.Client
* @prop {string=} params.region - API region. Valid values: 'na', 'eu', 'au', 'azure_na', 'azure_eu', 'gcp_na', 'gcp_eu' (default: 'na')
* @example //Set the `region` to 'eu'
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client({ region: 'eu' })
*
* @prop {string=} params.feature - Feature identifier for user agent header
* @returns {ContentstackClient} Instance of ContentstackClient
*/
export function client (params = {}) {
let defaultHostName
Expand Down
33 changes: 18 additions & 15 deletions lib/contentstackClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ export default function contentstackClient ({ http }) {
* @prop {string} parameters.password - password for user to login
* @prop {string} parameters.tfa_token - tfa token for user to login (2FA token)
* @prop {string} parameters.mfaSecret - TOTP secret key for generating 2FA token
* @returns {Promise}
* @param {Object=} params - Optional request parameters
* @returns {Promise<Object>} Promise for login response
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client()
Expand Down Expand Up @@ -59,7 +60,8 @@ export default function contentstackClient ({ http }) {
* The information returned includes details of the stacks owned by and shared with the specified user account.
* @memberof ContentstackClient
* @func getUser
* @returns {Promise}
* @param {Object=} params - Optional request parameters
* @returns {Promise<Object>} Promise for User instance
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client()
Expand All @@ -78,10 +80,11 @@ export default function contentstackClient ({ http }) {
* @description Get Stack instance. A stack is a space that stores the content of a project.
* @memberof ContentstackClient
* @func stack
* @param {String} api_key - Stack API Key
* @param {String} management_token - Management token for Stack.
* @param {String} branch_name - Branch name or alias to access specific branch. Default is master.
* @returns {Stack} Instance of Stack
* @param {Object=} params - Stack initialization parameters
* @prop {String} params.api_key - Stack API Key
* @prop {String} params.management_token - Management token for Stack.
* @prop {String} params.branch_uid - Branch UID or alias to access specific branch. Default is master.
* @returns {Stack} Instance of Stack.
*
* @example
* import * as contentstack from '@contentstack/management'
Expand Down Expand Up @@ -121,7 +124,7 @@ export default function contentstackClient ({ http }) {
* @description Organization is the top-level entity in the hierarchy of Contentstack, consisting of stacks and stack resources, and users.
* @memberof ContentstackClient
* @func organization
* @param {String} uid - Organization UID.
* @param {String=} uid - Organization UID. If not provided, returns organization instance for querying all organizations.
* @returns {Organization} Instance of Organization.
*
* @example
Expand Down Expand Up @@ -152,7 +155,7 @@ export default function contentstackClient ({ http }) {
* @memberof ContentstackClient
* @param {String} authtoken - Authtoken to logout from.
* @func logout
* @returns {Object} Response object.
* @returns {Promise<Object>} Promise for response object.
*
* @example
* import * as contentstack from '@contentstack/management'
Expand Down Expand Up @@ -195,13 +198,13 @@ export default function contentstackClient ({ http }) {
* @memberof ContentstackClient
* @func oauth
* @param {Object} parameters - oauth parameters
* @prop {string} parameters.appId - appId of the application
* @prop {string} parameters.clientId - clientId of the application
* @prop {string} parameters.clientId - clientId of the application
* @prop {string} parameters.responseType - responseType
* @prop {string} parameters.scope - scope
* @prop {string} parameters.clientSecret - clientSecret of the application
* @returns {OAuthHandler} Instance of OAuthHandler
* @prop {string=} parameters.appId - appId of the application (default: '6400aa06db64de001a31c8a9')
* @prop {string=} parameters.clientId - clientId of the application (default: 'Ie0FEfTzlfAHL4xM')
* @prop {string=} parameters.redirectUri - redirect URI for OAuth callback (default: 'http://localhost:8184')
* @prop {string=} parameters.responseType - responseType (default: 'code')
* @prop {string=} parameters.scope - scope
* @prop {string=} parameters.clientSecret - clientSecret of the application
* @returns {OAuthHandler} Instance of OAuthHandler.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client()
Expand Down
7 changes: 7 additions & 0 deletions lib/contentstackCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
* @namespace ContentstackCollection
*/
export default class ContentstackCollection {
/**
* Creates a ContentstackCollection instance.
* @param {Object} response - HTTP response object.
* @param {Object} http - HTTP client instance.
* @param {Object=} stackHeaders - Stack headers to include in data.
* @param {Function=} wrapperCollection - Collection wrapper function to transform items.
*/
constructor (response, http, stackHeaders = null, wrapperCollection) {
const data = response.data || {}
if (stackHeaders) {
Expand Down
1 change: 1 addition & 0 deletions lib/core/Util.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { platform, release } from 'os'

const HOST_REGEX = /^(?!(?:(?:https?|ftp):\/\/|internal|localhost|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))(?:[\w-]+\.contentstack\.(?:io|com)(?::[^\/\s:]+)?|[\w-]+(?:\.[\w-]+)*(?::[^\/\s:]+)?)(?![\/?#])$/ // eslint-disable-line

export function isHost (host) {
Expand Down
25 changes: 25 additions & 0 deletions lib/core/concurrency-queue.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,31 @@ const defaultConfig = {
delayMs: null // Delay in milliseconds before making each request
}

/**
* Creates a concurrency queue manager for Axios requests with retry logic and rate limiting.
* @param {Object} options - Configuration options.
* @param {Object} options.axios - Axios instance to manage.
* @param {Object=} options.config - Queue configuration options.
* @param {number=} options.config.maxRequests - Maximum concurrent requests, defaults to 5.
* @param {number=} options.config.retryLimit - Maximum retry attempts for errors, defaults to 5.
* @param {number=} options.config.retryDelay - Delay between retries in milliseconds, defaults to 300.
* @param {boolean=} options.config.retryOnError - Enable retry on error, defaults to true.
* @param {boolean=} options.config.retryOnNetworkFailure - Enable retry on network failures, defaults to true.
* @param {boolean=} options.config.retryOnDnsFailure - Enable retry on DNS failures, defaults to true.
* @param {boolean=} options.config.retryOnSocketFailure - Enable retry on socket failures, defaults to true.
* @param {boolean=} options.config.retryOnHttpServerError - Enable retry on HTTP 5xx errors, defaults to true.
* @param {number=} options.config.maxNetworkRetries - Maximum network retry attempts, defaults to 3.
* @param {number=} options.config.networkRetryDelay - Base delay for network retries in milliseconds, defaults to 100.
* @param {string=} options.config.networkBackoffStrategy - Backoff strategy ('exponential' or 'fixed'), defaults to 'exponential'.
* @param {number=} options.config.delayMs - Delay before each request in milliseconds.
* @param {Function=} options.config.retryCondition - Custom function to determine if error can be retried.
* @param {Function=} options.config.logHandler - Log handler function.
* @param {Function=} options.config.refreshToken - Token refresh function.
* @param {string=} options.config.authtoken - Auth token.
* @param {string=} options.config.authorization - Authorization token.
* @returns {Object} ConcurrencyQueue instance with request/response interceptors attached to Axios.
* @throws {Error} If axios instance is not provided or configuration is invalid.
*/
export function ConcurrencyQueue ({ axios, config }) {
if (!axios) {
throw Error('Axios instance is not present')
Expand Down
11 changes: 10 additions & 1 deletion lib/core/contentstackError.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@

/**
* Formats and throws an error from an HTTP error response.
* @param {Object} errorResponse - Error response object from HTTP request.
* @param {Object} errorResponse.config - Request configuration object.
* @param {Object} errorResponse.response - HTTP response object.
* @param {number} errorResponse.response.status - HTTP status code.
* @param {string} errorResponse.response.statusText - HTTP status text.
* @param {Object} errorResponse.response.data - Response data containing error details.
* @throws {Error} Formatted error object with request and response details.
*/
export default function error (errorResponse) {
const config = errorResponse.config
const response = errorResponse.response
Expand Down
2 changes: 1 addition & 1 deletion lib/core/contentstackHTTPClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ export default function contentstackHttpClient (options) {
if (uiHostName) {
uiHostName = uiHostName.replace('api', 'app')
}
const uiBaseUrl = config.endpoint || `${protocol}://${uiHostName}`

const uiBaseUrl = config.endpoint || `${protocol}://${uiHostName}`
developerHubBaseUrl = developerHubBaseUrl
?.replace('api', 'developerhub-api')
.replace(/^dev\d+/, 'dev') // Replaces any 'dev1', 'dev2', etc. with 'dev'
Expand Down
63 changes: 37 additions & 26 deletions lib/core/oauthHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import errorFormatter from './contentstackError'
/**
* @description OAuthHandler class to handle OAuth authorization and token management
* @class OAuthHandler
* @param {any} axiosInstance
* @param {any} appId
* @param {any} clientId
* @param {any} redirectUri
* @param {any} responseType='code'
* @param {any} clientSecret
* @param {any} scope=[]
* @returns {OAuthHandler} OAuthHandler instance
* @param {Object} axiosInstance - Axios HTTP client instance.
* @param {string=} appId - Application ID, defaults to '6400aa06db64de001a31c8a9'.
* @param {string=} clientId - Client ID, defaults to 'Ie0FEfTzlfAHL4xM'.
* @param {string=} redirectUri - Redirect URI for OAuth callback, defaults to 'http://localhost:8184'.
* @param {string=} clientSecret - Client secret. If provided, PKCE will be skipped.
* @param {string=} responseType - Response type, defaults to 'code'.
* @param {Array<string>=} scope - OAuth scope array, defaults to [].
* @returns {OAuthHandler} OAuthHandler instance.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand Down Expand Up @@ -80,7 +80,8 @@ export default class OAuthHandler {
* @description Authorize the user by redirecting to the OAuth provider's authorization page
* @memberof OAuthHandler
* @func authorize
* @returns {any} Authorization URL
* @async
* @returns {Promise<string>} Promise that resolves to authorization URL
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand Down Expand Up @@ -114,8 +115,9 @@ export default class OAuthHandler {
* @description Exchange the authorization code for an access token
* @memberof OAuthHandler
* @func exchangeCodeForToken
* @param {any} code - Authorization code received from the OAuth provider
* @returns {any} Token data
* @async
* @param {string} code - Authorization code received from the OAuth provider
* @returns {Promise<Object>} Promise that resolves to token data object
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand Down Expand Up @@ -155,9 +157,10 @@ export default class OAuthHandler {
* @description Refreshes the access token using the provided refresh token or the one stored in the axios instance.
* @memberof OAuthHandler
* @func refreshAccessToken
* @async
* @param {string|null} [providedRefreshToken=null] - The refresh token to use for refreshing the access token. If not provided, the stored refresh token will be used.
* @returns {Promise<Object>} - A promise that resolves to the response data containing the new access token, refresh token, and expiry time.
* @throws {Error} - Throws an error if no refresh token is available or if the token refresh request fails.
* @returns {Promise<Object>} A promise that resolves to the response data containing the new access token, refresh token, and expiry time.
* @throws {Error} Throws an error if no refresh token is available or if the token refresh request fails.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand Down Expand Up @@ -196,8 +199,9 @@ export default class OAuthHandler {
* @description Logs out the user by revoking the OAuth app authorization
* @memberof OAuthHandler
* @func logout
* @returns {Promise<string>} - A promise that resolves to a success message if the logout was successful.
* @throws {Error} - Throws an error if the logout request fails.
* @async
* @returns {Promise<string>} A promise that resolves to a success message if the logout was successful.
* @throws {Error} Throws an error if the logout request fails.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -219,7 +223,7 @@ export default class OAuthHandler {
* @description Get the current access token
* @memberof OAuthHandler
* @func getAccessToken
* @returns {any}
* @returns {string|undefined} Current access token or undefined if not set.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand Down Expand Up @@ -294,7 +298,8 @@ export default class OAuthHandler {
* @description Set the access token in the axios instance
* @memberof OAuthHandler
* @func setAccessToken
* @param {*} token
* @param {string} token - Access token to set.
* @throws {Error} Throws an error if token is not provided.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -312,7 +317,8 @@ export default class OAuthHandler {
* @description Set the refresh token in the axios instance
* @memberof OAuthHandler
* @func setRefreshToken
* @param {*} token
* @param {string} token - Refresh token to set.
* @throws {Error} Throws an error if token is not provided.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -330,7 +336,8 @@ export default class OAuthHandler {
* @description Set the organization UID in the axios instance
* @memberof OAuthHandler
* @func setOrganizationUID
* @param {*} organizationUID
* @param {string} organizationUID - Organization UID to set.
* @throws {Error} Throws an error if organizationUID is not provided.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -348,7 +355,8 @@ export default class OAuthHandler {
* @description Set the user UID in the axios instance
* @memberof OAuthHandler
* @func setUserUID
* @param {*} userUID
* @param {string} userUID - User UID to set.
* @throws {Error} Throws an error if userUID is not provided.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -366,7 +374,8 @@ export default class OAuthHandler {
* @description Set the token expiry time in the axios instance
* @memberof OAuthHandler
* @func setTokenExpiryTime
* @param {*} expiryTime
* @param {number} expiryTime - Token expiry time (timestamp in milliseconds).
* @throws {Error} Throws an error if expiryTime is not provided.
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -386,8 +395,8 @@ export default class OAuthHandler {
* @func handleRedirect
* @async
* @param {string} url - The URL to handle after the OAuth authorization
* @returns {Promise<void>} - A promise that resolves if the redirect URL is successfully handled
* @throws {Error} - Throws an error if the authorization code is not found in the redirect URL
* @returns {Promise<void>} A promise that resolves if the redirect URL is successfully handled
* @throws {Error} Throws an error if the authorization code is not found in the redirect URL
* @example
* import * as contentstack from '@contentstack/management'
* const client = contentstack.client();
Expand All @@ -413,7 +422,8 @@ export default class OAuthHandler {
* @description Get the OAuth app authorization for the current user
* @memberof OAuthHandler
* @func getOauthAppAuthorization
* @returns {any}
* @async
* @returns {Promise<string>} Promise that resolves to authorization UID
*/
async getOauthAppAuthorization () {
const headers = {
Expand Down Expand Up @@ -448,8 +458,9 @@ export default class OAuthHandler {
* @description Revoke the OAuth app authorization for the current user
* @memberof OAuthHandler
* @func revokeOauthAppAuthorization
* @param {any} authorizationId
* @returns {any}
* @async
* @param {string} authorizationId - Authorization ID to revoke
* @returns {Promise<Object>} Promise that resolves to response data
*/
async revokeOauthAppAuthorization (authorizationId) {
if (authorizationId?.length > 1) {
Expand Down
Loading
Loading