nl_tokens: Request a file .
pl_tokens: function ( path , options ) { return this . _getFileId ( path ) . then ( ( id ) => { return this . _getMeta ( id ) . then ( ( meta ) => { let etagWithoutQuotes ; if ( typeof ( meta ) === 'object' && typeof ( meta . etag ) === 'string' ) { etagWithoutQuotes = removeQuotes ( meta . etag ) ; } if ( options && <mask> . ifNoneMatch && ( etagWithoutQuotes === options . ifNoneMatch ) ) { return Promise . resolve ( { statusCode : 304 } ) ; } if ( ! meta . downloadUrl ) { if ( meta . exportLinks && meta . exportLinks [ 'text/html' ] ) { // Documents that were generated inside GoogleDocs have no // downloadUrl, but you can export them to text/html instead: meta . mimeType += ';export=text/html' ; meta . downloadUrl = meta . exportLinks [ 'text/html' ] ; } else { // empty file return Promise . resolve ( { statusCode : 200 , body : '' , contentType : meta . mimeType , revision : etagWithoutQuotes } ) ; } } var params = { responseType : 'arraybuffer' } ; return this . _request ( 'GET' , meta . downloadUrl , params ) . then ( ( response ) => { //first encode the response as text, and later check if  //text appears to actually be binary data return getTextFromArrayBuffer ( response . response , 'UTF-8' ) . then ( function ( responseText ) { let body = responseText ; if ( meta . mimeType . match ( / ^application\/json / ) ) { try { body = JSON . parse ( body ) ; } catch ( e ) { // body couldn't be parsed as JSON, so we'll just return it as is } } else { if ( shouldBeTreatedAsBinary ( responseText , meta . mimeType ) ) { //return unprocessed response  body = response . response ; } } return { statusCode : 200 , body : body , contentType : meta . mimeType , revision : etagWithoutQuotes } ; } ) ; } ) ; } ) ; } ) ; }