"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMachineId = getMachineId;
exports.getMachineIdSync = getMachineIdSync;
const crypto_1 = require("crypto");
const util_1 = require("util");
const binding = (() => {
    try {
        return require('../build/Release/native_machine_id.node');
    }
    catch (outerError) {
        try {
            return require('../build/Debug/native_machine_id.node');
        }
        catch {
            throw outerError;
        }
    }
})();
function getMachineIdFromBindingSync() {
    try {
        return binding.getMachineIdSync() || undefined;
    }
    catch {
        return undefined;
    }
}
async function getMachineIdFromBindingAsync() {
    try {
        const deviceId = (await (0, util_1.promisify)(binding.getMachineIdAsync)()) || undefined;
        return deviceId;
    }
    catch {
        return undefined;
    }
}
async function getMachineId({ raw = false, } = {}) {
    const machineId = await getMachineIdFromBindingAsync();
    if (!machineId || raw === true) {
        return machineId;
    }
    return (0, crypto_1.createHash)('sha256').update(machineId).digest('hex');
}
function getMachineIdSync({ raw = false } = {}) {
    const machineId = getMachineIdFromBindingSync();
    if (!machineId || raw === true) {
        return machineId;
    }
    return (0, crypto_1.createHash)('sha256').update(machineId).digest('hex');
}
//# sourceMappingURL=index.js.map