├── .DS_Store ├── .gitignore ├── core ├── dist │ └── index.js ├── docs │ └── telegraf.txt ├── package-lock.json ├── package.json └── src │ ├── ai-chat.js │ ├── friday-nodejs.js │ ├── index.js │ └── utils.js ├── projects ├── .gitignore └── .gitkeep ├── readme.md ├── screenshot.png └── web ├── .DS_Store ├── backend ├── .env.example ├── dist │ └── index.js ├── package-lock.json ├── package.json └── src │ └── index.js └── frontend ├── .eslintrc.cjs ├── .gitignore ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── public └── vite.svg ├── src ├── App.jsx ├── assets │ └── react.svg ├── main.jsx ├── pages │ └── generator │ │ ├── hooks │ │ └── friday.js │ │ ├── index.jsx │ │ └── style.css └── shared │ └── styles │ └── globals.css ├── tailwind.config.js └── vite.config.js /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amirrezasalimi/friday/4e82c011f7b10f76e22d512de478c21ce8f8913f/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | prompts 3 | projects/last 4 | .env 5 | web/backend/dist 6 | web/backend/.env -------------------------------------------------------------------------------- /core/docs/telegraf.txt: -------------------------------------------------------------------------------- 1 | #title 2 | telegrafjs: Telegram Bot library for nodejs 3 | 4 | 5 | #docs 6 | 7 | const { Telegraf } = require('telegraf'); 8 | const { message } = require('telegraf/filters'); 9 | 10 | --1 11 | const bot = new Telegraf(process.env.BOT_TOKEN); 12 | bot.start((ctx) => ctx.reply('Welcome')); 13 | bot.help((ctx) => ctx.reply('Send me a sticker')); 14 | bot.on(message('sticker'), (ctx) => ctx.reply('👍')); 15 | bot.on(message('text'), (ctx) => ctx.reply('')); // for any text message coming 16 | bot.hears('hi', (ctx) => ctx.reply('Hey there')); 17 | bot.launch(); 18 | 19 | --2 20 | const { Telegraf } = require('telegraf'); 21 | 22 | const bot = new Telegraf(process.env.BOT_TOKEN); 23 | bot.command('oldschool', (ctx) => ctx.reply('Hello')); 24 | bot.command('hipster', Telegraf.reply('λ')); 25 | bot.launch(); 26 | 27 | -- for send media 28 | import { Input } from 'telegraf'; 29 | 30 | bot.on('message', async (ctx) => { 31 | // resend existing file by file_id 32 | await ctx.replyWithSticker('123123jkbhj6b'); 33 | 34 | // send file 35 | await ctx.replyWithVideo(Input.fromLocalFile('/path/to/video.mp4')); 36 | 37 | // send stream 38 | await ctx.replyWithVideo(Input.fromReadableStream(fs.createReadStream('/path/to/video.mp4'))); 39 | 40 | // send buffer 41 | await ctx.replyWithVoice(Input.fromBuffer(Buffer.alloc())); 42 | 43 | // send url via Telegram server 44 | await ctx.replyWithPhoto(Input.fromURL('https://picsum.photos/200/300/')); 45 | 46 | // pipe url content 47 | await ctx.replyWithPhoto(Input.fromURLStream('https://picsum.photos/200/300/?random', 'kitten.jpg')); 48 | }) 49 | 50 | 51 | note: the bot.launch(); alwayse should be in end of codes if its just telegram bot app 52 | if its a expressjs server or somthing similar , so dont need to use that -------------------------------------------------------------------------------- /core/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@friday/core", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@friday/core", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "esbuild": "^0.17.19", 13 | "fs": "^0.0.1-security", 14 | "node-fetch": "^3.3.1" 15 | } 16 | }, 17 | "node_modules/@esbuild/android-arm": { 18 | "version": "0.17.19", 19 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 20 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 21 | "cpu": [ 22 | "arm" 23 | ], 24 | "optional": true, 25 | "os": [ 26 | "android" 27 | ], 28 | "engines": { 29 | "node": ">=12" 30 | } 31 | }, 32 | "node_modules/@esbuild/android-arm64": { 33 | "version": "0.17.19", 34 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 35 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 36 | "cpu": [ 37 | "arm64" 38 | ], 39 | "optional": true, 40 | "os": [ 41 | "android" 42 | ], 43 | "engines": { 44 | "node": ">=12" 45 | } 46 | }, 47 | "node_modules/@esbuild/android-x64": { 48 | "version": "0.17.19", 49 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 50 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 51 | "cpu": [ 52 | "x64" 53 | ], 54 | "optional": true, 55 | "os": [ 56 | "android" 57 | ], 58 | "engines": { 59 | "node": ">=12" 60 | } 61 | }, 62 | "node_modules/@esbuild/darwin-arm64": { 63 | "version": "0.17.19", 64 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 65 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 66 | "cpu": [ 67 | "arm64" 68 | ], 69 | "optional": true, 70 | "os": [ 71 | "darwin" 72 | ], 73 | "engines": { 74 | "node": ">=12" 75 | } 76 | }, 77 | "node_modules/@esbuild/darwin-x64": { 78 | "version": "0.17.19", 79 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 80 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 81 | "cpu": [ 82 | "x64" 83 | ], 84 | "optional": true, 85 | "os": [ 86 | "darwin" 87 | ], 88 | "engines": { 89 | "node": ">=12" 90 | } 91 | }, 92 | "node_modules/@esbuild/freebsd-arm64": { 93 | "version": "0.17.19", 94 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 95 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 96 | "cpu": [ 97 | "arm64" 98 | ], 99 | "optional": true, 100 | "os": [ 101 | "freebsd" 102 | ], 103 | "engines": { 104 | "node": ">=12" 105 | } 106 | }, 107 | "node_modules/@esbuild/freebsd-x64": { 108 | "version": "0.17.19", 109 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 110 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 111 | "cpu": [ 112 | "x64" 113 | ], 114 | "optional": true, 115 | "os": [ 116 | "freebsd" 117 | ], 118 | "engines": { 119 | "node": ">=12" 120 | } 121 | }, 122 | "node_modules/@esbuild/linux-arm": { 123 | "version": "0.17.19", 124 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 125 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 126 | "cpu": [ 127 | "arm" 128 | ], 129 | "optional": true, 130 | "os": [ 131 | "linux" 132 | ], 133 | "engines": { 134 | "node": ">=12" 135 | } 136 | }, 137 | "node_modules/@esbuild/linux-arm64": { 138 | "version": "0.17.19", 139 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 140 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 141 | "cpu": [ 142 | "arm64" 143 | ], 144 | "optional": true, 145 | "os": [ 146 | "linux" 147 | ], 148 | "engines": { 149 | "node": ">=12" 150 | } 151 | }, 152 | "node_modules/@esbuild/linux-ia32": { 153 | "version": "0.17.19", 154 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 155 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 156 | "cpu": [ 157 | "ia32" 158 | ], 159 | "optional": true, 160 | "os": [ 161 | "linux" 162 | ], 163 | "engines": { 164 | "node": ">=12" 165 | } 166 | }, 167 | "node_modules/@esbuild/linux-loong64": { 168 | "version": "0.17.19", 169 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 170 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 171 | "cpu": [ 172 | "loong64" 173 | ], 174 | "optional": true, 175 | "os": [ 176 | "linux" 177 | ], 178 | "engines": { 179 | "node": ">=12" 180 | } 181 | }, 182 | "node_modules/@esbuild/linux-mips64el": { 183 | "version": "0.17.19", 184 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 185 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 186 | "cpu": [ 187 | "mips64el" 188 | ], 189 | "optional": true, 190 | "os": [ 191 | "linux" 192 | ], 193 | "engines": { 194 | "node": ">=12" 195 | } 196 | }, 197 | "node_modules/@esbuild/linux-ppc64": { 198 | "version": "0.17.19", 199 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 200 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 201 | "cpu": [ 202 | "ppc64" 203 | ], 204 | "optional": true, 205 | "os": [ 206 | "linux" 207 | ], 208 | "engines": { 209 | "node": ">=12" 210 | } 211 | }, 212 | "node_modules/@esbuild/linux-riscv64": { 213 | "version": "0.17.19", 214 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 215 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 216 | "cpu": [ 217 | "riscv64" 218 | ], 219 | "optional": true, 220 | "os": [ 221 | "linux" 222 | ], 223 | "engines": { 224 | "node": ">=12" 225 | } 226 | }, 227 | "node_modules/@esbuild/linux-s390x": { 228 | "version": "0.17.19", 229 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 230 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 231 | "cpu": [ 232 | "s390x" 233 | ], 234 | "optional": true, 235 | "os": [ 236 | "linux" 237 | ], 238 | "engines": { 239 | "node": ">=12" 240 | } 241 | }, 242 | "node_modules/@esbuild/linux-x64": { 243 | "version": "0.17.19", 244 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 245 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 246 | "cpu": [ 247 | "x64" 248 | ], 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/netbsd-x64": { 258 | "version": "0.17.19", 259 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 260 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 261 | "cpu": [ 262 | "x64" 263 | ], 264 | "optional": true, 265 | "os": [ 266 | "netbsd" 267 | ], 268 | "engines": { 269 | "node": ">=12" 270 | } 271 | }, 272 | "node_modules/@esbuild/openbsd-x64": { 273 | "version": "0.17.19", 274 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 275 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 276 | "cpu": [ 277 | "x64" 278 | ], 279 | "optional": true, 280 | "os": [ 281 | "openbsd" 282 | ], 283 | "engines": { 284 | "node": ">=12" 285 | } 286 | }, 287 | "node_modules/@esbuild/sunos-x64": { 288 | "version": "0.17.19", 289 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 290 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 291 | "cpu": [ 292 | "x64" 293 | ], 294 | "optional": true, 295 | "os": [ 296 | "sunos" 297 | ], 298 | "engines": { 299 | "node": ">=12" 300 | } 301 | }, 302 | "node_modules/@esbuild/win32-arm64": { 303 | "version": "0.17.19", 304 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 305 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 306 | "cpu": [ 307 | "arm64" 308 | ], 309 | "optional": true, 310 | "os": [ 311 | "win32" 312 | ], 313 | "engines": { 314 | "node": ">=12" 315 | } 316 | }, 317 | "node_modules/@esbuild/win32-ia32": { 318 | "version": "0.17.19", 319 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 320 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 321 | "cpu": [ 322 | "ia32" 323 | ], 324 | "optional": true, 325 | "os": [ 326 | "win32" 327 | ], 328 | "engines": { 329 | "node": ">=12" 330 | } 331 | }, 332 | "node_modules/@esbuild/win32-x64": { 333 | "version": "0.17.19", 334 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 335 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 336 | "cpu": [ 337 | "x64" 338 | ], 339 | "optional": true, 340 | "os": [ 341 | "win32" 342 | ], 343 | "engines": { 344 | "node": ">=12" 345 | } 346 | }, 347 | "node_modules/data-uri-to-buffer": { 348 | "version": "4.0.1", 349 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 350 | "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", 351 | "engines": { 352 | "node": ">= 12" 353 | } 354 | }, 355 | "node_modules/esbuild": { 356 | "version": "0.17.19", 357 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 358 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 359 | "hasInstallScript": true, 360 | "bin": { 361 | "esbuild": "bin/esbuild" 362 | }, 363 | "engines": { 364 | "node": ">=12" 365 | }, 366 | "optionalDependencies": { 367 | "@esbuild/android-arm": "0.17.19", 368 | "@esbuild/android-arm64": "0.17.19", 369 | "@esbuild/android-x64": "0.17.19", 370 | "@esbuild/darwin-arm64": "0.17.19", 371 | "@esbuild/darwin-x64": "0.17.19", 372 | "@esbuild/freebsd-arm64": "0.17.19", 373 | "@esbuild/freebsd-x64": "0.17.19", 374 | "@esbuild/linux-arm": "0.17.19", 375 | "@esbuild/linux-arm64": "0.17.19", 376 | "@esbuild/linux-ia32": "0.17.19", 377 | "@esbuild/linux-loong64": "0.17.19", 378 | "@esbuild/linux-mips64el": "0.17.19", 379 | "@esbuild/linux-ppc64": "0.17.19", 380 | "@esbuild/linux-riscv64": "0.17.19", 381 | "@esbuild/linux-s390x": "0.17.19", 382 | "@esbuild/linux-x64": "0.17.19", 383 | "@esbuild/netbsd-x64": "0.17.19", 384 | "@esbuild/openbsd-x64": "0.17.19", 385 | "@esbuild/sunos-x64": "0.17.19", 386 | "@esbuild/win32-arm64": "0.17.19", 387 | "@esbuild/win32-ia32": "0.17.19", 388 | "@esbuild/win32-x64": "0.17.19" 389 | } 390 | }, 391 | "node_modules/fetch-blob": { 392 | "version": "3.2.0", 393 | "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 394 | "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 395 | "funding": [ 396 | { 397 | "type": "github", 398 | "url": "https://github.com/sponsors/jimmywarting" 399 | }, 400 | { 401 | "type": "paypal", 402 | "url": "https://paypal.me/jimmywarting" 403 | } 404 | ], 405 | "dependencies": { 406 | "node-domexception": "^1.0.0", 407 | "web-streams-polyfill": "^3.0.3" 408 | }, 409 | "engines": { 410 | "node": "^12.20 || >= 14.13" 411 | } 412 | }, 413 | "node_modules/formdata-polyfill": { 414 | "version": "4.0.10", 415 | "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 416 | "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 417 | "dependencies": { 418 | "fetch-blob": "^3.1.2" 419 | }, 420 | "engines": { 421 | "node": ">=12.20.0" 422 | } 423 | }, 424 | "node_modules/fs": { 425 | "version": "0.0.1-security", 426 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 427 | "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" 428 | }, 429 | "node_modules/node-domexception": { 430 | "version": "1.0.0", 431 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 432 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 433 | "funding": [ 434 | { 435 | "type": "github", 436 | "url": "https://github.com/sponsors/jimmywarting" 437 | }, 438 | { 439 | "type": "github", 440 | "url": "https://paypal.me/jimmywarting" 441 | } 442 | ], 443 | "engines": { 444 | "node": ">=10.5.0" 445 | } 446 | }, 447 | "node_modules/node-fetch": { 448 | "version": "3.3.1", 449 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", 450 | "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", 451 | "dependencies": { 452 | "data-uri-to-buffer": "^4.0.0", 453 | "fetch-blob": "^3.1.4", 454 | "formdata-polyfill": "^4.0.10" 455 | }, 456 | "engines": { 457 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 458 | }, 459 | "funding": { 460 | "type": "opencollective", 461 | "url": "https://opencollective.com/node-fetch" 462 | } 463 | }, 464 | "node_modules/web-streams-polyfill": { 465 | "version": "3.2.1", 466 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", 467 | "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", 468 | "engines": { 469 | "node": ">= 8" 470 | } 471 | } 472 | }, 473 | "dependencies": { 474 | "@esbuild/android-arm": { 475 | "version": "0.17.19", 476 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 477 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 478 | "optional": true 479 | }, 480 | "@esbuild/android-arm64": { 481 | "version": "0.17.19", 482 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 483 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 484 | "optional": true 485 | }, 486 | "@esbuild/android-x64": { 487 | "version": "0.17.19", 488 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 489 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 490 | "optional": true 491 | }, 492 | "@esbuild/darwin-arm64": { 493 | "version": "0.17.19", 494 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 495 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 496 | "optional": true 497 | }, 498 | "@esbuild/darwin-x64": { 499 | "version": "0.17.19", 500 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 501 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 502 | "optional": true 503 | }, 504 | "@esbuild/freebsd-arm64": { 505 | "version": "0.17.19", 506 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 507 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 508 | "optional": true 509 | }, 510 | "@esbuild/freebsd-x64": { 511 | "version": "0.17.19", 512 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 513 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 514 | "optional": true 515 | }, 516 | "@esbuild/linux-arm": { 517 | "version": "0.17.19", 518 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 519 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 520 | "optional": true 521 | }, 522 | "@esbuild/linux-arm64": { 523 | "version": "0.17.19", 524 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 525 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 526 | "optional": true 527 | }, 528 | "@esbuild/linux-ia32": { 529 | "version": "0.17.19", 530 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 531 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 532 | "optional": true 533 | }, 534 | "@esbuild/linux-loong64": { 535 | "version": "0.17.19", 536 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 537 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 538 | "optional": true 539 | }, 540 | "@esbuild/linux-mips64el": { 541 | "version": "0.17.19", 542 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 543 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 544 | "optional": true 545 | }, 546 | "@esbuild/linux-ppc64": { 547 | "version": "0.17.19", 548 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 549 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 550 | "optional": true 551 | }, 552 | "@esbuild/linux-riscv64": { 553 | "version": "0.17.19", 554 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 555 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 556 | "optional": true 557 | }, 558 | "@esbuild/linux-s390x": { 559 | "version": "0.17.19", 560 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 561 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 562 | "optional": true 563 | }, 564 | "@esbuild/linux-x64": { 565 | "version": "0.17.19", 566 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 567 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 568 | "optional": true 569 | }, 570 | "@esbuild/netbsd-x64": { 571 | "version": "0.17.19", 572 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 573 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 574 | "optional": true 575 | }, 576 | "@esbuild/openbsd-x64": { 577 | "version": "0.17.19", 578 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 579 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 580 | "optional": true 581 | }, 582 | "@esbuild/sunos-x64": { 583 | "version": "0.17.19", 584 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 585 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 586 | "optional": true 587 | }, 588 | "@esbuild/win32-arm64": { 589 | "version": "0.17.19", 590 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 591 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 592 | "optional": true 593 | }, 594 | "@esbuild/win32-ia32": { 595 | "version": "0.17.19", 596 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 597 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 598 | "optional": true 599 | }, 600 | "@esbuild/win32-x64": { 601 | "version": "0.17.19", 602 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 603 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 604 | "optional": true 605 | }, 606 | "data-uri-to-buffer": { 607 | "version": "4.0.1", 608 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 609 | "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" 610 | }, 611 | "esbuild": { 612 | "version": "0.17.19", 613 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 614 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 615 | "requires": { 616 | "@esbuild/android-arm": "0.17.19", 617 | "@esbuild/android-arm64": "0.17.19", 618 | "@esbuild/android-x64": "0.17.19", 619 | "@esbuild/darwin-arm64": "0.17.19", 620 | "@esbuild/darwin-x64": "0.17.19", 621 | "@esbuild/freebsd-arm64": "0.17.19", 622 | "@esbuild/freebsd-x64": "0.17.19", 623 | "@esbuild/linux-arm": "0.17.19", 624 | "@esbuild/linux-arm64": "0.17.19", 625 | "@esbuild/linux-ia32": "0.17.19", 626 | "@esbuild/linux-loong64": "0.17.19", 627 | "@esbuild/linux-mips64el": "0.17.19", 628 | "@esbuild/linux-ppc64": "0.17.19", 629 | "@esbuild/linux-riscv64": "0.17.19", 630 | "@esbuild/linux-s390x": "0.17.19", 631 | "@esbuild/linux-x64": "0.17.19", 632 | "@esbuild/netbsd-x64": "0.17.19", 633 | "@esbuild/openbsd-x64": "0.17.19", 634 | "@esbuild/sunos-x64": "0.17.19", 635 | "@esbuild/win32-arm64": "0.17.19", 636 | "@esbuild/win32-ia32": "0.17.19", 637 | "@esbuild/win32-x64": "0.17.19" 638 | } 639 | }, 640 | "fetch-blob": { 641 | "version": "3.2.0", 642 | "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 643 | "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 644 | "requires": { 645 | "node-domexception": "^1.0.0", 646 | "web-streams-polyfill": "^3.0.3" 647 | } 648 | }, 649 | "formdata-polyfill": { 650 | "version": "4.0.10", 651 | "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 652 | "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 653 | "requires": { 654 | "fetch-blob": "^3.1.2" 655 | } 656 | }, 657 | "fs": { 658 | "version": "0.0.1-security", 659 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 660 | "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" 661 | }, 662 | "node-domexception": { 663 | "version": "1.0.0", 664 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 665 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" 666 | }, 667 | "node-fetch": { 668 | "version": "3.3.1", 669 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", 670 | "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", 671 | "requires": { 672 | "data-uri-to-buffer": "^4.0.0", 673 | "fetch-blob": "^3.1.4", 674 | "formdata-polyfill": "^4.0.10" 675 | } 676 | }, 677 | "web-streams-polyfill": { 678 | "version": "3.2.1", 679 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", 680 | "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" 681 | } 682 | } 683 | } 684 | -------------------------------------------------------------------------------- /core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@friday/core", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build": "esbuild src/index.js --platform=node --format=cjs --bundle --outdir=dist", 9 | "watch":"esbuild src/index.js --platform=node --format=cjs --bundle --outdir=dist --watch" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "esbuild": "^0.17.19", 15 | "fs": "^0.0.1-security", 16 | "node-fetch": "^3.3.1" 17 | } 18 | } -------------------------------------------------------------------------------- /core/src/ai-chat.js: -------------------------------------------------------------------------------- 1 | import fetch from "node-fetch"; 2 | 3 | // supported models: gpt-3.5-turbo, gpt-4 , gpt-4-32k 4 | class AiService { 5 | async generate({ messages = [], config}) { 6 | const _config = { 7 | model: "gpt-4", 8 | temperature: 0.7, 9 | ...config 10 | } 11 | switch (_config.model) { 12 | case "gpt-4": 13 | case "gpt-4-32k": 14 | case "gpt-3.5-turbo": 15 | return this.gptChatReq({config,messages}); 16 | } 17 | } 18 | gptChatReq({ config, messages }) { 19 | const headers = { 20 | 'Content-Type': 'application/json', 21 | 'Authorization': `Bearer ${config.apiKey}` 22 | }; 23 | 24 | const data = { 25 | "model": config.model, 26 | "messages": messages, 27 | "temperature": config.temperature 28 | }; 29 | 30 | return new Promise((resolve, reject) => { 31 | return fetch(`${config.endPoint}/chat/completions`, { 32 | method: 'POST', 33 | headers: headers, 34 | body: JSON.stringify(data) 35 | }) 36 | .then((res)=>res.json()) 37 | .then(res => { 38 | console.log(JSON.stringify(res,1,1)); 39 | return resolve(res); 40 | }) 41 | .catch(error => { 42 | console.log(error); 43 | return reject(error); 44 | }); 45 | }) 46 | } 47 | 48 | } 49 | export default AiService; -------------------------------------------------------------------------------- /core/src/friday-nodejs.js: -------------------------------------------------------------------------------- 1 | import AiService from "./ai-chat"; 2 | import { removeCodeSnippet, removeDirectory } from "./utils"; 3 | import fs from 'fs'; 4 | 5 | class FridayNodeJs { 6 | aiConfig 7 | data = { 8 | base_code: "", 9 | codes: [], 10 | env: "", 11 | imports: [], 12 | packages: [] 13 | } 14 | constructor({ aiConfig }) { 15 | this.aiConfig = aiConfig; 16 | } 17 | async *generate({ 18 | basePrompt, sections, 19 | }) { 20 | const data = this.data; 21 | 22 | const startTime = process.hrtime(); 23 | const aiChat = new AiService(); 24 | try { 25 | yield this.res({ 26 | title: "Detecting Needed Packages", 27 | step: 1, 28 | done: false 29 | }); 30 | // step1 request for packages need 31 | const res1 = await aiChat.generate({ 32 | config: this.aiConfig, 33 | messages: [ 34 | { 35 | "role": "user", 36 | "content": ` 37 | + you are an expert nodejs es6 developer. 38 | + according to the prompt context and used packages in it , give used packages in a json list format : [] 39 | + if packages versions not known use @latest on end of them 40 | 41 | prompt: 42 | ${basePrompt} 43 | 44 | answer in this format(json string list for each ): 45 | packages: 46 | ["test@latest"] 47 | test packages: 48 | [] 49 | ` 50 | } 51 | ], 52 | }); 53 | 54 | const msg1 = res1.choices[0].message.content; 55 | const regex = /packages:([\s\S]*?)test packages:([\s\S]*)/; 56 | const matches = regex.exec(msg1); 57 | 58 | if (matches) { 59 | const packagesSection = JSON.parse(matches[1].trim()) 60 | const testPackagesSection = JSON.parse(matches[2].trim()) 61 | 62 | data.packages = [ 63 | ...packagesSection, 64 | ...testPackagesSection 65 | ] 66 | } 67 | 68 | data.packages.push("dotenv@latest") 69 | // step 2 (request for base code) 70 | yield this.res({ 71 | title: "Generating index.js + .env", 72 | step: 2, 73 | done: false 74 | }); 75 | 76 | const res2 = await aiChat.generate({ 77 | config: this.aiConfig, 78 | messages: [ 79 | { 80 | "role": "user", 81 | "content": ` 82 | according to my context , i give you the used packages names with their version , then you should implement a very basic index.js file codes in es6 js , attention to roles. 83 | roles: 84 | - use context just for making base code, no extra talk and comments 85 | - there should no action or any comment in the code 86 | - use dotenv package anyway 87 | - don't override the "DONT_TOUCH_THIS" 88 | - don't use markdown for codes 89 | - packages imports should be all in es6 format 90 | 91 | - sample: 92 | context: 93 | a simple discord bot 94 | use discord.js@latest and ... 95 | 96 | .env: 97 | 98 | TOKEN=xx 99 | index.js: 100 | import { Client, GatewayIntentBits } from 'discord.js'; 101 | const client = new Client({ intents: [GatewayIntentBits.Guilds] }); 102 | 103 | {DONT_TOUCH_THIS} 104 | client.login(process.env.TOKEN); 105 | 106 | context: 107 | ${basePrompt} 108 | - use dotenv package 109 | 110 | packages used: 111 | ${data.packages.join(",")} 112 | 113 | answer in this format: 114 | 115 | .env: 116 | 117 | index.js 118 | 119 | ` 120 | } 121 | ], 122 | 123 | }); 124 | 125 | const msg2 = res2.choices[0].message.content; 126 | const regex2 = /.env:([\s\S]*?)index.js:([\s\S]*)/; 127 | const matches2 = regex2.exec(msg2); 128 | 129 | data.base_code = removeCodeSnippet(matches2[2]); 130 | data.env = matches2[1] 131 | 132 | // step 3 | generate sections codes 133 | let i = 1; 134 | for (const taskPrompt of sections) { 135 | const taskRes = await aiChat.generate({ 136 | config: { 137 | temperature: 0.5, 138 | ...this.aiConfig 139 | }, 140 | messages: [ 141 | { 142 | "role": "user", 143 | "content": ` 144 | you are an expert nodejs es6 developer , i give you needed section and please give me the missing codes only. 145 | 146 | index.js description: 147 | ${basePrompt} 148 | used packages: ${data.packages.join(",")} 149 | 150 | index.js codes: 151 | ${data.base_code} 152 | 153 | needed section instruction: 154 | ${taskPrompt} 155 | 156 | + roles 157 | - only give missing codes not complete 158 | - attention to the needed section instruction , and write only needed codes not any more 159 | don't write codes that not requested in needed section 160 | only give missing codes without talk 161 | - if no need to any imports just let empty that section 162 | 163 | - if imports exists in the index.js codes , do not add it imports . 164 | - don't use markdown for new codes and imports in answer 165 | - your codes has no any bugs or syntax problems 166 | 167 | - search for all used packages in new codes and list them in "used packages" section , like sample. 168 | 169 | 170 | answer exactly in this format: 171 | 172 | imports: 173 | import x from 'y' 174 | 175 | 176 | new codes: 177 | 178 | 179 | used packages: 180 | ["test@latest"] 181 | ` 182 | } 183 | ] 184 | }); 185 | 186 | const text = taskRes.choices[0].message.content; 187 | 188 | 189 | console.log(text); 190 | 191 | // Extract "used packages" 192 | const usedPackagesRegex = /used packages:\n(\[.*?\])/s; 193 | const usedPackagesMatch = text.match(usedPackagesRegex); 194 | const usedPackages = usedPackagesMatch ? JSON.parse(usedPackagesMatch[1]) : []; 195 | 196 | console.log('Used Packages:', usedPackages); 197 | 198 | // Extract "new codes" 199 | const newCodesRegex = /new codes:\n+([\s\S]*?)(?=\n\nused packages:|$)/i 200 | const newCodesMatch = text.match(newCodesRegex); 201 | const newCodes = newCodesMatch ? newCodesMatch[1].trim() : ''; 202 | 203 | console.log('New Codes:', newCodes); 204 | 205 | // Extract "imports" 206 | const importsRegex = /imports:(.*?)new codes:/ims; 207 | const importsMatch = text.match(importsRegex); 208 | const imports = importsMatch ? importsMatch[1].trim() : ''; 209 | 210 | console.log('Imports:', imports); 211 | 212 | 213 | data.packages = [ 214 | ...data.packages, 215 | ...usedPackages 216 | ] 217 | data.imports = [ 218 | ...data.imports, 219 | removeCodeSnippet(imports) 220 | ] 221 | data.codes.push(removeCodeSnippet(newCodes)); 222 | 223 | yield this.res({ 224 | title: `Generating section ${i}`, 225 | step: 3, 226 | done: false 227 | }); 228 | i++; 229 | } 230 | await new Promise(r => setTimeout(r, 200)); 231 | 232 | // Calculate the elapsed time 233 | const endTime = process.hrtime(startTime); 234 | 235 | // Convert the elapsed time to milliseconds 236 | const runtimeMs = endTime[0] * 1000 + endTime[1] / 1000000; 237 | 238 | yield this.res({ 239 | title: `Done`, 240 | step: 4, 241 | done: true, 242 | time: runtimeMs 243 | }); 244 | } catch (e) { 245 | yield this.res({ 246 | title: `Error happend\n:${e.message}`, 247 | step: 4, 248 | done: false, 249 | error: e.message, 250 | full_error: e 251 | }); 252 | } 253 | } 254 | res(_data) { 255 | return _data; 256 | } 257 | async createProject(projecDir, data) { 258 | try { 259 | // Create the project directory if it doesn't exist 260 | if (fs.existsSync(projecDir)) { 261 | removeDirectory(projecDir); 262 | } 263 | if (!fs.existsSync(projecDir)) { 264 | fs.mkdirSync(projecDir); 265 | } 266 | 267 | // Navigate into the "project" directory 268 | process.chdir(projecDir); 269 | 270 | // Create package.json file with required packages 271 | const packageJson = { 272 | name: "project", 273 | version: '1.0.0', 274 | scripts: { 275 | "start": "esbuild index.js --platform=node --format=cjs --bundle --outdir=dist && node dist/index.js" 276 | }, 277 | dependencies: {} 278 | }; 279 | const pkgs = [ 280 | "esbuild@latest", 281 | ...data.packages 282 | ] 283 | const unique_pkgs = [...new Set(pkgs)]; 284 | 285 | for (const pkg of unique_pkgs) { 286 | const [packageName, packageVersion] = pkg.split('@'); 287 | packageJson.dependencies[packageName] = packageVersion || "latest"; 288 | } 289 | 290 | fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2)); 291 | 292 | let base = `${data.imports.join("\n")}\n${data.base_code}` 293 | // Replace the merged codes in the base context 294 | let mergedContent = base.replace( 295 | '{DONT_TOUCH_THIS}', 296 | data.codes.join('\n') 297 | ); 298 | 299 | // Create index.js file with the merged content and imports 300 | fs.writeFileSync('index.js', mergedContent); 301 | 302 | // Create .env file with env content 303 | fs.writeFileSync('.env', data.env.trim()); 304 | 305 | console.log('Project files created successfully.'); 306 | } catch (error) { 307 | console.error('Error creating project files:', error); 308 | } 309 | } 310 | } 311 | export default FridayNodeJs; -------------------------------------------------------------------------------- /core/src/index.js: -------------------------------------------------------------------------------- 1 | import FridayNodeJs from "./friday-nodejs" 2 | export { 3 | FridayNodeJs 4 | } -------------------------------------------------------------------------------- /core/src/utils.js: -------------------------------------------------------------------------------- 1 | import fs from "fs" 2 | export function removeCodeSnippet(text) { 3 | // Remove leading newline characters if any 4 | text = text.replace(/^\n+/, ''); 5 | 6 | // Remove ```javascript or ```js at the start 7 | text = text.replace(/^(```javascript|```js)/, ''); 8 | 9 | // Remove ``` at the end 10 | text = text.replace(/```$/, ''); 11 | text = text.replace(/```/, ''); 12 | 13 | // Remove trailing newline characters if any 14 | text = text.replace(/\n+$/, ''); 15 | 16 | return text; 17 | } 18 | export function removeDirectory(directory) { 19 | if (fs.existsSync(directory)) { 20 | fs.readdirSync(directory).forEach((file) => { 21 | const fullPath = `${directory}/${file}`; 22 | if (fs.lstatSync(fullPath).isDirectory()) { 23 | removeDirectory(fullPath); 24 | } else { 25 | fs.unlinkSync(fullPath); 26 | } 27 | }); 28 | fs.rmdirSync(directory); 29 | } 30 | } -------------------------------------------------------------------------------- /projects/.gitignore: -------------------------------------------------------------------------------- 1 | last 2 | .env -------------------------------------------------------------------------------- /projects/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amirrezasalimi/friday/4e82c011f7b10f76e22d512de478c21ce8f8913f/projects/.gitkeep -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Friday: AI-Powered App Generation Tool 2 | 3 | Friday is a developer agent that helps you quickly create applications with AI assistance. It provides a core prompt for building the foundation of your application and allows you to add unlimited sections, each of which is a prompt representing a specific part of your app. 4 | 5 |  6 | 7 | For demos and examples, please visit my Twitter profile: [Twitter](https://twitter.com/amirsalimiiii) 8 | 9 | Join our Discord server for support, discussions, and to share your feedback, ideas, and the apps you've created with Friday: [Discord](https://discord.gg/gnjutQvwah) 10 | 11 | ## Features 12 | 13 | - Friday utilizes GPT-4 for AI assistance, but it has been tested and optimized with GPT-4-32k for improved speed and better results. 14 | - It requires 2 small requests for your app's base and 1 request per section you provide. 15 | - Friday employs esbuild behind the scenes for every app created by it. 16 | 17 | # Friday: Usage Manual 18 | 19 | To use Friday, you should have access to a GPT-like chat completion API, such as GPT-4 or GPT-4-32k. The file structure of the project is as follows: 20 | 21 | - `core`: Friday's core module. 22 | - `web` 23 | - `frontend`: Frontend module for the application. 24 | - `backend`: Backend module for the application. 25 | 26 | Follow the steps below to set up and use Friday: 27 | 28 | 1.Go to the `web/backend` directory and open the `.env` file. Fill in your AI API key and endpoint. You can use the official OpenAI endpoint: `https://api.openai.com/v1/chat/completions` 29 | 30 | ``` 31 | AI_TOKEN= 32 | AI_ENDPOINT= 33 | ``` 34 | 35 | 2.Build the core module by navigating to the `core` directory and executing the following commands: 36 | 37 | ```bash 38 | cd core 39 | npm install 40 | npm run build 41 | ``` 42 | 43 | 3.Run the backend server by navigating to the `web/backend` directory and executing the following commands: 44 | ```bash 45 | cd web/backend 46 | npm install 47 | npm run start 48 | ``` 49 | 50 | 4.Run the frontend module by navigating to the `web/frontend` directory and executing the following commands: 51 | ```bash 52 | cd web/frontend 53 | npm install 54 | npm run start 55 | ``` 56 | Make sure to install the necessary dependencies by running `npm install` for both the backend and frontend directories, especially if it's your first time setting up the project. 57 | 58 | Now you should be able to access and use Friday through the frontend interface. on http://localhost:5173 59 | 60 | > after getting "Done" message in ui , your project will create on the `projects/last` directory 61 | 1. check .env file and change it if need 62 | 2. run `npm i` to install packages 63 | 3. run `npm run start` to start your project 64 | 65 | 66 | 67 | ## Known Bugs 68 | 69 | - Occasionally, Friday may not include used packages in the `packages.json` file. If you encounter missing packages after running `npm run start`, please install them manually. 70 | 71 | ## Future Goals 72 | 73 | - Enhance the scalability of Friday for multi-file apps with a well-defined structure. Currently, it primarily generates an `index.js` and `.env` file for the entire application. 74 | - Improve the user interface of the panel for a more intuitive experience. 75 | - Implement a documentation feature, allowing you to attach API or package documentation to your app prompt with just one click. 76 | - Introduce a code debugger for easier troubleshooting. 77 | 78 | 79 | ## License 80 | 81 | This project is licensed under the MIT License. 82 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amirrezasalimi/friday/4e82c011f7b10f76e22d512de478c21ce8f8913f/screenshot.png -------------------------------------------------------------------------------- /web/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amirrezasalimi/friday/4e82c011f7b10f76e22d512de478c21ce8f8913f/web/.DS_Store -------------------------------------------------------------------------------- /web/backend/.env.example: -------------------------------------------------------------------------------- 1 | AI_TOKEN= 2 | AI_ENDPOINT= -------------------------------------------------------------------------------- /web/backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "backend", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@friday/core": "file:../../core", 13 | "body-parser": "^1.20.2", 14 | "cors": "^2.8.5", 15 | "dotenv": "^16.0.3", 16 | "esbuild": "^0.17.19", 17 | "express": "^4.18.2", 18 | "openai": "^3.2.1" 19 | } 20 | }, 21 | "../../core": { 22 | "name": "@friday/core", 23 | "version": "0.0.1", 24 | "license": "ISC", 25 | "dependencies": { 26 | "esbuild": "^0.17.19", 27 | "fs": "^0.0.1-security", 28 | "node-fetch": "^3.3.1" 29 | } 30 | }, 31 | "node_modules/@esbuild/android-arm": { 32 | "version": "0.17.19", 33 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 34 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 35 | "cpu": [ 36 | "arm" 37 | ], 38 | "optional": true, 39 | "os": [ 40 | "android" 41 | ], 42 | "engines": { 43 | "node": ">=12" 44 | } 45 | }, 46 | "node_modules/@esbuild/android-arm64": { 47 | "version": "0.17.19", 48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 49 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 50 | "cpu": [ 51 | "arm64" 52 | ], 53 | "optional": true, 54 | "os": [ 55 | "android" 56 | ], 57 | "engines": { 58 | "node": ">=12" 59 | } 60 | }, 61 | "node_modules/@esbuild/android-x64": { 62 | "version": "0.17.19", 63 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 64 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 65 | "cpu": [ 66 | "x64" 67 | ], 68 | "optional": true, 69 | "os": [ 70 | "android" 71 | ], 72 | "engines": { 73 | "node": ">=12" 74 | } 75 | }, 76 | "node_modules/@esbuild/darwin-arm64": { 77 | "version": "0.17.19", 78 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 79 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 80 | "cpu": [ 81 | "arm64" 82 | ], 83 | "optional": true, 84 | "os": [ 85 | "darwin" 86 | ], 87 | "engines": { 88 | "node": ">=12" 89 | } 90 | }, 91 | "node_modules/@esbuild/darwin-x64": { 92 | "version": "0.17.19", 93 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 94 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 95 | "cpu": [ 96 | "x64" 97 | ], 98 | "optional": true, 99 | "os": [ 100 | "darwin" 101 | ], 102 | "engines": { 103 | "node": ">=12" 104 | } 105 | }, 106 | "node_modules/@esbuild/freebsd-arm64": { 107 | "version": "0.17.19", 108 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 109 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 110 | "cpu": [ 111 | "arm64" 112 | ], 113 | "optional": true, 114 | "os": [ 115 | "freebsd" 116 | ], 117 | "engines": { 118 | "node": ">=12" 119 | } 120 | }, 121 | "node_modules/@esbuild/freebsd-x64": { 122 | "version": "0.17.19", 123 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 124 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 125 | "cpu": [ 126 | "x64" 127 | ], 128 | "optional": true, 129 | "os": [ 130 | "freebsd" 131 | ], 132 | "engines": { 133 | "node": ">=12" 134 | } 135 | }, 136 | "node_modules/@esbuild/linux-arm": { 137 | "version": "0.17.19", 138 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 139 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 140 | "cpu": [ 141 | "arm" 142 | ], 143 | "optional": true, 144 | "os": [ 145 | "linux" 146 | ], 147 | "engines": { 148 | "node": ">=12" 149 | } 150 | }, 151 | "node_modules/@esbuild/linux-arm64": { 152 | "version": "0.17.19", 153 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 154 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 155 | "cpu": [ 156 | "arm64" 157 | ], 158 | "optional": true, 159 | "os": [ 160 | "linux" 161 | ], 162 | "engines": { 163 | "node": ">=12" 164 | } 165 | }, 166 | "node_modules/@esbuild/linux-ia32": { 167 | "version": "0.17.19", 168 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 169 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 170 | "cpu": [ 171 | "ia32" 172 | ], 173 | "optional": true, 174 | "os": [ 175 | "linux" 176 | ], 177 | "engines": { 178 | "node": ">=12" 179 | } 180 | }, 181 | "node_modules/@esbuild/linux-loong64": { 182 | "version": "0.17.19", 183 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 184 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 185 | "cpu": [ 186 | "loong64" 187 | ], 188 | "optional": true, 189 | "os": [ 190 | "linux" 191 | ], 192 | "engines": { 193 | "node": ">=12" 194 | } 195 | }, 196 | "node_modules/@esbuild/linux-mips64el": { 197 | "version": "0.17.19", 198 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 199 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 200 | "cpu": [ 201 | "mips64el" 202 | ], 203 | "optional": true, 204 | "os": [ 205 | "linux" 206 | ], 207 | "engines": { 208 | "node": ">=12" 209 | } 210 | }, 211 | "node_modules/@esbuild/linux-ppc64": { 212 | "version": "0.17.19", 213 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 214 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 215 | "cpu": [ 216 | "ppc64" 217 | ], 218 | "optional": true, 219 | "os": [ 220 | "linux" 221 | ], 222 | "engines": { 223 | "node": ">=12" 224 | } 225 | }, 226 | "node_modules/@esbuild/linux-riscv64": { 227 | "version": "0.17.19", 228 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 229 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 230 | "cpu": [ 231 | "riscv64" 232 | ], 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/@esbuild/linux-s390x": { 242 | "version": "0.17.19", 243 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 244 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 245 | "cpu": [ 246 | "s390x" 247 | ], 248 | "optional": true, 249 | "os": [ 250 | "linux" 251 | ], 252 | "engines": { 253 | "node": ">=12" 254 | } 255 | }, 256 | "node_modules/@esbuild/linux-x64": { 257 | "version": "0.17.19", 258 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 259 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 260 | "cpu": [ 261 | "x64" 262 | ], 263 | "optional": true, 264 | "os": [ 265 | "linux" 266 | ], 267 | "engines": { 268 | "node": ">=12" 269 | } 270 | }, 271 | "node_modules/@esbuild/netbsd-x64": { 272 | "version": "0.17.19", 273 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 274 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 275 | "cpu": [ 276 | "x64" 277 | ], 278 | "optional": true, 279 | "os": [ 280 | "netbsd" 281 | ], 282 | "engines": { 283 | "node": ">=12" 284 | } 285 | }, 286 | "node_modules/@esbuild/openbsd-x64": { 287 | "version": "0.17.19", 288 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 289 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 290 | "cpu": [ 291 | "x64" 292 | ], 293 | "optional": true, 294 | "os": [ 295 | "openbsd" 296 | ], 297 | "engines": { 298 | "node": ">=12" 299 | } 300 | }, 301 | "node_modules/@esbuild/sunos-x64": { 302 | "version": "0.17.19", 303 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 304 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 305 | "cpu": [ 306 | "x64" 307 | ], 308 | "optional": true, 309 | "os": [ 310 | "sunos" 311 | ], 312 | "engines": { 313 | "node": ">=12" 314 | } 315 | }, 316 | "node_modules/@esbuild/win32-arm64": { 317 | "version": "0.17.19", 318 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 319 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 320 | "cpu": [ 321 | "arm64" 322 | ], 323 | "optional": true, 324 | "os": [ 325 | "win32" 326 | ], 327 | "engines": { 328 | "node": ">=12" 329 | } 330 | }, 331 | "node_modules/@esbuild/win32-ia32": { 332 | "version": "0.17.19", 333 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 334 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 335 | "cpu": [ 336 | "ia32" 337 | ], 338 | "optional": true, 339 | "os": [ 340 | "win32" 341 | ], 342 | "engines": { 343 | "node": ">=12" 344 | } 345 | }, 346 | "node_modules/@esbuild/win32-x64": { 347 | "version": "0.17.19", 348 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 349 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 350 | "cpu": [ 351 | "x64" 352 | ], 353 | "optional": true, 354 | "os": [ 355 | "win32" 356 | ], 357 | "engines": { 358 | "node": ">=12" 359 | } 360 | }, 361 | "node_modules/@friday/core": { 362 | "resolved": "../../core", 363 | "link": true 364 | }, 365 | "node_modules/accepts": { 366 | "version": "1.3.8", 367 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 368 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 369 | "dependencies": { 370 | "mime-types": "~2.1.34", 371 | "negotiator": "0.6.3" 372 | }, 373 | "engines": { 374 | "node": ">= 0.6" 375 | } 376 | }, 377 | "node_modules/array-flatten": { 378 | "version": "1.1.1", 379 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 380 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 381 | }, 382 | "node_modules/asynckit": { 383 | "version": "0.4.0", 384 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 385 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 386 | }, 387 | "node_modules/axios": { 388 | "version": "0.26.1", 389 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", 390 | "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", 391 | "dependencies": { 392 | "follow-redirects": "^1.14.8" 393 | } 394 | }, 395 | "node_modules/body-parser": { 396 | "version": "1.20.2", 397 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 398 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 399 | "dependencies": { 400 | "bytes": "3.1.2", 401 | "content-type": "~1.0.5", 402 | "debug": "2.6.9", 403 | "depd": "2.0.0", 404 | "destroy": "1.2.0", 405 | "http-errors": "2.0.0", 406 | "iconv-lite": "0.4.24", 407 | "on-finished": "2.4.1", 408 | "qs": "6.11.0", 409 | "raw-body": "2.5.2", 410 | "type-is": "~1.6.18", 411 | "unpipe": "1.0.0" 412 | }, 413 | "engines": { 414 | "node": ">= 0.8", 415 | "npm": "1.2.8000 || >= 1.4.16" 416 | } 417 | }, 418 | "node_modules/bytes": { 419 | "version": "3.1.2", 420 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 421 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 422 | "engines": { 423 | "node": ">= 0.8" 424 | } 425 | }, 426 | "node_modules/call-bind": { 427 | "version": "1.0.2", 428 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 429 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 430 | "dependencies": { 431 | "function-bind": "^1.1.1", 432 | "get-intrinsic": "^1.0.2" 433 | }, 434 | "funding": { 435 | "url": "https://github.com/sponsors/ljharb" 436 | } 437 | }, 438 | "node_modules/combined-stream": { 439 | "version": "1.0.8", 440 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 441 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 442 | "dependencies": { 443 | "delayed-stream": "~1.0.0" 444 | }, 445 | "engines": { 446 | "node": ">= 0.8" 447 | } 448 | }, 449 | "node_modules/content-disposition": { 450 | "version": "0.5.4", 451 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 452 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 453 | "dependencies": { 454 | "safe-buffer": "5.2.1" 455 | }, 456 | "engines": { 457 | "node": ">= 0.6" 458 | } 459 | }, 460 | "node_modules/content-type": { 461 | "version": "1.0.5", 462 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 463 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 464 | "engines": { 465 | "node": ">= 0.6" 466 | } 467 | }, 468 | "node_modules/cookie": { 469 | "version": "0.5.0", 470 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 471 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 472 | "engines": { 473 | "node": ">= 0.6" 474 | } 475 | }, 476 | "node_modules/cookie-signature": { 477 | "version": "1.0.6", 478 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 479 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 480 | }, 481 | "node_modules/cors": { 482 | "version": "2.8.5", 483 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 484 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 485 | "dependencies": { 486 | "object-assign": "^4", 487 | "vary": "^1" 488 | }, 489 | "engines": { 490 | "node": ">= 0.10" 491 | } 492 | }, 493 | "node_modules/debug": { 494 | "version": "2.6.9", 495 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 496 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 497 | "dependencies": { 498 | "ms": "2.0.0" 499 | } 500 | }, 501 | "node_modules/delayed-stream": { 502 | "version": "1.0.0", 503 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 504 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 505 | "engines": { 506 | "node": ">=0.4.0" 507 | } 508 | }, 509 | "node_modules/depd": { 510 | "version": "2.0.0", 511 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 512 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 513 | "engines": { 514 | "node": ">= 0.8" 515 | } 516 | }, 517 | "node_modules/destroy": { 518 | "version": "1.2.0", 519 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 520 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 521 | "engines": { 522 | "node": ">= 0.8", 523 | "npm": "1.2.8000 || >= 1.4.16" 524 | } 525 | }, 526 | "node_modules/dotenv": { 527 | "version": "16.0.3", 528 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 529 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 530 | "engines": { 531 | "node": ">=12" 532 | } 533 | }, 534 | "node_modules/ee-first": { 535 | "version": "1.1.1", 536 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 537 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 538 | }, 539 | "node_modules/encodeurl": { 540 | "version": "1.0.2", 541 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 542 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 543 | "engines": { 544 | "node": ">= 0.8" 545 | } 546 | }, 547 | "node_modules/esbuild": { 548 | "version": "0.17.19", 549 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 550 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 551 | "hasInstallScript": true, 552 | "bin": { 553 | "esbuild": "bin/esbuild" 554 | }, 555 | "engines": { 556 | "node": ">=12" 557 | }, 558 | "optionalDependencies": { 559 | "@esbuild/android-arm": "0.17.19", 560 | "@esbuild/android-arm64": "0.17.19", 561 | "@esbuild/android-x64": "0.17.19", 562 | "@esbuild/darwin-arm64": "0.17.19", 563 | "@esbuild/darwin-x64": "0.17.19", 564 | "@esbuild/freebsd-arm64": "0.17.19", 565 | "@esbuild/freebsd-x64": "0.17.19", 566 | "@esbuild/linux-arm": "0.17.19", 567 | "@esbuild/linux-arm64": "0.17.19", 568 | "@esbuild/linux-ia32": "0.17.19", 569 | "@esbuild/linux-loong64": "0.17.19", 570 | "@esbuild/linux-mips64el": "0.17.19", 571 | "@esbuild/linux-ppc64": "0.17.19", 572 | "@esbuild/linux-riscv64": "0.17.19", 573 | "@esbuild/linux-s390x": "0.17.19", 574 | "@esbuild/linux-x64": "0.17.19", 575 | "@esbuild/netbsd-x64": "0.17.19", 576 | "@esbuild/openbsd-x64": "0.17.19", 577 | "@esbuild/sunos-x64": "0.17.19", 578 | "@esbuild/win32-arm64": "0.17.19", 579 | "@esbuild/win32-ia32": "0.17.19", 580 | "@esbuild/win32-x64": "0.17.19" 581 | } 582 | }, 583 | "node_modules/escape-html": { 584 | "version": "1.0.3", 585 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 586 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 587 | }, 588 | "node_modules/etag": { 589 | "version": "1.8.1", 590 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 591 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 592 | "engines": { 593 | "node": ">= 0.6" 594 | } 595 | }, 596 | "node_modules/express": { 597 | "version": "4.18.2", 598 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 599 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 600 | "dependencies": { 601 | "accepts": "~1.3.8", 602 | "array-flatten": "1.1.1", 603 | "body-parser": "1.20.1", 604 | "content-disposition": "0.5.4", 605 | "content-type": "~1.0.4", 606 | "cookie": "0.5.0", 607 | "cookie-signature": "1.0.6", 608 | "debug": "2.6.9", 609 | "depd": "2.0.0", 610 | "encodeurl": "~1.0.2", 611 | "escape-html": "~1.0.3", 612 | "etag": "~1.8.1", 613 | "finalhandler": "1.2.0", 614 | "fresh": "0.5.2", 615 | "http-errors": "2.0.0", 616 | "merge-descriptors": "1.0.1", 617 | "methods": "~1.1.2", 618 | "on-finished": "2.4.1", 619 | "parseurl": "~1.3.3", 620 | "path-to-regexp": "0.1.7", 621 | "proxy-addr": "~2.0.7", 622 | "qs": "6.11.0", 623 | "range-parser": "~1.2.1", 624 | "safe-buffer": "5.2.1", 625 | "send": "0.18.0", 626 | "serve-static": "1.15.0", 627 | "setprototypeof": "1.2.0", 628 | "statuses": "2.0.1", 629 | "type-is": "~1.6.18", 630 | "utils-merge": "1.0.1", 631 | "vary": "~1.1.2" 632 | }, 633 | "engines": { 634 | "node": ">= 0.10.0" 635 | } 636 | }, 637 | "node_modules/express/node_modules/body-parser": { 638 | "version": "1.20.1", 639 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 640 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 641 | "dependencies": { 642 | "bytes": "3.1.2", 643 | "content-type": "~1.0.4", 644 | "debug": "2.6.9", 645 | "depd": "2.0.0", 646 | "destroy": "1.2.0", 647 | "http-errors": "2.0.0", 648 | "iconv-lite": "0.4.24", 649 | "on-finished": "2.4.1", 650 | "qs": "6.11.0", 651 | "raw-body": "2.5.1", 652 | "type-is": "~1.6.18", 653 | "unpipe": "1.0.0" 654 | }, 655 | "engines": { 656 | "node": ">= 0.8", 657 | "npm": "1.2.8000 || >= 1.4.16" 658 | } 659 | }, 660 | "node_modules/express/node_modules/raw-body": { 661 | "version": "2.5.1", 662 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 663 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 664 | "dependencies": { 665 | "bytes": "3.1.2", 666 | "http-errors": "2.0.0", 667 | "iconv-lite": "0.4.24", 668 | "unpipe": "1.0.0" 669 | }, 670 | "engines": { 671 | "node": ">= 0.8" 672 | } 673 | }, 674 | "node_modules/finalhandler": { 675 | "version": "1.2.0", 676 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 677 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 678 | "dependencies": { 679 | "debug": "2.6.9", 680 | "encodeurl": "~1.0.2", 681 | "escape-html": "~1.0.3", 682 | "on-finished": "2.4.1", 683 | "parseurl": "~1.3.3", 684 | "statuses": "2.0.1", 685 | "unpipe": "~1.0.0" 686 | }, 687 | "engines": { 688 | "node": ">= 0.8" 689 | } 690 | }, 691 | "node_modules/follow-redirects": { 692 | "version": "1.15.2", 693 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", 694 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", 695 | "funding": [ 696 | { 697 | "type": "individual", 698 | "url": "https://github.com/sponsors/RubenVerborgh" 699 | } 700 | ], 701 | "engines": { 702 | "node": ">=4.0" 703 | }, 704 | "peerDependenciesMeta": { 705 | "debug": { 706 | "optional": true 707 | } 708 | } 709 | }, 710 | "node_modules/form-data": { 711 | "version": "4.0.0", 712 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 713 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 714 | "dependencies": { 715 | "asynckit": "^0.4.0", 716 | "combined-stream": "^1.0.8", 717 | "mime-types": "^2.1.12" 718 | }, 719 | "engines": { 720 | "node": ">= 6" 721 | } 722 | }, 723 | "node_modules/forwarded": { 724 | "version": "0.2.0", 725 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 726 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 727 | "engines": { 728 | "node": ">= 0.6" 729 | } 730 | }, 731 | "node_modules/fresh": { 732 | "version": "0.5.2", 733 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 734 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 735 | "engines": { 736 | "node": ">= 0.6" 737 | } 738 | }, 739 | "node_modules/function-bind": { 740 | "version": "1.1.1", 741 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 742 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 743 | }, 744 | "node_modules/get-intrinsic": { 745 | "version": "1.2.1", 746 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 747 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 748 | "dependencies": { 749 | "function-bind": "^1.1.1", 750 | "has": "^1.0.3", 751 | "has-proto": "^1.0.1", 752 | "has-symbols": "^1.0.3" 753 | }, 754 | "funding": { 755 | "url": "https://github.com/sponsors/ljharb" 756 | } 757 | }, 758 | "node_modules/has": { 759 | "version": "1.0.3", 760 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 761 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 762 | "dependencies": { 763 | "function-bind": "^1.1.1" 764 | }, 765 | "engines": { 766 | "node": ">= 0.4.0" 767 | } 768 | }, 769 | "node_modules/has-proto": { 770 | "version": "1.0.1", 771 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 772 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 773 | "engines": { 774 | "node": ">= 0.4" 775 | }, 776 | "funding": { 777 | "url": "https://github.com/sponsors/ljharb" 778 | } 779 | }, 780 | "node_modules/has-symbols": { 781 | "version": "1.0.3", 782 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 783 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 784 | "engines": { 785 | "node": ">= 0.4" 786 | }, 787 | "funding": { 788 | "url": "https://github.com/sponsors/ljharb" 789 | } 790 | }, 791 | "node_modules/http-errors": { 792 | "version": "2.0.0", 793 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 794 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 795 | "dependencies": { 796 | "depd": "2.0.0", 797 | "inherits": "2.0.4", 798 | "setprototypeof": "1.2.0", 799 | "statuses": "2.0.1", 800 | "toidentifier": "1.0.1" 801 | }, 802 | "engines": { 803 | "node": ">= 0.8" 804 | } 805 | }, 806 | "node_modules/iconv-lite": { 807 | "version": "0.4.24", 808 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 809 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 810 | "dependencies": { 811 | "safer-buffer": ">= 2.1.2 < 3" 812 | }, 813 | "engines": { 814 | "node": ">=0.10.0" 815 | } 816 | }, 817 | "node_modules/inherits": { 818 | "version": "2.0.4", 819 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 820 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 821 | }, 822 | "node_modules/ipaddr.js": { 823 | "version": "1.9.1", 824 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 825 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 826 | "engines": { 827 | "node": ">= 0.10" 828 | } 829 | }, 830 | "node_modules/media-typer": { 831 | "version": "0.3.0", 832 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 833 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 834 | "engines": { 835 | "node": ">= 0.6" 836 | } 837 | }, 838 | "node_modules/merge-descriptors": { 839 | "version": "1.0.1", 840 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 841 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 842 | }, 843 | "node_modules/methods": { 844 | "version": "1.1.2", 845 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 846 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 847 | "engines": { 848 | "node": ">= 0.6" 849 | } 850 | }, 851 | "node_modules/mime": { 852 | "version": "1.6.0", 853 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 854 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 855 | "bin": { 856 | "mime": "cli.js" 857 | }, 858 | "engines": { 859 | "node": ">=4" 860 | } 861 | }, 862 | "node_modules/mime-db": { 863 | "version": "1.52.0", 864 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 865 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 866 | "engines": { 867 | "node": ">= 0.6" 868 | } 869 | }, 870 | "node_modules/mime-types": { 871 | "version": "2.1.35", 872 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 873 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 874 | "dependencies": { 875 | "mime-db": "1.52.0" 876 | }, 877 | "engines": { 878 | "node": ">= 0.6" 879 | } 880 | }, 881 | "node_modules/ms": { 882 | "version": "2.0.0", 883 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 884 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 885 | }, 886 | "node_modules/negotiator": { 887 | "version": "0.6.3", 888 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 889 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 890 | "engines": { 891 | "node": ">= 0.6" 892 | } 893 | }, 894 | "node_modules/object-assign": { 895 | "version": "4.1.1", 896 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 897 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 898 | "engines": { 899 | "node": ">=0.10.0" 900 | } 901 | }, 902 | "node_modules/object-inspect": { 903 | "version": "1.12.3", 904 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 905 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 906 | "funding": { 907 | "url": "https://github.com/sponsors/ljharb" 908 | } 909 | }, 910 | "node_modules/on-finished": { 911 | "version": "2.4.1", 912 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 913 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 914 | "dependencies": { 915 | "ee-first": "1.1.1" 916 | }, 917 | "engines": { 918 | "node": ">= 0.8" 919 | } 920 | }, 921 | "node_modules/openai": { 922 | "version": "3.2.1", 923 | "resolved": "https://registry.npmjs.org/openai/-/openai-3.2.1.tgz", 924 | "integrity": "sha512-762C9BNlJPbjjlWZi4WYK9iM2tAVAv0uUp1UmI34vb0CN5T2mjB/qM6RYBmNKMh/dN9fC+bxqPwWJZUTWW052A==", 925 | "dependencies": { 926 | "axios": "^0.26.0", 927 | "form-data": "^4.0.0" 928 | } 929 | }, 930 | "node_modules/parseurl": { 931 | "version": "1.3.3", 932 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 933 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 934 | "engines": { 935 | "node": ">= 0.8" 936 | } 937 | }, 938 | "node_modules/path-to-regexp": { 939 | "version": "0.1.7", 940 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 941 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 942 | }, 943 | "node_modules/proxy-addr": { 944 | "version": "2.0.7", 945 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 946 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 947 | "dependencies": { 948 | "forwarded": "0.2.0", 949 | "ipaddr.js": "1.9.1" 950 | }, 951 | "engines": { 952 | "node": ">= 0.10" 953 | } 954 | }, 955 | "node_modules/qs": { 956 | "version": "6.11.0", 957 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 958 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 959 | "dependencies": { 960 | "side-channel": "^1.0.4" 961 | }, 962 | "engines": { 963 | "node": ">=0.6" 964 | }, 965 | "funding": { 966 | "url": "https://github.com/sponsors/ljharb" 967 | } 968 | }, 969 | "node_modules/range-parser": { 970 | "version": "1.2.1", 971 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 972 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 973 | "engines": { 974 | "node": ">= 0.6" 975 | } 976 | }, 977 | "node_modules/raw-body": { 978 | "version": "2.5.2", 979 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 980 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 981 | "dependencies": { 982 | "bytes": "3.1.2", 983 | "http-errors": "2.0.0", 984 | "iconv-lite": "0.4.24", 985 | "unpipe": "1.0.0" 986 | }, 987 | "engines": { 988 | "node": ">= 0.8" 989 | } 990 | }, 991 | "node_modules/safe-buffer": { 992 | "version": "5.2.1", 993 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 994 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 995 | "funding": [ 996 | { 997 | "type": "github", 998 | "url": "https://github.com/sponsors/feross" 999 | }, 1000 | { 1001 | "type": "patreon", 1002 | "url": "https://www.patreon.com/feross" 1003 | }, 1004 | { 1005 | "type": "consulting", 1006 | "url": "https://feross.org/support" 1007 | } 1008 | ] 1009 | }, 1010 | "node_modules/safer-buffer": { 1011 | "version": "2.1.2", 1012 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1013 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1014 | }, 1015 | "node_modules/send": { 1016 | "version": "0.18.0", 1017 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1018 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1019 | "dependencies": { 1020 | "debug": "2.6.9", 1021 | "depd": "2.0.0", 1022 | "destroy": "1.2.0", 1023 | "encodeurl": "~1.0.2", 1024 | "escape-html": "~1.0.3", 1025 | "etag": "~1.8.1", 1026 | "fresh": "0.5.2", 1027 | "http-errors": "2.0.0", 1028 | "mime": "1.6.0", 1029 | "ms": "2.1.3", 1030 | "on-finished": "2.4.1", 1031 | "range-parser": "~1.2.1", 1032 | "statuses": "2.0.1" 1033 | }, 1034 | "engines": { 1035 | "node": ">= 0.8.0" 1036 | } 1037 | }, 1038 | "node_modules/send/node_modules/ms": { 1039 | "version": "2.1.3", 1040 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1041 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1042 | }, 1043 | "node_modules/serve-static": { 1044 | "version": "1.15.0", 1045 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1046 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1047 | "dependencies": { 1048 | "encodeurl": "~1.0.2", 1049 | "escape-html": "~1.0.3", 1050 | "parseurl": "~1.3.3", 1051 | "send": "0.18.0" 1052 | }, 1053 | "engines": { 1054 | "node": ">= 0.8.0" 1055 | } 1056 | }, 1057 | "node_modules/setprototypeof": { 1058 | "version": "1.2.0", 1059 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1060 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1061 | }, 1062 | "node_modules/side-channel": { 1063 | "version": "1.0.4", 1064 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1065 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1066 | "dependencies": { 1067 | "call-bind": "^1.0.0", 1068 | "get-intrinsic": "^1.0.2", 1069 | "object-inspect": "^1.9.0" 1070 | }, 1071 | "funding": { 1072 | "url": "https://github.com/sponsors/ljharb" 1073 | } 1074 | }, 1075 | "node_modules/statuses": { 1076 | "version": "2.0.1", 1077 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1078 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1079 | "engines": { 1080 | "node": ">= 0.8" 1081 | } 1082 | }, 1083 | "node_modules/toidentifier": { 1084 | "version": "1.0.1", 1085 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1086 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1087 | "engines": { 1088 | "node": ">=0.6" 1089 | } 1090 | }, 1091 | "node_modules/type-is": { 1092 | "version": "1.6.18", 1093 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1094 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1095 | "dependencies": { 1096 | "media-typer": "0.3.0", 1097 | "mime-types": "~2.1.24" 1098 | }, 1099 | "engines": { 1100 | "node": ">= 0.6" 1101 | } 1102 | }, 1103 | "node_modules/unpipe": { 1104 | "version": "1.0.0", 1105 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1106 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1107 | "engines": { 1108 | "node": ">= 0.8" 1109 | } 1110 | }, 1111 | "node_modules/utils-merge": { 1112 | "version": "1.0.1", 1113 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1114 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 1115 | "engines": { 1116 | "node": ">= 0.4.0" 1117 | } 1118 | }, 1119 | "node_modules/vary": { 1120 | "version": "1.1.2", 1121 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1122 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1123 | "engines": { 1124 | "node": ">= 0.8" 1125 | } 1126 | } 1127 | }, 1128 | "dependencies": { 1129 | "@esbuild/android-arm": { 1130 | "version": "0.17.19", 1131 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 1132 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 1133 | "optional": true 1134 | }, 1135 | "@esbuild/android-arm64": { 1136 | "version": "0.17.19", 1137 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 1138 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 1139 | "optional": true 1140 | }, 1141 | "@esbuild/android-x64": { 1142 | "version": "0.17.19", 1143 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 1144 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 1145 | "optional": true 1146 | }, 1147 | "@esbuild/darwin-arm64": { 1148 | "version": "0.17.19", 1149 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 1150 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 1151 | "optional": true 1152 | }, 1153 | "@esbuild/darwin-x64": { 1154 | "version": "0.17.19", 1155 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 1156 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 1157 | "optional": true 1158 | }, 1159 | "@esbuild/freebsd-arm64": { 1160 | "version": "0.17.19", 1161 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 1162 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 1163 | "optional": true 1164 | }, 1165 | "@esbuild/freebsd-x64": { 1166 | "version": "0.17.19", 1167 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 1168 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 1169 | "optional": true 1170 | }, 1171 | "@esbuild/linux-arm": { 1172 | "version": "0.17.19", 1173 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 1174 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 1175 | "optional": true 1176 | }, 1177 | "@esbuild/linux-arm64": { 1178 | "version": "0.17.19", 1179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 1180 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 1181 | "optional": true 1182 | }, 1183 | "@esbuild/linux-ia32": { 1184 | "version": "0.17.19", 1185 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 1186 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 1187 | "optional": true 1188 | }, 1189 | "@esbuild/linux-loong64": { 1190 | "version": "0.17.19", 1191 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 1192 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 1193 | "optional": true 1194 | }, 1195 | "@esbuild/linux-mips64el": { 1196 | "version": "0.17.19", 1197 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 1198 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 1199 | "optional": true 1200 | }, 1201 | "@esbuild/linux-ppc64": { 1202 | "version": "0.17.19", 1203 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 1204 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 1205 | "optional": true 1206 | }, 1207 | "@esbuild/linux-riscv64": { 1208 | "version": "0.17.19", 1209 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 1210 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 1211 | "optional": true 1212 | }, 1213 | "@esbuild/linux-s390x": { 1214 | "version": "0.17.19", 1215 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 1216 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 1217 | "optional": true 1218 | }, 1219 | "@esbuild/linux-x64": { 1220 | "version": "0.17.19", 1221 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 1222 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 1223 | "optional": true 1224 | }, 1225 | "@esbuild/netbsd-x64": { 1226 | "version": "0.17.19", 1227 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 1228 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 1229 | "optional": true 1230 | }, 1231 | "@esbuild/openbsd-x64": { 1232 | "version": "0.17.19", 1233 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 1234 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 1235 | "optional": true 1236 | }, 1237 | "@esbuild/sunos-x64": { 1238 | "version": "0.17.19", 1239 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 1240 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 1241 | "optional": true 1242 | }, 1243 | "@esbuild/win32-arm64": { 1244 | "version": "0.17.19", 1245 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 1246 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 1247 | "optional": true 1248 | }, 1249 | "@esbuild/win32-ia32": { 1250 | "version": "0.17.19", 1251 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 1252 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 1253 | "optional": true 1254 | }, 1255 | "@esbuild/win32-x64": { 1256 | "version": "0.17.19", 1257 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 1258 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 1259 | "optional": true 1260 | }, 1261 | "@friday/core": { 1262 | "version": "file:../../core", 1263 | "requires": { 1264 | "esbuild": "^0.17.19", 1265 | "fs": "^0.0.1-security", 1266 | "node-fetch": "^3.3.1" 1267 | } 1268 | }, 1269 | "accepts": { 1270 | "version": "1.3.8", 1271 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1272 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1273 | "requires": { 1274 | "mime-types": "~2.1.34", 1275 | "negotiator": "0.6.3" 1276 | } 1277 | }, 1278 | "array-flatten": { 1279 | "version": "1.1.1", 1280 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1281 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 1282 | }, 1283 | "asynckit": { 1284 | "version": "0.4.0", 1285 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1286 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 1287 | }, 1288 | "axios": { 1289 | "version": "0.26.1", 1290 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", 1291 | "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", 1292 | "requires": { 1293 | "follow-redirects": "^1.14.8" 1294 | } 1295 | }, 1296 | "body-parser": { 1297 | "version": "1.20.2", 1298 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 1299 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 1300 | "requires": { 1301 | "bytes": "3.1.2", 1302 | "content-type": "~1.0.5", 1303 | "debug": "2.6.9", 1304 | "depd": "2.0.0", 1305 | "destroy": "1.2.0", 1306 | "http-errors": "2.0.0", 1307 | "iconv-lite": "0.4.24", 1308 | "on-finished": "2.4.1", 1309 | "qs": "6.11.0", 1310 | "raw-body": "2.5.2", 1311 | "type-is": "~1.6.18", 1312 | "unpipe": "1.0.0" 1313 | } 1314 | }, 1315 | "bytes": { 1316 | "version": "3.1.2", 1317 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 1318 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 1319 | }, 1320 | "call-bind": { 1321 | "version": "1.0.2", 1322 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1323 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1324 | "requires": { 1325 | "function-bind": "^1.1.1", 1326 | "get-intrinsic": "^1.0.2" 1327 | } 1328 | }, 1329 | "combined-stream": { 1330 | "version": "1.0.8", 1331 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1332 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1333 | "requires": { 1334 | "delayed-stream": "~1.0.0" 1335 | } 1336 | }, 1337 | "content-disposition": { 1338 | "version": "0.5.4", 1339 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 1340 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 1341 | "requires": { 1342 | "safe-buffer": "5.2.1" 1343 | } 1344 | }, 1345 | "content-type": { 1346 | "version": "1.0.5", 1347 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 1348 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" 1349 | }, 1350 | "cookie": { 1351 | "version": "0.5.0", 1352 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1353 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 1354 | }, 1355 | "cookie-signature": { 1356 | "version": "1.0.6", 1357 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1358 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 1359 | }, 1360 | "cors": { 1361 | "version": "2.8.5", 1362 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 1363 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 1364 | "requires": { 1365 | "object-assign": "^4", 1366 | "vary": "^1" 1367 | } 1368 | }, 1369 | "debug": { 1370 | "version": "2.6.9", 1371 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1372 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1373 | "requires": { 1374 | "ms": "2.0.0" 1375 | } 1376 | }, 1377 | "delayed-stream": { 1378 | "version": "1.0.0", 1379 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1380 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 1381 | }, 1382 | "depd": { 1383 | "version": "2.0.0", 1384 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1385 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 1386 | }, 1387 | "destroy": { 1388 | "version": "1.2.0", 1389 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1390 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 1391 | }, 1392 | "dotenv": { 1393 | "version": "16.0.3", 1394 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 1395 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" 1396 | }, 1397 | "ee-first": { 1398 | "version": "1.1.1", 1399 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1400 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 1401 | }, 1402 | "encodeurl": { 1403 | "version": "1.0.2", 1404 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1405 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 1406 | }, 1407 | "esbuild": { 1408 | "version": "0.17.19", 1409 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 1410 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 1411 | "requires": { 1412 | "@esbuild/android-arm": "0.17.19", 1413 | "@esbuild/android-arm64": "0.17.19", 1414 | "@esbuild/android-x64": "0.17.19", 1415 | "@esbuild/darwin-arm64": "0.17.19", 1416 | "@esbuild/darwin-x64": "0.17.19", 1417 | "@esbuild/freebsd-arm64": "0.17.19", 1418 | "@esbuild/freebsd-x64": "0.17.19", 1419 | "@esbuild/linux-arm": "0.17.19", 1420 | "@esbuild/linux-arm64": "0.17.19", 1421 | "@esbuild/linux-ia32": "0.17.19", 1422 | "@esbuild/linux-loong64": "0.17.19", 1423 | "@esbuild/linux-mips64el": "0.17.19", 1424 | "@esbuild/linux-ppc64": "0.17.19", 1425 | "@esbuild/linux-riscv64": "0.17.19", 1426 | "@esbuild/linux-s390x": "0.17.19", 1427 | "@esbuild/linux-x64": "0.17.19", 1428 | "@esbuild/netbsd-x64": "0.17.19", 1429 | "@esbuild/openbsd-x64": "0.17.19", 1430 | "@esbuild/sunos-x64": "0.17.19", 1431 | "@esbuild/win32-arm64": "0.17.19", 1432 | "@esbuild/win32-ia32": "0.17.19", 1433 | "@esbuild/win32-x64": "0.17.19" 1434 | } 1435 | }, 1436 | "escape-html": { 1437 | "version": "1.0.3", 1438 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1439 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 1440 | }, 1441 | "etag": { 1442 | "version": "1.8.1", 1443 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1444 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 1445 | }, 1446 | "express": { 1447 | "version": "4.18.2", 1448 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 1449 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 1450 | "requires": { 1451 | "accepts": "~1.3.8", 1452 | "array-flatten": "1.1.1", 1453 | "body-parser": "1.20.1", 1454 | "content-disposition": "0.5.4", 1455 | "content-type": "~1.0.4", 1456 | "cookie": "0.5.0", 1457 | "cookie-signature": "1.0.6", 1458 | "debug": "2.6.9", 1459 | "depd": "2.0.0", 1460 | "encodeurl": "~1.0.2", 1461 | "escape-html": "~1.0.3", 1462 | "etag": "~1.8.1", 1463 | "finalhandler": "1.2.0", 1464 | "fresh": "0.5.2", 1465 | "http-errors": "2.0.0", 1466 | "merge-descriptors": "1.0.1", 1467 | "methods": "~1.1.2", 1468 | "on-finished": "2.4.1", 1469 | "parseurl": "~1.3.3", 1470 | "path-to-regexp": "0.1.7", 1471 | "proxy-addr": "~2.0.7", 1472 | "qs": "6.11.0", 1473 | "range-parser": "~1.2.1", 1474 | "safe-buffer": "5.2.1", 1475 | "send": "0.18.0", 1476 | "serve-static": "1.15.0", 1477 | "setprototypeof": "1.2.0", 1478 | "statuses": "2.0.1", 1479 | "type-is": "~1.6.18", 1480 | "utils-merge": "1.0.1", 1481 | "vary": "~1.1.2" 1482 | }, 1483 | "dependencies": { 1484 | "body-parser": { 1485 | "version": "1.20.1", 1486 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 1487 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 1488 | "requires": { 1489 | "bytes": "3.1.2", 1490 | "content-type": "~1.0.4", 1491 | "debug": "2.6.9", 1492 | "depd": "2.0.0", 1493 | "destroy": "1.2.0", 1494 | "http-errors": "2.0.0", 1495 | "iconv-lite": "0.4.24", 1496 | "on-finished": "2.4.1", 1497 | "qs": "6.11.0", 1498 | "raw-body": "2.5.1", 1499 | "type-is": "~1.6.18", 1500 | "unpipe": "1.0.0" 1501 | } 1502 | }, 1503 | "raw-body": { 1504 | "version": "2.5.1", 1505 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1506 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1507 | "requires": { 1508 | "bytes": "3.1.2", 1509 | "http-errors": "2.0.0", 1510 | "iconv-lite": "0.4.24", 1511 | "unpipe": "1.0.0" 1512 | } 1513 | } 1514 | } 1515 | }, 1516 | "finalhandler": { 1517 | "version": "1.2.0", 1518 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 1519 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 1520 | "requires": { 1521 | "debug": "2.6.9", 1522 | "encodeurl": "~1.0.2", 1523 | "escape-html": "~1.0.3", 1524 | "on-finished": "2.4.1", 1525 | "parseurl": "~1.3.3", 1526 | "statuses": "2.0.1", 1527 | "unpipe": "~1.0.0" 1528 | } 1529 | }, 1530 | "follow-redirects": { 1531 | "version": "1.15.2", 1532 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", 1533 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" 1534 | }, 1535 | "form-data": { 1536 | "version": "4.0.0", 1537 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1538 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1539 | "requires": { 1540 | "asynckit": "^0.4.0", 1541 | "combined-stream": "^1.0.8", 1542 | "mime-types": "^2.1.12" 1543 | } 1544 | }, 1545 | "forwarded": { 1546 | "version": "0.2.0", 1547 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1548 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 1549 | }, 1550 | "fresh": { 1551 | "version": "0.5.2", 1552 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1553 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 1554 | }, 1555 | "function-bind": { 1556 | "version": "1.1.1", 1557 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1558 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1559 | }, 1560 | "get-intrinsic": { 1561 | "version": "1.2.1", 1562 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 1563 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 1564 | "requires": { 1565 | "function-bind": "^1.1.1", 1566 | "has": "^1.0.3", 1567 | "has-proto": "^1.0.1", 1568 | "has-symbols": "^1.0.3" 1569 | } 1570 | }, 1571 | "has": { 1572 | "version": "1.0.3", 1573 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1574 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1575 | "requires": { 1576 | "function-bind": "^1.1.1" 1577 | } 1578 | }, 1579 | "has-proto": { 1580 | "version": "1.0.1", 1581 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 1582 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" 1583 | }, 1584 | "has-symbols": { 1585 | "version": "1.0.3", 1586 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1587 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1588 | }, 1589 | "http-errors": { 1590 | "version": "2.0.0", 1591 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1592 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1593 | "requires": { 1594 | "depd": "2.0.0", 1595 | "inherits": "2.0.4", 1596 | "setprototypeof": "1.2.0", 1597 | "statuses": "2.0.1", 1598 | "toidentifier": "1.0.1" 1599 | } 1600 | }, 1601 | "iconv-lite": { 1602 | "version": "0.4.24", 1603 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1604 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1605 | "requires": { 1606 | "safer-buffer": ">= 2.1.2 < 3" 1607 | } 1608 | }, 1609 | "inherits": { 1610 | "version": "2.0.4", 1611 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1612 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1613 | }, 1614 | "ipaddr.js": { 1615 | "version": "1.9.1", 1616 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1617 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 1618 | }, 1619 | "media-typer": { 1620 | "version": "0.3.0", 1621 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1622 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 1623 | }, 1624 | "merge-descriptors": { 1625 | "version": "1.0.1", 1626 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1627 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1628 | }, 1629 | "methods": { 1630 | "version": "1.1.2", 1631 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1632 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 1633 | }, 1634 | "mime": { 1635 | "version": "1.6.0", 1636 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1637 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1638 | }, 1639 | "mime-db": { 1640 | "version": "1.52.0", 1641 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1642 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 1643 | }, 1644 | "mime-types": { 1645 | "version": "2.1.35", 1646 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1647 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1648 | "requires": { 1649 | "mime-db": "1.52.0" 1650 | } 1651 | }, 1652 | "ms": { 1653 | "version": "2.0.0", 1654 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1655 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1656 | }, 1657 | "negotiator": { 1658 | "version": "0.6.3", 1659 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1660 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 1661 | }, 1662 | "object-assign": { 1663 | "version": "4.1.1", 1664 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1665 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 1666 | }, 1667 | "object-inspect": { 1668 | "version": "1.12.3", 1669 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1670 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" 1671 | }, 1672 | "on-finished": { 1673 | "version": "2.4.1", 1674 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1675 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1676 | "requires": { 1677 | "ee-first": "1.1.1" 1678 | } 1679 | }, 1680 | "openai": { 1681 | "version": "3.2.1", 1682 | "resolved": "https://registry.npmjs.org/openai/-/openai-3.2.1.tgz", 1683 | "integrity": "sha512-762C9BNlJPbjjlWZi4WYK9iM2tAVAv0uUp1UmI34vb0CN5T2mjB/qM6RYBmNKMh/dN9fC+bxqPwWJZUTWW052A==", 1684 | "requires": { 1685 | "axios": "^0.26.0", 1686 | "form-data": "^4.0.0" 1687 | } 1688 | }, 1689 | "parseurl": { 1690 | "version": "1.3.3", 1691 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1692 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1693 | }, 1694 | "path-to-regexp": { 1695 | "version": "0.1.7", 1696 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1697 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1698 | }, 1699 | "proxy-addr": { 1700 | "version": "2.0.7", 1701 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1702 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1703 | "requires": { 1704 | "forwarded": "0.2.0", 1705 | "ipaddr.js": "1.9.1" 1706 | } 1707 | }, 1708 | "qs": { 1709 | "version": "6.11.0", 1710 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1711 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1712 | "requires": { 1713 | "side-channel": "^1.0.4" 1714 | } 1715 | }, 1716 | "range-parser": { 1717 | "version": "1.2.1", 1718 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1719 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1720 | }, 1721 | "raw-body": { 1722 | "version": "2.5.2", 1723 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 1724 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 1725 | "requires": { 1726 | "bytes": "3.1.2", 1727 | "http-errors": "2.0.0", 1728 | "iconv-lite": "0.4.24", 1729 | "unpipe": "1.0.0" 1730 | } 1731 | }, 1732 | "safe-buffer": { 1733 | "version": "5.2.1", 1734 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1735 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1736 | }, 1737 | "safer-buffer": { 1738 | "version": "2.1.2", 1739 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1740 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1741 | }, 1742 | "send": { 1743 | "version": "0.18.0", 1744 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1745 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1746 | "requires": { 1747 | "debug": "2.6.9", 1748 | "depd": "2.0.0", 1749 | "destroy": "1.2.0", 1750 | "encodeurl": "~1.0.2", 1751 | "escape-html": "~1.0.3", 1752 | "etag": "~1.8.1", 1753 | "fresh": "0.5.2", 1754 | "http-errors": "2.0.0", 1755 | "mime": "1.6.0", 1756 | "ms": "2.1.3", 1757 | "on-finished": "2.4.1", 1758 | "range-parser": "~1.2.1", 1759 | "statuses": "2.0.1" 1760 | }, 1761 | "dependencies": { 1762 | "ms": { 1763 | "version": "2.1.3", 1764 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1765 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1766 | } 1767 | } 1768 | }, 1769 | "serve-static": { 1770 | "version": "1.15.0", 1771 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1772 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1773 | "requires": { 1774 | "encodeurl": "~1.0.2", 1775 | "escape-html": "~1.0.3", 1776 | "parseurl": "~1.3.3", 1777 | "send": "0.18.0" 1778 | } 1779 | }, 1780 | "setprototypeof": { 1781 | "version": "1.2.0", 1782 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1783 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1784 | }, 1785 | "side-channel": { 1786 | "version": "1.0.4", 1787 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1788 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1789 | "requires": { 1790 | "call-bind": "^1.0.0", 1791 | "get-intrinsic": "^1.0.2", 1792 | "object-inspect": "^1.9.0" 1793 | } 1794 | }, 1795 | "statuses": { 1796 | "version": "2.0.1", 1797 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1798 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1799 | }, 1800 | "toidentifier": { 1801 | "version": "1.0.1", 1802 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1803 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1804 | }, 1805 | "type-is": { 1806 | "version": "1.6.18", 1807 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1808 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1809 | "requires": { 1810 | "media-typer": "0.3.0", 1811 | "mime-types": "~2.1.24" 1812 | } 1813 | }, 1814 | "unpipe": { 1815 | "version": "1.0.0", 1816 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1817 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1818 | }, 1819 | "utils-merge": { 1820 | "version": "1.0.1", 1821 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1822 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1823 | }, 1824 | "vary": { 1825 | "version": "1.1.2", 1826 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1827 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1828 | } 1829 | } 1830 | } 1831 | -------------------------------------------------------------------------------- /web/backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "esbuild src/index.js --platform=node --format=cjs --bundle --outdir=dist && node dist/index.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@friday/core": "file:../../core", 14 | "body-parser": "^1.20.2", 15 | "cors": "^2.8.5", 16 | "dotenv": "^16.0.3", 17 | "esbuild": "^0.17.19", 18 | "express": "^4.18.2", 19 | "openai": "^3.2.1" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /web/backend/src/index.js: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import bodyParser from "body-parser"; 3 | import { config } from "dotenv"; 4 | import cors from "cors" 5 | import { FridayNodeJs } from '@friday/core'; 6 | config(); 7 | 8 | const app = express(); 9 | const port = 3000; 10 | app.use(cors()) 11 | 12 | app.use(bodyParser.json()); 13 | app.post('/gen', async (req, res) => { 14 | const { core, sections } = req.body; 15 | // console.log(core, req.body, sections); 16 | 17 | const fr = new FridayNodeJs({ 18 | aiConfig: { 19 | apiKey: process.env.AI_TOKEN, 20 | endPoint: process.env.AI_ENDPOINT, 21 | model: "gpt-4" 22 | } 23 | }) 24 | const fridayRes = await fr.generate({basePrompt:core, sections}); 25 | console.log(fridayRes); 26 | res.writeHead(200, { 27 | 'Content-Type': 'application/json', 28 | 'Transfer-Encoding': 'chunked', 29 | }); 30 | 31 | res.flushHeaders(); 32 | 33 | let isDone = false; 34 | for await (const data of fridayRes) { 35 | res.write(JSON.stringify(data)); 36 | console.log(data); 37 | if (data.done) { 38 | isDone = true; 39 | console.log(`generate time: ${data.time / 1000} sec`); 40 | } 41 | } 42 | 43 | if (isDone) { 44 | const dir = "../../projects/last" 45 | await fr.createProject(dir, fr.data); 46 | } 47 | res.end(); 48 | }); 49 | 50 | app.listen(port, () => { 51 | console.log(`Server is listening on port ${port}`); 52 | }); -------------------------------------------------------------------------------- /web/frontend/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { browser: true, es2020: true }, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:react/recommended', 6 | 'plugin:react/jsx-runtime', 7 | 'plugin:react-hooks/recommended', 8 | ], 9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, 10 | settings: { react: { version: '18.2' } }, 11 | plugins: ['react-refresh'], 12 | rules: { 13 | 'react-refresh/only-export-components': 'warn', 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /web/frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /web/frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |