@sap/ams-dev
Version:
NodesJS AMS development environment
83 lines (72 loc) • 2.18 kB
JavaScript
const https = require("node:https");
const fs = require('node:fs');
const stream = require("node:stream");
const { createHash } = require("node:crypto");
const AMS_INSTANCE_HEADER = "X-Ams-Instance-Id";
const version = require("../../package.json").version;
const USER_AGENT = `@sap/ams-dev:${version}`;
function addDefaultHeaders(headers, credentials) {
headers[AMS_INSTANCE_HEADER] = credentials.authorization_instance_id;
headers["User-Agent"] = USER_AGENT;
}
function createHTTPSAgent(options) {
return new https.Agent({
cert: options.certificate,
key: options.key,
});
}
const readdir = fs.readdir;
async function filterDCLDirectory(ams_root, cb) {
fs.readdir = function (path, cb, val3) {
if (path.startsWith(ams_root)) {
return readdir(path, async (err, files) => {
if (err) {
return cb(err);
}
const filteredFiles = [];
for (let i = 0; i < files.length; ++i) {
const f = files[i];
const stat = await fs.promises.stat(path + "/" + f);
if (stat.isFile()) {
if (f.endsWith(".dcl")) {
filteredFiles.push(f);
}
} else {
filteredFiles.push(f);
}
}
cb(null, filteredFiles);
});
} else {
return readdir(path, cb, val3);
}
};
await cb();
fs.readdir = readdir;
}
class InMemoryStream extends stream.Writable {
#buffer;
constructor() {
super();
this.#buffer = Buffer.alloc(0);
}
_write(chunk, enc, next) {
this.#buffer = Buffer.concat([this.#buffer, chunk]);
next();
}
getBuffer() {
return this.#buffer;
}
getString() {
return this.#buffer.toString('utf-8');
}
getHash() {
return createHash("sha256").update(this.#buffer).digest("hex");
}
}
module.exports = {
addDefaultHeaders,
createHTTPSAgent,
filterDCLDirectory,
InMemoryStream
};