Best JavaScript code snippet using ava
request.js
Source: request.js
1import axios from 'axios';2import moment from 'moment';3import { history } from 'react-router-dom';4import { stringify, parse } from 'qs';5import { notification } from 'antd';6import jsCookie from 'js-cookie';7import { startURL } from '../config/constant';8import store, { storeKeys } from './persistent-store';9let refreshTimeout;10let lastAccessTime;11export const baseURL = '/api';12export const contentType = {13 form: 'application/x-www-form-urlencoded',14 json: 'application/json',15};16export const headerKeys = {17 ContentType: 'Content-Type',18 Authorization: 'Authorization',19};20export const methods = {21 GET: 'GET',22 POST: 'POST',23 PUT: 'PUT',24 DELETE: 'DELETE',25 PATCH: 'PATCH',26 HEAD: 'HEAD',27 OPTIONS: 'OPTIONS',28};29// Get access token30export function getAccessToken() {31 const token = store.get(storeKeys.AccessToken);32 if (!token) {33 return '';34 }35 return token.access_token;36}37// Wrap the URL with the token38export function wrapURLWithToken(url) {39 const ss = url.split('?');40 const query = parse(ss[1]);41 query.accessToken = getAccessToken();42 return `${ss[0]}?${stringify(query)}`;43}44// ç»åº45export function logout() {46 console.log('Logout event');47 if (refreshTimeout) {48 clearTimeout(refreshTimeout);49 }50 //binhnt: Remove cookie51 jsCookie.remove('token');52 //Remove AccessToken53 store.remove(storeKeys.AccessToken);54 window.location = '#/login'55 // const { redirect } = parse(window.location.href.split('?')[1]);56 console.log("binhnt.request.logout: redirect = ", startURL)57 // if (window.location.pathname !== startURL + '/login' && !redirect) {58 // window.location = startURL + '/login';59 // window.history.replace({60 // pathname: '/user/login',61 // search: stringify({62 // redirect: window.location.href,63 // }),64 // });65 // }66}67// request æ¦æªå¨68function requestInterceptors(c) {69 const config = { ...c };70 const token = store.get(storeKeys.AccessToken);71 if (token) {72 // console.log(73 // 'binhnt.requestInterceptors: Token = ',74 // token.access_token,75 // headerKeys.Authorization76 // );77 config.headers[headerKeys.Authorization] = `${token.token_type} ${token.access_token}`;78 }79 return config;80}81// ajax请æ±82export default function request(url, options = {}) {83 // console.log('AccessToken: ', storeKeys.AccessToken);84 const oldToken = store.get(storeKeys.AccessToken);85 console.log("oldToken: ", oldToken);86 if (oldToken && oldToken.expires_at - lastAccessTime <= 0) {87 if (refreshTimeout) {88 clearTimeout(refreshTimeout);89 }90 console.log("binhnt.request: out of access time ")91 logout();92 // eslint-disable-next-line compat/compat93 return Promise.reject(new Error('The token has expired'));94 }95 lastAccessTime = moment().unix();96 const opts = { ...options };97 let showNotify = true;98 if (opts.hideNotify) {99 showNotify = false;100 delete opts.hideNotify;101 }102 const config = {103 method: methods.GET,104 baseURL,105 headers: {},106 transformRequest: (data, headers) => {107 switch (headers[headerKeys.ContentType]) {108 case contentType.json:109 return JSON.stringify(data);110 case contentType.form:111 return stringify(data);112 default:113 return data;114 }115 },116 paramsSerializer: params => {117 return stringify(params);118 },119 timeout: 60000,120 ...opts,121 };122 if (123 !(config.headers && config.headers[headerKeys.ContentType]) &&124 [methods.POST, methods.PUT, methods.PATCH].indexOf(config.method) > -1125 ) {126 config.headers[headerKeys.ContentType] = contentType.json;127 }128 const instance = axios.create(config);129 instance.interceptors.request.use(requestInterceptors);130 return instance131 .request({ url })132 .then(res => {133 const { data } = res;134 // console.log('request.request: Data: ', data, 'url', url);135 return data;136 })137 .catch(error => {138 const { response } = error;139 const { status, data } = response;140 if (status === 401 && data.error && data.error.code === 9999) {141 logout();142 return response;143 }144 if (showNotify) {145 let msg = 'Request error';146 if (status === 504) {147 msg = 'Not connected to server';148 } else if (data && data.error) {149 msg = data.error.message;150 }151 notification.error({152 message: `${config.baseURL}${url}`,153 description: msg,154 });155 }156 return response;157 });158}159// Put in the access token160export function setToken(token) {161 //binhnt: 1. Add cookies to access nextjs162 jsCookie.set('token', token.access_token);163 //binhnt: 2. Add Token to access Backend164 console.log("Set access token = ", token.expires_at)165 lastAccessTime = moment().unix();166 store.set(storeKeys.AccessToken, token);167 if (refreshTimeout) {168 clearTimeout(refreshTimeout);169 }170 // Renew the token 10 minutes in advance171 const timeout = token.expires_at - moment().unix() - 10;172 if (timeout > 0) {173 refreshTimeout = setTimeout(() => {174 const oldToken = store.get(storeKeys.AccessToken);175 if (oldToken && oldToken.expires_at - lastAccessTime <= 0) {176 if (refreshTimeout) {177 clearTimeout(refreshTimeout);178 }179 return;180 }181 request('/v1/pub/refresh-token', {182 method: methods.POST,183 }).then(res => {184 setToken(res);185 });186 }, timeout * 1000);187 }...
request_cms.js
Source: request_cms.js
1import axios from 'axios';2import moment from 'moment';3import { history } from 'react-router-dom';4import { stringify, parse } from 'qs';5import { notification } from 'antd';6import store, { storeKeys } from './persistent-store';7let refreshTimeout;8let lastAccessTime;9export const baseURL = '/cms';10export const contentType = {11 form: 'application/x-www-form-urlencoded',12 json: 'application/json',13};14export const headerKeys = {15 ContentType: 'Content-Type',16 Authorization: 'Authorization',17};18export const methods = {19 GET: 'GET',20 POST: 'POST',21 PUT: 'PUT',22 DELETE: 'DELETE',23 PATCH: 'PATCH',24 HEAD: 'HEAD',25 OPTIONS: 'OPTIONS',26};27// Get access token28export function getAccessToken() {29 const token = store.get(storeKeys.AccessToken);30 if (!token) {31 return '';32 }33 return token.access_token;34 return '';35}36// Wrap the URL with the token37export function wrapURLWithToken(url) {38 const ss = url.split('?');39 const query = parse(ss[1]);40 query.accessToken = getAccessToken();41 return `${ss[0]}?${stringify(query)}`;42}43// Sign out44export function logout() {45 if (refreshTimeout) {46 clearTimeout(refreshTimeout);47 }48 store.remove(storeKeys.AccessToken);49 const { redirect } = parse(window.location.href.split('?')[1]);50 if (window.location.pathname !== '/login' && !redirect) {51 window.location = '/login';52 // window.history.replace({53 // pathname: '/user/login',54 // search: stringify({55 // redirect: window.location.href,56 // }),57 // });58 }59}60// request Interceptor61function requestInterceptors(c) {62 const config = { ...c };63 const token = store.get(storeKeys.AccessToken);64 if (token) {65 config.headers[headerKeys.Authorization] = `${token.token_type} ${token.access_token}`;66 }67 return config;68}69// ajax request70export default function request(url, options = {}) {71 // console.log('request_cms.request: AccessToken: ', storeKeys.AccessToken);72 const oldToken = store.get(storeKeys.AccessToken);73 // console.log("oldToken: ", oldToken);74 if (oldToken && oldToken.expires_at - lastAccessTime <= 0) {75 if (refreshTimeout) {76 clearTimeout(refreshTimeout);77 }78 logout();79 // eslint-disable-next-line compat/compat80 return Promise.reject(new Error('The token has expired'));81 }82 lastAccessTime = moment().unix();83 const opts = { ...options };84 let showNotify = true;85 if (opts.hideNotify) {86 showNotify = false;87 delete opts.hideNotify;88 }89 const config = {90 method: methods.GET,91 baseURL,92 headers: {},93 transformRequest: (data, headers) => {94 switch (headers[headerKeys.ContentType]) {95 case contentType.json:96 return JSON.stringify(data);97 case contentType.form:98 return stringify(data);99 default:100 return data;101 }102 },103 paramsSerializer: params => {104 return stringify(params);105 },106 timeout: 60000,107 ...opts,108 };109 if (110 !(config.headers && config.headers[headerKeys.ContentType]) &&111 [methods.POST, methods.PUT, methods.PATCH].indexOf(config.method) > -1112 ) {113 config.headers[headerKeys.ContentType] = contentType.json;114 }115 const instance = axios.create(config);116 instance.interceptors.request.use(requestInterceptors);117 return instance118 .request({ url })119 .then(res => {120 const { data } = res;121 // console.log('request_cms.request: Data', data);122 return data;123 })124 .catch(error => {125 const { response } = error;126 const { status, data } = response;127 if (status === 401 && data.error && data.error.code === 9999) {128 logout();129 return response;130 }131 if (showNotify) {132 let msg = 'Request error';133 if (status === 504) {134 msg = 'Not connected to server';135 } else if (data && data.error) {136 msg = data.error.message;137 }138 notification.error({139 message: `${config.baseURL}${url}`,140 description: msg,141 });142 }143 return response;144 });145}146// Put in the access token147export function setToken(token) {148 lastAccessTime = token.expires_at;149 store.set(storeKeys.AccessToken, token);150 if (refreshTimeout) {151 clearTimeout(refreshTimeout);152 }153 // Renew the token 10 minutes in advance154 const timeout = token.expires_at - moment().unix() - 10;155 if (timeout > 0) {156 refreshTimeout = setTimeout(() => {157 const oldToken = store.get(storeKeys.AccessToken);158 if (oldToken && oldToken.expires_at - lastAccessTime <= 0) {159 if (refreshTimeout) {160 clearTimeout(refreshTimeout);161 }162 return;163 }164 request('/v1/pub/refresh-token', {165 method: methods.POST,166 }).then(res => {167 setToken(res);168 });169 }, timeout * 1000);170 }...
index.js
Source: index.js
1/* eslint-disable no-undef */2import EventEmitter from './EventEmitter';3export default class TokenManagement {4 event = null;5 isRefreshing = false;6 refreshTimeout = 3000;7 constructor({ isTokenValid, getAccessToken, onRefreshToken, refreshTimeout = 3000 }) {8 const event = new EventEmitter();9 this.refreshTimeout = refreshTimeout;10 event.on('refresh', () => {11 (async () => {12 try {13 const token = await getAccessToken();14 if (isTokenValid(token)) {15 event.emit('refreshDone', token);16 } else {17 event.emit('refreshing');18 }19 } catch (e) {}20 })();21 });22 event.on('refreshing', () => {23 if (this.isRefreshing) {24 return;25 }26 // fetch27 this.isRefreshing = true;28 const evtFire = false;29 onRefreshToken((newToken) => {30 this.event.emit('refreshDone', newToken);31 this.isRefreshing = false;32 });33 if (this.refreshTimeout) {34 setTimeout(() => {35 if (!evtFire) {36 this.event.emit('refreshDone', null);37 this.isRefreshing = false;38 }39 }, this.refreshTimeout);40 }41 });42 this.event = event;43 }44 getToken() {45 return new Promise((resolve) => {46 let isCalled = false;47 const refreshDoneHandler = (token) => {48 resolve(token);49 isCalled = true;50 };51 this.event.once('refreshDone', refreshDoneHandler);52 if (!isCalled) {53 this.event.emit('refresh');54 }55 });56 }57 inject(service) {58 return async (...args) => {59 const token = await this.getToken();60 const response = await service(token, ...args);61 return response;62 };63 }...
Using AI Code Generation
1import {Component} from '@angular/core';2import {Idle, DEFAULT_INTERRUPTSOURCES} from '@ng-idle/core';3import {Keepalive} from '@ng-idle/keepalive';4@Component({5})6export class AppComponent {7 idleState = 'Not started.';8 timedOut = false;9 lastPing?: Date = null;10 constructor(private idle: Idle, private keepalive: Keepalive) {11 idle.setIdle(5);12 idle.setTimeout(5);13 idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);14 idle.onIdleEnd.subscribe(() => this.idleState = 'No longer idle.');15 idle.onTimeout.subscribe(() => {16 this.idleState = 'Timed out!';17 this.timedOut = true;18 });19 idle.onIdleStart.subscribe(() => this.idleState = 'You\'ve gone idle!');20 idle.onTimeoutWarning.subscribe((countdown) => this.idleState = 'You will time out in ' + countdown + ' seconds!');21 keepalive.interval(15);22 keepalive.onPing.subscribe(() => this.lastPing = new Date());23 this.reset();24 }25 reset() {26 this.idle.watch();27 this.idleState = 'Started.';28 this.timedOut = false;29 }30 refreshTimeout() {31 this.idle.refreshTimeout();32 }33}
Using AI Code Generation
1test('test', t => {2 t.plan(2);3 t.refreshTimeout(10000);4 const promise = new Promise((resolve, reject) => {5 setTimeout(() => {6 resolve('done');7 }, 2000);8 });9 return promise.then(result => {10 t.is(result, 'done');11 });12});13### .log(message)14test('test', t => {15 t.log('hello');16 t.log('world');17 t.pass();18});19### .debug(message)20test('test', t => {21 t.debug('hello');22 t.debug('world');23 t.pass();24});25### .snapshot([message], snapshot)26import fs from 'fs';27test('test', t => {28 t.snapshot(fs.readFileSync('test.js'));29});30### .throws(function|promise, [error, [message]])31import fs from 'fs';32test('test', t => {33 t.throws(() => {34 fs.readFileSync('non-existent-file.js');35 });36});37### .notThrows(function|promise, [message])38import fs from 'fs';39test('test', t => {40 t.notThrows(() => {41 fs.readFileSync('test.js');42 });43});44### .ifError(error, [message])45import fs from 'fs';46test('test', t =>
Using AI Code Generation
1var refreshTimeout = require('refresh-timeout');2var timeout = refreshTimeout(function() {3 console.log('timeout expired');4}, 1000);5var interval = setInterval(function() {6 console.log('refreshing timeout');7 timeout.refresh();8}, 500);9setTimeout(function() {10 console.log('clearing interval');11 clearInterval(interval);12}, 10000);
Using AI Code Generation
1var available = require('available');2available.refreshTimeout();3module.exports.refreshTimeout = function(){4}5var available = require('./available');6var available = require('available');7available.refreshTimeout();8module.exports.refreshTimeout = function(){9}10var available = require('available');11available.refreshTimeout();12module.exports.refreshTimeout = function(){13}
Check out the latest blogs from LambdaTest on this topic:
JSON or JavaScript Object Notation is a ubiquitous data format used by all sorts of mobile and web apps for asynchronous browser-server communication. JSON is an extremely popular data format, very easy to work with, compatible with every major programming language, and is supported by every major browser. However just like any programming language, it throws a lot of errors when it decide that today is not going to be your day.
If you own a website or mobile app, the best way to find out what’s going to work, what’s currently working, and what’s not of any use, is to use a customer insight and analytics tool for your product. These tools will give you insights related to how your user is interacting with your website/app, what is the workflow and user behaviour behind every conversion, and how you can better improve your interaction with your end users.
If you don’t already know about it, then let me tell you that the next big thing going in web world right now is Accelerated Mobile Pages (AMP). Backed by Google, AMP pages are quite popular in mobile-first world especially in emerging markets. If you are building AMP pages of your website then you are going in the right track. However have you wondered about the Cross Browser compatibility of these pages?
Reason why JS is adored all over the internet is because of the powerful libraries and tools that empower us in making efficient web pages in very less time. Closure is one of the perks of JS which is used quite a lot. Now, every once while these commonly used phenomenons double cross the developers and fall prey to the dark side. In this blog we will understand how closures and callbacks result in memory leakage.
There are more than 1.8 Billion distinct websites running right now. The whole world is running on webpages and these webpages are running on HTML. Hypertext Markup Language is one of the oldest and most used programming syntax and it also one of the most dynamically evolving one.
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!