@slmdevs/celeraone
Version:
This is a NPM Package to use for all the CeleraOne interactions.
77 lines • 9.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Endpoints = void 0;
const aws_tooling_1 = require("@slmdevs/aws-tooling");
const url_1 = require("url");
const node_fetch_1 = __importDefault(require("node-fetch"));
const moment_1 = __importDefault(require("moment"));
const crypto_js_1 = __importDefault(require("crypto-js"));
let secretsLoaded = false;
const secrets = {
apiKey: '',
apiSecret: ''
};
const getSecrets = async () => {
const res = await aws_tooling_1.SecretsManager.readSecret(process.env.ENVIRONMENT === 'PROD' ? 'PROD_SECRETS' : 'DEV_SECRETS');
const data = JSON.parse(res);
secrets.apiKey = data.CELERAONE_API_KEY;
secrets.apiSecret = data.CELERAONE_API_SECRET;
secretsLoaded = true;
};
/**
* Endpoints for the CeleraOne API
*
* @enum Endpoints
* @readonly
*/
var Endpoints;
(function (Endpoints) {
Endpoints["IMPORT_USER"] = "/cre-1.0/api/user-import";
Endpoints["SAVE_USER_PROPERTY"] = "/cre-1.0/api/user/%s/store/%s/properties";
Endpoints["DELETE_USER_PROPERTY"] = "/cre-1.0/api/user/%s/store/%s/properties/%s";
Endpoints["FIND_USER"] = "/cre-1.0/api/find/user?field=contractor_id&value=%s";
Endpoints["UPDATE_USER_PASSWORD"] = "/cre-1.0/api/user/%s/%s";
Endpoints["UPDATE_USER_LOGIN"] = "/cre-1.0/api/user/%s/login";
Endpoints["UPDATE_USER_MASTER_DATA"] = "/cre-1.0/api/user/%s/masterdata";
Endpoints["PURGE_USER"] = "/cre-1.0/api/manage/privacy/eu/user/%s/purge";
Endpoints["USER_SESSION"] = "/cre-1.0/api/auth/service/%s/session/%s";
Endpoints["SEARCH_USER"] = "/cre-1.0/api/search/user";
Endpoints["GET_USER_SINGLE_PROPERTY"] = "/cre-1.0/api/user/%s/store/GP/properties/%s";
Endpoints["CHANGE_USER_LOGIN_ALIAS"] = "/cre-1.0/api/user/%s/login_alias";
})(Endpoints = exports.Endpoints || (exports.Endpoints = {}));
/**
*
* @param { string } route The API Route thas you want to call
* @param { string } method What type of method (POST/GET/PUT/...)
* @param { any } [body] body The body to pass into the API request
* @returns { Promise<Response> }
*/
const API = async (route, method, body) => {
if (!process.env.CELERAONE_BASE_URL) {
throw new Error('Environment variable [CELERAONE_BASE_URL] missing!');
}
if (!secretsLoaded) {
await getSecrets();
}
const host = new url_1.URL(process.env.CELERAONE_BASE_URL).host;
const date = moment_1.default.utc(new Date()).format('ddd, D MMM YYYY HH:mm:ss');
const string_hmac = `${method} ${route} HTTP/1.1`
+ '\nhost: ' + host
+ '\ndate: ' + date;
const hash = crypto_js_1.default.HmacSHA256(string_hmac, secrets.apiSecret);
const signature = crypto_js_1.default.enc.Base64.stringify(hash);
const authorization = `Signature keyId="${secrets.apiKey}",algorithm="hmac-sha256",headers="request-line host date",signature="${signature}"`;
return node_fetch_1.default(`${process.env.CELERAONE_BASE_URL}${route}`, {
method: method,
headers: {
'Content-Type': 'application/json',
host, date, authorization
},
body: JSON.stringify(body)
});
};
exports.default = API;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQVBJL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUFxRDtBQUNyRCw2QkFBeUI7QUFDekIsNERBQTRDO0FBQzVDLG9EQUEyQjtBQUMzQiwwREFBZ0M7QUFPaEMsSUFBSSxhQUFhLEdBQVksS0FBSyxDQUFBO0FBQ2xDLE1BQU0sT0FBTyxHQUFpQjtJQUM3QixNQUFNLEVBQUUsRUFBRTtJQUNWLFNBQVMsRUFBRSxFQUFFO0NBQ2IsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssSUFBbUIsRUFBRTtJQUM1QyxNQUFNLEdBQUcsR0FBRyxNQUFNLDRCQUFjLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFBO0lBQ3ZDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFBO0lBRTdDLGFBQWEsR0FBRyxJQUFJLENBQUE7QUFDckIsQ0FBQyxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxJQUFZLFNBYVg7QUFiRCxXQUFZLFNBQVM7SUFDakIscURBQXdDLENBQUE7SUFDM0MsNEVBQStELENBQUE7SUFDL0QsaUZBQW9FLENBQUE7SUFDcEUsOEVBQWlFLENBQUE7SUFDakUsNkRBQWdELENBQUE7SUFDaEQsNkRBQWdELENBQUE7SUFDaEQsd0VBQTJELENBQUE7SUFDM0Qsd0VBQTJELENBQUE7SUFDM0QscUVBQXdELENBQUE7SUFDeEQscURBQXdDLENBQUE7SUFDeEMscUZBQXdFLENBQUE7SUFDeEUseUVBQTRELENBQUE7QUFDN0QsQ0FBQyxFQWJXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBYXBCO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsSUFBVSxFQUFxQixFQUFFO0lBQ2xGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtLQUNyRTtJQUVELElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbkIsTUFBTSxVQUFVLEVBQUUsQ0FBQTtLQUNsQjtJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksU0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDekQsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBRXRFLE1BQU0sV0FBVyxHQUFHLEdBQUksTUFBTyxJQUFLLEtBQU0sV0FBVztVQUM1QyxVQUFVLEdBQUcsSUFBSTtVQUNqQixVQUFVLEdBQUcsSUFBSSxDQUFBO0lBRTFCLE1BQU0sSUFBSSxHQUFHLG1CQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDaEUsTUFBTSxTQUFTLEdBQUcsbUJBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVyRCxNQUFNLGFBQWEsR0FBRyxvQkFBcUIsT0FBTyxDQUFDLE1BQU8seUVBQTBFLFNBQVUsR0FBRyxDQUFBO0lBRWpKLE9BQU8sb0JBQUssQ0FBQyxHQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQW1CLEdBQUksS0FBTSxFQUFFLEVBQUU7UUFDN0QsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYTtTQUN6QjtRQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztLQUMxQixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRCxrQkFBZSxHQUFHLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWNyZXRzTWFuYWdlciB9IGZyb20gJ0BzbG1kZXZzL2F3cy10b29saW5nJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IGZldGNoLCB7IFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCdcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcydcblxuaW50ZXJmYWNlIFNlY3JldHNTdG9yZSB7XG5cdGFwaUtleTogc3RyaW5nLFxuXHRhcGlTZWNyZXQ6IHN0cmluZ1xufVxuXG5sZXQgc2VjcmV0c0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlXG5jb25zdCBzZWNyZXRzOiBTZWNyZXRzU3RvcmUgPSB7XG5cdGFwaUtleTogJycsXG5cdGFwaVNlY3JldDogJydcbn1cblxuY29uc3QgZ2V0U2VjcmV0cyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0Y29uc3QgcmVzID0gYXdhaXQgU2VjcmV0c01hbmFnZXIucmVhZFNlY3JldChwcm9jZXNzLmVudi5FTlZJUk9OTUVOVCA9PT0gJ1BST0QnID8gJ1BST0RfU0VDUkVUUycgOiAnREVWX1NFQ1JFVFMnKVxuXHRjb25zdCBkYXRhID0gSlNPTi5wYXJzZShyZXMpXG5cdHNlY3JldHMuYXBpS2V5ID0gZGF0YS5DRUxFUkFPTkVfQVBJX0tFWVxuXHRzZWNyZXRzLmFwaVNlY3JldCA9IGRhdGEuQ0VMRVJBT05FX0FQSV9TRUNSRVRcblxuXHRzZWNyZXRzTG9hZGVkID0gdHJ1ZVxufVxuXG4vKipcbiAqIEVuZHBvaW50cyBmb3IgdGhlIENlbGVyYU9uZSBBUElcbiAqXG4gKiBAZW51bSBFbmRwb2ludHNcbiAqIEByZWFkb25seVxuICovXG5leHBvcnQgZW51bSBFbmRwb2ludHMge1xuICAgIElNUE9SVF9VU0VSID0gJy9jcmUtMS4wL2FwaS91c2VyLWltcG9ydCcsXG5cdFNBVkVfVVNFUl9QUk9QRVJUWSA9ICcvY3JlLTEuMC9hcGkvdXNlci8lcy9zdG9yZS8lcy9wcm9wZXJ0aWVzJyxcblx0REVMRVRFX1VTRVJfUFJPUEVSVFkgPSAnL2NyZS0xLjAvYXBpL3VzZXIvJXMvc3RvcmUvJXMvcHJvcGVydGllcy8lcycsXG5cdEZJTkRfVVNFUiA9ICcvY3JlLTEuMC9hcGkvZmluZC91c2VyP2ZpZWxkPWNvbnRyYWN0b3JfaWQmdmFsdWU9JXMnLFxuXHRVUERBVEVfVVNFUl9QQVNTV09SRCA9ICcvY3JlLTEuMC9hcGkvdXNlci8lcy8lcycsXG5cdFVQREFURV9VU0VSX0xPR0lOID0gJy9jcmUtMS4wL2FwaS91c2VyLyVzL2xvZ2luJyxcblx0VVBEQVRFX1VTRVJfTUFTVEVSX0RBVEEgPSAnL2NyZS0xLjAvYXBpL3VzZXIvJXMvbWFzdGVyZGF0YScsXG5cdFBVUkdFX1VTRVIgPSAnL2NyZS0xLjAvYXBpL21hbmFnZS9wcml2YWN5L2V1L3VzZXIvJXMvcHVyZ2UnLFxuXHRVU0VSX1NFU1NJT04gPSAnL2NyZS0xLjAvYXBpL2F1dGgvc2VydmljZS8lcy9zZXNzaW9uLyVzJyxcblx0U0VBUkNIX1VTRVIgPSAnL2NyZS0xLjAvYXBpL3NlYXJjaC91c2VyJyxcblx0R0VUX1VTRVJfU0lOR0xFX1BST1BFUlRZID0gJy9jcmUtMS4wL2FwaS91c2VyLyVzL3N0b3JlL0dQL3Byb3BlcnRpZXMvJXMnLFxuXHRDSEFOR0VfVVNFUl9MT0dJTl9BTElBUyA9ICcvY3JlLTEuMC9hcGkvdXNlci8lcy9sb2dpbl9hbGlhcydcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsgc3RyaW5nIH0gcm91dGUgVGhlIEFQSSBSb3V0ZSB0aGFzIHlvdSB3YW50IHRvIGNhbGxcbiAqIEBwYXJhbSB7IHN0cmluZyB9IG1ldGhvZCBXaGF0IHR5cGUgb2YgbWV0aG9kIChQT1NUL0dFVC9QVVQvLi4uKVxuICogQHBhcmFtIHsgYW55IH0gW2JvZHldIGJvZHkgVGhlIGJvZHkgdG8gcGFzcyBpbnRvIHRoZSBBUEkgcmVxdWVzdFxuICogQHJldHVybnMgeyBQcm9taXNlPFJlc3BvbnNlPiB9XG4gKi9cbmNvbnN0IEFQSSA9IGFzeW5jIChyb3V0ZTogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgYm9keT86IGFueSk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcblx0aWYgKCFwcm9jZXNzLmVudi5DRUxFUkFPTkVfQkFTRV9VUkwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Vudmlyb25tZW50IHZhcmlhYmxlIFtDRUxFUkFPTkVfQkFTRV9VUkxdIG1pc3NpbmchJylcblx0fVxuXG5cdGlmICghc2VjcmV0c0xvYWRlZCkge1xuXHRcdGF3YWl0IGdldFNlY3JldHMoKVxuXHR9XG5cblx0Y29uc3QgaG9zdCA9IG5ldyBVUkwocHJvY2Vzcy5lbnYuQ0VMRVJBT05FX0JBU0VfVVJMKS5ob3N0XG5cdGNvbnN0IGRhdGUgPSBtb21lbnQudXRjKG5ldyBEYXRlKCkpLmZvcm1hdCgnZGRkLCBEIE1NTSBZWVlZIEhIOm1tOnNzJylcblxuXHRjb25zdCBzdHJpbmdfaG1hYyA9IGAkeyBtZXRob2QgfSAkeyByb3V0ZSB9IEhUVFAvMS4xYFxuICAgICAgICArICdcXG5ob3N0OiAnICsgaG9zdFxuICAgICAgICArICdcXG5kYXRlOiAnICsgZGF0ZVxuXG5cdGNvbnN0IGhhc2ggPSBDcnlwdG9KUy5IbWFjU0hBMjU2KHN0cmluZ19obWFjLCBzZWNyZXRzLmFwaVNlY3JldClcblx0Y29uc3Qgc2lnbmF0dXJlID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkoaGFzaClcblxuXHRjb25zdCBhdXRob3JpemF0aW9uID0gYFNpZ25hdHVyZSBrZXlJZD1cIiR7IHNlY3JldHMuYXBpS2V5IH1cIixhbGdvcml0aG09XCJobWFjLXNoYTI1NlwiLGhlYWRlcnM9XCJyZXF1ZXN0LWxpbmUgaG9zdCBkYXRlXCIsc2lnbmF0dXJlPVwiJHsgc2lnbmF0dXJlIH1cImBcblxuXHRyZXR1cm4gZmV0Y2goYCR7IHByb2Nlc3MuZW52LkNFTEVSQU9ORV9CQVNFX1VSTCB9JHsgcm91dGUgfWAsIHtcblx0XHRtZXRob2Q6IG1ldGhvZCxcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHQnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHRcdFx0aG9zdCwgZGF0ZSwgYXV0aG9yaXphdGlvblxuXHRcdH0sXG5cdFx0Ym9keTogSlNPTi5zdHJpbmdpZnkoYm9keSlcblx0fSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgQVBJIl19