corent-mcp 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +11 -2
- package/dist/brand.js +10 -0
- package/dist/http.js +77 -0
- package/dist/oauth.js +678 -0
- package/dist/server.js +68 -8
- package/dist/widget-html.js +2 -0
- package/package.json +10 -6
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Corent
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -41,8 +41,13 @@ For Claude Code: `claude mcp add corent -e CORENT_API_KEY=co_live_... -- npx -y
|
|
|
41
41
|
### Hosted server (no install)
|
|
42
42
|
|
|
43
43
|
The hosted server at `https://mcp.corent.tech/mcp` uses the Streamable HTTP
|
|
44
|
-
transport
|
|
45
|
-
to
|
|
44
|
+
transport and supports **OAuth**: in claude.ai (Settings → Connectors → Add
|
|
45
|
+
custom connector) just enter the URL with no key — you'll be sent to a Corent
|
|
46
|
+
page to approve access. Your API key is verified once, sealed into an encrypted
|
|
47
|
+
connection token, and never shown to the client. Revoking the key in your
|
|
48
|
+
dashboard disconnects the client instantly.
|
|
49
|
+
|
|
50
|
+
Non-OAuth clients can instead pass an API key in the **Authorization header**:
|
|
46
51
|
|
|
47
52
|
```json
|
|
48
53
|
{
|
|
@@ -70,3 +75,7 @@ npm install
|
|
|
70
75
|
npm run build
|
|
71
76
|
CORENT_API_KEY=... node dist/index.js
|
|
72
77
|
```
|
|
78
|
+
|
|
79
|
+
The hosted entrypoint (`dist/http.js`) additionally needs `MCP_TOKEN_SECRET`
|
|
80
|
+
(random string; encrypts OAuth tokens — rotating it logs every connector out)
|
|
81
|
+
and optionally `MCP_PUBLIC_URL` (defaults to `https://mcp.corent.tech`).
|
package/dist/brand.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Corent brand constants for the OAuth consent page.
|
|
3
|
+
* CLASH_BOLD_WOFF2 is frontend/src/app/fonts/ClashDisplay-Bold.woff2 base64-embedded
|
|
4
|
+
* (14.5 KB) so the standalone consent page needs no font hosting. Logo and
|
|
5
|
+
* hero imagery hotlink to the live site, so they stay in sync with the brand.
|
|
6
|
+
*/
|
|
7
|
+
export const CLASH_BOLD_WOFF2 = "d09GMgABAAAAADjQAA8AAAAAsXwAADhvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGoEQG5RcHIduBmAAhyYRCAqCgjiBxD0LhkIAATYCJAONAAQgBY5fB5UgGzmOB8a2rIHdDgCUqnY7CtixJ9wOpL999Hd2oG4JY+ud/f+fkKDGGD5oB6hW1WbBCwOkCEMUUWIoFQ5mrtTaQ2fZqCIxKdzAQkPhXjQkPW476tkq81zhvc5ncPDDnFqsvFya9m9Pg4am0ka5o2H0v/3nsPNG629I0M9WuhkEJkRgQ18mfdLfZrXhnz4dS2XQvN5nKKaqeeHSTpfh3x5aBzkD20b+JCfJC8/zOOef+5KUkrSlK0UsPzOHzhybWWVzYGLWb8z4Jsb2RXzi0rmBuvQMAWAFkWW//SBb8KCkNI20bJ32TkuHJ7f9083hOSbmKucu0JREUgnnREXEtSNNcqM4GoZJYeBKAdeo1GtMs2xMk/r91rBtYxMli1p1z+z9G/VCorAYQrAkCPcapxFKgh2KbLLZ+7TKEg8eYxASB0lF4xEKIzAWp9uYDedD7FTwIVb8/8+pvWfF6Tn3/W+1HQTczYfYckBV2NMBsjOon+6kdjeI4MgDtCPYTQfmHOQ4NX//C7AHNFPV5U09QdABFajQoktNa1Muyzhn27S7BhIgHdPYN7LG7vX0R4Lr6g26q7trUqADIMO/DVDY2CegGhVRAoYBWLVs9nv6/wkf9xUhOs44rP0Qm7yk7HBJYVEn0Sj5jpwUKEMhDEYjlIX/01m2Hs8RKQ6Swk0BWF7SpmrW/8vzVxrNKl7vge0DBmv+SE+WHSB6PVWMNVCXK/rr02JXZ7658m0KgA5JaCJfWSNv6WAm27mdKRDsFiH0JrA8yVJKqJByV/pMihxrAtL4PAr5pQUhzTey/uNaZn+KpIBdaytcrZu8LP1kp4CY2QLxnTQFlEesTvL/f+/0n+79S+2+lP5urO2bJo75nmABBRR7YhlmmvD0zZ/aJ6+aTEsEM7YR9PqVdW++s0nbHTeKvAqhiFFKGQHixzzecf7u+n9Mq+dktjlXem6n2QBBUTGggvARMDnNqVxgMkForP/iC/VVgAD88a3nb4AdX20O0nf++9cZBIUPCAMjmFgI8xksoJks9o+wyy4au9ONIYUJZ0k4ZQxZHDYlq9NEZG0ENHkunQQdUICgAA+QSdClX4KzPwco9HSDSGECX1KVPbzyYLgCBDDpWsapxT8PLlA89VMxNMISt/7tfy74qb6/Dgjw/+5/SIDf2VDbso7iaX/SLCqb9qgy3q/hxi+bDgi5XPhJ0iocP36KIMam50WGcYKHdvWAKiwJVD9Q4cu0DqMywPjgVFCzWxpc3jqoNe5+4FE+jReDr0O926ngZz0J9ZP7A/iPW7Z29UCP5dvP9CvUdYCmQHPDbT4tOGtm7ZiPLbTQst4W7Ixi9sIARjHi+ArQJk7elMz2qQIqVeXBg3oc8Sxfxpt8H9X8At+5X+YvbNA2wB4eet6JOTffod1cWdBN3Q89HS4XqMUGaLa3JfT2sNEVpeqDg4M2ZhOzYzerU58JmM+lx92x7N21bcvbrh++irf5YX098Sv8wN+e989u2h3Q9+2RPbUX9icMZMrFoe6BAgqZtFGHjZBvrSuwYXR8vI16mHo/CoafODDKNH758qlP0VMKxvKnDsYaGPcTebYC1Yp2DaCvF/p70Q2rWc8G29HJiFSw/MA296tCAOQH5DKFjBgjYjgFE9pheiTRWuNngPKUkRPUZY9Lffeio9ykVJTuo+6HDitol0av/qI1bqozQKZYLoNHg4Oqfi8URSyjiGdcNG5Wyi2PV4vIAncHoKaFNXnlDM4ZAO1xaQ+wMlyZjRRZN2bWHcoNgARMbpOrh25aB/q0YHDWRDoqIc6lbNofbaIEQvpkSf8CDrG9Px0clV6bQKKNEI7g2woTFDmmVKm++PUFRDQk2vouFSX1vQi0za0Hv6uFHoCml6Awsq4wl4sudMltla4wTc/NFCJlYBn9VAwWkpAQ3g7faVg+htnh4iOKL5onp/6Jji/siKdKsUpHgUu1FDQ+P9dxvDL503q2xpcw+lyFm7o6g2IH6vXzqN3tybXwgmvpRLZVCN7UHZPa3OxX7mxGw++otqWqD7IHPHhZvCneF9XiC/Gd+EX8JTaIbWLPyXOI4gTFORoJOjfpoqOLiYgfkg7JhdSCNIA0I9IS0h7SFaQUpA/IIJAhTBnFlLEsmcyWmWyZz5albLmD4Ra75uqhmWJVZSan5N9ykdwbV4qxN1SWRtcUtAaJAraRW/2/9KICCUxwNQVKWy+a5a7qwWnSg8ZFWwZxJn/LSnldnioeyCZ36mfk4L1Ro+6QRN1shCHw2mv200oVomPily6XcO1whOpTQThgUg8i0vDndCAAMoEN6rRrK8Q75q8T6cJDppC2Oiu258SVB288jPLhh0pVHvS4Z73sTe+r9gWRkp5kRXwYHZpnitUV9W3b+mM+dDV/Yk7vVZ3KXoPe0KgUz2LvjJOLvF1TVj04U3qcbmkjVvH3TEoxPmUcz5jsBz3lD6Tc3cCRqLhoIjD9v/9cYDEQB5WgCjwIHh+QCv8v8bpLMrsY4WHlbVdFdmqPdH+SQkMnCTfJDzFlvWE6B4Dj2snDGIfJrl3N8s+4wtID+bfE1jPuR3Dwv800cdYf/oqbd/Aex9N8CD0EZYieoYvDM8kLkXpYjVpbB5ksDWlKJTXpku4fpOMhWy2NhLRXaM+FB1ScksxURJgvbPMLTd5WO0HXN1NepKRHcjQPY7SGtcfpk9+MP/Od5KozRXvZKaCEeIXxDD6b4pVd2Z29aQ83bdmZluzLnuzPgfDSEX4EaaVwEZQJyQiGITnRlySF8Zcn/RKuIpxwZBF8CG6UrA2HINKHiQ89D7QP8bB3dz7KzyiybmLJ/YUIvZiYtKRjEmBy14UsmaGappOqF9i1Wgt0ZuFLfSxyTFqEHfLSZLSF7CADXUhyLq2rOGMlz8U/fwuDsJFVTJbUAE3qFr1iZzpQ7hf5EFlL5AGCkj7sXDlAcCNXXkURY8CsK12/lw9bPc201lmpIxfuvHDFCZkqWPR0XC3VjqqpHbajdlB1bb+qzmYNyZsxjde/eq9fLK9v5V6f6rzebfd6VqlLyhA59J5MGqghDxXnUJkiUni36hbDbSlAV5OKMECtaQzQm/Yvo4zF1ufB4+juIez52DrGT95rK7P4XAxb2/0HDwEkUQFwmICm/8tzCYA8TUOAXLrEwQgrssjlZbRv/njNW971kXXBhpSK7M2/coodWc2tebTAWM76wX3cbR+zP++uHIJOtmM7tZx6Tr7T3il2CpwSZ8iZqWlcK1CrR63kWvRr+j/Ai6PcT694wzveV+3TuIWcvfldTLEDNJdmaoExn/WD/YjbiP1plzikOplOruMk7l672qnX+H/b+39PPXHaKSeduOOH3NzN3sz1n+eZHXTze7u1azvcfLzZbi77+vue3Td5X3qsApFtQeLDw6xi+eMnE6dtPxvXP2zyGlDiyFE/nIEx5ZK25E32lW3M5fEFQgARJpRxIZU2rucHYRQnaZYXZVU3bdcP4zQv67Yf53U/7/cDIPTnB4JiOEFSNMNyvECsMOEiRIoSLUasOPESUCRKkowK+KhSo06LVlwHdeDrJNClxyG9+vQTERIbMGTEsFHjxkybctiRMuRJRZdRqQhPrsxmgBaoxgEc7R3SoOfG5zcI4GfSdjSA2loBL4wqKcpV2BNaPFJWUFJaWGQC8M9J11hT29Vdobi4rNoOLEz1arE1atJgl92Ar33atVkBfy8L3UY9D1hdgVWrS+K6FqreqLlBm55dB4J8ZjsUS6LJhKJGZcZiYHJvXNBjSUaQKU5SQWagsA5yd9d8MPMF7FTpRGl/WZzFHMQmsfhYQHYPivmSClSammKAOCMgBmdaFsoTnm4HlC0DhXBESPEpl6VBk+RDrRzcHYipdC4x8483kiwpMcl2xmw6CqIDkYuoZ+l/fnunSBKE0PBBkNzHIOK6BhAp55e0Oizqk8qiANYEeMKPMOTIRlXZKzyH0UQk3skQn2gcTTXRq6Kx19br3PUtO4CUcR1kxbE9w7P7oVcqdsKpQc7XDfArwmXuThEjA2mHx1SCfFsRaRUxlc0ITmBgIlVGR2XY8A6teqnAKgUkeawaRJhIlQFLnYRVIQYZI1TjDW2VITJVRoed963jO+aOiBoYSJe9aB2IRKIgXPjA/qlxuIxiqkuBGY0WKmRN4YVoSTBAV5HaZ1WrCgzPnWmJ6mgvDx2VM0rv2bLtSwb2SNxDrlruaBVPgRJDwT1BcWvRmTJQh7CrQRhhqlnrMR7MdNA4TI2RBFpWEWpYth46YogEXQ0GYvknPPOJz39/T22uZHZbqlWHoYu04qSxYbbYczhzTGWUBVBtBzmutfa91reOWwTV+4RncBVKVMMaZWPIbW1vdbjjF7Vrq1o54dJKVeX6c5s6+2EIoKvT6rTviYu7ao9qIKg32MkZNDsohXILWpFPl6Ke8dnkOty6ggD+yL/zpaVaM1i3tPhzOVhTFf1Fv+bN8JCU4vx+OX6SWRNt/OUH5UfHNNzQIEgYQvldC5YZuGAm5hYx/ULpZDHJBLnFftaXgquoX7kgOcJh4ODoHdGSZ6Gl2wRJuAgfpXjfTpHbuGV+WVOFQbmUj5hd+bP5ofBgcX/+3ye3suvSqmi7uiOChX5JtFgswkICHs6RnpeY4Uyyup+bhas7faS/Ib407pfuMNHB5turxDi/cTTabhJFm41ikWbDSITLwOAEqLCm5AKr9tzKFGtNfRYd4axOshOhN9eIThxd2sdKaawpwz/3VmjWm8XKcBpqWm7ufvl+ilnp2m2oPvCOE5c0olRg7FG9k6bTPyAmK56RmhAqhGH+qtpCMwdX3NrUHB6TCsttZygd1DWbflRdkK//GoW+GLt/whbTheEFzbD0vuH7zZ8fIR6Oqf9KndcYLbG9Irid3W2dI46avkE0TkQJNDP9JgN96J8TODmQY2QGLDUBHW4zWZdkDwU9KRMU6xGzNJvgjFdxmlW/6Ax/31sc2t/9g03cVX/c0tU+Th1xsxpbr29lJboSXXZyuAPfIrdpKjrSN10DzPdvbT59rYo/Uj7EHAYKQUfPwanEiHPQqq7LRpvTQB/A1aHNN5nr0+JKbqeg5Jjqlnj9Kup1by/2W6hJOf/aIFSvvhtPPSaF1o0WzA4SvN42pugaGH0060JaZAisILCxd/EfeEbKExxJLfdfJTEZacIhbtSXWk/VTQtOTt0QeRgD52A/kE10EbemvrwosdOVm99pFj0z74MJSEStq003RAGRbhmG5Z00fWyvCOQe/QyIOHK6l6RrB9oZtvuofjlaY8JPL6ppu15+RXepqHlpSiJajVUS1vU0t1ULZEYTboltWdOuV4OnG1vmvUzGDZ4R7jOTwOVqmSYoWY15sbobIrAeVgkSwR9LFWu7rA/GVpgaoJr5JVG5VV7aJnxIaBdqojDDDj7/E2g7V8Ona3j0WXpSbSR/5UygBGrFNSOtLw70Wre2tRpnfCtQl2Eb43nmwqS5PVvF+k2tJy8ajc5gyTJf+01tZoEYrY0stUWlSXS3WPVEFPVz4hILtjFYNY5DwpXiZRptsipEctU9rUKqI2pVA+9CKcfUrmjJm8fh6H9CSDWM723hbXTd4goel6+FV1u5XZbJZrGN2GszznvQB/LVj5lJ0RdVBhaKSPnrfq2QQ79KjW1teKiqHBQ8ARoZa9T/0Fl4SF/eNijfuka3VAyuuHQa/3ZH4C41z84zFIlaf0wHa7R99otThr1nA47JhCnaSrts6G0wKMGt+0JAFUQloAotFstkfETAT0QvMC+AW7dtNBefMyF4HNL51EeS9ZFpzQhfvxAqoqL3mgUYbhHy0PHlCUf3dk/aL/kFeLjJcLMrMA1L8mptU+TJlShnO3aW9/em7F3QbmzBPl1pspMajkiGRQl+at9b/iW6eohU36CV9EtgV1w7kOnryvyafnuPBPNof5V4qx6ebYzZtROQbzJ/AM5zcrywI36xG82iraZ8VXJt4eageLF74tUTYsGEWPTJ2oM91yDxs/KFeed7TBHoGt2GZqN2gEnWVuO7pi/DV+UXeVVeF64trs5TD4uilGWCMgjJ6x4LUjs5dMPiiWYjoq2kmAWJa8vNxqJt9h5t2FhkbQbeKOqSmXICxl12sHY3vRpeK1/pf96H2bNja6/xGaTiCHTFehfxAzuPCuPImmcYHejOmE4sRbMksXSquft1iu97R6WcUfV/1iYmfIq7B0Xds5zGwp+XOhfF4mioYpIDutzS6hWJk55NJ2Fy6wVeNoJWm8WIhXBUwtijg49sy479qfm+cG9xd96sI3t7JA1RM0Y4HbuBNoyL9QYL/9bXybUOnF6w2tGUCVk+4i+pZsVnqhiNZrEKdRlvC1fVpj6YDi5kLa0WIAKHMxwoBDnOkm1XR465nR05Z6sUJ1y1W4eDRiLSpLnL4sy4VPEV2zFp8RaIHj6Cqd44nWfF+lWjTfUm1prw9AjK1rsDwP2A/4vIuRVPDYNtX+w5CoHr1At3Kieee1wQwdzAkDcMuhaay87Z64m/u9qGDtDdXZ3FUQpxl0fgOckkM6FabJkv+x8vPg2flZ8YqMz4yd7mnudBkU4OOAMTj6cDnfDsa2LJZWvSfsZkd2HUhaKZd69HoWdhotQpCwps89ooojPaiKCoMnjrcQyjai1s/rSfvOD21XIYc5QyC79AGOU/QDCY/sDvK5ArBtetPwZNCYSpFDNR04Or5z3TIjrAnfXmVFcNtme+IarxPG2zjyN2vXW1w31riQNnePO4KsU7i68G5MSqtAfhAJAF8J6BqIqSneBxFyi2bw9d8TofO+5G1S1cLQAYUIMCfZnpRRb56mOvJu5Q7icVOh/aojEzJx/Hhms1WEP2PFx1S9zWJ1kU1/a06txZPHiWIcAtds1ej8vEwMlR7evFp2EvdHMWnGfPHPH6JsQziis+jbN1V35k0cJQlO9ySfwDzw7UK+VWwMe70DZG1oWWIrX/koVNWQfUwMcs6NG5aLZFFntam/KPDyJjUxYbkgYVJf5033Tbsuv34RcGW9LmJPsh2yrWLKz5mc7eCcxxNs4fHhZWWaJOb5cIeN0Rg2ZGwu0NVxHA5UIRSywzWt6JXuK7KdasdFVQLAPfbU+CY5VjDdhcNNK6fgWbWf6T6U3qRZILICVWLy4xZEgRo/HFT2XzaVIzw7GTUPKguTgdNIdWgGlhNP5C88aiq2pA5aJ9I3Jvr+M3+AndDr0QBlTeho4/mEnEkcVk3+dMFJSnw9o4zp5wIsRqtfGjPtCwj4S8F5FxP1sRYyushxCwD6yLUmYh4QTYDCai1ryVsVr3PHNdvlPDvleokcC89eJRyCVAh72cPxo9kGLgxGx6ppV9rTM0NnZNLxPCkqpqBla1NvChkgFc7JPo1Tz7cmi98s5O5Ai2zYbn4p+wcPheGBclyEbihrdIRPsGpW+IPN3JSbosDeQ6lwgzDj+fwCHBllxoE7zPh/6CFP5LAd5OHh0VUuxcXox5UiLPZ1S0t+aT3YBuRPe5ynKJz9LgGgR9U0zRoISAbkvjEyJCSeJtJhz4+0k+0SfRk7KdAQI3O8IfMx5AcUTigT18XLFqDGsbDvTzFCDASf64NbzB+OtMe6VXrO1UFYufctRSmQJoJTazgT3qEi0Zn9Ah4MXH4WlF9kZuVNHql5H3Z0O8t144F4KPZe3YPaiapfn2WEZJPdM4uEXseHdayMpybodYjDZJ41RM++i2Qaw2/Q1LjC4TnoSw6T31a/gEtWLm8BqYw6xeeT5pPHAY8zmdAUwjiT+0E+xpDeR9xknSTmJK17ptUdh69m1UV1LwpeSn7UFLXskQYK+2PZCeamguAoOx9f0DL1SsZyZcduF57sIQOK/WUOmg0pWuEz7Ihs/MZRNwahM0OPTlNl/FSQcqN4QscS/Rsay3AS7O4hhP7m3lqH+ttD5oRoPjy1ZKahKazjM0+lt/ckdBv/1gwerXWf9MNqxi0C9Z6sjyAF7YHrNZY4d6w6R/s3eyTF5vfr6aQZX5OTPJSZc6KQpxTbEwVXPZzPnNhfnQA+cE0tYwnAKnlKef3XVPCJ2i3KuB7f4tdtKdN0RQ38wDu30RTIDuRJAdoHBsbRcxvnHCAxpwTtmKFllNi4w0fl06diDnleLaDbG1wldn7Zu8/Ci46NIscm6MMu7OoHna22kEOI/v8ip+/GNkmB5lIh0AJ8LLxxWYZjPmvJttObBekVvrXNi5PzjA4f5PL2lPOpeJ93qduXRDx9C7WQ+C7zO/HlK2IyZ7ktpXuDp4o8Abxe9SAbdBcBE8p42LsilgX5SFUvYkrU/UvqUcCCsYLPvfsXPf316ihdfWSZz717psudQoTubssotcV+oylLBQ8/ruRmTfAUBRNxQPaIsHDfmK2iNRK0kURfhxUOMB3WXrZV2MrVb/ERjdBesFuiieHLGi5pRCULtPigAq279Zp+ts6bvqa6nrAv1aGl8CkxSGGb/nTI8Vn2F+/VTw64gDI1nUq+fDEl1w23PE6LzL4mzRyHzxbtGNnXqUCMqL+2gYUMZPTHCKNpr4Q/+G/BdaJloJYccx6uMl1/XmdPvDdpSylCijqXTNtG0J8oiKeVm8zycd1eDe64ZXDQ4FZRfmqQH1OFFytCA5RpQcIzgwMY3jTxde9HByJ9oY/PvyYTeMSh4JEI7yOu8fGxIoC3vL+QS6T2lnDtaZjBsadBmNRM5EUnlUtcqdNT8G+hvW680b3cKDMcp4gsOUE6P+PzXAbSdG+VItti1mBxa7Pt+U841OwVkBHn5WsdoWzBgzhgKlDreWEWtqzozXcvP0yw60DwFx1K4uPo/f9eMugOw+n5JNGn+1lLNPrl4OiAwAp+/2dfUB9dXxVYApjYX0cwtACxU0OetBAWF/EzQiM+BORFA8sDFecQNlyOJkpa5HiHHnKKgoZETFpGSvm3aDhDoGs36hpY7wUZX87r39B3aV5cRm0ZN19pmeT09VndN+D5JQAauqF9T1p208ojhGmDPG87wZJ3PdU1sC5s1lLsicwSqh0dRGHz+CPCxU25UiTgW5SJmwkt0nYcaJ4xJE3X0whwu0UGF9WVvlT7tu2xoT/M/m7V9w7qXKPmGxy1fcqcaGbk11T/z6YCsoR518o3dsYnbwIGdgRwbqRrJzHR86Fm4KY0PbwUJGN6N3KtDSyBgTFG1hYhQDQiSe2rmGwbjgLrI7CQvzxLFcr01Ev+B00xgMA8Sj+KNJNBbPEK7DlEQIErgHBAkRJfUY2E8pjBxAG03q6PLX1NWXDiB/0tfVhFZe3W+0lj5EX2sE0lBd9xlYBQ/wNuXwoLDxVxjBSShQw62eXP0h3p+J+gQyWk73xHL5sKObEhcOt68DfC+5x7sHqiU8Cfj2X+n9yXyAmLkR8W0+uq8LVZWOkZ0CO80cZwwLeloH25rz4lxsyV6JZL3Gp+rwk3X0D1lpSYxMzqZH0X0cu8lQ5KHnRgZrvnhXbk3kibbm8lrpGS3hPur65XRj+uHFxZkTPx7fnpec7isrZlNJCY4/0fRIw28xTjhLY/N1ljiwcHMtH17Hv+tcjs+VN6dMmFNsCmDw/ynBwHJPa788RJWhhZNmn69G3tMnYHRqDW6/o7wzrsEVmgAWavjsrMfZ2WHxcW692g01dy+HsHQfwnkfQnqYl4P7orCelgfMcEG48NSYBzv1r3IDuM6kVmVCEU9qJYHCzQdQzA1hi9gRXCBBBNHijtQWUQugovhjsx5XZqcHTrTsULiR1HyzeUzuFpal55A0U680teSN7oaM9+NPQn7gfnzIb9y7mwa8UcLWve1rLmAsNiddsAqM8W640Djjd2JdVUPP90cvSI8jHnW8bQSUTTf8pbb0nv0rIwzB+KESrX8CREs+HzbLp608pa2Y5cPy+bWB9l+Y+Uk9ACu2yvRXnJMK18IKlaAeNXxu1oMHhsfPzeCHjE2m+xHOD6SnbSacL7T4bHFpU+1KU13pkW7/nt4e193OTrvBsZZvOXX70UNHOAKypju3ZvfSTQ/t//E7N9Q1ZtJCo+IpaOjXW/8w4XJwr9bChkA11oLNDysLyBqkoMifDWHT8QcrRQcFlcVa8H9K5G0HR5Evb8X7xCtgDSpqYH8TC2FsOT17egsDYTUBNWUl/pOh/+HX/38MhnSa+TewEWrt8Jr22Ai90AiddlijHR9xZT9fx8fQ5jrc7DpY+fqbBP/2+9p9F3787tdf/vCvzV+7lmEkyG3bC69SBTgKjKOkCl47L4CuBnEqHk4Sl4tL8HA58NhopG3EK3xcCPS11qTyyFGdt/LlwaLO6HbWgzLWqMs9mMK6DFYGOImKJJAIW3tUFlMhMx9XB20jWUQ6lbetqrqWkWM0lgUZFnP2adj5tTseUCsCV8YEiCWEae7LK21klpc3FcdQfNFkCF3kWkckYFNxBGK1C8ChGvjNq/zmhur9ZXTVOUUzlDP2WcFTrHM3P6dGxx8EpJOLy5vKmaWNeX2YZsgSEYyxITSZ4svGpmIJxDpXBZdqIgFsQLF5O9hlgpYqFreqVMu6Wf+hJ7ZWB40oRbZnsspdfyTdDkYBuS8SN/NIKuRdcdss632tbaX38urBH2xBWWludkVpQa9mJcQY60XZ1bVm0ZB1Ur74MHwWpFV2/pn5O4I3yVzBYos3YUV1n70JUvKlxsdRU3NiPJG/6+WrJp3BshlSuj79HbncomxCUm/SMDNdRe4W5UW3OD0yNm/kwcTqqPSDSV3xhXx9zfexA5CiX1RcTGRCrAKpfzg2Lp6SnBFFRP6uZ7jjiM6yXyuIe3yp8Ykp9MarXZfwnhxnMIOCulrKtnc1Q3zv9rJUTMWFvIWKhTywLEZ65oooqmJECEoExuOElwX8REkniD3Wg9hCCv/l34HCzfL0+2SogyBCmD8phEwJSUU2rj1qZn7ECNii6lqSY2QRSBNab7+g7MGZtKp0qlZtqUhgKc3JIvJaHzbYdKigmzk0KAsd5edNaowF3DpqelKygMwjRyPRrbzWWkPa2jiwghqfMSHPXPplR3oXU+LBmZf/f7uxwwuu8LoC6G8qvp0xmVafhK3mnbo/cV5zF+HUSePpk3Xf3ngtmLbDZu1g+cncZ2jux/M0LpTCHbiv3NffgzkQaBHHD+zVmf7w8U7UOZNieO1W8pkb79D1oph44GLaNV2W4QpnKAgPyXedq6A6wVTUbdI2GubkZcR6GAhN9Mf0TYQGHrF5GTmGR0ysLBxKK5UqSx0srEzARdpw2jDALON9V2dX+Pb6ZYUdNut4EZpiGFUKow5uaNhm7qcaqh4JaesD289L40sDYO2DDtpooylUjfw6elpebYpG4mhSjEZqQehGGRmamr/6xAP3nnRPlUND4n1iAsFKXq+K561unSAo4PCba3JUZ9St9pM2fzdegzrFx7kcPd6vv/d4xU1Xvvowgw/BQYd8mZ+arhTz7v39xdMDDxjDzcNp8oMInFDle1KjZBFI5x3WelBZyU1jXIeoeLmhadANaKHI1Y+VWFG79CXdNKVAc6/nm3wpqEKFo6Vaw1TZq6EGbBXDzh/p6jx/NIw77ex6u/53cnRbjzZQ0pJFv6KUqPRIsiJLXnuvkTnbl23uZiXPUiSnR4IQtKeVyT5veSk91XOQ4KUN1O2i/YM2GskUMhU07LWiugH8xHz1SbKJMtnk5Hz1++vvfE5akPXmoSyqiNw/QmQw9e+Y7+RuU+TcW5Lxdpqp6tK33vf0sveDZdermqBUUUD8Km1vzF5pp1LNXGIo6Qp8gyVPChiCUV2dXfTkYvBBWnjghvCoNRlGZxgKqGc5+u5qULWKW2JAfEg4foNN0qV0LRlZgYYjuBqEMNE18rDcWuNVCNbwDXDTVFL8oqf/FZKpkcGmeEcFh9lbbQpGyVHQxFSgjSj7MhppKamNdIb002cQAQLUoM3Vvw2qOZVCV98oYgIuOuI7+Tu1k6FsOIOZsQeezU8eKRFhNz7s/iBr8Gs2HUvvFXXwscXYsSIHJ8i32QJX/rR62TJOD6Krp9c1AEs/Ev+5Xy8ykNn62wJLBU1LdpoKpQpc3QCsdXmT85cX6qqfsKovZiopfZat/1IHzO9wLswwDtObUdLWVWA6ub51Mk15wFZSU69dQg7NWZ5onnjTVOdG19IbnRZu6rCpdt5xgf5kme1tG6LblIdUuHl5WnpihLQX1vxHr57yF+HYV7I4nGmgXsuT9N0D0x9yqQWK8gqKBcxWlZ7DuwWA71oqB/cdUNBTxk07OB4BQzOVoclJdvTggIDiAbGEwsxLhoaMbCXSmlyGZjE9h48oj1a4WbZE4f8UCSzzjgqkNFqeKFtAZAqjFSbp+ZLnwn9liDJ+OaaDNvw8HHbYnLlhh4HhbWDYvOQSwnfc2Je6ORkYwpVBmtCQwaDi+LcPiMpo+lguK+9Hswc9IkLRArEvNZmP5fDmbkHBtm0MRk6O5OVx+QWlb9cE6lEN8e4B3tGJJLxLWAGkndmc4O5PmF61H945tKDz3Ex8jDn2172v69Meyw0opPsRaOYbqjFy3BZTdqXeLEcU3hRNEkWXSoogjuxoDeU6hJ9IdqXa/Jx/vDQ4F2F46oZE9z30VGlT3YcmVumpwdAh8ZBrlatLFXgz01fe3TCwm0MNaT4GLRobMPZoUTx1+PmENsXrNsBr602RPHf/WQtaHC4tVKv6zoHVibsdFln6Xrd/xC8HAViWQiNiumugypbpYFkM/+4gYsv8z7YJiTFKHA0ZlXbKtU2F6kLL/EvbTjREjSUpudLad4PyC2WlGaEQhedDKvN29XfNA+CrVZwgFKPNtfEw/LkpP0u1CyTqJA+pF4FcU3aYcuEKds72o8ASlBpGvqK+GYNt0jVtPuf0Q65Uw7fGo2SkaRqiISMw+6bXnc3hO64XrRifW50DH7mCN95oihqB2E8ojioum81/PJFQBzqqi3KqskoElvlK8gHRiUJ91bBsdf83f7lQlZZqGFkpnsFlj7d1Hw7zNbHQiQxSMDfBgo8GpohJx86bgNzhMfTP+RSQN2AjAw2U/BQYmmj1xp7ww3Abi41k5oGh+2yjQ9HSvHCezZTwJLWrKxG4ojJ9bZ4TSAWXYw/OZKVtsb79mph/Nabs4jV+kNNQaClzUt60kN2+6QJWMyNgYLwsuLnjBxx+MdRUR+m+sETQmpH28Fk8z+ZQTKYHW4bFCV6K259DpCO1+vtvvuM0Uu/CHqqXzuKUgyS0ehqGRoUnAYndjmW6x0zBh/vN1YPUIE+4FlKDcbAaVAt7YsKNKONtZliOsrVSmrC+wR9NqVpZF6mKbvIDZK97vkxOXnFDXmq6n9onrY/pST3ICVQItdPCModPLdNGq3Oy4mn+A5pFVhSDDnMfuEm5TFVyekgW7TP8YBlpRuQ4+VQDrQ46UzFn6aWt+ZzA70BreNQ+5PDkiF3/ofTj+kdhxOiF07YlpeEclpQW/nld28Qu8fbKs8qKwTUTbEZpYTBIJpR0M3SufFpamReWREZ7QS20dE9wCC6kJUQyxoZ0W+9igvAEYrOVgkUjkQC+bZQMBQ4V6oLHK8T04DF9r922MjIUeo3Y6FRuB9MDFUzBIYnHK51xwvndkpVNiqm//QqhjcBL2IwDXbOFQ3xQKs+uqMzmEhOTItRIhxUeZ0fr3NKq6sSCQdE9C0M2b1TGetkU0p+Vg9CU9u9Weq2L62k/vUmbQjncqk+dvfKz8qtH32D1Vm4KlEt+d6BHyhYequlAmXD+O6X42P38ajUQM36CUv0F9+2F8pNbBoommxig/CvLyYtGUkuQIAt+Yj9bxBYnk3zFvguX3gMxzhQHVL6QhLeE4xBcckty73M9LeQOG7D2vfDI0iHTmDvswMN2AAvYrvPRci5UPOCxvnH4ZJn2wqIYLWdi1KyzfMtxWAn2kMdrZ246UYAIVog3LDwBcGLLG35Hvrvl7vGEwStStw/EkCw8PfEwwN+2/XMAPvId0eqOMlNvRGsD1lAmpgK3R4bCE/034cQMaZpeAMKxa5yRoRIEvNgnx0CTyekb33sC1x75IaU4wrqAeIwCJ43AW5qnWnjzDrzGXy2V5BzsrY3b9kefY/BIHGN0JumonktgmbNwBveCL/km14o3XdiiO8IjLZEXzwsDC0SZoO+cUeKiihz733dstaFPTI4N8KKjnpFxB1jKSdPQpstjkdKCRF+aXJrukwTVZzgT6hxN6kJjSRysely8XcSw6zj2DV0lT2Wb4ezanCHM8Y0v8c+Vpf8nMXBbyvbRLtnBBPBMyRlsjoFq7Ttqbx9tYkVLp2Y7MFhXUH4bJC4fD2Z9HWQdD2J9kzkTgClWc9Bx1Vz1jlR/I86xmvm668S4Ow/vem1xHF5zA7j2itUwoQiLVSsCVxSL6FBZFSGbAjdt91M7biRtDNyoUz5c/jZbeHIpVdbTkJkOhFWKVaZAPGUiO6U4PARZZOLkpGw16wMzWVmRI5Mv1KxyxrC88TPg11KNrKQmrJ+yxSZzCSHKwmRtUikX5T6pT8bMYjVax1NTUDJrggpDcIGIXVj1Yu2l/lFkEOMo2kFDZ1D88/mbt0fnyUZoYzFEl9vSYo9ZQK23NtKvJZDtqIfpHAyrXZemTshNKN9nPYqnJUzhxWBqeR8vV+uc5I6LNNPryTeYpf8WPYo82y3anYFdlNH5TgkXRZNZZGNyPdpLtL7VuJW1R2OHflw4OPGvR9FGY19tPgsKexAHa/VmdkDLZgO+60oW9DES7WMv2UG4VXudfeaRBapgFiTqKfJzT2b3j5A2jOWrNa8ku9ITi6I2I6LH4lma0z5aN4mCRmiXNtW0hjpCHuiBf7DnQbmD3DriRYpL95Zq9oEakaSuoO/tY0TJbP6NVZSRfeiB6l/xZjNjk8J0COjkNITDzpQWK3toDdm4CRV4csHVCjPw7hGZUuHJd1r4jCKDwfgpM5h1c7Ioh9PxQYVzn3xyNt/Q6Gdq3HRutb4BMLKmt5toJ8bpi0w3mVcbTqQbCNOktWv4JVyDeZDJpg3VmBpbWrXBEKaJnQPwzpKp2PE4k3wWBUNG9ff4NRcMLkjHKJ/I8IUmrXOYi/0p/PgOFPlGij/6QLjHrHb+4z+8t40XvyOCcAp+i1N4A55DrzAlAf5TjAH3FZYNjGo4DATmKgnQNzgY3FGwEWA0ZJgYTBmQDQ3BCFC+rAiI9QzHgFfz/6HXu9+4+iQLS4be+UD+su+O+sv5Lfmgr62o1zlD2gbJZwzvEkgEcBNQGytfnLzpIXb8ZgPHVzy/D7CFTaQJ3bOwO7PxjuoSYW2sPIfOFvUK12zYLGtjX46wcduX4inGHt5u05HY+Ar/NGWr13sKB/sFzIgKj0Qbs7O+SQaXWBn7dN7FRl+i/0aF393QtQEQk5cxXRhwhv84Z8Js7Kdu9AmjazG+srVim8Spad3JStw6l9fP62+faxfyhKMF7f0d/Z6fnDyFHULwR9xCiW3n4pbE6LlHeLjDiVzyvdBpHqEfvsQ8j34bNmHUOKxQ7bc4YHDHi8DdHxi4MPzwAJvNE/QEEZ0yQaeI/tPHp+NLPUrxgBSU3x3Mpf9kv8SeFZ+tGss0pqYUBaqpBBalrEsZz6pa+ZfEXZHbPfu7itp3QJRqrn3t7tAxbLxC+Nz81ehrs30z04jZXK29jQPgl1+enwERtwIWsnXLZXTKcxYCXNVlUcGxysEyJn3OkeW+QY+CfME3KcmTEjDbzreheusrEzc2VFiQNLdouqKVmcqyB23W30+CNtu0brP2V9ui9llJd821ej1jRY6S0aZI3UgVE2OFJ6maR2J0E8G3ndKbd251twjz4bWaBR7hfWi60SLU96oPg++q9zpcYRffx5LyYSc3JZ4PvqlK1t7tW/h4NTns+lhgsjZKiTjW8Mz5x/7EG4ooXjJz+ZQK0JV7MkuhPIIppZO/Ni33kMVDf4oJSuQxSwW73jCiZTGQG6B8bpTvl54FAbzYNdAYgQh6I42ed4JnG7lCEMGZRqHKRjIkPYAaL+mMwaFRZxeDOxCVAOKOQQBpX40FBn5EJlBoGtGj7594xWpwvFod/QOS7nEfxyYYmIczZSXk7zx00nvmeHT72U1o/CkRSYBr4UVPsSfwCr7ePcLLASfn0DlqdOLm5KqAB3IXsX2/eHfR5j2yjLgNj0f9Uuc28efdP/kMRV248I7PGDa6xOMf0dqR3546/O+6dAP/MKfiajxlDNyoCO9vjwns6QVOOxG5ZOnPd1W3iQHpC/QwUQUpM5X3glOoskNStDZMzSDouGAoKtOoQXhMlc6OIzuPKKTSt97O0j3lMtXDvOp9wV5nqo3sXhEoTb6qlmLcoW7dpNqyy9lX3cLUnhAcj/vai+yRprb6Q8Oy3RAYg2mzFbZE1/uZaju7hVXmaNHD3EpdsALunLvsgPrIOO+RPZr3dWnyNIdK6N/72BlZ8Ss3Q936ygpThnbClK8Gc89MarpKyhMuNST7GOoh4nfmXUTinjcfnHMgXlNtfbNiVDibUCRBafoBVrvu1wxKTRuJ2Rj2ViJLNAmOLkuVrPpq5tzNz/n0PHssaFJDqGSVo4hEB3i1xDF6HpgWn2KqjFKpF0xr3+gK8jkujcmOsJoJFJFlWnlVnG6LfXvyvvOcxZYVgGyJC0qQnnisyeHxls/xllBbyFV7/3jejICbROxeFGr4JbjdEhO0f+rUBGQgrjI7OheXoF7i7Zs4VkQQ2ELFkpZ0tfKIre6RjngbXBs+qjaRa0tE28i9I4T8+maDYOv8O8DNKVNJSfWEHKjtSnnVV4tnbqnvQOJGonPHs7goJGKR7jfI1F47OprNHoQ/yB99USMQZoxBowQlXU9errLF1LCQKQ9SbUH/kEOegt4Cn1acps+bNn9grFDeiLOuOxg1kLwbVibPkVchp6ANEoE+5UIwwjBKCAX2KMNI2SnuLG2QF0gT5GEtBUb5d9wPN5Sz4tUWzA8tck/HCNzmnJycFogSuRUoGu2+ffFPeU7jBPiWHHV6ybstLCuHsqyk5KDKJdxcpHkjbgZJ37pRpzgKTksh9PywPcYUHRsO1j9M+gXTZMIXEZZphRXcjBqfm9NYh/YYa4a6R8/Wa1VC042fo3V2neTzgb9iTdNSVmt+yH3X0wa36gUekI8rn72xnLViU8dm+MsJaODrsChhyBXN+Pu+nWongE6OnNno/QmVrz4wow8/9TXBAgF5XpEcABQgCNDV52tkB09Y2tZs4wsG63yFzs++Rm7kfR1DmvsGXhnouzBkip9Efm76blJr61vklel7qNkH53s5tV/tI+clh4boycBMML5g8pavcPOlr9HWH76OKbV9g+ys912YMtpPoqxC3029yvoW7evleygcnu+VHcOJ99H6uaxIIKQJvgiPQoTkCyng6ImhfK8YIkwLOYhSgaT7IkEbancTT0WSQksrdLJwwtSf+O3UEMAgAiCyBvRmAKiAwBIXCP0GAerlMVlBNLsDxnsVJ6WRvv1GoFCw6FCA4/j7AQWayZevQAc9XdhybF6RuFeSZ4NPCluP0gZf3aXgS35+QYd/1NPzAIeNB2JAD5LkeOqoOpslX2CUHqYGQB1IjsPrFUWSNlEu7blEvohyJA4XYogZ3KtPl8dxg0b6CnkUoToQiBtQn1lL3x2A7CC8qBHIodK+tTSnueYm0TGqVeaKF46ZPiYB5S2lJ9EMlY3dBoAYYMZ6wfRuH6IO3hy4cOiGeS5ATZFamxjcCVen3SAcvHslMwlB1/G+XEIRjvVBCD0WQWQPlVq8g3zwhJgk1Qj06x0dbIeIu51wBo1JmBB2vLQhPbQOQx2RUTuUdMALhppxeaxLhyFIEppYy7AEqivugiwgeYozUAQ7lyts3Y21ZYY0FhPQhiVhmOU1G162jbRUcF9owNPynmaUExEIHpVUlrTIukkaAlhNANyvCr+P4DgglBXl8arFmwWKPXCdYKysyilPD2UNHrMPorwD62wJb3n6tlqSlEWwXQPwDupmX7dXhXCJWCWyGZS3AVXmAHmCXZgNrqVRDE9MfOlxsPHCsYoXZjgsPipBxhEQF6E74Ps6GkM6lHd466DQd+ny/CsWlCi01spSoPzbk3n8XnVY2r2s14xPHJrU4vj0me3MR4EBX1a/9hi2MD8ihbZH6iX6hYtXFy9feZV289r1UekfWt25dTvjzdtGWZnZuTl5XfILC4qKt5Ywtr0u3V5WvoN5VLfKiirVVt7NSjQ507IdVzfczHF7vN0igQ9g+yEYQTGcICmaKeFKLo8vEIrEEqlMrlCq1Jqu2py9Tm8wmswWq83ucLra50keaSO//wAQBIZAYXBEY8Yjo9AYLA5PIJL65boDnhVBodLoDCaLzeHy+AKhSCyRyuSK5spSqTU990J/eTq9wWgyW6w2u8Ppcnu8Pj/VatSqw1KvAVujJs1a7LTLbnu02oujrQmTDjvirCnTzqlxWoNB5x13AtI+7bj21+I9od3a7OtAJ52Kp8NBfAKdunTr0euQPv2ERMQGDBoybMSoMeMmTJoy7bAjjpoxaw4yeIBEasPM8lnASbjxX7LO/QQ0VXMfGYMaAmEBA2YwaBiFcOcTibQ4NZGhjHR6BRbGcbQfNlB82KrJO2EiarQRjipykXhlTgzbqywhzOQEEUg4gxBRE0PvioCJAYdaJFnxjAlEM4KpWd7FcpnpHtCMZ5wGyQcFHla3yOtpJOZpbTss2jkitJALJKKF2WQCi6sOQTpFySR9UgouJRGtikgHvmM7rFeCSz/D1o49oB4UdHxYUddZZHGxZVimRRbaPkDaARLJEaef3CEH3V0elz/7UN3PtlaP9bqjLIo8cWREZkQRxixKGDDxLFmKTEklX5psp3Wt1LzJovxqdNY8LAeWb0YFF1mRF1RgSUvF55a0XJaip2jFLDlSAjW2xAiqrW97apAji6Z+cHLGjKDqWSEAuVOhIFmXmZt+ajt76BybMtLG1GdkOrdV3Fk4LuKsyywDedhttmpNCLYFX0a8CDZDFJsxXgBTIUo8YeHouW5cdGVgAI1ImRA2feEYX8XgAaRTiQJANOj5C1yQQQ9Fw+5FAQJr4yOqfNRaSwf9BYVGg9Ch9CbWg38LNTUncFvFmvHltlBrIi/U23YCkTAjkwk0XomPVWxc0AeKvIzZKdg8kefzDB1FAkpzzH8Gwnu5Uwep10tpFVN72gq63gZIjnJuLjANwcewX2xhlkUcF9zGvThHiWfN17yubeQCKCONJHYRnRo/2NUhmoFQfxZcRCLNAlEhCSv0yCSfDjGiENJelKAbaEBCJghhahiEDpvYSRgaFIaKEArZwkUgZXAhiAzUo+hCSMbpR1YBIecA";
|
|
8
|
+
export const LOGO_URL = "https://corent.tech/brand/logo-white.png";
|
|
9
|
+
export const HERO_POSTER_URL = "https://corent.tech/brand/hero-poster-2.webp";
|
|
10
|
+
export const HERO_VIDEO_URL = "https://corent.tech/brand/hero-loop-2.mp4";
|
package/dist/http.js
CHANGED
|
@@ -8,10 +8,13 @@
|
|
|
8
8
|
* one hosted instance, each billed to their own Corent account.
|
|
9
9
|
*
|
|
10
10
|
* Key is accepted from any of (checked in this order):
|
|
11
|
+
* - Authorization: Bearer <coa_ OAuth access token> (claude.ai Connect flow; see oauth.ts)
|
|
11
12
|
* - Authorization: Bearer <key>
|
|
12
13
|
* - X-Corent-Api-Key: <key>
|
|
13
14
|
* - ?corent_api_key= / ?corentApiKey= / ?api_key= / ?apiKey=
|
|
14
15
|
* - ?config=<base64 JSON> with { corentApiKey } (Smithery passes config this way)
|
|
16
|
+
* Requests to /mcp with no resolvable key get 401 + WWW-Authenticate, which is
|
|
17
|
+
* what triggers a remote MCP client's OAuth connect flow.
|
|
15
18
|
*
|
|
16
19
|
* Stateless mode: a fresh server + transport is created for each request, so
|
|
17
20
|
* there is no cross-user session state to leak.
|
|
@@ -19,12 +22,19 @@
|
|
|
19
22
|
import http from "node:http";
|
|
20
23
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
21
24
|
import { createCorentServer, SERVER_VERSION } from "./server.js";
|
|
25
|
+
import { handleOauth, isOauthToken, apiKeyFromAccessToken } from "./oauth.js";
|
|
22
26
|
const PORT = Number(process.env.PORT ?? 8080);
|
|
23
27
|
const API_URL = process.env.CORENT_API_URL ?? "https://api.corent.tech";
|
|
28
|
+
const PUBLIC_URL = process.env.MCP_PUBLIC_URL ?? "https://mcp.corent.tech";
|
|
24
29
|
function extractApiKey(req, url) {
|
|
25
30
|
const auth = req.headers["authorization"];
|
|
26
31
|
if (typeof auth === "string" && auth.toLowerCase().startsWith("bearer ")) {
|
|
27
32
|
const v = auth.slice(7).trim();
|
|
33
|
+
// OAuth access tokens (coa_...) wrap the real API key; anything else is
|
|
34
|
+
// treated as a raw Corent key. Expired/forged tokens resolve to nothing,
|
|
35
|
+
// which falls through to the 401 + WWW-Authenticate below.
|
|
36
|
+
if (v && isOauthToken(v))
|
|
37
|
+
return apiKeyFromAccessToken(v) ?? undefined;
|
|
28
38
|
if (v)
|
|
29
39
|
return v;
|
|
30
40
|
}
|
|
@@ -92,6 +102,30 @@ function readBody(req) {
|
|
|
92
102
|
req.on("error", reject);
|
|
93
103
|
});
|
|
94
104
|
}
|
|
105
|
+
// Method-level request logging for diagnosing client behavior (which methods a
|
|
106
|
+
// host calls, whether it advertises the MCP Apps ui extension). Never logs
|
|
107
|
+
// prompts, arguments, keys, or results.
|
|
108
|
+
function logMcpRequest(body) {
|
|
109
|
+
for (const msg of Array.isArray(body) ? body : [body]) {
|
|
110
|
+
const m = msg;
|
|
111
|
+
if (!m || typeof m.method !== "string")
|
|
112
|
+
continue;
|
|
113
|
+
if (m.method === "initialize") {
|
|
114
|
+
const client = m.params?.clientInfo?.name ?? "unknown";
|
|
115
|
+
const uiCap = m.params?.capabilities?.extensions?.["io.modelcontextprotocol/ui"];
|
|
116
|
+
console.error(`[mcp] initialize from ${client} v${m.params?.clientInfo?.version ?? "?"} proto=${m.params?.protocolVersion} ui-extension=${uiCap ? JSON.stringify(uiCap) : "NOT advertised"}`);
|
|
117
|
+
}
|
|
118
|
+
else if (m.method === "resources/read") {
|
|
119
|
+
console.error(`[mcp] resources/read ${m.params?.uri ?? "?"}`);
|
|
120
|
+
}
|
|
121
|
+
else if (m.method === "tools/call") {
|
|
122
|
+
console.error(`[mcp] tools/call ${m.params?.name ?? "?"}`);
|
|
123
|
+
}
|
|
124
|
+
else if (m.method === "resources/list" || m.method === "tools/list") {
|
|
125
|
+
console.error(`[mcp] ${m.method}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
95
129
|
const server = http.createServer(async (req, res) => {
|
|
96
130
|
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
97
131
|
setCors(res);
|
|
@@ -100,6 +134,12 @@ const server = http.createServer(async (req, res) => {
|
|
|
100
134
|
res.end();
|
|
101
135
|
return;
|
|
102
136
|
}
|
|
137
|
+
// Favicon: some clients derive a connector icon from the server origin.
|
|
138
|
+
if (req.method === "GET" && url.pathname === "/favicon.ico") {
|
|
139
|
+
res.writeHead(302, { Location: "https://corent.tech/brand/intro-mark.png", "Cache-Control": "public, max-age=86400" });
|
|
140
|
+
res.end();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
103
143
|
// Health check — used by Fly and easy to eyeball.
|
|
104
144
|
if (req.method === "GET" && (url.pathname === "/" || url.pathname === "/health")) {
|
|
105
145
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
@@ -112,12 +152,48 @@ const server = http.createServer(async (req, res) => {
|
|
|
112
152
|
}));
|
|
113
153
|
return;
|
|
114
154
|
}
|
|
155
|
+
// OAuth endpoints (discovery, registration, consent page, token exchange).
|
|
156
|
+
try {
|
|
157
|
+
if (await handleOauth(req, res, url, {
|
|
158
|
+
publicUrl: PUBLIC_URL,
|
|
159
|
+
apiUrl: API_URL,
|
|
160
|
+
supabaseUrl: process.env.SUPABASE_URL,
|
|
161
|
+
supabaseAnonKey: process.env.SUPABASE_ANON_KEY,
|
|
162
|
+
}))
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
console.error(`oauth request failed: ${req.method} ${url.pathname}:`, err instanceof Error ? err.message : err);
|
|
167
|
+
if (!res.headersSent) {
|
|
168
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
169
|
+
res.end(JSON.stringify({ error: "server_error" }));
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
115
173
|
if (url.pathname !== "/mcp") {
|
|
116
174
|
res.writeHead(404, { "Content-Type": "application/json" });
|
|
117
175
|
res.end(JSON.stringify({ error: "not found; MCP endpoint is /mcp" }));
|
|
118
176
|
return;
|
|
119
177
|
}
|
|
120
178
|
const apiKey = extractApiKey(req, url);
|
|
179
|
+
// No credentials -> standard OAuth challenge (RFC 9728). This is what makes
|
|
180
|
+
// claude.ai (and other remote MCP clients) open the Connect flow instead of
|
|
181
|
+
// silently failing tool calls later.
|
|
182
|
+
if (!apiKey) {
|
|
183
|
+
// Distinguish "no credentials at all" from "OAuth token present but bad".
|
|
184
|
+
const auth = req.headers["authorization"];
|
|
185
|
+
const hadOauthToken = typeof auth === "string" && isOauthToken(auth.replace(/^[Bb]earer\s+/, ""));
|
|
186
|
+
console.error(`[mcp] 401: ${hadOauthToken ? "oauth token invalid/expired" : "no credentials"}`);
|
|
187
|
+
res.writeHead(401, {
|
|
188
|
+
"Content-Type": "application/json",
|
|
189
|
+
"WWW-Authenticate": `Bearer resource_metadata="${PUBLIC_URL}/.well-known/oauth-protected-resource"`,
|
|
190
|
+
});
|
|
191
|
+
res.end(JSON.stringify({
|
|
192
|
+
error: "unauthorized",
|
|
193
|
+
error_description: "Authenticate via OAuth (connect this server in your MCP client), or pass a Corent API key as 'Authorization: Bearer co_live_...'. Keys: https://corent.tech/dashboard/api-keys",
|
|
194
|
+
}));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
121
197
|
const mcp = createCorentServer({ apiKey, apiUrl: API_URL });
|
|
122
198
|
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
|
|
123
199
|
res.on("close", () => {
|
|
@@ -127,6 +203,7 @@ const server = http.createServer(async (req, res) => {
|
|
|
127
203
|
try {
|
|
128
204
|
await mcp.connect(transport);
|
|
129
205
|
const body = req.method === "POST" ? await readBody(req) : undefined;
|
|
206
|
+
logMcpRequest(body);
|
|
130
207
|
await transport.handleRequest(req, res, body);
|
|
131
208
|
}
|
|
132
209
|
catch (err) {
|