This commit is contained in:
Michael Zhang 2023-03-29 22:30:17 -05:00
parent 917fb469af
commit f4b6af771c
10 changed files with 10257 additions and 515 deletions

1
.tokeignore Normal file
View file

@ -0,0 +1 @@
package-lock.json

View file

@ -4,6 +4,6 @@ export default class {
constructor() {}
static registerHooks(ct: HookContext) {
ct.addSensitivePattern(//);
ct.addSensitivePattern(/ /);
}
}

View file

@ -1 +0,0 @@
{}

465
deno.lock
View file

@ -1,465 +0,0 @@
{
"version": "2",
"remote": {},
"npm": {
"specifiers": {
"@prisma/client@^4.11.0": "@prisma/client@4.11.0_prisma@4.11.0",
"@types/express@^4.17": "@types/express@4.17.17",
"express@4.18.2": "express@4.18.2",
"prisma@^4.11.0": "prisma@4.11.0",
"typescript@^5.0.2": "typescript@5.0.2",
"vm2@^3.9.14": "vm2@3.9.14",
"wasmoon@1.15.0": "wasmoon@1.15.0"
},
"packages": {
"@prisma/client@4.11.0_prisma@4.11.0": {
"integrity": "sha512-0INHYkQIqgAjrt7NzhYpeDQi8x3Nvylc2uDngKyFDDj1tTRQ4uV1HnVmd1sQEraeVAN63SOK0dgCKQHlvjL0KA==",
"dependencies": {
"@prisma/engines-version": "@prisma/engines-version@4.11.0-57.8fde8fef4033376662cad983758335009d522acb",
"prisma": "prisma@4.11.0"
}
},
"@prisma/engines-version@4.11.0-57.8fde8fef4033376662cad983758335009d522acb": {
"integrity": "sha512-3Vd8Qq06d5xD8Ch5WauWcUUrsVPdMC6Ge8ILji8RFfyhUpqon6qSyGM0apvr1O8n8qH8cKkEFqRPsYjuz5r83g==",
"dependencies": {}
},
"@prisma/engines@4.11.0": {
"integrity": "sha512-0AEBi2HXGV02cf6ASsBPhfsVIbVSDC9nbQed4iiY5eHttW9ZtMxHThuKZE1pnESbr8HRdgmFSa/Kn4OSNYuibg==",
"dependencies": {}
},
"@types/body-parser@1.19.2": {
"integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
"dependencies": {
"@types/connect": "@types/connect@3.4.35",
"@types/node": "@types/node@18.15.5"
}
},
"@types/connect@3.4.35": {
"integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
"dependencies": {
"@types/node": "@types/node@18.15.5"
}
},
"@types/emscripten@1.39.5": {
"integrity": "sha512-DIOOg+POSrYl+OlNRHQuIEqCd8DCtynG57H862UCce16nXJX7J8eWxNGgOcf8Eyge8zXeSs27mz1UcFu8L/L7g==",
"dependencies": {}
},
"@types/express-serve-static-core@4.17.33": {
"integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==",
"dependencies": {
"@types/node": "@types/node@18.15.5",
"@types/qs": "@types/qs@6.9.7",
"@types/range-parser": "@types/range-parser@1.2.4"
}
},
"@types/express@4.17.17": {
"integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
"dependencies": {
"@types/body-parser": "@types/body-parser@1.19.2",
"@types/express-serve-static-core": "@types/express-serve-static-core@4.17.33",
"@types/qs": "@types/qs@6.9.7",
"@types/serve-static": "@types/serve-static@1.15.1"
}
},
"@types/mime@3.0.1": {
"integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==",
"dependencies": {}
},
"@types/node@18.15.5": {
"integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==",
"dependencies": {}
},
"@types/qs@6.9.7": {
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
"dependencies": {}
},
"@types/range-parser@1.2.4": {
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
"dependencies": {}
},
"@types/serve-static@1.15.1": {
"integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==",
"dependencies": {
"@types/mime": "@types/mime@3.0.1",
"@types/node": "@types/node@18.15.5"
}
},
"accepts@1.3.8": {
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dependencies": {
"mime-types": "mime-types@2.1.35",
"negotiator": "negotiator@0.6.3"
}
},
"acorn-walk@8.2.0": {
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dependencies": {}
},
"acorn@8.8.2": {
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
"dependencies": {}
},
"array-flatten@1.1.1": {
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"dependencies": {}
},
"body-parser@1.20.1": {
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"dependencies": {
"bytes": "bytes@3.1.2",
"content-type": "content-type@1.0.5",
"debug": "debug@2.6.9",
"depd": "depd@2.0.0",
"destroy": "destroy@1.2.0",
"http-errors": "http-errors@2.0.0",
"iconv-lite": "iconv-lite@0.4.24",
"on-finished": "on-finished@2.4.1",
"qs": "qs@6.11.0",
"raw-body": "raw-body@2.5.1",
"type-is": "type-is@1.6.18",
"unpipe": "unpipe@1.0.0"
}
},
"bytes@3.1.2": {
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"dependencies": {}
},
"call-bind@1.0.2": {
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dependencies": {
"function-bind": "function-bind@1.1.1",
"get-intrinsic": "get-intrinsic@1.2.0"
}
},
"content-disposition@0.5.4": {
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dependencies": {
"safe-buffer": "safe-buffer@5.2.1"
}
},
"content-type@1.0.5": {
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"dependencies": {}
},
"cookie-signature@1.0.6": {
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"dependencies": {}
},
"cookie@0.5.0": {
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"dependencies": {}
},
"debug@2.6.9": {
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "ms@2.0.0"
}
},
"depd@2.0.0": {
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"dependencies": {}
},
"destroy@1.2.0": {
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"dependencies": {}
},
"ee-first@1.1.1": {
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
"dependencies": {}
},
"encodeurl@1.0.2": {
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"dependencies": {}
},
"escape-html@1.0.3": {
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
"dependencies": {}
},
"etag@1.8.1": {
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"dependencies": {}
},
"express@4.18.2": {
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"dependencies": {
"accepts": "accepts@1.3.8",
"array-flatten": "array-flatten@1.1.1",
"body-parser": "body-parser@1.20.1",
"content-disposition": "content-disposition@0.5.4",
"content-type": "content-type@1.0.5",
"cookie": "cookie@0.5.0",
"cookie-signature": "cookie-signature@1.0.6",
"debug": "debug@2.6.9",
"depd": "depd@2.0.0",
"encodeurl": "encodeurl@1.0.2",
"escape-html": "escape-html@1.0.3",
"etag": "etag@1.8.1",
"finalhandler": "finalhandler@1.2.0",
"fresh": "fresh@0.5.2",
"http-errors": "http-errors@2.0.0",
"merge-descriptors": "merge-descriptors@1.0.1",
"methods": "methods@1.1.2",
"on-finished": "on-finished@2.4.1",
"parseurl": "parseurl@1.3.3",
"path-to-regexp": "path-to-regexp@0.1.7",
"proxy-addr": "proxy-addr@2.0.7",
"qs": "qs@6.11.0",
"range-parser": "range-parser@1.2.1",
"safe-buffer": "safe-buffer@5.2.1",
"send": "send@0.18.0",
"serve-static": "serve-static@1.15.0",
"setprototypeof": "setprototypeof@1.2.0",
"statuses": "statuses@2.0.1",
"type-is": "type-is@1.6.18",
"utils-merge": "utils-merge@1.0.1",
"vary": "vary@1.1.2"
}
},
"finalhandler@1.2.0": {
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dependencies": {
"debug": "debug@2.6.9",
"encodeurl": "encodeurl@1.0.2",
"escape-html": "escape-html@1.0.3",
"on-finished": "on-finished@2.4.1",
"parseurl": "parseurl@1.3.3",
"statuses": "statuses@2.0.1",
"unpipe": "unpipe@1.0.0"
}
},
"forwarded@0.2.0": {
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"dependencies": {}
},
"fresh@0.5.2": {
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"dependencies": {}
},
"function-bind@1.1.1": {
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dependencies": {}
},
"get-intrinsic@1.2.0": {
"integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dependencies": {
"function-bind": "function-bind@1.1.1",
"has": "has@1.0.3",
"has-symbols": "has-symbols@1.0.3"
}
},
"has-symbols@1.0.3": {
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dependencies": {}
},
"has@1.0.3": {
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dependencies": {
"function-bind": "function-bind@1.1.1"
}
},
"http-errors@2.0.0": {
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dependencies": {
"depd": "depd@2.0.0",
"inherits": "inherits@2.0.4",
"setprototypeof": "setprototypeof@1.2.0",
"statuses": "statuses@2.0.1",
"toidentifier": "toidentifier@1.0.1"
}
},
"iconv-lite@0.4.24": {
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dependencies": {
"safer-buffer": "safer-buffer@2.1.2"
}
},
"inherits@2.0.4": {
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dependencies": {}
},
"ipaddr.js@1.9.1": {
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"dependencies": {}
},
"media-typer@0.3.0": {
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
"dependencies": {}
},
"merge-descriptors@1.0.1": {
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
"dependencies": {}
},
"methods@1.1.2": {
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"dependencies": {}
},
"mime-db@1.52.0": {
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dependencies": {}
},
"mime-types@2.1.35": {
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
"mime-db": "mime-db@1.52.0"
}
},
"mime@1.6.0": {
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dependencies": {}
},
"ms@2.0.0": {
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dependencies": {}
},
"ms@2.1.3": {
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dependencies": {}
},
"negotiator@0.6.3": {
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"dependencies": {}
},
"object-inspect@1.12.3": {
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"dependencies": {}
},
"on-finished@2.4.1": {
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dependencies": {
"ee-first": "ee-first@1.1.1"
}
},
"parseurl@1.3.3": {
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dependencies": {}
},
"path-to-regexp@0.1.7": {
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dependencies": {}
},
"prisma@4.11.0": {
"integrity": "sha512-4zZmBXssPUEiX+GeL0MUq/Yyie4ltiKmGu7jCJFnYMamNrrulTBc+D+QwAQSJ01tyzeGHlD13kOnqPwRipnlNw==",
"dependencies": {
"@prisma/engines": "@prisma/engines@4.11.0"
}
},
"proxy-addr@2.0.7": {
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dependencies": {
"forwarded": "forwarded@0.2.0",
"ipaddr.js": "ipaddr.js@1.9.1"
}
},
"qs@6.11.0": {
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "side-channel@1.0.4"
}
},
"range-parser@1.2.1": {
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"dependencies": {}
},
"raw-body@2.5.1": {
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dependencies": {
"bytes": "bytes@3.1.2",
"http-errors": "http-errors@2.0.0",
"iconv-lite": "iconv-lite@0.4.24",
"unpipe": "unpipe@1.0.0"
}
},
"safe-buffer@5.2.1": {
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dependencies": {}
},
"safer-buffer@2.1.2": {
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dependencies": {}
},
"send@0.18.0": {
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dependencies": {
"debug": "debug@2.6.9",
"depd": "depd@2.0.0",
"destroy": "destroy@1.2.0",
"encodeurl": "encodeurl@1.0.2",
"escape-html": "escape-html@1.0.3",
"etag": "etag@1.8.1",
"fresh": "fresh@0.5.2",
"http-errors": "http-errors@2.0.0",
"mime": "mime@1.6.0",
"ms": "ms@2.1.3",
"on-finished": "on-finished@2.4.1",
"range-parser": "range-parser@1.2.1",
"statuses": "statuses@2.0.1"
}
},
"serve-static@1.15.0": {
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dependencies": {
"encodeurl": "encodeurl@1.0.2",
"escape-html": "escape-html@1.0.3",
"parseurl": "parseurl@1.3.3",
"send": "send@0.18.0"
}
},
"setprototypeof@1.2.0": {
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dependencies": {}
},
"side-channel@1.0.4": {
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dependencies": {
"call-bind": "call-bind@1.0.2",
"get-intrinsic": "get-intrinsic@1.2.0",
"object-inspect": "object-inspect@1.12.3"
}
},
"statuses@2.0.1": {
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dependencies": {}
},
"toidentifier@1.0.1": {
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dependencies": {}
},
"type-is@1.6.18": {
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dependencies": {
"media-typer": "media-typer@0.3.0",
"mime-types": "mime-types@2.1.35"
}
},
"typescript@5.0.2": {
"integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==",
"dependencies": {}
},
"unpipe@1.0.0": {
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"dependencies": {}
},
"utils-merge@1.0.1": {
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"dependencies": {}
},
"vary@1.1.2": {
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"dependencies": {}
},
"vm2@3.9.14": {
"integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==",
"dependencies": {
"acorn": "acorn@8.8.2",
"acorn-walk": "acorn-walk@8.2.0"
}
},
"wasmoon@1.15.0": {
"integrity": "sha512-QU33AnnMTgbcGOJLzcqM2UBcSksmLvwkvB/Bcgkf5hS+EFoHxB6nyiQiDG+ZnALN8mn/ezeeMSm6eY1zs0cKTg==",
"dependencies": {
"@types/emscripten": "@types/emscripten@1.39.5"
}
}
}
}
}

View file

@ -1,21 +1,21 @@
- CLI API
- `mznotes install` : Install a script into the database
- `mznotes show` : Show the information about a particular node, by ID
- Database of nodes + code
- Code
- Code is all interface-based. Interface implementations give specific ways
behaviors are implemented
- Standard interfaces:
- Indexed
- Node definition
```typescript
type Node = {
metadata: KVStore,
@ -23,87 +23,85 @@
edges: Set<(EdgeType, Edge)>,
}
```
- Within the metadata kv store, keys are namespaced, according to the
application name. Application names must be registered ahead of time
- Nodes implement interfaces, the code of which is fetched from the internet
and validated
- Nodes are namespaced, although namespacing isn't the primary hierarchy
protocol.
- This is needed because the database itself has a privileged namespace
- The privileged namespace is for keeping track of database state, for
example which scripts are trusted
- Database service:
- IFTTT Events
- Local vs. distributed IFTTT events?
- Local means that ur particular device is repsonsible for running it
- Distributed means any device can consume the event???
- is this even a good idea? Maybe just have one dedicated worker
device. For example, may not want to run certain automation tasks
on phone, while others may only be able to be run on phone
- Cron tasks
- Sync protocol:
- After a modification, the modification gets written to a queue
- CRDT?
- Other privileged concepts:
- User: a pub/priv key pair
- Sample apps
- Content / blob storage
- Exposed interfaces
- `Content`
- `upload() -> Writer`
- `get(node_id : NodeId) -> Reader`
- `Writer`
- `next_chunk(Vec<u8>)`
- `Reader`
- `next_chunk() -> Vec<u8>`
- Personal journaling (like Logseq)
- Weight / fitness tracking
- Calendar app (store events)
- Git app (store code)
- File backup
- Chat / Mail?
- Photo viewer + indexing using ML models for face detection / keywords
- Not sure yet:
- Automatic sharing of database nodes? This seems like a bad idea for
multiple reasons. Maybe better to just have a specific app for
doing permission models
- Other concerns
- Local protection using libsecret?
- Migrations?
- If an application needs to migrate its data format, should we formalize
this?
- Data migrations that don't need to create / delete nodes, only metadata
- Have the frontend also shipped with the backend?
- Subset of React components to typecheck against

View file

@ -12,4 +12,5 @@
# Core Library Developers
- [Notes](./lib/notes.md)
- [Library API Reference](./lib/api_reference.md)

10
docs/src/lib/notes.md Normal file
View file

@ -0,0 +1,10 @@
# Notes
### Pattern types
- Ensures
- An "ensures" hook runs whenever a particular metadata key is created, or its
value changed.
- Examples:
-

10197
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -13,12 +13,13 @@
"devDependencies": {
"@types/express": "^4.17.17",
"json-schema-static-docs": "^0.23.0",
"nativescript": "^8.5.1",
"prisma": "^4.11.0",
"ts-node": "^10.9.1",
"typescript": "^5.0.2",
"wetzel": "^0.2.3",
"vite": "^4.2.1",
"vite-plugin-solid": "^2.6.1"
"vite-plugin-solid": "^2.6.1",
"wetzel": "^0.2.3"
},
"dependencies": {
"@prisma/client": "^4.11.0",

View file

@ -13,22 +13,19 @@ model Node {
label String?
implements NodeImplements[]
fromNodes Graph[] @relation(name: "fromNode")
toNodes Graph[] @relation(name: "toNode")
fromNodes Edge[] @relation(name: "fromNode")
toNodes Edge[] @relation(name: "toNode")
metadata NodeMeta[]
}
model Edge {
id String @id @default(uuid())
}
model Interface {
id String @id @default(uuid())
implementors NodeImplements[]
}
model Graph {
model Edge {
id String @id @default(uuid())
label String?
fromId String
@ -37,7 +34,7 @@ model Graph {
toId String
toNode Node @relation(name: "toNode", fields: [toId], references: [id])
@@id([fromId, toId])
@@unique([fromId, toId])
}
model NodeMeta {
@ -80,6 +77,9 @@ model Patterns {
id String @id @default(uuid())
pattern String
/// Pattern type, see docs for details
type String
appId String
app App @relation(fields: [appId], references: [id])