diff --git a/lib/moduleEncoding.js b/lib/moduleEncoding.js index ff10444..f9396db 100644 --- a/lib/moduleEncoding.js +++ b/lib/moduleEncoding.js @@ -1279,7 +1279,7 @@ async function createApplicationAndAssetBundle(application, assets, vars) { } if (vars) { - const varsAsset = await createEnvVarsAssetModule(vars); + const varsAsset = await encodeEnvVarsAsset(vars); assets ||= []; assets.push({ data: varsAsset, @@ -1672,7 +1672,7 @@ async function createProtectedModule(module, certificate) { } /** - * Create an asset module containing environment variables. + * Encode the environment variables to a Device OS-compatible asset. * * @param {Object} vars Variable values. * @param {Object} [snapshot] Snapshot details. If not provided, the asset will be marked as @@ -1680,9 +1680,9 @@ async function createProtectedModule(module, certificate) { * @param {String|Buffer} snapshot.hash Snapshot hash. Can be a buffer or hex-encoded string. * @param {String|Number} snapshot.updatedAt Snapshot creation time. Can be a string in a format * supported by `Date.parse()` or a numeric timestamp. - * @returns {Promise} Module binary. + * @returns {Promise} Asset data. */ -async function createEnvVarsAssetModule(vars, snapshot = undefined) { +async function encodeEnvVarsAsset(vars, snapshot = undefined) { const maxAssetSize = 16 * 1024; if (!vars || typeof vars !== 'object') { @@ -1733,13 +1733,31 @@ async function createEnvVarsAssetModule(vars, snapshot = undefined) { updatedAt })).finish(); + if (assetData.length > maxAssetSize) { + throw new Error('Asset exceeds the maximum size'); + } + + return assetData; +} + +/** + * Create an asset module containing environment variables. + * + * @param {Object} vars Variable values. + * @param {Object} [snapshot] Snapshot details. If not provided, the asset will be marked as + * containing application variables as opposed to a snapshot of cloud variables. + * @param {String|Buffer} snapshot.hash Snapshot hash. Can be a buffer or hex-encoded string. + * @param {String|Number} snapshot.updatedAt Snapshot creation time. Can be a string in a format + * supported by `Date.parse()` or a numeric timestamp. + * @returns {Promise} Module binary. + */ +async function createEnvVarsAssetModule(vars, snapshot = undefined) { + const assetData = await encodeEnvVarsAsset(vars, snapshot); + const assetModule = await createAssetModule(assetData, 'env-vars', { type: snapshot ? ModuleInfo.AssetType.ENV_VARS_SNAPSHOT : ModuleInfo.AssetType.ENV_VARS_APP, compress: false }); - if (assetModule.length > maxAssetSize) { - throw new Error('Asset exceeds the maximum size'); - } return assetModule; } @@ -1766,5 +1784,6 @@ module.exports = { addModuleExtensions, removeModuleExtensions, listModuleExtensions, + encodeEnvVarsAsset, createEnvVarsAssetModule };