add create account/blog functions
This commit is contained in:
		
							parent
							
								
									fec3c33310
								
							
						
					
					
						commit
						cad4c59d51
					
				
					 6 changed files with 367 additions and 7 deletions
				
			
		|  | @ -14,6 +14,7 @@ | |||
|     "migrate": "typeorm-ts-node-esm migration:run -d ./src/db/index.ts" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "argon2": "^0.30.3", | ||||
|     "dotenv": "^16.3.1", | ||||
|     "express": "^4.18.2", | ||||
|     "pg": "^8.11.1", | ||||
|  |  | |||
							
								
								
									
										280
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										280
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							|  | @ -1,6 +1,9 @@ | |||
| lockfileVersion: '6.0' | ||||
| 
 | ||||
| dependencies: | ||||
|   argon2: | ||||
|     specifier: ^0.30.3 | ||||
|     version: 0.30.3 | ||||
|   dotenv: | ||||
|     specifier: ^16.3.1 | ||||
|     version: 16.3.1 | ||||
|  | @ -68,6 +71,29 @@ packages: | |||
|       '@jridgewell/resolve-uri': 3.1.1 | ||||
|       '@jridgewell/sourcemap-codec': 1.4.15 | ||||
| 
 | ||||
|   /@mapbox/node-pre-gyp@1.0.11: | ||||
|     resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       detect-libc: 2.0.2 | ||||
|       https-proxy-agent: 5.0.1 | ||||
|       make-dir: 3.1.0 | ||||
|       node-fetch: 2.6.12 | ||||
|       nopt: 5.0.0 | ||||
|       npmlog: 5.0.1 | ||||
|       rimraf: 3.0.2 | ||||
|       semver: 7.5.4 | ||||
|       tar: 6.1.15 | ||||
|     transitivePeerDependencies: | ||||
|       - encoding | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /@phc/format@1.0.0: | ||||
|     resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} | ||||
|     engines: {node: '>=10'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@sqltools/formatter@1.2.5: | ||||
|     resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} | ||||
|     dev: false | ||||
|  | @ -155,7 +181,6 @@ packages: | |||
| 
 | ||||
|   /abbrev@1.1.1: | ||||
|     resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /accepts@1.3.8: | ||||
|     resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} | ||||
|  | @ -174,6 +199,15 @@ packages: | |||
|     engines: {node: '>=0.4.0'} | ||||
|     hasBin: true | ||||
| 
 | ||||
|   /agent-base@6.0.2: | ||||
|     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} | ||||
|     engines: {node: '>= 6.0.0'} | ||||
|     dependencies: | ||||
|       debug: 4.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /ansi-regex@5.0.1: | ||||
|     resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} | ||||
|     engines: {node: '>=8'} | ||||
|  | @ -203,9 +237,34 @@ packages: | |||
|     engines: {node: '>= 6.0.0'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /aproba@2.0.0: | ||||
|     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /are-we-there-yet@2.0.0: | ||||
|     resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       delegates: 1.0.0 | ||||
|       readable-stream: 3.6.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /arg@4.1.3: | ||||
|     resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} | ||||
| 
 | ||||
|   /argon2@0.30.3: | ||||
|     resolution: {integrity: sha512-DoH/kv8c9127ueJSBxAVJXinW9+EuPA3EMUxoV2sAY1qDE5H9BjTyVF/aD2XyHqbqUWabgBkIfcP3ZZuGhbJdg==} | ||||
|     engines: {node: '>=14.0.0'} | ||||
|     requiresBuild: true | ||||
|     dependencies: | ||||
|       '@mapbox/node-pre-gyp': 1.0.11 | ||||
|       '@phc/format': 1.0.0 | ||||
|       node-addon-api: 5.1.0 | ||||
|     transitivePeerDependencies: | ||||
|       - encoding | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /array-flatten@1.1.1: | ||||
|     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} | ||||
|     dev: false | ||||
|  | @ -247,7 +306,6 @@ packages: | |||
|     dependencies: | ||||
|       balanced-match: 1.0.2 | ||||
|       concat-map: 0.0.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /brace-expansion@2.0.1: | ||||
|     resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} | ||||
|  | @ -309,6 +367,11 @@ packages: | |||
|       fsevents: 2.3.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /chownr@2.0.0: | ||||
|     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} | ||||
|     engines: {node: '>=10'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /cli-highlight@2.1.11: | ||||
|     resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} | ||||
|     engines: {node: '>=8.0.0', npm: '>=5.0.0'} | ||||
|  | @ -350,9 +413,17 @@ packages: | |||
|     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /color-support@1.1.3: | ||||
|     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /concat-map@0.0.1: | ||||
|     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /console-control-strings@1.1.0: | ||||
|     resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /content-disposition@0.5.4: | ||||
|     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} | ||||
|  | @ -420,6 +491,10 @@ packages: | |||
|       ms: 2.1.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /delegates@1.0.0: | ||||
|     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /depd@2.0.0: | ||||
|     resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} | ||||
|     engines: {node: '>= 0.8'} | ||||
|  | @ -430,6 +505,11 @@ packages: | |||
|     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} | ||||
|     dev: false | ||||
| 
 | ||||
|   /detect-libc@2.0.2: | ||||
|     resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /diff@4.0.2: | ||||
|     resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} | ||||
|     engines: {node: '>=0.3.1'} | ||||
|  | @ -537,6 +617,13 @@ packages: | |||
|     engines: {node: '>= 0.6'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /fs-minipass@2.1.0: | ||||
|     resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} | ||||
|     engines: {node: '>= 8'} | ||||
|     dependencies: | ||||
|       minipass: 3.3.6 | ||||
|     dev: false | ||||
| 
 | ||||
|   /fs.realpath@1.0.0: | ||||
|     resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} | ||||
|     dev: false | ||||
|  | @ -553,6 +640,21 @@ packages: | |||
|     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /gauge@3.0.2: | ||||
|     resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       aproba: 2.0.0 | ||||
|       color-support: 1.1.3 | ||||
|       console-control-strings: 1.1.0 | ||||
|       has-unicode: 2.0.1 | ||||
|       object-assign: 4.1.1 | ||||
|       signal-exit: 3.0.7 | ||||
|       string-width: 4.2.3 | ||||
|       strip-ansi: 6.0.1 | ||||
|       wide-align: 1.1.5 | ||||
|     dev: false | ||||
| 
 | ||||
|   /get-caller-file@2.0.5: | ||||
|     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} | ||||
|     engines: {node: 6.* || 8.* || >= 10.*} | ||||
|  | @ -574,6 +676,17 @@ packages: | |||
|       is-glob: 4.0.3 | ||||
|     dev: true | ||||
| 
 | ||||
|   /glob@7.2.3: | ||||
|     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} | ||||
|     dependencies: | ||||
|       fs.realpath: 1.0.0 | ||||
|       inflight: 1.0.6 | ||||
|       inherits: 2.0.4 | ||||
|       minimatch: 3.1.2 | ||||
|       once: 1.4.0 | ||||
|       path-is-absolute: 1.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /glob@8.1.0: | ||||
|     resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} | ||||
|     engines: {node: '>=12'} | ||||
|  | @ -605,6 +718,10 @@ packages: | |||
|     engines: {node: '>= 0.4'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /has-unicode@2.0.1: | ||||
|     resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /has@1.0.3: | ||||
|     resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} | ||||
|     engines: {node: '>= 0.4.0'} | ||||
|  | @ -627,6 +744,16 @@ packages: | |||
|       toidentifier: 1.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /https-proxy-agent@5.0.1: | ||||
|     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} | ||||
|     engines: {node: '>= 6'} | ||||
|     dependencies: | ||||
|       agent-base: 6.0.2 | ||||
|       debug: 4.3.4 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /iconv-lite@0.4.24: | ||||
|     resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|  | @ -692,7 +819,13 @@ packages: | |||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       yallist: 4.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /make-dir@3.1.0: | ||||
|     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dependencies: | ||||
|       semver: 6.3.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /make-error@1.3.6: | ||||
|     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} | ||||
|  | @ -733,7 +866,6 @@ packages: | |||
|     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} | ||||
|     dependencies: | ||||
|       brace-expansion: 1.1.11 | ||||
|     dev: true | ||||
| 
 | ||||
|   /minimatch@5.1.6: | ||||
|     resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} | ||||
|  | @ -742,6 +874,32 @@ packages: | |||
|       brace-expansion: 2.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /minipass@3.3.6: | ||||
|     resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} | ||||
|     engines: {node: '>=8'} | ||||
|     dependencies: | ||||
|       yallist: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /minipass@5.0.0: | ||||
|     resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} | ||||
|     engines: {node: '>=8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /minizlib@2.1.2: | ||||
|     resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} | ||||
|     engines: {node: '>= 8'} | ||||
|     dependencies: | ||||
|       minipass: 3.3.6 | ||||
|       yallist: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /mkdirp@1.0.4: | ||||
|     resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /mkdirp@2.1.6: | ||||
|     resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} | ||||
|     engines: {node: '>=10'} | ||||
|  | @ -772,6 +930,22 @@ packages: | |||
|     engines: {node: '>= 0.6'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /node-addon-api@5.1.0: | ||||
|     resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /node-fetch@2.6.12: | ||||
|     resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} | ||||
|     engines: {node: 4.x || >=6.0.0} | ||||
|     peerDependencies: | ||||
|       encoding: ^0.1.0 | ||||
|     peerDependenciesMeta: | ||||
|       encoding: | ||||
|         optional: true | ||||
|     dependencies: | ||||
|       whatwg-url: 5.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /nodemon@3.0.1: | ||||
|     resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==} | ||||
|     engines: {node: '>=10'} | ||||
|  | @ -796,11 +970,28 @@ packages: | |||
|       abbrev: 1.1.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /nopt@5.0.0: | ||||
|     resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} | ||||
|     engines: {node: '>=6'} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       abbrev: 1.1.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /normalize-path@3.0.0: | ||||
|     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /npmlog@5.0.1: | ||||
|     resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} | ||||
|     dependencies: | ||||
|       are-we-there-yet: 2.0.0 | ||||
|       console-control-strings: 1.1.0 | ||||
|       gauge: 3.0.2 | ||||
|       set-blocking: 2.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /object-assign@4.1.1: | ||||
|     resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|  | @ -846,6 +1037,11 @@ packages: | |||
|     engines: {node: '>= 0.8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /path-is-absolute@1.0.1: | ||||
|     resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /path-to-regexp@0.1.7: | ||||
|     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} | ||||
|     dev: false | ||||
|  | @ -981,6 +1177,15 @@ packages: | |||
|       unpipe: 1.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /readable-stream@3.6.2: | ||||
|     resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} | ||||
|     engines: {node: '>= 6'} | ||||
|     dependencies: | ||||
|       inherits: 2.0.4 | ||||
|       string_decoder: 1.3.0 | ||||
|       util-deprecate: 1.0.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /readdirp@3.6.0: | ||||
|     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} | ||||
|     engines: {node: '>=8.10.0'} | ||||
|  | @ -1001,6 +1206,13 @@ packages: | |||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /rimraf@3.0.2: | ||||
|     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       glob: 7.2.3 | ||||
|     dev: false | ||||
| 
 | ||||
|   /safe-buffer@5.2.1: | ||||
|     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} | ||||
|     dev: false | ||||
|  | @ -1009,13 +1221,17 @@ packages: | |||
|     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /semver@6.3.1: | ||||
|     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} | ||||
|     hasBin: true | ||||
|     dev: false | ||||
| 
 | ||||
|   /semver@7.5.4: | ||||
|     resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} | ||||
|     engines: {node: '>=10'} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       lru-cache: 6.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /send@0.18.0: | ||||
|     resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} | ||||
|  | @ -1050,6 +1266,10 @@ packages: | |||
|       - supports-color | ||||
|     dev: false | ||||
| 
 | ||||
|   /set-blocking@2.0.0: | ||||
|     resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /setprototypeof@1.2.0: | ||||
|     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} | ||||
|     dev: false | ||||
|  | @ -1070,6 +1290,10 @@ packages: | |||
|       object-inspect: 1.12.3 | ||||
|     dev: false | ||||
| 
 | ||||
|   /signal-exit@3.0.7: | ||||
|     resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /simple-update-notifier@2.0.0: | ||||
|     resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} | ||||
|     engines: {node: '>=10'} | ||||
|  | @ -1096,6 +1320,12 @@ packages: | |||
|       strip-ansi: 6.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /string_decoder@1.3.0: | ||||
|     resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} | ||||
|     dependencies: | ||||
|       safe-buffer: 5.2.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /strip-ansi@6.0.1: | ||||
|     resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} | ||||
|     engines: {node: '>=8'} | ||||
|  | @ -1117,6 +1347,18 @@ packages: | |||
|       has-flag: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /tar@6.1.15: | ||||
|     resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} | ||||
|     engines: {node: '>=10'} | ||||
|     dependencies: | ||||
|       chownr: 2.0.0 | ||||
|       fs-minipass: 2.1.0 | ||||
|       minipass: 5.0.0 | ||||
|       minizlib: 2.1.2 | ||||
|       mkdirp: 1.0.4 | ||||
|       yallist: 4.0.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /thenify-all@1.6.0: | ||||
|     resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} | ||||
|     engines: {node: '>=0.8'} | ||||
|  | @ -1149,6 +1391,10 @@ packages: | |||
|       nopt: 1.0.10 | ||||
|     dev: true | ||||
| 
 | ||||
|   /tr46@0.0.3: | ||||
|     resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /ts-node@10.9.1(@types/node@20.4.2)(typescript@5.1.6): | ||||
|     resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} | ||||
|     hasBin: true | ||||
|  | @ -1294,6 +1540,10 @@ packages: | |||
|     engines: {node: '>= 0.8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /util-deprecate@1.0.2: | ||||
|     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /utils-merge@1.0.1: | ||||
|     resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} | ||||
|     engines: {node: '>= 0.4.0'} | ||||
|  | @ -1312,6 +1562,23 @@ packages: | |||
|     engines: {node: '>= 0.8'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /webidl-conversions@3.0.1: | ||||
|     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /whatwg-url@5.0.0: | ||||
|     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} | ||||
|     dependencies: | ||||
|       tr46: 0.0.3 | ||||
|       webidl-conversions: 3.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /wide-align@1.1.5: | ||||
|     resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} | ||||
|     dependencies: | ||||
|       string-width: 4.2.3 | ||||
|     dev: false | ||||
| 
 | ||||
|   /wrap-ansi@7.0.0: | ||||
|     resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} | ||||
|     engines: {node: '>=10'} | ||||
|  | @ -1337,7 +1604,6 @@ packages: | |||
| 
 | ||||
|   /yallist@4.0.0: | ||||
|     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /yargs-parser@20.2.9: | ||||
|     resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} | ||||
|  |  | |||
							
								
								
									
										29
									
								
								src/db/account.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/db/account.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| import { ulid } from "ulid"; | ||||
| import { hash } from "argon2"; | ||||
| 
 | ||||
| import { Account } from "./entities/account.js"; | ||||
| import MercuryDataSource from "./index.js"; | ||||
| 
 | ||||
| const missingAuthData = new Error("missing auth data for local user"); | ||||
| 
 | ||||
| /** Creates a new account. */ | ||||
| export async function createAccount( | ||||
|   username: string, | ||||
|   host: string | null, | ||||
|   auth: { email: string; password: string } | null | ||||
| ) { | ||||
|   if (auth && (!auth.email || !auth.password)) throw missingAuthData; | ||||
| 
 | ||||
|   const account = new Account(); | ||||
|   account.id = ulid(); | ||||
|   account.username = username; | ||||
|   account.host = host; | ||||
|   if (auth) { | ||||
|     account.email = auth.email; | ||||
|     account.password = await hash(auth.password); | ||||
|   } | ||||
| 
 | ||||
|   await MercuryDataSource.getRepository(Account).save(account); | ||||
| 
 | ||||
|   return account; | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/db/blog.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/db/blog.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| import { ulid } from "ulid"; | ||||
| 
 | ||||
| import { Account } from "./entities/account.js"; | ||||
| import { Blog } from "./entities/blog.js"; | ||||
| import { generateKeyPair } from "./util/rsa.js"; | ||||
| import MercuryDataSource from "./index.js"; | ||||
| 
 | ||||
| export const notLocalAccount = new Error("account is not local"); | ||||
| 
 | ||||
| /** Create a local blog. Throws an error if the given account is not a local account. */ | ||||
| export async function createLocalBlog(account: Account, name: string) { | ||||
|   if (account.host) throw notLocalAccount; | ||||
| 
 | ||||
|   const keyPair = await generateKeyPair(); | ||||
| 
 | ||||
|   const blog = new Blog(); | ||||
|   blog.id = ulid(); | ||||
|   blog.username = name; | ||||
|   blog.host = account.host; | ||||
|   blog.account = account; | ||||
|   blog.publicKey = keyPair.publicKey; | ||||
|   blog.privateKey = keyPair.privateKey; | ||||
| 
 | ||||
|   await MercuryDataSource.getRepository(Blog).save(blog); | ||||
| 
 | ||||
|   return blog; | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/db/util/rsa.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/db/util/rsa.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| import * as crypto from "node:crypto"; | ||||
| import * as util from "node:util"; | ||||
| 
 | ||||
| const generate = util.promisify(crypto.generateKeyPair); | ||||
| 
 | ||||
| export async function generateKeyPair() { | ||||
|   return await generate("rsa", { | ||||
|     modulusLength: 2048, | ||||
|     publicKeyEncoding: { | ||||
|       type: "spki", | ||||
|       format: "pem", | ||||
|     }, | ||||
|     privateKeyEncoding: { | ||||
|       type: "pkcs8", | ||||
|       format: "pem", | ||||
|       cipher: undefined, | ||||
|       passphrase: undefined, | ||||
|     }, | ||||
|   }); | ||||
| } | ||||
							
								
								
									
										17
									
								
								src/seed.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/seed.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| import MercuryDataSource from "./db/index.js"; | ||||
| import { createAccount } from "./db/account.js"; | ||||
| import { createLocalBlog } from "./db/blog.js"; | ||||
| import log from "./log.js"; | ||||
| 
 | ||||
| // This just creates a single local user (that can't log in) called "testington", and one blog called "testington".
 | ||||
| // This is not usable for anything more than testing a handful of endpoints, TODO: expand this
 | ||||
| async function seed() { | ||||
|   await MercuryDataSource.initialize(); | ||||
| 
 | ||||
|   const account = await createAccount("testington", null, null); | ||||
|   const blog = await createLocalBlog(account, "testington"); | ||||
| 
 | ||||
|   log.info("Created account %s with blog %s", account.id, blog.id); | ||||
| } | ||||
| 
 | ||||
| seed(); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue