UNPKG

zenstack

Version:

FullStack enhancement for Prisma ORM: seamless integration from database to UI

135 lines 6.36 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (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.prototype.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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Telemetry = void 0; const cuid2_1 = require("@paralleldrive/cuid2"); const prisma_1 = require("@zenstackhq/sdk/prisma"); const async_exit_hook_1 = __importDefault(require("async-exit-hook")); const commander_1 = require("commander"); const mixpanel_1 = require("mixpanel"); const os = __importStar(require("os")); const sleep_promise_1 = __importDefault(require("sleep-promise")); const cli_error_1 = require("./cli/cli-error"); const constants_1 = require("./constants"); const is_docker_1 = __importDefault(require("./utils/is-docker")); const machine_id_utils_1 = require("./utils/machine-id-utils"); const version_utils_1 = require("./utils/version-utils"); /** * Utility class for sending telemetry */ class Telemetry { constructor() { this.hostId = (0, machine_id_utils_1.getMachineId)(); this.sessionid = (0, cuid2_1.createId)(); this._os_type = os.type(); this._os_release = os.release(); this._os_arch = os.arch(); this._os_version = os.version(); this._os_platform = os.platform(); this.version = (0, version_utils_1.getVersion)(); this.prismaVersion = (0, prisma_1.getPrismaVersion)(); this.isDocker = (0, is_docker_1.default)(); this.exitWait = 200; if (process.env.DO_NOT_TRACK !== '1' && constants_1.TELEMETRY_TRACKING_TOKEN) { this.mixpanel = (0, mixpanel_1.init)(constants_1.TELEMETRY_TRACKING_TOKEN, { geolocate: true, }); } (0, async_exit_hook_1.default)((callback) => __awaiter(this, void 0, void 0, function* () { if (this.mixpanel) { // a small delay to ensure telemetry is sent yield (0, sleep_promise_1.default)(this.exitWait); } callback(); })); const errorHandler = (err) => __awaiter(this, void 0, void 0, function* () { if (err instanceof cli_error_1.CliError || err instanceof commander_1.CommanderError) { this.track('cli:error', { message: err.message, stack: err.stack, }); if (this.mixpanel) { // a small delay to ensure telemetry is sent yield (0, sleep_promise_1.default)(this.exitWait); } // error already logged } else { console.error('\nAn unexpected error occurred:\n', err); this.track('cli:crash', { message: err.message, stack: err.stack, }); if (this.mixpanel) { // a small delay to ensure telemetry is sent yield (0, sleep_promise_1.default)(this.exitWait); } } process.exit(1); }); async_exit_hook_1.default.unhandledRejectionHandler(errorHandler); async_exit_hook_1.default.uncaughtExceptionHandler(errorHandler); } track(event, properties = {}) { if (this.mixpanel) { const payload = Object.assign({ distinct_id: this.hostId, session: this.sessionid, time: new Date(), $os: this._os_type, osType: this._os_type, osRelease: this._os_release, osPlatform: this._os_platform, osArch: this._os_arch, osVersion: this._os_version, nodeVersion: process.version, version: this.version, prismaVersion: this.prismaVersion, isDocker: this.isDocker }, properties); this.mixpanel.track(event, payload); } } trackSpan(startEvent, completeEvent, errorEvent, properties, action) { return __awaiter(this, void 0, void 0, function* () { this.track(startEvent, properties); const start = Date.now(); let success = true; try { return yield action(); // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (err) { this.track(errorEvent, Object.assign({ message: err.message, stack: err.stack }, properties)); success = false; throw err; } finally { this.track(completeEvent, Object.assign({ duration: Date.now() - start, success }, properties)); } }); } } exports.Telemetry = Telemetry; exports.default = new Telemetry(); //# sourceMappingURL=telemetry.js.map