mirror of
https://github.com/stronk-dev/RandomChad.git
synced 2025-07-05 10:35:08 +02:00
First image generator version done
This commit is contained in:
parent
872e632cbe
commit
12862f86f7
2678
functions/assets/demo.svg
Normal file
2678
functions/assets/demo.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 2.1 MiB |
BIN
functions/assets/master.afdesign
Normal file
BIN
functions/assets/master.afdesign
Normal file
Binary file not shown.
12683
functions/assets/master.svg
Normal file
12683
functions/assets/master.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.3 MiB |
BIN
functions/assets/suit.afdesign
Normal file
BIN
functions/assets/suit.afdesign
Normal file
Binary file not shown.
@ -1,12 +1,13 @@
|
|||||||
// Dependencies
|
// Dependencies
|
||||||
const admin = require( 'firebase-admin' )
|
const { initializeApp } = require( 'firebase-admin/app' )
|
||||||
|
const { getFirestore, FieldValue, FieldPath } = require( 'firebase-admin/firestore' )
|
||||||
|
|
||||||
// Admin api
|
// Admin api
|
||||||
const app = admin.initializeApp()
|
const app = initializeApp()
|
||||||
const db = app.firestore()
|
const db = getFirestore()
|
||||||
const { FieldValue, FieldPath } = admin.firestore
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
app: app,
|
||||||
db: db,
|
db: db,
|
||||||
FieldValue: FieldValue,
|
FieldValue: FieldValue,
|
||||||
FieldPath: FieldPath
|
FieldPath: FieldPath
|
||||||
|
93
functions/modules/helpers.js
Normal file
93
functions/modules/helpers.js
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
// ///////////////////////////////
|
||||||
|
// Helper functions
|
||||||
|
// ///////////////////////////////
|
||||||
|
|
||||||
|
// Pick random item from an array
|
||||||
|
const pickRandomArrayEntry = array => array[ Math.floor( Math.random() * array.length ) ]
|
||||||
|
exports.pickRandomArrayEntry = pickRandomArrayEntry
|
||||||
|
|
||||||
|
// Generate random number between x and y
|
||||||
|
exports.randomNumberBetween = ( min, max ) => Math.floor( Math.random() * ( max - min + 1 ) + min )
|
||||||
|
|
||||||
|
// Random attribute picker
|
||||||
|
exports.pickRandomAttributes = ( attributes ) => {
|
||||||
|
|
||||||
|
// Decimal accuracy, if probabilities have the lowest 0.01 then 100 is enough, for 0.001 1000 is needed
|
||||||
|
const probabilityDecimals = 3
|
||||||
|
|
||||||
|
// Remap the trait so it has a 'lottery ticket box' based on probs
|
||||||
|
const attributeLottery = attributes.map( ( { values, ...attribute } ) => ( {
|
||||||
|
// Attribute meta stays the same
|
||||||
|
...attribute,
|
||||||
|
// Values are reduced from objects with probabilities to an array with elements
|
||||||
|
values: values.reduce( ( acc, val ) => {
|
||||||
|
|
||||||
|
const { probability, value } = val
|
||||||
|
|
||||||
|
// Map probabilities to a flat array of items
|
||||||
|
const amountToAdd = 10 * probabilityDecimals * probability
|
||||||
|
for ( let i = 0; i < amountToAdd; i++ ) acc.push( value )
|
||||||
|
return acc
|
||||||
|
|
||||||
|
}, [] )
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
// Pick a random element from the lottery box array items
|
||||||
|
return attributeLottery.map( ( { values, ...attribute } ) => ( {
|
||||||
|
// Attribute meta stays the same
|
||||||
|
...attribute,
|
||||||
|
// Select random entry from array
|
||||||
|
value: pickRandomArrayEntry( values )
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ///////////////////////////////
|
||||||
|
// Attribute sources
|
||||||
|
// ///////////////////////////////
|
||||||
|
exports.globalAttributes = [
|
||||||
|
{ trait_type: "helmet", values: [
|
||||||
|
{ value: 'classic', probability: .2 },
|
||||||
|
{ value: 'racer', probability: .1 },
|
||||||
|
{ value: 'punk', probability: .1 },
|
||||||
|
{ value: 'knight', probability: .2 },
|
||||||
|
{ value: 'geek', probability: .2 }
|
||||||
|
|
||||||
|
] },
|
||||||
|
{ trait_type: "patch", values: [
|
||||||
|
{ value: 'nimbus', probability: .1 },
|
||||||
|
{ value: 'teku', probability: .1 },
|
||||||
|
{ value: 'lighthouse', probability: .1 },
|
||||||
|
{ value: 'prysm', probability: .2 },
|
||||||
|
{ value: 'rocketpool', probability: .5 }
|
||||||
|
|
||||||
|
] },
|
||||||
|
{ trait_type: "backpack", values: [
|
||||||
|
{ value: 'yes', probability: .9 },
|
||||||
|
{ value: 'no', probability: .1 }
|
||||||
|
] },
|
||||||
|
{ trait_type: "panel", values: [
|
||||||
|
{ value: 'yes', probability: .9 },
|
||||||
|
{ value: 'no', probability: .1 }
|
||||||
|
] },
|
||||||
|
{ trait_type: "background", values: [
|
||||||
|
{ value: 'planets', probability: .2 },
|
||||||
|
{ value: 'system', probability: .2 },
|
||||||
|
{ value: 'playful', probability: .1 },
|
||||||
|
{ value: 'moon', probability: .05 },
|
||||||
|
{ value: 'galaxy', probability: .2 },
|
||||||
|
{ value: 'chip', probability: .05 }
|
||||||
|
|
||||||
|
] },
|
||||||
|
{ trait_type: "background complexity", values: [
|
||||||
|
{ value: 1, probability: .4 },
|
||||||
|
{ value: 2, probability: .3 },
|
||||||
|
{ value: 3, probability: .2 },
|
||||||
|
{ value: 4, probability: .1 }
|
||||||
|
] }
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
exports.heavenlyBodies = [ "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "the Moon", "the Sun" ]
|
||||||
|
exports.web2domain = 'https://rocketeer.fans'
|
||||||
|
exports.lorem = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
|
@ -1,60 +1,8 @@
|
|||||||
const name = require( 'random-name' )
|
const name = require( 'random-name' )
|
||||||
const { db } = require( './firebase' )
|
const { db } = require( './firebase' )
|
||||||
const { getTotalSupply } = require( './contract' )
|
const { getTotalSupply } = require( './contract' )
|
||||||
|
const { pickRandomArrayEntry, pickRandomAttributes, randomNumberBetween, globalAttributes, heavenlyBodies, web2domain, lorem } = require( './helpers' )
|
||||||
// ///////////////////////////////
|
const svgFromAttributes = require( './svg-generator' )
|
||||||
// Attribute sources
|
|
||||||
// ///////////////////////////////
|
|
||||||
const globalAttributes = [
|
|
||||||
{ trait_type: "Age", display_type: "number", values: [
|
|
||||||
{ value: 35, probability: .5 },
|
|
||||||
{ value: 45, probability: .25 },
|
|
||||||
{ value: 25, probability: .25 }
|
|
||||||
] }
|
|
||||||
]
|
|
||||||
const heavenlyBodies = [ "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "the Moon", "the Sun" ]
|
|
||||||
const web2domain = 'https://rocketeer.fans'
|
|
||||||
const lorem = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
|
|
||||||
|
|
||||||
// ///////////////////////////////
|
|
||||||
// Rocketeer helpers
|
|
||||||
// ///////////////////////////////
|
|
||||||
|
|
||||||
// Pick random item from array with equal probability
|
|
||||||
const pickRandomArrayEntry = array => array[ Math.floor( Math.random() * array.length ) ]
|
|
||||||
|
|
||||||
// Pick random attributes based on global attribute array
|
|
||||||
function pickRandomAttributes( attributes ) {
|
|
||||||
|
|
||||||
// Decimal accuracy, if probabilities have the lowest 0.01 then 100 is enough, for 0.001 1000 is needed
|
|
||||||
const probabilityDecimals = 3
|
|
||||||
|
|
||||||
// Remap the trait so it has a 'lottery ticket box' based on probs
|
|
||||||
const attributeLottery = attributes.map( ( { values, ...attribute } ) => ( {
|
|
||||||
// Attribute meta stays the same
|
|
||||||
...attribute,
|
|
||||||
// Values are reduced from objects with probabilities to an array with elements
|
|
||||||
values: values.reduce( ( acc, val ) => {
|
|
||||||
|
|
||||||
const { probability, value } = val
|
|
||||||
|
|
||||||
// Map probabilities to a flat array of items
|
|
||||||
const amountToAdd = 10 * probabilityDecimals * probability
|
|
||||||
for ( let i = 0; i < amountToAdd; i++ ) acc.push( value )
|
|
||||||
return acc
|
|
||||||
|
|
||||||
}, [] )
|
|
||||||
} ) )
|
|
||||||
|
|
||||||
// Pick a random element from the lottery box array items
|
|
||||||
return attributeLottery.map( ( { values, ...attribute } ) => ( {
|
|
||||||
// Attribute meta stays the same
|
|
||||||
...attribute,
|
|
||||||
// Select random entry from array
|
|
||||||
value: pickRandomArrayEntry( values )
|
|
||||||
} ) )
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ///////////////////////////////
|
// ///////////////////////////////
|
||||||
// Caching
|
// Caching
|
||||||
@ -106,15 +54,36 @@ async function generateRocketeer( id, network='mainnet' ) {
|
|||||||
name: `${ name.first() } ${ name.middle() } ${ name.last() } of ${ pickRandomArrayEntry( heavenlyBodies ) }`,
|
name: `${ name.first() } ${ name.middle() } ${ name.last() } of ${ pickRandomArrayEntry( heavenlyBodies ) }`,
|
||||||
description: lorem,
|
description: lorem,
|
||||||
image: ``,
|
image: ``,
|
||||||
external_url: `https://viewer.rocketeer.fans/?rocketeer=${ id }` + network == 'mainnet' ? '' : '&testnet=true',
|
external_url: `https://viewer.rocketeer.fans/?rocketeer=${ id }` + ( network == 'mainnet' ? '' : '&testnet=true' ),
|
||||||
attributes: []
|
attributes: []
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate randomized attributes
|
// Generate randomized attributes
|
||||||
rocketeer.attributes = pickRandomAttributes( globalAttributes )
|
rocketeer.attributes = pickRandomAttributes( globalAttributes )
|
||||||
|
|
||||||
|
// Generate color attributes
|
||||||
|
rocketeer.attributes.push( {
|
||||||
|
"trait_type": "outfit color",
|
||||||
|
value: `rgb( ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) } )`
|
||||||
|
} )
|
||||||
|
rocketeer.attributes.push( {
|
||||||
|
"trait_type": "outfit accent color",
|
||||||
|
value: `rgb( ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) } )`
|
||||||
|
} )
|
||||||
|
rocketeer.attributes.push( {
|
||||||
|
"trait_type": "backpack color",
|
||||||
|
value: `rgb( ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) } )`
|
||||||
|
} )
|
||||||
|
rocketeer.attributes.push( {
|
||||||
|
"trait_type": "visor color",
|
||||||
|
value: `rgb( ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) }, ${ randomNumberBetween( 0, 255 ) } )`
|
||||||
|
} )
|
||||||
|
|
||||||
|
// Write to demo file
|
||||||
|
|
||||||
|
|
||||||
// TODO: Generate, compile and upload image
|
// TODO: Generate, compile and upload image
|
||||||
rocketeer.image = `${web2domain}/assets/draft-rocketeer.png`
|
rocketeer.image = await svgFromAttributes( rocketeer.attributes )
|
||||||
|
|
||||||
// Save new Rocketeer
|
// Save new Rocketeer
|
||||||
await db.collection( `${ network }Rocketeers` ).doc( id ).set( rocketeer )
|
await db.collection( `${ network }Rocketeers` ).doc( id ).set( rocketeer )
|
||||||
@ -125,13 +94,13 @@ async function generateRocketeer( id, network='mainnet' ) {
|
|||||||
|
|
||||||
async function safelyReturnRocketeer( id, network ) {
|
async function safelyReturnRocketeer( id, network ) {
|
||||||
|
|
||||||
// Chech if this is an illegal ID
|
// // Chech if this is an illegal ID
|
||||||
const invalidId = await isInvalidRocketeerId( id, network )
|
// const invalidId = await isInvalidRocketeerId( id, network )
|
||||||
if( invalidId ) throw invalidId
|
// if( invalidId ) throw invalidId
|
||||||
|
|
||||||
// Get old rocketeer if it exists
|
// // Get old rocketeer if it exists
|
||||||
const oldRocketeer = await getExistingRocketeer( id, network )
|
// const oldRocketeer = await getExistingRocketeer( id, network )
|
||||||
if( oldRocketeer ) return oldRocketeer
|
// if( oldRocketeer ) return oldRocketeer
|
||||||
|
|
||||||
// If no old rocketeer exists, make a new one and save it
|
// If no old rocketeer exists, make a new one and save it
|
||||||
return generateRocketeer( id, network )
|
return generateRocketeer( id, network )
|
||||||
|
134
functions/modules/svg-generator.js
Normal file
134
functions/modules/svg-generator.js
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
const masterPath = `${ __dirname }/../assets/master.svg`
|
||||||
|
const jsdom = require("jsdom")
|
||||||
|
const { JSDOM } = jsdom
|
||||||
|
const { promises: fs } = require( 'fs' )
|
||||||
|
|
||||||
|
const { getStorage } = require( 'firebase-admin/storage' )
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = async function svgFromAttributes( attributes=[] ) {
|
||||||
|
|
||||||
|
const { value: primary_color } = attributes.find( ( { trait_type } ) => trait_type == "outfit color" )
|
||||||
|
const { value: accent_color } = attributes.find( ( { trait_type } ) => trait_type == "outfit accent color" )
|
||||||
|
const { value: backpack_color } = attributes.find( ( { trait_type } ) => trait_type == "backpack color" )
|
||||||
|
const { value: visor_color } = attributes.find( ( { trait_type } ) => trait_type == "visor color" )
|
||||||
|
const { value: backpack } = attributes.find( ( { trait_type } ) => trait_type == "backpack" )
|
||||||
|
const { value: panel } = attributes.find( ( { trait_type } ) => trait_type == "panel" )
|
||||||
|
const { value: patch } = attributes.find( ( { trait_type } ) => trait_type == "patch" )
|
||||||
|
const { value: helmet } = attributes.find( ( { trait_type } ) => trait_type == "helmet" )
|
||||||
|
const { value: background } = attributes.find( ( { trait_type } ) => trait_type == "background" )
|
||||||
|
const { value: background_complexity } = attributes.find( ( { trait_type } ) => trait_type == "background complexity" )
|
||||||
|
|
||||||
|
// Generate DOM to work with
|
||||||
|
const svgString = await fs.readFile( masterPath, 'utf8' )
|
||||||
|
const { window: { document } } = new JSDOM( svgString )
|
||||||
|
|
||||||
|
// ///////////////////////////////
|
||||||
|
// Attribute selection
|
||||||
|
// ///////////////////////////////
|
||||||
|
|
||||||
|
// Remove obsolete patches
|
||||||
|
const obsoletePatches = [ 'nimbus', 'teku', 'lighthouse', 'prysm', 'rocketpool' ].filter( p => p !== patch )
|
||||||
|
for ( let i = obsoletePatches.length - 1; i >= 0; i-- ) {
|
||||||
|
const element = document.querySelector( `#${ obsoletePatches[i] }` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( `Could not find #${ obsoletePatches[i] }` )
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove obsolete hemets
|
||||||
|
const obsoleteHelmets = [ 'classic', 'racer', 'punk', 'knight', 'geek' ].filter( p => p !== helmet )
|
||||||
|
for ( let i = obsoleteHelmets.length - 1; i >= 0; i-- ) {
|
||||||
|
const element = document.querySelector( `#${ obsoleteHelmets[i] }` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( `Could not find #${ obsoleteHelmets[i] }` )
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove panel if need be
|
||||||
|
if( panel === 'no' ) {
|
||||||
|
const element = document.querySelector( `#panel` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( `Could not find #panel` )
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove backpack if need be
|
||||||
|
if( backpack === 'no' ) {
|
||||||
|
const element = document.querySelector( `#backpack` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( 'Could not find #backpack' )
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove obsolete backgrounds
|
||||||
|
const obsoleteBackgrounds = [ 'planets', 'system', 'playful', 'moon', 'galaxy', 'chip' ].filter( p => p !== background )
|
||||||
|
for ( let i = obsoleteBackgrounds.length - 1; i >= 0; i-- ) {
|
||||||
|
const element = document.querySelector( `#${ obsoleteBackgrounds[i] }` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( `Could not find #${ obsoleteBackgrounds[i] }` )
|
||||||
|
}
|
||||||
|
|
||||||
|
// ///////////////////////////////
|
||||||
|
// Background customisation
|
||||||
|
// ///////////////////////////////
|
||||||
|
|
||||||
|
// In playful, keeping things is basic, removing them is cool
|
||||||
|
if( background === 'playful' ) {
|
||||||
|
|
||||||
|
const toRemove = background_complexity
|
||||||
|
for ( let i = 1; i <= toRemove; i++ ) {
|
||||||
|
const element = document.querySelector( `#playful-element-${ 5 - i }` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( `Could not find #playful-element-${ 5 - i }` )
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// In others, keeping is cool, and removing is less cool
|
||||||
|
// so higher rarity means less looping
|
||||||
|
const toRemove = 4 - background_complexity
|
||||||
|
console.log( `Removing ${ toRemove } background props` )
|
||||||
|
for ( let i = 1; i <= toRemove; i++ ) {
|
||||||
|
console.log( `Remove #${ background }-element-${ 5 - i }` )
|
||||||
|
const element = document.querySelector( `#${ background }-element-${ 5 - i }` )
|
||||||
|
if( element ) element.remove()
|
||||||
|
else console.log( `Could not find #${ background }-element-${ 5 - i }` )
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ///////////////////////////////
|
||||||
|
// Color substitutions
|
||||||
|
// ///////////////////////////////
|
||||||
|
const defaultPrimary = /rgb\( ?252 ?, ?186 ?, ?157 ?\)/ig
|
||||||
|
const defaultVisor = /rgb\( ?71 ?, ?22 ?, ?127 ?\)/ig
|
||||||
|
const defaultAccent = /rgb\( ?243 ?, ?99 ?, ?113 ?\)/ig
|
||||||
|
const defaultBackpack = /rgb\( ?195 ?, ?178 ?, ?249 ?\)/ig
|
||||||
|
|
||||||
|
// Substitutions
|
||||||
|
const replace = ( from, to ) => {
|
||||||
|
const replaced = document.querySelector( 'svg' ).innerHTML.replace( from, to )
|
||||||
|
document.querySelector( 'svg' ).innerHTML = replaced
|
||||||
|
}
|
||||||
|
replace( defaultPrimary, primary_color )
|
||||||
|
replace( defaultAccent, accent_color )
|
||||||
|
replace( defaultVisor, visor_color )
|
||||||
|
replace( defaultBackpack, backpack_color )
|
||||||
|
|
||||||
|
const bakedSvg = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">${ document.querySelector( 'svg' ).outerHTML }`
|
||||||
|
|
||||||
|
// Store file on firebase
|
||||||
|
const storage = getStorage()
|
||||||
|
const bucket = storage.bucket()
|
||||||
|
|
||||||
|
// Make file reference
|
||||||
|
const file = bucket.file( `rocketeers/demo-${ Date.now() }.svg` )
|
||||||
|
|
||||||
|
// Save file buffer
|
||||||
|
await file.save( bakedSvg )
|
||||||
|
|
||||||
|
// Make file public
|
||||||
|
await file.makePublic( )
|
||||||
|
|
||||||
|
// Return public url
|
||||||
|
return file.publicUrl()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -21,6 +21,7 @@ app.get( '/testnetapi/rocketeer/:id', async ( req, res ) => {
|
|||||||
|
|
||||||
// Log error for debugging
|
// Log error for debugging
|
||||||
console.error( `Testnet api error for ${ id }: `, Object.keys( e ) )
|
console.error( `Testnet api error for ${ id }: `, Object.keys( e ) )
|
||||||
|
console.log( e )
|
||||||
|
|
||||||
// Return error to frontend
|
// Return error to frontend
|
||||||
return res.json( { error: e.mesage || e.toString() } )
|
return res.json( { error: e.mesage || e.toString() } )
|
||||||
|
420
functions/package-lock.json
generated
420
functions/package-lock.json
generated
@ -592,9 +592,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@firebase/database": {
|
"@firebase/database": {
|
||||||
"version": "0.12.1",
|
"version": "0.12.2",
|
||||||
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.1.tgz",
|
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.2.tgz",
|
||||||
"integrity": "sha512-Ethk0hc476qnkSKNBa+8Yc7iM8AO69HYWsaD+QUC983FZtnuMyNLHtEeSUbLQYvyHo7cOjcc52slop14WmfZeQ==",
|
"integrity": "sha512-Y1LZR1LIQM8YKMkeUPpAq3/e53hcfcXO+JEZ6vCzBeD6xRawqmpw6B5/DzePdCNNvjcqheXzSaR7T39eRZo/wA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@firebase/auth-interop-types": "0.1.6",
|
"@firebase/auth-interop-types": "0.1.6",
|
||||||
"@firebase/component": "0.5.7",
|
"@firebase/component": "0.5.7",
|
||||||
@ -605,12 +605,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@firebase/database-compat": {
|
"@firebase/database-compat": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.2.tgz",
|
||||||
"integrity": "sha512-K3DFWiw0YkLZtlfA9TOGPw6zVXKu5dQ1XqIGztUufFVRYW8IizReXVxzSSmJNR4Adr2LiU9j66Wenc6e5UfwaQ==",
|
"integrity": "sha512-sV32QIRSNIBj/6OYtpmPzA/SfQz1/NBZbhxg9dIhGaSt9e5HaMxXRuz2lImudX0Sd/v8DKdExrxa++K6rKrRtA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@firebase/component": "0.5.7",
|
"@firebase/component": "0.5.7",
|
||||||
"@firebase/database": "0.12.1",
|
"@firebase/database": "0.12.2",
|
||||||
"@firebase/database-types": "0.9.1",
|
"@firebase/database-types": "0.9.1",
|
||||||
"@firebase/logger": "0.3.0",
|
"@firebase/logger": "0.3.0",
|
||||||
"@firebase/util": "1.4.0",
|
"@firebase/util": "1.4.0",
|
||||||
@ -711,9 +711,9 @@
|
|||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@google-cloud/storage": {
|
"@google-cloud/storage": {
|
||||||
"version": "5.15.2",
|
"version": "5.15.3",
|
||||||
"resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.15.2.tgz",
|
"resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.15.3.tgz",
|
||||||
"integrity": "sha512-41gmpyy9BUiEJIjbL9RvGsCsnBGzuZj5A4lnigyTeGNKXghnnnw89Zf1/I+pVGItk3L8lVMvxXakKWLVZP1Mmg==",
|
"integrity": "sha512-a2Y+mvfbzznWorQiv6c+qdPDlBpe47tikV8tpQSnvYXz1Ed/rjin41k2nKUQUcAPGHtYeTzGfKnCNKC+lv8qRg==",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@google-cloud/common": "^3.7.4",
|
"@google-cloud/common": "^3.7.4",
|
||||||
@ -738,18 +738,19 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@grpc/grpc-js": {
|
"@grpc/grpc-js": {
|
||||||
"version": "1.3.8",
|
"version": "1.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.4.2.tgz",
|
||||||
"integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==",
|
"integrity": "sha512-aUN6oGk9un8rfYWz73nQgFxPCYJQYd8LpIGguZHBsNduBMyqG6EWANrsVBuTG+nl/l4dKb3x+qi1l9+oxDxqGg==",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"@grpc/proto-loader": "^0.6.4",
|
||||||
"@types/node": ">=12.12.47"
|
"@types/node": ">=12.12.47"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@grpc/proto-loader": {
|
"@grpc/proto-loader": {
|
||||||
"version": "0.6.5",
|
"version": "0.6.6",
|
||||||
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.5.tgz",
|
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.6.tgz",
|
||||||
"integrity": "sha512-GZdzyVQI1Bln/kCzIYgTKu+rQJ5dno0gVrfmLe4jqQu7T2e7svSwJzpCBqVU5hhBSJP3peuPjOMWsj5GR61YmQ==",
|
"integrity": "sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/long": "^4.0.1",
|
"@types/long": "^4.0.1",
|
||||||
@ -861,8 +862,7 @@
|
|||||||
"@tootallnate/once": {
|
"@tootallnate/once": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
||||||
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
|
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"@types/bn.js": {
|
"@types/bn.js": {
|
||||||
"version": "4.11.6",
|
"version": "4.11.6",
|
||||||
@ -989,6 +989,11 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"abab": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
|
||||||
|
},
|
||||||
"abort-controller": {
|
"abort-controller": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||||
@ -1010,8 +1015,16 @@
|
|||||||
"acorn": {
|
"acorn": {
|
||||||
"version": "7.4.1",
|
"version": "7.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
|
||||||
"dev": true
|
},
|
||||||
|
"acorn-globals": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
|
||||||
|
"requires": {
|
||||||
|
"acorn": "^7.1.1",
|
||||||
|
"acorn-walk": "^7.1.1"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"acorn-jsx": {
|
"acorn-jsx": {
|
||||||
"version": "5.3.2",
|
"version": "5.3.2",
|
||||||
@ -1019,11 +1032,15 @@
|
|||||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"acorn-walk": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
|
||||||
|
},
|
||||||
"agent-base": {
|
"agent-base": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "4"
|
"debug": "4"
|
||||||
}
|
}
|
||||||
@ -1236,6 +1253,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
|
||||||
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
|
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
|
||||||
},
|
},
|
||||||
|
"browser-process-hrtime": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
|
||||||
|
},
|
||||||
"browserify-aes": {
|
"browserify-aes": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||||
@ -1724,6 +1746,26 @@
|
|||||||
"integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
|
"integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"cssom": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
|
||||||
|
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
|
||||||
|
},
|
||||||
|
"cssstyle": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
|
||||||
|
"requires": {
|
||||||
|
"cssom": "~0.3.6"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cssom": {
|
||||||
|
"version": "0.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
|
||||||
|
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"d": {
|
"d": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
||||||
@ -1741,6 +1783,40 @@
|
|||||||
"assert-plus": "^1.0.0"
|
"assert-plus": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"data-urls": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
|
||||||
|
"requires": {
|
||||||
|
"abab": "^2.0.3",
|
||||||
|
"whatwg-mimetype": "^3.0.0",
|
||||||
|
"whatwg-url": "^10.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"tr46": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
|
||||||
|
"requires": {
|
||||||
|
"punycode": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webidl-conversions": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
|
||||||
|
},
|
||||||
|
"whatwg-url": {
|
||||||
|
"version": "10.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
|
||||||
|
"integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
|
||||||
|
"requires": {
|
||||||
|
"tr46": "^3.0.0",
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"date-and-time": {
|
"date-and-time": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.0.1.tgz",
|
||||||
@ -1755,6 +1831,11 @@
|
|||||||
"ms": "2.1.2"
|
"ms": "2.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"decimal.js": {
|
||||||
|
"version": "10.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
|
||||||
|
"integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
|
||||||
|
},
|
||||||
"decode-uri-component": {
|
"decode-uri-component": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
||||||
@ -1771,8 +1852,7 @@
|
|||||||
"deep-is": {
|
"deep-is": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||||
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
|
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"defer-to-connect": {
|
"defer-to-connect": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
@ -1843,6 +1923,21 @@
|
|||||||
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
|
||||||
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
|
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
|
||||||
},
|
},
|
||||||
|
"domexception": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
|
||||||
|
"requires": {
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"webidl-conversions": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"dot-prop": {
|
"dot-prop": {
|
||||||
"version": "5.3.0",
|
"version": "5.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
|
||||||
@ -2026,6 +2121,66 @@
|
|||||||
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"escodegen": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
|
||||||
|
"requires": {
|
||||||
|
"esprima": "^4.0.1",
|
||||||
|
"estraverse": "^5.2.0",
|
||||||
|
"esutils": "^2.0.2",
|
||||||
|
"optionator": "^0.8.1",
|
||||||
|
"source-map": "~0.6.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"estraverse": {
|
||||||
|
"version": "5.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
|
||||||
|
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
|
||||||
|
},
|
||||||
|
"levn": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
|
||||||
|
"requires": {
|
||||||
|
"prelude-ls": "~1.1.2",
|
||||||
|
"type-check": "~0.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optionator": {
|
||||||
|
"version": "0.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
|
||||||
|
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
|
||||||
|
"requires": {
|
||||||
|
"deep-is": "~0.1.3",
|
||||||
|
"fast-levenshtein": "~2.0.6",
|
||||||
|
"levn": "~0.3.0",
|
||||||
|
"prelude-ls": "~1.1.2",
|
||||||
|
"type-check": "~0.3.2",
|
||||||
|
"word-wrap": "~1.2.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"prelude-ls": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"type-check": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||||
|
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
|
||||||
|
"requires": {
|
||||||
|
"prelude-ls": "~1.1.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"eslint": {
|
"eslint": {
|
||||||
"version": "7.32.0",
|
"version": "7.32.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
|
||||||
@ -2146,8 +2301,7 @@
|
|||||||
"esprima": {
|
"esprima": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"esquery": {
|
"esquery": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
@ -2192,8 +2346,7 @@
|
|||||||
"esutils": {
|
"esutils": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
|
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"etag": {
|
"etag": {
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
@ -2422,8 +2575,7 @@
|
|||||||
"fast-levenshtein": {
|
"fast-levenshtein": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"fast-text-encoding": {
|
"fast-text-encoding": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
@ -2478,9 +2630,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"firebase-admin": {
|
"firebase-admin": {
|
||||||
"version": "9.12.0",
|
"version": "10.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-9.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-10.0.0.tgz",
|
||||||
"integrity": "sha512-AtA7OH5RbIFGoc0gZOQgaYC6cdjdhZv4w3XgWoupkPKO1HY+0GzixOuXDa75kFeoVyhIyo4PkLg/GAC1dC1P6w==",
|
"integrity": "sha512-EOAk5ZaqXhBBvx9ZyXd28kw8glMTt3xl0g3BepGRCy0RSSUPGOzfAqjGhc65guSKgFOpT5mAUycYcJbqullKUQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@firebase/database-compat": "^0.1.1",
|
"@firebase/database-compat": "^0.1.1",
|
||||||
"@firebase/database-types": "^0.7.2",
|
"@firebase/database-types": "^0.7.2",
|
||||||
@ -2732,9 +2884,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"google-auth-library": {
|
"google-auth-library": {
|
||||||
"version": "7.10.0",
|
"version": "7.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.1.tgz",
|
||||||
"integrity": "sha512-ICsqaU+lxMHVlDUzMrfVIEqnARw2AwBiZ/2KnNM6BcTf9Nott+Af87DTIzmlnW865p3REUP2MVL0xkPC3a61aQ==",
|
"integrity": "sha512-nQxgM1ZopUMcpMnu95kOSzI+9tJl4YDOZJomSTBGlRLpxfBopdwto7WvzoI87HuN0nQqVETgOsHi/C/po1rppA==",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"arrify": "^2.0.0",
|
"arrify": "^2.0.0",
|
||||||
@ -2749,12 +2901,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"google-gax": {
|
"google-gax": {
|
||||||
"version": "2.27.1",
|
"version": "2.28.0",
|
||||||
"resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.27.1.tgz",
|
"resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.28.0.tgz",
|
||||||
"integrity": "sha512-8j8hfY42mGZt52C1L23srr2WTxOsOGUsC3s07Aw/f1UrbofsHdRaGf72Jax4jWEFXe/2x1MVBkwMvZxHMbO1Ag==",
|
"integrity": "sha512-kuqc8a4+CTCMBcF3tlOL7Sa74JWkTzcZxatAQTCVK35WToXkHnJ0qncFOJuegUv3EbV9IQY4j/+NZdFLv+lbTA==",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@grpc/grpc-js": "~1.3.0",
|
"@grpc/grpc-js": "~1.4.0",
|
||||||
"@grpc/proto-loader": "^0.6.1",
|
"@grpc/proto-loader": "^0.6.1",
|
||||||
"@types/long": "^4.0.0",
|
"@types/long": "^4.0.0",
|
||||||
"abort-controller": "^3.0.0",
|
"abort-controller": "^3.0.0",
|
||||||
@ -2916,6 +3068,14 @@
|
|||||||
"minimalistic-crypto-utils": "^1.0.1"
|
"minimalistic-crypto-utils": "^1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"html-encoding-sniffer": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
|
||||||
|
"requires": {
|
||||||
|
"whatwg-encoding": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"http-cache-semantics": {
|
"http-cache-semantics": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
|
||||||
@ -2954,7 +3114,6 @@
|
|||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
||||||
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
|
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@tootallnate/once": "2",
|
"@tootallnate/once": "2",
|
||||||
"agent-base": "6",
|
"agent-base": "6",
|
||||||
@ -2975,7 +3134,6 @@
|
|||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
|
||||||
"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
|
"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"agent-base": "6",
|
"agent-base": "6",
|
||||||
"debug": "4"
|
"debug": "4"
|
||||||
@ -3166,6 +3324,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
||||||
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
|
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
|
||||||
},
|
},
|
||||||
|
"is-potential-custom-element-name": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
|
||||||
|
},
|
||||||
"is-regex": {
|
"is-regex": {
|
||||||
"version": "1.1.4",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
|
||||||
@ -3292,6 +3455,94 @@
|
|||||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
||||||
},
|
},
|
||||||
|
"jsdom": {
|
||||||
|
"version": "18.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-18.0.0.tgz",
|
||||||
|
"integrity": "sha512-HVLuBcFmwdWulStv5U+J59b1AyzXhM92KXlM8HQ3ecYtRM2OQEUCPMa4oNuDeCBmtRcC7tJvb0Xz5OeFXMOKTA==",
|
||||||
|
"requires": {
|
||||||
|
"abab": "^2.0.5",
|
||||||
|
"acorn": "^8.5.0",
|
||||||
|
"acorn-globals": "^6.0.0",
|
||||||
|
"cssom": "^0.5.0",
|
||||||
|
"cssstyle": "^2.3.0",
|
||||||
|
"data-urls": "^3.0.1",
|
||||||
|
"decimal.js": "^10.3.1",
|
||||||
|
"domexception": "^4.0.0",
|
||||||
|
"escodegen": "^2.0.0",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"html-encoding-sniffer": "^3.0.0",
|
||||||
|
"http-proxy-agent": "^5.0.0",
|
||||||
|
"https-proxy-agent": "^5.0.0",
|
||||||
|
"is-potential-custom-element-name": "^1.0.1",
|
||||||
|
"nwsapi": "^2.2.0",
|
||||||
|
"parse5": "6.0.1",
|
||||||
|
"saxes": "^5.0.1",
|
||||||
|
"symbol-tree": "^3.2.4",
|
||||||
|
"tough-cookie": "^4.0.0",
|
||||||
|
"w3c-hr-time": "^1.0.2",
|
||||||
|
"w3c-xmlserializer": "^3.0.0",
|
||||||
|
"webidl-conversions": "^7.0.0",
|
||||||
|
"whatwg-encoding": "^2.0.0",
|
||||||
|
"whatwg-mimetype": "^3.0.0",
|
||||||
|
"whatwg-url": "^10.0.0",
|
||||||
|
"ws": "^8.2.3",
|
||||||
|
"xml-name-validator": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"acorn": {
|
||||||
|
"version": "8.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
|
||||||
|
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="
|
||||||
|
},
|
||||||
|
"form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tough-cookie": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
|
||||||
|
"requires": {
|
||||||
|
"psl": "^1.1.33",
|
||||||
|
"punycode": "^2.1.1",
|
||||||
|
"universalify": "^0.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tr46": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
|
||||||
|
"requires": {
|
||||||
|
"punycode": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webidl-conversions": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
|
||||||
|
},
|
||||||
|
"whatwg-url": {
|
||||||
|
"version": "10.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
|
||||||
|
"integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
|
||||||
|
"requires": {
|
||||||
|
"tr46": "^3.0.0",
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ws": {
|
||||||
|
"version": "8.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||||
|
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"jsesc": {
|
"jsesc": {
|
||||||
"version": "2.5.2",
|
"version": "2.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
|
||||||
@ -3416,9 +3667,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jwks-rsa": {
|
"jwks-rsa": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.0.5.tgz",
|
||||||
"integrity": "sha512-iJqVCECYZZ+3oPmY1qXv3Fq+3ywDtuNEVBvG41pPlaR0zyGxa12nC0beAOBBUhETJmc05puS50mRQN4NkCGhmg==",
|
"integrity": "sha512-fliHfsiBRzEU0nXzSvwnh0hynzGB0WihF+CinKbSRlaqRxbqqKf2xbBPgwc8mzf18/WgwlG8e5eTpfSTBcU4DQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/express-jwt": "0.0.42",
|
"@types/express-jwt": "0.0.42",
|
||||||
"debug": "^4.3.2",
|
"debug": "^4.3.2",
|
||||||
@ -3833,6 +4084,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nwsapi": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
|
||||||
|
},
|
||||||
"oauth-sign": {
|
"oauth-sign": {
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
@ -3961,6 +4217,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
|
||||||
"integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
|
"integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
|
||||||
},
|
},
|
||||||
|
"parse5": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
|
||||||
|
},
|
||||||
"parseurl": {
|
"parseurl": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||||
@ -4034,9 +4295,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"proto3-json-serializer": {
|
"proto3-json-serializer": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.5.tgz",
|
||||||
"integrity": "sha512-bFzdsKU/zaTobWrRxRniMZIzzcgKYlmBWL1gAcTXZ2M7TQTGPI0JoYYs6bN7tpWj59ZCfwg7Ii/A2e8BbQGYnQ==",
|
"integrity": "sha512-G395jcZkgNXNeS+6FGqd09TsXeoCs9wmBWByDiwFy7Yd7HD8pyfyvf6q+rGh7PhT4AshRpG4NowzoKYUtkNjKg==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"protobufjs": {
|
"protobufjs": {
|
||||||
@ -4310,6 +4571,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||||
},
|
},
|
||||||
|
"saxes": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
|
||||||
|
"requires": {
|
||||||
|
"xmlchars": "^2.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scrypt-js": {
|
"scrypt-js": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
|
||||||
@ -4682,6 +4951,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"symbol-tree": {
|
||||||
|
"version": "3.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||||
|
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
|
||||||
|
},
|
||||||
"table": {
|
"table": {
|
||||||
"version": "6.7.2",
|
"version": "6.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz",
|
||||||
@ -4984,6 +5258,22 @@
|
|||||||
"extsprintf": "^1.2.0"
|
"extsprintf": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"w3c-hr-time": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
|
||||||
|
"requires": {
|
||||||
|
"browser-process-hrtime": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"w3c-xmlserializer": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
|
||||||
|
"requires": {
|
||||||
|
"xml-name-validator": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"web3": {
|
"web3": {
|
||||||
"version": "1.6.0",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/web3/-/web3-1.6.0.tgz",
|
||||||
@ -5321,6 +5611,29 @@
|
|||||||
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
|
||||||
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
|
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
|
||||||
},
|
},
|
||||||
|
"whatwg-encoding": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
|
||||||
|
"requires": {
|
||||||
|
"iconv-lite": "0.6.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"iconv-lite": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||||
|
"requires": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"whatwg-mimetype": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="
|
||||||
|
},
|
||||||
"whatwg-url": {
|
"whatwg-url": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||||
@ -5368,8 +5681,7 @@
|
|||||||
"word-wrap": {
|
"word-wrap": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"wrap-ansi": {
|
"wrap-ansi": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
@ -5463,6 +5775,16 @@
|
|||||||
"cookiejar": "^2.1.1"
|
"cookiejar": "^2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"xml-name-validator": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="
|
||||||
|
},
|
||||||
|
"xmlchars": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
|
||||||
|
},
|
||||||
"xtend": {
|
"xtend": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||||
|
@ -16,8 +16,9 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"firebase-admin": "^9.12.0",
|
"firebase-admin": "^10.0.0",
|
||||||
"firebase-functions": "^3.11.0",
|
"firebase-functions": "^3.11.0",
|
||||||
|
"jsdom": "^18.0.0",
|
||||||
"random-name": "^0.1.2",
|
"random-name": "^0.1.2",
|
||||||
"web3": "^1.6.0"
|
"web3": "^1.6.0"
|
||||||
},
|
},
|
||||||
|
@ -2,7 +2,8 @@ rules_version = '2';
|
|||||||
service firebase.storage {
|
service firebase.storage {
|
||||||
match /b/{bucket}/o {
|
match /b/{bucket}/o {
|
||||||
match /{allPaths=**} {
|
match /{allPaths=**} {
|
||||||
allow read, write: if request.auth!=null;
|
allow write: if request.auth!=null;
|
||||||
|
allow read: if true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user