UNPKG

@transcend-io/typescript-webhook-example

Version:

Example of a webhook that can be integrated with Transcend.

68 lines 2.76 kB
"use strict"; 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