UNPKG

@larksuiteoapi/api

Version:
170 lines 8.81 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setUserAccessToken = exports.setTenantAccessToken = exports.setAppAccessToken = exports.setTenantAccessTokenToStore = exports.getIsvTenantAccessToken = exports.setAppAccessTokenToStore = exports.getIsvAppAccessToken = exports.getInternalTenantAccessToken = exports.getInternalAppAccessToken = void 0; const token_1 = require("../token/token"); const request = __importStar(require("../request/request")); const handlers_1 = require("./handlers"); const util = __importStar(require("util")); const constants_1 = require("../constants/constants"); const core_1 = require("@larksuiteoapi/core"); const errors_1 = require("../errors/errors"); const error_1 = require("../response/error"); const expiryDelta = 3 * 60; // get internal app access token exports.getInternalAppAccessToken = (ctx) => __awaiter(void 0, void 0, void 0, function* () { let accessToken; let conf = core_1.getConfigByCtx(ctx); let req = request.newRequestByAuth(constants_1.URL.AppAccessTokenInternalUrlPath, "POST", new token_1.GetInternalAccessTokenReq(conf.getAppSettings().appID, conf.getAppSettings().appSecret), accessToken); let response = yield handlers_1.handle(ctx, req); if (response.code != error_1.ErrCode.Ok) { throw new errors_1.AccessTokenObtainErr("obtain internal app access token,failure information:" + req.response.toString(), req.response); } return response.data; }); // get internal tenant access token exports.getInternalTenantAccessToken = (ctx) => __awaiter(void 0, void 0, void 0, function* () { let accessToken; let conf = core_1.getConfigByCtx(ctx); let req = request.newRequestByAuth(constants_1.URL.TenantAccessTokenInternalUrlPath, "POST", new token_1.GetInternalAccessTokenReq(conf.getAppSettings().appID, conf.getAppSettings().appSecret), accessToken); let response = yield handlers_1.handle(ctx, req); if (response.code != error_1.ErrCode.Ok) { throw new errors_1.AccessTokenObtainErr("obtain internal tenant access token,failure information:" + req.response.toString(), req.response); } return response.data; }); const getAppTicket = (ctx) => __awaiter(void 0, void 0, void 0, function* () { let conf = core_1.getConfigByCtx(ctx); return conf.getStore().get(core_1.getAppTicketKey(conf.getAppSettings().appID)); }); // get isv app access token exports.getIsvAppAccessToken = (ctx) => __awaiter(void 0, void 0, void 0, function* () { let appTicket = yield getAppTicket(ctx); if (!appTicket) { errors_1.throwAppTicketIsEmptyErr(); } let accessToken; let conf = core_1.getConfigByCtx(ctx); let req = request.newRequestByAuth(constants_1.URL.AppAccessTokenIsvUrlPath, "POST", new token_1.GetISVAppAccessTokenReq(conf.getAppSettings().appID, conf.getAppSettings().appSecret, appTicket), accessToken); let response = yield handlers_1.handle(ctx, req); if (response.code != error_1.ErrCode.Ok) { throw new errors_1.AccessTokenObtainErr("obtain ISV app access token,failure information:" + req.response.toString(), req.response); } return response.data; }); exports.setAppAccessTokenToStore = (ctx, appAccessToken) => __awaiter(void 0, void 0, void 0, function* () { let conf = core_1.getConfigByCtx(ctx); try { yield conf.getStore().put(core_1.getAppAccessTokenKey(conf.getAppSettings().appID), appAccessToken.app_access_token, appAccessToken.expire - expiryDelta); } catch (e) { conf.getLogger().error(e); } }); // get isv tenant access token exports.getIsvTenantAccessToken = (ctx) => __awaiter(void 0, void 0, void 0, function* () { let appAccessToken = yield exports.getIsvAppAccessToken(ctx); let info = request.getInfoByCtx(ctx); let tenantAccessToken; let req = request.newRequestByAuth(constants_1.URL.TenantAccessTokenIsvUrlPath, "POST", new token_1.GetISVTenantAccessTokenReq(appAccessToken.app_access_token, info.tenantKey), tenantAccessToken); let response = yield handlers_1.handle(ctx, req); if (response.code != error_1.ErrCode.Ok) { throw new errors_1.AccessTokenObtainErr("obtain ISV tenant access token,failure information:" + req.response.toString(), req.response); } tenantAccessToken = response.data; let res = [appAccessToken, tenantAccessToken]; return res; }); exports.setTenantAccessTokenToStore = (ctx, tenantAccessToken) => __awaiter(void 0, void 0, void 0, function* () { let conf = core_1.getConfigByCtx(ctx); let info = request.getInfoByCtx(ctx); try { yield conf.getStore().put(core_1.getTenantAccessTokenKey(conf.getAppSettings().appID, info.tenantKey), tenantAccessToken.tenant_access_token, tenantAccessToken.expire - expiryDelta); } catch (e) { conf.getLogger().error(e); } }); const setAuthorizationToHeader = (headers, token) => { headers["Authorization"] = util.format("Bearer %s", token); }; exports.setAppAccessToken = (ctx, headers) => __awaiter(void 0, void 0, void 0, function* () { let conf = core_1.getConfigByCtx(ctx); let info = request.getInfoByCtx(ctx); // from store get app access token if (!info.retryable) { let tok = yield conf.getStore().get(core_1.getAppAccessTokenKey(conf.getAppSettings().appID)); if (tok) { setAuthorizationToHeader(headers, tok); return; } } let appAccessToken; if (conf.getAppSettings().appType == core_1.AppType.Internal) { appAccessToken = yield exports.getInternalAppAccessToken(ctx); } else { appAccessToken = yield exports.getIsvAppAccessToken(ctx); } yield exports.setAppAccessTokenToStore(ctx, appAccessToken); setAuthorizationToHeader(headers, appAccessToken.app_access_token); }); exports.setTenantAccessToken = (ctx, headers) => __awaiter(void 0, void 0, void 0, function* () { let conf = core_1.getConfigByCtx(ctx); let info = request.getInfoByCtx(ctx); // from store get tenant access token if (!info.retryable) { let tenantKey = info.tenantKey || ""; let tok = yield conf.getStore().get(core_1.getTenantAccessTokenKey(conf.getAppSettings().appID, tenantKey)); if (tok) { setAuthorizationToHeader(headers, tok); return; } } if (conf.getAppSettings().appType == core_1.AppType.Internal) { let tenantAccessToken = yield exports.getInternalTenantAccessToken(ctx); yield exports.setTenantAccessTokenToStore(ctx, tenantAccessToken); setAuthorizationToHeader(headers, tenantAccessToken.tenant_access_token); } else { let accessToken = yield exports.getIsvTenantAccessToken(ctx); yield exports.setAppAccessTokenToStore(ctx, accessToken[0]); yield exports.setTenantAccessTokenToStore(ctx, accessToken[1]); setAuthorizationToHeader(headers, accessToken[1].tenant_access_token); } }); exports.setUserAccessToken = (ctx, headers) => __awaiter(void 0, void 0, void 0, function* () { let info = request.getInfoByCtx(ctx); if (info.userAccessToken) { setAuthorizationToHeader(headers, info.userAccessToken); return; } }); //# sourceMappingURL=accessToken.js.map