upload via post
Massimo Melina committed
Jan 18, 2023 at 15:35 UTC
e78289e80cd3604406401e0666bb7883301902f3
9 files changed
+403
-200
package-lock.json
+336
-152
@@ -22,6 +22,7 @@
22
"cidr-tools": "^4.3.0",
23
"fast-glob": "^3.2.7",
24
"find-process": "^1.4.7",
25
+ "formidable": "^2.1.1",
26
"koa": "^2.13.4",
27
"koa-compress": "^5.1.0",
28
"koa-mount": "^4.0.0",
@@ -40,6 +41,7 @@
41
"devDependencies": {
42
"@types/archiver": "^5.1.1",
43
"@types/basic-auth": "^1.1.3",
44
+ "@types/formidable": "^2.0.5",
45
"@types/koa": "^2.13.4",
46
"@types/koa__router": "^8.0.11",
47
"@types/koa-compress": "^4.0.3",
@@ -310,24 +312,24 @@
312
}
313
},
314
"node_modules/@babel/helper-function-name": {
313
- "version": "7.18.9",
314
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
315
- "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
315
+ "version": "7.19.0",
316
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
317
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
318
"dependencies": {
317
- "@babel/template": "^7.18.6",
318
- "@babel/types": "^7.18.9"
319
+ "@babel/template": "^7.18.10",
320
+ "@babel/types": "^7.19.0"
321
},
322
"engines": {
323
"node": ">=6.9.0"
324
}
325
},
326
"node_modules/@babel/helper-function-name/node_modules/@babel/types": {
325
- "version": "7.18.13",
326
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
327
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
327
+ "version": "7.20.7",
328
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
329
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
330
"dependencies": {
329
- "@babel/helper-string-parser": "^7.18.10",
330
- "@babel/helper-validator-identifier": "^7.18.6",
331
+ "@babel/helper-string-parser": "^7.19.4",
332
+ "@babel/helper-validator-identifier": "^7.19.1",
333
"to-fast-properties": "^2.0.0"
334
},
335
"engines": {
@@ -383,32 +385,32 @@
385
}
386
},
387
"node_modules/@babel/helper-module-transforms": {
386
- "version": "7.18.9",
387
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
388
- "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
388
+ "version": "7.20.11",
389
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
390
+ "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
391
"peer": true,
392
"dependencies": {
393
"@babel/helper-environment-visitor": "^7.18.9",
394
"@babel/helper-module-imports": "^7.18.6",
393
- "@babel/helper-simple-access": "^7.18.6",
395
+ "@babel/helper-simple-access": "^7.20.2",
396
"@babel/helper-split-export-declaration": "^7.18.6",
395
- "@babel/helper-validator-identifier": "^7.18.6",
396
- "@babel/template": "^7.18.6",
397
- "@babel/traverse": "^7.18.9",
398
- "@babel/types": "^7.18.9"
397
+ "@babel/helper-validator-identifier": "^7.19.1",
398
+ "@babel/template": "^7.20.7",
399
+ "@babel/traverse": "^7.20.10",
400
+ "@babel/types": "^7.20.7"
401
},
402
"engines": {
403
"node": ">=6.9.0"
404
}
405
},
406
"node_modules/@babel/helper-module-transforms/node_modules/@babel/types": {
405
- "version": "7.18.13",
406
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
407
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
407
+ "version": "7.20.7",
408
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
409
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
410
"peer": true,
411
"dependencies": {
410
- "@babel/helper-string-parser": "^7.18.10",
411
- "@babel/helper-validator-identifier": "^7.18.6",
412
+ "@babel/helper-string-parser": "^7.19.4",
413
+ "@babel/helper-validator-identifier": "^7.19.1",
414
"to-fast-properties": "^2.0.0"
415
},
416
"engines": {
@@ -416,33 +418,33 @@
418
}
419
},
420
"node_modules/@babel/helper-plugin-utils": {
419
- "version": "7.18.9",
420
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
421
- "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
421
+ "version": "7.20.2",
422
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
423
+ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
424
"engines": {
425
"node": ">=6.9.0"
426
}
427
},
428
"node_modules/@babel/helper-simple-access": {
427
- "version": "7.18.6",
428
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
429
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
429
+ "version": "7.20.2",
430
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
431
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
432
"peer": true,
433
"dependencies": {
432
- "@babel/types": "^7.18.6"
434
+ "@babel/types": "^7.20.2"
435
},
436
"engines": {
437
"node": ">=6.9.0"
438
}
439
},
440
"node_modules/@babel/helper-simple-access/node_modules/@babel/types": {
439
- "version": "7.18.13",
440
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
441
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
441
+ "version": "7.20.7",
442
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
443
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
444
"peer": true,
445
"dependencies": {
444
- "@babel/helper-string-parser": "^7.18.10",
445
- "@babel/helper-validator-identifier": "^7.18.6",
446
+ "@babel/helper-string-parser": "^7.19.4",
447
+ "@babel/helper-validator-identifier": "^7.19.1",
448
"to-fast-properties": "^2.0.0"
449
},
450
"engines": {
@@ -474,17 +476,17 @@
476
}
477
},
478
"node_modules/@babel/helper-string-parser": {
477
- "version": "7.18.10",
478
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
479
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
479
+ "version": "7.19.4",
480
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
481
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
482
"engines": {
483
"node": ">=6.9.0"
484
}
485
},
486
"node_modules/@babel/helper-validator-identifier": {
485
- "version": "7.18.6",
486
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
487
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
487
+ "version": "7.19.1",
488
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
489
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
490
"engines": {
491
"node": ">=6.9.0"
492
}
@@ -641,22 +643,22 @@
643
}
644
},
645
"node_modules/@babel/template": {
644
- "version": "7.18.10",
645
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
646
- "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
646
+ "version": "7.20.7",
647
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
648
+ "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
649
"dependencies": {
650
"@babel/code-frame": "^7.18.6",
649
- "@babel/parser": "^7.18.10",
650
- "@babel/types": "^7.18.10"
651
+ "@babel/parser": "^7.20.7",
652
+ "@babel/types": "^7.20.7"
653
},
654
"engines": {
655
"node": ">=6.9.0"
656
}
657
},
658
"node_modules/@babel/template/node_modules/@babel/parser": {
657
- "version": "7.18.13",
658
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
659
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
659
+ "version": "7.20.7",
660
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
661
+ "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==",
662
"bin": {
663
"parser": "bin/babel-parser.js"
664
},
@@ -665,12 +667,12 @@
667
}
668
},
669
"node_modules/@babel/template/node_modules/@babel/types": {
668
- "version": "7.18.13",
669
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
670
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
670
+ "version": "7.20.7",
671
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
672
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
673
"dependencies": {
672
- "@babel/helper-string-parser": "^7.18.10",
673
- "@babel/helper-validator-identifier": "^7.18.6",
674
+ "@babel/helper-string-parser": "^7.19.4",
675
+ "@babel/helper-validator-identifier": "^7.19.1",
676
"to-fast-properties": "^2.0.0"
677
},
678
"engines": {
@@ -678,18 +680,18 @@
680
}
681
},
682
"node_modules/@babel/traverse": {
681
- "version": "7.18.13",
682
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
683
- "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
683
+ "version": "7.20.12",
684
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
685
+ "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
686
"dependencies": {
687
"@babel/code-frame": "^7.18.6",
686
- "@babel/generator": "^7.18.13",
688
+ "@babel/generator": "^7.20.7",
689
"@babel/helper-environment-visitor": "^7.18.9",
688
- "@babel/helper-function-name": "^7.18.9",
690
+ "@babel/helper-function-name": "^7.19.0",
691
"@babel/helper-hoist-variables": "^7.18.6",
692
"@babel/helper-split-export-declaration": "^7.18.6",
691
- "@babel/parser": "^7.18.13",
692
- "@babel/types": "^7.18.13",
693
+ "@babel/parser": "^7.20.7",
694
+ "@babel/types": "^7.20.7",
695
"debug": "^4.1.0",
696
"globals": "^11.1.0"
697
},
@@ -698,11 +700,11 @@
700
}
701
},
702
"node_modules/@babel/traverse/node_modules/@babel/generator": {
701
- "version": "7.18.13",
702
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
703
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
703
+ "version": "7.20.7",
704
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
705
+ "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
706
"dependencies": {
705
- "@babel/types": "^7.18.13",
707
+ "@babel/types": "^7.20.7",
708
"@jridgewell/gen-mapping": "^0.3.2",
709
"jsesc": "^2.5.1"
710
},
@@ -711,9 +713,9 @@
713
}
714
},
715
"node_modules/@babel/traverse/node_modules/@babel/parser": {
714
- "version": "7.18.13",
715
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
716
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
716
+ "version": "7.20.7",
717
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
718
+ "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==",
719
"bin": {
720
"parser": "bin/babel-parser.js"
721
},
@@ -722,12 +724,12 @@
724
}
725
},
726
"node_modules/@babel/traverse/node_modules/@babel/types": {
725
- "version": "7.18.13",
726
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
727
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
727
+ "version": "7.20.7",
728
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
729
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
730
"dependencies": {
729
- "@babel/helper-string-parser": "^7.18.10",
730
- "@babel/helper-validator-identifier": "^7.18.6",
731
+ "@babel/helper-string-parser": "^7.19.4",
732
+ "@babel/helper-validator-identifier": "^7.19.1",
733
"to-fast-properties": "^2.0.0"
734
},
735
"engines": {
@@ -1836,6 +1838,15 @@
1838
"@types/range-parser": "*"
1839
}
1840
},
1841
+ "node_modules/@types/formidable": {
1842
+ "version": "2.0.5",
1843
+ "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.5.tgz",
1844
+ "integrity": "sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==",
1845
+ "dev": true,
1846
+ "dependencies": {
1847
+ "@types/node": "*"
1848
+ }
1849
+ },
1850
"node_modules/@types/glob": {
1851
"version": "7.2.0",
1852
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
@@ -2237,6 +2248,11 @@
2248
"node": ">=0.10.0"
2249
}
2250
},
2251
+ "node_modules/asap": {
2252
+ "version": "2.0.6",
2253
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
2254
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
2255
+ },
2256
"node_modules/at-least-node": {
2257
"version": "1.0.0",
2258
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -2481,6 +2497,18 @@
2497
"node": ">= 6.0.0"
2498
}
2499
},
2500
+ "node_modules/call-bind": {
2501
+ "version": "1.0.2",
2502
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
2503
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
2504
+ "dependencies": {
2505
+ "function-bind": "^1.1.1",
2506
+ "get-intrinsic": "^1.0.2"
2507
+ },
2508
+ "funding": {
2509
+ "url": "https://github.com/sponsors/ljharb"
2510
+ }
2511
+ },
2512
"node_modules/callsites": {
2513
"version": "3.1.0",
2514
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -3058,6 +3086,15 @@
3086
"node": ">=0.10"
3087
}
3088
},
3089
+ "node_modules/dezalgo": {
3090
+ "version": "1.0.4",
3091
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
3092
+ "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
3093
+ "dependencies": {
3094
+ "asap": "^2.0.0",
3095
+ "wrappy": "1"
3096
+ }
3097
+ },
3098
"node_modules/diff": {
3099
"version": "5.0.0",
3100
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@@ -3331,6 +3368,20 @@
3368
}
3369
}
3370
},
3371
+ "node_modules/formidable": {
3372
+ "version": "2.1.1",
3373
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz",
3374
+ "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==",
3375
+ "dependencies": {
3376
+ "dezalgo": "^1.0.4",
3377
+ "hexoid": "^1.0.0",
3378
+ "once": "^1.4.0",
3379
+ "qs": "^6.11.0"
3380
+ },
3381
+ "funding": {
3382
+ "url": "https://ko-fi.com/tunnckoCore/commissions"
3383
+ }
3384
+ },
3385
"node_modules/fresh": {
3386
"version": "0.5.2",
3387
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -3425,6 +3476,19 @@
3476
"node": "6.* || 8.* || >= 10.*"
3477
}
3478
},
3479
+ "node_modules/get-intrinsic": {
3480
+ "version": "1.1.3",
3481
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
3482
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
3483
+ "dependencies": {
3484
+ "function-bind": "^1.1.1",
3485
+ "has": "^1.0.3",
3486
+ "has-symbols": "^1.0.3"
3487
+ },
3488
+ "funding": {
3489
+ "url": "https://github.com/sponsors/ljharb"
3490
+ }
3491
+ },
3492
"node_modules/github-from-package": {
3493
"version": "0.0.0",
3494
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@@ -3595,6 +3659,14 @@
3659
"tslib": "^2.0.3"
3660
}
3661
},
3662
+ "node_modules/hexoid": {
3663
+ "version": "1.0.0",
3664
+ "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
3665
+ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
3666
+ "engines": {
3667
+ "node": ">=8"
3668
+ }
3669
+ },
3670
"node_modules/history": {
3671
"version": "5.3.0",
3672
"resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
@@ -4914,6 +4986,14 @@
4986
"node": ">=0.10.0"
4987
}
4988
},
4989
+ "node_modules/object-inspect": {
4990
+ "version": "1.12.3",
4991
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
4992
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
4993
+ "funding": {
4994
+ "url": "https://github.com/sponsors/ljharb"
4995
+ }
4996
+ },
4997
"node_modules/on-finished": {
4998
"version": "2.4.1",
4999
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -4929,7 +5009,6 @@
5009
"version": "1.4.0",
5010
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5011
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
4932
- "dev": true,
5012
"dependencies": {
5013
"wrappy": "1"
5014
}
@@ -5419,6 +5498,20 @@
5498
"node": ">=6"
5499
}
5500
},
5501
+ "node_modules/qs": {
5502
+ "version": "6.11.0",
5503
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
5504
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
5505
+ "dependencies": {
5506
+ "side-channel": "^1.0.4"
5507
+ },
5508
+ "engines": {
5509
+ "node": ">=0.6"
5510
+ },
5511
+ "funding": {
5512
+ "url": "https://github.com/sponsors/ljharb"
5513
+ }
5514
+ },
5515
"node_modules/querystringify": {
5516
"version": "2.2.0",
5517
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -5971,6 +6064,19 @@
6064
"node": ">=8"
6065
}
6066
},
6067
+ "node_modules/side-channel": {
6068
+ "version": "1.0.4",
6069
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
6070
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
6071
+ "dependencies": {
6072
+ "call-bind": "^1.0.0",
6073
+ "get-intrinsic": "^1.0.2",
6074
+ "object-inspect": "^1.9.0"
6075
+ },
6076
+ "funding": {
6077
+ "url": "https://github.com/sponsors/ljharb"
6078
+ }
6079
+ },
6080
"node_modules/signal-exit": {
6081
"version": "3.0.7",
6082
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -6843,8 +6949,7 @@
6949
"node_modules/wrappy": {
6950
"version": "1.0.2",
6951
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
6846
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
6847
- "dev": true
6952
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
6953
},
6954
"node_modules/y18n": {
6955
"version": "5.0.8",
@@ -7162,21 +7267,21 @@
7267
"integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg=="
7268
},
7269
"@babel/helper-function-name": {
7165
- "version": "7.18.9",
7166
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
7167
- "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
7270
+ "version": "7.19.0",
7271
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
7272
+ "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
7273
"requires": {
7169
- "@babel/template": "^7.18.6",
7170
- "@babel/types": "^7.18.9"
7274
+ "@babel/template": "^7.18.10",
7275
+ "@babel/types": "^7.19.0"
7276
},
7277
"dependencies": {
7278
"@babel/types": {
7174
- "version": "7.18.13",
7175
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
7176
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
7279
+ "version": "7.20.7",
7280
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
7281
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
7282
"requires": {
7178
- "@babel/helper-string-parser": "^7.18.10",
7179
- "@babel/helper-validator-identifier": "^7.18.6",
7283
+ "@babel/helper-string-parser": "^7.19.4",
7284
+ "@babel/helper-validator-identifier": "^7.19.1",
7285
"to-fast-properties": "^2.0.0"
7286
}
7287
}
@@ -7223,56 +7328,56 @@
7328
}
7329
},
7330
"@babel/helper-module-transforms": {
7226
- "version": "7.18.9",
7227
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
7228
- "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
7331
+ "version": "7.20.11",
7332
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
7333
+ "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
7334
"peer": true,
7335
"requires": {
7336
"@babel/helper-environment-visitor": "^7.18.9",
7337
"@babel/helper-module-imports": "^7.18.6",
7233
- "@babel/helper-simple-access": "^7.18.6",
7338
+ "@babel/helper-simple-access": "^7.20.2",
7339
"@babel/helper-split-export-declaration": "^7.18.6",
7235
- "@babel/helper-validator-identifier": "^7.18.6",
7236
- "@babel/template": "^7.18.6",
7237
- "@babel/traverse": "^7.18.9",
7238
- "@babel/types": "^7.18.9"
7340
+ "@babel/helper-validator-identifier": "^7.19.1",
7341
+ "@babel/template": "^7.20.7",
7342
+ "@babel/traverse": "^7.20.10",
7343
+ "@babel/types": "^7.20.7"
7344
},
7345
"dependencies": {
7346
"@babel/types": {
7242
- "version": "7.18.13",
7243
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
7244
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
7347
+ "version": "7.20.7",
7348
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
7349
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
7350
"peer": true,
7351
"requires": {
7247
- "@babel/helper-string-parser": "^7.18.10",
7248
- "@babel/helper-validator-identifier": "^7.18.6",
7352
+ "@babel/helper-string-parser": "^7.19.4",
7353
+ "@babel/helper-validator-identifier": "^7.19.1",
7354
"to-fast-properties": "^2.0.0"
7355
}
7356
}
7357
}
7358
},
7359
"@babel/helper-plugin-utils": {
7255
- "version": "7.18.9",
7256
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
7257
- "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
7360
+ "version": "7.20.2",
7361
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
7362
+ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ=="
7363
},
7364
"@babel/helper-simple-access": {
7260
- "version": "7.18.6",
7261
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
7262
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
7365
+ "version": "7.20.2",
7366
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
7367
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
7368
"peer": true,
7369
"requires": {
7265
- "@babel/types": "^7.18.6"
7370
+ "@babel/types": "^7.20.2"
7371
},
7372
"dependencies": {
7373
"@babel/types": {
7269
- "version": "7.18.13",
7270
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
7271
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
7374
+ "version": "7.20.7",
7375
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
7376
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
7377
"peer": true,
7378
"requires": {
7274
- "@babel/helper-string-parser": "^7.18.10",
7275
- "@babel/helper-validator-identifier": "^7.18.6",
7379
+ "@babel/helper-string-parser": "^7.19.4",
7380
+ "@babel/helper-validator-identifier": "^7.19.1",
7381
"to-fast-properties": "^2.0.0"
7382
}
7383
}
@@ -7299,14 +7404,14 @@
7404
}
7405
},
7406
"@babel/helper-string-parser": {
7302
- "version": "7.18.10",
7303
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
7304
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
7407
+ "version": "7.19.4",
7408
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
7409
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
7410
},
7411
"@babel/helper-validator-identifier": {
7307
- "version": "7.18.6",
7308
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
7309
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
7412
+ "version": "7.19.1",
7413
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
7414
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
7415
},
7416
"@babel/helper-validator-option": {
7417
"version": "7.18.6",
@@ -7422,71 +7527,71 @@
7527
}
7528
},
7529
"@babel/template": {
7425
- "version": "7.18.10",
7426
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
7427
- "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
7530
+ "version": "7.20.7",
7531
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
7532
+ "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
7533
"requires": {
7534
"@babel/code-frame": "^7.18.6",
7430
- "@babel/parser": "^7.18.10",
7431
- "@babel/types": "^7.18.10"
7535
+ "@babel/parser": "^7.20.7",
7536
+ "@babel/types": "^7.20.7"
7537
},
7538
"dependencies": {
7539
"@babel/parser": {
7435
- "version": "7.18.13",
7436
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
7437
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg=="
7540
+ "version": "7.20.7",
7541
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
7542
+ "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg=="
7543
},
7544
"@babel/types": {
7440
- "version": "7.18.13",
7441
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
7442
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
7545
+ "version": "7.20.7",
7546
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
7547
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
7548
"requires": {
7444
- "@babel/helper-string-parser": "^7.18.10",
7445
- "@babel/helper-validator-identifier": "^7.18.6",
7549
+ "@babel/helper-string-parser": "^7.19.4",
7550
+ "@babel/helper-validator-identifier": "^7.19.1",
7551
"to-fast-properties": "^2.0.0"
7552
}
7553
}
7554
}
7555
},
7556
"@babel/traverse": {
7452
- "version": "7.18.13",
7453
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
7454
- "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
7557
+ "version": "7.20.12",
7558
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
7559
+ "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
7560
"requires": {
7561
"@babel/code-frame": "^7.18.6",
7457
- "@babel/generator": "^7.18.13",
7562
+ "@babel/generator": "^7.20.7",
7563
"@babel/helper-environment-visitor": "^7.18.9",
7459
- "@babel/helper-function-name": "^7.18.9",
7564
+ "@babel/helper-function-name": "^7.19.0",
7565
"@babel/helper-hoist-variables": "^7.18.6",
7566
"@babel/helper-split-export-declaration": "^7.18.6",
7462
- "@babel/parser": "^7.18.13",
7463
- "@babel/types": "^7.18.13",
7567
+ "@babel/parser": "^7.20.7",
7568
+ "@babel/types": "^7.20.7",
7569
"debug": "^4.1.0",
7570
"globals": "^11.1.0"
7571
},
7572
"dependencies": {
7573
"@babel/generator": {
7469
- "version": "7.18.13",
7470
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
7471
- "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
7574
+ "version": "7.20.7",
7575
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
7576
+ "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
7577
"requires": {
7473
- "@babel/types": "^7.18.13",
7578
+ "@babel/types": "^7.20.7",
7579
"@jridgewell/gen-mapping": "^0.3.2",
7580
"jsesc": "^2.5.1"
7581
}
7582
},
7583
"@babel/parser": {
7479
- "version": "7.18.13",
7480
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
7481
- "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg=="
7584
+ "version": "7.20.7",
7585
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
7586
+ "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg=="
7587
},
7588
"@babel/types": {
7484
- "version": "7.18.13",
7485
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
7486
- "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
7589
+ "version": "7.20.7",
7590
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
7591
+ "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
7592
"requires": {
7488
- "@babel/helper-string-parser": "^7.18.10",
7489
- "@babel/helper-validator-identifier": "^7.18.6",
7593
+ "@babel/helper-string-parser": "^7.19.4",
7594
+ "@babel/helper-validator-identifier": "^7.19.1",
7595
"to-fast-properties": "^2.0.0"
7596
}
7597
}
@@ -8199,6 +8304,15 @@
8304
"@types/range-parser": "*"
8305
}
8306
},
8307
+ "@types/formidable": {
8308
+ "version": "2.0.5",
8309
+ "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-2.0.5.tgz",
8310
+ "integrity": "sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==",
8311
+ "dev": true,
8312
+ "requires": {
8313
+ "@types/node": "*"
8314
+ }
8315
+ },
8316
"@types/glob": {
8317
"version": "7.2.0",
8318
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
@@ -8564,6 +8678,11 @@
8678
"integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
8679
"dev": true
8680
},
8681
+ "asap": {
8682
+ "version": "2.0.6",
8683
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
8684
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
8685
+ },
8686
"at-least-node": {
8687
"version": "1.0.0",
8688
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -8725,6 +8844,15 @@
8844
"ylru": "^1.2.0"
8845
}
8846
},
8847
+ "call-bind": {
8848
+ "version": "1.0.2",
8849
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
8850
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
8851
+ "requires": {
8852
+ "function-bind": "^1.1.1",
8853
+ "get-intrinsic": "^1.0.2"
8854
+ }
8855
+ },
8856
"callsites": {
8857
"version": "3.1.0",
8858
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -9150,6 +9278,15 @@
9278
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
9279
"dev": true
9280
},
9281
+ "dezalgo": {
9282
+ "version": "1.0.4",
9283
+ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
9284
+ "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
9285
+ "requires": {
9286
+ "asap": "^2.0.0",
9287
+ "wrappy": "1"
9288
+ }
9289
+ },
9290
"diff": {
9291
"version": "5.0.0",
9292
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@@ -9360,6 +9497,17 @@
9497
"integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
9498
"dev": true
9499
},
9500
+ "formidable": {
9501
+ "version": "2.1.1",
9502
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz",
9503
+ "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==",
9504
+ "requires": {
9505
+ "dezalgo": "^1.0.4",
9506
+ "hexoid": "^1.0.0",
9507
+ "once": "^1.4.0",
9508
+ "qs": "^6.11.0"
9509
+ }
9510
+ },
9511
"fresh": {
9512
"version": "0.5.2",
9513
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -9438,6 +9586,16 @@
9586
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
9587
"dev": true
9588
},
9589
+ "get-intrinsic": {
9590
+ "version": "1.1.3",
9591
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
9592
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
9593
+ "requires": {
9594
+ "function-bind": "^1.1.1",
9595
+ "has": "^1.0.3",
9596
+ "has-symbols": "^1.0.3"
9597
+ }
9598
+ },
9599
"github-from-package": {
9600
"version": "0.0.0",
9601
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@@ -9562,6 +9720,11 @@
9720
"tslib": "^2.0.3"
9721
}
9722
},
9723
+ "hexoid": {
9724
+ "version": "1.0.0",
9725
+ "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
9726
+ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g=="
9727
+ },
9728
"history": {
9729
"version": "5.3.0",
9730
"resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
@@ -10548,6 +10711,11 @@
10711
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
10712
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
10713
},
10714
+ "object-inspect": {
10715
+ "version": "1.12.3",
10716
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
10717
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
10718
+ },
10719
"on-finished": {
10720
"version": "2.4.1",
10721
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -10560,7 +10728,6 @@
10728
"version": "1.4.0",
10729
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
10730
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
10563
- "dev": true,
10731
"requires": {
10732
"wrappy": "1"
10733
}
@@ -10931,6 +11098,14 @@
11098
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
11099
"dev": true
11100
},
11101
+ "qs": {
11102
+ "version": "6.11.0",
11103
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
11104
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
11105
+ "requires": {
11106
+ "side-channel": "^1.0.4"
11107
+ }
11108
+ },
11109
"querystringify": {
11110
"version": "2.2.0",
11111
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -11344,6 +11519,16 @@
11519
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
11520
"dev": true
11521
},
11522
+ "side-channel": {
11523
+ "version": "1.0.4",
11524
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
11525
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
11526
+ "requires": {
11527
+ "call-bind": "^1.0.0",
11528
+ "get-intrinsic": "^1.0.2",
11529
+ "object-inspect": "^1.9.0"
11530
+ }
11531
+ },
11532
"signal-exit": {
11533
"version": "3.0.7",
11534
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -11963,8 +12148,7 @@
12148
"wrappy": {
12149
"version": "1.0.2",
12150
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
11966
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
11967
- "dev": true
12151
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
12152
},
12153
"y18n": {
12154
"version": "5.0.8",
package.json
+2
@@ -64,6 +64,7 @@
64
"cidr-tools": "^4.3.0",
65
"fast-glob": "^3.2.7",
66
"find-process": "^1.4.7",
67
+ "formidable": "^2.1.1",
68
"koa": "^2.13.4",
69
"koa-compress": "^5.1.0",
70
"koa-mount": "^4.0.0",
@@ -79,6 +80,7 @@
80
"devDependencies": {
81
"@types/archiver": "^5.1.1",
82
"@types/basic-auth": "^1.1.3",
83
+ "@types/formidable": "^2.0.5",
84
"@types/koa": "^2.13.4",
85
"@types/koa__router": "^8.0.11",
86
"@types/koa-compress": "^4.0.3",
plugins/vhosting/plugin.js
+1
-1
@@ -24,7 +24,7 @@ exports.init = api => {
24
let toModify = ctx
25
if (ctx.path.startsWith(api.const.SPECIAL_URI)) { // special uris should be excluded...
26
toModify = ctx.params
27
- if (toModify.path === undefined) // ...unless they carry a path in the query. In that case we'll work that.
27
+ if (toModify?.path === undefined) // ...unless they carry a path in the query. In that case we'll work that.
28
return
29
}
30
const hosts = api.getConfig('hosts')
src/apiMiddleware.ts
+6
-3
@@ -3,7 +3,7 @@
3
import Koa from 'koa'
4
import createSSE from './sse'
5
import { Readable } from 'stream'
6
-import { asyncGeneratorToReadable, onOff } from './misc'
6
+import { asyncGeneratorToReadable, objSameKeys, onOff, stream2string, tryJson } from './misc'
7
import events from './events'
8
import { HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_UNAUTHORIZED } from './const'
9
import _, { DebouncedFunc } from 'lodash'
@@ -26,10 +26,13 @@ export function apiMiddleware(apis: ApiHandlers) : Koa.Middleware {
26
ctx.body = 'invalid api'
27
return ctx.status = HTTP_NOT_FOUND
28
}
29
+ ctx.params = ctx.method === 'POST' ? tryJson(await stream2string(ctx.req))
30
+ : objSameKeys(ctx.query, x => Array.isArray(x) ? x : tryJson(x))
31
+ console.debug('API', ctx.method, ctx.path, { ...ctx.params })
32
const csrf = ctx.cookies.get('csrf')
33
// we don't rely on SameSite cookie option because it's https-only
31
- let res = csrf && csrf !== params.csrf ? new ApiError(HTTP_UNAUTHORIZED, 'csrf')
32
- : await apiFun(params || {}, ctx)
34
+ let res = csrf && csrf !== ctx.params.csrf ? new ApiError(HTTP_UNAUTHORIZED, 'csrf')
35
+ : await apiFun(ctx.params || {}, ctx)
36
if (isAsyncGenerator(res))
37
res = asyncGeneratorToReadable(res)
38
if (res instanceof Readable) { // Readable, we'll go SSE-mode
src/index.ts
+3
-2
@@ -9,7 +9,7 @@ import { frontEndApis } from './frontEndApis'
9
import { log } from './log'
10
import { pluginsMiddleware } from './plugins'
11
import { throttler } from './throttler'
12
-import { headRequests, gzipper, sessions, serveGuiAndSharedFiles, someSecurity, prepareState, paramsDecoder } from './middlewares'
12
+import { headRequests, gzipper, sessions, serveGuiAndSharedFiles, someSecurity, prepareState } from './middlewares'
13
import './listen'
14
import './commands'
15
import { adminApis } from './adminApis'
@@ -17,6 +17,7 @@ import { defineConfig } from './config'
17
import { ok } from 'assert'
18
import _ from 'lodash'
19
import { randomId } from './misc'
20
+//import body from 'koa-better-body'
21
22
ok(_.intersection(Object.keys(frontEndApis), Object.keys(adminApis)).length === 0) // they share same endpoints
23
@@ -29,9 +30,9 @@ app.use(someSecurity)
30
.use(log())
31
.use(throttler)
32
.use(gzipper)
32
- .use(paramsDecoder)
33
.use(pluginsMiddleware())
34
.use(mount(API_URI, apiMiddleware({ ...frontEndApis, ...adminApis })))
35
+ //.use(body({ multipart: false }))
36
.use(serveGuiAndSharedFiles)
37
.on('error', errorHandler)
38
src/middlewares.ts
+33
-40
@@ -4,7 +4,6 @@ import compress from 'koa-compress'
4
import Koa from 'koa'
5
import session from 'koa-session'
6
import {
7
- HTTP_FOOL,
7
ADMIN_URI,
8
BUILD_TIMESTAMP,
9
DEV,
@@ -15,12 +14,12 @@ import {
14
} from './const'
15
import { FRONTEND_URI } from './const'
16
import { cantReadStatusCode, hasPermission, nodeIsDirectory, urlToNode, vfs, VfsNode } from './vfs'
18
-import { dirTraversal, objSameKeys, prepareFolder, tryJson } from './misc'
17
+import { dirTraversal } from './misc'
18
import { zipStreamFromFolder } from './zip'
19
import { serveFileNode } from './serveFile'
20
import { serveGuiFiles } from './serveGuiFiles'
21
import mount from 'koa-mount'
23
-import { Readable } from 'stream'
22
+import { once, Readable } from 'stream'
23
import { applyBlock } from './block'
24
import { getAccount } from './perm'
25
import { socket2connection, updateConnection, normalizeIp } from './connections'
@@ -28,8 +27,9 @@ import basicAuth from 'basic-auth'
27
import { SRPClientSession, SRPParameters, SRPRoutines } from 'tssrp6a'
28
import { srpStep1 } from './api.auth'
29
import { basename, dirname, join } from 'path'
31
-import { createWriteStream } from 'fs'
30
+import { createWriteStream, mkdirSync } from 'fs'
31
import { pipeline } from 'stream/promises'
32
+import formidable from 'formidable'
33
34
export const gzipper = compress({
35
threshold: 2048,
@@ -82,11 +82,27 @@ export const serveGuiAndSharedFiles: Koa.Middleware = async (ctx, next) => {
82
const folder = await urlToNode(dirname(decPath), ctx, vfs, v => rest = v+'/'+rest)
83
if (!folder)
84
return ctx.status = HTTP_NOT_FOUND
85
- return await receiveUpload(folder, rest, ctx.req, ctx)
85
+ const dest = uploadWriter(folder, rest, ctx)
86
+ if (dest) {
87
+ await pipeline(ctx.req, dest)
88
+ ctx.body = {}
89
+ }
90
+ return
91
}
92
const node = await urlToNode(path, ctx)
93
if (!node)
94
return ctx.status = HTTP_NOT_FOUND
95
+ if (ctx.method === 'POST') { // curl -F upload=@file url/
96
+ ctx.body = {}
97
+ const form = formidable({
98
+ maxFileSize: Infinity,
99
+ //@ts-ignore wrong in the .d.ts file
100
+ fileWriteStreamHandler: f => uploadWriter(node, f.originalFilename, ctx)
101
+ })
102
+ form.parse(ctx.req)
103
+ await once(form, 'end').catch(()=> {})
104
+ return
105
+ }
106
const canRead = hasPermission(node, 'can_read', ctx)
107
const isFolder = await nodeIsDirectory(node)
108
if (isFolder && !path.endsWith('/'))
@@ -115,16 +131,17 @@ export const serveGuiAndSharedFiles: Koa.Middleware = async (ctx, next) => {
131
: ctx.status = cantReadStatusCode(def)
132
}
133
return serveFrontendFiles(ctx, next)
118
-}
134
120
-async function receiveUpload(base: VfsNode, path: string, stream: Readable, ctx: Koa.Context) {
121
- if (!base.source || !hasPermission(base, 'can_upload', ctx))
122
- return ctx.status = base.can_upload === false ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED
123
- path = join(base.source, path)
124
- await prepareFolder(path)
125
- const dest = createWriteStream(path)
126
- await pipeline(stream, dest)
127
- ctx.body = '{}'
135
+ function uploadWriter(base: VfsNode, path: string, ctx: Koa.Context) {
136
+ if (!base.source || !hasPermission(base, 'can_upload', ctx)) {
137
+ ctx.status = base.can_upload === false ? HTTP_FORBIDDEN : HTTP_UNAUTHORIZED
138
+ return
139
+ }
140
+ path = join(base.source, path)
141
+ mkdirSync(dirname(path), { recursive: true })
142
+ return createWriteStream(path)
143
+ }
144
+
145
}
146
147
let proxyDetected = false
@@ -136,14 +153,14 @@ export const someSecurity: Koa.Middleware = async (ctx, next) => {
153
if (DEV && proxy && [process.env.FRONTEND_PROXY, process.env.ADMIN_PROXY].includes(ctx.get('X-Forwarded-port')))
154
proxy = ''
155
if (dirTraversal(decodeURI(ctx.path)))
139
- return ctx.status = HTTP_FOOL
156
+ return ctx.status = 418
157
if (applyBlock(ctx.socket, ctx.ip))
158
return
159
proxyDetected ||= proxy > ''
160
ctx.state.proxiedFor = proxy
161
}
162
catch {
146
- return ctx.status = HTTP_FOOL
163
+ return ctx.status = 418
164
}
165
return next()
166
}
@@ -177,27 +194,3 @@ async function srpCheck(username: string, password: string) {
194
const clientRes2 = await clientRes1.step2(BigInt(salt), BigInt(pubKey))
195
return await step1.step2(clientRes2.A, clientRes2.M1).then(() => true, () => false)
196
}
180
-
181
-// unify get/post parameters, with JSON decoding to not be limited to strings
182
-export const paramsDecoder: Koa.Middleware = async (ctx, next) => {
183
- ctx.params = ctx.method === 'POST' ? tryJson(await stream2string(ctx.req))
184
- : objSameKeys(ctx.query, x => Array.isArray(x) ? x : tryJson(x))
185
- await next()
186
-}
187
-
188
-async function stream2string(stream: Readable): Promise<string> {
189
- return new Promise((resolve, reject) => {
190
- let data = ''
191
- stream.on('data', chunk =>
192
- data += chunk)
193
- stream.on('error', reject)
194
- stream.on('end', () => {
195
- try {
196
- resolve(data)
197
- }
198
- catch(e) {
199
- reject(e)
200
- }
201
- })
202
- })
203
-}
src/misc.ts
+18
@@ -10,6 +10,7 @@ export * from './util-http'
10
export * from './util-generators'
11
export * from './util-files'
12
import debounceAsync from './debounceAsync'
13
+import { Readable } from 'stream'
14
export { debounceAsync }
15
16
export type Callback<IN=void, OUT=void> = (x:IN) => OUT
@@ -147,3 +148,20 @@ export function tryJson(s?: string) {
148
try { return s && JSON.parse(s) }
149
catch {}
150
}
151
+
152
+export async function stream2string(stream: Readable): Promise<string> {
153
+ return new Promise((resolve, reject) => {
154
+ let data = ''
155
+ stream.on('data', chunk =>
156
+ data += chunk)
157
+ stream.on('error', reject)
158
+ stream.on('end', () => {
159
+ try {
160
+ resolve(data)
161
+ }
162
+ catch(e) {
163
+ reject(e)
164
+ }
165
+ })
166
+ })
167
+}
todo.md
+3
-1
@@ -1,4 +1,5 @@
1
# To do
2
+- upload: minimum available disk
3
- admin/fs: check if source exist when set
4
- plugins: after installing, switch to installed (and perhaps highlight new one)
5
- plugins' log, accessible in admin
@@ -36,7 +37,8 @@
37
- remove seconds from time
38
- upload
39
- upload unzipping (while streaming?)
39
-- plugin to make letsencrypt easier
40
+- plugin: upload quota per-account (possibly inheriting), and a default
41
+- plugin: make letsencrypt easier
42
- could be just automatic detection of files by certbot
43
- letsencrypt supports plugins to automatically configure webservers
44
- delete
tsconfig.json
+1
-1
@@ -25,7 +25,7 @@
25
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
26
27
/* Modules */
28
- "module": "commonjs", /* Specify what module code is generated. */
28
+ "module": "node16", /* Specify what module code is generated. */
29
"rootDir": "src", /* Specify the root folder within your source files. */
30
// "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
31
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */