2020-10-24 17:22:54 -06:00
( function ( f ) { if ( typeof exports === "object" && typeof module !== "undefined" ) { module . exports = f ( ) } else if ( typeof define === "function" && define . amd ) { define ( [ ] , f ) } else { var g ; if ( typeof window !== "undefined" ) { g = window } else if ( typeof global !== "undefined" ) { g = global } else if ( typeof self !== "undefined" ) { g = self } else { g = this } g . doip = f ( ) } } ) ( function ( ) { var define , module , exports ; return ( function ( ) { function r ( e , n , t ) { function o ( i , f ) { if ( ! n [ i ] ) { if ( ! e [ i ] ) { var c = "function" == typeof require && require ; if ( ! f && c ) return c ( i , ! 0 ) ; if ( u ) return u ( i , ! 0 ) ; var a = new Error ( "Cannot find module '" + i + "'" ) ; throw a . code = "MODULE_NOT_FOUND" , a } var p = n [ i ] = { exports : { } } ; e [ i ] [ 0 ] . call ( p . exports , function ( r ) { var n = e [ i ] [ 1 ] [ r ] ; return o ( n || r ) } , p , p . exports , r , e , n , t ) } return n [ i ] . exports } for ( var u = "function" == typeof require && require , i = 0 ; i < t . length ; i ++ ) o ( t [ i ] ) ; return o } return r } ) ( ) ( { 1 : [ function ( require , module , exports ) {
'use strict'
/* global fetch, btoa, Headers */
const core = require ( './core' )
2020-10-24 07:11:14 -06:00
2020-10-24 17:22:54 -06:00
class StatusError extends Error {
constructor ( res , ... params ) {
super ( ... params )
2020-10-24 07:11:14 -06:00
2020-10-24 17:22:54 -06:00
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( this , StatusError )
}
2020-10-24 07:11:14 -06:00
2020-10-24 17:22:54 -06:00
this . name = 'StatusError'
this . message = res . statusMessage
this . statusCode = res . status
this . res = res
this . json = res . json . bind ( res )
this . text = res . text . bind ( res )
this . arrayBuffer = res . arrayBuffer . bind ( res )
let buffer
const get = ( ) => {
if ( ! buffer ) buffer = this . arrayBuffer ( )
return buffer
}
Object . defineProperty ( this , 'responseBody' , { get } )
// match Node.js headers object
this . headers = { }
for ( const [ key , value ] of res . headers . entries ( ) ) {
this . headers [ key . toLowerCase ( ) ] = value
}
}
}
const mkrequest = ( statusCodes , method , encoding , headers , baseurl ) => async ( _url , body , _headers = { } ) => {
_url = baseurl + ( _url || '' )
let parsed = new URL ( _url )
if ( ! headers ) headers = { }
if ( parsed . username ) {
headers . Authorization = 'Basic ' + btoa ( parsed . username + ':' + parsed . password )
parsed = new URL ( parsed . protocol + '//' + parsed . host + parsed . pathname + parsed . search )
}
if ( parsed . protocol !== 'https:' && parsed . protocol !== 'http:' ) {
throw new Error ( ` Unknown protocol, ${ parsed . protocol } ` )
}
if ( body ) {
if ( body instanceof ArrayBuffer ||
ArrayBuffer . isView ( body ) ||
typeof body === 'string'
) {
// noop
} else if ( typeof body === 'object' ) {
body = JSON . stringify ( body )
headers [ 'Content-Type' ] = 'application/json'
} else {
throw new Error ( 'Unknown body type.' )
}
}
_headers = new Headers ( { ... ( headers || { } ) , ... _headers } )
const resp = await fetch ( parsed , { method , headers : _headers , body } )
resp . statusCode = resp . status
if ( ! statusCodes . has ( resp . status ) ) {
throw new StatusError ( resp )
}
if ( encoding === 'json' ) return resp . json ( )
else if ( encoding === 'buffer' ) return resp . arrayBuffer ( )
else if ( encoding === 'string' ) return resp . text ( )
else return resp
}
module . exports = core ( mkrequest )
} , { "./core" : 2 } ] , 2 : [ function ( require , module , exports ) {
'use strict'
const encodings = new Set ( [ 'json' , 'buffer' , 'string' ] )
module . exports = mkrequest => ( ... args ) => {
const statusCodes = new Set ( )
let method
let encoding
let headers
let baseurl = ''
args . forEach ( arg => {
if ( typeof arg === 'string' ) {
if ( arg . toUpperCase ( ) === arg ) {
if ( method ) {
const msg = ` Can't set method to ${ arg } , already set to ${ method } . `
throw new Error ( msg )
} else {
method = arg
}
} else if ( arg . startsWith ( 'http:' ) || arg . startsWith ( 'https:' ) ) {
baseurl = arg
} else {
if ( encodings . has ( arg ) ) {
encoding = arg
} else {
throw new Error ( ` Unknown encoding, ${ arg } ` )
}
}
} else if ( typeof arg === 'number' ) {
statusCodes . add ( arg )
} else if ( typeof arg === 'object' ) {
if ( Array . isArray ( arg ) || arg instanceof Set ) {
arg . forEach ( code => statusCodes . add ( code ) )
} else {
if ( headers ) {
throw new Error ( 'Cannot set headers twice.' )
}
headers = arg
}
} else {
throw new Error ( ` Unknown type: ${ typeof arg } ` )
}
} )
if ( ! method ) method = 'GET'
if ( statusCodes . size === 0 ) {
statusCodes . add ( 200 )
}
return mkrequest ( statusCodes , method , encoding , headers , baseurl )
}
} , { } ] , 3 : [ function ( require , module , exports ) {
2020-11-05 04:14:26 -07:00
} , { } ] , 4 : [ function ( require , module , exports ) {
( function ( process ) { ( function ( ) {
/* @flow */
/ * : :
type DotenvParseOptions = {
debug ? : boolean
}
// keys and values from src
type DotenvParseOutput = { [ string ] : string }
type DotenvConfigOptions = {
path ? : string , // path to .env file
encoding ? : string , // encoding of .env file
debug ? : string // turn on logging for debugging purposes
}
type DotenvConfigOutput = {
parsed ? : DotenvParseOutput ,
error ? : Error
}
* /
const fs = require ( 'fs' )
const path = require ( 'path' )
function log ( message /*: string */ ) {
console . log ( ` [dotenv][DEBUG] ${ message } ` )
}
const NEWLINE = '\n'
const RE _INI _KEY _VAL = /^\s*([\w.-]+)\s*=\s*(.*)?\s*$/
const RE _NEWLINES = /\\n/g
const NEWLINES _MATCH = /\n|\r|\r\n/
// Parses src into an Object
function parse ( src /*: string | Buffer */ , options /*: ?DotenvParseOptions */ ) /*: DotenvParseOutput */ {
const debug = Boolean ( options && options . debug )
const obj = { }
// convert Buffers before splitting into lines and processing
src . toString ( ) . split ( NEWLINES _MATCH ) . forEach ( function ( line , idx ) {
// matching "KEY' and 'VAL' in 'KEY=VAL'
const keyValueArr = line . match ( RE _INI _KEY _VAL )
// matched?
if ( keyValueArr != null ) {
const key = keyValueArr [ 1 ]
// default undefined or missing values to empty string
let val = ( keyValueArr [ 2 ] || '' )
const end = val . length - 1
const isDoubleQuoted = val [ 0 ] === '"' && val [ end ] === '"'
const isSingleQuoted = val [ 0 ] === "'" && val [ end ] === "'"
// if single or double quoted, remove quotes
if ( isSingleQuoted || isDoubleQuoted ) {
val = val . substring ( 1 , end )
// if double quoted, expand newlines
if ( isDoubleQuoted ) {
val = val . replace ( RE _NEWLINES , NEWLINE )
}
} else {
// remove surrounding whitespace
val = val . trim ( )
}
obj [ key ] = val
} else if ( debug ) {
log ( ` did not match key and value when parsing line ${ idx + 1 } : ${ line } ` )
}
} )
return obj
}
// Populates process.env from .env file
function config ( options /*: ?DotenvConfigOptions */ ) /*: DotenvConfigOutput */ {
let dotenvPath = path . resolve ( process . cwd ( ) , '.env' )
let encoding /*: string */ = 'utf8'
let debug = false
if ( options ) {
if ( options . path != null ) {
dotenvPath = options . path
}
if ( options . encoding != null ) {
encoding = options . encoding
}
if ( options . debug != null ) {
debug = true
}
}
try {
// specifying an encoding returns a string instead of a buffer
const parsed = parse ( fs . readFileSync ( dotenvPath , { encoding } ) , { debug } )
Object . keys ( parsed ) . forEach ( function ( key ) {
if ( ! Object . prototype . hasOwnProperty . call ( process . env , key ) ) {
process . env [ key ] = parsed [ key ]
} else if ( debug ) {
log ( ` " ${ key } " is already defined in \` process.env \` and will not be overwritten ` )
}
} )
return { parsed }
} catch ( e ) {
return { error : e }
}
}
module . exports . config = config
module . exports . parse = parse
} ) . call ( this ) } ) . call ( this , require ( '_process' ) )
} , { "_process" : 6 , "fs" : 3 , "path" : 5 } ] , 5 : [ function ( require , module , exports ) {
( function ( process ) { ( function ( ) {
// 'path' module extracted from Node.js v8.11.1 (only the posix part)
// transplited with Babel
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict' ;
function assertPath ( path ) {
if ( typeof path !== 'string' ) {
throw new TypeError ( 'Path must be a string. Received ' + JSON . stringify ( path ) ) ;
}
}
// Resolves . and .. elements in a path with directory names
function normalizeStringPosix ( path , allowAboveRoot ) {
var res = '' ;
var lastSegmentLength = 0 ;
var lastSlash = - 1 ;
var dots = 0 ;
var code ;
for ( var i = 0 ; i <= path . length ; ++ i ) {
if ( i < path . length )
code = path . charCodeAt ( i ) ;
else if ( code === 47 /*/*/ )
break ;
else
code = 47 /*/*/ ;
if ( code === 47 /*/*/ ) {
if ( lastSlash === i - 1 || dots === 1 ) {
// NOOP
} else if ( lastSlash !== i - 1 && dots === 2 ) {
if ( res . length < 2 || lastSegmentLength !== 2 || res . charCodeAt ( res . length - 1 ) !== 46 /*.*/ || res . charCodeAt ( res . length - 2 ) !== 46 /*.*/ ) {
if ( res . length > 2 ) {
var lastSlashIndex = res . lastIndexOf ( '/' ) ;
if ( lastSlashIndex !== res . length - 1 ) {
if ( lastSlashIndex === - 1 ) {
res = '' ;
lastSegmentLength = 0 ;
} else {
res = res . slice ( 0 , lastSlashIndex ) ;
lastSegmentLength = res . length - 1 - res . lastIndexOf ( '/' ) ;
}
lastSlash = i ;
dots = 0 ;
continue ;
}
} else if ( res . length === 2 || res . length === 1 ) {
res = '' ;
lastSegmentLength = 0 ;
lastSlash = i ;
dots = 0 ;
continue ;
}
}
if ( allowAboveRoot ) {
if ( res . length > 0 )
res += '/..' ;
else
res = '..' ;
lastSegmentLength = 2 ;
}
} else {
if ( res . length > 0 )
res += '/' + path . slice ( lastSlash + 1 , i ) ;
else
res = path . slice ( lastSlash + 1 , i ) ;
lastSegmentLength = i - lastSlash - 1 ;
}
lastSlash = i ;
dots = 0 ;
} else if ( code === 46 /*.*/ && dots !== - 1 ) {
++ dots ;
} else {
dots = - 1 ;
}
}
return res ;
}
function _format ( sep , pathObject ) {
var dir = pathObject . dir || pathObject . root ;
var base = pathObject . base || ( pathObject . name || '' ) + ( pathObject . ext || '' ) ;
if ( ! dir ) {
return base ;
}
if ( dir === pathObject . root ) {
return dir + base ;
}
return dir + sep + base ;
}
var posix = {
// path.resolve([from ...], to)
resolve : function resolve ( ) {
var resolvedPath = '' ;
var resolvedAbsolute = false ;
var cwd ;
for ( var i = arguments . length - 1 ; i >= - 1 && ! resolvedAbsolute ; i -- ) {
var path ;
if ( i >= 0 )
path = arguments [ i ] ;
else {
if ( cwd === undefined )
cwd = process . cwd ( ) ;
path = cwd ;
}
assertPath ( path ) ;
// Skip empty entries
if ( path . length === 0 ) {
continue ;
}
resolvedPath = path + '/' + resolvedPath ;
resolvedAbsolute = path . charCodeAt ( 0 ) === 47 /*/*/ ;
}
// At this point the path should be resolved to a full absolute path, but
// handle relative paths to be safe (might happen when process.cwd() fails)
// Normalize the path
resolvedPath = normalizeStringPosix ( resolvedPath , ! resolvedAbsolute ) ;
if ( resolvedAbsolute ) {
if ( resolvedPath . length > 0 )
return '/' + resolvedPath ;
else
return '/' ;
} else if ( resolvedPath . length > 0 ) {
return resolvedPath ;
} else {
return '.' ;
}
} ,
normalize : function normalize ( path ) {
assertPath ( path ) ;
if ( path . length === 0 ) return '.' ;
var isAbsolute = path . charCodeAt ( 0 ) === 47 /*/*/ ;
var trailingSeparator = path . charCodeAt ( path . length - 1 ) === 47 /*/*/ ;
// Normalize the path
path = normalizeStringPosix ( path , ! isAbsolute ) ;
if ( path . length === 0 && ! isAbsolute ) path = '.' ;
if ( path . length > 0 && trailingSeparator ) path += '/' ;
if ( isAbsolute ) return '/' + path ;
return path ;
} ,
isAbsolute : function isAbsolute ( path ) {
assertPath ( path ) ;
return path . length > 0 && path . charCodeAt ( 0 ) === 47 /*/*/ ;
} ,
join : function join ( ) {
if ( arguments . length === 0 )
return '.' ;
var joined ;
for ( var i = 0 ; i < arguments . length ; ++ i ) {
var arg = arguments [ i ] ;
assertPath ( arg ) ;
if ( arg . length > 0 ) {
if ( joined === undefined )
joined = arg ;
else
joined += '/' + arg ;
}
}
if ( joined === undefined )
return '.' ;
return posix . normalize ( joined ) ;
} ,
relative : function relative ( from , to ) {
assertPath ( from ) ;
assertPath ( to ) ;
if ( from === to ) return '' ;
from = posix . resolve ( from ) ;
to = posix . resolve ( to ) ;
if ( from === to ) return '' ;
// Trim any leading backslashes
var fromStart = 1 ;
for ( ; fromStart < from . length ; ++ fromStart ) {
if ( from . charCodeAt ( fromStart ) !== 47 /*/*/ )
break ;
}
var fromEnd = from . length ;
var fromLen = fromEnd - fromStart ;
// Trim any leading backslashes
var toStart = 1 ;
for ( ; toStart < to . length ; ++ toStart ) {
if ( to . charCodeAt ( toStart ) !== 47 /*/*/ )
break ;
}
var toEnd = to . length ;
var toLen = toEnd - toStart ;
// Compare paths to find the longest common path from root
var length = fromLen < toLen ? fromLen : toLen ;
var lastCommonSep = - 1 ;
var i = 0 ;
for ( ; i <= length ; ++ i ) {
if ( i === length ) {
if ( toLen > length ) {
if ( to . charCodeAt ( toStart + i ) === 47 /*/*/ ) {
// We get here if `from` is the exact base path for `to`.
// For example: from='/foo/bar'; to='/foo/bar/baz'
return to . slice ( toStart + i + 1 ) ;
} else if ( i === 0 ) {
// We get here if `from` is the root
// For example: from='/'; to='/foo'
return to . slice ( toStart + i ) ;
}
} else if ( fromLen > length ) {
if ( from . charCodeAt ( fromStart + i ) === 47 /*/*/ ) {
// We get here if `to` is the exact base path for `from`.
// For example: from='/foo/bar/baz'; to='/foo/bar'
lastCommonSep = i ;
} else if ( i === 0 ) {
// We get here if `to` is the root.
// For example: from='/foo'; to='/'
lastCommonSep = 0 ;
}
}
break ;
}
var fromCode = from . charCodeAt ( fromStart + i ) ;
var toCode = to . charCodeAt ( toStart + i ) ;
if ( fromCode !== toCode )
break ;
else if ( fromCode === 47 /*/*/ )
lastCommonSep = i ;
}
var out = '' ;
// Generate the relative path based on the path difference between `to`
// and `from`
for ( i = fromStart + lastCommonSep + 1 ; i <= fromEnd ; ++ i ) {
if ( i === fromEnd || from . charCodeAt ( i ) === 47 /*/*/ ) {
if ( out . length === 0 )
out += '..' ;
else
out += '/..' ;
}
}
// Lastly, append the rest of the destination (`to`) path that comes after
// the common path parts
if ( out . length > 0 )
return out + to . slice ( toStart + lastCommonSep ) ;
else {
toStart += lastCommonSep ;
if ( to . charCodeAt ( toStart ) === 47 /*/*/ )
++ toStart ;
return to . slice ( toStart ) ;
}
} ,
_makeLong : function _makeLong ( path ) {
return path ;
} ,
dirname : function dirname ( path ) {
assertPath ( path ) ;
if ( path . length === 0 ) return '.' ;
var code = path . charCodeAt ( 0 ) ;
var hasRoot = code === 47 /*/*/ ;
var end = - 1 ;
var matchedSlash = true ;
for ( var i = path . length - 1 ; i >= 1 ; -- i ) {
code = path . charCodeAt ( i ) ;
if ( code === 47 /*/*/ ) {
if ( ! matchedSlash ) {
end = i ;
break ;
}
} else {
// We saw the first non-path separator
matchedSlash = false ;
}
}
if ( end === - 1 ) return hasRoot ? '/' : '.' ;
if ( hasRoot && end === 1 ) return '//' ;
return path . slice ( 0 , end ) ;
} ,
basename : function basename ( path , ext ) {
if ( ext !== undefined && typeof ext !== 'string' ) throw new TypeError ( '"ext" argument must be a string' ) ;
assertPath ( path ) ;
var start = 0 ;
var end = - 1 ;
var matchedSlash = true ;
var i ;
if ( ext !== undefined && ext . length > 0 && ext . length <= path . length ) {
if ( ext . length === path . length && ext === path ) return '' ;
var extIdx = ext . length - 1 ;
var firstNonSlashEnd = - 1 ;
for ( i = path . length - 1 ; i >= 0 ; -- i ) {
var code = path . charCodeAt ( i ) ;
if ( code === 47 /*/*/ ) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if ( ! matchedSlash ) {
start = i + 1 ;
break ;
}
} else {
if ( firstNonSlashEnd === - 1 ) {
// We saw the first non-path separator, remember this index in case
// we need it if the extension ends up not matching
matchedSlash = false ;
firstNonSlashEnd = i + 1 ;
}
if ( extIdx >= 0 ) {
// Try to match the explicit extension
if ( code === ext . charCodeAt ( extIdx ) ) {
if ( -- extIdx === - 1 ) {
// We matched the extension, so mark this as the end of our path
// component
end = i ;
}
} else {
// Extension does not match, so our result is the entire path
// component
extIdx = - 1 ;
end = firstNonSlashEnd ;
}
}
}
}
if ( start === end ) end = firstNonSlashEnd ; else if ( end === - 1 ) end = path . length ;
return path . slice ( start , end ) ;
} else {
for ( i = path . length - 1 ; i >= 0 ; -- i ) {
if ( path . charCodeAt ( i ) === 47 /*/*/ ) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if ( ! matchedSlash ) {
start = i + 1 ;
break ;
}
} else if ( end === - 1 ) {
// We saw the first non-path separator, mark this as the end of our
// path component
matchedSlash = false ;
end = i + 1 ;
}
}
if ( end === - 1 ) return '' ;
return path . slice ( start , end ) ;
}
} ,
extname : function extname ( path ) {
assertPath ( path ) ;
var startDot = - 1 ;
var startPart = 0 ;
var end = - 1 ;
var matchedSlash = true ;
// Track the state of characters (if any) we see before our first dot and
// after any path separator we find
var preDotState = 0 ;
for ( var i = path . length - 1 ; i >= 0 ; -- i ) {
var code = path . charCodeAt ( i ) ;
if ( code === 47 /*/*/ ) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if ( ! matchedSlash ) {
startPart = i + 1 ;
break ;
}
continue ;
}
if ( end === - 1 ) {
// We saw the first non-path separator, mark this as the end of our
// extension
matchedSlash = false ;
end = i + 1 ;
}
if ( code === 46 /*.*/ ) {
// If this is our first dot, mark it as the start of our extension
if ( startDot === - 1 )
startDot = i ;
else if ( preDotState !== 1 )
preDotState = 1 ;
} else if ( startDot !== - 1 ) {
// We saw a non-dot and non-path separator before our dot, so we should
// have a good chance at having a non-empty extension
preDotState = - 1 ;
}
}
if ( startDot === - 1 || end === - 1 ||
// We saw a non-dot character immediately before the dot
preDotState === 0 ||
// The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1 ) {
return '' ;
}
return path . slice ( startDot , end ) ;
} ,
format : function format ( pathObject ) {
if ( pathObject === null || typeof pathObject !== 'object' ) {
throw new TypeError ( 'The "pathObject" argument must be of type Object. Received type ' + typeof pathObject ) ;
}
return _format ( '/' , pathObject ) ;
} ,
parse : function parse ( path ) {
assertPath ( path ) ;
var ret = { root : '' , dir : '' , base : '' , ext : '' , name : '' } ;
if ( path . length === 0 ) return ret ;
var code = path . charCodeAt ( 0 ) ;
var isAbsolute = code === 47 /*/*/ ;
var start ;
if ( isAbsolute ) {
ret . root = '/' ;
start = 1 ;
} else {
start = 0 ;
}
var startDot = - 1 ;
var startPart = 0 ;
var end = - 1 ;
var matchedSlash = true ;
var i = path . length - 1 ;
// Track the state of characters (if any) we see before our first dot and
// after any path separator we find
var preDotState = 0 ;
// Get non-dir info
for ( ; i >= start ; -- i ) {
code = path . charCodeAt ( i ) ;
if ( code === 47 /*/*/ ) {
// If we reached a path separator that was not part of a set of path
// separators at the end of the string, stop now
if ( ! matchedSlash ) {
startPart = i + 1 ;
break ;
}
continue ;
}
if ( end === - 1 ) {
// We saw the first non-path separator, mark this as the end of our
// extension
matchedSlash = false ;
end = i + 1 ;
}
if ( code === 46 /*.*/ ) {
// If this is our first dot, mark it as the start of our extension
if ( startDot === - 1 ) startDot = i ; else if ( preDotState !== 1 ) preDotState = 1 ;
} else if ( startDot !== - 1 ) {
// We saw a non-dot and non-path separator before our dot, so we should
// have a good chance at having a non-empty extension
preDotState = - 1 ;
}
}
if ( startDot === - 1 || end === - 1 ||
// We saw a non-dot character immediately before the dot
preDotState === 0 ||
// The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1 ) {
if ( end !== - 1 ) {
if ( startPart === 0 && isAbsolute ) ret . base = ret . name = path . slice ( 1 , end ) ; else ret . base = ret . name = path . slice ( startPart , end ) ;
}
} else {
if ( startPart === 0 && isAbsolute ) {
ret . name = path . slice ( 1 , startDot ) ;
ret . base = path . slice ( 1 , end ) ;
} else {
ret . name = path . slice ( startPart , startDot ) ;
ret . base = path . slice ( startPart , end ) ;
}
ret . ext = path . slice ( startDot , end ) ;
}
if ( startPart > 0 ) ret . dir = path . slice ( 0 , startPart - 1 ) ; else if ( isAbsolute ) ret . dir = '/' ;
return ret ;
} ,
sep : '/' ,
delimiter : ':' ,
win32 : null ,
posix : null
} ;
posix . posix = posix ;
module . exports = posix ;
} ) . call ( this ) } ) . call ( this , require ( '_process' ) )
} , { "_process" : 6 } ] , 6 : [ function ( require , module , exports ) {
// shim for using process in browser
var process = module . exports = { } ;
// cached from whatever global is present so that test runners that stub it
// don't break things. But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals. It's inside a
// function because try/catches deoptimize in certain engines.
var cachedSetTimeout ;
var cachedClearTimeout ;
function defaultSetTimout ( ) {
throw new Error ( 'setTimeout has not been defined' ) ;
}
function defaultClearTimeout ( ) {
throw new Error ( 'clearTimeout has not been defined' ) ;
}
( function ( ) {
try {
if ( typeof setTimeout === 'function' ) {
cachedSetTimeout = setTimeout ;
} else {
cachedSetTimeout = defaultSetTimout ;
}
} catch ( e ) {
cachedSetTimeout = defaultSetTimout ;
}
try {
if ( typeof clearTimeout === 'function' ) {
cachedClearTimeout = clearTimeout ;
} else {
cachedClearTimeout = defaultClearTimeout ;
}
} catch ( e ) {
cachedClearTimeout = defaultClearTimeout ;
}
} ( ) )
function runTimeout ( fun ) {
if ( cachedSetTimeout === setTimeout ) {
//normal enviroments in sane situations
return setTimeout ( fun , 0 ) ;
}
// if setTimeout wasn't available but was latter defined
if ( ( cachedSetTimeout === defaultSetTimout || ! cachedSetTimeout ) && setTimeout ) {
cachedSetTimeout = setTimeout ;
return setTimeout ( fun , 0 ) ;
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedSetTimeout ( fun , 0 ) ;
} catch ( e ) {
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedSetTimeout . call ( null , fun , 0 ) ;
} catch ( e ) {
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
return cachedSetTimeout . call ( this , fun , 0 ) ;
}
}
}
function runClearTimeout ( marker ) {
if ( cachedClearTimeout === clearTimeout ) {
//normal enviroments in sane situations
return clearTimeout ( marker ) ;
}
// if clearTimeout wasn't available but was latter defined
if ( ( cachedClearTimeout === defaultClearTimeout || ! cachedClearTimeout ) && clearTimeout ) {
cachedClearTimeout = clearTimeout ;
return clearTimeout ( marker ) ;
}
try {
// when when somebody has screwed with setTimeout but no I.E. maddness
return cachedClearTimeout ( marker ) ;
} catch ( e ) {
try {
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
return cachedClearTimeout . call ( null , marker ) ;
} catch ( e ) {
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
return cachedClearTimeout . call ( this , marker ) ;
}
}
}
var queue = [ ] ;
var draining = false ;
var currentQueue ;
var queueIndex = - 1 ;
function cleanUpNextTick ( ) {
if ( ! draining || ! currentQueue ) {
return ;
}
draining = false ;
if ( currentQueue . length ) {
queue = currentQueue . concat ( queue ) ;
} else {
queueIndex = - 1 ;
}
if ( queue . length ) {
drainQueue ( ) ;
}
}
function drainQueue ( ) {
if ( draining ) {
return ;
}
var timeout = runTimeout ( cleanUpNextTick ) ;
draining = true ;
var len = queue . length ;
while ( len ) {
currentQueue = queue ;
queue = [ ] ;
while ( ++ queueIndex < len ) {
if ( currentQueue ) {
currentQueue [ queueIndex ] . run ( ) ;
}
}
queueIndex = - 1 ;
len = queue . length ;
}
currentQueue = null ;
draining = false ;
runClearTimeout ( timeout ) ;
}
process . nextTick = function ( fun ) {
var args = new Array ( arguments . length - 1 ) ;
if ( arguments . length > 1 ) {
for ( var i = 1 ; i < arguments . length ; i ++ ) {
args [ i - 1 ] = arguments [ i ] ;
}
}
queue . push ( new Item ( fun , args ) ) ;
if ( queue . length === 1 && ! draining ) {
runTimeout ( drainQueue ) ;
}
} ;
// v8 likes predictible objects
function Item ( fun , array ) {
this . fun = fun ;
this . array = array ;
}
Item . prototype . run = function ( ) {
this . fun . apply ( null , this . array ) ;
} ;
process . title = 'browser' ;
process . browser = true ;
process . env = { } ;
process . argv = [ ] ;
process . version = '' ; // empty string to avoid regexp issues
process . versions = { } ;
function noop ( ) { }
process . on = noop ;
process . addListener = noop ;
process . once = noop ;
process . off = noop ;
process . removeListener = noop ;
process . removeAllListeners = noop ;
process . emit = noop ;
process . prependListener = noop ;
process . prependOnceListener = noop ;
process . listeners = function ( name ) { return [ ] }
process . binding = function ( name ) {
throw new Error ( 'process.binding is not supported' ) ;
} ;
process . cwd = function ( ) { return '/' } ;
process . chdir = function ( dir ) {
throw new Error ( 'process.chdir is not supported' ) ;
} ;
process . umask = function ( ) { return 0 ; } ;
} , { } ] , 7 : [ function ( require , module , exports ) {
2020-10-24 06:38:10 -06:00
( function ( module ) {
'use strict' ;
module . exports . is _uri = is _iri ;
module . exports . is _http _uri = is _http _iri ;
module . exports . is _https _uri = is _https _iri ;
module . exports . is _web _uri = is _web _iri ;
// Create aliases
module . exports . isUri = is _iri ;
module . exports . isHttpUri = is _http _iri ;
module . exports . isHttpsUri = is _https _iri ;
module . exports . isWebUri = is _web _iri ;
// private function
// internal URI spitter method - direct from RFC 3986
var splitUri = function ( uri ) {
var splitted = uri . match ( /(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/ ) ;
return splitted ;
} ;
function is _iri ( value ) {
if ( ! value ) {
return ;
}
// check for illegal characters
if ( /[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i . test ( value ) ) return ;
// check for hex escapes that aren't complete
if ( /%[^0-9a-f]/i . test ( value ) ) return ;
if ( /%[0-9a-f](:?[^0-9a-f]|$)/i . test ( value ) ) return ;
var splitted = [ ] ;
var scheme = '' ;
var authority = '' ;
var path = '' ;
var query = '' ;
var fragment = '' ;
var out = '' ;
// from RFC 3986
splitted = splitUri ( value ) ;
scheme = splitted [ 1 ] ;
authority = splitted [ 2 ] ;
path = splitted [ 3 ] ;
query = splitted [ 4 ] ;
fragment = splitted [ 5 ] ;
// scheme and path are required, though the path can be empty
if ( ! ( scheme && scheme . length && path . length >= 0 ) ) return ;
// if authority is present, the path must be empty or begin with a /
if ( authority && authority . length ) {
if ( ! ( path . length === 0 || /^\// . test ( path ) ) ) return ;
} else {
// if authority is not present, the path must not start with //
if ( /^\/\// . test ( path ) ) return ;
}
// scheme must begin with a letter, then consist of letters, digits, +, ., or -
if ( ! /^[a-z][a-z0-9\+\-\.]*$/ . test ( scheme . toLowerCase ( ) ) ) return ;
// re-assemble the URL per section 5.3 in RFC 3986
out += scheme + ':' ;
if ( authority && authority . length ) {
out += '//' + authority ;
}
out += path ;
if ( query && query . length ) {
out += '?' + query ;
}
if ( fragment && fragment . length ) {
out += '#' + fragment ;
}
return out ;
}
function is _http _iri ( value , allowHttps ) {
if ( ! is _iri ( value ) ) {
return ;
}
var splitted = [ ] ;
var scheme = '' ;
var authority = '' ;
var path = '' ;
var port = '' ;
var query = '' ;
var fragment = '' ;
var out = '' ;
// from RFC 3986
splitted = splitUri ( value ) ;
scheme = splitted [ 1 ] ;
authority = splitted [ 2 ] ;
path = splitted [ 3 ] ;
query = splitted [ 4 ] ;
fragment = splitted [ 5 ] ;
if ( ! scheme ) return ;
if ( allowHttps ) {
if ( scheme . toLowerCase ( ) != 'https' ) return ;
} else {
if ( scheme . toLowerCase ( ) != 'http' ) return ;
}
// fully-qualified URIs must have an authority section that is
// a valid host
if ( ! authority ) {
return ;
}
// enable port component
if ( /:(\d+)$/ . test ( authority ) ) {
port = authority . match ( /:(\d+)$/ ) [ 0 ] ;
authority = authority . replace ( /:\d+$/ , '' ) ;
}
out += scheme + ':' ;
out += '//' + authority ;
if ( port ) {
out += port ;
}
out += path ;
if ( query && query . length ) {
out += '?' + query ;
}
if ( fragment && fragment . length ) {
out += '#' + fragment ;
}
return out ;
}
function is _https _iri ( value ) {
return is _http _iri ( value , true ) ;
}
function is _web _iri ( value ) {
return ( is _http _iri ( value ) || is _https _iri ( value ) ) ;
}
} ) ( module ) ;
2020-11-05 04:14:26 -07:00
} , { } ] , 8 : [ function ( require , module , exports ) {
2020-10-24 17:22:54 -06:00
const utils = require ( './utils' )
2020-10-24 06:38:10 -06:00
2020-11-03 14:53:04 -07:00
const runOnJson = ( res , proofData , checkPath , checkClaim , checkRelation ) => {
let re
2020-10-24 06:38:10 -06:00
2020-11-03 14:53:04 -07:00
if ( res . isVerified || ! proofData ) {
return res
2020-10-24 17:22:54 -06:00
}
2020-10-24 06:38:10 -06:00
2020-11-05 04:14:26 -07:00
if ( Array . isArray ( proofData ) ) {
proofData . forEach ( ( item , i ) => {
res = runOnJson ( res , item , checkPath , checkClaim , checkRelation )
} )
return res
}
2020-10-24 17:22:54 -06:00
if ( checkPath . length == 0 ) {
switch ( checkRelation ) {
default :
case 'contains' :
2020-10-26 16:02:22 -06:00
re = new RegExp ( checkClaim . replace ( '[' , '\\[' ) . replace ( ']' , '\\]' ) , "gi" )
2020-11-03 14:53:04 -07:00
res . isVerified = re . test ( proofData . replace ( /\r?\n|\r/ , '' ) )
2020-10-24 17:22:54 -06:00
break
case 'equals' :
2020-11-03 14:53:04 -07:00
res . isVerified = proofData . replace ( /\r?\n|\r/ , '' ) . toLowerCase ( ) == checkClaim . toLowerCase ( )
2020-10-24 17:22:54 -06:00
break
case 'oneOf' :
re = new RegExp ( checkClaim , "gi" )
2020-11-03 14:53:04 -07:00
res . isVerified = re . test ( proofData . join ( "|" ) )
2020-10-24 17:22:54 -06:00
break
}
2020-11-03 14:53:04 -07:00
return res
}
if ( ! ( checkPath [ 0 ] in proofData ) ) {
res . errors . push ( 'err_data_structure_incorrect' )
return res
2020-10-24 17:22:54 -06:00
}
2020-10-24 06:38:10 -06:00
2020-11-05 04:14:26 -07:00
res = runOnJson ( res , proofData [ checkPath [ 0 ] ] , checkPath . slice ( 1 ) , checkClaim , checkRelation )
2020-11-03 14:53:04 -07:00
return res
2020-10-24 17:22:54 -06:00
}
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
const run = ( proofData , spData ) => {
2020-11-03 14:53:04 -07:00
let res = {
isVerified : false ,
errors : [ ]
}
2020-10-24 17:22:54 -06:00
switch ( spData . proof . format ) {
case 'json' :
2020-11-03 14:53:04 -07:00
res = runOnJson ( res , proofData , spData . claim . path , utils . generateClaim ( spData . claim . fingerprint , spData . claim . format ) , spData . claim . relation )
2020-10-24 17:22:54 -06:00
break
case 'text' :
re = new RegExp ( utils . generateClaim ( spData . claim . fingerprint , spData . claim . format ) , "gi" )
2020-11-03 14:53:04 -07:00
res = re . test ( proofData . replace ( /\r?\n|\r/ , '' ) )
2020-10-24 17:22:54 -06:00
break
}
2020-11-03 14:53:04 -07:00
return res
2020-10-24 17:22:54 -06:00
}
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
exports . run = run
2020-10-24 06:38:10 -06:00
2020-11-05 04:14:26 -07:00
} , { "./utils" : 25 } ] , 9 : [ function ( require , module , exports ) {
2020-10-24 17:22:54 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
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
http : //www.apache.org/licenses/LICENSE-2.0
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
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 .
* /
const validUrl = require ( 'valid-url' )
const serviceproviders = require ( './serviceproviders' )
const claimVerification = require ( './claimVerification' )
const utils = require ( './utils' )
const verify = async ( uri , fingerprint , opts ) => {
if ( ! fingerprint ) { fingerprint = null }
2020-10-24 06:38:10 -06:00
if ( ! opts ) { opts = { } }
if ( ! validUrl . isUri ( uri ) ) {
throw new Error ( 'Not a valid URI' )
}
2020-10-24 17:22:54 -06:00
const spMatches = serviceproviders . match ( uri , opts )
2020-10-24 06:38:10 -06:00
if ( 'returnMatchesOnly' in opts && opts . returnMatchesOnly ) {
return spMatches
}
2020-11-03 14:53:04 -07:00
let claimVerificationDone = false , claimVerificationResult , sp , iSp = 0 , res , proofData , spData
while ( ! claimVerificationDone && iSp < spMatches . length ) {
2020-10-24 17:22:54 -06:00
spData = spMatches [ iSp ]
spData . claim . fingerprint = fingerprint
res = null
2020-10-26 16:02:22 -06:00
if ( spData . customRequestHandler instanceof Function ) {
proofData = await spData . customRequestHandler ( spData , opts )
} else if ( ! spData . proof . useProxy || 'useProxyWhenNeeded' in opts && ! opts . useProxyWhenNeeded ) {
proofData = await serviceproviders . directRequestHandler ( spData )
} else {
proofData = await serviceproviders . proxyRequestHandler ( spData )
2020-10-24 17:22:54 -06:00
}
2020-11-05 04:14:26 -07:00
2020-11-03 14:53:04 -07:00
if ( proofData ) {
claimVerificationResult = claimVerification . run ( proofData , spData )
2020-10-24 06:38:10 -06:00
2020-11-03 14:53:04 -07:00
if ( claimVerificationResult . errors . length == 0 ) {
claimVerificationDone = true
}
}
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
iSp ++
}
2020-10-24 06:38:10 -06:00
2020-11-03 14:53:04 -07:00
if ( ! claimVerificationResult ) {
claimVerificationResult = {
isVerified : false
}
}
2020-10-24 06:38:10 -06:00
return {
2020-11-03 14:53:04 -07:00
isVerified : claimVerificationResult . isVerified ,
2020-10-24 17:22:54 -06:00
matchedServiceprovider : spData ? spData . serviceprovider . name : null ,
2020-11-05 04:14:26 -07:00
serviceproviderData : spData
2020-10-24 06:38:10 -06:00
}
}
2020-10-24 17:22:54 -06:00
exports . verify = verify
exports . serviceproviders = serviceproviders
exports . claimVerification = claimVerification
exports . utils = utils
2020-10-24 06:38:10 -06:00
2020-11-05 04:14:26 -07:00
} , { "./claimVerification" : 8 , "./serviceproviders" : 10 , "./utils" : 25 , "valid-url" : 7 } ] , 10 : [ function ( require , module , exports ) {
2020-10-24 06:38:10 -06:00
/ *
2020-10-24 17:22:54 -06:00
Copyright 2020 Yarmo Mackenbach
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
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
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
http : //www.apache.org/licenses/LICENSE-2.0
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
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 .
* /
2020-10-26 16:02:22 -06:00
const bent = require ( 'bent' )
const req = bent ( 'GET' )
2020-11-05 04:14:26 -07:00
const utils = require ( './utils' )
2020-10-26 16:02:22 -06:00
2020-10-24 17:22:54 -06:00
const list = [
'dns' ,
'xmpp' ,
'twitter' ,
2020-10-26 05:24:30 -06:00
'reddit' ,
2020-11-05 04:14:26 -07:00
'liberapay' ,
2020-10-24 17:22:54 -06:00
'hackernews' ,
'lobsters' ,
2020-10-26 05:24:30 -06:00
'devto' ,
'gitea' ,
2020-10-26 16:02:22 -06:00
'gitlab' ,
2020-10-26 05:24:30 -06:00
'github' ,
2020-11-03 14:53:04 -07:00
'mastodon' ,
'fediverse' ,
'discourse' ,
2020-10-24 17:22:54 -06:00
]
2020-10-24 06:38:10 -06:00
2020-10-24 17:55:32 -06:00
const data = {
dns : require ( './serviceproviders/dns' ) ,
xmpp : require ( './serviceproviders/xmpp' ) ,
twitter : require ( './serviceproviders/twitter' ) ,
2020-10-26 05:24:30 -06:00
reddit : require ( './serviceproviders/reddit' ) ,
2020-11-05 04:14:26 -07:00
liberapay : require ( './serviceproviders/liberapay' ) ,
2020-10-24 17:55:32 -06:00
hackernews : require ( './serviceproviders/hackernews' ) ,
lobsters : require ( './serviceproviders/lobsters' ) ,
2020-10-26 05:24:30 -06:00
devto : require ( './serviceproviders/devto' ) ,
gitea : require ( './serviceproviders/gitea' ) ,
2020-10-26 16:02:22 -06:00
gitlab : require ( './serviceproviders/gitlab' ) ,
2020-10-26 05:24:30 -06:00
github : require ( './serviceproviders/github' ) ,
2020-11-03 14:53:04 -07:00
mastodon : require ( './serviceproviders/mastodon' ) ,
fediverse : require ( './serviceproviders/fediverse' ) ,
discourse : require ( './serviceproviders/discourse' ) ,
2020-10-24 17:55:32 -06:00
}
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
const match = ( uri , opts ) => {
let matches = [ ] , sp
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
list . forEach ( ( spName , i ) => {
sp = data [ spName ]
if ( sp . reURI . test ( uri ) ) {
matches . push ( sp . processURI ( uri , opts ) )
}
} )
2020-10-24 06:38:10 -06:00
2020-10-24 17:22:54 -06:00
return matches
2020-10-24 06:38:10 -06:00
}
2020-10-26 16:02:22 -06:00
const directRequestHandler = async ( spData ) => {
2020-11-03 14:53:04 -07:00
const res = await req ( spData . proof . fetch ? spData . proof . fetch : spData . proof . uri , 'json' , { Accept : 'application/json' } )
2020-10-26 16:02:22 -06:00
switch ( spData . proof . format ) {
case 'json' :
return await res . json ( )
break
case 'text' :
return await res . text ( )
break
default :
throw new Error ( 'No specified proof data format' )
break
}
}
const proxyRequestHandler = async ( spData ) => {
2020-11-05 04:14:26 -07:00
const url = spData . proof . fetch ? spData . proof . fetch : spData . proof . uri
const res = await req ( utils . generateProxyURL ( spData . proof . format , url ) , 'json' , { Accept : 'application/json' } )
const json = await res . json ( )
return json . content
2020-10-26 16:02:22 -06:00
}
2020-10-24 17:22:54 -06:00
exports . list = list
exports . data = data
exports . match = match
2020-10-26 16:02:22 -06:00
exports . directRequestHandler = directRequestHandler
exports . proxyRequestHandler = proxyRequestHandler
2020-10-24 17:22:54 -06:00
2020-11-05 04:14:26 -07:00
} , { "./serviceproviders/devto" : 11 , "./serviceproviders/discourse" : 12 , "./serviceproviders/dns" : 13 , "./serviceproviders/fediverse" : 14 , "./serviceproviders/gitea" : 15 , "./serviceproviders/github" : 16 , "./serviceproviders/gitlab" : 17 , "./serviceproviders/hackernews" : 18 , "./serviceproviders/liberapay" : 19 , "./serviceproviders/lobsters" : 20 , "./serviceproviders/mastodon" : 21 , "./serviceproviders/reddit" : 22 , "./serviceproviders/twitter" : 23 , "./serviceproviders/xmpp" : 24 , "./utils" : 25 , "bent" : 1 } ] , 11 : [ function ( require , module , exports ) {
2020-10-26 05:24:30 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/dev\.to\/(.*)\/(.*)\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'devto'
} ,
profile : {
display : match [ 1 ] ,
uri : ` https://dev.to/ ${ match [ 1 ] } `
} ,
proof : {
uri : uri ,
fetch : ` https://dev.to/api/articles/ ${ match [ 1 ] } / ${ match [ 2 ] } ` ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'body_markdown' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://dev.to/alice/post' ,
shouldMatch : true
} ,
{
uri : 'https://dev.to/alice/post/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice/post' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 12 : [ function ( require , module , exports ) {
2020-10-24 17:55:32 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //www.apache.org/licenses/LICENSE-2.0
2020-11-03 14:53:04 -07:00
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 .
* /
const reURI = /^https:\/\/(.*)\/u\/(.*)\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'discourse'
} ,
profile : {
display : ` ${ match [ 2 ] } @ ${ match [ 1 ] } ` ,
uri : uri
} ,
proof : {
uri : uri ,
fetch : ` https:// ${ match [ 1 ] } /u/ ${ match [ 2 ] } .json ` ,
useProxy : true ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'user' , 'bio_raw' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://domain.org/u/alice' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/u/alice/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 13 : [ function ( require , module , exports ) {
2020-11-03 14:53:04 -07:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //www.apache.org/licenses/LICENSE-2.0
2020-10-24 17:55:32 -06:00
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 .
* /
2020-11-05 04:14:26 -07:00
const utils = require ( '../utils' )
2020-10-24 17:55:32 -06:00
const reURI = /^dns:([a-zA-Z0-9\.\-\_]*)(?:\?(.*))?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
2020-10-26 05:24:30 -06:00
name : 'dns'
2020-10-24 17:55:32 -06:00
} ,
profile : {
display : match [ 1 ] ,
uri : ` https:// ${ match [ 1 ] } `
} ,
proof : {
2020-11-05 04:14:26 -07:00
uri : utils . generateProxyURL ( 'dns' , match [ 1 ] ) ,
2020-10-24 17:55:32 -06:00
fetch : null ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'uri' ,
2020-11-05 04:14:26 -07:00
path : [ 'records' , 'txt' ] ,
2020-10-24 17:55:32 -06:00
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'dns:domain.org' ,
shouldMatch : true
} ,
{
uri : 'dns:domain.org?type=TXT' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { "../utils" : 25 } ] , 14 : [ function ( require , module , exports ) {
2020-11-03 14:53:04 -07:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/(.*)\/users\/(.*)\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'fediverse'
} ,
profile : {
display : ` @ ${ match [ 2 ] } @ ${ match [ 1 ] } ` ,
uri : uri
} ,
proof : {
uri : uri ,
fetch : null ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'fingerprint' ,
path : [ 'summary' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://domain.org/users/alice' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/users/alice/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 15 : [ function ( require , module , exports ) {
2020-10-26 05:24:30 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/(.*)\/(.*)\/gitea_proof\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'gitea'
} ,
profile : {
display : ` ${ match [ 2 ] } @ ${ match [ 1 ] } ` ,
uri : ` https:// ${ match [ 1 ] } / ${ match [ 2 ] } `
} ,
proof : {
uri : uri ,
fetch : ` https:// ${ match [ 1 ] } /api/v1/repos/ ${ match [ 2 ] } /gitea_proof ` ,
useProxy : true ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'description' ] ,
relation : 'equals'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://domain.org/alice/gitea_proof' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice/gitea_proof/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice/other_proof' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 16 : [ function ( require , module , exports ) {
2020-10-26 05:24:30 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
2020-11-05 04:14:26 -07:00
const reURI = /^https:\/\/gist\.github\.com\/(.*)\/(.*)\/?/
2020-10-26 05:24:30 -06:00
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'github'
} ,
profile : {
display : match [ 1 ] ,
uri : ` https://github.com/ ${ match [ 1 ] } `
} ,
proof : {
uri : uri ,
fetch : ` https://api.github.com/gists/ ${ match [ 2 ] } ` ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'files' , 'openpgp.md' , 'content' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://gist.github.com/Alice/123456789' ,
shouldMatch : true
} ,
{
uri : 'https://gist.github.com/Alice/123456789/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/Alice/123456789' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 17 : [ function ( require , module , exports ) {
2020-10-24 17:55:32 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //www.apache.org/licenses/LICENSE-2.0
2020-10-26 16:02:22 -06:00
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 .
* /
const bent = require ( 'bent' )
const req = bent ( 'GET' )
const reURI = /^https:\/\/(.*)\/(.*)\/gitlab_proof\/?/
const customRequestHandler = async ( spData , opts ) => {
const match = spData . proof . uri . match ( reURI )
const urlUser = ` https:// ${ match [ 1 ] } /api/v4/users?username= ${ match [ 2 ] } `
2020-11-03 14:53:04 -07:00
const resUser = await req ( urlUser , 'json' , { Accept : 'application/json' } )
2020-10-26 16:02:22 -06:00
const jsonUser = await resUser . json ( )
const user = jsonUser . find ( user => user . username === match [ 2 ] )
if ( ! user ) {
throw new Error ( ` No user with username ${ match [ 2 ] } ` ) ;
}
const urlProject = ` https:// ${ match [ 1 ] } /api/v4/users/ ${ user . id } /projects `
const resProject = await req ( urlProject , { } , { Accept : 'application/json' } )
const jsonProject = await resProject . json ( )
const project = jsonProject . find ( proj => proj . path === 'gitlab_proof' )
if ( ! project ) {
throw new Error ( ` No project at ${ spData . proof . uri } ` ) ;
}
return project
}
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'gitlab'
} ,
profile : {
display : ` ${ match [ 2 ] } @ ${ match [ 1 ] } ` ,
uri : ` https:// ${ match [ 1 ] } / ${ match [ 2 ] } `
} ,
proof : {
uri : uri ,
fetch : null ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'description' ] ,
2020-11-03 14:53:04 -07:00
relation : 'equals'
2020-10-26 16:02:22 -06:00
} ,
qr : null ,
customRequestHandler : customRequestHandler
}
}
const tests = [
{
uri : 'https://gitlab.domain.org/alice/gitlab_proof' ,
shouldMatch : true
} ,
{
uri : 'https://gitlab.domain.org/alice/gitlab_proof/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice/other_proof' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { "bent" : 1 } ] , 18 : [ function ( require , module , exports ) {
2020-10-26 16:02:22 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //www.apache.org/licenses/LICENSE-2.0
2020-10-24 17:55:32 -06:00
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 .
* /
2020-11-05 04:14:26 -07:00
const reURI = /^https:\/\/news\.ycombinator\.com\/user\?id=(.*)\/?/
2020-10-24 17:55:32 -06:00
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'hackernews'
} ,
profile : {
display : match [ 1 ] ,
uri : uri
} ,
proof : {
uri : ` https://hacker-news.firebaseio.com/v0/user/ ${ match [ 1 ] } .json ` ,
fetch : null ,
useProxy : true ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'uri' ,
path : [ 'about' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://news.ycombinator.com/user?id=Alice' ,
shouldMatch : true
} ,
{
uri : 'https://news.ycombinator.com/user?id=Alice/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/user?id=Alice' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 19 : [ function ( require , module , exports ) {
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/liberapay\.com\/(.*)\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'liberapay'
} ,
profile : {
display : match [ 1 ] ,
uri : uri
} ,
proof : {
uri : uri ,
fetch : ` https://liberapay.com/ ${ match [ 1 ] } /public.json ` ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'statements' , 'content' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://liberapay.com/alice' ,
shouldMatch : true
} ,
{
uri : 'https://liberapay.com/alice/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
} , { } ] , 20 : [ function ( require , module , exports ) {
2020-10-24 17:55:32 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
2020-11-05 04:14:26 -07:00
const reURI = /^https:\/\/lobste\.rs\/u\/(.*)\/?/
2020-10-24 17:55:32 -06:00
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'lobsters'
} ,
profile : {
display : match [ 1 ] ,
uri : uri
} ,
proof : {
uri : ` https://lobste.rs/u/ ${ match [ 1 ] } .json ` ,
fetch : null ,
useProxy : true ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'about' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://lobste.rs/u/Alice' ,
shouldMatch : true
} ,
{
uri : 'https://lobste.rs/u/Alice/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/u/Alice' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 21 : [ function ( require , module , exports ) {
2020-11-03 14:53:04 -07:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/(.*)\/@(.*)\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'mastodon'
} ,
profile : {
display : ` @ ${ match [ 2 ] } @ ${ match [ 1 ] } ` ,
uri : uri
} ,
proof : {
uri : uri ,
fetch : null ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'fingerprint' ,
path : [ 'attachment' , 'value' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://domain.org/@alice' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/@alice/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 22 : [ function ( require , module , exports ) {
2020-10-26 05:24:30 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/(?:www\.)?reddit\.com\/user\/(.*)\/comments\/(.*)\/(.*)\/?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'reddit'
} ,
profile : {
display : match [ 1 ] ,
uri : ` https://www.reddit.com/user/ ${ match [ 1 ] } `
} ,
proof : {
uri : uri ,
fetch : ` https://www.reddit.com/user/ ${ match [ 1 ] } /comments/ ${ match [ 2 ] } .json ` ,
useProxy : true ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ 'data' , 'children' , 'data' , 'selftext' ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://www.reddit.com/user/Alice/comments/123456/post' ,
shouldMatch : true
} ,
{
uri : 'https://www.reddit.com/user/Alice/comments/123456/post/' ,
shouldMatch : true
} ,
{
uri : 'https://reddit.com/user/Alice/comments/123456/post' ,
shouldMatch : true
} ,
{
uri : 'https://reddit.com/user/Alice/comments/123456/post/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/user/Alice/comments/123456/post' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 23 : [ function ( require , module , exports ) {
2020-10-24 17:55:32 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^https:\/\/twitter\.com\/(.*)\/status\/([0-9]*)(?:\?.*)?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'web' ,
name : 'twitter'
} ,
profile : {
display : ` @ ${ match [ 1 ] } ` ,
uri : ` https://twitter.com/ ${ match [ 1 ] } `
} ,
proof : {
uri : uri ,
fetch : ` https://mobile.twitter.com/ ${ match [ 1 ] } /status/ ${ match [ 2 ] } ` ,
useProxy : false ,
format : 'text'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ ] ,
relation : 'contains'
} ,
qr : null
}
}
const tests = [
{
uri : 'https://twitter.com/alice/status/1234567890123456789' ,
shouldMatch : true
} ,
{
uri : 'https://twitter.com/alice/status/1234567890123456789/' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org/alice/status/1234567890123456789' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 24 : [ function ( require , module , exports ) {
2020-10-24 17:55:32 -06:00
/ *
Copyright 2020 Yarmo Mackenbach
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
http : //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 .
* /
const reURI = /^xmpp:([a-zA-Z0-9\.\-\_]*)@([a-zA-Z0-9\.\-\_]*)(?:\?(.*))?/
const processURI = ( uri , opts ) => {
if ( ! opts ) { opts = { } }
const match = uri . match ( reURI )
return {
serviceprovider : {
type : 'communication' ,
name : 'xmpp'
} ,
profile : {
display : ` ${ match [ 1 ] } @ ${ match [ 2 ] } ` ,
uri : uri
} ,
proof : {
uri : 'xmppVcardServerDomain' in opts
? ` https:// ${ opts . xmppVcardServerDomain } /api/vcard/ ${ match [ 1 ] } @ ${ match [ 2 ] } /DESC `
: null ,
fetch : null ,
useProxy : false ,
format : 'json'
} ,
claim : {
fingerprint : null ,
format : 'message' ,
path : [ ] ,
relation : 'contains'
} ,
qr : uri
}
}
const tests = [
{
uri : 'xmpp:alice@domain.org' ,
shouldMatch : true
} ,
{
uri : 'xmpp:alice@domain.org?omemo-sid-123456789=A1B2C3D4E5F6G7H8I9' ,
shouldMatch : true
} ,
{
uri : 'https://domain.org' ,
shouldMatch : false
}
]
exports . reURI = reURI
exports . processURI = processURI
exports . tests = tests
2020-11-05 04:14:26 -07:00
} , { } ] , 25 : [ function ( require , module , exports ) {
( function ( process ) { ( function ( ) {
require ( 'dotenv' ) . config ( )
const DOIP _PROXY _HOSTNAME = process . env . DOIP _PROXY _HOSTNAME || 'proxy.keyoxide.org'
const generateProxyURL = ( type , url ) => {
return ` https:// ${ DOIP _PROXY _HOSTNAME } /api/1/get/ ${ type } / ${ encodeURIComponent ( url ) } `
}
2020-10-24 17:22:54 -06:00
const generateClaim = ( fingerprint , format ) => {
switch ( format ) {
case 'uri' :
return ` openpgp4fpr: ${ fingerprint } `
break ;
case 'message' :
return ` [Verifying my OpenPGP key: openpgp4fpr: ${ fingerprint } ] `
break ;
case 'fingerprint' :
return fingerprint
break ;
default :
throw new Error ( 'No valid claim format' )
2020-10-24 06:38:10 -06:00
}
2020-10-24 17:22:54 -06:00
}
2020-10-24 06:38:10 -06:00
2020-11-05 04:14:26 -07:00
exports . generateProxyURL = generateProxyURL
2020-10-24 17:22:54 -06:00
exports . generateClaim = generateClaim
2020-10-24 06:38:10 -06:00
2020-11-05 04:14:26 -07:00
} ) . call ( this ) } ) . call ( this , require ( '_process' ) )
} , { "_process" : 6 , "dotenv" : 4 } ] } , { } , [ 9 ] ) ( 9 )
2020-10-24 06:38:10 -06:00
} ) ;