/** * Shared OTA / pear-runtime-updater config for peardock client + server. * * package.json fields: * upgrade — default pear:// channel (client fallback) * upgradeClient — Electron client channel (preferred for kind=client) * upgradeServer — Bare server channel (kind=server) * * Env overrides: * PEARDOCK_OTA_UPGRADE / PEARDOCK_OTA_CLIENT / PEARDOCK_OTA_SERVER * PEARDOCK_OTA_DISABLE=1 */ 'use strict' const path = require('path') /** * @param {'client'|'server'} kind * @param {object} [pkg] * @returns {string|null} pear:// link or null */ function resolveUpgradeLink(kind, pkg = {}) { const env = process.env.PEARDOCK_OTA_UPGRADE || (kind === 'server' ? process.env.PEARDOCK_OTA_SERVER : process.env.PEARDOCK_OTA_CLIENT) || '' if (env && String(env).trim()) return String(env).trim() if (kind === 'server') { return ( String(pkg.upgradeServer || pkg.upgrade || '').trim() || null ) } // client return ( String(pkg.upgradeClient || pkg.upgrade || '').trim() || null ) } /** * On-disk artifact name expected by pear-runtime-updater applyUpdate() * (matches by-arch/.../app/ layout). * * @param {'client'|'server'} kind * @param {{ platform?: string, productName?: string }} [opts] * @returns {string} */ function artifactName(kind, opts = {}) { const platform = opts.platform || process.platform const product = opts.productName || 'peardock' if (kind === 'server') { if (platform === 'win32') return 'peardock-server.exe' return 'peardock-server' } // Electron client (forge executableName: peardock-client) if (platform === 'darwin') return `${product}.app` if (platform === 'win32') return 'peardock-client.exe' return 'peardock-client' } /** * @param {'client'|'server'} kind * @param {{ * pkg?: object, * dir?: string, * app?: string|null, * name?: string, * version?: string, * platform?: string, * }} [opts] * @returns {{ * enabled: boolean, * upgrade: string|null, * dir: string, * version: string, * name: string, * app: string|null, * kind: string, * }} */ function buildUpdaterOptions(kind = 'client', opts = {}) { const pkg = opts.pkg || {} const disabled = process.env.PEARDOCK_OTA_DISABLE === '1' || process.env.PEARDOCK_OTA_DISABLE === 'true' const upgrade = resolveUpgradeLink(kind, pkg) const validLink = Boolean(upgrade && /^pear:\/\//i.test(upgrade)) const name = opts.name || artifactName(kind, { platform: opts.platform, productName: pkg.productName || pkg.name || 'peardock', }) const version = String(opts.version || pkg.version || '0.0.0') const dir = opts.dir || path.join( process.env.PEARDOCK_HOME || process.env.HOME || process.env.USERPROFILE || process.cwd(), '.config', 'peardock', kind === 'server' ? 'pear-runtime-server' : 'pear-runtime-data' ) return { enabled: !disabled && validLink, upgrade: validLink ? upgrade : upgrade || null, dir, version, name, app: opts.app != null ? opts.app : null, kind, } } module.exports = { resolveUpgradeLink, artifactName, buildUpdaterOptions, }