forked from snxraven/peardock
130 lines
3.2 KiB
JavaScript
130 lines
3.2 KiB
JavaScript
/**
|
|
* 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/<name> 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,
|
|
}
|