| 123456789101112131415161718192021222324252627282930313233343536 |
- /** Resolve the required policy service from the same deployment as updater publication. */
- import { resolveDesktopAutoUpdateEnvironment } from './desktop-auto-update-environment.mjs'
- function origin(value, name) {
- let url
- try { url = new URL(value) } catch { throw new Error(`desktop package: ${name} requires an HTTPS origin`) }
- if (url.protocol !== 'https:' || url.username || url.password || url.pathname !== '/' || url.search || url.hash) {
- throw new Error(`desktop package: ${name} requires an HTTPS origin without credentials, path, query, or fragment`)
- }
- return url.origin
- }
- /**
- * Resolve mandatory policy metadata before preparing artifacts or accessing signing hardware.
- * @param {NodeJS.ProcessEnv} environment File-owned release settings; the unselected origin is not required.
- * @returns {{ origin: string, allowedPageOrigins: string[], authentication: 'anonymous' | 'feishu-test', [key: string]: unknown }} Selected policy.
- */
- export function resolveDesktopPolicyEnvironment(environment) {
- const deployment = resolveDesktopAutoUpdateEnvironment(environment)
- const name = deployment === 'test' ? 'DSH_DESKTOP_MANDATORY_UPDATE_TEST_ORIGIN' : 'DSH_DESKTOP_MANDATORY_UPDATE_PROD_ORIGIN'
- const selected = origin(environment[name], name)
- let settings = {}
- if (environment.DSH_DESKTOP_MANDATORY_UPDATE_CONFIG !== undefined) {
- try { settings = JSON.parse(environment.DSH_DESKTOP_MANDATORY_UPDATE_CONFIG) }
- catch { throw new Error('desktop package: DSH_DESKTOP_MANDATORY_UPDATE_CONFIG must be valid JSON') }
- }
- if (typeof settings !== 'object' || settings === null || Array.isArray(settings)
- || 'origin' in settings || 'authentication' in settings) {
- throw new Error('desktop package: policy options must be an object without origin or authentication; use the deployment origin settings')
- }
- const pages = settings.allowedPageOrigins ?? [selected]
- if (!Array.isArray(pages) || pages.length === 0) throw new Error('desktop package: allowedPageOrigins must be a nonempty array')
- return { ...settings, origin: selected,
- allowedPageOrigins: pages.map(value => origin(value, 'allowedPageOrigins')),
- authentication: deployment === 'test' ? 'feishu-test' : 'anonymous' }
- }
|