@alfresco/js-api 9.5.0-25850979174 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/esm2015/package.json +1 -2
  2. package/esm2015/src/alfrescoApiClient.js +2 -2
  3. package/esm2015/src/alfrescoApiClient.js.map +1 -1
  4. package/esm2015/src/authentication/oauth2Auth.js +9 -5
  5. package/esm2015/src/authentication/oauth2Auth.js.map +1 -1
  6. package/esm2015/src/fetchHttpClient.js +409 -0
  7. package/esm2015/src/fetchHttpClient.js.map +1 -0
  8. package/esm2015/src/utils/is-browser.js.map +1 -1
  9. package/esm5/package.json +1 -2
  10. package/esm5/src/alfrescoApiClient.js +2 -2
  11. package/esm5/src/alfrescoApiClient.js.map +1 -1
  12. package/esm5/src/authentication/oauth2Auth.js +9 -5
  13. package/esm5/src/authentication/oauth2Auth.js.map +1 -1
  14. package/esm5/src/fetchHttpClient.js +409 -0
  15. package/esm5/src/fetchHttpClient.js.map +1 -0
  16. package/esm5/src/utils/is-browser.js.map +1 -1
  17. package/package.json +1 -2
  18. package/src/alfrescoApiClient.js +2 -2
  19. package/src/alfrescoApiClient.js.map +1 -1
  20. package/src/authentication/oauth2Auth.js +9 -5
  21. package/src/authentication/oauth2Auth.js.map +1 -1
  22. package/src/fetchHttpClient.js +413 -0
  23. package/src/fetchHttpClient.js.map +1 -0
  24. package/src/utils/is-browser.js.map +1 -1
  25. package/typings/package.json +1 -2
  26. package/typings/src/fetchHttpClient.d.ts +45 -0
  27. package/esm2015/src/superagentHttpClient.js +0 -264
  28. package/esm2015/src/superagentHttpClient.js.map +0 -1
  29. package/esm5/src/superagentHttpClient.js +0 -264
  30. package/esm5/src/superagentHttpClient.js.map +0 -1
  31. package/src/superagentHttpClient.js +0 -269
  32. package/src/superagentHttpClient.js.map +0 -1
  33. package/typings/src/superagentHttpClient.d.ts +0 -69
@@ -1 +1 @@
1
- {"version":3,"file":"alfrescoApiClient.js","sourceRoot":"","sources":["alfrescoApiClient.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport { AlfrescoApiConfig } from './alfrescoApiConfig';\nimport { Authentication } from './authentication/authentication';\nimport { SuperagentHttpClient } from './superagentHttpClient';\nimport { Emitters, HttpClient, LegacyHttpClient, RequestOptions, SecurityOptions } from './api-clients/http-client.interface';\nimport { paramToString } from './utils';\nimport { Storage } from './storage';\nimport { EventEmitterInstance } from './types';\n\ndeclare const Buffer: any;\n\nexport type AlfrescoApiClientPromise<T = any> = Promise<T> & {\n on: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n off: <K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n once: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n emit: <K extends string | symbol>(event: K, ...args: any[]) => boolean;\n abort?: () => void;\n};\n\n/**\n * Builds a string representation of an array-type actual parameter, according to the given collection format.\n * @param param An array parameter.\n * @param collectionFormat The array element separator strategy.\n * @returns A string representation of the supplied collection, using the specified delimiter. Returns\n * <code>param</code> as is if <code>collectionFormat</code> is <code>multi</code>.\n */\nexport function buildCollectionParam(param: string[], collectionFormat: string): string | any[] {\n if (!param) {\n return null;\n }\n\n switch (collectionFormat) {\n case 'csv':\n return param.map(paramToString).join(',');\n case 'ssv':\n return param.map(paramToString).join(' ');\n case 'tsv':\n return param.map(paramToString).join('\\t');\n case 'pipes':\n return param.map(paramToString).join('|');\n case 'multi':\n // return the array directly as SuperAgent will handle it as expected\n return param.map(paramToString);\n default:\n throw new Error('Unknown collection format: ' + collectionFormat);\n }\n}\n\nexport class AlfrescoApiClient implements LegacyHttpClient {\n private readonly eventEmitter = new EventEmitter();\n\n storage: Storage;\n host: string;\n className: string;\n config: AlfrescoApiConfig;\n url: string;\n /**\n * The base URL against which to resolve every API call's (relative) path.\n */\n basePath = '';\n\n /**\n * The authentication methods to be included for all API calls.\n */\n authentications: Authentication = {\n basicAuth: {\n ticket: ''\n },\n type: 'basic'\n };\n /**\n * The default HTTP headers to be included for all API calls.\n */\n defaultHeaders = {};\n\n /**\n * The default HTTP timeout for all API calls.\n */\n timeout: number | { deadline?: number; response?: number } = undefined;\n\n contentTypes = {\n JSON: ['application/json']\n };\n\n httpClient: HttpClient;\n\n constructor(host?: string, httpClient?: HttpClient) {\n this.host = host;\n this.storage = Storage.getInstance();\n // fallback for backward compatibility\n this.httpClient = httpClient || new SuperagentHttpClient();\n }\n\n // EventEmitter delegation methods\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.on(event, fn, context);\n return this;\n }\n\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.off(event, fn, context);\n return this;\n }\n\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.once(event, fn, context);\n return this;\n }\n\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return this.eventEmitter.emit(event, ...args);\n }\n\n request<T = any>(options: RequestOptions): Promise<T> {\n return this.buildRequestCall(this.basePath, options, this.httpClient.request.bind(this.httpClient));\n }\n\n post<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.post.bind(this.httpClient));\n }\n\n put<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.put.bind(this.httpClient));\n }\n\n get<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.get.bind(this.httpClient));\n }\n\n delete<T = void>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall<T>(url, options, this.httpClient.delete.bind(this.httpClient));\n }\n\n callApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string,\n url?: string\n ): AlfrescoApiClientPromise<any> {\n const callApiUrl = url ?? this.getCallApiUrl({ contextRoot, path, pathParams });\n\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType,\n url\n };\n\n return this.buildRequestCall(callApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n callCustomApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string\n ): AlfrescoApiClientPromise<any> {\n const customApiUrl = AlfrescoApiClient.buildUrl(path, '', pathParams);\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType\n };\n\n return this.buildRequestCall(customApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n isCsrfEnabled(): boolean {\n if (this.config) {\n return !this.config.disableCsrf;\n } else {\n return true;\n }\n }\n\n isBpmRequest(): boolean {\n return this.className === 'ProcessAuth' || this.className === 'ProcessClient';\n }\n\n basicAuth(username: string, password: string): string {\n const str = username + ':' + password;\n\n let base64;\n\n if (typeof Buffer === 'function') {\n base64 = Buffer.from(str, 'binary').toString('base64');\n } else {\n base64 = btoa(str);\n }\n\n return 'Basic ' + base64;\n }\n\n isWithCredentials(): boolean {\n return !!this.config?.withCredentials;\n }\n\n getAlfTicket(ticket: string): string {\n const ticketParam = this.isWithCredentials() ? '&ticket=' : '&alf_ticket=';\n\n if (ticket) {\n return ticketParam + ticket;\n } else {\n const ticketConfig = this.config.ticketEcm;\n const ticketStorage = this.storage.getItem('ticket-ECM');\n\n if (ticketConfig && ticketStorage && ticketConfig !== ticketStorage) {\n this.emit('ticket_mismatch', { newTicket: ticketStorage });\n return ticketParam + ticketStorage;\n } else if (ticketConfig) {\n return ticketParam + ticketConfig;\n } else if (ticketStorage) {\n return ticketParam + ticketStorage;\n }\n }\n\n return '';\n }\n\n /**\n * Builds full URL by appending the given path to the base URL and replacing path parameter place-holders\n * with parameter values\n */\n private static buildUrl(basePath: string, path: string, pathParams: any): string {\n if (path && path !== '' && !path.match(/^\\//)) {\n path = '/' + path;\n }\n const url = basePath + path;\n\n return AlfrescoApiClient.addParamsToUrl(url, pathParams);\n }\n\n private static addParamsToUrl(path: string, pathParams: any) {\n return path.replace(/\\{([\\w-]+)}/g, (fullMatch, key) => {\n let value;\n\n if (Object.prototype.hasOwnProperty.call(pathParams, key)) {\n value = paramToString(pathParams[key]);\n } else {\n value = fullMatch;\n }\n\n return encodeURIComponent(value);\n });\n }\n\n private getCallApiUrl({ contextRoot, path, pathParams }: { contextRoot?: string; path: string; pathParams?: any }): string {\n const basePath = contextRoot ? `${this.host}/${contextRoot}` : this.basePath;\n\n return AlfrescoApiClient.buildUrl(basePath, path, pathParams);\n }\n\n private buildRequestCall<T = any>(\n url: string,\n options: RequestOptions,\n httpCall: (url: string, options: RequestOptions, security: SecurityOptions, emitters: Emitters) => Promise<T>\n ): AlfrescoApiClientPromise<T> {\n const security = this.getSecurityOptions();\n const emitters = this.getEventEmitters();\n const httpRequestOptions = this.getRequestOptionsWithAcceptAndContentType(options);\n const promise = httpCall(url, httpRequestOptions, security, emitters);\n\n return this.addPromiseListeners(promise, emitters.eventEmitter);\n }\n\n private getSecurityOptions(): SecurityOptions {\n return {\n isBpmRequest: this.isBpmRequest(),\n enableCsrf: this.isCsrfEnabled(),\n withCredentials: this.isWithCredentials(),\n authentications: this.authentications,\n defaultHeaders: this.defaultHeaders\n };\n }\n\n private getEventEmitters(): Emitters {\n const apiClientEmitter = {\n on: this.on.bind(this),\n off: this.off.bind(this),\n once: this.once.bind(this),\n emit: this.emit.bind(this)\n };\n\n return {\n apiClientEmitter,\n eventEmitter: new EventEmitter()\n };\n }\n\n private getRequestOptionsWithAcceptAndContentType(options: RequestOptions): RequestOptions {\n const contentType = AlfrescoApiClient.jsonPreferredMime(options.contentTypes);\n const accept = AlfrescoApiClient.jsonPreferredMime(options.accepts);\n\n return {\n ...options,\n contentType,\n accept\n };\n }\n\n /**\n * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.\n * @param contentTypes content types\n * @returns The chosen content type, preferring JSON.\n */\n private static jsonPreferredMime(contentTypes: readonly string[]): string {\n if (!contentTypes?.length) {\n return 'application/json';\n }\n\n for (const item of contentTypes) {\n if (AlfrescoApiClient.isJsonMime(item)) {\n return item;\n }\n }\n return contentTypes[0];\n }\n\n /**\n * Checks whether the given content type represents JSON.<br>\n *\n * JSON content type examples:<br>\n * <ul>\n * <li>application/json</li>\n * <li>application/json; charset=UTF8</li>\n * <li>APPLICATION/JSON</li>\n * </ul>\n * @param contentType The MIME content type to check.\n * @returns <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.\n */\n private static isJsonMime(contentType: string): boolean {\n return Boolean(contentType?.match(/^application\\/json(;.*)?$/i));\n }\n\n addPromiseListeners<T = any>(promise: Promise<T>, eventEmitter: EventEmitterInstance): AlfrescoApiClientPromise<T> {\n return Object.assign(promise, {\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.on(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.once(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return eventEmitter.emit(event, ...args);\n },\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.off(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"alfrescoApiClient.js","sourceRoot":"","sources":["alfrescoApiClient.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport { AlfrescoApiConfig } from './alfrescoApiConfig';\nimport { Authentication } from './authentication/authentication';\nimport { FetchHttpClient } from './fetchHttpClient';\nimport { Emitters, HttpClient, LegacyHttpClient, RequestOptions, SecurityOptions } from './api-clients/http-client.interface';\nimport { paramToString } from './utils';\nimport { Storage } from './storage';\nimport { EventEmitterInstance } from './types';\n\ndeclare const Buffer: any;\n\nexport type AlfrescoApiClientPromise<T = any> = Promise<T> & {\n on: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n off: <K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n once: <K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any) => AlfrescoApiClientPromise<T>;\n emit: <K extends string | symbol>(event: K, ...args: any[]) => boolean;\n abort?: () => void;\n};\n\n/**\n * Builds a string representation of an array-type actual parameter, according to the given collection format.\n * @param param An array parameter.\n * @param collectionFormat The array element separator strategy.\n * @returns A string representation of the supplied collection, using the specified delimiter. Returns\n * <code>param</code> as is if <code>collectionFormat</code> is <code>multi</code>.\n */\nexport function buildCollectionParam(param: string[], collectionFormat: string): string | any[] {\n if (!param) {\n return null;\n }\n\n switch (collectionFormat) {\n case 'csv':\n return param.map(paramToString).join(',');\n case 'ssv':\n return param.map(paramToString).join(' ');\n case 'tsv':\n return param.map(paramToString).join('\\t');\n case 'pipes':\n return param.map(paramToString).join('|');\n case 'multi':\n // return the array directly as SuperAgent will handle it as expected\n return param.map(paramToString);\n default:\n throw new Error('Unknown collection format: ' + collectionFormat);\n }\n}\n\nexport class AlfrescoApiClient implements LegacyHttpClient {\n private readonly eventEmitter = new EventEmitter();\n\n storage: Storage;\n host: string;\n className: string;\n config: AlfrescoApiConfig;\n url: string;\n /**\n * The base URL against which to resolve every API call's (relative) path.\n */\n basePath = '';\n\n /**\n * The authentication methods to be included for all API calls.\n */\n authentications: Authentication = {\n basicAuth: {\n ticket: ''\n },\n type: 'basic'\n };\n /**\n * The default HTTP headers to be included for all API calls.\n */\n defaultHeaders = {};\n\n /**\n * The default HTTP timeout for all API calls.\n */\n timeout: number | { deadline?: number; response?: number } = undefined;\n\n contentTypes = {\n JSON: ['application/json']\n };\n\n httpClient: HttpClient;\n\n constructor(host?: string, httpClient?: HttpClient) {\n this.host = host;\n this.storage = Storage.getInstance();\n // fallback for backward compatibility\n this.httpClient = httpClient || new FetchHttpClient();\n }\n\n // EventEmitter delegation methods\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.on(event, fn, context);\n return this;\n }\n\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.off(event, fn, context);\n return this;\n }\n\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): this {\n this.eventEmitter.once(event, fn, context);\n return this;\n }\n\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return this.eventEmitter.emit(event, ...args);\n }\n\n request<T = any>(options: RequestOptions): Promise<T> {\n return this.buildRequestCall(this.basePath, options, this.httpClient.request.bind(this.httpClient));\n }\n\n post<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.post.bind(this.httpClient));\n }\n\n put<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.put.bind(this.httpClient));\n }\n\n get<T = any>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall(url, options, this.httpClient.get.bind(this.httpClient));\n }\n\n delete<T = void>(options: RequestOptions): AlfrescoApiClientPromise<T> {\n const url = this.getCallApiUrl(options);\n return this.buildRequestCall<T>(url, options, this.httpClient.delete.bind(this.httpClient));\n }\n\n callApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string,\n url?: string\n ): AlfrescoApiClientPromise<any> {\n const callApiUrl = url ?? this.getCallApiUrl({ contextRoot, path, pathParams });\n\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType,\n url\n };\n\n return this.buildRequestCall(callApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n callCustomApi(\n path: string,\n httpMethod: string,\n pathParams?: any,\n queryParams?: any,\n headerParams?: any,\n formParams?: any,\n bodyParam?: any,\n contentTypes?: string[],\n accepts?: string[],\n returnType?: any,\n contextRoot?: string,\n responseType?: string\n ): AlfrescoApiClientPromise<any> {\n const customApiUrl = AlfrescoApiClient.buildUrl(path, '', pathParams);\n const options: RequestOptions = {\n path,\n httpMethod,\n pathParams,\n queryParams,\n headerParams,\n formParams,\n bodyParam,\n contentTypes,\n accepts,\n returnType,\n contextRoot,\n responseType\n };\n\n return this.buildRequestCall(customApiUrl, options, this.httpClient.request.bind(this.httpClient));\n }\n\n isCsrfEnabled(): boolean {\n if (this.config) {\n return !this.config.disableCsrf;\n } else {\n return true;\n }\n }\n\n isBpmRequest(): boolean {\n return this.className === 'ProcessAuth' || this.className === 'ProcessClient';\n }\n\n basicAuth(username: string, password: string): string {\n const str = username + ':' + password;\n\n let base64;\n\n if (typeof Buffer === 'function') {\n base64 = Buffer.from(str, 'binary').toString('base64');\n } else {\n base64 = btoa(str);\n }\n\n return 'Basic ' + base64;\n }\n\n isWithCredentials(): boolean {\n return !!this.config?.withCredentials;\n }\n\n getAlfTicket(ticket: string): string {\n const ticketParam = this.isWithCredentials() ? '&ticket=' : '&alf_ticket=';\n\n if (ticket) {\n return ticketParam + ticket;\n } else {\n const ticketConfig = this.config.ticketEcm;\n const ticketStorage = this.storage.getItem('ticket-ECM');\n\n if (ticketConfig && ticketStorage && ticketConfig !== ticketStorage) {\n this.emit('ticket_mismatch', { newTicket: ticketStorage });\n return ticketParam + ticketStorage;\n } else if (ticketConfig) {\n return ticketParam + ticketConfig;\n } else if (ticketStorage) {\n return ticketParam + ticketStorage;\n }\n }\n\n return '';\n }\n\n /**\n * Builds full URL by appending the given path to the base URL and replacing path parameter place-holders\n * with parameter values\n */\n private static buildUrl(basePath: string, path: string, pathParams: any): string {\n if (path && path !== '' && !path.match(/^\\//)) {\n path = '/' + path;\n }\n const url = basePath + path;\n\n return AlfrescoApiClient.addParamsToUrl(url, pathParams);\n }\n\n private static addParamsToUrl(path: string, pathParams: any) {\n return path.replace(/\\{([\\w-]+)}/g, (fullMatch, key) => {\n let value;\n\n if (Object.prototype.hasOwnProperty.call(pathParams, key)) {\n value = paramToString(pathParams[key]);\n } else {\n value = fullMatch;\n }\n\n return encodeURIComponent(value);\n });\n }\n\n private getCallApiUrl({ contextRoot, path, pathParams }: { contextRoot?: string; path: string; pathParams?: any }): string {\n const basePath = contextRoot ? `${this.host}/${contextRoot}` : this.basePath;\n\n return AlfrescoApiClient.buildUrl(basePath, path, pathParams);\n }\n\n private buildRequestCall<T = any>(\n url: string,\n options: RequestOptions,\n httpCall: (url: string, options: RequestOptions, security: SecurityOptions, emitters: Emitters) => Promise<T>\n ): AlfrescoApiClientPromise<T> {\n const security = this.getSecurityOptions();\n const emitters = this.getEventEmitters();\n const httpRequestOptions = this.getRequestOptionsWithAcceptAndContentType(options);\n const promise = httpCall(url, httpRequestOptions, security, emitters);\n\n return this.addPromiseListeners(promise, emitters.eventEmitter);\n }\n\n private getSecurityOptions(): SecurityOptions {\n return {\n isBpmRequest: this.isBpmRequest(),\n enableCsrf: this.isCsrfEnabled(),\n withCredentials: this.isWithCredentials(),\n authentications: this.authentications,\n defaultHeaders: this.defaultHeaders\n };\n }\n\n private getEventEmitters(): Emitters {\n const apiClientEmitter = {\n on: this.on.bind(this),\n off: this.off.bind(this),\n once: this.once.bind(this),\n emit: this.emit.bind(this)\n };\n\n return {\n apiClientEmitter,\n eventEmitter: new EventEmitter()\n };\n }\n\n private getRequestOptionsWithAcceptAndContentType(options: RequestOptions): RequestOptions {\n const contentType = AlfrescoApiClient.jsonPreferredMime(options.contentTypes);\n const accept = AlfrescoApiClient.jsonPreferredMime(options.accepts);\n\n return {\n ...options,\n contentType,\n accept\n };\n }\n\n /**\n * Chooses a content type from the given array, with JSON preferred; i.e. return JSON if included, otherwise return the first.\n * @param contentTypes content types\n * @returns The chosen content type, preferring JSON.\n */\n private static jsonPreferredMime(contentTypes: readonly string[]): string {\n if (!contentTypes?.length) {\n return 'application/json';\n }\n\n for (const item of contentTypes) {\n if (AlfrescoApiClient.isJsonMime(item)) {\n return item;\n }\n }\n return contentTypes[0];\n }\n\n /**\n * Checks whether the given content type represents JSON.<br>\n *\n * JSON content type examples:<br>\n * <ul>\n * <li>application/json</li>\n * <li>application/json; charset=UTF8</li>\n * <li>APPLICATION/JSON</li>\n * </ul>\n * @param contentType The MIME content type to check.\n * @returns <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.\n */\n private static isJsonMime(contentType: string): boolean {\n return Boolean(contentType?.match(/^application\\/json(;.*)?$/i));\n }\n\n addPromiseListeners<T = any>(promise: Promise<T>, eventEmitter: EventEmitterInstance): AlfrescoApiClientPromise<T> {\n return Object.assign(promise, {\n on<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.on(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n once<K extends string | symbol>(event: K, fn: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.once(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n },\n emit<K extends string | symbol>(event: K, ...args: any[]): boolean {\n return eventEmitter.emit(event, ...args);\n },\n off<K extends string | symbol>(event: K, fn?: (...args: any[]) => void, context?: any): AlfrescoApiClientPromise<T> {\n eventEmitter.off(event, fn, context);\n return this as AlfrescoApiClientPromise<T>;\n }\n });\n }\n}\n"]}
@@ -20,6 +20,7 @@ import { AlfrescoApiClient } from '../alfrescoApiClient';
20
20
  import { AuthenticationApi } from '../api/auth-rest-api';
21
21
  import { Storage } from '../storage';
22
22
  import { PathMatcher } from '../utils/path-matcher';
23
+ import { isBrowser } from '../utils';
23
24
  export class Oauth2Auth extends AlfrescoApiClient {
24
25
  constructor(config, alfrescoApi, httpClient) {
25
26
  super(undefined, httpClient);
@@ -252,7 +253,8 @@ export class Oauth2Auth extends AlfrescoApiClient {
252
253
  }
253
254
  }
254
255
  isRedirectionUrl() {
255
- return window.location.hash && window.location.hash.split('&')[0].indexOf('session_state') === -1;
256
+ var _a;
257
+ return ((_a = window.location.hash) === null || _a === void 0 ? void 0 : _a.split('&')[0].indexOf('session_state')) === -1;
256
258
  }
257
259
  genNonce() {
258
260
  let text = '';
@@ -313,7 +315,7 @@ export class Oauth2Auth extends AlfrescoApiClient {
313
315
  let hash;
314
316
  if (!externalHash) {
315
317
  hash = decodeURIComponent(window.location.hash);
316
- if (hash && !this.startWithHashRoute(hash)) {
318
+ if (!this.startWithHashRoute(hash)) {
317
319
  window.location.hash = '';
318
320
  }
319
321
  }
@@ -368,7 +370,7 @@ export class Oauth2Auth extends AlfrescoApiClient {
368
370
  return data;
369
371
  }
370
372
  silentRefresh() {
371
- if (typeof document === 'undefined') {
373
+ if (!isBrowser()) {
372
374
  this.pollingRefreshToken();
373
375
  return;
374
376
  }
@@ -439,7 +441,8 @@ export class Oauth2Auth extends AlfrescoApiClient {
439
441
  this.storeAccessToken(data.access_token, data.expires_in, data.refresh_token);
440
442
  resolve(data);
441
443
  }, (error) => {
442
- if ((error.error && error.error.status === 401) || error.status === 401) {
444
+ var _a;
445
+ if (((_a = error.error) === null || _a === void 0 ? void 0 : _a.status) === 401 || error.status === 401) {
443
446
  this.emit('unauthorized');
444
447
  }
445
448
  this.emit('error');
@@ -475,7 +478,8 @@ export class Oauth2Auth extends AlfrescoApiClient {
475
478
  this.setToken(data.access_token, data.refresh_token);
476
479
  resolve(data);
477
480
  }, (error) => {
478
- if (error.error && error.error.status === 401) {
481
+ var _a;
482
+ if (((_a = error.error) === null || _a === void 0 ? void 0 : _a.status) === 401) {
479
483
  this.emit('unauthorized');
480
484
  }
481
485
  this.emit('error');
@@ -1 +1 @@
1
- {"version":3,"file":"oauth2Auth.js","sourceRoot":"","sources":["oauth2Auth.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport { AlfrescoApiClient } from '../alfrescoApiClient';\nimport { AlfrescoApiConfig } from '../alfrescoApiConfig';\nimport { Authentication } from './authentication';\nimport { AuthenticationApi } from '../api/auth-rest-api';\nimport { AlfrescoApi } from '../alfrescoApi';\nimport { Storage } from '../storage';\nimport { HttpClient } from '../api-clients/http-client.interface';\nimport { PathMatcher } from '../utils/path-matcher';\n\ndeclare const Buffer: any;\n\ndeclare let window: Window;\n\ninterface Userinfo {\n name: string;\n given_name?: string;\n family_name?: string;\n preferred_username?: string;\n email?: string;\n picture?: string;\n}\n\nexport class Oauth2Auth extends AlfrescoApiClient {\n static readonly DEFAULT_AUTHORIZATION_URL = '/protocol/openid-connect/auth';\n static readonly DEFAULT_TOKEN_URL = '/protocol/openid-connect/token';\n static readonly DEFAULT_USER_INFO_ENDPOINT = '/protocol/openid-connect/userinfo';\n static readonly DEFAULT_LOGOUT_URL = '/protocol/openid-connect/logout';\n\n private refreshTokenIntervalPolling: any;\n private refreshTokenTimeoutIframe: any;\n private checkAccessToken = true;\n\n hashFragmentParams: any;\n token: string;\n discovery: {\n loginUrl?: string;\n logoutUrl?: string;\n tokenEndpoint?: string;\n userinfoEndpoint?: string;\n } = {\n loginUrl: undefined,\n logoutUrl: undefined,\n tokenEndpoint: undefined,\n userinfoEndpoint: undefined\n };\n\n authentications: Authentication = {\n oauth2: { accessToken: '' },\n type: 'oauth2',\n basicAuth: {}\n };\n\n iFrameHashListener: any;\n pathMatcher = new PathMatcher();\n\n constructor(config: AlfrescoApiConfig, alfrescoApi: AlfrescoApi, httpClient?: HttpClient) {\n super(undefined, httpClient);\n this.storage = Storage.getInstance();\n\n this.className = 'Oauth2Auth';\n\n if (config) {\n this.setConfig(config, alfrescoApi);\n }\n }\n\n setConfig(config: AlfrescoApiConfig, alfrescoApi: AlfrescoApi) {\n this.config = config;\n this.storage.setDomainPrefix(config.domainPrefix);\n\n if (this.config.oauth2) {\n if (this.config.oauth2.host === undefined || this.config.oauth2.host === null) {\n throw new Error('Missing the required oauth2 host parameter');\n }\n\n if (this.config.oauth2.clientId === undefined || this.config.oauth2.clientId === null) {\n throw new Error('Missing the required oauth2 clientId parameter');\n }\n\n if (this.config.oauth2.scope === undefined || this.config.oauth2.scope === null) {\n throw new Error('Missing the required oauth2 scope parameter');\n }\n\n if ((this.config.oauth2.redirectUri === undefined || this.config.oauth2.redirectUri === null) && this.config.oauth2.implicitFlow) {\n throw new Error('Missing redirectUri required parameter');\n }\n\n if (!this.config.oauth2.refreshTokenTimeout) {\n this.config.oauth2.refreshTokenTimeout = 300000;\n }\n\n if (!this.config.oauth2.redirectSilentIframeUri) {\n let context = '';\n if (typeof window !== 'undefined') {\n context = window.location.origin;\n }\n this.config.oauth2.redirectSilentIframeUri = context + '/assets/silent-refresh.html';\n }\n\n this.basePath = this.config.oauth2.host; //Auth Call\n\n this.host = this.config.oauth2.host;\n\n this.discoveryUrls();\n\n if (this.hasContentProvider()) {\n this.exchangeTicketListener(alfrescoApi);\n }\n\n this.initOauth();\n }\n }\n\n initOauth() {\n if (!this.config.oauth2.implicitFlow && this.isValidAccessToken()) {\n const accessToken = this.storage.getItem('access_token');\n this.setToken(accessToken, null);\n }\n\n if (this.config.oauth2.implicitFlow) {\n this.checkFragment('nonce');\n }\n }\n\n discoveryUrls() {\n this.discovery.loginUrl = this.config.oauth2.authorizationUrl || this.host + Oauth2Auth.DEFAULT_AUTHORIZATION_URL;\n this.discovery.logoutUrl = this.config.oauth2.logoutUrl || this.host + Oauth2Auth.DEFAULT_LOGOUT_URL;\n this.discovery.tokenEndpoint = this.config.oauth2.tokenUrl || this.host + Oauth2Auth.DEFAULT_TOKEN_URL;\n this.discovery.userinfoEndpoint = this.config.oauth2.userinfoEndpoint || this.host + Oauth2Auth.DEFAULT_USER_INFO_ENDPOINT;\n }\n\n getProfile(): Promise<Userinfo> {\n const postBody = {};\n const pathParams = {};\n const queryParams = {};\n\n const headerParams = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n\n const formParams = {};\n\n const contentTypes = ['application/x-www-form-urlencoded'];\n const accepts = ['application/json'];\n\n return this.callCustomApi(\n this.discovery.userinfoEndpoint,\n 'GET',\n pathParams,\n queryParams,\n headerParams,\n formParams,\n postBody,\n contentTypes,\n accepts\n );\n }\n\n hasContentProvider(): boolean {\n return this.config.provider === 'ECM' || this.config.provider === 'ALL';\n }\n\n checkFragment(nonceKey?: string, externalHash?: any): any {\n // jshint ignore:line\n this.hashFragmentParams = this.getHashFragmentParams(externalHash);\n\n if (this.hashFragmentParams && this.hashFragmentParams.error === undefined) {\n this.useFragmentTimeLogin(nonceKey);\n } else {\n this.refreshBrowserLogin();\n }\n }\n\n private refreshBrowserLogin() {\n if (this.config.oauth2.silentLogin && !this.isPublicUrl()) {\n this.implicitLogin();\n }\n\n if (this.isValidToken() && this.isValidAccessToken()) {\n const accessToken = this.storage.getItem('access_token');\n this.setToken(accessToken, null);\n this.silentRefresh();\n }\n }\n\n private useFragmentTimeLogin(nonceKey: string) {\n const accessToken = this.hashFragmentParams.access_token;\n const idToken = this.hashFragmentParams.id_token;\n const sessionState = this.hashFragmentParams.session_state;\n const expiresIn = this.hashFragmentParams.expires_in;\n\n if (!sessionState) {\n throw new Error('session state not present');\n }\n\n try {\n const jwt = this.processJWTToken(idToken, nonceKey);\n if (jwt) {\n this.storeIdToken(idToken, jwt.payload.exp);\n this.storeAccessToken(accessToken, expiresIn);\n this.authentications.basicAuth.username = jwt.payload.preferred_username;\n this.saveUsername(jwt.payload.preferred_username);\n this.silentRefresh();\n return accessToken;\n }\n } catch (error) {\n throw new Error('Validation JWT error' + error);\n }\n }\n\n isPublicUrl(): boolean {\n const publicUrls = this.config.oauth2.publicUrls || [];\n\n if (Array.isArray(publicUrls)) {\n return publicUrls.length > 0 && publicUrls.some((urlPattern: string) => this.pathMatcher.match(window.location.href, urlPattern));\n }\n return false;\n }\n\n padBase64(base64data: any) {\n while (base64data.length % 4 !== 0) {\n base64data += '=';\n }\n return base64data;\n }\n\n processJWTToken(jwt: any, nonceKey: string): any {\n if (jwt) {\n const jwtArray = jwt.split('.');\n const headerBase64 = this.padBase64(jwtArray[0]);\n const headerJson = this.b64DecodeUnicode(headerBase64);\n const header = JSON.parse(headerJson);\n\n const payloadBase64 = this.padBase64(jwtArray[1]);\n const payloadJson = this.b64DecodeUnicode(payloadBase64);\n const payload = JSON.parse(payloadJson);\n\n const savedNonce = this.storage.getItem(nonceKey);\n\n if (!payload.sub) {\n throw new Error('Missing sub in JWT');\n }\n\n if (payload.nonce !== savedNonce) {\n return;\n }\n\n return {\n idToken: jwt,\n payload,\n header\n };\n }\n }\n\n b64DecodeUnicode(b64string: string) {\n const base64 = b64string.replace(/-/g, '+').replace(/_/g, '/');\n return decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n }\n\n storeIdToken(idToken: string, exp: number) {\n this.storage.setItem('id_token', idToken);\n this.storage.setItem('id_token_expires_at', Number(exp * 1000).toString());\n this.storage.setItem('id_token_stored_at', Date.now().toString());\n }\n\n storeAccessToken(accessToken: string, expiresIn: number, refreshToken?: string) {\n this.storage.setItem('access_token', accessToken);\n\n const expiresInMilliSeconds = expiresIn * 1000;\n const now = new Date();\n const expiresAt = now.getTime() + expiresInMilliSeconds;\n\n this.storage.setItem('access_token_expires_in', expiresAt);\n this.storage.setItem('access_token_stored_at', Date.now().toString());\n this.setToken(accessToken, refreshToken);\n }\n\n saveUsername(username: string) {\n if (this.storage.supportsStorage()) {\n this.storage.setItem('USERNAME', username);\n }\n }\n\n implicitLogin() {\n if (!this.isValidToken() || !this.isValidAccessToken()) {\n this.redirectLogin();\n }\n }\n\n isValidToken(): boolean {\n let validToken = false;\n if (this.getIdToken()) {\n const expiresAt = this.storage.getItem('id_token_expires_at');\n const now = new Date();\n if (expiresAt && parseInt(expiresAt, 10) >= now.getTime()) {\n validToken = true;\n }\n }\n\n return validToken;\n }\n\n isValidAccessToken(): boolean {\n let validAccessToken = false;\n\n if (this.getAccessToken()) {\n const expiresAt = this.storage.getItem('access_token_expires_in');\n const now = new Date();\n if (expiresAt && parseInt(expiresAt, 10) >= now.getTime()) {\n validAccessToken = true;\n }\n }\n\n return validAccessToken;\n }\n\n getIdToken(): string {\n return this.storage.getItem('id_token');\n }\n\n getAccessToken(): string {\n return this.storage.getItem('access_token');\n }\n\n redirectLogin(): void {\n if (this.config.oauth2.implicitFlow && typeof window !== 'undefined') {\n const href = this.composeImplicitLoginUrl();\n window.location.href = href;\n this.emit('implicit_redirect', href);\n }\n }\n\n isRedirectionUrl() {\n return window.location.hash && window.location.hash.split('&')[0].indexOf('session_state') === -1;\n }\n\n genNonce(): string {\n let text = '';\n const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 40; i++) {\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n\n return text;\n }\n\n composeImplicitLoginUrl(): string {\n const nonce = this.genNonce();\n\n this.storage.setItem('nonce', nonce);\n\n const afterLoginUriSegment = this.isRedirectionUrl() ? window.location.hash : '';\n if (afterLoginUriSegment && afterLoginUriSegment !== '/') {\n this.storage.setItem('loginFragment', afterLoginUriSegment.replace('#', '').trim());\n }\n\n const separation = this.discovery.loginUrl.indexOf('?') > -1 ? '&' : '?';\n\n return (\n this.discovery.loginUrl +\n separation +\n 'client_id=' +\n encodeURIComponent(this.config.oauth2.clientId) +\n '&redirect_uri=' +\n encodeURIComponent(this.config.oauth2.redirectUri) +\n '&scope=' +\n encodeURIComponent(this.config.oauth2.scope) +\n '&response_type=' +\n encodeURIComponent('id_token token') +\n '&nonce=' +\n encodeURIComponent(nonce)\n );\n }\n\n composeIframeLoginUrl(): string {\n const nonce = this.genNonce();\n\n this.storage.setItem('refresh_nonce', nonce);\n\n const separation = this.discovery.loginUrl.indexOf('?') > -1 ? '&' : '?';\n\n return (\n this.discovery.loginUrl +\n separation +\n 'client_id=' +\n encodeURIComponent(this.config.oauth2.clientId) +\n '&redirect_uri=' +\n encodeURIComponent(this.config.oauth2.redirectSilentIframeUri) +\n '&scope=' +\n encodeURIComponent(this.config.oauth2.scope) +\n '&response_type=' +\n encodeURIComponent('id_token token') +\n '&nonce=' +\n encodeURIComponent(nonce) +\n '&prompt=none'\n );\n }\n\n hasHashCharacter(hash: string): boolean {\n return hash.indexOf('#') === 0;\n }\n\n startWithHashRoute(hash: string) {\n return hash.startsWith('#/');\n }\n\n getHashFragmentParams(externalHash: string): string {\n let hashFragmentParams = null;\n\n if (typeof window !== 'undefined') {\n let hash: string;\n\n if (!externalHash) {\n hash = decodeURIComponent(window.location.hash);\n if (hash && !this.startWithHashRoute(hash)) {\n window.location.hash = '';\n }\n } else {\n hash = decodeURIComponent(externalHash);\n this.removeHashFromSilentIframe();\n this.destroyIframe();\n }\n\n if (this.hasHashCharacter(hash) && !this.startWithHashRoute(hash)) {\n const questionMarkPosition = hash.indexOf('?');\n\n if (questionMarkPosition > -1) {\n hash = hash.substring(questionMarkPosition + 1);\n } else {\n hash = hash.substring(1);\n }\n hashFragmentParams = this.parseQueryString(hash);\n }\n }\n return hashFragmentParams;\n }\n\n parseQueryString(queryString: string): any {\n const data: { [key: string]: any } = {};\n let pairs: string[];\n let pair: string;\n let separatorIndex: number;\n let escapedKey: string;\n let escapedValue: string;\n let key: string;\n let value: string;\n\n if (queryString !== null) {\n pairs = queryString.split('&');\n\n for (const item of pairs) {\n pair = item;\n separatorIndex = pair.indexOf('=');\n\n if (separatorIndex === -1) {\n escapedKey = pair;\n escapedValue = null;\n } else {\n escapedKey = pair.substring(0, separatorIndex);\n escapedValue = pair.substring(separatorIndex + 1);\n }\n\n key = decodeURIComponent(escapedKey);\n value = decodeURIComponent(escapedValue);\n\n if (key.startsWith('/')) {\n key = key.substring(1);\n }\n\n data[key] = value;\n }\n }\n\n return data;\n }\n\n silentRefresh(): void {\n if (typeof document === 'undefined') {\n this.pollingRefreshToken();\n return;\n }\n\n if (this.checkAccessToken) {\n this.destroyIframe();\n this.createIframe();\n this.checkAccessToken = false;\n return;\n }\n\n this.refreshTokenTimeoutIframe = setTimeout(() => {\n this.destroyIframe();\n this.createIframe();\n }, this.config.oauth2.refreshTokenTimeout);\n }\n\n removeHashFromSilentIframe() {\n const iframe = document.getElementById('silent_refresh_token_iframe') as HTMLIFrameElement;\n if (iframe?.contentWindow.location.hash) {\n iframe.contentWindow.location.hash = '';\n }\n }\n\n createIframe() {\n const iframe = document.createElement('iframe');\n iframe.id = 'silent_refresh_token_iframe';\n const loginUrl = this.composeIframeLoginUrl();\n iframe.setAttribute('src', loginUrl);\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n this.iFrameHashListener = () => {\n const silentRefreshTokenIframe: any = document.getElementById('silent_refresh_token_iframe');\n const hash = silentRefreshTokenIframe.contentWindow.location.hash;\n try {\n this.checkFragment('refresh_nonce', hash);\n } catch {\n this.logOut();\n }\n };\n\n iframe.addEventListener('load', this.iFrameHashListener);\n }\n\n destroyIframe() {\n const iframe = document.getElementById('silent_refresh_token_iframe');\n\n if (iframe) {\n iframe.removeEventListener('load', this.iFrameHashListener);\n document.body.removeChild(iframe);\n }\n }\n\n /**\n * login Alfresco API\n * @returns A promise that returns {new authentication token} if resolved and {error} if rejected.\n */\n login(username: string, password: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.grantPasswordLogin(username, password, resolve, reject);\n });\n }\n\n grantPasswordLogin(username: string, password: string, resolve: any, reject: any) {\n this.invalidateSession();\n\n const headerParams = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n\n const formParams = {\n username,\n password,\n grant_type: 'password',\n client_id: this.config.oauth2.clientId\n };\n\n const contentTypes = ['application/x-www-form-urlencoded'];\n const accepts = ['application/json'];\n\n const promise = this.callCustomApi(this.discovery.tokenEndpoint, 'POST', {}, {}, headerParams, formParams, {}, contentTypes, accepts).then(\n (data: any) => {\n this.saveUsername(username);\n this.silentRefresh();\n this.storeAccessToken(data.access_token, data.expires_in, data.refresh_token);\n\n resolve(data);\n },\n (error) => {\n if ((error.error && error.error.status === 401) || error.status === 401) {\n this.emit('unauthorized');\n }\n this.emit('error');\n reject(error.error);\n }\n );\n\n return this.addPromiseListeners(promise, new EventEmitter());\n }\n\n pollingRefreshToken() {\n this.refreshTokenIntervalPolling = setInterval(async () => {\n try {\n await this.refreshToken();\n } catch {\n /* continue regardless of error */\n }\n }, this.config.oauth2.refreshTokenTimeout);\n\n this.refreshTokenIntervalPolling.unref();\n }\n\n /**\n * Refresh the Token\n * @returns promise of void\n */\n refreshToken(): Promise<any> {\n const auth = 'Basic ' + this.universalBtoa(this.config.oauth2.clientId);\n const headerParams = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Cache-Control': 'no-cache',\n Authorization: auth\n };\n const formParams = {\n grant_type: 'refresh_token',\n refresh_token: this.authentications.oauth2.refreshToken\n };\n\n const contentTypes = ['application/x-www-form-urlencoded'];\n const accepts = ['application/json'];\n\n const promise = new Promise((resolve, reject) => {\n this.callCustomApi(this.discovery.tokenEndpoint, 'POST', {}, {}, headerParams, formParams, {}, contentTypes, accepts).then(\n (data: any) => {\n this.setToken(data.access_token, data.refresh_token);\n resolve(data);\n },\n (error) => {\n if (error.error && error.error.status === 401) {\n this.emit('unauthorized');\n }\n this.emit('error');\n reject(error.error);\n }\n );\n });\n\n return this.addPromiseListeners(promise, new EventEmitter());\n }\n\n universalBtoa(stringToConvert: string) {\n try {\n return btoa(stringToConvert);\n } catch {\n return Buffer.from(stringToConvert).toString('base64');\n }\n }\n\n /**\n * Set the current Token\n */\n setToken(token: string, refreshToken: string) {\n this.authentications.oauth2.accessToken = token;\n this.authentications.oauth2.refreshToken = refreshToken;\n this.authentications.basicAuth.password = null;\n this.token = token;\n\n if (token) {\n this.emit('token_issued');\n this.emit('logged-in');\n }\n }\n\n /**\n * Get the current Token\n * @returns token value\n */\n getToken(): string {\n return this.token;\n }\n\n /**\n * return the Authentication\n * @returns authentications\n */\n getAuthentication(): Authentication {\n return this.authentications;\n }\n\n /**\n * Change the Host\n */\n changeHost(host: string) {\n this.config.hostOauth2 = host;\n }\n\n /**\n * If the client is logged in return true\n * @returns is logged in\n */\n isLoggedIn(): boolean {\n return !!this.authentications.oauth2.accessToken;\n }\n\n /**\n * Logout\n */\n async logOut() {\n this.checkAccessToken = true;\n\n const id_token = this.getIdToken();\n\n this.invalidateSession();\n this.setToken(null, null);\n\n const separation = this.discovery.logoutUrl.indexOf('?') > -1 ? '&' : '?';\n const redirectLogout = this.config.oauth2.redirectUriLogout || this.config.oauth2.redirectUri;\n const logoutUrl =\n this.discovery.logoutUrl +\n separation +\n 'post_logout_redirect_uri=' +\n encodeURIComponent(redirectLogout) +\n '&id_token_hint=' +\n encodeURIComponent(id_token);\n\n if (id_token != null && this.config.oauth2.implicitFlow && typeof window !== 'undefined') {\n window.location.href = logoutUrl;\n }\n }\n\n invalidateSession() {\n clearTimeout(this.refreshTokenTimeoutIframe);\n clearInterval(this.refreshTokenIntervalPolling);\n\n this.storage.removeItem('access_token');\n this.storage.removeItem('access_token_expires_in');\n this.storage.removeItem('access_token_stored_at');\n\n this.storage.removeItem('id_token');\n this.storage.removeItem('id_token');\n this.storage.removeItem('id_token_claims_obj');\n this.storage.removeItem('id_token_expires_at');\n this.storage.removeItem('id_token_stored_at');\n\n this.storage.removeItem('nonce');\n }\n\n exchangeTicketListener(alfrescoApi: AlfrescoApi) {\n this.on('token_issued', async () => {\n const authContentApi: AuthenticationApi = new AuthenticationApi(alfrescoApi);\n // Legacy stuff, needs deprecation, can not be more specific here because of circular dependency\n (authContentApi.apiClient as unknown as any).authentications = this.authentications;\n try {\n const ticketEntry = await authContentApi.getTicket();\n this.config.ticketEcm = ticketEntry.entry.id;\n this.emit('ticket_exchanged');\n } catch {\n // continue regardless of error\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"oauth2Auth.js","sourceRoot":"","sources":["oauth2Auth.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport { AlfrescoApiClient } from '../alfrescoApiClient';\nimport { AlfrescoApiConfig } from '../alfrescoApiConfig';\nimport { Authentication } from './authentication';\nimport { AuthenticationApi } from '../api/auth-rest-api';\nimport { AlfrescoApi } from '../alfrescoApi';\nimport { Storage } from '../storage';\nimport { HttpClient } from '../api-clients/http-client.interface';\nimport { PathMatcher } from '../utils/path-matcher';\nimport { isBrowser } from '../utils';\n\ndeclare const Buffer: any;\n\ndeclare let window: Window;\n\ninterface Userinfo {\n name: string;\n given_name?: string;\n family_name?: string;\n preferred_username?: string;\n email?: string;\n picture?: string;\n}\n\nexport class Oauth2Auth extends AlfrescoApiClient {\n static readonly DEFAULT_AUTHORIZATION_URL = '/protocol/openid-connect/auth';\n static readonly DEFAULT_TOKEN_URL = '/protocol/openid-connect/token';\n static readonly DEFAULT_USER_INFO_ENDPOINT = '/protocol/openid-connect/userinfo';\n static readonly DEFAULT_LOGOUT_URL = '/protocol/openid-connect/logout';\n\n private refreshTokenIntervalPolling: any;\n private refreshTokenTimeoutIframe: any;\n private checkAccessToken = true;\n\n hashFragmentParams: any;\n token: string;\n discovery: {\n loginUrl?: string;\n logoutUrl?: string;\n tokenEndpoint?: string;\n userinfoEndpoint?: string;\n } = {\n loginUrl: undefined,\n logoutUrl: undefined,\n tokenEndpoint: undefined,\n userinfoEndpoint: undefined\n };\n\n authentications: Authentication = {\n oauth2: { accessToken: '' },\n type: 'oauth2',\n basicAuth: {}\n };\n\n iFrameHashListener: any;\n pathMatcher = new PathMatcher();\n\n constructor(config: AlfrescoApiConfig, alfrescoApi: AlfrescoApi, httpClient?: HttpClient) {\n super(undefined, httpClient);\n this.storage = Storage.getInstance();\n\n this.className = 'Oauth2Auth';\n\n if (config) {\n this.setConfig(config, alfrescoApi);\n }\n }\n\n setConfig(config: AlfrescoApiConfig, alfrescoApi: AlfrescoApi) {\n this.config = config;\n this.storage.setDomainPrefix(config.domainPrefix);\n\n if (this.config.oauth2) {\n if (this.config.oauth2.host === undefined || this.config.oauth2.host === null) {\n throw new Error('Missing the required oauth2 host parameter');\n }\n\n if (this.config.oauth2.clientId === undefined || this.config.oauth2.clientId === null) {\n throw new Error('Missing the required oauth2 clientId parameter');\n }\n\n if (this.config.oauth2.scope === undefined || this.config.oauth2.scope === null) {\n throw new Error('Missing the required oauth2 scope parameter');\n }\n\n if ((this.config.oauth2.redirectUri === undefined || this.config.oauth2.redirectUri === null) && this.config.oauth2.implicitFlow) {\n throw new Error('Missing redirectUri required parameter');\n }\n\n if (!this.config.oauth2.refreshTokenTimeout) {\n this.config.oauth2.refreshTokenTimeout = 300000;\n }\n\n if (!this.config.oauth2.redirectSilentIframeUri) {\n let context = '';\n if (typeof window !== 'undefined') {\n context = window.location.origin;\n }\n this.config.oauth2.redirectSilentIframeUri = context + '/assets/silent-refresh.html';\n }\n\n this.basePath = this.config.oauth2.host; //Auth Call\n\n this.host = this.config.oauth2.host;\n\n this.discoveryUrls();\n\n if (this.hasContentProvider()) {\n this.exchangeTicketListener(alfrescoApi);\n }\n\n this.initOauth();\n }\n }\n\n initOauth() {\n if (!this.config.oauth2.implicitFlow && this.isValidAccessToken()) {\n const accessToken = this.storage.getItem('access_token');\n this.setToken(accessToken, null);\n }\n\n if (this.config.oauth2.implicitFlow) {\n this.checkFragment('nonce');\n }\n }\n\n discoveryUrls() {\n this.discovery.loginUrl = this.config.oauth2.authorizationUrl || this.host + Oauth2Auth.DEFAULT_AUTHORIZATION_URL;\n this.discovery.logoutUrl = this.config.oauth2.logoutUrl || this.host + Oauth2Auth.DEFAULT_LOGOUT_URL;\n this.discovery.tokenEndpoint = this.config.oauth2.tokenUrl || this.host + Oauth2Auth.DEFAULT_TOKEN_URL;\n this.discovery.userinfoEndpoint = this.config.oauth2.userinfoEndpoint || this.host + Oauth2Auth.DEFAULT_USER_INFO_ENDPOINT;\n }\n\n getProfile(): Promise<Userinfo> {\n const postBody = {};\n const pathParams = {};\n const queryParams = {};\n\n const headerParams = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n\n const formParams = {};\n\n const contentTypes = ['application/x-www-form-urlencoded'];\n const accepts = ['application/json'];\n\n return this.callCustomApi(\n this.discovery.userinfoEndpoint,\n 'GET',\n pathParams,\n queryParams,\n headerParams,\n formParams,\n postBody,\n contentTypes,\n accepts\n );\n }\n\n hasContentProvider(): boolean {\n return this.config.provider === 'ECM' || this.config.provider === 'ALL';\n }\n\n checkFragment(nonceKey?: string, externalHash?: any): any {\n // jshint ignore:line\n this.hashFragmentParams = this.getHashFragmentParams(externalHash);\n\n if (this.hashFragmentParams && this.hashFragmentParams.error === undefined) {\n this.useFragmentTimeLogin(nonceKey);\n } else {\n this.refreshBrowserLogin();\n }\n }\n\n private refreshBrowserLogin() {\n if (this.config.oauth2.silentLogin && !this.isPublicUrl()) {\n this.implicitLogin();\n }\n\n if (this.isValidToken() && this.isValidAccessToken()) {\n const accessToken = this.storage.getItem('access_token');\n this.setToken(accessToken, null);\n this.silentRefresh();\n }\n }\n\n private useFragmentTimeLogin(nonceKey: string) {\n const accessToken = this.hashFragmentParams.access_token;\n const idToken = this.hashFragmentParams.id_token;\n const sessionState = this.hashFragmentParams.session_state;\n const expiresIn = this.hashFragmentParams.expires_in;\n\n if (!sessionState) {\n throw new Error('session state not present');\n }\n\n try {\n const jwt = this.processJWTToken(idToken, nonceKey);\n if (jwt) {\n this.storeIdToken(idToken, jwt.payload.exp);\n this.storeAccessToken(accessToken, expiresIn);\n this.authentications.basicAuth.username = jwt.payload.preferred_username;\n this.saveUsername(jwt.payload.preferred_username);\n this.silentRefresh();\n return accessToken;\n }\n } catch (error) {\n throw new Error('Validation JWT error' + error);\n }\n }\n\n isPublicUrl(): boolean {\n const publicUrls = this.config.oauth2.publicUrls || [];\n\n if (Array.isArray(publicUrls)) {\n return publicUrls.length > 0 && publicUrls.some((urlPattern: string) => this.pathMatcher.match(window.location.href, urlPattern));\n }\n return false;\n }\n\n padBase64(base64data: any) {\n while (base64data.length % 4 !== 0) {\n base64data += '=';\n }\n return base64data;\n }\n\n processJWTToken(jwt: any, nonceKey: string): any {\n if (jwt) {\n const jwtArray = jwt.split('.');\n const headerBase64 = this.padBase64(jwtArray[0]);\n const headerJson = this.b64DecodeUnicode(headerBase64);\n const header = JSON.parse(headerJson);\n\n const payloadBase64 = this.padBase64(jwtArray[1]);\n const payloadJson = this.b64DecodeUnicode(payloadBase64);\n const payload = JSON.parse(payloadJson);\n\n const savedNonce = this.storage.getItem(nonceKey);\n\n if (!payload.sub) {\n throw new Error('Missing sub in JWT');\n }\n\n if (payload.nonce !== savedNonce) {\n return;\n }\n\n return {\n idToken: jwt,\n payload,\n header\n };\n }\n }\n\n b64DecodeUnicode(b64string: string) {\n const base64 = b64string.replace(/-/g, '+').replace(/_/g, '/');\n return decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n }\n\n storeIdToken(idToken: string, exp: number) {\n this.storage.setItem('id_token', idToken);\n this.storage.setItem('id_token_expires_at', Number(exp * 1000).toString());\n this.storage.setItem('id_token_stored_at', Date.now().toString());\n }\n\n storeAccessToken(accessToken: string, expiresIn: number, refreshToken?: string) {\n this.storage.setItem('access_token', accessToken);\n\n const expiresInMilliSeconds = expiresIn * 1000;\n const now = new Date();\n const expiresAt = now.getTime() + expiresInMilliSeconds;\n\n this.storage.setItem('access_token_expires_in', expiresAt);\n this.storage.setItem('access_token_stored_at', Date.now().toString());\n this.setToken(accessToken, refreshToken);\n }\n\n saveUsername(username: string) {\n if (this.storage.supportsStorage()) {\n this.storage.setItem('USERNAME', username);\n }\n }\n\n implicitLogin() {\n if (!this.isValidToken() || !this.isValidAccessToken()) {\n this.redirectLogin();\n }\n }\n\n isValidToken(): boolean {\n let validToken = false;\n if (this.getIdToken()) {\n const expiresAt = this.storage.getItem('id_token_expires_at');\n const now = new Date();\n if (expiresAt && parseInt(expiresAt, 10) >= now.getTime()) {\n validToken = true;\n }\n }\n\n return validToken;\n }\n\n isValidAccessToken(): boolean {\n let validAccessToken = false;\n\n if (this.getAccessToken()) {\n const expiresAt = this.storage.getItem('access_token_expires_in');\n const now = new Date();\n if (expiresAt && parseInt(expiresAt, 10) >= now.getTime()) {\n validAccessToken = true;\n }\n }\n\n return validAccessToken;\n }\n\n getIdToken(): string {\n return this.storage.getItem('id_token');\n }\n\n getAccessToken(): string {\n return this.storage.getItem('access_token');\n }\n\n redirectLogin(): void {\n if (this.config.oauth2.implicitFlow && typeof window !== 'undefined') {\n const href = this.composeImplicitLoginUrl();\n window.location.href = href;\n this.emit('implicit_redirect', href);\n }\n }\n\n isRedirectionUrl() {\n return window.location.hash?.split('&')[0].indexOf('session_state') === -1;\n }\n\n genNonce(): string {\n let text = '';\n const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < 40; i++) {\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n\n return text;\n }\n\n composeImplicitLoginUrl(): string {\n const nonce = this.genNonce();\n\n this.storage.setItem('nonce', nonce);\n\n const afterLoginUriSegment = this.isRedirectionUrl() ? window.location.hash : '';\n if (afterLoginUriSegment && afterLoginUriSegment !== '/') {\n this.storage.setItem('loginFragment', afterLoginUriSegment.replace('#', '').trim());\n }\n\n const separation = this.discovery.loginUrl.indexOf('?') > -1 ? '&' : '?';\n\n return (\n this.discovery.loginUrl +\n separation +\n 'client_id=' +\n encodeURIComponent(this.config.oauth2.clientId) +\n '&redirect_uri=' +\n encodeURIComponent(this.config.oauth2.redirectUri) +\n '&scope=' +\n encodeURIComponent(this.config.oauth2.scope) +\n '&response_type=' +\n encodeURIComponent('id_token token') +\n '&nonce=' +\n encodeURIComponent(nonce)\n );\n }\n\n composeIframeLoginUrl(): string {\n const nonce = this.genNonce();\n\n this.storage.setItem('refresh_nonce', nonce);\n\n const separation = this.discovery.loginUrl.indexOf('?') > -1 ? '&' : '?';\n\n return (\n this.discovery.loginUrl +\n separation +\n 'client_id=' +\n encodeURIComponent(this.config.oauth2.clientId) +\n '&redirect_uri=' +\n encodeURIComponent(this.config.oauth2.redirectSilentIframeUri) +\n '&scope=' +\n encodeURIComponent(this.config.oauth2.scope) +\n '&response_type=' +\n encodeURIComponent('id_token token') +\n '&nonce=' +\n encodeURIComponent(nonce) +\n '&prompt=none'\n );\n }\n\n hasHashCharacter(hash: string): boolean {\n return hash.indexOf('#') === 0;\n }\n\n startWithHashRoute(hash: string) {\n return hash.startsWith('#/');\n }\n\n getHashFragmentParams(externalHash: string): string {\n let hashFragmentParams = null;\n\n if (typeof window !== 'undefined') {\n let hash: string;\n\n if (!externalHash) {\n hash = decodeURIComponent(window.location.hash);\n if (!this.startWithHashRoute(hash)) {\n window.location.hash = '';\n }\n } else {\n hash = decodeURIComponent(externalHash);\n this.removeHashFromSilentIframe();\n this.destroyIframe();\n }\n\n if (this.hasHashCharacter(hash) && !this.startWithHashRoute(hash)) {\n const questionMarkPosition = hash.indexOf('?');\n\n if (questionMarkPosition > -1) {\n hash = hash.substring(questionMarkPosition + 1);\n } else {\n hash = hash.substring(1);\n }\n hashFragmentParams = this.parseQueryString(hash);\n }\n }\n return hashFragmentParams;\n }\n\n parseQueryString(queryString: string): any {\n const data: { [key: string]: any } = {};\n let pairs: string[];\n let pair: string;\n let separatorIndex: number;\n let escapedKey: string;\n let escapedValue: string;\n let key: string;\n let value: string;\n\n if (queryString !== null) {\n pairs = queryString.split('&');\n\n for (const item of pairs) {\n pair = item;\n separatorIndex = pair.indexOf('=');\n\n if (separatorIndex === -1) {\n escapedKey = pair;\n escapedValue = null;\n } else {\n escapedKey = pair.substring(0, separatorIndex);\n escapedValue = pair.substring(separatorIndex + 1);\n }\n\n key = decodeURIComponent(escapedKey);\n value = decodeURIComponent(escapedValue);\n\n if (key.startsWith('/')) {\n key = key.substring(1);\n }\n\n data[key] = value;\n }\n }\n\n return data;\n }\n\n silentRefresh(): void {\n if (!isBrowser()) {\n this.pollingRefreshToken();\n return;\n }\n\n if (this.checkAccessToken) {\n this.destroyIframe();\n this.createIframe();\n this.checkAccessToken = false;\n return;\n }\n\n this.refreshTokenTimeoutIframe = setTimeout(() => {\n this.destroyIframe();\n this.createIframe();\n }, this.config.oauth2.refreshTokenTimeout);\n }\n\n removeHashFromSilentIframe() {\n const iframe = document.getElementById('silent_refresh_token_iframe') as HTMLIFrameElement;\n if (iframe?.contentWindow.location.hash) {\n iframe.contentWindow.location.hash = '';\n }\n }\n\n createIframe() {\n const iframe = document.createElement('iframe');\n iframe.id = 'silent_refresh_token_iframe';\n const loginUrl = this.composeIframeLoginUrl();\n iframe.setAttribute('src', loginUrl);\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n this.iFrameHashListener = () => {\n const silentRefreshTokenIframe: any = document.getElementById('silent_refresh_token_iframe');\n const hash = silentRefreshTokenIframe.contentWindow.location.hash;\n try {\n this.checkFragment('refresh_nonce', hash);\n } catch {\n this.logOut();\n }\n };\n\n iframe.addEventListener('load', this.iFrameHashListener);\n }\n\n destroyIframe() {\n const iframe = document.getElementById('silent_refresh_token_iframe');\n\n if (iframe) {\n iframe.removeEventListener('load', this.iFrameHashListener);\n document.body.removeChild(iframe);\n }\n }\n\n /**\n * login Alfresco API\n * @returns A promise that returns {new authentication token} if resolved and {error} if rejected.\n */\n login(username: string, password: string): Promise<any> {\n return new Promise((resolve, reject) => {\n this.grantPasswordLogin(username, password, resolve, reject);\n });\n }\n\n grantPasswordLogin(username: string, password: string, resolve: any, reject: any) {\n this.invalidateSession();\n\n const headerParams = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n\n const formParams = {\n username,\n password,\n grant_type: 'password',\n client_id: this.config.oauth2.clientId\n };\n\n const contentTypes = ['application/x-www-form-urlencoded'];\n const accepts = ['application/json'];\n\n const promise = this.callCustomApi(this.discovery.tokenEndpoint, 'POST', {}, {}, headerParams, formParams, {}, contentTypes, accepts).then(\n (data: any) => {\n this.saveUsername(username);\n this.silentRefresh();\n this.storeAccessToken(data.access_token, data.expires_in, data.refresh_token);\n\n resolve(data);\n },\n (error) => {\n if (error.error?.status === 401 || error.status === 401) {\n this.emit('unauthorized');\n }\n this.emit('error');\n reject(error.error);\n }\n );\n\n return this.addPromiseListeners(promise, new EventEmitter());\n }\n\n pollingRefreshToken() {\n this.refreshTokenIntervalPolling = setInterval(async () => {\n try {\n await this.refreshToken();\n } catch {\n /* continue regardless of error */\n }\n }, this.config.oauth2.refreshTokenTimeout);\n\n this.refreshTokenIntervalPolling.unref();\n }\n\n /**\n * Refresh the Token\n * @returns promise of void\n */\n refreshToken(): Promise<any> {\n const auth = 'Basic ' + this.universalBtoa(this.config.oauth2.clientId);\n const headerParams = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Cache-Control': 'no-cache',\n Authorization: auth\n };\n const formParams = {\n grant_type: 'refresh_token',\n refresh_token: this.authentications.oauth2.refreshToken\n };\n\n const contentTypes = ['application/x-www-form-urlencoded'];\n const accepts = ['application/json'];\n\n const promise = new Promise((resolve, reject) => {\n this.callCustomApi(this.discovery.tokenEndpoint, 'POST', {}, {}, headerParams, formParams, {}, contentTypes, accepts).then(\n (data: any) => {\n this.setToken(data.access_token, data.refresh_token);\n resolve(data);\n },\n (error) => {\n if (error.error?.status === 401) {\n this.emit('unauthorized');\n }\n this.emit('error');\n reject(error.error);\n }\n );\n });\n\n return this.addPromiseListeners(promise, new EventEmitter());\n }\n\n universalBtoa(stringToConvert: string) {\n try {\n return btoa(stringToConvert);\n } catch {\n return Buffer.from(stringToConvert).toString('base64');\n }\n }\n\n /**\n * Set the current Token\n */\n setToken(token: string, refreshToken: string) {\n this.authentications.oauth2.accessToken = token;\n this.authentications.oauth2.refreshToken = refreshToken;\n this.authentications.basicAuth.password = null;\n this.token = token;\n\n if (token) {\n this.emit('token_issued');\n this.emit('logged-in');\n }\n }\n\n /**\n * Get the current Token\n * @returns token value\n */\n getToken(): string {\n return this.token;\n }\n\n /**\n * return the Authentication\n * @returns authentications\n */\n getAuthentication(): Authentication {\n return this.authentications;\n }\n\n /**\n * Change the Host\n */\n changeHost(host: string) {\n this.config.hostOauth2 = host;\n }\n\n /**\n * If the client is logged in return true\n * @returns is logged in\n */\n isLoggedIn(): boolean {\n return !!this.authentications.oauth2.accessToken;\n }\n\n /**\n * Logout\n */\n async logOut() {\n this.checkAccessToken = true;\n\n const id_token = this.getIdToken();\n\n this.invalidateSession();\n this.setToken(null, null);\n\n const separation = this.discovery.logoutUrl.indexOf('?') > -1 ? '&' : '?';\n const redirectLogout = this.config.oauth2.redirectUriLogout || this.config.oauth2.redirectUri;\n const logoutUrl =\n this.discovery.logoutUrl +\n separation +\n 'post_logout_redirect_uri=' +\n encodeURIComponent(redirectLogout) +\n '&id_token_hint=' +\n encodeURIComponent(id_token);\n\n if (id_token != null && this.config.oauth2.implicitFlow && typeof window !== 'undefined') {\n window.location.href = logoutUrl;\n }\n }\n\n invalidateSession() {\n clearTimeout(this.refreshTokenTimeoutIframe);\n clearInterval(this.refreshTokenIntervalPolling);\n\n this.storage.removeItem('access_token');\n this.storage.removeItem('access_token_expires_in');\n this.storage.removeItem('access_token_stored_at');\n\n this.storage.removeItem('id_token');\n this.storage.removeItem('id_token');\n this.storage.removeItem('id_token_claims_obj');\n this.storage.removeItem('id_token_expires_at');\n this.storage.removeItem('id_token_stored_at');\n\n this.storage.removeItem('nonce');\n }\n\n exchangeTicketListener(alfrescoApi: AlfrescoApi) {\n this.on('token_issued', async () => {\n const authContentApi: AuthenticationApi = new AuthenticationApi(alfrescoApi);\n // Legacy stuff, needs deprecation, can not be more specific here because of circular dependency\n (authContentApi.apiClient as unknown as any).authentications = this.authentications;\n try {\n const ticketEntry = await authContentApi.getTicket();\n this.config.ticketEcm = ticketEntry.entry.id;\n this.emit('ticket_exchanged');\n } catch {\n // continue regardless of error\n }\n });\n }\n}\n"]}