Trudy commited on
Commit
daabc69
·
1 Parent(s): f40f415

runs locally with live reload now

Browse files
README.md CHANGED
@@ -24,13 +24,21 @@ To get started, [create a free Gemini API key](https://aistudio.google.com/apike
24
  GEMINI_API_KEY=your_api_key
25
  ```
26
 
27
- Since this is a modified version of the [Multimodal Live API Console](https://github.com/google-gemini/multimodal-live-api-web-console), you will need to run the server proxy locally with the frontend built.
 
 
 
 
 
 
 
 
28
 
29
  ```
30
- $ npm run build && npm run start-server
31
  ```
32
 
33
- The app should run on `http://localhost:3001`
34
 
35
  ## Note
36
 
 
24
  GEMINI_API_KEY=your_api_key
25
  ```
26
 
27
+ ## Live Reload Version
28
+
29
+ Since this is a modified version of the [Multimodal Live API Console](https://github.com/google-gemini/multimodal-live-api-web-console), you will need to run the server proxy and the frontend separately.
30
+
31
+ In 2 separate terminals, run the following commands:
32
+
33
+ ```
34
+ $ npm run start
35
+ ```
36
 
37
  ```
38
+ $ npm run start-server
39
  ```
40
 
41
+ The app should run on `http://localhost:3000`
42
 
43
  ## Note
44
 
package-lock.json CHANGED
@@ -9,8 +9,10 @@
9
  "version": "0.1.0",
10
  "dependencies": {
11
  "classnames": "^2.5.1",
 
12
  "dotenv-flow": "^4.1.0",
13
  "eventemitter3": "^5.0.1",
 
14
  "lodash": "^4.17.21",
15
  "react": "^18.3.1",
16
  "react-dom": "^18.3.1",
@@ -23,6 +25,8 @@
23
  "vega-embed": "^6.29.0",
24
  "vega-lite": "^5.22.0",
25
  "web-vitals": "^2.1.4",
 
 
26
  "zustand": "^5.0.1"
27
  },
28
  "devDependencies": {
@@ -30,12 +34,15 @@
30
  "@testing-library/jest-dom": "^5.17.0",
31
  "@testing-library/react": "^13.4.0",
32
  "@testing-library/user-event": "^13.5.0",
 
33
  "@types/jest": "^27.5.2",
34
  "@types/lodash": "^4.17.13",
35
  "@types/node": "^16.18.119",
36
  "@types/react": "^18.3.12",
37
  "@types/react-dom": "^18.3.1",
38
  "@types/react-syntax-highlighter": "^15.5.13",
 
 
39
  "ts-node": "^10.9.2",
40
  "typescript": "^5.6.3"
41
  }
@@ -1986,7 +1993,7 @@
1986
  "version": "0.8.1",
1987
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
1988
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
1989
- "devOptional": true,
1990
  "dependencies": {
1991
  "@jridgewell/trace-mapping": "0.3.9"
1992
  },
@@ -1998,7 +2005,7 @@
1998
  "version": "0.3.9",
1999
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
2000
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
2001
- "devOptional": true,
2002
  "dependencies": {
2003
  "@jridgewell/resolve-uri": "^3.0.3",
2004
  "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -3723,36 +3730,6 @@
3723
  "url": "https://github.com/sponsors/gregberge"
3724
  }
3725
  },
3726
- "node_modules/@testing-library/dom": {
3727
- "version": "10.4.0",
3728
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
3729
- "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
3730
- "dev": true,
3731
- "peer": true,
3732
- "dependencies": {
3733
- "@babel/code-frame": "^7.10.4",
3734
- "@babel/runtime": "^7.12.5",
3735
- "@types/aria-query": "^5.0.1",
3736
- "aria-query": "5.3.0",
3737
- "chalk": "^4.1.0",
3738
- "dom-accessibility-api": "^0.5.9",
3739
- "lz-string": "^1.5.0",
3740
- "pretty-format": "^27.0.2"
3741
- },
3742
- "engines": {
3743
- "node": ">=18"
3744
- }
3745
- },
3746
- "node_modules/@testing-library/dom/node_modules/aria-query": {
3747
- "version": "5.3.0",
3748
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
3749
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
3750
- "dev": true,
3751
- "peer": true,
3752
- "dependencies": {
3753
- "dequal": "^2.0.3"
3754
- }
3755
- },
3756
  "node_modules/@testing-library/jest-dom": {
3757
  "version": "5.17.0",
3758
  "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz",
@@ -3870,25 +3847,25 @@
3870
  "version": "1.0.11",
3871
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
3872
  "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
3873
- "devOptional": true
3874
  },
3875
  "node_modules/@tsconfig/node12": {
3876
  "version": "1.0.11",
3877
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
3878
  "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
3879
- "devOptional": true
3880
  },
3881
  "node_modules/@tsconfig/node14": {
3882
  "version": "1.0.3",
3883
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
3884
  "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
3885
- "devOptional": true
3886
  },
3887
  "node_modules/@tsconfig/node16": {
3888
  "version": "1.0.4",
3889
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
3890
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
3891
- "devOptional": true
3892
  },
3893
  "node_modules/@types/aria-query": {
3894
  "version": "5.0.4",
@@ -5580,6 +5557,19 @@
5580
  "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
5581
  "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
5582
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
5583
  "node_modules/builtin-modules": {
5584
  "version": "3.3.0",
5585
  "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
@@ -6151,7 +6141,7 @@
6151
  "version": "1.1.1",
6152
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
6153
  "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
6154
- "devOptional": true
6155
  },
6156
  "node_modules/cross-spawn": {
6157
  "version": "7.0.5",
@@ -6530,6 +6520,19 @@
6530
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
6531
  "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
6532
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
6533
  "node_modules/d3-array": {
6534
  "version": "3.2.4",
6535
  "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
@@ -6975,16 +6978,6 @@
6975
  "node": ">= 0.8"
6976
  }
6977
  },
6978
- "node_modules/dequal": {
6979
- "version": "2.0.3",
6980
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
6981
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
6982
- "dev": true,
6983
- "peer": true,
6984
- "engines": {
6985
- "node": ">=6"
6986
- }
6987
- },
6988
  "node_modules/destroy": {
6989
  "version": "1.2.0",
6990
  "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
@@ -7057,7 +7050,7 @@
7057
  "version": "4.0.2",
7058
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
7059
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
7060
- "devOptional": true,
7061
  "engines": {
7062
  "node": ">=0.3.1"
7063
  }
@@ -7212,11 +7205,15 @@
7212
  }
7213
  },
7214
  "node_modules/dotenv": {
7215
- "version": "10.0.0",
7216
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
7217
- "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
 
7218
  "engines": {
7219
- "node": ">=10"
 
 
 
7220
  }
7221
  },
7222
  "node_modules/dotenv-expand": {
@@ -7235,17 +7232,6 @@
7235
  "node": ">= 12.0.0"
7236
  }
7237
  },
7238
- "node_modules/dotenv-flow/node_modules/dotenv": {
7239
- "version": "16.4.5",
7240
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
7241
- "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
7242
- "engines": {
7243
- "node": ">=12"
7244
- },
7245
- "funding": {
7246
- "url": "https://dotenvx.com"
7247
- }
7248
- },
7249
  "node_modules/duplexer": {
7250
  "version": "0.1.2",
7251
  "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@@ -7529,6 +7515,46 @@
7529
  "url": "https://github.com/sponsors/ljharb"
7530
  }
7531
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7532
  "node_modules/escalade": {
7533
  "version": "3.2.0",
7534
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -8099,6 +8125,21 @@
8099
  "url": "https://github.com/sponsors/sindresorhus"
8100
  }
8101
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8102
  "node_modules/espree": {
8103
  "version": "9.6.1",
8104
  "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -8178,6 +8219,16 @@
8178
  "node": ">= 0.6"
8179
  }
8180
  },
 
 
 
 
 
 
 
 
 
 
8181
  "node_modules/eventemitter3": {
8182
  "version": "5.0.1",
8183
  "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
@@ -8294,6 +8345,15 @@
8294
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
8295
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
8296
  },
 
 
 
 
 
 
 
 
 
8297
  "node_modules/fast-deep-equal": {
8298
  "version": "3.1.3",
8299
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -11524,7 +11584,7 @@
11524
  "version": "1.3.6",
11525
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
11526
  "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
11527
- "devOptional": true
11528
  },
11529
  "node_modules/makeerror": {
11530
  "version": "1.0.12",
@@ -11781,6 +11841,12 @@
11781
  "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
11782
  "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
11783
  },
 
 
 
 
 
 
11784
  "node_modules/no-case": {
11785
  "version": "3.0.4",
11786
  "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -11842,6 +11908,17 @@
11842
  "node": ">= 6.13.0"
11843
  }
11844
  },
 
 
 
 
 
 
 
 
 
 
 
11845
  "node_modules/node-int64": {
11846
  "version": "0.4.0",
11847
  "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -14117,6 +14194,15 @@
14117
  }
14118
  }
14119
  },
 
 
 
 
 
 
 
 
 
14120
  "node_modules/react-select": {
14121
  "version": "5.8.3",
14122
  "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.3.tgz",
@@ -16179,7 +16265,7 @@
16179
  "version": "10.9.2",
16180
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
16181
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
16182
- "devOptional": true,
16183
  "dependencies": {
16184
  "@cspotcode/source-map-support": "^0.8.0",
16185
  "@tsconfig/node10": "^1.0.7",
@@ -16222,7 +16308,7 @@
16222
  "version": "8.3.4",
16223
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
16224
  "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
16225
- "devOptional": true,
16226
  "dependencies": {
16227
  "acorn": "^8.11.0"
16228
  },
@@ -16234,7 +16320,7 @@
16234
  "version": "4.1.3",
16235
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
16236
  "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
16237
- "devOptional": true
16238
  },
16239
  "node_modules/tsconfig-paths": {
16240
  "version": "3.15.0",
@@ -16290,6 +16376,12 @@
16290
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
16291
  "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
16292
  },
 
 
 
 
 
 
16293
  "node_modules/type-check": {
16294
  "version": "0.4.0",
16295
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -16413,6 +16505,7 @@
16413
  "version": "5.6.3",
16414
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
16415
  "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
 
16416
  "bin": {
16417
  "tsc": "bin/tsc",
16418
  "tsserver": "bin/tsserver"
@@ -16576,6 +16669,19 @@
16576
  }
16577
  }
16578
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
16579
  "node_modules/util-deprecate": {
16580
  "version": "1.0.2",
16581
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -16620,7 +16726,7 @@
16620
  "version": "3.0.1",
16621
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
16622
  "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
16623
- "devOptional": true
16624
  },
16625
  "node_modules/v8-to-istanbul": {
16626
  "version": "8.1.1",
@@ -17370,6 +17476,23 @@
17370
  "url": "https://opencollective.com/webpack"
17371
  }
17372
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17373
  "node_modules/websocket-driver": {
17374
  "version": "0.7.4",
17375
  "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -17391,6 +17514,21 @@
17391
  "node": ">=0.8.0"
17392
  }
17393
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17394
  "node_modules/whatwg-encoding": {
17395
  "version": "1.0.5",
17396
  "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
@@ -17921,6 +18059,15 @@
17921
  "node": ">=10"
17922
  }
17923
  },
 
 
 
 
 
 
 
 
 
17924
  "node_modules/yallist": {
17925
  "version": "3.1.1",
17926
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -17963,7 +18110,7 @@
17963
  "version": "3.1.1",
17964
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
17965
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
17966
- "devOptional": true,
17967
  "engines": {
17968
  "node": ">=6"
17969
  }
 
9
  "version": "0.1.0",
10
  "dependencies": {
11
  "classnames": "^2.5.1",
12
+ "dotenv": "^16.4.1",
13
  "dotenv-flow": "^4.1.0",
14
  "eventemitter3": "^5.0.1",
15
+ "express": "^4.18.2",
16
  "lodash": "^4.17.21",
17
  "react": "^18.3.1",
18
  "react-dom": "^18.3.1",
 
25
  "vega-embed": "^6.29.0",
26
  "vega-lite": "^5.22.0",
27
  "web-vitals": "^2.1.4",
28
+ "websocket": "^1.0.34",
29
+ "ws": "^8.16.0",
30
  "zustand": "^5.0.1"
31
  },
32
  "devDependencies": {
 
34
  "@testing-library/jest-dom": "^5.17.0",
35
  "@testing-library/react": "^13.4.0",
36
  "@testing-library/user-event": "^13.5.0",
37
+ "@types/express": "^4.17.21",
38
  "@types/jest": "^27.5.2",
39
  "@types/lodash": "^4.17.13",
40
  "@types/node": "^16.18.119",
41
  "@types/react": "^18.3.12",
42
  "@types/react-dom": "^18.3.1",
43
  "@types/react-syntax-highlighter": "^15.5.13",
44
+ "@types/ws": "^8.5.10",
45
+ "http-proxy-middleware": "^2.0.6",
46
  "ts-node": "^10.9.2",
47
  "typescript": "^5.6.3"
48
  }
 
1993
  "version": "0.8.1",
1994
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
1995
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
1996
+ "dev": true,
1997
  "dependencies": {
1998
  "@jridgewell/trace-mapping": "0.3.9"
1999
  },
 
2005
  "version": "0.3.9",
2006
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
2007
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
2008
+ "dev": true,
2009
  "dependencies": {
2010
  "@jridgewell/resolve-uri": "^3.0.3",
2011
  "@jridgewell/sourcemap-codec": "^1.4.10"
 
3730
  "url": "https://github.com/sponsors/gregberge"
3731
  }
3732
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3733
  "node_modules/@testing-library/jest-dom": {
3734
  "version": "5.17.0",
3735
  "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz",
 
3847
  "version": "1.0.11",
3848
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
3849
  "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
3850
+ "dev": true
3851
  },
3852
  "node_modules/@tsconfig/node12": {
3853
  "version": "1.0.11",
3854
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
3855
  "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
3856
+ "dev": true
3857
  },
3858
  "node_modules/@tsconfig/node14": {
3859
  "version": "1.0.3",
3860
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
3861
  "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
3862
+ "dev": true
3863
  },
3864
  "node_modules/@tsconfig/node16": {
3865
  "version": "1.0.4",
3866
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
3867
  "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
3868
+ "dev": true
3869
  },
3870
  "node_modules/@types/aria-query": {
3871
  "version": "5.0.4",
 
5557
  "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
5558
  "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
5559
  },
5560
+ "node_modules/bufferutil": {
5561
+ "version": "4.0.9",
5562
+ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz",
5563
+ "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==",
5564
+ "hasInstallScript": true,
5565
+ "license": "MIT",
5566
+ "dependencies": {
5567
+ "node-gyp-build": "^4.3.0"
5568
+ },
5569
+ "engines": {
5570
+ "node": ">=6.14.2"
5571
+ }
5572
+ },
5573
  "node_modules/builtin-modules": {
5574
  "version": "3.3.0",
5575
  "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
 
6141
  "version": "1.1.1",
6142
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
6143
  "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
6144
+ "dev": true
6145
  },
6146
  "node_modules/cross-spawn": {
6147
  "version": "7.0.5",
 
6520
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
6521
  "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
6522
  },
6523
+ "node_modules/d": {
6524
+ "version": "1.0.2",
6525
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
6526
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
6527
+ "license": "ISC",
6528
+ "dependencies": {
6529
+ "es5-ext": "^0.10.64",
6530
+ "type": "^2.7.2"
6531
+ },
6532
+ "engines": {
6533
+ "node": ">=0.12"
6534
+ }
6535
+ },
6536
  "node_modules/d3-array": {
6537
  "version": "3.2.4",
6538
  "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
 
6978
  "node": ">= 0.8"
6979
  }
6980
  },
 
 
 
 
 
 
 
 
 
 
6981
  "node_modules/destroy": {
6982
  "version": "1.2.0",
6983
  "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
 
7050
  "version": "4.0.2",
7051
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
7052
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
7053
+ "dev": true,
7054
  "engines": {
7055
  "node": ">=0.3.1"
7056
  }
 
7205
  }
7206
  },
7207
  "node_modules/dotenv": {
7208
+ "version": "16.4.7",
7209
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
7210
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
7211
+ "license": "BSD-2-Clause",
7212
  "engines": {
7213
+ "node": ">=12"
7214
+ },
7215
+ "funding": {
7216
+ "url": "https://dotenvx.com"
7217
  }
7218
  },
7219
  "node_modules/dotenv-expand": {
 
7232
  "node": ">= 12.0.0"
7233
  }
7234
  },
 
 
 
 
 
 
 
 
 
 
 
7235
  "node_modules/duplexer": {
7236
  "version": "0.1.2",
7237
  "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
 
7515
  "url": "https://github.com/sponsors/ljharb"
7516
  }
7517
  },
7518
+ "node_modules/es5-ext": {
7519
+ "version": "0.10.64",
7520
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
7521
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
7522
+ "hasInstallScript": true,
7523
+ "license": "ISC",
7524
+ "dependencies": {
7525
+ "es6-iterator": "^2.0.3",
7526
+ "es6-symbol": "^3.1.3",
7527
+ "esniff": "^2.0.1",
7528
+ "next-tick": "^1.1.0"
7529
+ },
7530
+ "engines": {
7531
+ "node": ">=0.10"
7532
+ }
7533
+ },
7534
+ "node_modules/es6-iterator": {
7535
+ "version": "2.0.3",
7536
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
7537
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
7538
+ "license": "MIT",
7539
+ "dependencies": {
7540
+ "d": "1",
7541
+ "es5-ext": "^0.10.35",
7542
+ "es6-symbol": "^3.1.1"
7543
+ }
7544
+ },
7545
+ "node_modules/es6-symbol": {
7546
+ "version": "3.1.4",
7547
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
7548
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
7549
+ "license": "ISC",
7550
+ "dependencies": {
7551
+ "d": "^1.0.2",
7552
+ "ext": "^1.7.0"
7553
+ },
7554
+ "engines": {
7555
+ "node": ">=0.12"
7556
+ }
7557
+ },
7558
  "node_modules/escalade": {
7559
  "version": "3.2.0",
7560
  "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
 
8125
  "url": "https://github.com/sponsors/sindresorhus"
8126
  }
8127
  },
8128
+ "node_modules/esniff": {
8129
+ "version": "2.0.1",
8130
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
8131
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
8132
+ "license": "ISC",
8133
+ "dependencies": {
8134
+ "d": "^1.0.1",
8135
+ "es5-ext": "^0.10.62",
8136
+ "event-emitter": "^0.3.5",
8137
+ "type": "^2.7.2"
8138
+ },
8139
+ "engines": {
8140
+ "node": ">=0.10"
8141
+ }
8142
+ },
8143
  "node_modules/espree": {
8144
  "version": "9.6.1",
8145
  "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
 
8219
  "node": ">= 0.6"
8220
  }
8221
  },
8222
+ "node_modules/event-emitter": {
8223
+ "version": "0.3.5",
8224
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
8225
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
8226
+ "license": "MIT",
8227
+ "dependencies": {
8228
+ "d": "1",
8229
+ "es5-ext": "~0.10.14"
8230
+ }
8231
+ },
8232
  "node_modules/eventemitter3": {
8233
  "version": "5.0.1",
8234
  "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
 
8345
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
8346
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
8347
  },
8348
+ "node_modules/ext": {
8349
+ "version": "1.7.0",
8350
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
8351
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
8352
+ "license": "ISC",
8353
+ "dependencies": {
8354
+ "type": "^2.7.2"
8355
+ }
8356
+ },
8357
  "node_modules/fast-deep-equal": {
8358
  "version": "3.1.3",
8359
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
 
11584
  "version": "1.3.6",
11585
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
11586
  "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
11587
+ "dev": true
11588
  },
11589
  "node_modules/makeerror": {
11590
  "version": "1.0.12",
 
11841
  "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
11842
  "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
11843
  },
11844
+ "node_modules/next-tick": {
11845
+ "version": "1.1.0",
11846
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
11847
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
11848
+ "license": "ISC"
11849
+ },
11850
  "node_modules/no-case": {
11851
  "version": "3.0.4",
11852
  "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
 
11908
  "node": ">= 6.13.0"
11909
  }
11910
  },
11911
+ "node_modules/node-gyp-build": {
11912
+ "version": "4.8.4",
11913
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
11914
+ "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
11915
+ "license": "MIT",
11916
+ "bin": {
11917
+ "node-gyp-build": "bin.js",
11918
+ "node-gyp-build-optional": "optional.js",
11919
+ "node-gyp-build-test": "build-test.js"
11920
+ }
11921
+ },
11922
  "node_modules/node-int64": {
11923
  "version": "0.4.0",
11924
  "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
 
14194
  }
14195
  }
14196
  },
14197
+ "node_modules/react-scripts/node_modules/dotenv": {
14198
+ "version": "10.0.0",
14199
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
14200
+ "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
14201
+ "license": "BSD-2-Clause",
14202
+ "engines": {
14203
+ "node": ">=10"
14204
+ }
14205
+ },
14206
  "node_modules/react-select": {
14207
  "version": "5.8.3",
14208
  "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.3.tgz",
 
16265
  "version": "10.9.2",
16266
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
16267
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
16268
+ "dev": true,
16269
  "dependencies": {
16270
  "@cspotcode/source-map-support": "^0.8.0",
16271
  "@tsconfig/node10": "^1.0.7",
 
16308
  "version": "8.3.4",
16309
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
16310
  "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
16311
+ "dev": true,
16312
  "dependencies": {
16313
  "acorn": "^8.11.0"
16314
  },
 
16320
  "version": "4.1.3",
16321
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
16322
  "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
16323
+ "dev": true
16324
  },
16325
  "node_modules/tsconfig-paths": {
16326
  "version": "3.15.0",
 
16376
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
16377
  "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
16378
  },
16379
+ "node_modules/type": {
16380
+ "version": "2.7.3",
16381
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
16382
+ "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
16383
+ "license": "ISC"
16384
+ },
16385
  "node_modules/type-check": {
16386
  "version": "0.4.0",
16387
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
 
16505
  "version": "5.6.3",
16506
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
16507
  "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
16508
+ "dev": true,
16509
  "bin": {
16510
  "tsc": "bin/tsc",
16511
  "tsserver": "bin/tsserver"
 
16669
  }
16670
  }
16671
  },
16672
+ "node_modules/utf-8-validate": {
16673
+ "version": "5.0.10",
16674
+ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
16675
+ "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==",
16676
+ "hasInstallScript": true,
16677
+ "license": "MIT",
16678
+ "dependencies": {
16679
+ "node-gyp-build": "^4.3.0"
16680
+ },
16681
+ "engines": {
16682
+ "node": ">=6.14.2"
16683
+ }
16684
+ },
16685
  "node_modules/util-deprecate": {
16686
  "version": "1.0.2",
16687
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
 
16726
  "version": "3.0.1",
16727
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
16728
  "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
16729
+ "dev": true
16730
  },
16731
  "node_modules/v8-to-istanbul": {
16732
  "version": "8.1.1",
 
17476
  "url": "https://opencollective.com/webpack"
17477
  }
17478
  },
17479
+ "node_modules/websocket": {
17480
+ "version": "1.0.35",
17481
+ "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz",
17482
+ "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==",
17483
+ "license": "Apache-2.0",
17484
+ "dependencies": {
17485
+ "bufferutil": "^4.0.1",
17486
+ "debug": "^2.2.0",
17487
+ "es5-ext": "^0.10.63",
17488
+ "typedarray-to-buffer": "^3.1.5",
17489
+ "utf-8-validate": "^5.0.2",
17490
+ "yaeti": "^0.0.6"
17491
+ },
17492
+ "engines": {
17493
+ "node": ">=4.0.0"
17494
+ }
17495
+ },
17496
  "node_modules/websocket-driver": {
17497
  "version": "0.7.4",
17498
  "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
 
17514
  "node": ">=0.8.0"
17515
  }
17516
  },
17517
+ "node_modules/websocket/node_modules/debug": {
17518
+ "version": "2.6.9",
17519
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
17520
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
17521
+ "license": "MIT",
17522
+ "dependencies": {
17523
+ "ms": "2.0.0"
17524
+ }
17525
+ },
17526
+ "node_modules/websocket/node_modules/ms": {
17527
+ "version": "2.0.0",
17528
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
17529
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
17530
+ "license": "MIT"
17531
+ },
17532
  "node_modules/whatwg-encoding": {
17533
  "version": "1.0.5",
17534
  "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
 
18059
  "node": ">=10"
18060
  }
18061
  },
18062
+ "node_modules/yaeti": {
18063
+ "version": "0.0.6",
18064
+ "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
18065
+ "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==",
18066
+ "license": "MIT",
18067
+ "engines": {
18068
+ "node": ">=0.10.32"
18069
+ }
18070
+ },
18071
  "node_modules/yallist": {
18072
  "version": "3.1.1",
18073
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
 
18110
  "version": "3.1.1",
18111
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
18112
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
18113
+ "dev": true,
18114
  "engines": {
18115
  "node": ">=6"
18116
  }
package.json CHANGED
@@ -62,6 +62,7 @@
62
  "@types/react": "^18.3.12",
63
  "@types/react-dom": "^18.3.1",
64
  "@types/react-syntax-highlighter": "^15.5.13",
 
65
  "ts-node": "^10.9.2",
66
  "typescript": "^5.6.3",
67
  "@types/express": "^4.17.21",
 
62
  "@types/react": "^18.3.12",
63
  "@types/react-dom": "^18.3.1",
64
  "@types/react-syntax-highlighter": "^15.5.13",
65
+ "http-proxy-middleware": "^2.0.6",
66
  "ts-node": "^10.9.2",
67
  "typescript": "^5.6.3",
68
  "@types/express": "^4.17.21",
src/contexts/LiveAPIContext.tsx CHANGED
@@ -25,7 +25,9 @@ export type LiveAPIProviderProps = {
25
  };
26
 
27
  export const LiveAPIProvider: FC<LiveAPIProviderProps> = ({
28
- url = `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}/ws`,
 
 
29
  children,
30
  }) => {
31
  const liveAPI = useLiveAPI({ url });
 
25
  };
26
 
27
  export const LiveAPIProvider: FC<LiveAPIProviderProps> = ({
28
+ url = process.env.NODE_ENV === 'development'
29
+ ? `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//localhost:3001/ws`
30
+ : `${window.location.protocol === 'https:' ? 'wss:' : 'ws:'}//${window.location.host}/ws`,
31
  children,
32
  }) => {
33
  const liveAPI = useLiveAPI({ url });
src/setupProxy.js ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const { createProxyMiddleware } = require('http-proxy-middleware');
2
+
3
+ module.exports = function(app) {
4
+ app.use(
5
+ '/ws',
6
+ createProxyMiddleware({
7
+ target: 'http://localhost:3001',
8
+ ws: true, // Enable WebSocket proxying
9
+ changeOrigin: true
10
+ })
11
+ );
12
+ };