@ao-tools/pulumi-ao
Version:
A Pulumi provider for AO processes
67 lines • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProcessCodeProvider = void 0;
const TurboSdk = require("@ardrive/turbo-sdk");
const Utils = require("../utilities");
/**
* This dynamic resource provider uploads Lua files to Arweave
* It uses luabundle to bundle all code into one file.
* It uses turbo-sdk to upload the file to Arweave.
*/
class ProcessCodeProvider {
async create(inputs) {
const turboClient = TurboSdk.TurboFactory.authenticated({
privateKey: Utils.loadWallet(inputs.walletPath),
});
const codeBundle = inputs.bundleLuaCode
? Utils.bundleLuaCode(inputs.filePath)
: Utils.loadLuaCode(inputs.filePath);
const digest = Utils.hashText(codeBundle);
const result = await turboClient.uploadFile({
fileSizeFactory: () => Utils.getSizeInBytes(codeBundle),
fileStreamFactory: () => Utils.createStream(codeBundle),
dataItemOpts: {
tags: [
{ name: "Name", value: inputs.name },
{ name: "Sha256", value: digest },
],
},
});
return {
id: result.id,
outs: {
name: inputs.name,
owner: result.owner,
filePath: inputs.filePath,
sha256: digest,
},
};
}
/**
* Uses compares hashes of the code bundles to check for changes.
* Called on every update.
*/
async diff(_id, olds, news) {
const diffResult = {
changes: false,
};
const replaces = [];
if (olds.name !== news.name)
replaces.push("name");
if (olds.filePath !== news.filePath)
replaces.push("filePath");
const codeBundle = news.bundleLuaCode
? Utils.bundleLuaCode(news.filePath)
: Utils.loadLuaCode(news.filePath);
const newSha256 = Utils.hashText(codeBundle);
if (newSha256 !== olds.sha256)
replaces.push("sha256");
if (replaces.length > 0) {
diffResult.changes = true;
diffResult.replaces = replaces;
}
return diffResult;
}
}
exports.ProcessCodeProvider = ProcessCodeProvider;
//# sourceMappingURL=provider.js.map