UNPKG

@00f100/pbie-node

Version:

NodeJS library written in typescript and designed for using PowerBI embedded reports.

87 lines 4.09 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const request_1 = __importDefault(require("request")); const builder_1 = require("./builder"); const internals_1 = require("./internals"); exports.getReport = (config, url, options, reportId) => { const { workspaceId } = config; const promise = new Promise((resolve, reject) => { if (!reportId) return reject(new Error('No reportId provided')); const callback = (error, { statusCode }, body) => { if (error) return reject(error); if (statusCode >= 400) return reject(new Error('Invalid request')); if (!body || body === '') return reject(new Error(`No report with id: ${reportId} in group with id: ${workspaceId}`)); try { resolve(JSON.parse(body)); } catch (error) { reject(error); } }; request_1.default(url, options, callback); }); return promise; }; exports.getDataset = (config, accessToken, datasetId) => { const { apiUrl, workspaceId } = config; const { Authorization } = builder_1.buildAuthHeader(accessToken); const options = { headers: { Authorization }, method: 'GET' }; const url = `${apiUrl}v1.0/myorg/groups/${workspaceId}/datasets/${datasetId}`; const promise = new Promise((resolve, reject) => { const callback = (error, { statusCode }, body) => { if (error) reject(error); if (statusCode >= 400) return reject(new Error('Request invalid')); try { const getReportRes = JSON.parse(body); resolve(getReportRes); } catch (error) { reject(error); } }; request_1.default(url, options, callback); }); return promise; }; exports.generateEmbedToken = async (config) => { const { apiUrl, workspaceId, reportId } = config; const { accessToken } = await internals_1.getAuthToken(config); const { Authorization } = builder_1.buildAuthHeader(accessToken); const headers = { Authorization, 'Content-Type': 'application/json' }; const options = { headers, method: 'POST', body: JSON.stringify({ accessLevel: 'View' }) }; const url = `${apiUrl}v1.0/myorg/groups/${workspaceId}/reports/${reportId}/GenerateToken`; return internals_1.getEmbedToken(config, url, options, reportId); }; exports.generateEmbedTokenWithRls = async (filter, config) => { const { apiUrl, workspaceId, reportId, roles } = config; const { accessToken } = await internals_1.getAuthToken(config); const { Authorization } = builder_1.buildAuthHeader(accessToken); const { url, options } = builder_1.buildRequestParams(config, accessToken, reportId); const report = await exports.getReport(config, url, options, reportId); if (report instanceof Error) throw report; const { id, datasetId } = report; const dataset = await exports.getDataset(config, accessToken, datasetId); if (dataset instanceof Error) throw dataset; if (!dataset.isEffectiveIdentityRequired) throw new Error('EffectiveIdentityRequired'); const applyFilter = {}; applyFilter[filter.field] = filter.term; const identities = [{ roles: filter.role, datasets: [datasetId], ...applyFilter }]; const body = { identities, accessLevel: 'View' }; const headers = { Authorization, 'Content-Type': 'application/json' }; const embedTokenOptions = { headers, method: 'POST', body: JSON.stringify(body) }; const embedTokenUrl = `${apiUrl}v1.0/myorg/groups/${workspaceId}/reports/${id}/GenerateToken`; return internals_1.getEmbedToken(config, embedTokenUrl, embedTokenOptions, id); }; //# sourceMappingURL=lib.js.map