@embeddable.com/sdk-core
Version:
Core Embeddable SDK module responsible for web-components bundling and publishing.
103 lines (87 loc) • 2.55 kB
JavaScript
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;