@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
122 lines (118 loc) • 3.34 kB
JavaScript
/**
* @package @bitrix24/b24jssdk
* @version 2.2.0
* @copyright (c) 2026 Bitrix24
* @license MIT
* @see https://github.com/bitrix24/b24jssdk
* @see https://bitrix24.github.io/b24jssdk/
*/
'use strict';
const sdkError = require('../core/sdk-error.cjs');
const commands = require('./message/commands.cjs');
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
const REFRESH_AUTH_TIMEOUT = 1e4;
class AuthManager {
static {
__name(this, "AuthManager");
}
#accessToken = null;
#refreshId = null;
#authExpires = 0;
#authExpiresIn = 0;
#memberId = null;
#isAdmin = false;
#appFrame;
#messageManager;
constructor(appFrame, messageManager) {
this.#appFrame = appFrame;
this.#messageManager = messageManager;
}
/**
* Initializes the data received from the parent window message.
* @param data
*/
initData(data) {
if (data.AUTH_ID) {
this.#accessToken = data.AUTH_ID;
this.#refreshId = data.REFRESH_ID;
this.#authExpiresIn = Number.parseInt(data.AUTH_EXPIRES);
this.#authExpires = Date.now() + this.#authExpiresIn * 1e3;
this.#isAdmin = data.IS_ADMIN;
this.#memberId = data.MEMBER_ID || "";
}
return this;
}
/**
* Returns authorization data
*
* @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/system-functions/bx24-get-auth.html
*/
getAuthData() {
return this.#authExpires > Date.now() ? {
access_token: this.#accessToken,
refresh_token: this.#refreshId,
expires: this.#authExpires / 1e3,
expires_in: this.#authExpiresIn,
domain: this.#appFrame.getTargetOrigin(),
member_id: this.#memberId
} : false;
}
/**
* Updates authorization data through the parent window
*
* @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/system-functions/bx24-refresh-auth.html
*/
async refreshAuth() {
let timer;
const timeout = new Promise((_resolve, reject) => {
timer = setTimeout(
() => reject(new sdkError.SdkError({
code: "JSSDK_FRAME_REFRESH_AUTH_TIMEOUT",
status: 408,
description: `refreshAuth: the parent window did not answer within ${REFRESH_AUTH_TIMEOUT}ms`
})),
REFRESH_AUTH_TIMEOUT
);
});
try {
const data = await Promise.race([
this.#messageManager.send(commands.MessageCommands.refreshAuth, {}),
timeout
]);
this.#accessToken = data.AUTH_ID;
this.#refreshId = data.REFRESH_ID;
this.#authExpires = Date.now() + Number.parseInt(data.AUTH_EXPIRES) * 1e3;
return this.getAuthData();
} finally {
if (timer) {
clearTimeout(timer);
}
}
}
getUniq(prefix) {
return [prefix, this.#memberId || ""].join("_");
}
/**
* Determines whether the current user has administrator rights
*
* @link https://apidocs.bitrix24.com/sdk/bx24-js-sdk/additional-functions/bx24-is-admin.html
*/
get isAdmin() {
return this.#isAdmin;
}
/**
* @inheritDoc
*/
getTargetOrigin() {
return this.#appFrame.getTargetOrigin();
}
/**
* @inheritDoc
*/
getTargetOriginWithPath() {
return this.#appFrame.getTargetOriginWithPath();
}
}
exports.AuthManager = AuthManager;
//# sourceMappingURL=auth.cjs.map