UNPKG

@sap/ams-dev

Version:

NodesJS AMS development environment

83 lines (72 loc) 2.18 kB
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 };