58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import FormData from 'form-data';
 | |
| 
 | |
| export default function fetch(path, data = {}) {
 | |
|   const form = new FormData();
 | |
|   const keys = Object.keys(data);
 | |
| 
 | |
|   for (let key of keys) {
 | |
|     form.append(key, data[key]);
 | |
|   }
 | |
| 
 | |
| 
 | |
|   return new Promise((resolve, reject) => {
 | |
|     form.getLength((err, length) => {
 | |
|       if (err) {
 | |
|         return reject(err);
 | |
|       }
 | |
| 
 | |
|       form.submit({
 | |
|         protocol: 'https:',
 | |
|         host: 'api.telegram.org',
 | |
|         path: '/bot' + path,
 | |
|         headers: {
 | |
|           'Content-Length': length
 | |
|         }
 | |
|       }, (error, response) => {
 | |
|         if (error) {
 | |
|           return reject(error);
 | |
|         }
 | |
| 
 | |
|         return getBody(response).then(body => {
 | |
|           try {
 | |
|             let json = JSON.parse(body);
 | |
|             resolve(json);
 | |
|           } catch(e) {
 | |
|             reject(e);
 | |
|           }
 | |
|         }).catch(reject);
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| }
 | |
| 
 | |
| export function getBody(stream) {
 | |
|   let data = '';
 | |
| 
 | |
|   return new Promise((resolve, reject) => {
 | |
|     stream.on('data', chunk => {
 | |
|       data += chunk;
 | |
|     });
 | |
| 
 | |
|     stream.on('end', () => {
 | |
|       resolve(data);
 | |
|     });
 | |
| 
 | |
|     stream.on('error', reject);
 | |
|   });
 | |
| }
 |