@transcend-io/typescript-webhook-example
Version:
Example of a webhook that can be integrated with Transcend.
68 lines • 2.76 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const got_1 = __importDefault(require("got"));
const path_1 = __importDefault(require("path"));
const util_1 = require("util");
// Constants
const constants_1 = require("./constants");
const logger_1 = require("./logger");
// Helpers
const helpers_1 = require("./helpers");
const fs = require('fs');
const stream = require('stream');
const pipeline = (0, util_1.promisify)(stream.pipeline);
/**
* Process an access request for this user and upload the result to Transcend
*
* @param userIdentifier - User identifier
* @param nonce - Nonce to respond with
* @param requestLink - Link to request
*/
async function scheduleAccessRequest(userIdentifier, nonce, requestLink) {
logger_1.logger.info(`Uploading data - ${requestLink}`);
// Find user data
const userData = await (0, helpers_1.lookUpUser)(userIdentifier);
// Upload in bulk to datapoints, with a JSON payload
const bulkUpload = got_1.default.post(`${constants_1.SOMBRA_URL}/v1/data-silo`, {
headers: {
authorization: `Bearer ${constants_1.TRANSCEND_API_KEY}`,
'x-sombra-authorization': constants_1.SOMBRA_API_KEY
? `Bearer ${constants_1.SOMBRA_API_KEY}`
: undefined,
'x-transcend-nonce': nonce,
accept: 'application/json',
'user-agent': undefined,
},
json: {
profiles: userData,
},
});
// Upload a file to a datapoint
const readFile = fs.createReadStream(path_1.default.join(constants_1.MEDIA_FOLDER, 'big_buck_bunny.mp4'));
const fileUpload = got_1.default.stream.post(`${constants_1.SOMBRA_URL}/v1/datapoint`, {
headers: {
authorization: `Bearer ${constants_1.TRANSCEND_API_KEY}`,
'x-sombra-authorization': constants_1.SOMBRA_API_KEY
? `Bearer ${constants_1.SOMBRA_API_KEY}`
: undefined,
'x-transcend-nonce': nonce,
accept: 'application/json',
'user-agent': undefined,
'x-transcend-datapoint-name': 'Movies',
'x-transcend-profile-id': userIdentifier,
},
});
const fileUploadPipeline = await pipeline(readFile, fileUpload);
try {
await Promise.all([bulkUpload, fileUploadPipeline]);
logger_1.logger.info(`Successfully uploaded data - ${requestLink}`);
}
catch (error) {
logger_1.logger.error(`Failed to upload data - ${requestLink}`);
}
}
exports.default = scheduleAccessRequest;
//# sourceMappingURL=scheduleAccessRequest.js.map
;