help prs, why do i get ENOENT on second downloadFile in downloadPlugin?
This commit is contained in:
+1
-1
@@ -2,4 +2,4 @@ node_modules
|
|||||||
lib
|
lib
|
||||||
static
|
static
|
||||||
kfs
|
kfs
|
||||||
plugin
|
plugins
|
||||||
@@ -3,46 +3,26 @@
|
|||||||
import * as Logger from 'log4js'
|
import * as Logger from 'log4js'
|
||||||
import { Plugin, socketioRPC } from 'frontblock-generic/Plugin';
|
import { Plugin, socketioRPC } from 'frontblock-generic/Plugin';
|
||||||
import { ErrorResponse, SuccessResponse } from 'frontblock-generic/Types';
|
import { ErrorResponse, SuccessResponse } from 'frontblock-generic/Types';
|
||||||
|
import { PluginManager } from './PluginManager'
|
||||||
import express = require('express');
|
import express = require('express');
|
||||||
import http = require('http');
|
import http = require('http');
|
||||||
import fs = require('fs');
|
|
||||||
import bsock = require('bsock');
|
import bsock = require('bsock');
|
||||||
import fetch = require("node-fetch");
|
|
||||||
|
|
||||||
const kfs = require("key-file-storage").default('kfs')
|
const kfs = require("key-file-storage").default('kfs')
|
||||||
|
|
||||||
type pluginEntry =
|
|
||||||
{
|
|
||||||
pluginName:string
|
|
||||||
}
|
|
||||||
|
|
||||||
const pluginList:pluginEntry[] =
|
|
||||||
[
|
|
||||||
//{ pluginName: 'apiclient' },
|
|
||||||
//{ pluginName: 'paymentmanager' },
|
|
||||||
//{ pluginName: 'wallet' },
|
|
||||||
{ pluginName: 'htmlsupplier' }
|
|
||||||
]
|
|
||||||
|
|
||||||
type releaseEntry =
|
|
||||||
{
|
|
||||||
tagName: string,
|
|
||||||
staticZipURL: URL,
|
|
||||||
checksumFileURL: URL
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.configure({
|
Logger.configure({
|
||||||
appenders:
|
appenders:
|
||||||
{
|
{
|
||||||
"admin": { type: 'stdout' },
|
"frontblock-admin": { type: 'stdout' },
|
||||||
//app: { type: 'file', filename: 'application.log' }
|
//app: { type: 'file', filename: 'application.log' }
|
||||||
},
|
},
|
||||||
categories:
|
categories:
|
||||||
{
|
{
|
||||||
default: { appenders: [ 'admin' ], level: 'debug' }
|
default: { appenders: [ 'frontblock-admin' ], level: 'debug' }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const logger = Logger.getLogger("admin")
|
const logger = Logger.getLogger("frontblock-admin")
|
||||||
|
|
||||||
type hookRPC =
|
type hookRPC =
|
||||||
{
|
{
|
||||||
@@ -80,58 +60,28 @@ export type rpcInfo =
|
|||||||
* The list of available plugins is published via the frontblock API and downloaded via gitea-releases
|
* The list of available plugins is published via the frontblock API and downloaded via gitea-releases
|
||||||
*/
|
*/
|
||||||
export class FrontblockAdmin{
|
export class FrontblockAdmin{
|
||||||
private plugins: Plugin[]
|
private plugins: Plugin[] = []
|
||||||
|
|
||||||
private hookToUids:{[hookName:string]:string[]} = {}
|
private hookToUids:{[hookName:string]:string[]} = {}
|
||||||
|
|
||||||
private express
|
private express
|
||||||
private httpServer
|
private httpServer
|
||||||
private io = bsock.createServer()
|
private io = bsock.createServer()
|
||||||
private wsServer = http.createServer()
|
private wsServer = http.createServer()
|
||||||
|
private pm: PluginManager
|
||||||
|
|
||||||
constructor(){
|
constructor(){
|
||||||
if(!('admin.conf' in kfs)){
|
if(!('admin.conf' in kfs)){
|
||||||
logger.info('Generating ./kfs/admin.conf')
|
logger.info('Generating ./kfs/admin.conf')
|
||||||
kfs['admin.conf'] = { httpPort: 8080 }
|
kfs['admin.conf'] = { httpPort: 8080 }
|
||||||
}
|
}
|
||||||
|
this.pm = new PluginManager()
|
||||||
this.initialize()
|
this.initialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
private async initialize(){
|
private async initialize(){
|
||||||
const wat = await this.fetchReleaseList('htmlsupplier')
|
|
||||||
logger.debug(wat)
|
|
||||||
//await this.downloadPlugins()
|
|
||||||
//this.plugins.forEach(plugin => plugin.start())
|
|
||||||
//this.startWebsocket()
|
//this.startWebsocket()
|
||||||
//this.startWebserver()
|
//this.startWebserver()
|
||||||
}
|
}
|
||||||
|
|
||||||
private async fetchReleaseList(pluginName:string): Promise<releaseEntry[]>{
|
|
||||||
const res = await fetch('https://gitea.frontblock.me/api/v1/repos/fb-vendor/' + pluginName + '/releases')
|
|
||||||
const json = await res.json();
|
|
||||||
const releaseList:releaseEntry[] = []
|
|
||||||
|
|
||||||
json.forEach((release) => {
|
|
||||||
const tagName = release.tag_name
|
|
||||||
const staticZipURL = release.assets.filter(asset => asset.name === pluginName + '.zip')[0].browser_download_url
|
|
||||||
const checksumFileURL = release.assets.filter(asset => asset.name === 'md5sum.txt')[0].browser_download_url
|
|
||||||
releaseList.push({tagName,staticZipURL,checksumFileURL})
|
|
||||||
})
|
|
||||||
return releaseList
|
|
||||||
}
|
|
||||||
|
|
||||||
private async downloadPlugin(release:releaseEntry) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private async verifyPlugin(release:releaseEntry) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private async extractPlugin(release:releaseEntry) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private async installPlugin(release:releaseEntry) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private initApis(socket){
|
private initApis(socket){
|
||||||
//Declare own functions
|
//Declare own functions
|
||||||
const rpcInfos:rpcInfo[] = [
|
const rpcInfos:rpcInfo[] = [
|
||||||
@@ -234,7 +184,7 @@ export class FrontblockAdmin{
|
|||||||
|
|
||||||
private restartWebserver(port:number){
|
private restartWebserver(port:number){
|
||||||
this.stopWebserver()
|
this.stopWebserver()
|
||||||
kfs.FrontblockAdmin = { httpPort: port }
|
kfs['admin.conf'] = { httpPort: port }
|
||||||
this.startWebserver()
|
this.startWebserver()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
import * as Logger from 'log4js';
|
||||||
|
import fetch = require('node-fetch');
|
||||||
|
import fs = require('fs');
|
||||||
|
import path = require('path')
|
||||||
|
import unzip = require('unzip')
|
||||||
|
|
||||||
|
Logger.configure({
|
||||||
|
appenders:
|
||||||
|
{
|
||||||
|
"plugin-manager": { type: 'stdout' },
|
||||||
|
//app: { type: 'file', filename: 'application.log' }
|
||||||
|
},
|
||||||
|
categories:
|
||||||
|
{
|
||||||
|
default: { appenders: [ 'plugin-manager' ], level: 'debug' }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const logger = Logger.getLogger("plugin-manager")
|
||||||
|
|
||||||
|
|
||||||
|
export class PluginManager{
|
||||||
|
|
||||||
|
private installDir: string
|
||||||
|
private cacheDir: string
|
||||||
|
private loadedPlugins: string[]
|
||||||
|
|
||||||
|
constructor(installDir: string = './plugins'){
|
||||||
|
this.installDir = installDir
|
||||||
|
this.cacheDir = path.join(installDir, '.cache')
|
||||||
|
this.initialize()
|
||||||
|
}
|
||||||
|
|
||||||
|
private initialize() {
|
||||||
|
logger.info('Initializing manager')
|
||||||
|
|
||||||
|
try {
|
||||||
|
fs.access(this.cacheDir, async err => {
|
||||||
|
if (err && err.code === 'ENOENT') {
|
||||||
|
await fs.promises.mkdir(this.cacheDir, {recursive: true})
|
||||||
|
logger.info('Manager installed to ' + this.installDir)
|
||||||
|
} else {
|
||||||
|
logger.info('Manager already installed at ' + this.installDir)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getAvailablePlugins(): Promise<string[] | void> {
|
||||||
|
return [
|
||||||
|
'apiclient',
|
||||||
|
'paymentmanager',
|
||||||
|
'wallet',
|
||||||
|
'htmlsupplier'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getInstalledPlugins(): Promise<string[] | void> {
|
||||||
|
try {
|
||||||
|
const installed = await fs.promises.readdir(this.installDir)
|
||||||
|
return installed.filter( entry => entry[0] != '.')
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(error)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getLoadedPlugins(): Promise<string[] | void> {
|
||||||
|
return this.loadedPlugins
|
||||||
|
}
|
||||||
|
|
||||||
|
private async downloadFile(url: URL, dest: string) {
|
||||||
|
try {
|
||||||
|
fs.access(path.dirname(dest), err => {
|
||||||
|
if (err && err.code === 'ENOENT') {
|
||||||
|
fs.mkdirSync(path.dirname(dest), {recursive: true})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const file = fs.createWriteStream(dest)
|
||||||
|
file.on('error', err => {throw new Error(err)})
|
||||||
|
const response = await fetch(url)
|
||||||
|
if (!response.ok) throw new Error(response.statusText)
|
||||||
|
response.body.pipe(file)
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(error)
|
||||||
|
await fs.promises.unlink(dest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async downloadPlugin(pluginName: string) {
|
||||||
|
try {
|
||||||
|
const response = await fetch('https://gitea.frontblock.me/api/v1/repos/fb-vendor/' + pluginName + '/releases')
|
||||||
|
if (!response.ok) throw new Error(response.statusText)
|
||||||
|
|
||||||
|
const releases = await response.json()
|
||||||
|
if (!releases || !releases.length) throw new Error('Empty response')
|
||||||
|
|
||||||
|
const latest = releases[0]
|
||||||
|
const version = latest.tag_name
|
||||||
|
const archiveURL = latest.assets.filter(asset => asset.name === pluginName + '.zip')[0].browser_download_url
|
||||||
|
const checksumURL = latest.assets.filter(asset => asset.name === 'md5sum.txt')[0].browser_download_url
|
||||||
|
if (!version || ! archiveURL || !checksumURL) throw new Error('Malformed response')
|
||||||
|
|
||||||
|
await this.downloadFile(archiveURL, path.join(this.cacheDir, pluginName, version, 'plugin.zip'))
|
||||||
|
await this.downloadFile(checksumURL, path.join(this.cacheDir, pluginName, version, 'md5sum.txt'))
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async installPlugin(pluginName: string) {
|
||||||
|
try {
|
||||||
|
await this.downloadPlugin(pluginName)
|
||||||
|
} catch (error) {
|
||||||
|
logger.debug(error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public uninstallPlugin(pluginName: string) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async loadPlugin() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async unloadPlugin() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+234
-9
@@ -386,7 +386,8 @@
|
|||||||
"@types/angular": {
|
"@types/angular": {
|
||||||
"version": "1.6.55",
|
"version": "1.6.55",
|
||||||
"resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.55.tgz",
|
"resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.55.tgz",
|
||||||
"integrity": "sha512-jpQ5K6t76thd9Ook5x4Xj9K462hMje6/Q84SFxglBmaW8HOLblVnALpvg6w6aV3Oe6o9jWXnYH8gHHKrfSRxNQ=="
|
"integrity": "sha512-jpQ5K6t76thd9Ook5x4Xj9K462hMje6/Q84SFxglBmaW8HOLblVnALpvg6w6aV3Oe6o9jWXnYH8gHHKrfSRxNQ==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/babel__core": {
|
"@types/babel__core": {
|
||||||
"version": "7.1.2",
|
"version": "7.1.2",
|
||||||
@@ -433,6 +434,7 @@
|
|||||||
"version": "1.17.0",
|
"version": "1.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
|
||||||
"integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
|
"integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/connect": "*",
|
"@types/connect": "*",
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
@@ -442,6 +444,7 @@
|
|||||||
"version": "3.4.32",
|
"version": "3.4.32",
|
||||||
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
|
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
|
||||||
"integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
|
"integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
@@ -450,6 +453,7 @@
|
|||||||
"version": "4.17.0",
|
"version": "4.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz",
|
||||||
"integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==",
|
"integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/body-parser": "*",
|
"@types/body-parser": "*",
|
||||||
"@types/express-serve-static-core": "*",
|
"@types/express-serve-static-core": "*",
|
||||||
@@ -460,6 +464,7 @@
|
|||||||
"version": "4.16.7",
|
"version": "4.16.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz",
|
||||||
"integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==",
|
"integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/node": "*",
|
"@types/node": "*",
|
||||||
"@types/range-parser": "*"
|
"@types/range-parser": "*"
|
||||||
@@ -521,7 +526,8 @@
|
|||||||
"@types/mime": {
|
"@types/mime": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz",
|
||||||
"integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw=="
|
"integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "11.13.18",
|
"version": "11.13.18",
|
||||||
@@ -537,12 +543,20 @@
|
|||||||
"@types/range-parser": {
|
"@types/range-parser": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
|
||||||
"integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
|
"integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"@types/semver": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/serve-static": {
|
"@types/serve-static": {
|
||||||
"version": "1.13.2",
|
"version": "1.13.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz",
|
||||||
"integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==",
|
"integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/express-serve-static-core": "*",
|
"@types/express-serve-static-core": "*",
|
||||||
"@types/mime": "*"
|
"@types/mime": "*"
|
||||||
@@ -557,7 +571,8 @@
|
|||||||
"@types/webpack-env": {
|
"@types/webpack-env": {
|
||||||
"version": "1.14.0",
|
"version": "1.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.14.0.tgz",
|
||||||
"integrity": "sha512-Fv+0gYJzE/czLoRKq+gnXWr4yBpPM3tO3C8pDLFwqVKlMICQUq5OsxwwFZYDaVr7+L6mgNDp16iOcJHEz3J5RQ=="
|
"integrity": "sha512-Fv+0gYJzE/czLoRKq+gnXWr4yBpPM3tO3C8pDLFwqVKlMICQUq5OsxwwFZYDaVr7+L6mgNDp16iOcJHEz3J5RQ==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/yargs": {
|
"@types/yargs": {
|
||||||
"version": "12.0.12",
|
"version": "12.0.12",
|
||||||
@@ -1262,6 +1277,15 @@
|
|||||||
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
|
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"binary": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
|
||||||
|
"requires": {
|
||||||
|
"buffers": "~0.1.1",
|
||||||
|
"chainsaw": "~0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"binary-extensions": {
|
"binary-extensions": {
|
||||||
"version": "1.13.1",
|
"version": "1.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
|
||||||
@@ -1528,6 +1552,11 @@
|
|||||||
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
|
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"buffers": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
|
||||||
|
},
|
||||||
"builtin-modules": {
|
"builtin-modules": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
|
||||||
@@ -1688,6 +1717,14 @@
|
|||||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
|
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"chainsaw": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
|
||||||
|
"requires": {
|
||||||
|
"traverse": ">=0.3.0 <0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"chalk": {
|
"chalk": {
|
||||||
"version": "2.4.2",
|
"version": "2.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||||
@@ -2057,8 +2094,7 @@
|
|||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"cosmiconfig": {
|
"cosmiconfig": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
@@ -3159,6 +3195,11 @@
|
|||||||
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
|
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"fast-extend": {
|
||||||
|
"version": "0.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fast-extend/-/fast-extend-0.0.2.tgz",
|
||||||
|
"integrity": "sha1-9exCz0C5Rg9SGmOH37Ut7u1nHb0="
|
||||||
|
},
|
||||||
"fast-json-stable-stringify": {
|
"fast-json-stable-stringify": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
||||||
@@ -3401,6 +3442,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"fs-monkey": {
|
||||||
|
"version": "0.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-0.3.3.tgz",
|
||||||
|
"integrity": "sha512-FNUvuTAJ3CqCQb5ELn+qCbGR/Zllhf2HtwsdAtBi59s1WeCjKMT81fHcSu7dwIskqGVK+MmOrb7VOBlq3/SItw=="
|
||||||
|
},
|
||||||
"fs-write-stream-atomic": {
|
"fs-write-stream-atomic": {
|
||||||
"version": "1.0.10",
|
"version": "1.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
|
||||||
@@ -5943,6 +5989,38 @@
|
|||||||
"object-visit": "^1.0.0"
|
"object-visit": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"match-stream": {
|
||||||
|
"version": "0.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/match-stream/-/match-stream-0.0.2.tgz",
|
||||||
|
"integrity": "sha1-mesFAJOzTf+t5CG5rAtBCpz6F88=",
|
||||||
|
"requires": {
|
||||||
|
"buffers": "~0.1.1",
|
||||||
|
"readable-stream": "~1.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.0.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
|
||||||
|
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"md5.js": {
|
"md5.js": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
|
||||||
@@ -5976,6 +6054,15 @@
|
|||||||
"p-is-promise": "^2.0.0"
|
"p-is-promise": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"memfs": {
|
||||||
|
"version": "2.15.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/memfs/-/memfs-2.15.5.tgz",
|
||||||
|
"integrity": "sha512-x8v6Uok7FRuPt8RNXnIk3HzSFB2kaJtoT6ztpfIxxURjBPPsu4eKA+ZDLQ5GdV8+Lx71+vdMaBzHxy51vLQ7dw==",
|
||||||
|
"requires": {
|
||||||
|
"fast-extend": "0.0.2",
|
||||||
|
"fs-monkey": "^0.3.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"memory-fs": {
|
"memory-fs": {
|
||||||
"version": "0.4.1",
|
"version": "0.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
|
||||||
@@ -6320,6 +6407,11 @@
|
|||||||
"to-regex": "^3.0.1"
|
"to-regex": "^3.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"natives": {
|
||||||
|
"version": "1.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
|
||||||
|
"integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA=="
|
||||||
|
},
|
||||||
"natural-compare": {
|
"natural-compare": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||||
@@ -6841,6 +6933,11 @@
|
|||||||
"os-tmpdir": "^1.0.0"
|
"os-tmpdir": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"over": {
|
||||||
|
"version": "0.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/over/-/over-0.0.5.tgz",
|
||||||
|
"integrity": "sha1-8phS5w/X4l82DgE6jsRMgq7bVwg="
|
||||||
|
},
|
||||||
"p-defer": {
|
"p-defer": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
|
||||||
@@ -7823,6 +7920,40 @@
|
|||||||
"safe-buffer": "^5.1.2"
|
"safe-buffer": "^5.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pullstream": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pullstream/-/pullstream-0.4.1.tgz",
|
||||||
|
"integrity": "sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ=",
|
||||||
|
"requires": {
|
||||||
|
"over": ">= 0.0.5 < 1",
|
||||||
|
"readable-stream": "~1.0.31",
|
||||||
|
"setimmediate": ">= 1.0.2 < 2",
|
||||||
|
"slice-stream": ">= 1.0.0 < 2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.0.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
|
||||||
|
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"pump": {
|
"pump": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||||
@@ -8285,7 +8416,6 @@
|
|||||||
"version": "2.6.3",
|
"version": "2.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
||||||
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
|
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"glob": "^7.1.3"
|
"glob": "^7.1.3"
|
||||||
}
|
}
|
||||||
@@ -8711,8 +8841,7 @@
|
|||||||
"setimmediate": {
|
"setimmediate": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
||||||
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
|
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"setprototypeof": {
|
"setprototypeof": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
@@ -8804,6 +8933,37 @@
|
|||||||
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
|
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"slice-stream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slice-stream/-/slice-stream-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA=",
|
||||||
|
"requires": {
|
||||||
|
"readable-stream": "~1.0.31"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.0.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
|
||||||
|
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"snapdragon": {
|
"snapdragon": {
|
||||||
"version": "0.8.2",
|
"version": "0.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||||
@@ -9178,6 +9338,11 @@
|
|||||||
"readable-stream": "^2.0.2"
|
"readable-stream": "^2.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"stream-buffers": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ=="
|
||||||
|
},
|
||||||
"stream-each": {
|
"stream-each": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
|
||||||
@@ -9610,6 +9775,11 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traverse": {
|
||||||
|
"version": "0.3.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
|
||||||
|
"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
|
||||||
|
},
|
||||||
"trim-newlines": {
|
"trim-newlines": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
|
||||||
@@ -9921,6 +10091,61 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"unzip": {
|
||||||
|
"version": "0.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/unzip/-/unzip-0.1.11.tgz",
|
||||||
|
"integrity": "sha1-iXScY7BY19kNYZ+GuYqhU107l/A=",
|
||||||
|
"requires": {
|
||||||
|
"binary": ">= 0.3.0 < 1",
|
||||||
|
"fstream": ">= 0.1.30 < 1",
|
||||||
|
"match-stream": ">= 0.0.2 < 1",
|
||||||
|
"pullstream": ">= 0.4.1 < 1",
|
||||||
|
"readable-stream": "~1.0.31",
|
||||||
|
"setimmediate": ">= 1.0.1 < 2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"fstream": {
|
||||||
|
"version": "0.1.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz",
|
||||||
|
"integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=",
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "~3.0.2",
|
||||||
|
"inherits": "~2.0.0",
|
||||||
|
"mkdirp": "0.5",
|
||||||
|
"rimraf": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"graceful-fs": {
|
||||||
|
"version": "3.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
|
||||||
|
"integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
|
||||||
|
"requires": {
|
||||||
|
"natives": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.0.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
|
||||||
|
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"upath": {
|
"upath": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
|
||||||
|
|||||||
+8
-5
@@ -15,10 +15,6 @@
|
|||||||
"author": "frontblock.me",
|
"author": "frontblock.me",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/angular": "^1.6.55",
|
|
||||||
"@types/express": "^4.17.0",
|
|
||||||
"@types/node": "^11.13.18",
|
|
||||||
"@types/webpack-env": "^1.14.0",
|
|
||||||
"@uirouter/angularjs": "^1.0.5",
|
"@uirouter/angularjs": "^1.0.5",
|
||||||
"angular": "^1.7.8",
|
"angular": "^1.7.8",
|
||||||
"bsert": "0.0.10",
|
"bsert": "0.0.10",
|
||||||
@@ -28,10 +24,17 @@
|
|||||||
"http": "0.0.0",
|
"http": "0.0.0",
|
||||||
"key-file-storage": "^2.2.1",
|
"key-file-storage": "^2.2.1",
|
||||||
"log4js": "^4.4.0",
|
"log4js": "^4.4.0",
|
||||||
|
"memfs": "^2.15.5",
|
||||||
"node-fetch": "^2.6.0",
|
"node-fetch": "^2.6.0",
|
||||||
"socket.io": "^2.2.0"
|
"socket.io": "^2.2.0",
|
||||||
|
"stream-buffers": "^3.0.2",
|
||||||
|
"unzip": "^0.1.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/express": "^4.17.0",
|
||||||
|
"@types/node": "^11.13.18",
|
||||||
|
"@types/semver": "^6.0.1",
|
||||||
|
"@types/webpack-env": "^1.14.0",
|
||||||
"@types/angular": "^1.6.27",
|
"@types/angular": "^1.6.27",
|
||||||
"@types/jest": "^24.0.15",
|
"@types/jest": "^24.0.15",
|
||||||
"autoprefixer": "^9.4.7",
|
"autoprefixer": "^9.4.7",
|
||||||
|
|||||||
Reference in New Issue
Block a user