All files / endpoints common_endpoints.js

16% Statements 4/25
100% Branches 0/0
25% Functions 2/8
16% Lines 4/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                                        1x                                                                                                                 1x   1x 1x                                                    
/*
 * Copyright (c) 2020 the original author or authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
import axios from 'axios';
import fs from 'fs';
import FormData from 'form-data';
 
// Collection of common endpoints that used by almost all services
const common_endpoints = {
    async upload_blob(blobData, url, api_key){
        var bodyFormData = new FormData();
        bodyFormData.append('file', blobData, 'example.jpg');
 
        return new Promise( async (resolve, reject) => {
            try {
                const response = await axios.post( url, bodyFormData, {
                    headers: {
                        'Content-Type': 'multipart/form-data',
                        "x-api-key": api_key
                    },
                })
 
                resolve(response)
            } catch (error) {
                reject(error)
            }
        })
    },
 
    /**
     * Upload from local machine
     * @param {String} image_path 
     * @param {String} url 
     * @param {String} api_key 
     * @returns {Promise}
     */
     async upload_path(image_path, url, api_key ){
        var bodyFormData = new FormData();
        bodyFormData.append('file', fs.createReadStream(image_path), { knownLength: fs.statSync(image_path).size }); 
 
        return new Promise( async (resolve, reject) => {
            try {
                const response = await axios.post( url, bodyFormData, {
                    headers: {
                        ...bodyFormData.getHeaders(),
                        "Content-Length": bodyFormData.getLengthSync(),
                        "x-api-key": api_key
                    },
                })
 
                resolve(response)
            } catch (error) {
                reject(error)
            }
        })
    },
 
    /**
     * Add image (from url) with subject
     * @param {String} image_url 
     * @param {String} url 
     * @param {String} api_key 
     * @returns {Promise}
     */
    async upload_url(image_url, url, api_key){
        var bodyFormData = new FormData();
        
        return new Promise( async (resolve, reject) => {
            await axios.get(image_url, { responseType: 'stream' })
                .then( async (response) => {
                    let image_extention = response.headers['content-type'].split("/")[1]
                    bodyFormData.append('file', response.data, `example.${image_extention}`);   
                    try {
                        const res = await axios.post( url, bodyFormData, {
                            headers: {
                                ...bodyFormData.getHeaders(),
                                "x-api-key": api_key
                            },
                        })
 
                        resolve(res)
                    } catch (error) {
                        reject(error)
                    }
                })
                .catch(error => {
                    reject(error)
                })
        })
    },
 
    
}
 
export { common_endpoints }