socket onclose

This commit is contained in:
peter
2019-07-06 18:32:19 +02:00
parent 91d1dcf9f7
commit 0a779fcd34
14 changed files with 381 additions and 451 deletions
+1
View File
@@ -0,0 +1 @@
{"apiHost":"api.testnet.frontblock.me","apiPort":10001}
+284 -165
View File
@@ -1,5 +1,5 @@
{ {
"name": "assignment1", "name": "frontblock-admin",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
@@ -442,9 +442,9 @@
} }
}, },
"@types/express": { "@types/express": {
"version": "4.16.1", "version": "4.17.0",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz",
"integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", "integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==",
"requires": { "requires": {
"@types/body-parser": "*", "@types/body-parser": "*",
"@types/express-serve-static-core": "*", "@types/express-serve-static-core": "*",
@@ -452,14 +452,27 @@
} }
}, },
"@types/express-serve-static-core": { "@types/express-serve-static-core": {
"version": "4.16.6", "version": "4.16.7",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.6.tgz", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz",
"integrity": "sha512-8wr3CA/EMybyb6/V8qvTRKiNkPmgUA26uA9XWD6hlA0yFDuqi4r2L0C2B0U2HAYltJamoYJszlkaWM31vrKsHg==", "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==",
"requires": { "requires": {
"@types/node": "*", "@types/node": "*",
"@types/range-parser": "*" "@types/range-parser": "*"
} }
}, },
"@types/fs-extra": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz",
"integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==",
"requires": {
"@types/node": "*"
}
},
"@types/is-valid-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@types/is-valid-path/-/is-valid-path-0.1.0.tgz",
"integrity": "sha512-2ontWtpN8O2nf5S7EjDDJ0DwrRa2t7wmS3Wmo322yWYG6yFBYC1QCaLhz4Iz+mzJy8Kf4zP5yVyEd1ANPDmOFQ=="
},
"@types/istanbul-lib-coverage": { "@types/istanbul-lib-coverage": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
@@ -486,9 +499,9 @@
} }
}, },
"@types/jest": { "@types/jest": {
"version": "24.0.13", "version": "24.0.15",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.13.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.15.tgz",
"integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", "integrity": "sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/jest-diff": "*" "@types/jest-diff": "*"
@@ -506,9 +519,9 @@
"integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw=="
}, },
"@types/node": { "@types/node": {
"version": "11.13.13", "version": "11.13.17",
"resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.13.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.17.tgz",
"integrity": "sha512-GFWH7e4Q/OGLAO545bupVju+nE1YtLSwYAdLfSzAXnTPqoqKoXCOEtB7Cluvg9B/h2nGLhyzCDyCInYvrOE2nw==" "integrity": "sha512-7W3kSMa8diVH6s24a8Qrmvwu+vG3ahOC/flMHFdWSdnPYoQI0yPO84h5zOWYXAha2Npn3Pw3SSuQSwBUfaniyQ=="
}, },
"@types/range-parser": { "@types/range-parser": {
"version": "1.2.3", "version": "1.2.3",
@@ -1109,9 +1122,9 @@
} }
}, },
"base-x": { "base-x": {
"version": "3.0.5", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.6.tgz",
"integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", "integrity": "sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w==",
"requires": { "requires": {
"safe-buffer": "^5.0.1" "safe-buffer": "^5.0.1"
} }
@@ -1622,6 +1635,21 @@
"upath": "^1.1.1" "upath": "^1.1.1"
}, },
"dependencies": { "dependencies": {
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"normalize-path": { "normalize-path": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -2212,9 +2240,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
}, },
"elliptic": { "elliptic": {
"version": "6.4.1", "version": "6.5.0",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz",
"integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==",
"requires": { "requires": {
"bn.js": "^4.4.0", "bn.js": "^4.4.0",
"brorand": "^1.0.1", "brorand": "^1.0.1",
@@ -2225,6 +2253,12 @@
"minimalistic-crypto-utils": "^1.0.0" "minimalistic-crypto-utils": "^1.0.0"
} }
}, },
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
"dev": true
},
"emojis-list": { "emojis-list": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
@@ -2764,32 +2798,38 @@
} }
}, },
"findup-sync": { "findup-sync": {
"version": "2.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
"dev": true, "dev": true,
"requires": { "requires": {
"detect-file": "^1.0.0", "detect-file": "^1.0.0",
"is-glob": "^3.1.0", "is-glob": "^4.0.0",
"micromatch": "^3.0.4", "micromatch": "^3.0.4",
"resolve-dir": "^1.0.1" "resolve-dir": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-glob": { "is-glob": {
"version": "3.1.0", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true, "dev": true,
"requires": { "requires": {
"is-extglob": "^2.1.0" "is-extglob": "^2.1.1"
} }
} }
} }
}, },
"flatted": { "flatted": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
"integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==" "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg=="
}, },
"flush-write-stream": { "flush-write-stream": {
"version": "1.1.1", "version": "1.1.1",
@@ -2854,16 +2894,16 @@
} }
}, },
"frontblock": { "frontblock": {
"version": "0.2.3", "version": "0.4.3",
"resolved": "https://registry.npmjs.org/frontblock/-/frontblock-0.2.3.tgz", "resolved": "https://registry.npmjs.org/frontblock/-/frontblock-0.4.3.tgz",
"integrity": "sha512-VxKBkt3D3t8r5yVAqb2A2ccJfSBO9tJkS/MIJigjoilDFxwyALoL7ZwcnyEmUBbOzfLssrOp2s4LGCTInStNFg==", "integrity": "sha512-zKR9k4YGS1xMUYID6FoLzoB5iFBYRCj7nJqoYBR/MPxAqgHEE6kqzcV+IWLIQcVugCD23cBpr9X7oKVolqEChg==",
"requires": { "requires": {
"@types/node": "^11.13.10", "@types/node": "^11.13.10",
"bip39": "^3.0.2", "bip39": "^3.0.2",
"bitcoinjs-lib": "^5.0.4", "bitcoinjs-lib": "^5.0.4",
"bsock": "^0.1.9", "bsock": "^0.1.9",
"express": "^4.16.4", "express": "^4.16.4",
"frontblock-generic": "^0.2.8", "frontblock-generic": "^0.4.0",
"hdkey": "^1.1.1", "hdkey": "^1.1.1",
"log4js": "^4.3.1", "log4js": "^4.3.1",
"minimist": "^1.2.0", "minimist": "^1.2.0",
@@ -2872,9 +2912,9 @@
} }
}, },
"frontblock-generic": { "frontblock-generic": {
"version": "0.2.8", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/frontblock-generic/-/frontblock-generic-0.2.8.tgz", "resolved": "https://registry.npmjs.org/frontblock-generic/-/frontblock-generic-0.4.0.tgz",
"integrity": "sha512-bGlJEYprAs1IBlb4kZc2PxTCUI6oUACT5856AYE8jV2PZ6JTErLFyu9P84kUz73zr14gjgv8snLMPmHKcjdxbQ==", "integrity": "sha512-K949BMqdAofO5ka/ov5PLIQqrYX9VheS4mTj2Y/FN/NWRIy1kcHev0IY26Z9iRvFo3kvi2wVdD0yNlDA1VljXw==",
"requires": { "requires": {
"@types/node": "^12.0.0", "@types/node": "^12.0.0",
"bsock": "^0.1.9", "bsock": "^0.1.9",
@@ -2885,20 +2925,27 @@
}, },
"dependencies": { "dependencies": {
"@types/node": { "@types/node": {
"version": "12.0.10", "version": "12.0.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.12.tgz",
"integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==" "integrity": "sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ=="
} }
} }
}, },
"fs-extra": { "fs-extra": {
"version": "7.0.1", "version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0", "jsonfile": "^4.0.0",
"universalify": "^0.1.0" "universalify": "^0.1.0"
},
"dependencies": {
"graceful-fs": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
"integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg=="
}
} }
}, },
"fs-write-stream-atomic": { "fs-write-stream-atomic": {
@@ -3525,6 +3572,12 @@
"path-dirname": "^1.0.0" "path-dirname": "^1.0.0"
}, },
"dependencies": { "dependencies": {
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-glob": { "is-glob": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
@@ -3537,14 +3590,25 @@
} }
}, },
"global-modules": { "global-modules": {
"version": "1.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
"dev": true, "dev": true,
"requires": { "requires": {
"global-prefix": "^1.0.1", "global-prefix": "^3.0.0"
"is-windows": "^1.0.1", },
"resolve-dir": "^1.0.0" "dependencies": {
"global-prefix": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
"integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
"dev": true,
"requires": {
"ini": "^1.3.5",
"kind-of": "^6.0.2",
"which": "^1.3.1"
}
}
} }
}, },
"global-prefix": { "global-prefix": {
@@ -3962,10 +4026,9 @@
"dev": true "dev": true
}, },
"is-extglob": { "is-extglob": {
"version": "2.1.1", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
"dev": true
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "2.0.0", "version": "2.0.0",
@@ -3980,12 +4043,11 @@
"dev": true "dev": true
}, },
"is-glob": { "is-glob": {
"version": "4.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": { "requires": {
"is-extglob": "^2.1.1" "is-extglob": "^1.0.0"
} }
}, },
"is-invalid-path": { "is-invalid-path": {
@@ -3994,21 +4056,6 @@
"integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=", "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=",
"requires": { "requires": {
"is-glob": "^2.0.0" "is-glob": "^2.0.0"
},
"dependencies": {
"is-extglob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
"integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
},
"is-glob": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"requires": {
"is-extglob": "^1.0.0"
}
}
} }
}, },
"is-number": { "is-number": {
@@ -4754,35 +4801,15 @@
} }
}, },
"key-file-storage": { "key-file-storage": {
"version": "2.1.5", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/key-file-storage/-/key-file-storage-2.1.5.tgz", "resolved": "https://registry.npmjs.org/key-file-storage/-/key-file-storage-2.2.1.tgz",
"integrity": "sha1-WpRCayQLxNWOipdy0FJZGtfdHJ4=", "integrity": "sha512-wTeuxRiPeXud8oxOC64bKPnLEyhMcu+fK7YTYC7rc3tRuO4GZOuxaxZzYgy5aHYzbInSgejtjNAPMqsArbtOHA==",
"requires": { "requires": {
"fs-extra": "^0.30.0", "@types/fs-extra": "^8.0.0",
"@types/is-valid-path": "^0.1.0",
"fs-extra": "^8.1.0",
"is-valid-path": "^0.1.1", "is-valid-path": "^0.1.1",
"recur-fs": "^2.2.4" "recur-fs": "^2.2.4"
},
"dependencies": {
"fs-extra": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^2.1.0",
"klaw": "^1.0.0",
"path-is-absolute": "^1.0.0",
"rimraf": "^2.2.8"
}
},
"jsonfile": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"requires": {
"graceful-fs": "^4.1.6"
}
}
} }
}, },
"kind-of": { "kind-of": {
@@ -4791,14 +4818,6 @@
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true "dev": true
}, },
"klaw": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"requires": {
"graceful-fs": "^4.1.9"
}
},
"kleur": { "kleur": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -4898,14 +4917,14 @@
"dev": true "dev": true
}, },
"log4js": { "log4js": {
"version": "4.3.1", "version": "4.4.0",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-4.3.1.tgz", "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.4.0.tgz",
"integrity": "sha512-nPGS7w7kBnzNm1j8JycFxwLCbIMae8tHCo0cCdx/khB20Tcod8SZThYEB9E0c27ObcTGA1mlPowaf3hantQ/FA==", "integrity": "sha512-xwRvmxFsq8Hb7YeS+XKfvCrsH114bXex6mIwJ2+KmYVi23pB3+hlzyGq1JPycSFTJWNLhD/7PCtM0RfPy6/2yg==",
"requires": { "requires": {
"date-format": "^2.0.0", "date-format": "^2.0.0",
"debug": "^4.1.1", "debug": "^4.1.1",
"flatted": "^2.0.0", "flatted": "^2.0.0",
"rfdc": "^1.1.2", "rfdc": "^1.1.4",
"streamroller": "^1.0.5" "streamroller": "^1.0.5"
}, },
"dependencies": { "dependencies": {
@@ -4918,9 +4937,9 @@
} }
}, },
"ms": { "ms": {
"version": "2.1.1", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
} }
} }
}, },
@@ -5275,9 +5294,9 @@
"dev": true "dev": true
}, },
"node-libs-browser": { "node-libs-browser": {
"version": "2.2.0", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
"integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"assert": "^1.1.1", "assert": "^1.1.1",
@@ -5290,7 +5309,7 @@
"events": "^3.0.0", "events": "^3.0.0",
"https-browserify": "^1.0.0", "https-browserify": "^1.0.0",
"os-browserify": "^0.3.0", "os-browserify": "^0.3.0",
"path-browserify": "0.0.0", "path-browserify": "0.0.1",
"process": "^0.11.10", "process": "^0.11.10",
"punycode": "^1.2.4", "punycode": "^1.2.4",
"querystring-es3": "^0.2.0", "querystring-es3": "^0.2.0",
@@ -5302,7 +5321,7 @@
"tty-browserify": "0.0.0", "tty-browserify": "0.0.0",
"url": "^0.11.0", "url": "^0.11.0",
"util": "^0.11.0", "util": "^0.11.0",
"vm-browserify": "0.0.4" "vm-browserify": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"punycode": { "punycode": {
@@ -5667,9 +5686,9 @@
"dev": true "dev": true
}, },
"path-browserify": { "path-browserify": {
"version": "0.0.0", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
"dev": true "dev": true
}, },
"path-dirname": { "path-dirname": {
@@ -5776,9 +5795,9 @@
"dev": true "dev": true
}, },
"prettier": { "prettier": {
"version": "1.17.1", "version": "1.18.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
"integrity": "sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg==", "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
"dev": true "dev": true
}, },
"pretty-format": { "pretty-format": {
@@ -6190,6 +6209,19 @@
"requires": { "requires": {
"expand-tilde": "^2.0.0", "expand-tilde": "^2.0.0",
"global-modules": "^1.0.0" "global-modules": "^1.0.0"
},
"dependencies": {
"global-modules": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
"requires": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
"resolve-dir": "^1.0.0"
}
}
} }
}, },
"resolve-from": { "resolve-from": {
@@ -6219,6 +6251,7 @@
"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"
} }
@@ -6861,10 +6894,20 @@
"ms": "^2.1.1" "ms": "^2.1.1"
} }
}, },
"fs-extra": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"ms": { "ms": {
"version": "2.1.1", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
} }
} }
}, },
@@ -7181,15 +7224,15 @@
} }
}, },
"tslib": { "tslib": {
"version": "1.9.3", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
"dev": true "dev": true
}, },
"tslint": { "tslint": {
"version": "5.17.0", "version": "5.18.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
"integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==", "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
@@ -7273,9 +7316,9 @@
"integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g=="
}, },
"typescript": { "typescript": {
"version": "3.5.1", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.1.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==", "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==",
"dev": true "dev": true
}, },
"uglify-js": { "uglify-js": {
@@ -7519,13 +7562,10 @@
} }
}, },
"vm-browserify": { "vm-browserify": {
"version": "0.0.4", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
"integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
"dev": true, "dev": true
"requires": {
"indexof": "0.0.1"
}
}, },
"w3c-hr-time": { "w3c-hr-time": {
"version": "1.0.1", "version": "1.0.1",
@@ -7563,9 +7603,9 @@
"dev": true "dev": true
}, },
"webpack": { "webpack": {
"version": "4.32.2", "version": "4.35.2",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.32.2.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.35.2.tgz",
"integrity": "sha512-F+H2Aa1TprTQrpodRAWUMJn7A8MgDx82yQiNvYMaj3d1nv3HetKU0oqEulL9huj8enirKi8KvEXQ3QtuHF89Zg==", "integrity": "sha512-TZAmorNymV4q66gAM/h90cEjG+N3627Q2MnkSgKlX/z3DlNVKUtqy57lz1WmZU2+FUZwzM+qm7cGaO95PyrX5A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@webassemblyjs/ast": "1.8.5", "@webassemblyjs/ast": "1.8.5",
@@ -7595,30 +7635,109 @@
}, },
"dependencies": { "dependencies": {
"acorn": { "acorn": {
"version": "6.1.1", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz",
"integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==",
"dev": true "dev": true
} }
} }
}, },
"webpack-cli": { "webpack-cli": {
"version": "3.3.2", "version": "3.3.5",
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.2.tgz", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.5.tgz",
"integrity": "sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==", "integrity": "sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"chalk": "^2.4.1", "chalk": "2.4.2",
"cross-spawn": "^6.0.5", "cross-spawn": "6.0.5",
"enhanced-resolve": "^4.1.0", "enhanced-resolve": "4.1.0",
"findup-sync": "^2.0.0", "findup-sync": "3.0.0",
"global-modules": "^1.0.0", "global-modules": "2.0.0",
"import-local": "^2.0.0", "import-local": "2.0.0",
"interpret": "^1.1.0", "interpret": "1.2.0",
"loader-utils": "^1.1.0", "loader-utils": "1.2.3",
"supports-color": "^5.5.0", "supports-color": "6.1.0",
"v8-compile-cache": "^2.0.2", "v8-compile-cache": "2.0.3",
"yargs": "^12.0.5" "yargs": "13.2.4"
},
"dependencies": {
"cliui": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
"wrap-ansi": "^5.1.0"
}
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"wrap-ansi": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
"strip-ansi": "^5.0.0"
}
},
"yargs": {
"version": "13.2.4",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
"integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
"dev": true,
"requires": {
"cliui": "^5.0.0",
"find-up": "^3.0.0",
"get-caller-file": "^2.0.1",
"os-locale": "^3.1.0",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^3.0.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.1.0"
}
},
"yargs-parser": {
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
"integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
} }
}, },
"webpack-sources": { "webpack-sources": {
+15 -14
View File
@@ -1,41 +1,42 @@
{ {
"name": "assignment1", "name": "frontblock-admin",
"version": "1.0.0", "version": "1.0.0",
"scripts": { "scripts": {
"start": "npm run build; node --experimental-modules lib/FrontblockService.js", "start": "npm run build; node --experimental-modules lib/FrontblockAdmin.js",
"build": "npm run clean; tsc; node_modules/.bin/webpack", "build": "npm run clean; tsc; node_modules/.bin/webpack",
"clean": "rm -rf lib", "clean": "rm -rf lib",
"update-frontblock": "rm -rf node_modules/frontblock*; npm install" "update-frontblock": "rm -rf node_modules/frontblock*; npm install"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "http://todo" "url": "http://gitea.frontblock.me/fb-vendor/admin"
}, },
"author": "frontblock.me", "author": "frontblock.me",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@types/express": "^4.16.1", "@types/express": "^4.17.0",
"@types/node": "^11.13.13", "@types/node": "^11.13.17",
"bsock": "^0.1.9", "bsock": "^0.1.9",
"express": "^4.16.4", "express": "^4.16.4",
"frontblock": "latest", "frontblock": "^0.4.3",
"frontblock-generic": "^0.4.0",
"http": "0.0.0", "http": "0.0.0",
"key-file-storage": "^2.1.5", "key-file-storage": "^2.2.1",
"log4js": "^4.3.1", "log4js": "^4.4.0",
"node-fetch": "^2.6.0", "node-fetch": "^2.6.0",
"socket.io": "^2.2.0" "socket.io": "^2.2.0"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^24.0.11", "@types/jest": "^24.0.15",
"jest": "^24.7.1", "jest": "^24.7.1",
"prettier": "^1.16.4", "prettier": "^1.18.2",
"terser-webpack-plugin": "^1.3.0", "terser-webpack-plugin": "^1.3.0",
"ts-jest": "^24.0.2", "ts-jest": "^24.0.2",
"tslint": "^5.15.0", "tslint": "^5.18.0",
"tslint-config-prettier": "^1.18.0", "tslint-config-prettier": "^1.18.0",
"typescript": "^3.4.2", "typescript": "^3.5.2",
"webpack": "^4.30.0", "webpack": "^4.35.2",
"webpack-cli": "^3.3.1" "webpack-cli": "^3.3.5"
}, },
"files": [ "files": [
"lib/**/*" "lib/**/*"
@@ -2,28 +2,37 @@
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/Service'; import { ErrorResponse, SuccessResponse } from 'frontblock-generic/Types';
import { FrontblockApiConf } from "frontblock/FrontblockApiClient"
const pluginList = [ type pluginEntry = {pluginPath:string, conf?:any}
'../../paymentmanager/static/Plugin', const pluginList:pluginEntry[] = [
'frontblock/FrontblockLib' { pluginPath: '../../paymentmanager/static/Plugin', conf:<FrontblockApiConf>{ apiHost: /*'localhost'*/'api.testnet.frontblock.me', apiPort: 10001 } },
{ pluginPath: '../../htmlsupplier/static/Plugin' },
{ pluginPath: 'frontblock/FrontblockApiClient', conf:<FrontblockApiConf>{ apiHost: /*'localhost'*/'api.testnet.frontblock.me', apiPort: 10001 } }
] ]
const express = require('express') const express = require('express')
const http = require('http') const http = require('http')
const bsock = require('bsock') const bsock = require('bsock')
const kfs = require("key-file-storage")('conf') //'conf' is a directory that will be generated if it doesn't exist const kfs = require("key-file-storage").default('conf') //'conf' is a directory that will be generated if it doesn't exist
Logger.configure({
const logger = Logger.getLogger() // logs to STDOUT appenders: {
logger.level = 'debug' "admin": { type: 'stdout' },
//app: { type: 'file', filename: 'application.log' }
},
categories: {
default: { appenders: [ 'admin' ], level: 'debug' }
}
})
const logger = Logger.getLogger("admin")
type hookRpc = { type: 'hook', generator: (socket) => Function, unhook:(uid:string)=>Promise<ErrorResponse|SuccessResponse>} type hookRpc = { type: 'hook', generator: (socket) => Function, unhook:(uid:string)=>Promise<ErrorResponse|SuccessResponse>}
type unhookRPC = { type: 'unhook', fn: Function} type unhookRPC = { type: 'unhook', fn: Function}
type callRPC = { type: 'call', fn: Function} type callRPC = { type: 'call', fn: Function}
export type rpcInfo = { export type rpcInfo = {
owner: string,
name: string, name: string,
args: string, args: string,
info: hookRpc | unhookRPC | callRPC info: hookRpc | unhookRPC | callRPC
@@ -40,15 +49,17 @@ export type rpcInfo = {
export class FrontblockAdmin{ export class FrontblockAdmin{
private plugins: Plugin[] private plugins: Plugin[]
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()
constructor(){ constructor(){
if(!('FrontblockService' in kfs)){ if(!('FrontblockAdmin' in kfs)){
logger.warn('No config file found! Generating one') logger.warn('No config file found! Generating one')
kfs.FrontblockService = { httpPort: 8080 } kfs.FrontblockAdmin = { httpPort: 8080 }
} }
this.initialize() this.initialize()
@@ -62,16 +73,19 @@ export class FrontblockAdmin{
} }
private async loadPlugins(){ private async loadPlugins(){
const promises = pluginList.map(path => { this.plugins = []
return import(path) pluginList.forEach(async (entry:pluginEntry) => {
const clazz = await import(entry.pluginPath)
let obj = new clazz.default(entry.conf)
this.plugins.push(obj)
}) })
const pluginsClasses = await Promise.all(promises)
this.plugins = pluginsClasses.map(clazz => new clazz.default())
} }
private initApis(socket){ private initApis(socket){
//Declare own functions
const rpcInfos:rpcInfo[] = [ const rpcInfos:rpcInfo[] = [
{ {
owner: 'Admin',
name: 'restartWebserver', name: 'restartWebserver',
args: 'port', args: 'port',
info:{ info:{
@@ -79,6 +93,7 @@ export class FrontblockAdmin{
fn: (port:number) => { this.restartWebserver(port) } fn: (port:number) => { this.restartWebserver(port) }
} }
},{ },{
owner: 'Admin',
name: 'info', name: 'info',
args: '', args: '',
info:{ info:{
@@ -88,10 +103,16 @@ export class FrontblockAdmin{
} }
] ]
//translate RPCs to socket-bound function metadata
this.plugins.forEach(plugin => { this.plugins.forEach(plugin => {
plugin.exportRPCs().forEach(rpc => rpcInfos.push(this.rpcToRpcInfo(rpc))) const pluginName = plugin.name
plugin.exportRPCs().forEach(rpc => {
const info = this.rpcToRpcInfo(pluginName, rpc)
rpcInfos.push(info)
})
}) })
//Hook up all the functions
for(const api of rpcInfos){ for(const api of rpcInfos){
switch(api.info.type){ switch(api.info.type){
case 'call': case 'call':
@@ -108,13 +129,29 @@ export class FrontblockAdmin{
} }
} }
socket.on('close', () => { //initialize the lists of open hooks
logger.info("Client disconnected") rpcInfos
rpcInfos.forEach(rpc => { .filter(rpc => rpc.info.type === "hook")
socket.unhook(rpc.name) .forEach(hook => {
}) this.hookToUids[hook.name] = []
}) })
//On close, unhook open hooks
socket.on('close', () => {
logger.info("Client disconnected")
rpcInfos.forEach((rpc) => {
if(this.hookToUids[rpc.name] == null)
return
this.hookToUids[rpc.name].forEach((uid) => {
if(rpc.info.type === "hook"){
logger.info("Closing consumer `"+uid+"` owned by `"+rpc.name+"`")
rpc.info.unhook(uid)
}
})
})
})
} }
private startWebserver(){ private startWebserver(){
@@ -123,13 +160,13 @@ export class FrontblockAdmin{
return return
} }
let port:number = kfs.FrontblockService.httpPort let port:number = kfs.FrontblockAdmin.httpPort
this.express = express() this.express = express()
this.express.use(express.static('static')) this.express.use(express.static('static'))
this.httpServer = http.Server(this.express) this.httpServer = http.Server(this.express)
this.httpServer.listen(port, () => { this.httpServer.listen(port, () => {
logger.info('listening on *'+port) logger.info('Admin panel listening for HTTP on *'+port)
}) })
} }
@@ -146,7 +183,7 @@ export class FrontblockAdmin{
private restartWebserver(port:number){ private restartWebserver(port:number){
this.stopWebserver() this.stopWebserver()
kfs.FrontblockService = { httpPort: port } kfs.FrontblockAdmin = { httpPort: port }
this.startWebserver() this.startWebserver()
} }
@@ -164,22 +201,22 @@ export class FrontblockAdmin{
socket.on('error', handleError) socket.on('error', handleError)
this.initApis(socket) this.initApis(socket)
}) })
logger.info('websocket listening on *20000') logger.info('Admin websocket listening on *20000')
this.wsServer.listen(20000) this.wsServer.listen(20000)
}catch(e){ }catch(e){
logger.error(String(e)) logger.error(String(e))
} }
} }
private rpcToRpcInfo(rpc:socketioRPC):rpcInfo{ private rpcToRpcInfo(owner:string, rpc:socketioRPC):rpcInfo{
switch(rpc.type){ switch(rpc.type){
case 'hook': case 'hook':
let f = this.hookGenerator(rpc) let f = this.hookGenerator(rpc)
return {name: rpc.name, args: this.extractArgs(f(null)), info: { type: 'hook', generator: f, unhook: rpc.unhook } } return {owner: owner, name: rpc.name, args: this.extractArgs(f(null)), info: { type: 'hook', generator: f, unhook: rpc.unhook } }
case 'unhook': case 'unhook':
return {name: rpc.name, args: this.extractArgs(rpc.rpc), info: { type: 'unhook', fn: rpc.rpc } } return {owner: owner, name: rpc.name, args: this.extractArgs(rpc.rpc), info: { type: 'unhook', fn: rpc.rpc } }
case 'call': case 'call':
return {name: rpc.name, args: this.extractArgs(rpc.rpc), info: { type: 'call', fn: rpc.rpc } } return {owner: owner, name: rpc.name, args: this.extractArgs(rpc.rpc), info: { type: 'call', fn: rpc.rpc } }
} }
} }
@@ -187,24 +224,21 @@ export class FrontblockAdmin{
* Generates RPC hooks which support a callback. * Generates RPC hooks which support a callback.
* *
* Note callbacks *need* to accept a singular argument and they have to be the last parameter! * Note callbacks *need* to accept a singular argument and they have to be the last parameter!
*
* TODO: Maybe kill open callbacks when socket closes? See rpc.info.unhook for the appropriate function to call.
*/ */
hookGenerator = (rpc) => { hookGenerator = (rpc:socketioRPC) => {
const argsArr = this.extractArgs(rpc.rpc).split(',') const argsArr = this.extractArgs(rpc.rpc).split(',')
argsArr.pop() argsArr.pop()
const args = argsArr.join(',') const args = argsArr.join(',')
return eval(`(socket) => async (`+args+`) => { return eval(`(socket) => async (`+args+`) => {
const res = await rpc.rpc(`+args+(args.length!==0?',':'')+` (x) => { const res = await rpc.rpc(`+args+(args.length!==0?',':'')+` (x) => {
if(res.uid != null){
console.log("calling "+res.uid)
socket.call(res.uid, x).catch(e => { socket.call(res.uid, x).catch(e => {
rpc.unhook(res.uid) logger.debug(String(e))
}) })
})
if(res.uid != null){
this.hookToUids[rpc.name].push(res.uid)
} }
})
return res return res
}`) }`)
} }
+5 -4
View File
@@ -1,4 +1,4 @@
import { parseSubResponse, parseResponse } from "frontblock-generic/Service"; import { parseSubResponse, parseResponse } from "frontblock-generic/Types";
var bsock = require('bsock') var bsock = require('bsock')
/** /**
@@ -36,9 +36,10 @@ export class FrontblockConfigLib{
f = this.unhookGenerator(i.name, i.args) f = this.unhookGenerator(i.name, i.args)
break break
} }
if(this[i.owner] == null)
this[i.name] = f this[i.owner] = {}
this[i.name].bind(this) this[i.owner][i.name] = f
this[i.owner][i.name].bind(this)
} }
} }
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
<!doctype html> <html lang=en> <head> <meta charset=UTF-8> <title>Document</title> <link href="css/app.css?v=a5f963f6" rel="stylesheet"></head> <body> <root></root> <script type="text/javascript" src="js/vendor.461d1c56.js"></script><script type="text/javascript" src="js/app.5d10c2e6.js"></script></body> </html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
<!doctype html> <html lang=en> <head> <meta charset=UTF-8> <title>Document</title> <link href="css/app.css?v=a54d3946" rel="stylesheet"></head> <body> <root></root> <script type="text/javascript" src="js/vendor.195e4982.js"></script><script type="text/javascript" src="js/app.10653f4e.js"></script></body> </html> <!doctype html> <html lang=en> <head> <meta charset=UTF-8> <title>Document</title> <link href="css/app.css?v=a54d3946" rel="stylesheet"></head> <body> <root></root> <script type="text/javascript" src="js/vendor.195e4982.js"></script><script type="text/javascript" src="js/app.b657fdc7.js"></script></body> </html>
File diff suppressed because one or more lines are too long