UNPKG

@embeddable.com/sdk-core

Version:

Core Embeddable SDK module responsible for web-components bundling and publishing.

103 lines (87 loc) 2.55 kB
import * as path from "node:path"; import Rollbar from "rollbar"; import provideConfig from "./provideConfig"; import * as fs from "node:fs/promises"; import { CREDENTIALS_FILE } from "./credentials"; import { jwtDecode } from "jwt-decode"; const reportErrorToRollbar = async (error) => { const config = await provideConfig(); const rollbar = new Rollbar({ accessToken: config.rollbarAccessToken, captureUncaught: true, captureUnhandledRejections: true, payload: { environment: config.applicationEnvironment, source: "sdk", }, }); const userData = await getUserData(); const sdkPackageVersion = await getSdkPackageVersionInfo(config); rollbar.configure({ payload: { person: { id: userData.globalUserId, }, }, }); return rollbar.error(error, { custom: { code_version: sdkPackageVersion, }, }); }; const getSdkPackageVersionInfo = async (config) => { try { const packageJsonFilePath = path.resolve( config.client.rootDir, "package.json", ); const packageJson = await import(packageJsonFilePath); const devDependencies = packageJson.devDependencies; const dependencies = packageJson.dependencies; const getDependencyVersion = (key, dependencies, devDependencies) => { return dependencies?.[key] || devDependencies?.[key]; }; const packageVersionInfo = { core: getDependencyVersion( "@embeddable.com/core", dependencies, devDependencies, ), sdk_core: getDependencyVersion( "@embeddable.com/sdk-core", dependencies, devDependencies, ), react: getDependencyVersion( "@embeddable.com/react", dependencies, devDependencies, ), sdk_react: getDependencyVersion( "@embeddable.com/sdk-react", dependencies, devDependencies, ), }; return JSON.stringify(packageVersionInfo); } catch (e) { console.warn("Could not get SDK package version info", e); return "unknown"; } }; export async function getUserData() { try { const token = await fs .readFile(CREDENTIALS_FILE) .then((data) => JSON.parse(data.toString())); const decodedToken = jwtDecode(token.access_token); return { globalUserId: `${decodedToken.iss}@${decodedToken.sub}`, }; } catch (error) { console.warn("Failed to get user data from credentials file"); return { globalUserId: "unknown" }; } } export default reportErrorToRollbar;