Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 26 additions & 7 deletions lib/moduleEncoding.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -1672,17 +1672,17 @@ 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
* 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<Buffer>} Module binary.
* @returns {Promise<Buffer>} Asset data.
*/
async function createEnvVarsAssetModule(vars, snapshot = undefined) {
async function encodeEnvVarsAsset(vars, snapshot = undefined) {
const maxAssetSize = 16 * 1024;

if (!vars || typeof vars !== 'object') {
Expand Down Expand Up @@ -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<Buffer>} 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;
}

Expand All @@ -1766,5 +1784,6 @@ module.exports = {
addModuleExtensions,
removeModuleExtensions,
listModuleExtensions,
encodeEnvVarsAsset,
createEnvVarsAssetModule
};