diff --git a/.vscode/settings.json b/.vscode/settings.json index c1d91e5cb..beb0783c3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,6 @@ "i18n-ally.keystyle": "nested", "i18n-ally.sortKeys": true, "i18n-ally.keepFulfilled": true, - "i18n-ally.sourceLanguage": "en", // 根据此语言文件翻译其他语言文件的变量和内容 - "i18n-ally.displayLanguage": "en", // 显示语言 + "i18n-ally.sourceLanguage": "zh", // 根据此语言文件翻译其他语言文件的变量和内容 + "i18n-ally.displayLanguage": "zh", // 显示语言 } \ No newline at end of file diff --git a/docSite/content/docs/agreement/disclaimer.md b/docSite/content/docs/agreement/disclaimer.md deleted file mode 100644 index c197f27ea..000000000 --- a/docSite/content/docs/agreement/disclaimer.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: '免责声明' -description: ' FastGPT 免责声明' -icon: 'gavel' -draft: false -toc: true -weight: 1220 ---- - -由于生成式 AI 的特性,其在不同国家的管控措施也会有所不同。请所有使用者务必遵守所在地的相关法律。 - -免责声明:以任何违反 FastGPT 可接受使用政策的方式使用,包括但不限于法律、法规、政府命令或法令禁止的任何用途,或任何侵犯他人权利的使用;由使用者自行承担。我们对由客户使用产生的问题概不负责。 - -下面是各国对生成式AI的管控条例的链接: - -[中国生成式人工智能服务管理办法(征求意见稿)](http://www.cac.gov.cn/2023-04/11/c_1682854275475410.htm) - -## 内容要求 - -我们禁止使用我们对接的模型服务生成可能对个人或社会造成伤害的内容。保障平台的安全性,是长期稳定运营的关键。如发现任何利用平台接入模型能力进行违规内容生成和使用,将立即封号,账号余额不退。 - -- 剥削和虐待 - - 禁止描述、展示或宣扬儿童性剥削或性虐待的内容,无论法律是否禁止。这包括涉及儿童或使儿童色情的内容。 - - 禁止描述或用于培养儿童的内容。修饰是成年人以剥削,特别是性剥削为目的与儿童建立关系的行为。这包括以性剥削、贩运或其他形式剥削为目的与儿童交流。 -- 未经同意的私密内容 - - 服务禁止描述、提供或宣传未经同意的亲密活动的内容。 -- 禁止描述、提供特征或宣传或用于招揽商业性活动和性服务的内容。这包括鼓励和协调真正的性活动。 -- 禁止描述或用于人口贩运目的的内容。这包括招募人员、便利交通、支付和助长对人的剥削,如强迫劳动、家庭奴役、役、强迫婚姻和强迫医疗程序。 -- 自杀和自残,禁止描述、赞美、支持、促进、美化、鼓励和/或指导个人自残或自杀的内容。 -- 暴力内容和行为 - - 禁止描述、展示或宣扬血腥暴力或血腥的内容。 - - 禁止描绘恐怖主义行为的内容;赞扬或支持恐怖组织、恐怖行为者或暴力恐怖意识形态;鼓励恐怖活动;向恐怖组织或恐怖事业提供援助;或协助恐怖组织招募成员。 - - 禁止通过暴力威胁或煽动来鼓吹或宣扬对他人的暴力行为的内容。 -- 仇恨言论和歧视 - - 禁止基于实际或感知的种族、民族、国籍、性别、性别认同、性取向、宗教信仰、年龄、残疾状况、种姓或与系统性偏见或边缘化相关的任何其他特征等特征攻击、诋毁、恐吓、降级、针对或排斥个人或群体的内容。 - - 禁止针对个人或群体进行威胁、恐吓、侮辱、贬低或贬低的语言或图像、宣扬身体伤害或其他虐待行为(如跟踪)的内容。 -- 禁止故意欺骗并可能对公共利益产生不利影响的内容,包括与健康、安全、选举诚信或公民参与相关的欺骗性或不真实内容。 -- 直接支持非法主动攻击或造成技术危害的恶意软件活动的内容,例如提供恶意可执行文件、组织拒绝服务攻击或管理命令和控制服务器。 diff --git a/docSite/content/docs/agreement/open-source.md b/docSite/content/docs/agreement/open-source.md index a5c3407ae..fcdb9d6f9 100644 --- a/docSite/content/docs/agreement/open-source.md +++ b/docSite/content/docs/agreement/open-source.md @@ -11,7 +11,7 @@ FastGPT 项目在 Apache License 2.0 许可下开源,同时包含以下附加 + FastGPT 允许被用于商业化,例如作为其他应用的“后端即服务”使用,或者作为应用开发平台提供给企业。然而,当满足以下条件时,必须联系作者获得商业许可: - + 多租户 SaaS 服务:除非获得 FastGPT 的明确书面授权,否则不得使用 fastgpt.in 的源码来运营与 fastgpt.in 服务版类似的多租户 SaaS 服务。 + + 多租户 SaaS 服务:除非获得 FastGPT 的明确书面授权,否则不得使用 fastgpt.in 的源码来运营与 fastgpt.in 服务类似的多租户 SaaS 服务。 + LOGO 及版权信息:在使用 FastGPT 的过程中,不得移除或修改 FastGPT 控制台内的 LOGO 或版权信息。 请通过电子邮件 yujinlong@sealos.io 联系我们咨询许可事宜。 diff --git a/docSite/content/docs/agreement/privacy.md b/docSite/content/docs/agreement/privacy.md new file mode 100644 index 000000000..1863bd95a --- /dev/null +++ b/docSite/content/docs/agreement/privacy.md @@ -0,0 +1,66 @@ +--- +title: '隐私政策' +description: ' FastGPT 隐私政策' +icon: 'gavel' +draft: false +toc: true +weight: 1221 +--- + +最后更新时间:2024年3月3日 + +我们非常重视您的隐私保护,在您使用FastGPT云服务时,我们将按照以下政策收集、使用、披露和保护您的个人信息。请您仔细阅读并充分理解本隐私政策。 + +**我们可能需要收集的信息** + +1. 在您注册或使用本服务时,我们可能收集您的姓名、电话号码、电子邮件地址、地址等个人信息。 +2. 在您使用本服务过程中产生的信息,如操作日志、访问IP地址、设备型号等。 +3. 我们可能会通过 Cookies 或其他技术收集和存储您访问本服务的相关信息,以便为您提供更好的用户体验。 + +**我们如何使用收集的信息?** + +1. 我们会根据法律法规规定以及与用户之间的约定来处理用户的个人信息。 +2. 我们可能会将收集到的信息用于改进服务质量、开发新产品或功能等目的。 +3. 我们可能会将收集到的信息用于向您推送与本服务相关的通知或广告。 + +**信息披露** + +1. 我们不会向任何第三方披露您的个人信息,除非: + + 1. 您事先同意; + 2. 法律法规要求; + 3. 为维护我们或其他用户的合法权益。 + +2. 我们可能与关联公司、合作伙伴分享您的个人信息,但我们会采取相应的保密措施,确保信息安全。 + +**信息保护** + +1. 我们采取各种安全措施,包括加密、访问控制等技术手段,以保护您的个人信息免受未经授权的访问、使用或泄露。 +2. 我们会定期对收集、存储和处理的个人信息进行安全评估,以确保个人信息安全。 +3. 在发生个人信息泄露等安全事件时,我们会立即启动应急预案,并在法律法规规定的范围内向您及时告知。 +4. 我们不会使用您的数据进行额外的备份存储或用于模型训练。 +5. 您在本服务进行的数据删除均为物理删除,不可恢复。如有有非物理删除的操作,我们会在服务中特别指出。 + +**用户权利** + +1. 您有权随时查阅、更正或删除您的个人信息。 +2. 您有权拒绝我们收集您的个人信息,但这可能导致您无法使用本服务的部分功能。 +3. 您有权要求我们停止处理您的个人信息,但这可能导致您无法继续使用本服务。 + +**隐私政策更新** + +1. 我们可能会对本隐私政策进行修改。如本隐私政策发生变更,我们将在本服务页面上发布修改后的隐私政策。如您继续使用本服务,则视为同意修改后的隐私政策。 +2. 我们鼓励您定期查阅本隐私政策,以了解我们如何保护您的个人信息。 + +**未成年人保护** + +我们非常重视对未成年人个人信息的保护,如您为未成年人,请在监护人指导下使用本服务,并请监护人帮助您在使用本服务过程中正确处理个人信息。 + +**跨境数据传输** + +由于我们的服务器可能位于不同国家或地区,您同意我们可能需要将您的个人信息传输至其他国家或地区,并在该等国家或地区存储和处理以向您提供服务。我们会采取适当措施确保跨境传输的数据仍然受到适当保护。 + +**联系我们** + +1. 如您对本隐私政策有任何疑问、建议或投诉,请通过以下方式与我们联系:yujinlong@sealos.io。 +2. 我们将尽快回复并解决您提出的问题。 \ No newline at end of file diff --git a/docSite/content/docs/agreement/terms.md b/docSite/content/docs/agreement/terms.md new file mode 100644 index 000000000..8920b101e --- /dev/null +++ b/docSite/content/docs/agreement/terms.md @@ -0,0 +1,75 @@ +--- +title: '服务协议' +description: ' FastGPT 服务协议' +icon: 'gavel' +draft: false +toc: true +weight: 1220 +--- + +最后更新时间:2024年3月3日 + +FastGPT 服务协议是您与珠海环界云计算有限公司(以下简称“我们”或“本公司”)之间就FastGPT云服务(以下简称“本服务”)的使用等相关事项所订立的协议。请您仔细阅读并充分理解本协议各条款,特别是免除或者限制我们责任的条款、对您权益的限制条款、争议解决和法律适用条款等。如您不同意本协议任一内容,请勿注册或使用本服务。 + +**第1条 服务内容** + +1. 我们将向您提供存储、计算、网络传输等基于互联网的信息技术服务。 +2. 我们将不定期向您通过站内信、电子邮件或短信等形式向您推送最新的动态。 +3. 我们将为您提供相关技术支持和客户服务,帮助您更好地使用本服务。 +4. 我们将为您提供稳定的在线服务,保证每月服务可用性不低于99%。 + +**第2条 用户注册与账户管理** + +1. 您在使用本服务前需要注册一个账户。您保证在注册时提供的信息真实、准确、完整,并及时更新。 +2. 您应妥善保管账户名和密码,对由此产生的全部行为负责。如发现他人使用您的账户,请及时修改账号密码或与我们进行联系。 +3. 我们有权对您的账户进行审查,如发现您的账户存在异常或违法情况,我们有权暂停或终止向您提供服务。 + +**第3条 使用规则** + +1. 您不得利用本服务从事任何违法活动或侵犯他人合法权益的行为,包括但不限于侵犯知识产权、泄露他人商业机密等。 +2. 您不得通过任何手段恶意注册账户,包括但不限于以牟利、炒作、套现等目的。 +3. 您不得利用本服务传播任何违法、有害、恶意软件等信息。 +4. 您应遵守相关法律法规及本协议的规定,对在本服务中发布的信息及使用本服务所产生的结果承担全部责任。 +5. 我们禁止使用我们对接的模型服务生成可能对个人或社会造成伤害的内容。保障平台的安全性,是长期稳定运营的关键。如发现任何利用平台接入模型能力进行违规内容生成和使用,将立即封号,账号余额不退。违规内容包括但不限于: + - 剥削和虐待 + - 禁止描述、展示或宣扬儿童性剥削或性虐待的内容,无论法律是否禁止。这包括涉及儿童或使儿童色情的内容。 + - 禁止描述或用于培养儿童的内容。修饰是成年人以剥削,特别是性剥削为目的与儿童建立关系的行为。这包括以性剥削、贩运或其他形式剥削为目的与儿童交流。 + - 未经同意的私密内容 + - 服务禁止描述、提供或宣传未经同意的亲密活动的内容。 + - 禁止描述、提供特征或宣传或用于招揽商业性活动和性服务的内容。这包括鼓励和协调真正的性活动。 + - 禁止描述或用于人口贩运目的的内容。这包括招募人员、便利交通、支付和助长对人的剥削,如强迫劳动、家庭奴役、役、强迫婚姻和强迫医疗程序。 + - 自杀和自残,禁止描述、赞美、支持、促进、美化、鼓励和/或指导个人自残或自杀的内容。 + - 暴力内容和行为 + - 禁止描述、展示或宣扬血腥暴力或血腥的内容。 + - 禁止描绘恐怖主义行为的内容;赞扬或支持恐怖组织、恐怖行为者或暴力恐怖意识形态;鼓励恐怖活动;向恐怖组织或恐怖事业提供援助;或协助恐怖组织招募成员。 + - 禁止通过暴力威胁或煽动来鼓吹或宣扬对他人的暴力行为的内容。 + - 仇恨言论和歧视 + - 禁止基于实际或感知的种族、民族、国籍、性别、性别认同、性取向、宗教信仰、年龄、残疾状况、种姓或与系统性偏见或边缘化相关的任何其他特征等特征攻击、诋毁、恐吓、降级、针对或排斥个人或群体的内容。 + - 禁止针对个人或群体进行威胁、恐吓、侮辱、贬低或贬低的语言或图像、宣扬身体伤害或其他虐待行为(如跟踪)的内容。 + - 禁止故意欺骗并可能对公共利益产生不利影响的内容,包括与健康、安全、选举诚信或公民参与相关的欺骗性或不真实内容。 + - 直接支持非法主动攻击或造成技术危害的恶意软件活动的内容,例如提供恶意可执行文件、组织拒绝服务攻击或管理命令和控制服务器。 + + +**第4条 费用及支付** + +1. 您同意支付与本服务相关的费用,具体费用标准以我们公布的价格为准。 +2. 我们可能会根据运营成本和市场情况调整费用标准。最新价格以您付款时刻的价格为准。 + +**第5条 服务免责与责任限制** + +1. 本服务按照现有技术和条件所能达到的水平提供。我们不能保证本服务完全无故障或满足您的所有需求。 +2. 对于因您自身误操作导致的数据丢失、损坏等情况,我们不承担责任。 +3. 由于生成式 AI 的特性,其在不同国家的管控措施也会有所不同,请所有使用者务必遵守所在地的相关法律。如果您以任何违反 FastGPT 可接受使用政策的方式使用,包括但不限于法律、法规、政府命令或法令禁止的任何用途,或任何侵犯他人权利的使用;由使用者自行承担。我们对由客户使用产生的问题概不负责。下面是各国对生成式AI的管控条例的链接: + +[中国生成式人工智能服务管理办法(征求意见稿)](http://www.cac.gov.cn/2023-04/11/c_1682854275475410.htm) + +**第6条 知识产权** + +1. 我们对本服务及相关软件、技术、文档等拥有全部知识产权,除非经我们明确许可,您不得进行复制、分发、出租、反向工程等行为。 +2. 您在使用本服务过程中产生的所有数据和内容(包括但不限于文件、图片等)的知识产权归您所有。我们不会对您的数据和内容进行使用、复制、修改等行为。 +3. 在线服务中其他用户的数据和内容的知识产权归原用户所有,未经原用户许可,您不得进行使用、复制、修改等行为。 + +**第7条 其他条款** + +1. 如本协议中部分条款因违反法律法规而被视为无效,不影响其他条款的效力。 +2. 本公司保留对本协议及隐私政策的最终解释权。如您对本协议或隐私政策有任何疑问,请联系我们:yujinlong@sealos.io。 \ No newline at end of file diff --git a/docSite/content/docs/development/openapi/share.md b/docSite/content/docs/development/openapi/share.md index 8ae7c9588..2c839b3af 100644 --- a/docSite/content/docs/development/openapi/share.md +++ b/docSite/content/docs/development/openapi/share.md @@ -181,7 +181,7 @@ curl --location --request POST '{{host}}/shareAuth/finish' \ "totalPoints": 1.5278, "query": "导演是谁\n《铃芽之旅》的导演是谁?\n这部电影的导演是谁?\n谁是《铃芽之旅》的导演?", "model": "Embedding-2(旧版,不推荐使用)", - "charsLength": 1524, + "tokens": 1524, "similarity": 0.83, "limit": 400, "searchMode": "embedding", @@ -195,7 +195,7 @@ curl --location --request POST '{{host}}/shareAuth/finish' \ "moduleType": "chatNode", "totalPoints": 0.593, "model": "FastAI-4k", - "charsLength": 593, + "tokens": 593, "query": "导演是谁", "maxToken": 2000, "quoteList": [ @@ -252,7 +252,7 @@ type ResponseType = { query?: string; // 用户问题/检索词 textOutput?: string; // 文本输出 - charsLength?: number; // 上下文总字数 + tokens?: number; // 上下文总Tokens model?: string; // 使用到的模型 contextTotalLen?: number; // 上下文总长度 totalPoints?: number; // 总消耗AI积分 @@ -268,7 +268,7 @@ type ResponseType = { searchUsingReRank?: boolean; // 是否使用rerank extensionModel?: string; // 问题扩展模型 extensionResult?: string; // 问题扩展结果 - extensionCharsLength?: number; // 问题扩展总字符长度 + extensionTokens?: number; // 问题扩展总字符长度 cqList?: ClassifyQuestionAgentItemType[]; // 分类问题列表 cqResult?: string; // 分类问题结果 diff --git a/docSite/content/docs/development/upgrading/469.md b/docSite/content/docs/development/upgrading/469.md index 2a6a8bd75..7f25bd592 100644 --- a/docSite/content/docs/development/upgrading/469.md +++ b/docSite/content/docs/development/upgrading/469.md @@ -17,14 +17,18 @@ curl --location --request POST 'https://{{host}}/api/init/v469' \ --header 'Content-Type: application/json' ``` -会重置计量表。 +1. 重置计量表。 +2. 执行脏数据清理(清理无效的文件、清理无效的图片、清理无效的知识库集合、清理无效的向量) ## V4.6.9 更新说明 -1. 新增 - 完善了HTTP模块的变量提示。 -2. 新增 - HTTP模块支持OpenAI单接口导入。 -3. 优化 - 问题补全。增加英文类型。同时可以设置为单独模块,方便复用。 -4. 优化 - 重写了计量模式 -5. 修复 - 标注功能。 -6. 修复 - qa生成线程计数错误。 +1. 商业版新增 - 知识库新增“增强处理”训练模式,可生成更多类型索引。 +2. 新增 - 完善了HTTP模块的变量提示。 +3. 新增 - HTTP模块支持OpenAI单接口导入。 +4. 优化 - 问题补全。增加英文类型。同时可以设置为单独模块,方便复用。 +5. 优化 - 重写了计量模式 +6. 优化 - Token 过滤历史记录,保持偶数条,防止部分模型报错。 +7. 优化 - 分享链接SEO,可直接展示应用名和头像。 +8. 修复 - 标注功能。 +9. 修复 - qa生成线程计数错误。 diff --git a/docSite/content/docs/pricing.md b/docSite/content/docs/pricing.md index 15387f1dd..f6daea4b3 100644 --- a/docSite/content/docs/pricing.md +++ b/docSite/content/docs/pricing.md @@ -7,14 +7,4 @@ toc: true weight: 1200 --- -## Tokens 说明 -[OpenAI 的 API 官方计费模式](https://openai.com/pricing#language-models)为:按每次 API 请求内容和返回内容 tokens 长度来定价。每个模型具有不同的计价方式,以每 1,000 个 tokens 消耗为单位定价。其中 1,000 个 tokens 约为 900 个英文,约 600 个中文(不是很准确,与上下长度有关,相同的词出现越多,词:Tokens 的比例越大)。平台的 tokens 数量计算算法与 OpenAI 一致,您可以随时通过「使用记录」来查看余额消耗明细的说明,来对比计算是否一致。 - -![](/imgs/fastgpt-price.png) - - -## FastGPT 线上计费 - -[https://fastgpt.in](https://fastgpt.in) 采用按量计费的模式,最新计费标准可在 `账号-计费标准` 查看。同时可以在 `账号-使用记录` 中查看具体使用情况, - -![](/imgs/cloud_price1.jpg) +线上版价格请查看:https://cloud.fastgpt.in/price \ No newline at end of file diff --git a/package.json b/package.json index be1ca7d52..573b60405 100644 --- a/package.json +++ b/package.json @@ -14,11 +14,11 @@ "devDependencies": { "@chakra-ui/cli": "^2.4.1", "husky": "^8.0.3", - "i18next": "^22.5.1", + "i18next": "23.10.0", "lint-staged": "^13.2.1", - "next-i18next": "^13.3.0", + "next-i18next": "15.2.0", "prettier": "3.2.4", - "react-i18next": "^12.3.1", + "react-i18next": "13.5.0", "zhlint": "^0.7.1" }, "lint-staged": { @@ -29,4 +29,4 @@ "node": ">=18.0.0", "pnpm": ">=8.6.0" } -} \ No newline at end of file +} diff --git a/packages/global/common/file/api.d.ts b/packages/global/common/file/api.d.ts index 7e05c5f93..e26033ae7 100644 --- a/packages/global/common/file/api.d.ts +++ b/packages/global/common/file/api.d.ts @@ -1,11 +1,11 @@ import { MongoImageTypeEnum } from './image/constants'; +import { OutLinkChatAuthProps } from '../../support/permission/chat.d'; -export type preUploadImgProps = { +export type preUploadImgProps = OutLinkChatAuthProps & { type: `${MongoImageTypeEnum}`; expiredTime?: Date; metadata?: Record; - shareId?: string; }; export type UploadImgProps = preUploadImgProps & { base64Img: string; diff --git a/packages/global/common/string/tiktoken/index.ts b/packages/global/common/string/tiktoken/index.ts index af81b8ab6..ef1e106da 100644 --- a/packages/global/common/string/tiktoken/index.ts +++ b/packages/global/common/string/tiktoken/index.ts @@ -4,6 +4,7 @@ import { Tiktoken } from 'js-tiktoken/lite'; import { adaptChat2GptMessages } from '../../../core/chat/adapt'; import { ChatCompletionRequestMessageRoleEnum } from '../../../core/ai/constant'; import encodingJson from './cl100k_base.json'; +import { ChatMessageItemType } from '../../../core/ai/type'; /* init tikToken obj */ export function getTikTokenEnc() { @@ -29,32 +30,35 @@ export function getTikTokenEnc() { /* count one prompt tokens */ export function countPromptTokens( prompt = '', - role: '' | `${ChatCompletionRequestMessageRoleEnum}` = '' + role: '' | `${ChatCompletionRequestMessageRoleEnum}` = '', + tools?: any ) { const enc = getTikTokenEnc(); - const text = `${role}\n${prompt}`; + const toolText = tools + ? JSON.stringify(tools) + .replace('"', '') + .replace('\n', '') + .replace(/( ){2,}/g, ' ') + : ''; + const text = `${role}\n${prompt}\n${toolText}`.trim(); try { const encodeText = enc.encode(text); - return encodeText.length + role.length; // 补充 role 估算值 + const supplementaryToken = role ? 4 : 0; + return encodeText.length + supplementaryToken; } catch (error) { return text.length; } } /* count messages tokens */ -export function countMessagesTokens({ messages }: { messages: ChatItemType[] }) { +export const countMessagesTokens = (messages: ChatItemType[], tools?: any) => { const adaptMessages = adaptChat2GptMessages({ messages, reserveId: true }); - let totalTokens = 0; - for (let i = 0; i < adaptMessages.length; i++) { - const item = adaptMessages[i]; - const tokens = countPromptTokens(item.content, item.role); - totalTokens += tokens; - } - - return totalTokens; -} + return countGptMessagesTokens(adaptMessages, tools); +}; +export const countGptMessagesTokens = (messages: ChatMessageItemType[], tools?: any) => + messages.reduce((sum, item) => sum + countPromptTokens(item.content, item.role, tools), 0); /* slice messages from top to bottom by maxTokens */ export function sliceMessagesTB({ diff --git a/packages/global/common/system/types/index.d.ts b/packages/global/common/system/types/index.d.ts index b74c054e4..fda136277 100644 --- a/packages/global/common/system/types/index.d.ts +++ b/packages/global/common/system/types/index.d.ts @@ -39,9 +39,12 @@ export type FastGPTFeConfigsType = { systemTitle?: string; googleClientVerKey?: string; isPlus?: boolean; + show_phoneLogin?: boolean; + show_emailLogin?: boolean; oauth?: { github?: string; google?: string; + wechat?: string; }; limit?: { exportDatasetLimitMinutes?: number; diff --git a/packages/global/core/app/type.d.ts b/packages/global/core/app/type.d.ts index 8f0df617e..6bba1ad28 100644 --- a/packages/global/core/app/type.d.ts +++ b/packages/global/core/app/type.d.ts @@ -5,7 +5,7 @@ import type { AIChatModuleProps, DatasetModuleProps } from '../module/node/type. import { VariableInputEnum } from '../module/constants'; import { SelectedDatasetType } from '../module/api'; import { DatasetSearchModeEnum } from '../dataset/constants'; -import { TeamTagsSchema as TeamTagsSchemaType } from '@fastgpt/global/support/user/team/type.d'; +import { TeamTagSchema as TeamTagsSchemaType } from '@fastgpt/global/support/user/team/type.d'; export interface AppSchema { _id: string; userId: string; @@ -20,7 +20,7 @@ export interface AppSchema { modules: ModuleItemType[]; permission: `${PermissionTypeEnum}`; inited?: boolean; - teamTags: [string]; + teamTags: string[]; } export type AppListItemType = { diff --git a/packages/global/core/chat/type.d.ts b/packages/global/core/chat/type.d.ts index c74caac43..2f7001a6b 100644 --- a/packages/global/core/chat/type.d.ts +++ b/packages/global/core/chat/type.d.ts @@ -26,23 +26,6 @@ export type ChatSchema = { metadata?: Record; }; -export type teamInfoType = { - avatar: string; - balance: number; - createTime: string; - maxSize: number; - name: string; - ownerId: string; - tagsUrl: string; - _id: string; -}; - -export type chatAppListSchema = { - apps: AppType[]; - teamInfo: teamInfoSchema; - uid?: string; -}; - export type ChatWithAppSchema = Omit & { appId: AppSchema; }; @@ -90,6 +73,13 @@ export type ChatSiteItemType = ChatItemType & { ttsBuffer?: Uint8Array; }; +/* --------- team chat --------- */ +export type ChatAppListSchema = { + apps: AppType[]; + teamInfo: teamInfoSchema; + uid?: string; +}; + /* ---------- history ------------- */ export type HistoryItemType = { chatId: string; @@ -111,7 +101,7 @@ export type moduleDispatchResType = { textOutput?: string; // bill - charsLength?: number; + tokens?: number; model?: string; contextTotalLen?: number; totalPoints?: number; @@ -129,7 +119,7 @@ export type moduleDispatchResType = { searchUsingReRank?: boolean; extensionModel?: string; extensionResult?: string; - extensionCharsLength?: number; + extensionTokens?: number; // cq cqList?: ClassifyQuestionAgentItemType[]; diff --git a/packages/global/core/dataset/constants.ts b/packages/global/core/dataset/constants.ts index 4afb5f744..87f569c1c 100644 --- a/packages/global/core/dataset/constants.ts +++ b/packages/global/core/dataset/constants.ts @@ -75,17 +75,25 @@ export const DatasetCollectionSyncResultMap = { /* ------------ training -------------- */ export enum TrainingModeEnum { chunk = 'chunk', + auto = 'auto', qa = 'qa' } export const TrainingTypeMap = { [TrainingModeEnum.chunk]: { label: 'core.dataset.training.Chunk mode', - tooltip: 'core.dataset.import.Chunk Split Tip' + tooltip: 'core.dataset.import.Chunk Split Tip', + isPlus: true + }, + [TrainingModeEnum.auto]: { + label: 'core.dataset.training.Auto mode', + tooltip: 'core.dataset.training.Auto mode Tip', + isPlus: true }, [TrainingModeEnum.qa]: { label: 'core.dataset.training.QA mode', - tooltip: 'core.dataset.import.QA Import Tip' + tooltip: 'core.dataset.import.QA Import Tip', + isPlus: true } }; diff --git a/packages/global/core/dataset/utils.ts b/packages/global/core/dataset/utils.ts index d9ccb6480..2bce543b2 100644 --- a/packages/global/core/dataset/utils.ts +++ b/packages/global/core/dataset/utils.ts @@ -48,5 +48,6 @@ export function getDefaultIndex(props?: { q?: string; a?: string; dataId?: strin export const predictDataLimitLength = (mode: `${TrainingModeEnum}`, data: any[]) => { if (mode === TrainingModeEnum.qa) return data.length * 20; + if (mode === TrainingModeEnum.auto) return data.length * 5; return data.length; }; diff --git a/packages/global/core/module/type.d.ts b/packages/global/core/module/type.d.ts index 02acd6074..dfb630d64 100644 --- a/packages/global/core/module/type.d.ts +++ b/packages/global/core/module/type.d.ts @@ -8,7 +8,7 @@ import { import { FlowNodeInputItemType, FlowNodeOutputItemType } from './node/type'; import { UserModelSchema } from 'support/user/type'; import { moduleDispatchResType } from '..//chat/type'; -import { ChatModuleBillType } from '../../support/wallet/bill/type'; +import { ChatModuleUsageType } from '../../support/wallet/bill/type'; export type FlowModuleTemplateType = { id: string; // module id, unique @@ -129,5 +129,5 @@ export type ModuleDispatchProps = ChatDispatchProps & { }; export type ModuleDispatchResponse = T & { [ModuleOutputKeyEnum.responseData]?: moduleDispatchResType; - [ModuleOutputKeyEnum.moduleDispatchBills]?: ChatModuleBillType[]; + [ModuleOutputKeyEnum.moduleDispatchBills]?: ChatModuleUsageType[]; }; diff --git a/packages/global/support/outLink/type.d.ts b/packages/global/support/outLink/type.d.ts index 812f854a2..619caa8e4 100644 --- a/packages/global/support/outLink/type.d.ts +++ b/packages/global/support/outLink/type.d.ts @@ -1,3 +1,4 @@ +import { AppSchema } from 'core/app/type'; import { OutLinkTypeEnum } from './constant'; export type OutLinkSchema = { @@ -18,6 +19,9 @@ export type OutLinkSchema = { hookUrl?: string; }; }; +export type OutLinkWithAppType = Omit & { + appId: AppSchema; +}; export type OutLinkEditType = { _id?: string; diff --git a/packages/global/support/permission/chat.d.ts b/packages/global/support/permission/chat.d.ts new file mode 100644 index 000000000..cb1e70709 --- /dev/null +++ b/packages/global/support/permission/chat.d.ts @@ -0,0 +1,9 @@ +type ShareChatAuthProps = { + shareId?: string; + outLinkUid?: string; +}; +type TeamChatAuthProps = { + teamId?: string; + teamToken?: string; +}; +export type OutLinkChatAuthProps = ShareChatAuthProps & TeamChatAuthProps; diff --git a/packages/global/support/permission/constant.ts b/packages/global/support/permission/constant.ts index c0624a1e9..5a9851fb5 100644 --- a/packages/global/support/permission/constant.ts +++ b/packages/global/support/permission/constant.ts @@ -2,7 +2,8 @@ export enum AuthUserTypeEnum { token = 'token', root = 'root', apikey = 'apikey', - outLink = 'outLink' + outLink = 'outLink', + teamDomain = 'teamDomain' } export enum PermissionTypeEnum { diff --git a/packages/global/support/user/api.d.ts b/packages/global/support/user/api.d.ts index 5f7d8e212..85f60bf2b 100644 --- a/packages/global/support/user/api.d.ts +++ b/packages/global/support/user/api.d.ts @@ -10,7 +10,11 @@ export type OauthLoginProps = { code: string; callbackUrl: string; inviterId?: string; - tmbId?: string; +}; + +export type WxLoginProps = { + inviterId?: string; + code: string; }; export type FastLoginProps = { diff --git a/packages/global/support/user/auth/constants.ts b/packages/global/support/user/auth/constants.ts new file mode 100644 index 000000000..068203dcb --- /dev/null +++ b/packages/global/support/user/auth/constants.ts @@ -0,0 +1,11 @@ +export enum UserAuthTypeEnum { + register = 'register', + findPassword = 'findPassword', + wxLogin = 'wxLogin' +} + +export const userAuthTypeMap = { + [UserAuthTypeEnum.register]: 'register', + [UserAuthTypeEnum.findPassword]: 'findPassword', + [UserAuthTypeEnum.wxLogin]: 'wxLogin' +}; diff --git a/packages/global/support/user/constant.ts b/packages/global/support/user/constant.ts index f7f388def..332090a6a 100644 --- a/packages/global/support/user/constant.ts +++ b/packages/global/support/user/constant.ts @@ -13,10 +13,6 @@ export const userStatusMap = { export enum OAuthEnum { github = 'github', - google = 'google' -} - -export enum UserAuthTypeEnum { - register = 'register', - findPassword = 'findPassword' + google = 'google', + wechat = 'wechat' } diff --git a/packages/global/support/user/login/api.d.ts b/packages/global/support/user/login/api.d.ts new file mode 100644 index 000000000..d71181491 --- /dev/null +++ b/packages/global/support/user/login/api.d.ts @@ -0,0 +1,4 @@ +export type GetWXLoginQRResponse = { + code: string; + codeUrl: string; +}; diff --git a/packages/global/support/user/team/controller.d.ts b/packages/global/support/user/team/controller.d.ts index 121de43bd..991fa48c6 100644 --- a/packages/global/support/user/team/controller.d.ts +++ b/packages/global/support/user/team/controller.d.ts @@ -15,7 +15,7 @@ export type UpdateTeamProps = { teamId: string; name?: string; avatar?: string; - tagsUrl?: string; + teamDomain?: string; }; /* ------------- member ----------- */ diff --git a/packages/global/support/user/team/tag.d.ts b/packages/global/support/user/team/tag.d.ts new file mode 100644 index 000000000..84b01e9c6 --- /dev/null +++ b/packages/global/support/user/team/tag.d.ts @@ -0,0 +1,14 @@ +export type AuthTeamTagTokenProps = { + teamId: string; + teamToken: string; +}; + +export type AuthTokenFromTeamDomainResponse = { + success: boolean; + msg?: string; + message?: string; + data: { + uid: string; + tags: string[]; + }; +}; diff --git a/packages/global/support/user/team/type.d.ts b/packages/global/support/user/team/type.d.ts index af34a8ea4..e4214f496 100644 --- a/packages/global/support/user/team/type.d.ts +++ b/packages/global/support/user/team/type.d.ts @@ -8,22 +8,19 @@ export type TeamSchema = { avatar: string; createTime: Date; balance: number; - maxSize: number; - tagsUrl: string; + teamDomain: string; limit: { lastExportDatasetTime: Date; lastWebsiteSyncTime: Date; }; }; export type tagsType = { - label: string, - key: string -} -export type TeamTagsSchema = { - _id: string; label: string; - teamId: string; key: string; +}; +export type TeamTagSchema = TeamTagItemType & { + _id: string; + teamId: string; createTime: Date; }; @@ -56,11 +53,11 @@ export type TeamItemType = { avatar: string; balance: number; tmbId: string; + teamDomain: string; defaultTeam: boolean; role: `${TeamMemberRoleEnum}`; status: `${TeamMemberStatusEnum}`; canWrite: boolean; - maxSize: number; }; export type TeamMemberItemType = { @@ -72,3 +69,8 @@ export type TeamMemberItemType = { role: `${TeamMemberRoleEnum}`; status: `${TeamMemberStatusEnum}`; }; + +export type TeamTagItemType = { + label: string; + key: string; +}; diff --git a/packages/global/support/wallet/bill/type.d.ts b/packages/global/support/wallet/bill/type.d.ts index bbb1ccf28..17d15d58b 100644 --- a/packages/global/support/wallet/bill/type.d.ts +++ b/packages/global/support/wallet/bill/type.d.ts @@ -21,9 +21,9 @@ export type BillSchemaType = { }; }; -export type ChatModuleBillType = { +export type ChatModuleUsageType = { + tokens?: number; totalPoints: number; moduleName: string; model?: string; - charsLength?: number; }; diff --git a/packages/global/support/wallet/usage/api.d.ts b/packages/global/support/wallet/usage/api.d.ts index f87fd4e6c..88d1f9ea6 100644 --- a/packages/global/support/wallet/usage/api.d.ts +++ b/packages/global/support/wallet/usage/api.d.ts @@ -20,7 +20,6 @@ export type CreateUsageProps = { appName: string; appId?: string; totalPoints: number; - // inputTokens: number; source: `${UsageSourceEnum}`; list: UsageListItemType[]; }; diff --git a/packages/global/support/wallet/usage/type.d.ts b/packages/global/support/wallet/usage/type.d.ts index 8f686b607..09a1c4182 100644 --- a/packages/global/support/wallet/usage/type.d.ts +++ b/packages/global/support/wallet/usage/type.d.ts @@ -2,6 +2,7 @@ import { CreateUsageProps } from './api'; import { UsageSourceEnum } from './constants'; export type UsageListItemCountType = { + tokens?: number; charsLength?: number; duration?: number; }; diff --git a/packages/service/common/mongo/init.ts b/packages/service/common/mongo/init.ts index 80c6cea99..db1de6c1c 100644 --- a/packages/service/common/mongo/init.ts +++ b/packages/service/common/mongo/init.ts @@ -34,6 +34,12 @@ export async function connectMongo({ retryReads: true }); + mongoose.connection.on('error', (error) => { + console.log('mongo error', error); + global.mongodb?.disconnect(); + global.mongodb = undefined; + }); + console.log('mongo connected'); afterHook && (await afterHook()); diff --git a/packages/service/common/system/log.ts b/packages/service/common/system/log.ts index a87859022..7c7cbb72b 100644 --- a/packages/service/common/system/log.ts +++ b/packages/service/common/system/log.ts @@ -3,9 +3,12 @@ import dayjs from 'dayjs'; /* add logger */ export const addLog = { log(level: 'info' | 'warn' | 'error', msg: string, obj: Record = {}) { + const stringifyObj = JSON.stringify(obj); + const isEmpty = Object.keys(obj).length === 0; + console.log( `[${level.toLocaleUpperCase()}] ${dayjs().format('YYYY-MM-DD HH:mm:ss')} ${msg} ${ - level !== 'error' ? JSON.stringify(obj) : '' + level !== 'error' && !isEmpty ? stringifyObj : '' }` ); diff --git a/packages/service/common/system/tools.ts b/packages/service/common/system/tools.ts index e7229917e..e5fc7c053 100644 --- a/packages/service/common/system/tools.ts +++ b/packages/service/common/system/tools.ts @@ -11,6 +11,7 @@ export const initFastGPTConfig = (config?: FastGPTConfigFileType) => { if (!config) return; global.feConfigs = config.feConfigs; + global.systemEnv = config.systemEnv; global.subPlans = config.subPlans; global.llmModels = config.llmModels; diff --git a/packages/service/common/vectorStore/controller.ts b/packages/service/common/vectorStore/controller.ts index 65da5f88a..e5d6a0e2a 100644 --- a/packages/service/common/vectorStore/controller.ts +++ b/packages/service/common/vectorStore/controller.ts @@ -22,7 +22,7 @@ export const insertDatasetDataVector = async ({ query: string; model: VectorModelItemType; }) => { - const { vectors, charsLength } = await getVectorsByText({ + const { vectors, tokens } = await getVectorsByText({ model, input: query }); @@ -32,27 +32,7 @@ export const insertDatasetDataVector = async ({ }); return { - charsLength, + tokens, insertId }; }; - -// export const updateDatasetDataVector = async ({ -// id, -// ...props -// }: InsertVectorProps & { -// id: string; -// query: string; -// model: VectorModelItemType; -// }) => { -// // insert new vector -// const { charsLength, insertId } = await insertDatasetDataVector(props); - -// // delete old vector -// await deleteDatasetDataVector({ -// teamId: props.teamId, -// id -// }); - -// return { charsLength, insertId }; -// }; diff --git a/packages/service/core/ai/embedding/index.ts b/packages/service/core/ai/embedding/index.ts index aa29738c9..50251dc91 100644 --- a/packages/service/core/ai/embedding/index.ts +++ b/packages/service/core/ai/embedding/index.ts @@ -1,6 +1,6 @@ import { VectorModelItemType } from '@fastgpt/global/core/ai/model.d'; import { getAIApi } from '../config'; -import { replaceValidChars } from '../../chat/utils'; +import { countPromptTokens } from '@fastgpt/global/common/string/tiktoken'; type GetVectorProps = { model: VectorModelItemType; @@ -37,7 +37,7 @@ export async function getVectorsByText({ model, input }: GetVectorProps) { } return { - charsLength: replaceValidChars(input).length, + tokens: countPromptTokens(input), vectors: await Promise.all(res.data.map((item) => unityDimensional(item.embedding))) }; }); diff --git a/packages/service/core/ai/functions/createQuestionGuide.ts b/packages/service/core/ai/functions/createQuestionGuide.ts index e84e457b8..127f8eb3a 100644 --- a/packages/service/core/ai/functions/createQuestionGuide.ts +++ b/packages/service/core/ai/functions/createQuestionGuide.ts @@ -1,6 +1,6 @@ import type { ChatMessageItemType } from '@fastgpt/global/core/ai/type.d'; import { getAIApi } from '../config'; -import { countGptMessagesChars } from '../../chat/utils'; +import { countGptMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; export const Prompt_QuestionGuide = `我不太清楚问你什么问题,请帮我生成 3 个问题,引导我继续提问。问题的长度应小于20个字符,按 JSON 格式返回: ["问题1", "问题2", "问题3"]`; @@ -34,12 +34,12 @@ export async function createQuestionGuide({ const start = answer.indexOf('['); const end = answer.lastIndexOf(']'); - const charsLength = countGptMessagesChars(concatMessages); + const tokens = countGptMessagesTokens(concatMessages); if (start === -1 || end === -1) { return { result: [], - charsLength: 0 + tokens: 0 }; } @@ -51,12 +51,12 @@ export async function createQuestionGuide({ try { return { result: JSON.parse(jsonStr), - charsLength + tokens }; } catch (error) { return { result: [], - charsLength: 0 + tokens: 0 }; } } diff --git a/packages/service/core/ai/functions/queryExtension.ts b/packages/service/core/ai/functions/queryExtension.ts index 48c5a50b8..8073955ba 100644 --- a/packages/service/core/ai/functions/queryExtension.ts +++ b/packages/service/core/ai/functions/queryExtension.ts @@ -1,7 +1,7 @@ import { replaceVariable } from '@fastgpt/global/common/string/tools'; import { getAIApi } from '../config'; import { ChatItemType } from '@fastgpt/global/core/chat/type'; -import { countGptMessagesChars } from '../../chat/utils'; +import { countGptMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; /* query extension - 问题扩展 @@ -106,7 +106,7 @@ export const queryExtension = async ({ rawQuery: string; extensionQueries: string[]; model: string; - charsLength: number; + tokens: number; }> => { const systemFewShot = chatBg ? `Q: 对话背景。 @@ -148,7 +148,7 @@ A: ${chatBg} rawQuery: query, extensionQueries: [], model, - charsLength: 0 + tokens: 0 }; } @@ -161,7 +161,7 @@ A: ${chatBg} rawQuery: query, extensionQueries: queries, model, - charsLength: countGptMessagesChars(messages) + tokens: countGptMessagesTokens(messages) }; } catch (error) { console.log(error); @@ -169,7 +169,7 @@ A: ${chatBg} rawQuery: query, extensionQueries: [], model, - charsLength: 0 + tokens: 0 }; } }; diff --git a/packages/service/core/chat/utils.ts b/packages/service/core/chat/utils.ts index a0bde781a..0f993145d 100644 --- a/packages/service/core/chat/utils.ts +++ b/packages/service/core/chat/utils.ts @@ -1,11 +1,7 @@ import type { ChatItemType } from '@fastgpt/global/core/chat/type.d'; import { ChatRoleEnum, IMG_BLOCK_KEY } from '@fastgpt/global/core/chat/constants'; -import { countMessagesTokens, countPromptTokens } from '@fastgpt/global/common/string/tiktoken'; -import { adaptRole_Chat2Message } from '@fastgpt/global/core/chat/adapt'; -import type { - ChatCompletionContentPart, - ChatMessageItemType -} from '@fastgpt/global/core/ai/type.d'; +import { countMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; +import type { ChatCompletionContentPart } from '@fastgpt/global/core/ai/type.d'; import axios from 'axios'; /* slice chat context by tokens */ @@ -32,26 +28,34 @@ export function ChatContextFilter({ const chatPrompts: ChatItemType[] = messages.slice(chatStartIndex); // reduce token of systemPrompt - maxTokens -= countMessagesTokens({ - messages: systemPrompts - }); + maxTokens -= countMessagesTokens(systemPrompts); - // 根据 tokens 截断内容 - const chats: ChatItemType[] = []; + // Save the last chat prompt(question) + const question = chatPrompts.pop(); + if (!question) { + return systemPrompts; + } + const chats: ChatItemType[] = [question]; - // 从后往前截取对话内容 - for (let i = chatPrompts.length - 1; i >= 0; i--) { - const item = chatPrompts[i]; - chats.unshift(item); + // 从后往前截取对话内容, 每次需要截取2个 + while (1) { + const assistant = chatPrompts.pop(); + const user = chatPrompts.pop(); + if (!assistant || !user) { + break; + } - const tokens = countPromptTokens(item.value, adaptRole_Chat2Message(item.obj)); + const tokens = countMessagesTokens([assistant, user]); maxTokens -= tokens; + /* 整体 tokens 超出范围,截断 */ + if (maxTokens < 0) { + break; + } - /* 整体 tokens 超出范围, system必须保留 */ - if (maxTokens <= 0) { - if (chats.length > 1) { - chats.shift(); - } + chats.unshift(assistant); + chats.unshift(user); + + if (chatPrompts.length === 0) { break; } } @@ -59,16 +63,6 @@ export function ChatContextFilter({ return [...systemPrompts, ...chats]; } -export const replaceValidChars = (str: string) => { - const reg = /[\s\r\n]+/g; - return str.replace(reg, ''); -}; -export const countMessagesChars = (messages: ChatItemType[]) => { - return messages.reduce((sum, item) => sum + replaceValidChars(item.value).length, 0); -}; -export const countGptMessagesChars = (messages: ChatMessageItemType[]) => - messages.reduce((sum, item) => sum + replaceValidChars(item.content).length, 0); - /** string to vision model. Follow the markdown code block rule for interception: diff --git a/packages/service/core/dataset/schema.ts b/packages/service/core/dataset/schema.ts index fc7135037..52badd16a 100644 --- a/packages/service/core/dataset/schema.ts +++ b/packages/service/core/dataset/schema.ts @@ -4,6 +4,7 @@ import { DatasetSchemaType } from '@fastgpt/global/core/dataset/type.d'; import { DatasetStatusEnum, DatasetStatusMap, + DatasetTypeEnum, DatasetTypeMap } from '@fastgpt/global/core/dataset/constants'; import { @@ -39,7 +40,7 @@ const DatasetSchema = new Schema({ type: String, enum: Object.keys(DatasetTypeMap), required: true, - default: 'dataset' + default: DatasetTypeEnum.dataset }, status: { type: String, diff --git a/packages/service/core/dataset/training/controller.ts b/packages/service/core/dataset/training/controller.ts index cccf1932a..2ed81b435 100644 --- a/packages/service/core/dataset/training/controller.ts +++ b/packages/service/core/dataset/training/controller.ts @@ -46,12 +46,16 @@ export async function pushDataListToTrainingQueue({ } = await getCollectionWithDataset(collectionId); const checkModelValid = async () => { - if (trainingMode === TrainingModeEnum.chunk) { - const vectorModelData = vectorModelList?.find((item) => item.model === vectorModel); - if (!vectorModelData) { - return Promise.reject(`File model ${vectorModel} is inValid`); - } + const agentModelData = datasetModelList?.find((item) => item.model === agentModel); + if (!agentModelData) { + return Promise.reject(`Vector model ${agentModel} is inValid`); + } + const vectorModelData = vectorModelList?.find((item) => item.model === vectorModel); + if (!vectorModelData) { + return Promise.reject(`File model ${vectorModel} is inValid`); + } + if (trainingMode === TrainingModeEnum.chunk) { return { maxToken: vectorModelData.maxToken * 1.3, model: vectorModelData.model, @@ -59,17 +63,14 @@ export async function pushDataListToTrainingQueue({ }; } - if (trainingMode === TrainingModeEnum.qa) { - const qaModelData = datasetModelList?.find((item) => item.model === agentModel); - if (!qaModelData) { - return Promise.reject(`Vector model ${agentModel} is inValid`); - } + if (trainingMode === TrainingModeEnum.qa || trainingMode === TrainingModeEnum.auto) { return { - maxToken: qaModelData.maxContext * 0.8, - model: qaModelData.model, + maxToken: agentModelData.maxContext * 0.8, + model: agentModelData.model, weight: 0 }; } + return Promise.reject(`Training mode "${trainingMode}" is inValid`); }; diff --git a/packages/service/core/dataset/training/utils.ts b/packages/service/core/dataset/training/utils.ts new file mode 100644 index 000000000..fb579148a --- /dev/null +++ b/packages/service/core/dataset/training/utils.ts @@ -0,0 +1,41 @@ +import { DatasetTrainingSchemaType } from '@fastgpt/global/core/dataset/type'; +import { addLog } from '../../../common/system/log'; +import { getErrText } from '@fastgpt/global/common/error/utils'; +import { MongoDatasetTraining } from './schema'; + +export const checkInvalidChunkAndLock = async ({ + err, + errText, + data +}: { + err: any; + errText: string; + data: DatasetTrainingSchemaType; +}) => { + if (err?.response) { + addLog.error(`openai error: ${errText}`, { + status: err.response?.status, + statusText: err.response?.statusText, + data: err.response?.data + }); + } else { + addLog.error(getErrText(err, errText), err); + } + + if ( + err?.message === 'invalid message format' || + err?.type === 'invalid_request_error' || + err?.code === 500 + ) { + addLog.info('Lock training data'); + console.log(err); + + try { + await MongoDatasetTraining.findByIdAndUpdate(data._id, { + lockTime: new Date('2998/5/5') + }); + } catch (error) {} + return true; + } + return false; +}; diff --git a/packages/service/support/outLink/schema.ts b/packages/service/support/outLink/schema.ts index 3d6d18482..666f56701 100644 --- a/packages/service/support/outLink/schema.ts +++ b/packages/service/support/outLink/schema.ts @@ -6,6 +6,7 @@ import { TeamCollectionName, TeamMemberCollectionName } from '@fastgpt/global/support/user/team/constant'; +import { appCollectionName } from '../../core/app/schema'; const OutLinkSchema = new Schema({ shareId: { @@ -24,7 +25,7 @@ const OutLinkSchema = new Schema({ }, appId: { type: Schema.Types.ObjectId, - ref: 'model', + ref: appCollectionName, required: true }, type: { diff --git a/packages/service/support/permission/auth/common.ts b/packages/service/support/permission/auth/common.ts index 7b8b80f0b..b85c3cd0e 100644 --- a/packages/service/support/permission/auth/common.ts +++ b/packages/service/support/permission/auth/common.ts @@ -1,7 +1,5 @@ -import { AuthUserTypeEnum } from '@fastgpt/global/support/permission/constant'; import { parseHeaderCert } from '../controller'; import { AuthModeType } from '../type'; -import { authOutLinkValid } from './outLink'; import { SERVICE_LOCAL_HOST } from '../../../common/system/tools'; export const authCert = async (props: AuthModeType) => { @@ -13,25 +11,6 @@ export const authCert = async (props: AuthModeType) => { canWrite: true }; }; -export async function authCertOrShareId({ - shareId, - ...props -}: AuthModeType & { shareId?: string }) { - if (!shareId) { - return authCert(props); - } - - const { shareChat } = await authOutLinkValid({ shareId }); - - return { - teamId: String(shareChat.teamId), - tmbId: String(shareChat.tmbId), - authType: AuthUserTypeEnum.outLink, - apikey: '', - isOwner: false, - canWrite: false - }; -} /* auth the request from local service */ export const authRequestFromLocal = ({ req }: AuthModeType) => { diff --git a/packages/service/support/user/team/controller.ts b/packages/service/support/user/team/controller.ts index 17e27ab5f..772afc2f0 100644 --- a/packages/service/support/user/team/controller.ts +++ b/packages/service/support/user/team/controller.ts @@ -23,11 +23,11 @@ async function getTeamMember(match: Record): Promise avatar: tmb.teamId.avatar, balance: tmb.teamId.balance, tmbId: String(tmb._id), + teamDomain: tmb.teamId?.teamDomain, role: tmb.role, status: tmb.status, defaultTeam: tmb.defaultTeam, - canWrite: tmb.role !== TeamMemberRoleEnum.visitor, - maxSize: tmb.teamId.maxSize + canWrite: tmb.role !== TeamMemberRoleEnum.visitor }; } @@ -55,14 +55,12 @@ export async function createDefaultTeam({ teamName = 'My Team', avatar = '/icon/logo.svg', balance, - maxSize = 5, session }: { userId: string; teamName?: string; avatar?: string; balance?: number; - maxSize?: number; session: ClientSession; }) { // auth default team @@ -82,7 +80,6 @@ export async function createDefaultTeam({ name: teamName, avatar, balance, - maxSize, createTime: new Date() } ], @@ -106,8 +103,7 @@ export async function createDefaultTeam({ console.log('default team exist', userId); await MongoTeam.findByIdAndUpdate(tmb.teamId, { $set: { - ...(balance !== undefined && { balance }), - maxSize + ...(balance !== undefined && { balance }) } }); } diff --git a/packages/service/support/user/team/teamSchema.ts b/packages/service/support/user/team/teamSchema.ts index 5a358b409..f644c5122 100644 --- a/packages/service/support/user/team/teamSchema.ts +++ b/packages/service/support/user/team/teamSchema.ts @@ -25,11 +25,7 @@ const TeamSchema = new Schema({ type: Number, default: 0 }, - maxSize: { - type: Number, - default: 1 - }, - tagsUrl: { + teamDomain: { type: String }, limit: { diff --git a/packages/service/support/user/team/teamTagsSchema.ts b/packages/service/support/user/team/teamTagsSchema.ts index f1c1044e6..51566edba 100644 --- a/packages/service/support/user/team/teamTagsSchema.ts +++ b/packages/service/support/user/team/teamTagsSchema.ts @@ -1,23 +1,24 @@ import { connectionMongo, type Model } from '../../../common/mongo'; const { Schema, model, models } = connectionMongo; -import { TeamTagsSchema as TeamTagsSchemaType } from '@fastgpt/global/support/user/team/type.d'; +import { TeamTagSchema as TeamTagsSchemaType } from '@fastgpt/global/support/user/team/type.d'; import { TeamCollectionName, TeamTagsCollectionName } from '@fastgpt/global/support/user/team/constant'; -const TeamTagsSchema = new Schema({ - label: { - type: String, - required: true - }, +const TeamTagSchema = new Schema({ teamId: { type: Schema.Types.ObjectId, ref: TeamCollectionName, required: true }, key: { - type: String + type: String, + required: true + }, + label: { + type: String, + required: true }, createTime: { type: Date, @@ -26,10 +27,10 @@ const TeamTagsSchema = new Schema({ }); try { - TeamTagsSchema.index({ teamId: 1 }); + TeamTagSchema.index({ teamId: 1 }); } catch (error) { console.log(error); } export const MongoTeamTags: Model = - models[TeamTagsCollectionName] || model(TeamTagsCollectionName, TeamTagsSchema); + models[TeamTagsCollectionName] || model(TeamTagsCollectionName, TeamTagSchema); diff --git a/packages/service/support/wallet/usage/controller.ts b/packages/service/support/wallet/usage/controller.ts index 43e9534ae..30b446c1b 100644 --- a/packages/service/support/wallet/usage/controller.ts +++ b/packages/service/support/wallet/usage/controller.ts @@ -31,13 +31,19 @@ export const createTrainingUsage = async ({ { moduleName: 'support.wallet.moduleName.index', model: vectorModel, - charsLength: 0, + tokens: 0, amount: 0 }, { moduleName: 'support.wallet.moduleName.qa', model: agentModel, - charsLength: 0, + tokens: 0, + amount: 0 + }, + { + moduleName: 'core.dataset.training.Auto mode', + model: agentModel, + tokens: 0, amount: 0 } ] diff --git a/packages/service/support/wallet/usage/utils.ts b/packages/service/support/wallet/usage/utils.ts new file mode 100644 index 000000000..003c98d7a --- /dev/null +++ b/packages/service/support/wallet/usage/utils.ts @@ -0,0 +1,28 @@ +import { ModelTypeEnum, getModelMap } from '../../../core/ai/model'; + +export const formatModelChars2Points = ({ + model, + tokens = 0, + modelType, + multiple = 1000 +}: { + model: string; + tokens: number; + modelType: `${ModelTypeEnum}`; + multiple?: number; +}) => { + const modelData = getModelMap?.[modelType]?.(model); + if (!modelData) { + return { + totalPoints: 0, + modelName: '' + }; + } + + const totalPoints = (modelData.charsPointsPrice || 0) * (tokens / multiple); + + return { + modelName: modelData.name, + totalPoints + }; +}; diff --git a/packages/service/type.d.ts b/packages/service/type.d.ts index 616f6c837..93a1b7cce 100644 --- a/packages/service/type.d.ts +++ b/packages/service/type.d.ts @@ -1,4 +1,4 @@ -import { FastGPTFeConfigsType } from '@fastgpt/global/common/system/types'; +import { FastGPTFeConfigsType, SystemEnvType } from '@fastgpt/global/common/system/types'; import { AudioSpeechModelType, ReRankModelItemType, @@ -10,6 +10,7 @@ import { SubPlanType } from '@fastgpt/global/support/wallet/sub/type'; declare global { var feConfigs: FastGPTFeConfigsType; + var systemEnv: SystemEnvType; var subPlans: SubPlanType | undefined; var llmModels: LLMModelItemType[]; diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts index 60195ca81..2d6260b6a 100644 --- a/packages/web/components/common/Icon/constants.ts +++ b/packages/web/components/common/Icon/constants.ts @@ -52,6 +52,7 @@ export const iconPaths = { 'common/uploadFileFill': () => import('./icons/common/uploadFileFill.svg'), 'common/viewLight': () => import('./icons/common/viewLight.svg'), 'common/voiceLight': () => import('./icons/common/voiceLight.svg'), + 'common/wechatFill': () => import('./icons/common/wechatFill.svg'), copy: () => import('./icons/copy.svg'), 'core/app/aiFill': () => import('./icons/core/app/aiFill.svg'), 'core/app/aiLight': () => import('./icons/core/app/aiLight.svg'), @@ -144,6 +145,7 @@ export const iconPaths = { save: () => import('./icons/save.svg'), stop: () => import('./icons/stop.svg'), 'support/account/loginoutLight': () => import('./icons/support/account/loginoutLight.svg'), + 'support/account/passwordLogin': () => import('./icons/support/account/passwordLogin.svg'), 'support/account/plans': () => import('./icons/support/account/plans.svg'), 'support/account/promotionLight': () => import('./icons/support/account/promotionLight.svg'), 'support/bill/extraDatasetsize': () => import('./icons/support/bill/extraDatasetsize.svg'), diff --git a/packages/web/components/common/Icon/icons/common/wechatFill.svg b/packages/web/components/common/Icon/icons/common/wechatFill.svg new file mode 100644 index 000000000..57714a65d --- /dev/null +++ b/packages/web/components/common/Icon/icons/common/wechatFill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/support/account/passwordLogin.svg b/packages/web/components/common/Icon/icons/support/account/passwordLogin.svg new file mode 100644 index 000000000..492c5c8b1 --- /dev/null +++ b/packages/web/components/common/Icon/icons/support/account/passwordLogin.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/packages/web/components/common/Input/HttpInput/Editor.tsx b/packages/web/components/common/Input/HttpInput/Editor.tsx index 9fb26bbf0..b6f06e702 100644 --- a/packages/web/components/common/Input/HttpInput/Editor.tsx +++ b/packages/web/components/common/Input/HttpInput/Editor.tsx @@ -64,14 +64,17 @@ export default function Editor({ useEffect(() => { setKey(getNanoid(6)); + setFocus(false); }, [updateTrigger]); const dropdownVariables = useMemo( () => variables.filter((item) => { - return item.key.includes(currentValue || '') && item.key !== currentValue; + const key = item.key.toLowerCase(); + const current = currentValue?.toLowerCase(); + return key.includes(current || '') && item.key !== currentValue; }), - [currentValue] + [currentValue, variables] ); return ( @@ -115,7 +118,7 @@ export default function Editor({ }} /> {hasVariablePlugin ? : ''} - {hasVariablePlugin ? : ''} + diff --git a/packages/web/components/common/Textarea/JsonEditor/index.tsx b/packages/web/components/common/Textarea/JsonEditor/index.tsx index 51be2b638..3598d8a64 100644 --- a/packages/web/components/common/Textarea/JsonEditor/index.tsx +++ b/packages/web/components/common/Textarea/JsonEditor/index.tsx @@ -21,6 +21,7 @@ type Props = Omit & { value?: string; onChange?: (e: string) => void; variables?: EditorVariablePickerType[]; + defaultHeight?: number; }; const options = { @@ -52,11 +53,12 @@ const JSONEditor = ({ resize, variables = [], placeholder, + defaultHeight = 100, ...props }: Props) => { const { toast } = useToast(); const { t } = useTranslation(); - const [height, setHeight] = useState(props.height || 100); + const [height, setHeight] = useState(defaultHeight); const [placeholderDisplay, setPlaceholderDisplay] = useState('block'); const initialY = useRef(0); const completionRegisterRef = useRef(); @@ -205,7 +207,15 @@ const JSONEditor = ({ }, []); return ( - + {resize && ( )} - + { + onChange?.(e || ''); + if (!e) { + setPlaceholderDisplay('block'); + } else { + setPlaceholderDisplay('none'); + } + }} + wrapperProps={{ + onBlur + }} + onMount={() => { + if (!value) { + setPlaceholderDisplay('block'); + } else { + setPlaceholderDisplay('none'); + } + }} + /> - { - onChange?.(e || ''); - if (!e) { - setPlaceholderDisplay('block'); - } else { - setPlaceholderDisplay('none'); - } - }} - wrapperProps={{ - onBlur - }} - onMount={() => { - if (!value) { - setPlaceholderDisplay('block'); - } else { - setPlaceholderDisplay('none'); - } - }} - /> - - {placeholder} - + {placeholder} ); diff --git a/packages/web/components/common/Textarea/PromptEditor/modules/DropDownMenu/index.tsx b/packages/web/components/common/Textarea/PromptEditor/modules/DropDownMenu/index.tsx index de1be1c8e..edb11443c 100644 --- a/packages/web/components/common/Textarea/PromptEditor/modules/DropDownMenu/index.tsx +++ b/packages/web/components/common/Textarea/PromptEditor/modules/DropDownMenu/index.tsx @@ -44,6 +44,9 @@ export default function DropDownMenu({ position={'fixed'} w={'auto'} zIndex={99999} + maxH={'300px'} + overflow={'auto'} + className="nowheel" > {variables.map((item, index) => ( =0.10.0'} dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} @@ -458,20 +458,20 @@ packages: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + /@babel/core@7.24.0: + resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helpers': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -484,23 +484,23 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-compilation-targets@7.23.6: @@ -513,44 +513,44 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): - resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} + /@babel/helper-create-class-features-plugin@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.0): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9): + /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.24.0): resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -566,35 +566,35 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -605,33 +605,33 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.0): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.24.0): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -641,20 +641,20 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} @@ -673,17 +673,17 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: true - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + /@babel/helpers@7.24.0: + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -695,995 +695,995 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.0) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.24.0): resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.0): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.0): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): + /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.24.0): resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9): + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.24.0): resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.23.9 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.24.0): resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): + /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.24.0): resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.0): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + /@babel/plugin-transform-object-rest-spread@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.0): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/types': 7.24.0 dev: true - /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9): + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.0): resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/preset-env@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==} + /@babel/preset-env@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) - babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.24.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.24.0) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.24.0) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.24.0) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.24.0) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.0) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-object-rest-spread': 7.24.0(@babel/core@7.24.0) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.24.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.0) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.24.0) + babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.24.0) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.24.0) core-js-compat: 3.36.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.0): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.9 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/types': 7.24.0 esutils: 2.0.3 dev: true - /@babel/preset-react@7.23.3(@babel/core@7.23.9): + /@babel/preset-react@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.0) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.24.0) dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.9): + /@babel/preset-typescript@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.0) dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + /@babel/traverse@7.24.0: + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -1692,15 +1692,15 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -1711,7 +1711,7 @@ packages: resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} dev: false - /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0): + /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0): resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -1719,50 +1719,50 @@ packages: react: '>=18' dependencies: '@chakra-ui/descendant': 3.1.0(react@18.2.0) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@chakra-ui/transition': 2.1.0(framer-motion@9.1.7)(react@18.2.0) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@9.0.6)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==} + /@chakra-ui/alert@2.2.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-GduIqqWCkvID8hxRlKw29Jp3w93r/E9S30J2F8By3ODon9Bhk1o/KVolcPiSiQvRwKNBJCd/rBTpPpLkB+s7pw==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/anatomy@2.2.2: - resolution: {integrity: sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==} + /@chakra-ui/anatomy@2.2.1: + resolution: {integrity: sha512-bbmyWTGwQo+aHYDMtLIj7k7hcWvwE7GFVDViLFArrrPhfUTDdQTNqhiDp1N7eh2HLyjNhc2MKXV8s2KTQqkmTg==} dev: false - /@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -1771,7 +1771,7 @@ packages: '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -1781,7 +1781,7 @@ packages: '@chakra-ui/shared-utils': 2.0.5 dev: false - /@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -1790,29 +1790,29 @@ packages: '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==} + /@chakra-ui/checkbox@2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-e6qL9ntVI/Ui6g0+iljUV2chX86YMsXafldpTHBNYDEoNLjGo1lqLFzq3y6zs3iuB3DHI0X7eAG3REmMVs0A0w==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-types': 2.0.7(react@18.2.0) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) @@ -1821,8 +1821,8 @@ packages: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@zag-js/focus-visible': 0.16.0 react: 18.2.0 dev: false @@ -1850,14 +1850,14 @@ packages: react: 18.2.0 dev: false - /@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -1870,13 +1870,13 @@ packages: react: 18.2.0 dev: false - /@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -1891,13 +1891,13 @@ packages: react: 18.2.0 dev: false - /@chakra-ui/css-reset@2.3.0(@emotion/react@11.11.3)(react@18.2.0): + /@chakra-ui/css-reset@2.3.0(@emotion/react@11.11.1)(react@18.2.0): resolution: {integrity: sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==} peerDependencies: '@emotion/react': '>=10.0.35' react: '>=18' dependencies: - '@emotion/react': 11.11.3(@types/react@18.2.0)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) react: 18.2.0 dev: false @@ -1915,7 +1915,7 @@ packages: resolution: {integrity: sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==} dev: false - /@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -1930,7 +1930,7 @@ packages: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -1945,23 +1945,23 @@ packages: dependencies: '@chakra-ui/dom-utils': 2.1.0 react: 18.2.0 - react-focus-lock: 2.11.0(@types/react@18.2.0)(react@18.2.0) + react-focus-lock: 2.11.2(@types/react@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==} + /@chakra-ui/form-control@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-LJPDzA1ITc3lhd/iDiINqGeca5bJD09PZAjePGEmmZyLPZZi8nPh/iii0RMxvKyJArsTBwXymCh+dEqK9aDzGQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-types': 2.0.7(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -1977,29 +1977,29 @@ packages: react: 18.2.0 dev: false - /@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/icons@2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/icons@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-3p30hdo4LlRZTT5CwoAJq3G9fHI0wDc0pBaMHj4SUn0yomO+RcDRlzhdXqdr5cVnzax44sqXJVnf3oQG0eI+4g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2007,38 +2007,38 @@ packages: dependencies: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==} + /@chakra-ui/input@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-RQYzQ/qcak3eCuCfvSqc1kEFx0sCcnIeiSi7i0r70CeBnAUK/CP1/4Uz849FpKz81K4z2SikC9MkHPQd8ZpOwg==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: '@chakra-ui/breakpoint-utils': 2.0.8 - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-children-utils': 2.0.6(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -2054,7 +2054,7 @@ packages: react: 18.2.0 dev: false - /@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2063,11 +2063,11 @@ packages: '@chakra-ui/breakpoint-utils': 2.0.8 '@chakra-ui/react-env': 3.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0): + /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0): resolution: {integrity: sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2088,13 +2088,13 @@ packages: '@chakra-ui/react-use-outside-click': 2.2.0(react@18.2.0) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@chakra-ui/transition': 2.1.0(framer-motion@9.1.7)(react@18.2.0) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@9.0.6)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.0)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0): + /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.1)(@types/react@18.2.0)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2102,17 +2102,17 @@ packages: react: '>=18' react-dom: '>=18' dependencies: - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.0)(react@18.2.0) '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-types': 2.0.7(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@chakra-ui/transition': 2.1.0(framer-motion@9.1.7)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@9.0.6)(react@18.2.0) aria-hidden: 1.2.3 - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.7(@types/react@18.2.0)(react@18.2.0) @@ -2120,30 +2120,30 @@ packages: - '@types/react' dev: false - /@chakra-ui/next-js@2.2.0(@chakra-ui/react@2.8.2)(@emotion/react@11.11.3)(next@13.5.2)(react@18.2.0): - resolution: {integrity: sha512-brCz0UEOlImX4Np2jDIaljZJkW6kiDSuXG5erxvYjZlklLhmti1zj0o1sSjt5yff1xndfgHoOJb+BYG5wx+vDg==} + /@chakra-ui/next-js@2.1.5(@chakra-ui/react@2.8.1)(@emotion/react@11.11.1)(next@13.5.2)(react@18.2.0): + resolution: {integrity: sha512-bBd8zeXlAuVwDsjGN0/5ZZJknSbFeiZgJiGdbJo91v2lxKkOwo26b4ggc1ck1t+JR+daU6SrGBjlbQqSuWzyaA==} peerDependencies: '@chakra-ui/react': '>=2.4.0' '@emotion/react': '>=11' next: '>=13' react: '>=18' dependencies: - '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.0)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/react': 2.8.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.0)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0) '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.3(@types/react@18.2.0)(react@18.2.0) - next: 13.5.2(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.0) + '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) + next: 13.5.2(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3) react: 18.2.0 dev: false - /@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==} + /@chakra-ui/number-input@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-B4xwUPyr0NmjGN/dBhOmCD2xjX6OY1pr9GmGH3GQRozMsLAClD3TibwiZetwlyCp02qQqiFwEcZmUxaX88794Q==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: '@chakra-ui/counter': 2.1.0(react@18.2.0) - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-types': 2.0.7(react@18.2.0) '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.2.0) @@ -2153,7 +2153,7 @@ packages: '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -2165,7 +2165,7 @@ packages: resolution: {integrity: sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==} dev: false - /@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2177,18 +2177,18 @@ packages: '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0): + /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0): resolution: {integrity: sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==} peerDependencies: '@chakra-ui/system': '>=2.0.0' framer-motion: '>=4.0.0' react: '>=18' dependencies: - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/lazy-utils': 2.0.5 '@chakra-ui/popper': 3.1.0(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) @@ -2199,8 +2199,8 @@ packages: '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false @@ -2227,48 +2227,48 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: '@chakra-ui/react-context': 2.1.0(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/provider@2.4.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==} + /@chakra-ui/provider@2.4.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-u4g02V9tJ9vVYfkLz5jBn/bKlAyjLdg4Sh3f7uckmYVAZpOL/uUlrStyADrynu3tZhI+BE8XdmXC4zs/SYD7ow==} peerDependencies: '@emotion/react': ^11.0.0 '@emotion/styled': ^11.0.0 react: '>=18' react-dom: '>=18' dependencies: - '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.3)(react@18.2.0) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.1)(react@18.2.0) '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) '@chakra-ui/react-env': 3.1.0(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) '@chakra-ui/utils': 2.0.15 - '@emotion/react': 11.11.3(@types/react@18.2.0)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.0)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==} + /@chakra-ui/radio@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-5JXDVvMWsF/Cprh6BKfcTLbLtRcgD6Wl2zwbNU30nmKIE8+WUfqD7JQETV08oWEzhi3Ea4e5EHvyll2sGx8H3w==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-types': 2.0.7(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) '@zag-js/focus-visible': 0.16.0 react: 18.2.0 dev: false @@ -2468,8 +2468,8 @@ packages: react: 18.2.0 dev: false - /@chakra-ui/react@2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.0)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==} + /@chakra-ui/react@2.8.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.0)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UL9Rtj4DovP3+oVbI06gsdfyJJb+wmS2RYnGNXjW9tsjCyXxjlBw9TAUj0jyOfWe0+zd/4juL8+J+QCwmdhptg==} peerDependencies: '@emotion/react': ^11.0.0 '@emotion/styled': ^11.0.0 @@ -2477,77 +2477,77 @@ packages: react: '>=18' react-dom: '>=18' dependencies: - '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0) - '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0) + '@chakra-ui/alert': 2.2.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/checkbox': 2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/counter': 2.1.0(react@18.2.0) - '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.3)(react@18.2.0) - '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.11.1)(react@18.2.0) + '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/focus-lock': 2.1.0(@types/react@18.2.0)(react@18.2.0) - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/hooks': 2.2.1(react@18.2.0) - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/input': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/live-region': 2.1.0(react@18.2.0) - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0) - '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.0)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0) - '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0) + '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.1)(@types/react@18.2.0)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/number-input': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0) '@chakra-ui/popper': 3.1.0(react@18.2.0) '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) - '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/provider': 2.4.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0) - '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/provider': 2.4.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/radio': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-env': 3.1.0(react@18.2.0) - '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) - '@chakra-ui/theme-utils': 2.0.21 - '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0) - '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0) - '@chakra-ui/transition': 2.1.0(framer-motion@9.1.7)(react@18.2.0) + '@chakra-ui/select': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/styled-system': 2.9.1 + '@chakra-ui/switch': 2.1.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/textarea': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/theme': 3.3.0(@chakra-ui/styled-system@2.9.1) + '@chakra-ui/theme-utils': 2.0.20 + '@chakra-ui/toast': 7.0.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/tooltip': 2.3.0(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/transition': 2.1.0(framer-motion@9.0.6)(react@18.2.0) '@chakra-ui/utils': 2.0.15 - '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) - '@emotion/react': 11.11.3(@types/react@18.2.0)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.0)(react@18.2.0) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.0)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==} + /@chakra-ui/select@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-CERDATncv5w05Zo5/LrFtf1yKp1deyMUyDGv6eZvQG/etyukH4TstsuIHt/0GfNXrCF3CJLZ8lINzpv5wayVjQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false @@ -2555,30 +2555,30 @@ packages: resolution: {integrity: sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==} dev: false - /@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-use-previous': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2594,71 +2594,71 @@ packages: '@chakra-ui/react-use-pan-event': 2.1.0(react@18.2.0) '@chakra-ui/react-use-size': 2.1.0(react@18.2.0) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/styled-system@2.9.2: - resolution: {integrity: sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==} + /@chakra-ui/styled-system@2.9.1: + resolution: {integrity: sha512-jhYKBLxwOPi9/bQt9kqV3ELa/4CjmNNruTyXlPp5M0v0+pDMUngPp48mVLoskm9RKZGE0h1qpvj/jZ3K7c7t8w==} dependencies: '@chakra-ui/shared-utils': 2.0.5 csstype: 3.1.3 lodash.mergewith: 4.6.2 dev: false - /@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react@18.2.0): - resolution: {integrity: sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==} + /@chakra-ui/switch@2.1.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react@18.2.0): + resolution: {integrity: sha512-cOHIhW5AlLZSFENxFEBYTBniqiduOowa1WdzslP1Fd0usBFaD5iAgOY1Fvr7xKhE8nmzzeMCkPB3XBvUSWnawQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' framer-motion: '>=4.0.0' react: '>=18' dependencies: - '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/checkbox': 2.3.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/system@2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0): - resolution: {integrity: sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==} + /@chakra-ui/system@2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0): + resolution: {integrity: sha512-P5Q/XRWy3f1pXJ7IxDkV+Z6AT7GJeR2JlBnQl109xewVQcBLWWMIp702fFMFw8KZ2ALB/aYKtWm5EmQMddC/tg==} peerDependencies: '@emotion/react': ^11.0.0 '@emotion/styled': ^11.0.0 @@ -2667,16 +2667,16 @@ packages: '@chakra-ui/color-mode': 2.2.0(react@18.2.0) '@chakra-ui/object-utils': 2.1.0 '@chakra-ui/react-utils': 2.0.12(react@18.2.0) - '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/theme-utils': 2.0.21 + '@chakra-ui/styled-system': 2.9.1 + '@chakra-ui/theme-utils': 2.0.20 '@chakra-ui/utils': 2.0.15 - '@emotion/react': 11.11.3(@types/react@18.2.0)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.0)(react@18.2.0) + '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.0)(react@18.2.0) react: 18.2.0 react-fast-compare: 3.2.2 dev: false - /@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2684,11 +2684,11 @@ packages: dependencies: '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==} peerDependencies: '@chakra-ui/system': '>=2.0.0' @@ -2703,90 +2703,90 @@ packages: '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0): - resolution: {integrity: sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==} + /@chakra-ui/textarea@2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0): + resolution: {integrity: sha512-28bpwgmXg3BzSpg8i1Ao9h7pHaE1j2mBBFJpWaqPgMhS0IHm0BQsqqyWU6PsxxJDvrC4HN6MTzrIL4C1RA1I0A==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/form-control': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2): - resolution: {integrity: sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==} + /@chakra-ui/theme-tools@2.1.1(@chakra-ui/styled-system@2.9.1): + resolution: {integrity: sha512-n14L5L3ej3Zy+Xm/kDKO1G6/DkmieT7Li1C7NzMRcUj5C9YybQpyo7IZZ0BBUh3u+OVnKVhNC3d4P2NYDGRXmA==} peerDependencies: '@chakra-ui/styled-system': '>=2.0.0' dependencies: - '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/anatomy': 2.2.1 '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/styled-system': 2.9.1 color2k: 2.0.3 dev: false - /@chakra-ui/theme-utils@2.0.21: - resolution: {integrity: sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==} + /@chakra-ui/theme-utils@2.0.20: + resolution: {integrity: sha512-IkAzSmwBlRIZ3dN2InDz0tf9SldbckVkgwylCobSFmYP8lnMjykL8Lex1BBo9U8UQjZxEDVZ+Qw6SeayKRntOQ==} dependencies: '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) + '@chakra-ui/styled-system': 2.9.1 + '@chakra-ui/theme': 3.3.0(@chakra-ui/styled-system@2.9.1) lodash.mergewith: 4.6.2 dev: false - /@chakra-ui/theme@3.3.1(@chakra-ui/styled-system@2.9.2): - resolution: {integrity: sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==} + /@chakra-ui/theme@3.3.0(@chakra-ui/styled-system@2.9.1): + resolution: {integrity: sha512-VHY2ax5Wqgfm83U/zYBk0GS0TGD8m41s/rxQgnEq8tU+ug1YZjvOZmtOq/VjfKP/bQraFhCt05zchcxXmDpEYg==} peerDependencies: '@chakra-ui/styled-system': '>=2.8.0' dependencies: - '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/anatomy': 2.2.1 '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2) + '@chakra-ui/styled-system': 2.9.1 + '@chakra-ui/theme-tools': 2.1.1(@chakra-ui/styled-system@2.9.1) dev: false - /@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==} + /@chakra-ui/toast@7.0.1(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-V5JUhw6RZxbGRTijvd5k4iEMLCfbzTLNWbZLZhRZk10YvFfAP5OYfRCm68zpE/t3orN/f+4ZLL3P+Wb4E7oSmw==} peerDependencies: - '@chakra-ui/system': 2.6.2 + '@chakra-ui/system': 2.6.1 framer-motion: '>=4.0.0' react: '>=18' react-dom: '>=18' dependencies: - '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0) - '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0) + '@chakra-ui/alert': 2.2.1(@chakra-ui/system@2.6.1)(react@18.2.0) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.1)(react@18.2.0) '@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0) '@chakra-ui/react-context': 2.1.0(react@18.2.0) '@chakra-ui/react-use-timeout': 2.1.0(react@18.2.0) '@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/styled-system': 2.9.2 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/styled-system': 2.9.1 + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/theme': 3.3.0(@chakra-ui/styled-system@2.9.1) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@9.1.7)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==} + /@chakra-ui/tooltip@2.3.0(@chakra-ui/system@2.6.1)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2s23f93YIij1qEDwIK//KtEu4LLYOslhR1cUhDBk/WUzyFR3Ez0Ee+HlqlGEGfGe9x77E6/UXPnSAKKdF/cpsg==} peerDependencies: '@chakra-ui/system': '>=2.0.0' framer-motion: '>=4.0.0' @@ -2801,20 +2801,20 @@ packages: '@chakra-ui/react-use-event-listener': 2.1.0(react@18.2.0) '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0) '@chakra-ui/shared-utils': 2.0.5 - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@chakra-ui/transition@2.1.0(framer-motion@9.1.7)(react@18.2.0): + /@chakra-ui/transition@2.1.0(framer-motion@9.0.6)(react@18.2.0): resolution: {integrity: sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==} peerDependencies: framer-motion: '>=4.0.0' react: '>=18' dependencies: '@chakra-ui/shared-utils': 2.0.5 - framer-motion: 9.1.7(react-dom@18.2.0)(react@18.2.0) + framer-motion: 9.0.6(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 dev: false @@ -2827,37 +2827,21 @@ packages: lodash.mergewith: 4.6.2 dev: false - /@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0): + /@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.1)(react@18.2.0): resolution: {integrity: sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==} peerDependencies: '@chakra-ui/system': '>=2.0.0' react: '>=18' dependencies: - '@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) + '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) react: 18.2.0 dev: false - /@emnapi/core@0.45.0: - resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==} - requiresBuild: true - dependencies: - tslib: 2.6.2 - dev: false - optional: true - - /@emnapi/runtime@0.45.0: - resolution: {integrity: sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==} - requiresBuild: true - dependencies: - tslib: 2.6.2 - dev: false - optional: true - /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.3 @@ -2891,15 +2875,14 @@ packages: dev: false optional: true - /@emotion/is-prop-valid@1.2.1: - resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + /@emotion/is-prop-valid@1.2.2: + resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} dependencies: '@emotion/memoize': 0.8.1 dev: false /@emotion/memoize@0.7.4: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} - requiresBuild: true dev: false optional: true @@ -2907,8 +2890,8 @@ packages: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.11.3(@types/react@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} + /@emotion/react@11.11.1(@types/react@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: '@types/react': '*' react: '>=16.8.0' @@ -2916,7 +2899,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.3 @@ -2942,7 +2925,7 @@ packages: resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} dev: false - /@emotion/styled@11.11.0(@emotion/react@11.11.3)(@types/react@18.2.0)(react@18.2.0): + /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.0)(react@18.2.0): resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 @@ -2952,10 +2935,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.1 - '@emotion/react': 11.11.3(@types/react@18.2.0)(react@18.2.0) + '@emotion/is-prop-valid': 1.2.2 + '@emotion/react': 11.11.1(@types/react@18.2.0)(react@18.2.0) '@emotion/serialize': 1.1.3 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@emotion/utils': 1.2.1 @@ -2983,15 +2966,6 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.17.19: resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -3001,17 +2975,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + /@esbuild/android-arm@0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -3019,8 +2984,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -3037,15 +3002,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.17.19: resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} @@ -3055,15 +3011,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.17.19: resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} @@ -3073,15 +3020,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.17.19: resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} @@ -3091,15 +3029,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.17.19: resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} @@ -3109,15 +3038,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.17.19: resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} @@ -3127,15 +3047,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.17.19: resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} @@ -3145,15 +3056,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.17.19: resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} @@ -3163,17 +3065,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + /@esbuild/linux-loong64@0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3181,8 +3074,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3199,15 +3092,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.17.19: resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} @@ -3217,15 +3101,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.17.19: resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} @@ -3235,15 +3110,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.17.19: resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} @@ -3253,15 +3119,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.17.19: resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} @@ -3271,15 +3128,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.17.19: resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} @@ -3289,15 +3137,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.17.19: resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} @@ -3307,15 +3146,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.17.19: resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} @@ -3325,15 +3155,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.17.19: resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} @@ -3343,15 +3164,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.17.19: resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} @@ -3361,15 +3173,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.17.19: resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} @@ -3379,15 +3182,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint/eslintrc@1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3405,8 +3199,8 @@ packages: - supports-color dev: true - /@fingerprintjs/fingerprintjs@4.2.2: - resolution: {integrity: sha512-scD+pDgNZW78LuFAr7ms2yxmDx2NWC4+K5iiOjPT2ZlTlHFbLsORUzLJI2rcKicxxLtHbvf3A7BU1drVr4iHGg==} + /@fingerprintjs/fingerprintjs@4.2.1: + resolution: {integrity: sha512-uW+GVUNTgCXbVPEbgnbf5Aor22e1dyYR0JRwdUiZBaikfxr7KlhV9y0aahA1FB99fEeQVvhCEvTcPIFSYTy9Pw==} dependencies: tslib: 2.6.2 dev: false @@ -3436,46 +3230,27 @@ packages: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -3612,7 +3387,7 @@ packages: lexical: 0.12.6 dev: false - /@lexical/react@0.12.6(lexical@0.12.6)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.12): + /@lexical/react@0.12.6(lexical@0.12.6)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.14): resolution: {integrity: sha512-Pto4wsVwrnY94tzcCXP2kWukQejSRPDfwOPd+EFh8dUzj+L7fa9Pze2wVgCRZpEohwfbcgAdEsvmSbhz+yGkog==} peerDependencies: lexical: 0.12.6 @@ -3635,7 +3410,7 @@ packages: '@lexical/table': 0.12.6(lexical@0.12.6) '@lexical/text': 0.12.6(lexical@0.12.6) '@lexical/utils': 0.12.6(lexical@0.12.6) - '@lexical/yjs': 0.12.6(lexical@0.12.6)(yjs@13.6.12) + '@lexical/yjs': 0.12.6(lexical@0.12.6)(yjs@13.6.14) lexical: 0.12.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -3694,7 +3469,7 @@ packages: lexical: 0.12.6 dev: false - /@lexical/yjs@0.12.6(lexical@0.12.6)(yjs@13.6.12): + /@lexical/yjs@0.12.6(lexical@0.12.6)(yjs@13.6.14): resolution: {integrity: sha512-I/Yf/Qm8/ydU983kWpFBlDFNFQXLYur5uaAimTSBcJuqHmy3cv1xM7Xrq4BtM+0orKgWJt8vR8cLVIU9sAmzfw==} peerDependencies: lexical: 0.12.6 @@ -3702,13 +3477,12 @@ packages: dependencies: '@lexical/offset': 0.12.6(lexical@0.12.6) lexical: 0.12.6 - yjs: 13.6.12 + yjs: 13.6.14 dev: false /@mapbox/node-pre-gyp@1.0.11: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - requiresBuild: true dependencies: detect-libc: 2.0.2 https-proxy-agent: 5.0.1 @@ -3747,23 +3521,52 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mongodb-js/saslprep@1.1.4: - resolution: {integrity: sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==} - requiresBuild: true + /@motionone/animation@10.17.0: + resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==} dependencies: - sparse-bitfield: 3.0.3 + '@motionone/easing': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.6.2 dev: false - optional: true - /@napi-rs/wasm-runtime@0.1.1: - resolution: {integrity: sha512-ATj9ua659JgrkICjJscaeZdmPr44cb/KFjNWuD0N6pux0SpzaM7+iOuuK11mAnQM2N9q0DT4REu6NkL8ZEhopw==} - requiresBuild: true + /@motionone/dom@10.17.0: + resolution: {integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q==} dependencies: - '@emnapi/core': 0.45.0 - '@emnapi/runtime': 0.45.0 - '@tybys/wasm-util': 0.8.1 + '@motionone/animation': 10.17.0 + '@motionone/generators': 10.17.0 + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.6.2 + dev: false + + /@motionone/easing@10.17.0: + resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==} + dependencies: + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/generators@10.17.0: + resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==} + dependencies: + '@motionone/types': 10.17.0 + '@motionone/utils': 10.17.0 + tslib: 2.6.2 + dev: false + + /@motionone/types@10.17.0: + resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==} + dev: false + + /@motionone/utils@10.17.0: + resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==} + dependencies: + '@motionone/types': 10.17.0 + hey-listen: 1.0.8 + tslib: 2.6.2 dev: false - optional: true /@next/env@13.5.2: resolution: {integrity: sha512-dUseBIQVax+XtdJPzhwww4GetTjlkRSsXeQnisIJWBaHsnxYcN2RGzsPHi58D6qnkATjnhuAtQTJmR1hKYQQPg==} @@ -3850,8 +3653,8 @@ packages: requiresBuild: true optional: true - /@node-rs/jieba-android-arm-eabi@1.9.2: - resolution: {integrity: sha512-FbgUDCvek/KI4mJe5wqbbJi9kDE788YVvsA7DLTE0up+Tb/A7pNIJXq4Pg7zhsgHTVL7EfHHsyd89k+YoSU7Wg==} + /@node-rs/jieba-android-arm-eabi@1.7.2: + resolution: {integrity: sha512-FyDHRNSRIHOQO7S6Q4RwuGffnnnuNwaXPH7K8WqSzifEY+zFIaSPcNqrZHrnqyeXc4JiYpBIHeP+0Mkf1kIGRA==} engines: {node: '>= 10'} cpu: [arm] os: [android] @@ -3859,8 +3662,8 @@ packages: dev: false optional: true - /@node-rs/jieba-android-arm64@1.9.2: - resolution: {integrity: sha512-o6cZz5APAUVBCTG9tNK3XEcLunjGo7Oon1N8+1EHOHPlx4Twzhn1msBtQ+VCgboHUOI+QgZzlY/sTXGfh8IuIA==} + /@node-rs/jieba-android-arm64@1.7.2: + resolution: {integrity: sha512-z0UEZCGrAX/IiarhuDMsEIDZBS77UZv4SQyL/J48yrsbWKbb2lJ1vCrYxXIWqwp6auXHEu4r1O/pMriDAcEnPg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -3868,8 +3671,8 @@ packages: dev: false optional: true - /@node-rs/jieba-darwin-arm64@1.9.2: - resolution: {integrity: sha512-68Pk5phmgn/k5w6nzZWYkDHwJ5wYagprVaSf/WgcPVucw9kAzVMZasGxXo2+Kqn2kMWhD7Dm2NT1TAromQq8Eg==} + /@node-rs/jieba-darwin-arm64@1.7.2: + resolution: {integrity: sha512-M2cHIWRaaOmXGKy446SH2+Y2PzREaI2oYznPbg55wYEdioUp01YS/2WRG8CaoCKEj0aUocA7MFM2vVcoIAsbQw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3877,8 +3680,8 @@ packages: dev: false optional: true - /@node-rs/jieba-darwin-x64@1.9.2: - resolution: {integrity: sha512-TXms+q4l7/0a7T+O9t5fQ0m6Qi+4XKgtaRmg089iYbvSp4JfX+XIg+ZLJG+9uc25oWpOgpt+z4bsz9rrHnW/6Q==} + /@node-rs/jieba-darwin-x64@1.7.2: + resolution: {integrity: sha512-euDawBU2FxB0CGTR803BA6WABsiicIrqa61z2AFFDPkJCDrauEM0jbMg3GDKLAvbaLbZ1Etu3QNN5xyroqp4Qw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3886,8 +3689,8 @@ packages: dev: false optional: true - /@node-rs/jieba-freebsd-x64@1.9.2: - resolution: {integrity: sha512-U4p8PSm+1onheBJUKlEyP4VRE42UrH+gXDYMJlWiJDqriAjZLvA+MdF5xiqeppH0dWc/tQu/ECLoj1WXkJKfvg==} + /@node-rs/jieba-freebsd-x64@1.7.2: + resolution: {integrity: sha512-vXCaYxPb90d/xTBVG+ZZXrFLXsO2719pZSyiZCL2tey+UY28U7MOoK6394Wwmf0FCB/eRTQMCKjVIUDi+IRMUg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] @@ -3895,8 +3698,8 @@ packages: dev: false optional: true - /@node-rs/jieba-linux-arm-gnueabihf@1.9.2: - resolution: {integrity: sha512-pelyUy0uFzR7dsnleN8A+4yiNRIRQYFDufbOapP9qkgpEOSvJaD6zYOi3HDm4GdXD5jD0UFNEYMCbi2+Ed2zIg==} + /@node-rs/jieba-linux-arm-gnueabihf@1.7.2: + resolution: {integrity: sha512-HTep79XlJYO3KRYZ2kJChG9HnYr1DKSQTB+HEYWKLK0ifphqybcxGNLAdH0S4dViG2ciD0+iN/refgtqZEidpw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -3904,8 +3707,8 @@ packages: dev: false optional: true - /@node-rs/jieba-linux-arm64-gnu@1.9.2: - resolution: {integrity: sha512-qgrEyYbzXyqoIcl2iLXMvIv4PC1Z84O5TGCGKwGibblHAOpWIVQzkquDhty/aE9Ju1OSJiNZGtE9ISlJXB/PJA==} + /@node-rs/jieba-linux-arm64-gnu@1.7.2: + resolution: {integrity: sha512-P8QJdQydOVewL1MIqYiRpI7LOfrRQag+p4/hwExe+YXH8C7DOrR8rWJD/7XNRTbpOimlHq1UN/e+ZzhxQF/cLw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3914,8 +3717,8 @@ packages: dev: false optional: true - /@node-rs/jieba-linux-arm64-musl@1.9.2: - resolution: {integrity: sha512-FMl9EYCJSKCfJb8rrk+9mmi44SwDyNCMLvxMzG/va59D0BRItmm4EP9Zd2QoKnGawV6Bw4BAXIrNhSg9gWedxg==} + /@node-rs/jieba-linux-arm64-musl@1.7.2: + resolution: {integrity: sha512-WjnN0hmDvTXb2h3hMW5VnUGkK1xaqhs+WHfMMilau55+YN+YOYALKZ0TeBY4BapClLuBx54wqwmBX+B4hAXunQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3924,8 +3727,8 @@ packages: dev: false optional: true - /@node-rs/jieba-linux-x64-gnu@1.9.2: - resolution: {integrity: sha512-+7wcz5+3HzOH8+PbNwOPuelTo6ik5jgrz8SFbd+JL6sZLap2pjpKWol5nJyNYNv90yRq1A6p8TrhFXCtVZujFA==} + /@node-rs/jieba-linux-x64-gnu@1.7.2: + resolution: {integrity: sha512-gBXds/DwNSA6lNUxJjL6WIaNT6pnlM5juUgV/krLLkBJ8vXpOrQ07p0rrK1tnigz9b20xhsHaFRSwED1Y8zeXw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3934,8 +3737,8 @@ packages: dev: false optional: true - /@node-rs/jieba-linux-x64-musl@1.9.2: - resolution: {integrity: sha512-ims1jOq99zTvcwcUXKuD+WT36KHHVNTq9Fm663YzMMBO+5sqLleQtQkZgbh0BHJI25jvW9IrBCvuS1ZwKZ6kOA==} + /@node-rs/jieba-linux-x64-musl@1.7.2: + resolution: {integrity: sha512-tNVD3SMuG5zAj7+bLS2Enio3zR7BPxi3PhQtpQ+Hv83jajIcN46QQ0EdoMFz/aB+hkQ9PlLAstu+VREFegs5EA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3944,18 +3747,8 @@ packages: dev: false optional: true - /@node-rs/jieba-wasm32-wasi@1.9.2: - resolution: {integrity: sha512-h/lWDJCYlsH3VUNWBCO2exite7VDPgjpOmaQgTQ6aNI5x8rR3NEkyXfmy/yWIev63tdMr9nD3sXw38QQp4ddIA==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - requiresBuild: true - dependencies: - '@napi-rs/wasm-runtime': 0.1.1 - dev: false - optional: true - - /@node-rs/jieba-win32-arm64-msvc@1.9.2: - resolution: {integrity: sha512-a3BkMcvW9sedSA1XlYvGEQSNQQrK4kUMULKTXmqboLjFbwI9v6flpDCiJyw2pXYs+1WT6XjTHvEyVsoGCVMRlQ==} + /@node-rs/jieba-win32-arm64-msvc@1.7.2: + resolution: {integrity: sha512-/e1iQ0Dh02lGPNCYTU/H3cfIsWydaGRzZ3TDj6GfWrxkWqXORL98x/VJ/C/uKLpc7GSLLd9ygyZG7SOAfKe2tA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3963,8 +3756,8 @@ packages: dev: false optional: true - /@node-rs/jieba-win32-ia32-msvc@1.9.2: - resolution: {integrity: sha512-k8xPkEOMJM3ic4UzvmvKELjPQsIFSo7mw1wx4tNrUN5mu5ANIhk1Fq0zXOcTbpIe7jHPsWaB5jYtBeeJ0h09iA==} + /@node-rs/jieba-win32-ia32-msvc@1.7.2: + resolution: {integrity: sha512-cYjA6YUiOwtuEzWErvwMMt/RETNWQDLcmAaiHA8ohsa6c0eB0kRJlQCc683tlaczZxqroY/7C9mxgJNGvoGRbw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3972,8 +3765,8 @@ packages: dev: false optional: true - /@node-rs/jieba-win32-x64-msvc@1.9.2: - resolution: {integrity: sha512-wIseuWUK+WdikhMFPLvr80D0I4wQJSdFsRIljiUhKwnNQESG20zIxSYE1qy7BNBd7s8fAn1BC6PGeg7S/2KliQ==} + /@node-rs/jieba-win32-x64-msvc@1.7.2: + resolution: {integrity: sha512-2M+Um3woFF17sa8VBYQQ6E5PNMe9Kf9fdzmeDh/GzuNHXlxW4LyK9VTV8zchIv/bDNAR5Z85kfW4wASULUxvFQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3981,24 +3774,23 @@ packages: dev: false optional: true - /@node-rs/jieba@1.9.2: - resolution: {integrity: sha512-H7/Pv9RBEgzcxVAM4yg6L4G10ZoiqVnNcUCs01yV9XIRwLmShUkdthkTqG8heyx2dAMRua+kofd28JtDWBHMfA==} + /@node-rs/jieba@1.7.2: + resolution: {integrity: sha512-zGto08NDU+KWm670qVHYGTb0YTEJ0A97dwH3WCnnhyRYMqTbOXKC6OwTc/cjzfSJP1UDBSar9Ug9BlmWmEThWg==} engines: {node: '>= 10'} optionalDependencies: - '@node-rs/jieba-android-arm-eabi': 1.9.2 - '@node-rs/jieba-android-arm64': 1.9.2 - '@node-rs/jieba-darwin-arm64': 1.9.2 - '@node-rs/jieba-darwin-x64': 1.9.2 - '@node-rs/jieba-freebsd-x64': 1.9.2 - '@node-rs/jieba-linux-arm-gnueabihf': 1.9.2 - '@node-rs/jieba-linux-arm64-gnu': 1.9.2 - '@node-rs/jieba-linux-arm64-musl': 1.9.2 - '@node-rs/jieba-linux-x64-gnu': 1.9.2 - '@node-rs/jieba-linux-x64-musl': 1.9.2 - '@node-rs/jieba-wasm32-wasi': 1.9.2 - '@node-rs/jieba-win32-arm64-msvc': 1.9.2 - '@node-rs/jieba-win32-ia32-msvc': 1.9.2 - '@node-rs/jieba-win32-x64-msvc': 1.9.2 + '@node-rs/jieba-android-arm-eabi': 1.7.2 + '@node-rs/jieba-android-arm64': 1.7.2 + '@node-rs/jieba-darwin-arm64': 1.7.2 + '@node-rs/jieba-darwin-x64': 1.7.2 + '@node-rs/jieba-freebsd-x64': 1.7.2 + '@node-rs/jieba-linux-arm-gnueabihf': 1.7.2 + '@node-rs/jieba-linux-arm64-gnu': 1.7.2 + '@node-rs/jieba-linux-arm64-musl': 1.7.2 + '@node-rs/jieba-linux-x64-gnu': 1.7.2 + '@node-rs/jieba-linux-x64-musl': 1.7.2 + '@node-rs/jieba-win32-arm64-msvc': 1.7.2 + '@node-rs/jieba-win32-ia32-msvc': 1.7.2 + '@node-rs/jieba-win32-x64-msvc': 1.7.2 dev: false /@nodelib/fs.scandir@2.1.5: @@ -4022,51 +3814,42 @@ packages: fastq: 1.17.1 dev: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - /@popperjs/core@2.11.8: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false - /@reactflow/background@11.3.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-byj/G9pEC8tN0wT/ptcl/LkEP/BBfa33/SvBkqE4XwyofckqF87lKp573qGlisfnsijwAbpDlf81PuFL41So4Q==} + /@reactflow/background@11.2.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-SYQbCRCU0GuxT/40Tm7ZK+l5wByGnNJSLtZhbL9C/Hl7JhsJXV3UGXr0vrlhVZUBEtkWA7XhZM/5S9XEA5XSFA==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0) + zustand: 4.3.5(immer@9.0.19)(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false - /@reactflow/controls@11.2.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-e8nWplbYfOn83KN1BrxTXS17+enLyFnjZPbyDgHSRLtI5ZGPKF/8iRXV+VXb2LFVzlu4Wh3la/pkxtfP/0aguA==} + /@reactflow/controls@11.1.15(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-//33XfBYu8vQ6brfmlZwKrDoh+8hh93xO2d88XiqfIbrPEEb32SYjsb9mS9VuHKNlSIW+eB27fBA1Gt00mEj5w==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0) + zustand: 4.3.5(immer@9.0.19)(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false - /@reactflow/core@11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-j3i9b2fsTX/sBbOm+RmNzYEFWbNx4jGWGuGooh2r1jQaE2eV+TLJgiG/VNOp0q5mBl9f6g1IXs3Gm86S9JfcGw==} + /@reactflow/core@11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-nt0T8ERp8TE7YCDQViaoEY9lb0StDPrWHVx3zBjhStFYET3wc88t8QRasZdf99xRTmyNtI3U3M40M5EBLNUpMw==} peerDependencies: react: '>=17' react-dom: '>=17' @@ -4081,19 +3864,18 @@ packages: d3-zoom: 3.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0) + zustand: 4.3.5(immer@9.0.19)(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false - /@reactflow/minimap@11.7.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-le95jyTtt3TEtJ1qa7tZ5hyM4S7gaEQkW43cixcMOZLu33VAdc2aCpJg/fXcRrrf7moN2Mbl9WIMNXUKsp5ILA==} + /@reactflow/minimap@11.5.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1tDBj2zX2gxu2oHU6qvH5RGNrOWRfRxu8369KhDotuuBN5yJrGXJzWIKikwhzjsNsQJYOB+B0cS44yWAfwSwzw==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) '@types/d3-selection': 3.0.10 '@types/d3-zoom': 3.0.8 classcat: 5.0.4 @@ -4101,258 +3883,142 @@ packages: d3-zoom: 3.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0) + zustand: 4.3.5(immer@9.0.19)(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false - /@reactflow/node-resizer@2.2.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HfickMm0hPDIHt9qH997nLdgLt0kayQyslKE0RS/GZvZ4UMQJlx/NRRyj5y47Qyg0NnC66KYOQWDM9LLzRTnUg==} + /@reactflow/node-resizer@2.1.1(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5Q+IBmZfpp/bYsw3+KRVJB1nUbj6W3XAp5ycx4uNWH+K98vbssymyQsW0vvKkIhxEPg6tkiMzO4UWRWvwBwt1g==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 d3-drag: 3.0.0 d3-selection: 3.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0) + zustand: 4.3.5(immer@9.0.19)(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false - /@reactflow/node-toolbar@1.3.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-VmgxKmToax4sX1biZ9LXA7cj/TBJ+E5cklLGwquCCVVxh+lxpZGTBF3a5FJGVHiUNBBtFsC8ldcSZIK4cAlQww==} + /@reactflow/node-toolbar@1.2.3(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uFQy9xpog92s0G1wsPLniwV9nyH4i/MmL7QoMsWdnKaOi7XMhd8SJcCzUdHC3imR21HltsuQITff/XQ51ApMbg==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - zustand: 4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0) + zustand: 4.3.5(immer@9.0.19)(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false - /@rollup/rollup-android-arm-eabi@4.11.0: - resolution: {integrity: sha512-BV+u2QSfK3i1o6FucqJh5IK9cjAU6icjFFhvknzFgu472jzl0bBojfDAkJLBEsHFMo+YZg6rthBvBBt8z12IBQ==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-android-arm64@4.11.0: - resolution: {integrity: sha512-0ij3iw7sT5jbcdXofWO2NqDNjSVVsf6itcAkV2I6Xsq4+6wjW1A8rViVB67TfBEan7PV2kbLzT8rhOVWLI2YXw==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.11.0: - resolution: {integrity: sha512-yPLs6RbbBMupArf6qv1UDk6dzZvlH66z6NLYEwqTU0VHtss1wkI4UYeeMS7TVj5QRVvaNAWYKP0TD/MOeZ76Zg==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.11.0: - resolution: {integrity: sha512-OvqIgwaGAwnASzXaZEeoJY3RltOFg+WUbdkdfoluh2iqatd090UeOG3A/h0wNZmE93dDew9tAtXgm3/+U/B6bw==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.11.0: - resolution: {integrity: sha512-X17s4hZK3QbRmdAuLd2EE+qwwxL8JxyVupEqAkxKPa/IgX49ZO+vf0ka69gIKsaYeo6c1CuwY3k8trfDtZ9dFg==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.11.0: - resolution: {integrity: sha512-673Lu9EJwxVB9NfYeA4AdNu0FOHz7g9t6N1DmT7bZPn1u6bTF+oZjj+fuxUcrfxWXE0r2jxl5QYMa9cUOj9NFg==} - cpu: [arm64] - os: [linux] - libc: [glibc] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-musl@4.11.0: - resolution: {integrity: sha512-yFW2msTAQNpPJaMmh2NpRalr1KXI7ZUjlN6dY/FhWlOclMrZezm5GIhy3cP4Ts2rIAC+IPLAjNibjp1BsxCVGg==} - cpu: [arm64] - os: [linux] - libc: [musl] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-riscv64-gnu@4.11.0: - resolution: {integrity: sha512-kKT9XIuhbvYgiA3cPAGntvrBgzhWkGpBMzuk1V12Xuoqg7CI41chye4HU0vLJnGf9MiZzfNh4I7StPeOzOWJfA==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-gnu@4.11.0: - resolution: {integrity: sha512-6q4ESWlyTO+erp1PSCmASac+ixaDv11dBk1fqyIuvIUc/CmRAX2Zk+2qK1FGo5q7kyDcjHCFVwgGFCGIZGVwCA==} - cpu: [x64] - os: [linux] - libc: [glibc] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-musl@4.11.0: - resolution: {integrity: sha512-vIAQUmXeMLmaDN78HSE4Kh6xqof2e3TJUKr+LPqXWU4NYNON0MDN9h2+t4KHrPAQNmU3w1GxBQ/n01PaWFwa5w==} - cpu: [x64] - os: [linux] - libc: [musl] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-arm64-msvc@4.11.0: - resolution: {integrity: sha512-LVXo9dDTGPr0nezMdqa1hK4JeoMZ02nstUxGYY/sMIDtTYlli1ZxTXBYAz3vzuuvKO4X6NBETciIh7N9+abT1g==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-ia32-msvc@4.11.0: - resolution: {integrity: sha512-xZVt6K70Gr3I7nUhug2dN6VRR1ibot3rXqXS3wo+8JP64t7djc3lBFyqO4GiVrhNaAIhUCJtwQ/20dr0h0thmQ==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-x64-msvc@4.11.0: - resolution: {integrity: sha512-f3I7h9oTg79UitEco9/2bzwdciYkWr8pITs3meSDSlr1TdvQ7IxkQaaYN2YqZXX5uZhiYL+VuYDmHwNzhx+HOg==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@rushstack/eslint-patch@1.7.2: resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} dev: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - - /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.9): + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.0): resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.9): + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.0): resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.23.9): + /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 dev: true - /@svgr/babel-preset@6.5.1(@babel/core@7.23.9): + /@svgr/babel-preset@6.5.1(@babel/core@7.24.0): resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.9) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.9) - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.23.9) - '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.24.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.24.0) + '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.24.0) + '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.24.0) + '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.24.0) + '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.24.0) dev: true /@svgr/core@6.5.1: resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.9 - '@svgr/babel-preset': 6.5.1(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@svgr/babel-preset': 6.5.1(@babel/core@7.24.0) '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -4364,7 +4030,7 @@ packages: resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 entities: 4.5.0 dev: true @@ -4374,8 +4040,8 @@ packages: peerDependencies: '@svgr/core': ^6.0.0 dependencies: - '@babel/core': 7.23.9 - '@svgr/babel-preset': 6.5.1(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@svgr/babel-preset': 6.5.1(@babel/core@7.24.0) '@svgr/core': 6.5.1 '@svgr/hast-util-to-babel-ast': 6.5.1 svg-parser: 2.0.4 @@ -4399,11 +4065,11 @@ packages: resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.9) - '@babel/preset-env': 7.23.9(@babel/core@7.23.9) - '@babel/preset-react': 7.23.3(@babel/core@7.23.9) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.24.0) + '@babel/preset-env': 7.24.0(@babel/core@7.24.0) + '@babel/preset-react': 7.23.3(@babel/core@7.24.0) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.0) '@svgr/core': 6.5.1 '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) @@ -4416,12 +4082,12 @@ packages: dependencies: tslib: 2.6.2 - /@tanstack/query-core@4.36.1: - resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==} + /@tanstack/query-core@4.24.10: + resolution: {integrity: sha512-2QywqXEAGBIUoTdgn1lAB4/C8QEqwXHj2jrCLeYTk2xVGtLiPEUD8jcMoeB2noclbiW2mMt4+Fq7fZStuz3wAQ==} dev: false - /@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==} + /@tanstack/react-query@4.24.10(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-FY1DixytOcNNCydPQXLxuKEV7VSST32CAuJ55BjhDNqASnMLZn+6c30yQBMrODjmWMNwzfjMZnq0Vw7C62Fwow==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4432,7 +4098,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.36.1 + '@tanstack/query-core': 4.24.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) @@ -4443,29 +4109,31 @@ packages: engines: {node: '>=10.13.0'} dev: true - /@tybys/wasm-util@0.8.1: - resolution: {integrity: sha512-GSsTwyBl4pIzsxAY5wroZdyQKyhXk0d8PCRZtrSZ2WEB1cBdrp2EgGBwHOGCZtIIPun/DL3+AykCv+J6fyRH4Q==} - requiresBuild: true - dependencies: - tslib: 2.6.2 - dev: false - optional: true - /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.19 + '@types/node': 20.8.5 + dev: true + + /@types/chai-subset@1.3.5: + resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} + dependencies: + '@types/chai': 4.3.12 + dev: true + + /@types/chai@4.3.12: + resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==} dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true - /@types/cookie@0.5.4: - resolution: {integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==} + /@types/cookie@0.5.2: + resolution: {integrity: sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA==} dev: true /@types/d3-array@3.2.1: @@ -4653,15 +4321,11 @@ packages: '@types/ms': 0.7.34 dev: false - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.11.19 - '@types/qs': 6.9.11 + '@types/node': 20.8.5 + '@types/qs': 6.9.12 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -4671,14 +4335,14 @@ packages: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.11 + '@types/qs': 6.9.12 '@types/serve-static': 1.15.5 dev: true - /@types/formidable@2.0.6: - resolution: {integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w==} + /@types/formidable@2.0.5: + resolution: {integrity: sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true /@types/geojson@7946.0.14: @@ -4701,8 +4365,8 @@ packages: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} dev: true - /@types/js-cookie@3.0.6: - resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} + /@types/js-cookie@3.0.3: + resolution: {integrity: sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww==} dev: true /@types/js-yaml@4.0.9: @@ -4713,14 +4377,14 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/jsonwebtoken@9.0.5: - resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} + /@types/jsonwebtoken@9.0.3: + resolution: {integrity: sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true - /@types/katex@0.14.0: - resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==} + /@types/katex@0.11.1: + resolution: {integrity: sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==} dev: false /@types/katex@0.16.7: @@ -4730,11 +4394,11 @@ packages: /@types/lodash.mergewith@4.6.7: resolution: {integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==} dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.14.191 dev: false - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/lodash@4.14.191: + resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -4754,8 +4418,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: false - /@types/multer@1.4.11: - resolution: {integrity: sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==} + /@types/multer@1.4.10: + resolution: {integrity: sha512-6l9mYMhUe8wbnz/67YIjc7ZJyQNZoKq7fRXVf7nMdgWgalD0KyzJ2ywI7hoATUSXSbTu9q2HBiEwzy0tNN1v2w==} dependencies: '@types/express': 4.17.21 dev: true @@ -4767,47 +4431,47 @@ packages: /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 form-data: 4.0.0 dev: false - /@types/node@18.19.17: - resolution: {integrity: sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==} + /@types/node@18.19.21: + resolution: {integrity: sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==} dependencies: undici-types: 5.26.5 dev: false - /@types/node@20.11.19: - resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} + /@types/node@20.8.5: + resolution: {integrity: sha512-SPlobFgbidfIeOYlzXiEjSYeIJiOCthv+9tSQVpvk4PAdIIc+2SmjNVzWXk9t0Y7dl73Zdf+OgXKHX9XtkqUpw==} dependencies: - undici-types: 5.26.5 + undici-types: 5.25.3 - /@types/nprogress@0.2.3: - resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} + /@types/nprogress@0.2.0: + resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} dev: false - /@types/papaparse@5.3.14: - resolution: {integrity: sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==} + /@types/papaparse@5.3.7: + resolution: {integrity: sha512-f2HKmlnPdCvS0WI33WtCs5GD7X1cxzzS/aduaxSu3I7TbhWlENjSPs6z5TaB9K0J+BH1jbmqTaM+ja5puis4wg==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true /@types/parse-json@4.0.2: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - /@types/pg@8.11.0: - resolution: {integrity: sha512-sDAlRiBNthGjNFfvt0k6mtotoVYVQ63pA8R4EMWka7crawSR60waVYR0HAgmPRs/e2YaeJTD/43OoZ3PFw80pw==} + /@types/pg@8.6.6: + resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 pg-protocol: 1.6.0 - pg-types: 4.0.2 + pg-types: 2.2.0 dev: true /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + /@types/qs@6.9.12: + resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==} dev: true /@types/range-parser@1.2.7: @@ -4820,8 +4484,8 @@ packages: '@types/react': 18.2.0 dev: true - /@types/react-syntax-highlighter@15.5.11: - resolution: {integrity: sha512-ZqIJl+Pg8kD+47kxUjvrlElrraSUrYa4h0dauY/U/FTUuprSCqvUj+9PNQNQzVc6AJgIWUUxn87/gqsMHNbRjw==} + /@types/react-syntax-highlighter@15.5.6: + resolution: {integrity: sha512-i7wFuLbIAFlabTeD2I1cLjEOrG/xdMa/rpx2zwzAoGHuXJDhSqp9BSfDlMHSh9JSuNfxHk9eEmMX6D55GiyjGg==} dependencies: '@types/react': 18.2.0 dev: true @@ -4836,7 +4500,7 @@ packages: /@types/request-ip@0.0.37: resolution: {integrity: sha512-uw6/i3rQnpznxD7LtLaeuZytLhKZK6bRoTS6XVJlwxIOoOpEBU7bgKoVXDNtOg4Xl6riUKHa9bjMVrL6ESqYlQ==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true /@types/scheduler@0.16.8: @@ -4846,7 +4510,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true /@types/serve-static@1.15.5: @@ -4854,13 +4518,13 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true /@types/tunnel@0.0.4: resolution: {integrity: sha512-bQgDBL5XiqrrPUaZd9bZ2esOXcU4GTmgg0n6LHDqoMJezO3VFRZsW8qN6Gp64/LAmjtzNU3iAHBfV3Z2ht5DSg==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 dev: true /@types/turndown@5.0.4: @@ -4877,7 +4541,7 @@ packages: /@types/whatwg-url@8.2.2: resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.8.5 '@types/webidl-conversions': 7.0.3 dev: false @@ -4943,118 +4607,6 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@vitest/expect@1.2.2: - resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} - dependencies: - '@vitest/spy': 1.2.2 - '@vitest/utils': 1.2.2 - chai: 4.4.1 - dev: true - - /@vitest/runner@1.2.2: - resolution: {integrity: sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==} - dependencies: - '@vitest/utils': 1.2.2 - p-limit: 5.0.0 - pathe: 1.1.2 - dev: true - - /@vitest/snapshot@1.2.2: - resolution: {integrity: sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==} - dependencies: - magic-string: 0.30.7 - pathe: 1.1.2 - pretty-format: 29.7.0 - dev: true - - /@vitest/spy@1.2.2: - resolution: {integrity: sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==} - dependencies: - tinyspy: 2.2.1 - dev: true - - /@vitest/utils@1.2.2: - resolution: {integrity: sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==} - dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true - - /@vue/compiler-core@3.4.19: - resolution: {integrity: sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==} - dependencies: - '@babel/parser': 7.23.9 - '@vue/shared': 3.4.19 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.0.2 - dev: true - - /@vue/compiler-dom@3.4.19: - resolution: {integrity: sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==} - dependencies: - '@vue/compiler-core': 3.4.19 - '@vue/shared': 3.4.19 - dev: true - - /@vue/compiler-sfc@3.4.19: - resolution: {integrity: sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==} - dependencies: - '@babel/parser': 7.23.9 - '@vue/compiler-core': 3.4.19 - '@vue/compiler-dom': 3.4.19 - '@vue/compiler-ssr': 3.4.19 - '@vue/shared': 3.4.19 - estree-walker: 2.0.2 - magic-string: 0.30.7 - postcss: 8.4.35 - source-map-js: 1.0.2 - dev: true - - /@vue/compiler-ssr@3.4.19: - resolution: {integrity: sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==} - dependencies: - '@vue/compiler-dom': 3.4.19 - '@vue/shared': 3.4.19 - dev: true - - /@vue/reactivity@3.4.19: - resolution: {integrity: sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==} - dependencies: - '@vue/shared': 3.4.19 - dev: true - - /@vue/runtime-core@3.4.19: - resolution: {integrity: sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==} - dependencies: - '@vue/reactivity': 3.4.19 - '@vue/shared': 3.4.19 - dev: true - - /@vue/runtime-dom@3.4.19: - resolution: {integrity: sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==} - dependencies: - '@vue/runtime-core': 3.4.19 - '@vue/shared': 3.4.19 - csstype: 3.1.3 - dev: true - - /@vue/server-renderer@3.4.19(vue@3.4.19): - resolution: {integrity: sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==} - peerDependencies: - vue: 3.4.19 - dependencies: - '@vue/compiler-ssr': 3.4.19 - '@vue/shared': 3.4.19 - vue: 3.4.19 - dev: true - - /@vue/shared@3.4.19: - resolution: {integrity: sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==} - dev: true - /@xmldom/xmldom@0.8.10: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -5076,7 +4628,6 @@ packages: /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - requiresBuild: true dev: false optional: true @@ -5103,11 +4654,6 @@ packages: acorn: 8.11.3 dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true - /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} @@ -5117,7 +4663,6 @@ packages: /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - requiresBuild: true dependencies: debug: 4.3.4 transitivePeerDependencies: @@ -5132,6 +4677,14 @@ packages: humanize-ms: 1.2.1 dev: false + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -5141,11 +4694,11 @@ packages: uri-js: 4.4.1 dev: true - /ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: - type-fest: 1.4.0 + type-fest: 0.21.3 dev: true /ansi-regex@5.0.1: @@ -5170,11 +4723,6 @@ packages: color-convert: 2.0.1 dev: true - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -5193,14 +4741,12 @@ packages: /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - requiresBuild: true dev: false optional: true /are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} - requiresBuild: true dependencies: delegates: 1.0.0 readable-stream: 3.6.2 @@ -5247,7 +4793,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -5263,7 +4809,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -5274,7 +4820,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: true @@ -5285,7 +4831,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-shim-unscopables: 1.0.2 dev: true @@ -5295,7 +4841,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-shim-unscopables: 1.0.2 dev: true @@ -5304,7 +4850,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: true @@ -5316,17 +4862,36 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 dev: true /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + + /assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + dev: true + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true @@ -5335,6 +4900,11 @@ packages: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -5345,9 +4915,11 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /available-typed-arrays@1.0.6: - resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true /axe-core@4.7.0: @@ -5355,8 +4927,8 @@ packages: engines: {node: '>=4'} dev: true - /axios@1.6.7: - resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + /axios@1.5.1: + resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} dependencies: follow-redirects: 1.15.5 form-data: 4.0.0 @@ -5375,43 +4947,43 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 cosmiconfig: 7.1.0 resolve: 1.22.8 dev: false - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.24.0): resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): + /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.24.0): resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0) core-js-compat: 3.36.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): + /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.24.0): resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0) transitivePeerDependencies: - supports-color dev: true @@ -5433,7 +5005,6 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -5443,6 +5014,14 @@ packages: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} dev: false + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -5472,25 +5051,85 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true + + /browser-resolve@2.0.0: + resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} + dependencies: + resolve: 1.22.8 + dev: true + + /browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: true + + /browserify-sign@4.2.2: + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001587 - electron-to-chromium: 1.4.672 + caniuse-lite: 1.0.30001591 + electron-to-chromium: 1.4.690 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -5512,6 +5151,21 @@ packages: engines: {node: '>=4'} dev: false + /buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -5523,11 +5177,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true - /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -5547,8 +5196,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001587: - resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} + /caniuse-lite@1.0.30001591: + resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} /canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -5605,8 +5254,8 @@ packages: supports-color: 7.2.0 dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + /chalk@5.2.0: + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true @@ -5674,10 +5323,16 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - requiresBuild: true dev: false optional: true + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /classcat@5.0.4: resolution: {integrity: sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==} dev: false @@ -5686,6 +5341,11 @@ packages: resolution: {integrity: sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==} dev: false + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + /clear-any-console@1.16.2: resolution: {integrity: sha512-OL/7wZpNy9x0GBSzz3poWja84Nr7iaH8aYNsJ5Uet2BVLj6Lm1zvWpZN/yH46Vv3ae7YfHmLLMmfHj911fshJg==} dev: true @@ -5697,11 +5357,11 @@ packages: log-symbols: 3.0.0 dev: true - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: - restore-cursor: 4.0.0 + restore-cursor: 3.1.0 dev: true /cli-handle-error@4.4.0: @@ -5717,6 +5377,14 @@ packages: cli-handle-error: 4.4.0 dev: true + /cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + /cli-truncate@3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5762,7 +5430,6 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true - requiresBuild: true dev: false optional: true @@ -5789,9 +5456,9 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false - /commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} dev: true /commander@7.2.0: @@ -5825,12 +5492,19 @@ packages: typedarray: 0.0.6 dev: false + /console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - requiresBuild: true dev: false optional: true + /constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -5893,6 +5567,12 @@ packages: layout-base: 1.0.2 dev: false + /cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + dependencies: + layout-base: 2.0.1 + dev: false + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -5903,6 +5583,38 @@ packages: path-type: 4.0.0 yaml: 1.10.2 + /create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -5916,10 +5628,26 @@ packages: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} dev: false + /crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.2 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + /css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} dependencies: - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 dev: false /css-select@4.3.0: @@ -5973,6 +5701,15 @@ packages: cytoscape: 3.28.1 dev: false + /cytoscape-fcose@2.2.0(cytoscape@3.28.1): + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + dependencies: + cose-base: 2.2.0 + cytoscape: 3.28.1 + dev: false + /cytoscape@3.28.1: resolution: {integrity: sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==} engines: {node: '>=0.10'} @@ -5981,12 +5718,6 @@ packages: lodash: 4.17.21 dev: false - /d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} - dependencies: - internmap: 1.0.1 - dev: false - /d3-array@3.2.4: resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} engines: {node: '>=12'} @@ -6104,10 +5835,6 @@ packages: d3-color: 3.1.0 dev: false - /d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - dev: false - /d3-path@3.1.0: resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} engines: {node: '>=12'} @@ -6128,13 +5855,6 @@ packages: engines: {node: '>=12'} dev: false - /d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - dev: false - /d3-scale-chromatic@3.0.0: resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} engines: {node: '>=12'} @@ -6159,12 +5879,6 @@ packages: engines: {node: '>=12'} dev: false - /d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - dependencies: - d3-path: 1.0.9 - dev: false - /d3-shape@3.2.0: resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} engines: {node: '>=12'} @@ -6267,11 +5981,11 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 dev: false - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + /dayjs@1.11.7: + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} dev: false /debug@2.6.9: @@ -6316,7 +6030,6 @@ packages: /decompress-response@4.2.1: resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} engines: {node: '>=8'} - requiresBuild: true dependencies: mimic-response: 2.1.0 dev: false @@ -6368,7 +6081,6 @@ packages: /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - requiresBuild: true dev: false optional: true @@ -6381,6 +6093,13 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -6389,7 +6108,6 @@ packages: /detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - requiresBuild: true dev: false optional: true @@ -6404,16 +6122,19 @@ packages: wrappy: 1.0.2 dev: false - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - /diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} dev: false + /diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + /digest-fetch@1.3.0: resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} dependencies: @@ -6462,6 +6183,11 @@ packages: entities: 4.5.0 dev: false + /domain-browser@4.23.0: + resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==} + engines: {node: '>=10'} + dev: true + /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -6483,8 +6209,8 @@ packages: resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==} dev: false - /dompurify@3.0.8: - resolution: {integrity: sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==} + /dompurify@3.0.3: + resolution: {integrity: sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ==} dev: false /domutils@2.8.0: @@ -6519,37 +6245,48 @@ packages: safe-buffer: 5.2.1 dev: false - /echarts-gl@2.0.9(echarts@5.4.3): + /echarts-gl@2.0.9(echarts@5.4.1): resolution: {integrity: sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==} peerDependencies: echarts: ^5.1.2 dependencies: claygl: 1.3.0 - echarts: 5.4.3 + echarts: 5.4.1 zrender: 5.5.0 dev: false - /echarts@5.4.3: - resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==} + /echarts@5.4.1: + resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==} dependencies: tslib: 2.3.0 - zrender: 5.4.4 + zrender: 5.4.1 dev: false /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium@1.4.672: - resolution: {integrity: sha512-YYCy+goe3UqZqa3MOQCI5Mx/6HdBLzXL/mkbGCEWL3sP3Z1BP9zqAzeD3YEmLZlespYGFtyM8tRp5i2vfaUGCA==} + /electron-to-chromium@1.4.690: + resolution: {integrity: sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==} - /elkjs@0.9.1: - resolution: {integrity: sha512-JWKDyqAdltuUcyxaECtYG6H4sqysXSLeoXuGUBfRNESMTkj+w+qdb0jya8Z/WI0jVd03WQtCGhS6FOFtlhD5FQ==} + /elkjs@0.8.2: + resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} dev: false + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - requiresBuild: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -6566,8 +6303,8 @@ packages: iconv-lite: 0.6.3 dev: false - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.15.1: + resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -6587,17 +6324,17 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract@1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} + /es-abstract@1.22.5: + resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.6 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 es-define-property: 1.0.0 es-errors: 1.3.0 - es-set-tostringtag: 2.0.2 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 @@ -6605,15 +6342,15 @@ packages: globalthis: 1.0.3 gopd: 1.0.1 has-property-descriptors: 1.0.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.1 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 @@ -6626,10 +6363,10 @@ packages: string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.1 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.5 unbox-primitive: 1.0.2 which-typed-array: 1.1.14 dev: true @@ -6655,22 +6392,22 @@ packages: asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 - es-set-tostringtag: 2.0.2 + es-set-tostringtag: 2.0.3 function-bind: 1.1.2 get-intrinsic: 1.2.4 globalthis: 1.0.3 has-property-descriptors: 1.0.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 internal-slot: 1.0.7 iterator.prototype: 1.1.2 safe-array-concat: 1.1.0 dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 @@ -6693,6 +6430,216 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild-android-64@0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64@0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64@0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64@0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64@0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64@0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32@0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64@0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64@0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm@0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le@0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le@0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64@0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x@0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64@0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64@0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64@0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32@0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64@0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64@0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild@0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + dev: true + /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -6723,37 +6670,6 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: true - /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -6818,9 +6734,9 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.15.1 eslint: 8.34.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 @@ -6833,8 +6749,8 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -6882,7 +6798,7 @@ packages: doctrine: 2.1.0 eslint: 8.34.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.34.0) hasown: 2.0.1 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -6904,7 +6820,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -7061,16 +6977,6 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - dependencies: - '@types/estree': 1.0.5 - dev: true - /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -7086,8 +6992,16 @@ packages: engines: {node: '>=6'} dev: false - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 dev: true /execa@7.2.0: @@ -7099,27 +7013,12 @@ packages: human-signals: 4.3.1 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.2.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.2.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -7240,17 +7139,17 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /focus-lock@1.3.0: - resolution: {integrity: sha512-J5/QDEBUXkELMuWyRSsXBRG1JZ156tBvTS+sv3Ks5xBNyKCQ6qFZAfT3ZEPL3JfFEOS5SB+bT/0Ha3zS07yfEw==} + /focus-lock@1.3.3: + resolution: {integrity: sha512-hfXkZha7Xt4RQtrL1HBfspAuIj89Y0fb6GX0dfJilb8S2G/lvL4akPAcHq6xoD2NuZnDMCnZL/zQesMyeu6Psg==} engines: {node: '>=10'} dependencies: tslib: 2.6.2 @@ -7272,14 +7171,6 @@ packages: is-callable: 1.2.7 dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - dev: true - /form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} dev: false @@ -7305,8 +7196,8 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /formidable@2.1.2: - resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + /formidable@2.1.1: + resolution: {integrity: sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==} dependencies: dezalgo: 1.0.4 hexoid: 1.0.0 @@ -7319,12 +7210,14 @@ packages: engines: {node: '>= 0.6'} dev: false - /framer-motion@9.1.7(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-nKxBkIO4IPkMEqcBbbATxsVjwPYShKl051yhBv9628iAH6JLeHD0siBHxkL62oQzMC1+GNX73XtPjgP753ufuw==} + /framer-motion@9.0.6(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NBETSa14yI/osK6DxKmiiDj1N6Os6YFiXKN6fzxYsNKKeO0vjoQz3m40g0kJYiAWrMdXQjhjyCMJqfOLR+nnRw==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: + '@motionone/dom': 10.17.0 + hey-listen: 1.0.8 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tslib: 2.6.2 @@ -7346,7 +7239,6 @@ packages: /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} - requiresBuild: true dependencies: minipass: 3.3.6 dev: false @@ -7371,7 +7263,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 functions-have-names: 1.2.3 dev: true @@ -7382,7 +7274,6 @@ packages: /gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} - requiresBuild: true dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -7410,7 +7301,7 @@ packages: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.1 @@ -7424,11 +7315,6 @@ packages: engines: {node: '>=10'} dev: true - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true - /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -7460,18 +7346,6 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 - dev: true - /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -7553,8 +7427,8 @@ packages: dependencies: es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} /has-symbols@1.0.3: @@ -7570,42 +7444,31 @@ packages: /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - requiresBuild: true dev: false optional: true + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + /hasown@2.0.1: resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - /hast-util-from-dom@4.2.0: - resolution: {integrity: sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==} - dependencies: - hastscript: 7.2.0 - web-namespaces: 2.0.1 - dev: false - - /hast-util-from-html-isomorphic@1.0.0: - resolution: {integrity: sha512-Yu480AKeOEN/+l5LA674a+7BmIvtDj24GvOt7MtQWuhzUwlaaRWdEPXAh3Qm5vhuthpAipFb2vTetKXWOjmTvw==} - dependencies: - '@types/hast': 2.3.10 - hast-util-from-dom: 4.2.0 - hast-util-from-html: 1.0.2 - unist-util-remove-position: 4.0.2 - dev: false - - /hast-util-from-html@1.0.2: - resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} - dependencies: - '@types/hast': 2.3.10 - hast-util-from-parse5: 7.1.2 - parse5: 7.1.2 - vfile: 5.3.7 - vfile-message: 3.1.4 - dev: false - /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: @@ -7677,10 +7540,22 @@ packages: engines: {node: '>=8'} dev: false + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: false + /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -7711,10 +7586,13 @@ packages: toidentifier: 1.0.1 dev: false + /https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - requiresBuild: true dependencies: agent-base: 6.0.2 debug: 4.3.4 @@ -7728,11 +7606,6 @@ packages: engines: {node: '>=14.18.0'} dev: true - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true - /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -7752,10 +7625,10 @@ packages: /i18next-fs-backend@2.3.1: resolution: {integrity: sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg==} - /i18next@22.5.1: - resolution: {integrity: sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==} + /i18next@23.10.0: + resolution: {integrity: sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -7771,6 +7644,10 @@ packages: safer-buffer: 2.1.2 dev: false + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -7780,8 +7657,8 @@ packages: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} dev: false - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + /immer@9.0.19: + resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} dev: false /immutable@4.3.5: @@ -7799,6 +7676,11 @@ packages: engines: {node: '>=0.8.19'} dev: true + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -7818,13 +7700,9 @@ packages: dependencies: es-errors: 1.3.0 hasown: 2.0.1 - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true - /internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - dev: false - /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -7858,6 +7736,14 @@ packages: is-alphabetical: 1.0.4 is-decimal: 1.0.4 + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -7937,7 +7823,6 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - requiresBuild: true /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} @@ -7964,8 +7849,16 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: true + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -8007,8 +7900,9 @@ packages: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 dev: true @@ -8076,6 +7970,11 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /isomorphic-timers-promises@1.0.1: + resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} + engines: {node: '>=10'} + dev: true + /isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} dev: false @@ -8087,16 +7986,7 @@ packages: get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.5 - set-function-name: 2.0.1 - dev: true - - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + set-function-name: 2.0.2 dev: true /joplin-turndown-plugin-gfm@1.0.12: @@ -8107,8 +7997,8 @@ packages: resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} dev: true - /js-tiktoken@1.0.10: - resolution: {integrity: sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA==} + /js-tiktoken@1.0.7: + resolution: {integrity: sha512-biba8u/clw7iesNEWLOLwrNGoBP2lA+hTaBLs/D45pJdUPFXyxD6nhcDVtADChghv4GgyAiMKYMiRx7x6h7Biw==} dependencies: base64-js: 1.5.1 dev: false @@ -8168,10 +8058,6 @@ packages: engines: {node: '>=6'} hasBin: true - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true - /jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} @@ -8227,6 +8113,13 @@ packages: engines: {node: '>=12.0.0'} dev: false + /katex@0.15.6: + resolution: {integrity: sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + /katex@0.16.9: resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} hasBin: true @@ -8264,6 +8157,10 @@ packages: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} dev: false + /layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + dev: false + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -8276,8 +8173,8 @@ packages: resolution: {integrity: sha512-Nlfjc+k9cIWpOMv7XufF0Mv09TAXSemNAuAqFLaOwTcN+RvhvYTDtVLSp9D9r+5I097fYs1Vf/UYwH2xEpkFfQ==} dev: false - /lib0@0.2.88: - resolution: {integrity: sha512-KyroiEvCeZcZEMx5Ys+b4u4eEBbA1ch7XUaBhYpwa/nPMrzTjUhI4RfcytmQfYoTBPcdyx+FX6WFNIoNuJzJfQ==} + /lib0@0.2.90: + resolution: {integrity: sha512-iQmk+fThPq1ZTD2cFUu8xN6JLp9gFWnjs8auR6hmI6QQXoy6sSEh85uKcdkqpuEnkhhwQm4GSlKHOYfSCVp0Mw==} engines: {node: '>=16'} hasBin: true dependencies: @@ -8298,49 +8195,51 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /lint-staged@13.3.0: - resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} - engines: {node: ^16.14.0 || >=18.0.0} + /lint-staged@13.2.1: + resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} + engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: - chalk: 5.3.0 - commander: 11.0.0 + chalk: 5.2.0 + cli-truncate: 3.1.0 + commander: 10.0.1 debug: 4.3.4 execa: 7.2.0 lilconfig: 2.1.0 - listr2: 6.6.1 + listr2: 5.0.8 micromatch: 4.0.5 + normalize-path: 3.0.0 + object-inspect: 1.13.1 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.3.1 + yaml: 2.4.0 transitivePeerDependencies: - enquirer - supports-color dev: true - /listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} + /listr2@5.0.8: + resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} + engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: enquirer: optional: true dependencies: - cli-truncate: 3.1.0 + cli-truncate: 2.1.0 colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 5.0.1 + log-update: 4.0.0 + p-map: 4.0.0 rfdc: 1.3.1 - wrap-ansi: 8.1.0 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 dev: true - /local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} - dependencies: - mlly: 1.5.0 - pkg-types: 1.0.3 dev: true /locate-path@6.0.0: @@ -8405,15 +8304,14 @@ packages: chalk: 2.4.2 dev: true - /log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} dependencies: - ansi-escapes: 5.0.0 - cli-cursor: 4.0.0 - slice-ansi: 5.0.0 - strip-ansi: 7.1.0 - wrap-ansi: 8.1.0 + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 dev: true /longest-streak@3.1.0: @@ -8447,11 +8345,6 @@ packages: highlight.js: 10.7.3 dev: false - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true - /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -8463,17 +8356,9 @@ packages: dependencies: yallist: 4.0.0 - /magic-string@0.30.7: - resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} - requiresBuild: true dependencies: semver: 6.3.1 dev: false @@ -8504,6 +8389,14 @@ packages: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} dependencies: @@ -8669,7 +8562,6 @@ packages: /memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - requiresBuild: true dev: false optional: true @@ -8686,20 +8578,18 @@ packages: engines: {node: '>= 8'} dev: true - /mermaid@10.8.0: - resolution: {integrity: sha512-9CzfSreRjdDJxX796+jW4zjEq0DVw5xVF0nWsqff8OTbrt+ml0TZ5PyYUjjUZJa2NYxYJZZXewEquxGiM8qZEA==} + /mermaid@10.2.3: + resolution: {integrity: sha512-cMVE5s9PlQvOwfORkyVpr5beMsLdInrycAosdr+tpZ0WFjG4RJ/bUHST7aTgHNJbujHkdBRAm+N50P3puQOfPw==} dependencies: '@braintree/sanitize-url': 6.0.4 - '@types/d3-scale': 4.0.8 - '@types/d3-scale-chromatic': 3.0.3 cytoscape: 3.28.1 cytoscape-cose-bilkent: 4.1.0(cytoscape@3.28.1) + cytoscape-fcose: 2.2.0(cytoscape@3.28.1) d3: 7.8.5 - d3-sankey: 0.12.3 dagre-d3-es: 7.0.10 - dayjs: 1.11.10 - dompurify: 3.0.8 - elkjs: 0.9.1 + dayjs: 1.11.7 + dompurify: 3.0.3 + elkjs: 0.8.2 khroma: 2.1.0 lodash-es: 4.17.21 mdast-util-from-markdown: 1.3.1 @@ -8984,6 +8874,14 @@ packages: picomatch: 2.3.1 dev: true + /miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -9015,29 +8913,28 @@ packages: /mimic-response@2.1.0: resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} engines: {node: '>=8'} - requiresBuild: true dev: false optional: true + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} - requiresBuild: true dependencies: yallist: 4.0.0 dev: false @@ -9046,19 +8943,12 @@ packages: /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - requiresBuild: true dev: false optional: true - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - requiresBuild: true dependencies: minipass: 3.3.6 yallist: 4.0.0 @@ -9076,19 +8966,9 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true - requiresBuild: true dev: false optional: true - /mlly@1.5.0: - resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} - dependencies: - acorn: 8.11.3 - pathe: 1.1.2 - pkg-types: 1.0.3 - ufo: 1.4.0 - dev: true - /monaco-editor@0.46.0: resolution: {integrity: sha512-ADwtLIIww+9FKybWscd7OCfm9odsFYHImBRI1v9AviGce55QY8raT+9ihH8jX/E/e6QVSGM+pKj4jSUSRmALNQ==} dev: false @@ -9100,22 +8980,16 @@ packages: whatwg-url: 11.0.0 dev: false - /mongodb@5.9.1: - resolution: {integrity: sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q==} + /mongodb@5.1.0: + resolution: {integrity: sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==} engines: {node: '>=14.20.1'} peerDependencies: - '@aws-sdk/credential-providers': ^3.188.0 - '@mongodb-js/zstd': ^1.0.0 - kerberos: ^1.0.0 || ^2.0.0 - mongodb-client-encryption: '>=2.3.0 <3' + '@aws-sdk/credential-providers': ^3.201.0 + mongodb-client-encryption: ^2.3.0 snappy: ^7.2.2 peerDependenciesMeta: '@aws-sdk/credential-providers': optional: true - '@mongodb-js/zstd': - optional: true - kerberos: - optional: true mongodb-client-encryption: optional: true snappy: @@ -9123,26 +8997,24 @@ packages: dependencies: bson: 5.5.1 mongodb-connection-string-url: 2.6.0 - socks: 2.7.3 + socks: 2.8.1 optionalDependencies: - '@mongodb-js/saslprep': 1.1.4 + saslprep: 1.0.3 dev: false - /mongoose@7.6.8: - resolution: {integrity: sha512-q9zAySH+UtOK5yonWyNcLfq3PxrY6s4gdta4qNGKNOE2yTVoY9FP4hQtvWYnv4rkdk7T8QmQMC7bbhJjDxIunw==} - engines: {node: '>=14.20.1'} + /mongoose@7.0.2: + resolution: {integrity: sha512-whX+5lAOLOs6VXRr9w+6m5qb8m/IXWLLb9+0/HRUh2TiIYtTt7UvajK92zW6wllCjBkrrnz/MDIOTCWMbs8K4g==} + engines: {node: '>=14.0.0'} dependencies: bson: 5.5.1 kareem: 2.5.1 - mongodb: 5.9.1 + mongodb: 5.1.0 mpath: 0.9.0 mquery: 5.0.0 ms: 2.1.3 sift: 16.0.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' - - '@mongodb-js/zstd' - - kerberos - mongodb-client-encryption - snappy - supports-color @@ -9192,7 +9064,6 @@ packages: /nan@2.18.0: resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} - requiresBuild: true dev: false optional: true @@ -9201,8 +9072,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /nanoid@4.0.2: - resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + /nanoid@4.0.1: + resolution: {integrity: sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==} engines: {node: ^14 || ^16 || >=18} hasBin: true dev: false @@ -9216,26 +9087,26 @@ packages: engines: {node: '>= 0.6'} dev: false - /next-i18next@13.3.0(i18next@22.5.1)(next@13.5.2)(react-i18next@12.3.1)(react@18.2.0): - resolution: {integrity: sha512-X4kgi51BCOoGdKbv87eZ8OU7ICQDg5IP+T5fNjqDY3os9ea0OKTY4YpAiVFiwcI9XimcUmSPbKO4a9jFUyYSgg==} + /next-i18next@15.2.0(i18next@23.10.0)(next@13.5.2)(react-i18next@13.5.0)(react@18.2.0): + resolution: {integrity: sha512-Rl5yZ4oGffsB0AjRykZ5PzNQ2M6am54MaMayldGmH/UKZisrIxk2SKEPJvaHhKlWe1qgdNi2FkodwK8sEjfEmg==} engines: {node: '>=14'} peerDependencies: - i18next: ^22.0.6 + i18next: '>= 23.7.13' next: '>= 12.0.0' react: '>= 17.0.2' - react-i18next: ^12.2.0 + react-i18next: '>= 13.5.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@types/hoist-non-react-statics': 3.3.5 core-js: 3.36.0 hoist-non-react-statics: 3.3.2 - i18next: 22.5.1 + i18next: 23.10.0 i18next-fs-backend: 2.3.1 - next: 13.5.2(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.0) + next: 13.5.2(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3) react: 18.2.0 - react-i18next: 12.3.1(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0) + react-i18next: 13.5.0(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0) - /next@13.5.2(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.0): + /next@13.5.2(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3): resolution: {integrity: sha512-vog4UhUaMYAzeqfiAAmgB/QWLW7p01/sg+2vn6bqc/CxHFYizMzLv6gjxKzl31EVFkfl/F+GbxlKizlkTE9RdA==} engines: {node: '>=16.14.0'} hasBin: true @@ -9253,12 +9124,12 @@ packages: '@next/env': 13.5.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001587 + caniuse-lite: 1.0.30001591 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - sass: 1.71.0 - styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.2.0) + sass: 1.58.3 + styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.2.0) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -9275,13 +9146,13 @@ packages: - '@babel/core' - babel-plugin-macros - /nextjs-cors@2.2.0(next@13.5.2): - resolution: {integrity: sha512-FZu/A+L59J4POJNqwXYyCPDvsLDeu5HjSBvytzS6lsrJeDz5cmnH45zV+VoNic0hjaeER9xGaiIjZIWzEHnxQg==} + /nextjs-cors@2.1.2(next@13.5.2): + resolution: {integrity: sha512-2yOVivaaf2ILe4f/qY32hnj3oC77VCOsUQJQfhVMGsXE/YMEWUY2zy78sH9FKUCM7eG42/l3pDofIzMD781XGA==} peerDependencies: - next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 + next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0 dependencies: cors: 2.8.5 - next: 13.5.2(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.0) + next: 13.5.2(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3) dev: false /node-cron@3.0.3: @@ -9312,6 +9183,39 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-stdlib-browser@1.2.0: + resolution: {integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==} + engines: {node: '>=10'} + dependencies: + assert: 2.1.0 + browser-resolve: 2.0.0 + browserify-zlib: 0.2.0 + buffer: 5.7.1 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + create-require: 1.1.1 + crypto-browserify: 3.12.0 + domain-browser: 4.23.0 + events: 3.3.0 + https-browserify: 1.0.0 + isomorphic-timers-promises: 1.0.1 + os-browserify: 0.3.0 + path-browserify: 1.0.1 + pkg-dir: 5.0.0 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 3.6.2 + stream-browserify: 3.0.0 + stream-http: 3.2.0 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.1 + url: 0.11.3 + util: 0.12.5 + vm-browserify: 1.1.2 + dev: true + /non-layered-tidy-tree-layout@2.0.2: resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} dev: false @@ -9320,7 +9224,6 @@ packages: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} hasBin: true - requiresBuild: true dependencies: abbrev: 1.1.1 dev: false @@ -9330,8 +9233,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /npm-run-path@5.2.0: - resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 @@ -9339,7 +9242,6 @@ packages: /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - requiresBuild: true dependencies: are-we-there-yet: 2.0.0 console-control-strings: 1.1.0 @@ -9364,6 +9266,14 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: true + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -9385,7 +9295,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /object.fromentries@2.0.7: @@ -9394,7 +9304,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /object.groupby@1.0.2: @@ -9403,7 +9313,7 @@ packages: array.prototype.filter: 1.0.3 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 dev: true @@ -9411,7 +9321,7 @@ packages: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /object.values@1.1.7: @@ -9420,11 +9330,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 - dev: true - - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + es-abstract: 1.22.5 dev: true /on-finished@2.4.1: @@ -9457,7 +9363,7 @@ packages: resolution: {integrity: sha512-ey2CXh1OTcTUa0AWZWuTpgA9t5GuAG3DVU1MofCRUI7fQJij8XJ3Sr0VtgxoAE69C9wbHBMCux8Z/IQZfSwHiA==} hasBin: true dependencies: - '@types/node': 18.19.17 + '@types/node': 18.19.21 '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 @@ -9465,7 +9371,7 @@ packages: form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) - web-streams-polyfill: 3.3.2 + web-streams-polyfill: 3.3.3 transitivePeerDependencies: - encoding dev: false @@ -9486,6 +9392,10 @@ packages: type-check: 0.4.0 dev: true + /os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -9493,13 +9403,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - dependencies: - yocto-queue: 1.0.0 - dev: true - /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -9507,13 +9410,19 @@ packages: p-limit: 3.1.0 dev: true + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + /packet-reader@1.0.0: resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} dev: false /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: false /papaparse@5.4.1: resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} @@ -9525,6 +9434,16 @@ packages: dependencies: callsites: 3.1.0 + /parse-asn1@5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: true + /parse-entities@1.2.2: resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} dependencies: @@ -9563,6 +9482,10 @@ packages: parse5: 7.1.2 dev: false + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -9574,6 +9497,10 @@ packages: engines: {node: '>= 0.8'} dev: false + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -9596,14 +9523,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 - dev: true - /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false @@ -9619,14 +9538,21 @@ packages: dev: false optional: true - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true - /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + /pdfjs-dist@4.0.269: resolution: {integrity: sha512-jjWO56tcOjnmPqDf8PmXDeZ781AGvpHMYI3HhNtaFKTRXXPaD1ArSrhVe38/XsrIQJ0onISCND/vuXaWJkiDWw==} engines: {node: '>=18'} @@ -9638,12 +9564,6 @@ packages: - supports-color dev: false - /pg-cloudflare@1.1.1: - resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} - requiresBuild: true - dev: false - optional: true - /pg-connection-string@2.6.2: resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} dev: false @@ -9652,17 +9572,12 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - /pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - dev: true - - /pg-pool@3.6.1(pg@8.11.3): + /pg-pool@3.6.1(pg@8.10.0): resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.11.3 + pg: 8.10.0 dev: false /pg-protocol@1.6.0: @@ -9677,23 +9592,9 @@ packages: postgres-bytea: 1.0.0 postgres-date: 1.0.7 postgres-interval: 1.2.0 - dev: false - /pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.2 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - dev: true - - /pg@8.11.3: - resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + /pg@8.10.0: + resolution: {integrity: sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -9704,12 +9605,10 @@ packages: buffer-writer: 2.0.0 packet-reader: 1.0.0 pg-connection-string: 2.6.2 - pg-pool: 3.6.1(pg@8.11.3) + pg-pool: 3.6.1(pg@8.10.0) pg-protocol: 1.6.0 pg-types: 2.2.0 pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.1.1 dev: false /pgpass@1.0.5: @@ -9731,12 +9630,16 @@ packages: hasBin: true dev: true - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + /pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} dependencies: - jsonc-parser: 3.2.1 - mlly: 1.5.0 - pathe: 1.1.2 + find-up: 5.0.0 + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} dev: true /postcss@8.4.14: @@ -9759,50 +9662,20 @@ packages: /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - dev: false - - /postgres-array@3.0.2: - resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} - engines: {node: '>=12'} - dev: true /postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} - dev: false - - /postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - dependencies: - obuf: 1.1.2 - dev: true /postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - dev: false - - /postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - dev: true /postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} dependencies: xtend: 4.0.2 - dev: false - - /postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - dev: true - - /postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -9821,15 +9694,6 @@ packages: hasBin: true dev: true - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - /prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -9844,6 +9708,11 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -9873,6 +9742,21 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false + /public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -9881,20 +9765,37 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: false /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 - dev: false + side-channel: 1.0.6 + + /querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -9915,14 +9816,14 @@ packages: peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 react: 18.2.0 dev: false - /react-day-picker@8.10.0(date-fns@2.30.0)(react@18.2.0): - resolution: {integrity: sha512-mz+qeyrOM7++1NCb1ARXmkjMkzWVh2GL9YiPbRjKe0zHccvekk4HE+0MPOZOrosn8r8zTHIIeOUXTmXRqmkRmg==} + /react-day-picker@8.7.1(date-fns@2.30.0)(react@18.2.0): + resolution: {integrity: sha512-Gv426AW8b151CZfh3aP5RUGztLwHB/EyJgWZ5iMgtzbFBkjHfG6Y66CIQFMWGLnYjsQ9DYSJRmJ5S0Pg5HWKjA==} peerDependencies: - date-fns: ^2.28.0 || ^3.0.0 + date-fns: ^2.28.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: date-fns: 2.30.0 @@ -9944,7 +9845,7 @@ packages: peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 react: 18.2.0 dev: false @@ -9952,8 +9853,8 @@ packages: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: false - /react-focus-lock@2.11.0(@types/react@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-y6Amxjo3T67R/7tYPSS2HMUEjW4IIfDAnpc6sBZ3Nm8gkFhgEGwTP7Zw/vkYOyvOZly0EwT9oc5ZM2XmknTGgw==} + /react-focus-lock@2.11.2(@types/react@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DDTbEiov0+RthESPVSTIdAWPPKic+op3sCcP+icbMRobvQNt7LuAlJ3KoarqQv5sCgKArru3kXmlmFTa27/CdQ==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -9961,9 +9862,9 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@types/react': 18.2.0 - focus-lock: 1.3.0 + focus-lock: 1.3.3 prop-types: 15.8.1 react: 18.2.0 react-clientside-effect: 1.2.6(react@18.2.0) @@ -9971,8 +9872,8 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.0)(react@18.2.0) dev: false - /react-hook-form@7.50.1(react@18.2.0): - resolution: {integrity: sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==} + /react-hook-form@7.43.1(react@18.2.0): + resolution: {integrity: sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 @@ -9980,10 +9881,10 @@ packages: react: 18.2.0 dev: false - /react-i18next@12.3.1(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-5v8E2XjZDFzK7K87eSwC7AJcAkcLt5xYZ4+yTPDAW1i7C93oOY1dnr4BaQM7un4Hm+GmghuiPvevWwlca5PwDA==} + /react-i18next@13.5.0(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==} peerDependencies: - i18next: '>= 19.0.0' + i18next: '>= 23.2.3' react: '>= 16.8.0' react-dom: '*' react-native: '*' @@ -9993,9 +9894,9 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 html-parse-stringify: 3.0.1 - i18next: 22.5.1 + i18next: 23.10.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -10004,6 +9905,7 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false /react-markdown@8.0.7(@types/react@18.2.0)(react@18.2.0): resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} @@ -10032,8 +9934,8 @@ packages: - supports-color dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + /react-remove-scroll-bar@2.3.5(@types/react@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -10060,7 +9962,7 @@ packages: dependencies: '@types/react': 18.2.0 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.0)(react@18.2.0) + react-remove-scroll-bar: 2.3.5(@types/react@18.2.0)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.0)(react@18.2.0) tslib: 2.6.2 use-callback-ref: 1.3.1(@types/react@18.2.0)(react@18.2.0) @@ -10089,7 +9991,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -10103,22 +10005,21 @@ packages: dependencies: loose-envify: 1.4.0 - /reactflow@11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0CApYhtYicXEDg/x2kvUHiUk26Qur8lAtTtiSlptNKuyEuGti6P1y5cS32YGaUoDMoCqkm/m+jcKkfMOvSCVRA==} + /reactflow@11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-QI6+oc1Ft6oFeLSdHlp+SmgymbI5Tm49wj5JyE84O4A54yN/ImfYaBhLit9Cmfzxn9Tz6tDqmGMGbk4bdtB8/w==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/background': 11.3.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/controls': 11.2.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/core': 11.10.4(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/minimap': 11.7.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/node-resizer': 2.2.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/node-toolbar': 1.3.9(@types/react@18.2.0)(immer@9.0.21)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/background': 11.2.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/controls': 11.1.15(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.7.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/minimap': 11.5.4(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/node-resizer': 2.1.1(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/node-toolbar': 1.2.3(immer@9.0.19)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - - '@types/react' - immer dev: false @@ -10137,13 +10038,10 @@ packages: /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - requiresBuild: true dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: false - optional: true /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -10157,7 +10055,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.3 @@ -10189,7 +10087,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 dev: true /regexp.prototype.flags@1.5.2: @@ -10199,7 +10097,7 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 - set-function-name: 2.0.1 + set-function-name: 2.0.2 dev: true /regexpp@3.2.0: @@ -10226,17 +10124,28 @@ packages: jsesc: 0.5.0 dev: true - /rehype-katex@6.0.3: - resolution: {integrity: sha512-ByZlRwRUcWegNbF70CVRm2h/7xy7jQ3R9LaY4VVSvjnoVWwWVhNL60DiZsBpC5tSzYQOCvDbzncIpIjPZWodZA==} + /rehype-katex@6.0.2: + resolution: {integrity: sha512-C4gDAlS1+l0hJqctyiU64f9CvT00S03qV1T6HiMzbSuLBgWUtcqydWHY9OpKrm0SpkK16FNd62CDKyWLwV2ppg==} dependencies: '@types/hast': 2.3.10 - '@types/katex': 0.14.0 - hast-util-from-html-isomorphic: 1.0.0 + '@types/katex': 0.11.1 hast-util-to-text: 3.1.2 - katex: 0.16.9 + katex: 0.15.6 + rehype-parse: 8.0.5 + unified: 10.1.2 + unist-util-remove-position: 4.0.2 unist-util-visit: 4.1.2 dev: false + /rehype-parse@8.0.5: + resolution: {integrity: sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==} + dependencies: + '@types/hast': 2.3.10 + hast-util-from-parse5: 7.1.2 + parse5: 6.0.1 + unified: 10.1.2 + dev: false + /remark-breaks@3.0.3: resolution: {integrity: sha512-C7VkvcUp1TPUc2eAYzsPdaUh8Xj4FSbQnYA5A9f80diApLZscTDeG7efiWP65W8hV2sEy3JuGVU0i6qr5D8Hug==} dependencies: @@ -10345,9 +10254,9 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 @@ -10368,30 +10277,22 @@ packages: dependencies: glob: 7.2.3 + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + /robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false - /rollup@4.11.0: - resolution: {integrity: sha512-2xIbaXDXjf3u2tajvA5xROpib7eegJ9Y/uPlSFhXLNpK9ampCczXAhLEb5yLzJyG3LAdI1NWtNjDXiLyniNdjQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} hasBin: true - dependencies: - '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.11.0 - '@rollup/rollup-android-arm64': 4.11.0 - '@rollup/rollup-darwin-arm64': 4.11.0 - '@rollup/rollup-darwin-x64': 4.11.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.11.0 - '@rollup/rollup-linux-arm64-gnu': 4.11.0 - '@rollup/rollup-linux-arm64-musl': 4.11.0 - '@rollup/rollup-linux-riscv64-gnu': 4.11.0 - '@rollup/rollup-linux-x64-gnu': 4.11.0 - '@rollup/rollup-linux-x64-musl': 4.11.0 - '@rollup/rollup-win32-arm64-msvc': 4.11.0 - '@rollup/rollup-win32-ia32-msvc': 4.11.0 - '@rollup/rollup-win32-x64-msvc': 4.11.0 fsevents: 2.3.3 dev: true @@ -10405,6 +10306,12 @@ packages: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} dev: false + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -10428,7 +10335,6 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} @@ -10441,11 +10347,19 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - /sass@1.71.0: - resolution: {integrity: sha512-HKKIKf49Vkxlrav3F/w6qRuPcmImGVbIXJ2I3Kg0VMA+3Bav+8yE9G5XmP5lMj6nl4OlqbPftGAscNaNu28b8w==} - engines: {node: '>=14.0.0'} + /saslprep@1.0.3: + resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + sparse-bitfield: 3.0.3 + dev: false + optional: true + + /sass@1.58.3: + resolution: {integrity: sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==} + engines: {node: '>=12.0.0'} hasBin: true dependencies: chokidar: 3.6.0 @@ -10503,7 +10417,6 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - requiresBuild: true dev: false optional: true @@ -10518,23 +10431,31 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 dev: true /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: false /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -10547,8 +10468,8 @@ packages: engines: {node: '>=8'} dev: true - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -10560,27 +10481,16 @@ packages: resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} dev: false - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true - /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - requiresBuild: true dev: false optional: true /simple-get@3.1.1: resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} - requiresBuild: true dependencies: decompress-response: 4.2.1 once: 1.4.0 @@ -10593,6 +10503,24 @@ packages: engines: {node: '>=8'} dev: true + /slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -10606,8 +10534,8 @@ packages: engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: false - /socks@2.7.3: - resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==} + /socks@2.8.1: + resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} dependencies: ip-address: 9.0.5 @@ -10638,7 +10566,6 @@ packages: /sparse-bitfield@3.0.3: resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - requiresBuild: true dependencies: memory-pager: 1.5.0 dev: false @@ -10662,10 +10589,6 @@ packages: deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' dev: true - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true - /state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} dev: false @@ -10679,8 +10602,20 @@ packages: engines: {node: '>= 0.8'} dev: false - /std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + /stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /stream-http@3.2.0: + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + xtend: 4.0.2 dev: true /streamsearch@1.1.0: @@ -10695,7 +10630,6 @@ packages: /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - requiresBuild: true dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 @@ -10715,13 +10649,13 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 get-intrinsic: 1.2.4 has-symbols: 1.0.3 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.1 - side-channel: 1.0.5 + set-function-name: 2.0.2 + side-channel: 1.0.6 dev: true /string.prototype.trim@1.2.8: @@ -10730,7 +10664,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /string.prototype.trimend@1.0.7: @@ -10738,7 +10672,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /string.prototype.trimstart@1.0.7: @@ -10746,7 +10680,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /string_decoder@1.1.1: @@ -10757,11 +10691,8 @@ packages: /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - requiresBuild: true dependencies: safe-buffer: 5.2.1 - dev: false - optional: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -10791,19 +10722,13 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - dependencies: - acorn: 8.11.3 - dev: true - /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: inline-style-parser: 0.1.1 dev: false - /styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.24.0)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -10816,7 +10741,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 client-only: 0.0.1 react: 18.2.0 @@ -10871,7 +10796,6 @@ packages: /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} - requiresBuild: true dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -10886,25 +10810,32 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /timezones-list@3.0.3: - resolution: {integrity: sha512-C+Vdvvj2c1xB6pu81pOX8geo6mrk/QsudFVlTVQET7QQwu8WAIyhDNeCrK5grU7EMzmbKLWqz7uU6dN8fvQvPQ==} - dev: false - - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} - dev: false - - /tinybench@2.6.0: - resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tinypool@0.8.2: - resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + /timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + + /timezones-list@3.0.2: + resolution: {integrity: sha512-I698hm6Jp/xxkwyTSOr39pZkYKETL8LDJeSIhjxXBfPUAHM5oZNuQ4o9UK3PSkDBOkjATecSOBb3pR1IkIBUsg==} + dev: false + + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + dev: false + + /tinypool@0.2.4: + resolution: {integrity: sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==} engines: {node: '>=14.0.0'} dev: true - /tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + /tinyspy@1.1.1: + resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} engines: {node: '>=14.0.0'} dev: true @@ -10998,6 +10929,10 @@ packages: typescript: 4.9.5 dev: true + /tty-browserify@0.0.1: + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + dev: true + /tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} @@ -11026,8 +10961,8 @@ packages: engines: {node: '>=10'} dev: true - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true @@ -11039,8 +10974,8 @@ packages: mime-types: 2.1.35 dev: false - /typed-array-buffer@1.0.1: - resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -11048,33 +10983,39 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + gopd: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + gopd: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.5: + resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray@0.0.6: @@ -11087,10 +11028,6 @@ packages: hasBin: true dev: true - /ufo@1.4.0: - resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} - dev: true - /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -11104,8 +11041,12 @@ packages: resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} dev: false + /undici-types@5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false /unherit@1.1.3: resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} @@ -11260,6 +11201,13 @@ packages: punycode: 2.3.1 dev: true + /url@0.11.3: + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} + dependencies: + punycode: 1.4.1 + qs: 6.11.2 + dev: true + /use-callback-ref@1.3.1(@types/react@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} engines: {node: '>=10'} @@ -11301,7 +11249,16 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.14 + dev: true /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} @@ -11377,35 +11334,13 @@ packages: vfile-message: 3.1.4 dev: false - /vite-node@1.2.2: - resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - dependencies: - cac: 6.7.14 - debug: 4.3.4 - pathe: 1.1.2 - picocolors: 1.0.0 - vite: 5.1.3 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - - /vite@5.1.3: - resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} - engines: {node: ^18.0.0 || >=20.0.0} + /vite@3.2.8(@types/node@20.8.5): + resolution: {integrity: sha512-EtQU16PLIJpAZol2cTLttNP1mX6L0SyI0pgQB1VOoWeQnMSvtiwovV3D6NcjN8CZQWWyESD2v5NGnpz5RvgOZA==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 + '@types/node': '>= 14' less: '*' - lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -11415,8 +11350,6 @@ packages: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true stylus: @@ -11426,62 +11359,51 @@ packages: terser: optional: true dependencies: - esbuild: 0.19.12 + '@types/node': 20.8.5 + esbuild: 0.15.18 postcss: 8.4.35 - rollup: 4.11.0 + resolve: 1.22.8 + rollup: 2.79.1 optionalDependencies: fsevents: 2.3.3 dev: true - /vitest@1.2.2: - resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} - engines: {node: ^18.0.0 || >=20.0.0} + /vitest@0.21.1: + resolution: {integrity: sha512-WBIxuFmIDPuK47GO6Lu9eNeRMqHj/FWL3dk73OHH3eyPPWPiu+UB3QHLkLK2PEggCqJW4FaWoWg8R68S7p9+9Q==} + engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': ^1.0.0 - '@vitest/ui': ^1.0.0 + '@vitest/browser': '*' + '@vitest/ui': '*' + c8: '*' happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/node': - optional: true '@vitest/browser': optional: true '@vitest/ui': optional: true + c8: + optional: true happy-dom: optional: true jsdom: optional: true dependencies: - '@vitest/expect': 1.2.2 - '@vitest/runner': 1.2.2 - '@vitest/snapshot': 1.2.2 - '@vitest/spy': 1.2.2 - '@vitest/utils': 1.2.2 - acorn-walk: 8.3.2 - cac: 6.7.14 + '@types/chai': 4.3.12 + '@types/chai-subset': 1.3.5 + '@types/node': 20.8.5 chai: 4.4.1 debug: 4.3.4 - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.7 - pathe: 1.1.2 - picocolors: 1.0.0 - std-env: 3.7.0 - strip-literal: 1.3.0 - tinybench: 2.6.0 - tinypool: 0.8.2 - vite: 5.1.3 - vite-node: 1.2.2 - why-is-node-running: 2.2.2 + local-pkg: 0.4.3 + tinypool: 0.2.4 + tinyspy: 1.1.1 + vite: 3.2.8(@types/node@20.8.5) transitivePeerDependencies: - less - - lightningcss - sass - stylus - sugarss @@ -11489,25 +11411,14 @@ packages: - terser dev: true + /vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true + /void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - /vue@3.4.19: - resolution: {integrity: sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@vue/compiler-dom': 3.4.19 - '@vue/compiler-sfc': 3.4.19 - '@vue/runtime-dom': 3.4.19 - '@vue/server-renderer': 3.4.19(vue@3.4.19) - '@vue/shared': 3.4.19 - dev: true - /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -11519,8 +11430,8 @@ packages: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} dev: false - /web-streams-polyfill@3.3.2: - resolution: {integrity: sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==} + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} dev: false @@ -11598,7 +11509,7 @@ packages: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 @@ -11613,23 +11524,22 @@ packages: isexe: 2.0.0 dev: true - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - dev: true - /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - requiresBuild: true dependencies: string-width: 4.2.3 dev: false optional: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -11639,15 +11549,6 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -11670,16 +11571,17 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + /yaml@2.4.0: + resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==} engines: {node: '>= 14'} + hasBin: true dev: true - /yjs@13.6.12: - resolution: {integrity: sha512-KOT8ILoyVH2f/PxPadeu5kVVS055D1r3x1iFfJVJzFdnN98pVGM8H07NcKsO+fG3F7/0tf30Vnokf5YIqhU/iw==} + /yjs@13.6.14: + resolution: {integrity: sha512-D+7KcUr0j+vBCUSKXXEWfA+bG4UQBviAwP3gYBhkstkgwy5+8diOPMx0iqLIOxNo/HxaREUimZRxqHGAHCL2BQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} dependencies: - lib0: 0.2.88 + lib0: 0.2.90 dev: false /yocto-queue@0.1.0: @@ -11687,46 +11589,38 @@ packages: engines: {node: '>=10'} dev: true - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true - - /zhlint@0.7.4: - resolution: {integrity: sha512-E1rA6TyQJ1cWWfMoM8KE1hMdDDi5B8Gv+8OYPXe733Lf0C3EwJ+jh1cpoK/KTrYeITumRZQ0KSPkBRMNZuC8oA==} + /zhlint@0.7.1: + resolution: {integrity: sha512-FwwBm1JKyvIBm16exTqyG5gfnvp1fCKn9hIkjXj3cmbCn3aWE6FQaPTkmJfrLR0JNP1CIZjBDdD5Wkbts2r8PA==} hasBin: true dependencies: chalk: 4.1.2 - glob: 10.3.10 - ignore: 5.3.1 + glob: 7.2.3 minimist: 1.2.8 + node-stdlib-browser: 1.2.0 remark-frontmatter: 1.3.3 remark-parse: 7.0.2 unified: 8.4.2 - vitest: 1.2.2 - vue: 3.4.19 + vitest: 0.21.1 transitivePeerDependencies: - '@edge-runtime/vm' - - '@types/node' - '@vitest/browser' - '@vitest/ui' + - c8 - happy-dom - jsdom - less - - lightningcss - sass - stylus - sugarss - supports-color - terser - - typescript dev: true /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} - /zrender@5.4.4: - resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==} + /zrender@5.4.1: + resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==} dependencies: tslib: 2.3.0 dev: false @@ -11737,23 +11631,19 @@ packages: tslib: 2.3.0 dev: false - /zustand@4.5.0(@types/react@18.2.0)(immer@9.0.21)(react@18.2.0): - resolution: {integrity: sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A==} + /zustand@4.3.5(immer@9.0.19)(react@18.2.0): + resolution: {integrity: sha512-2iPUzfwx+g3f0PagOMz2vDO9mZzEp2puFpNe7vrAymVPOEIEUjCPkC4/zy84eAscxIWmTU4j9g6upXYkJdzEFQ==} engines: {node: '>=12.7.0'} peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0.6' + immer: '>=9.0' react: '>=16.8' peerDependenciesMeta: - '@types/react': - optional: true immer: optional: true react: optional: true dependencies: - '@types/react': 18.2.0 - immer: 9.0.21 + immer: 9.0.19 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/projects/app/package.json b/projects/app/package.json index 297c422c5..1d61f447e 100644 --- a/projects/app/package.json +++ b/projects/app/package.json @@ -1,6 +1,6 @@ { "name": "app", - "version": "4.6.8", + "version": "4.6.9", "private": false, "scripts": { "dev": "next dev", @@ -33,7 +33,7 @@ "formidable": "^2.1.1", "framer-motion": "^9.0.6", "hyperdown": "^2.4.29", - "i18next": "^22.5.1", + "i18next": "23.10.0", "immer": "^9.0.19", "js-yaml": "^4.1.0", "jschardet": "^3.0.0", @@ -42,13 +42,13 @@ "mermaid": "^10.2.3", "nanoid": "^4.0.1", "next": "13.5.2", - "next-i18next": "^13.3.0", + "next-i18next": "15.2.0", "nprogress": "^0.2.0", "react": "18.2.0", "react-day-picker": "^8.7.1", "react-dom": "18.2.0", "react-hook-form": "^7.43.1", - "react-i18next": "^12.3.1", + "react-i18next": "13.5.0", "react-markdown": "^8.0.7", "react-syntax-highlighter": "^15.5.0", "reactflow": "^11.7.4", diff --git a/projects/app/public/docs/versionIntro.md b/projects/app/public/docs/versionIntro.md index 5f1cd9eb7..a3b9cc714 100644 --- a/projects/app/public/docs/versionIntro.md +++ b/projects/app/public/docs/versionIntro.md @@ -1,10 +1,9 @@ ### Fast GPT V4.6.8 -1. 新增 - 知识库搜索合并模块。 -2. 新增 - 新的 Http 模块,支持更加灵活的参数传入。同时支持了输入输出自动数据类型转化,例如:接口输出的 JSON 类型会自动转成字符串类型,直接给其他模块使用。此外,还补充了一些例子,可在文档中查看。 -3. 优化 - 问题优化并入知识库搜索模块,无需单独配置。并且问题优化的同时,实现了问题扩展,丰富搜索的语义。(知识库模块会看到有2个参数配置,有一个是多余的,如果想让它消失,可以删除模块,重新增加一个) -4. 修复 - 语音输入文件无法上传。 -5. 修复 - 对话框重新生成无法使用。 -6. [点击查看高级编排介绍文档](https://doc.fastgpt.in/docs/workflow/intro) -7. [使用文档](https://doc.fastgpt.in/docs/intro/) -8. [点击查看商业版](https://doc.fastgpt.in/docs/commercial/) +1. 新增 - 知识库新增“增强处理”训练模式,可生成更多类型索引。 +2. 新增 - 完善了HTTP模块的变量提示。 +3. 新增 - HTTP模块支持OpenAI单接口导入。 +4. 优化 - 问题补全。增加英文类型。同时可以设置为单独模块,方便复用。 +5. [点击查看高级编排介绍文档](https://doc.fastgpt.in/docs/workflow/intro) +6. [使用文档](https://doc.fastgpt.in/docs/intro/) +7. [点击查看商业版](https://doc.fastgpt.in/docs/commercial/) \ No newline at end of file diff --git a/projects/app/public/locales/en/common.json b/projects/app/public/locales/en/common.json index 571883e37..15e8d5a24 100644 --- a/projects/app/public/locales/en/common.json +++ b/projects/app/public/locales/en/common.json @@ -268,6 +268,7 @@ "Quote templates": "Quote templates", "Random": "Random", "Save and preview": "Save", + "Search team tags": "Search tags", "Select TTS": "Select TTS", "Select app from template": "Select from the template", "Select quote template": "Select quote template", @@ -278,6 +279,7 @@ "Simple Config Tip": "Only basic functions are included. For complex agent functions, use advanced orchestration.", "TTS": "Audio Speech", "TTS Tip": "After this function is enabled, the voice playback function can be used after each conversation. Use of this feature may incur additional charges.", + "Team tags": "Team tags", "Temperature": "Temperature", "Welcome Text": "Welcome Text", "create app": "Create App", @@ -409,7 +411,7 @@ "Stop Speak": "Stop Speak", "Type a message": "Input problem", "Unpin": "Unpin", - "You need to a chat app": "You need to a chat app", + "You need to a chat app": "You don't have apps available", "error": { "Chat error": "Chat error", "Messages empty": "Interface content is empty, maybe the text is too long ~", @@ -468,7 +470,7 @@ "module similarity": "Similarity", "module temperature": "Temperature", "module time": "Running Time", - "module tokens": "Tokens", + "module tokens": "Total Tokens", "plugin output": "Plugin Output", "search using reRank": "ReRank", "text output": "Text Output" @@ -594,6 +596,7 @@ "file": "File", "folder": "Folder", "import": { + "Auto mode Estimated Price Tips": "Enhanced processing calls the file processing model: {{price}} integral /1k Tokens", "Auto process": "Auto", "Auto process desc": "Automatically set segmentation and preprocessing rules", "CSV Import": "CSV QA Import", @@ -615,9 +618,9 @@ "Data file progress": "Data upload progress", "Data process params": "Data process params", "Down load csv template": "Down load csv template", - "Embedding Estimated Price Tips": "Index billing: {{price}}/1k chars", + "Embedding Estimated Price Tips": "Index billing: {{price}}/1k Tokens", "Estimated Price": "Estimated Price: : {{amount}}{{unit}}", - "Estimated Price Tips": "QA charges\nInput: 1k chars={{charsPointsPrice}} points", + "Estimated Price Tips": "QA charges: {{charsPointsPrice}} points/1k Tokens", "Estimated points": "About {{points}} points", "Fetch Error": "Get link failed", "Fetch Url": "Url", @@ -638,7 +641,7 @@ "Preview chunks": "Chunks", "Preview raw text": "Preview file text (max show 10000 words)", "Process way": "Process way", - "QA Estimated Price Tips": "QA billing: {{price}}/1k characters (including input and output)", + "QA Estimated Price Tips": "QA billing: {{price}}/1k Tokens (including input and output)", "QA Import": "QA Split", "QA Import Tip": "According to certain rules, the text is broken into a larger paragraph, and the AI is invoked to generate a question and answer pair for the paragraph.", "Re Preview": "RePreview", @@ -737,6 +740,8 @@ }, "training": { "Agent queue": "QA wait list", + "Auto mode": "Enhancement process", + "Auto mode Tip": "Subindex and call model are used to generate relevant questions and abstracts to increase the semantic richness of data blocks and facilitate retrieval. It consumes more storage space and increases the number of AI calls.", "Chunk mode": "Chunk split", "Full": "Expect more than 5 minutes", "Leisure": "Leisure", @@ -1217,13 +1222,33 @@ "Sending Code": "Sending" }, "login": { + "And": "&", + "Email": "Email", + "Forget Password": "Forget Password?", "Github": "Github", "Google": "Google", - "Provider error": "Login exception, please try again" + "Password": "Password", + "Password login": "Password login", + "Phone": "Phone Login", + "Phone number": "Phone", + "Policy tip": "By using it, you agree with us", + "Privacy": "Privacy", + "Provider error": "Login exception, please try again", + "Register": "Register", + "Root login": "Log in as the root user", + "Root password placeholder": "root password is the environment variable you set", + "Terms": "Terms", + "Username": "Username", + "Wechat": "Wechat", + "Wx qr login": "Wechat scan code login" }, "team": { "Dataset usage": "Dataset usage", - "member": "Member" + "Team Tags Async Success": "Team async success", + "member": "Member", + "tag": { + "Have not opened": "Team chat is not enabled" + } } }, "wallet": { diff --git a/projects/app/public/locales/zh/common.json b/projects/app/public/locales/zh/common.json index dcf96bdeb..cbf9b5e57 100644 --- a/projects/app/public/locales/zh/common.json +++ b/projects/app/public/locales/zh/common.json @@ -268,6 +268,7 @@ "Quote templates": "引用内容模板", "Random": "发散", "Save and preview": "保存并预览", + "Search team tags": "搜索标签", "Select TTS": "选择语音播放模式", "Select app from template": "从模板中选择", "Select quote template": "选择引用提示模板", @@ -278,6 +279,7 @@ "Simple Config Tip": "仅包含基础功能,复杂 agent 功能请使用高级编排。", "TTS": "语音播报", "TTS Tip": "开启后,每次对话后可使用语音播放功能。使用该功能可能产生额外费用。", + "Team tags": "团队标签", "Temperature": "温度", "Welcome Text": "对话开场白", "create app": "创建属于你的 AI 应用", @@ -409,7 +411,7 @@ "Stop Speak": "停止录音", "Type a message": "输入问题", "Unpin": "取消置顶", - "You need to a chat app": "鉴权失败,暂无权限访问应用", + "You need to a chat app": "你没有可用的应用", "error": { "Chat error": "对话出现异常", "Messages empty": "接口内容为空,可能文本超长了~", @@ -468,7 +470,7 @@ "module similarity": "相似度", "module temperature": "温度", "module time": "运行时长", - "module tokens": "Tokens", + "module tokens": "总Tokens", "plugin output": "插件输出值", "search using reRank": "结果重排", "text output": "文本输出" @@ -596,13 +598,14 @@ "file": "文件", "folder": "目录", "import": { + "Auto mode Estimated Price Tips": "增强处理需调用文件处理模型: {{price}}积分/1k Tokens", "Auto process": "自动", "Auto process desc": "自动设置分割和预处理规则", "CSV Import": "CSV 导入", "CSV Import Tip": "通过批量导入问答对,要求提前整理好数据", "Chunk Range": "范围: {{min}}~{{max}}", "Chunk Split": "直接分段", - "Chunk Split Tip": "将文本按一定的规则进行分段处理后,转成可进行语义搜索的格式,适合绝大多数场景。", + "Chunk Split Tip": "将文本按一定的规则进行分段处理后,转成可进行语义搜索的格式,适合绝大多数场景。不需要调用模型额外处理,成本低。", "Chunk length": "分块总量", "Csv format error": "csv 文件格式有误,请确保 index 和 content 两列", "Custom file": "自定义文本", @@ -617,9 +620,9 @@ "Data file progress": "数据上传进度", "Data process params": "数据处理参数", "Down load csv template": "点击下载 CSV 模板", - "Embedding Estimated Price Tips": "索引计费: {{price}}积分/1k字符", + "Embedding Estimated Price Tips": "索引计费: {{price}}积分/1k Tokens", "Estimated Price": "预估价格: {{amount}}{{unit}}", - "Estimated Price Tips": "QA计费为\n输入: 1k字符 = {{charsPointsPrice}}积分", + "Estimated Price Tips": "QA计费为\n输入: {{charsPointsPrice}}积分/1k Tokens", "Estimated points": "预估消耗 {{points}} 积分", "Fetch Error": "获取链接失败", "Fetch Url": "网络链接", @@ -640,9 +643,9 @@ "Preview chunks": "分段预览", "Preview raw text": "预览源文本(最多展示10000字)", "Process way": "处理方式", - "QA Estimated Price Tips": "QA计费为: {{price}}积分/1k 字符(包含输入和输出)", + "QA Estimated Price Tips": "QA计费为: {{price}}积分/1k Tokens(包含输入和输出)", "QA Import": "QA拆分", - "QA Import Tip": "根据一定规则,将文本拆成一段较大的段落,调用 AI 为该段落生成问答对。", + "QA Import Tip": "根据一定规则,将文本拆成一段较大的段落,调用 AI 为该段落生成问答对。有非常高的检索精度,但是会丢失很多内容细节。", "Re Preview": "重新生成预览", "Select file": "选择文件", "Select source": "选择来源", @@ -739,6 +742,8 @@ }, "training": { "Agent queue": "QA训练排队", + "Auto mode": "增强处理(实验)", + "Auto mode Tip": "通过子索引以及调用模型生成相关问题与摘要,来增加数据块的语义丰富度,更利于检索。需要消耗更多的存储空间和增加AI调用次数。", "Chunk mode": "直接分段", "Full": "预计5分钟以上", "Leisure": "空闲", @@ -1219,13 +1224,33 @@ "Sending Code": "正在发送" }, "login": { + "And": "和", + "Email": "邮箱", + "Forget Password": "忘记密码?", "Github": "Github 登录", "Google": "Google 登录", - "Provider error": "登录异常,请重试" + "Password": "密码", + "Password login": "密码登录", + "Phone": "手机号登录", + "Phone number": "手机号", + "Policy tip": "使用即代表你同意我们的", + "Privacy": "隐私政策", + "Provider error": "登录异常,请重试", + "Register": "注册账号", + "Root login": "使用root用户登录", + "Root password placeholder": "root密码为你设置的环境变量", + "Terms": "服务协议", + "Username": "用户名", + "Wechat": "微信登录", + "Wx qr login": "微信扫码登录" }, "team": { "Dataset usage": "知识库容量", - "member": "成员" + "Team Tags Async Success": "同步完成", + "member": "成员", + "tag": { + "Have not opened": "未开通团队聊天功能" + } } }, "wallet": { diff --git a/projects/app/src/components/ChatBox/MessageInput.tsx b/projects/app/src/components/ChatBox/MessageInput.tsx index 42b621e23..5a49bb0e3 100644 --- a/projects/app/src/components/ChatBox/MessageInput.tsx +++ b/projects/app/src/components/ChatBox/MessageInput.tsx @@ -13,6 +13,7 @@ import { IMG_BLOCK_KEY } from '@fastgpt/global/core/chat/constants'; import { addDays } from 'date-fns'; import { useRequest } from '@/web/common/hooks/useRequest'; import { MongoImageTypeEnum } from '@fastgpt/global/common/file/image/constants'; +import { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat'; const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6); enum FileTypeEnum { @@ -35,8 +36,12 @@ const MessageInput = ({ isChatting, TextareaDom, showFileSelector = false, - resetInputVal -}: { + resetInputVal, + shareId, + outLinkUid, + teamId, + teamToken +}: OutLinkChatAuthProps & { onChange?: (e: string) => void; onSendMessage: (e: string) => void; onStop: () => void; @@ -47,7 +52,6 @@ const MessageInput = ({ }) => { const [, startSts] = useTransition(); - const { shareId } = useRouter().query as { shareId?: string }; const { isSpeaking, isTransCription, @@ -56,7 +60,7 @@ const MessageInput = ({ speakingTimeString, renderAudioGraph, stream - } = useSpeech({ shareId }); + } = useSpeech({ shareId, outLinkUid, teamId, teamToken }); const { isPc } = useSystemStore(); const canvasRef = useRef(null); const { t } = useTranslation(); @@ -82,7 +86,10 @@ const MessageInput = ({ maxSize: 1024 * 1024 * 5, // 30 day expired. expiredTime: addDays(new Date(), 7), - shareId + shareId, + outLinkUid, + teamId, + teamToken }); setFileList((state) => state.map((item) => @@ -320,7 +327,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')} rows={1} height={'22px'} lineHeight={'22px'} - maxHeight={'150px'} + maxHeight={'50vh'} maxLength={-1} overflowY={'auto'} whiteSpace={'pre-wrap'} diff --git a/projects/app/src/components/ChatBox/QuoteModal.tsx b/projects/app/src/components/ChatBox/QuoteModal.tsx index 3299b607b..b6a6dd7f6 100644 --- a/projects/app/src/components/ChatBox/QuoteModal.tsx +++ b/projects/app/src/components/ChatBox/QuoteModal.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, useState } from 'react'; +import React, { useMemo } from 'react'; import { ModalBody, Box, useTheme } from '@chakra-ui/react'; import MyModal from '../MyModal'; @@ -10,12 +10,12 @@ import RawSourceBox from '../core/dataset/RawSourceBox'; const QuoteModal = ({ rawSearch = [], onClose, - isShare, + showDetail, metadata }: { rawSearch: SearchDataResponseItemType[]; onClose: () => void; - isShare: boolean; + showDetail: boolean; metadata?: { collectionId: string; sourceId?: string; @@ -57,7 +57,7 @@ const QuoteModal = ({ } > - + @@ -68,10 +68,10 @@ export default QuoteModal; export const QuoteList = React.memo(function QuoteList({ rawSearch = [], - isShare + showDetail }: { rawSearch: SearchDataResponseItemType[]; - isShare: boolean; + showDetail: boolean; }) { const theme = useTheme(); @@ -88,7 +88,7 @@ export const QuoteList = React.memo(function QuoteList({ _hover={{ '& .hover-data': { display: 'flex' } }} bg={i % 2 === 0 ? 'white' : 'myWhite.500'} > - + ))} diff --git a/projects/app/src/components/ChatBox/ResponseTags.tsx b/projects/app/src/components/ChatBox/ResponseTags.tsx index d44921975..87e72b363 100644 --- a/projects/app/src/components/ChatBox/ResponseTags.tsx +++ b/projects/app/src/components/ChatBox/ResponseTags.tsx @@ -1,7 +1,7 @@ import React, { useMemo, useState } from 'react'; import type { ChatHistoryItemResType } from '@fastgpt/global/core/chat/type.d'; import type { ChatItemType } from '@fastgpt/global/core/chat/type'; -import { Flex, BoxProps, useDisclosure, Image, useTheme, Box } from '@chakra-ui/react'; +import { Flex, BoxProps, useDisclosure, useTheme, Box } from '@chakra-ui/react'; import { useTranslation } from 'next-i18next'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import type { SearchDataResponseItemType } from '@fastgpt/global/core/dataset/type'; @@ -20,10 +20,10 @@ const WholeResponseModal = dynamic(() => import('./WholeResponseModal'), { ssr: const ResponseTags = ({ responseData = [], - isShare + showDetail }: { responseData?: ChatHistoryItemResType[]; - isShare: boolean; + showDetail: boolean; }) => { const theme = useTheme(); const { isPc } = useSystemStore(); @@ -76,13 +76,13 @@ const ResponseTags = ({ sourceName: item.sourceName, sourceId: item.sourceId, icon: getSourceNameIcon({ sourceId: item.sourceId, sourceName: item.sourceName }), - canReadQuote: !isShare || strIsLink(item.sourceId), + canReadQuote: showDetail || strIsLink(item.sourceId), collectionId: item.collectionId })), historyPreview: chatData?.historyPreview, runningTime: +responseData.reduce((sum, item) => sum + (item.runningTime || 0), 0).toFixed(2) }; - }, [isShare, responseData]); + }, [showDetail, responseData]); const TagStyles: BoxProps = { mr: 2, @@ -134,7 +134,7 @@ const ResponseTags = ({ )} - {!isShare && ( + {showDetail && ( {quoteList.length > 0 && ( @@ -187,7 +187,7 @@ const ResponseTags = ({ {!!quoteModalData && ( setQuoteModalData(undefined)} /> )} @@ -195,7 +195,11 @@ const ResponseTags = ({ setContextModalData(undefined)} /> )} {isOpenWholeModal && ( - + )} ); diff --git a/projects/app/src/components/ChatBox/WholeResponseModal.tsx b/projects/app/src/components/ChatBox/WholeResponseModal.tsx index 3430da544..be972471d 100644 --- a/projects/app/src/components/ChatBox/WholeResponseModal.tsx +++ b/projects/app/src/components/ChatBox/WholeResponseModal.tsx @@ -51,11 +51,11 @@ function Row({ const WholeResponseModal = ({ response, - isShare, + showDetail, onClose }: { response: ChatHistoryItemResType[]; - isShare: boolean; + showDetail: boolean; onClose: () => void; }) => { const { t } = useTranslation(); @@ -78,7 +78,7 @@ const WholeResponseModal = ({ } > - + ); @@ -88,10 +88,10 @@ export default WholeResponseModal; const ResponseBox = React.memo(function ResponseBox({ response, - isShare + showDetail }: { response: ChatHistoryItemResType[]; - isShare: boolean; + showDetail: boolean; }) { const theme = useTheme(); const { t } = useTranslation(); @@ -142,10 +142,7 @@ const ResponseBox = React.memo(function ResponseBox({ value={`${activeModule?.runningTime || 0}s`} /> - + 0 && ( } + rawDom={} /> )} @@ -280,7 +277,7 @@ const ResponseBox = React.memo(function ResponseBox({ {activeModule?.pluginDetail && activeModule?.pluginDetail.length > 0 && ( } + rawDom={} /> )} diff --git a/projects/app/src/components/ChatBox/index.tsx b/projects/app/src/components/ChatBox/index.tsx index 9115c43aa..ef4f25529 100644 --- a/projects/app/src/components/ChatBox/index.tsx +++ b/projects/app/src/components/ChatBox/index.tsx @@ -68,6 +68,7 @@ import type { AppTTSConfigType, VariableItemType } from '@fastgpt/global/core/mo import MessageInput from './MessageInput'; import { ModuleOutputKeyEnum } from '@fastgpt/global/core/module/constants'; import ChatBoxDivider from '../core/chat/Divider'; +import { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat'; const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 24); @@ -106,7 +107,7 @@ const MessageCardStyle: BoxProps = { maxW: ['calc(100% - 25px)', 'calc(100% - 40px)'] }; -type Props = { +type Props = OutLinkChatAuthProps & { feedbackType?: `${FeedbackTypeEnum}`; showMarkIcon?: boolean; // admin mark dataset showVoiceIcon?: boolean; @@ -120,9 +121,6 @@ type Props = { // not chat test params appId?: string; chatId?: string; - shareId?: string; - shareTeamId?: string; - outLinkUid?: string; onUpdateVariable?: (e: Record) => void; onStartChat?: (e: StartChatFnProps) => Promise<{ @@ -147,8 +145,9 @@ const ChatBox = ( appId, chatId, shareId, - shareTeamId, outLinkUid, + teamId, + teamToken, onUpdateVariable, onStartChat, onDelMessage @@ -288,7 +287,10 @@ const ChatBox = ( const result = await postQuestionGuide( { messages: adaptChat2GptMessages({ messages: history, reserveId: false }).slice(-6), - shareId + shareId, + outLinkUid, + teamId, + teamToken }, abortSignal ); @@ -300,7 +302,7 @@ const ChatBox = ( } } catch (error) {} }, - [questionGuide, shareId] + [questionGuide, shareId, outLinkUid, teamId, teamToken] ); /** @@ -398,22 +400,20 @@ const ChatBox = ( }; }) ); - if (!shareTeamId) { - setTimeout(() => { - createQuestionGuide({ - history: newChatList.map((item, i) => - i === newChatList.length - 1 - ? { - ...item, - value: responseText - } - : item - ) - }); - generatingScroll(); - isPc && TextareaDom.current?.focus(); - }, 100); - } + setTimeout(() => { + createQuestionGuide({ + history: newChatList.map((item, i) => + i === newChatList.length - 1 + ? { + ...item, + value: responseText + } + : item + ) + }); + generatingScroll(); + isPc && TextareaDom.current?.focus(); + }, 100); } catch (err: any) { toast({ title: t(getErrText(err, 'core.chat.error.Chat error')), @@ -622,6 +622,7 @@ const ChatBox = ( {/* control icon */} {/* control icon */} { @@ -829,7 +835,10 @@ const ChatBox = ( isChatting={index === chatHistory.length - 1 && isChatting} /> - + {/* custom feedback */} {item.customFeedbacks && item.customFeedbacks.length > 0 && ( @@ -909,6 +918,10 @@ const ChatBox = ( TextareaDom={TextareaDom} resetInputVal={resetInputVal} showFileSelector={showFileSelector} + shareId={shareId} + outLinkUid={outLinkUid} + teamId={teamId} + teamToken={teamToken} /> )} {/* user feedback modal */} @@ -1236,6 +1249,7 @@ function Empty() { } const ChatControllerComponent = React.memo(function ChatControllerComponent({ + isChatting, chat, setChatHistory, display, @@ -1249,8 +1263,13 @@ const ChatControllerComponent = React.memo(function ChatControllerComponent({ onAddUserDislike, onAddUserLike, ml, - mr -}: { + mr, + shareId, + outLinkUid, + teamId, + teamToken +}: OutLinkChatAuthProps & { + isChatting: boolean; chat: ChatSiteItemType; setChatHistory?: React.Dispatch>; showVoiceIcon?: boolean; @@ -1267,7 +1286,11 @@ const ChatControllerComponent = React.memo(function ChatControllerComponent({ const { t } = useTranslation(); const { copyData } = useCopyData(); const { audioLoading, audioPlaying, hasAudio, playAudio, cancelAudio } = useAudioPlay({ - ttsConfig + ttsConfig, + shareId, + outLinkUid, + teamId, + teamToken }); const controlIconStyle = { w: '14px', @@ -1296,7 +1319,7 @@ const ChatControllerComponent = React.memo(function ChatControllerComponent({ onClick={() => copyData(chat.value)} /> - {!!onDelete && ( + {!!onDelete && !isChatting && ( <> {onRetry && ( diff --git a/projects/app/src/components/TagEdit/index.tsx b/projects/app/src/components/TagEdit/index.tsx deleted file mode 100644 index 7f9a21809..000000000 --- a/projects/app/src/components/TagEdit/index.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useEffect, useMemo, useState } from 'react'; -import { - Menu, - MenuButton, - MenuList, - MenuItemOption, - MenuOptionGroup, - Flex, - TagLabel, - TagCloseButton, - HStack, - Tag, - Input -} from '@chakra-ui/react'; -import type { TeamTagsSchema } from '@fastgpt/global/support/user/team/type'; -const TagEdit = ({ - defaultValues, - teamsTags, - setSelectedTags -}: { - defaultValues: []; - teamsTags: Array; - setSelectedTags: (item: Array) => void; -}) => { - const [teamTagsOptions, setTeamTagsOptions] = useState(teamsTags); - const setSelectTeamsTags = (item: any) => { - setSelectedTags(item); - }; - useMemo(() => { - setTeamTagsOptions(teamsTags); - }, [teamsTags]); - return ( - <> - - - - {teamsTags.map((item: TeamTagsSchema, index: number) => { - const key: string = item?.key; - if (defaultValues.indexOf(key as never) > -1) { - return ( - - {item.label} - - - ); - } - })} - - - - { - // 对用户输入的搜索文本进行小写转换,以实现不区分大小写的搜索 - const searchLower: string = e?.nativeEvent?.data || ''; - // 使用filter方法来过滤列表,只返回包含搜索文本的项 - const resultList = teamsTags.filter((item) => { - const searchValue = item.label || ''; - // 对列表中的每一项也进行小写转换 - return searchValue.includes(searchLower); - }); - !searchLower ? setTeamTagsOptions(teamsTags) : setTeamTagsOptions(resultList); - }} - /> - { - setSelectTeamsTags(e); - }} - > - {teamTagsOptions.map((item, index) => { - return ( - - {item?.label} - - ); - })} - - - - - ); -}; - -export default TagEdit; diff --git a/projects/app/src/components/core/dataset/DatasetTypeTag.tsx b/projects/app/src/components/core/dataset/DatasetTypeTag.tsx index 7d1843f43..55122d094 100644 --- a/projects/app/src/components/core/dataset/DatasetTypeTag.tsx +++ b/projects/app/src/components/core/dataset/DatasetTypeTag.tsx @@ -8,7 +8,7 @@ import { DatasetTypeMap } from '@fastgpt/global/core/dataset/constants'; const DatasetTypeTag = ({ type, ...props }: { type: `${DatasetTypeEnum}` } & FlexProps) => { const { t } = useTranslation(); - const item = DatasetTypeMap[type]; + const item = DatasetTypeMap[type] || DatasetTypeMap['dataset']; return ( , + [TabEnum.params]: ( + + ), [TabEnum.body]: , [TabEnum.headers]: ( - + ) }[selectedTab]} @@ -313,11 +325,13 @@ function RenderHttpProps({ const RenderForm = ({ moduleId, input, - variables + variables, + tabType }: { moduleId: string; input: FlowNodeInputItemType; variables: EditorVariablePickerType[]; + tabType?: TabEnum; }) => { const { t } = useTranslation(); const { toast } = useToast(); @@ -327,11 +341,52 @@ const RenderForm = ({ const [shouldUpdateNode, setShouldUpdateNode] = useState(false); const leftVariables = useMemo(() => { - return variables.filter((variable) => { + const HttpHeaders = [ + { key: 'A-IM', label: 'A-IM' }, + { key: 'Accept', label: 'Accept' }, + { key: 'Accept-Charset', label: 'Accept-Charset' }, + { key: 'Accept-Encoding', label: 'Accept-Encoding' }, + { key: 'Accept-Language', label: 'Accept-Language' }, + { key: 'Accept-Datetime', label: 'Accept-Datetime' }, + { key: 'Access-Control-Request-Method', label: 'Access-Control-Request-Method' }, + { key: 'Access-Control-Request-Headers', label: 'Access-Control-Request-Headers' }, + { key: 'Authorization', label: 'Authorization' }, + { key: 'Cache-Control', label: 'Cache-Control' }, + { key: 'Connection', label: 'Connection' }, + { key: 'Content-Length', label: 'Content-Length' }, + { key: 'Content-Type', label: 'Content-Type' }, + { key: 'Cookie', label: 'Cookie' }, + { key: 'Date', label: 'Date' }, + { key: 'Expect', label: 'Expect' }, + { key: 'Forwarded', label: 'Forwarded' }, + { key: 'From', label: 'From' }, + { key: 'Host', label: 'Host' }, + { key: 'If-Match', label: 'If-Match' }, + { key: 'If-Modified-Since', label: 'If-Modified-Since' }, + { key: 'If-None-Match', label: 'If-None-Match' }, + { key: 'If-Range', label: 'If-Range' }, + { key: 'If-Unmodified-Since', label: 'If-Unmodified-Since' }, + { key: 'Max-Forwards', label: 'Max-Forwards' }, + { key: 'Origin', label: 'Origin' }, + { key: 'Pragma', label: 'Pragma' }, + { key: 'Proxy-Authorization', label: 'Proxy-Authorization' }, + { key: 'Range', label: 'Range' }, + { key: 'Referer', label: 'Referer' }, + { key: 'TE', label: 'TE' }, + { key: 'User-Agent', label: 'User-Agent' }, + { key: 'Upgrade', label: 'Upgrade' }, + { key: 'Via', label: 'Via' }, + { key: 'Warning', label: 'Warning' }, + { key: 'Dnt', label: 'Dnt' }, + { key: 'X-Requested-With', label: 'X-Requested-With' }, + { key: 'X-CSRF-Token', label: 'X-CSRF-Token' } + ]; + + return (tabType === TabEnum.headers ? HttpHeaders : variables).filter((variable) => { const existVariables = list.map((item) => item.key); return !existVariables.includes(variable.key); }); - }, [list, variables]); + }, [list, tabType, variables]); useEffect(() => { setList(input.value || []); @@ -378,16 +433,23 @@ const RenderForm = ({ }; const handleAddNewProps = (key: string, value: string = '') => { - const checkExist = list.find((item) => item.key === key); - if (checkExist) { - return toast({ - status: 'warning', - title: t('core.module.http.Key already exists') - }); - } - if (!key) return; + setList((prevList) => { + if (!key) { + return prevList; + } + + const checkExist = prevList.find((item) => item.key === key); + if (checkExist) { + setUpdateTrigger((prev) => !prev); + toast({ + status: 'warning', + title: t('core.module.http.Key already exists') + }); + return prevList; + } + return [...prevList, { key, type: 'string', value }]; + }); - setList((prevList) => [...prevList, { key, type: 'string', value }]); setShouldUpdateNode(true); }; @@ -406,7 +468,7 @@ const RenderForm = ({ { handleKeyChange(index, value); setUpdateTrigger((prev) => !prev); @@ -450,16 +512,19 @@ const RenderForm = ({ { handleAddNewProps(val); + setUpdateTrigger((prev) => !prev); }} placeholder={t('core.module.http.Add props')} value={''} - h={40} variables={leftVariables} + updateTrigger={updateTrigger} onBlur={(val) => { handleAddNewProps(val); + setUpdateTrigger((prev) => !prev); }} /> @@ -490,7 +555,7 @@ const RenderJson = ({ import('./EditModal')); const InviteModal = dynamic(() => import('./InviteModal')); -const TeamTagsAsync = dynamic(() => import('../TeamTagsAsync')); +const TeamTagModal = dynamic(() => import('../TeamTagModal')); const TeamManageModal = ({ onClose }: { onClose: () => void }) => { const { t } = useTranslation(); @@ -57,7 +55,6 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => { const { toast } = useToast(); const { teamPlanStatus } = useUserStore(); const { feConfigs } = useSystemStore(); - const [teamsTags, setTeamTags] = useState(); const { ConfirmModal: ConfirmRemoveMemberModal, openConfirm: openRemoveMember } = useConfirm(); const { ConfirmModal: ConfirmLeaveTeamModal, openConfirm: openLeaveConfirm } = useConfirm({ @@ -87,8 +84,6 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => { mutationFn: async (teamId: string) => { const token = await putSwitchTeam(teamId); token && setToken(token); - // get team tags - await getTeamsTags(teamId); return initUserInfo(); }, errorToast: t('user.team.Switch Team Failed') @@ -99,11 +94,6 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => { ['getMembers', userInfo?.team?.teamId], () => { if (!userInfo?.team?.teamId) return []; - // get team tags - getTeamsTags(userInfo.team.teamId).then((res: any) => { - setTeamTags(res); - }); - return getTeamMembers(userInfo.team.teamId); } ); @@ -217,17 +207,6 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => { : {})} > {team.teamName} - {/* {userInfo?.team?.teamId === team.teamId && ( - - {teamsTags.slice(0, 3).map((item: any, index) => { - return ( - - {item.label} - - ); - })} - - )} */} {userInfo?.team?.teamId === team.teamId ? ( @@ -290,31 +269,32 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => { {members.length} - {userInfo.team.role === TeamMemberRoleEnum.owner && - teamPlanStatus?.standardConstants && - teamPlanStatus.standardConstants.maxTeamMember > members.length && ( - - )} + }} + > + {t('user.team.Invite Member')} + + )} {userInfo.team.role === TeamMemberRoleEnum.owner && feConfigs?.show_team_chat && ( @@ -170,7 +189,7 @@ const TeamTagsAsync = ({ - diff --git a/projects/app/src/constants/user.ts b/projects/app/src/constants/user.ts index 05f6121d1..a10c1d1ad 100644 --- a/projects/app/src/constants/user.ts +++ b/projects/app/src/constants/user.ts @@ -1,7 +1,8 @@ -export enum PageTypeEnum { - login = 'login', +export enum LoginPageTypeEnum { + passwordLogin = 'passwordLogin', register = 'register', - forgetPassword = 'forgetPassword' + forgetPassword = 'forgetPassword', + wechat = 'wechat' } export enum PromotionEnum { diff --git a/projects/app/src/global/core/ai/api.d.ts b/projects/app/src/global/core/ai/api.d.ts index f474a7f32..aabeca6d7 100644 --- a/projects/app/src/global/core/ai/api.d.ts +++ b/projects/app/src/global/core/ai/api.d.ts @@ -1,6 +1,6 @@ import { ChatMessageItemType } from '@fastgpt/global/core/ai/type.d'; +import type { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat.d'; -export type CreateQuestionGuideParams = { +export type CreateQuestionGuideParams = OutLinkChatAuthProps & { messages: ChatMessageItemType[]; - shareId?: string; }; diff --git a/projects/app/src/global/core/chat/api.d.ts b/projects/app/src/global/core/chat/api.d.ts index 654005c81..05a6922a9 100644 --- a/projects/app/src/global/core/chat/api.d.ts +++ b/projects/app/src/global/core/chat/api.d.ts @@ -1,6 +1,7 @@ import type { AppTTSConfigType } from '@fastgpt/global/core/module/type.d'; import { ModuleItemType } from '../module/type'; import { AdminFbkType, ChatItemType, moduleDispatchResType } from '@fastgpt/global/core/chat/type'; +import type { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat.d'; export type GetChatSpeechProps = { ttsConfig: AppTTSConfigType; @@ -14,16 +15,16 @@ export type InitChatProps = { chatId?: string; loadCustomFeedbacks?: boolean; }; -/* ---------- chat ----------- */ -export type chatByTeamProps = { - teamId?: string; - appId?: string; - outLinkUid?: string; -}; export type InitOutLinkChatProps = { chatId?: string; - shareId?: string; - outLinkUid?: string; + shareId: string; + outLinkUid: string; +}; +export type InitTeamChatProps = { + teamId: string; + appId: string; + chatId?: string; + teamToken: string; }; export type InitChatResponse = { chatId?: string; @@ -43,42 +44,30 @@ export type InitChatResponse = { }; /* ---------- history ----------- */ -export type getHistoriesProps = { +export type GetHistoriesProps = OutLinkChatAuthProps & { appId?: string; - authToken?: string; - // share chat - shareId?: string; - outLinkUid?: string; // authToken/uid }; -export type UpdateHistoryProps = { +export type UpdateHistoryProps = OutLinkChatAuthProps & { appId: string; chatId: string; customTitle?: string; top?: boolean; - shareId?: string; - outLinkUid?: string; }; -export type DelHistoryProps = { +export type DelHistoryProps = OutLinkChatAuthProps & { appId: string; chatId: string; - shareId?: string; - outLinkUid?: string; }; -export type ClearHistoriesProps = { +export type ClearHistoriesProps = OutLinkChatAuthProps & { appId?: string; - shareId?: string; - outLinkUid?: string; }; /* -------- chat item ---------- */ -export type DeleteChatItemProps = { +export type DeleteChatItemProps = OutLinkChatAuthProps & { appId: string; chatId: string; contentId?: string; - shareId?: string; - outLinkUid?: string; }; export type AdminUpdateFeedbackParams = AdminFbkType & { diff --git a/projects/app/src/global/core/prompt/agent.ts b/projects/app/src/global/core/prompt/agent.ts index 475348bee..a4e6b467c 100644 --- a/projects/app/src/global/core/prompt/agent.ts +++ b/projects/app/src/global/core/prompt/agent.ts @@ -1,20 +1,26 @@ export const Prompt_AgentQA = { - description: ` 标记中是一段文本,学习和分析它,并整理学习成果: + description: ` 标记中是一段文本,学习和分析它,并整理学习成果: - 提出问题并给出每个问题的答案。 -- 答案需详细完整,给出相关原文描述。 -- 答案可以包含普通文字、链接、代码、表格、公示、媒体链接等 markdown 元素。 +- 答案需详细完整,尽可能保留原文描述。 +- 答案可以包含普通文字、链接、代码、表格、公示、媒体链接等 Markdown 元素。 - 最多提出 30 个问题。 `, - fixedText: `最后,你需要按下面的格式返回多个问题和答案: + fixedText: `请按以下格式整理学习成果: + +文本 + Q1: 问题。 A1: 答案。 Q2: A2: -…… - +------ + +我们开始吧! + + {{text}} - + ` }; diff --git a/projects/app/src/pages/account/components/UpdatePswModal.tsx b/projects/app/src/pages/account/components/UpdatePswModal.tsx index dbbf47e32..1c6a915c7 100644 --- a/projects/app/src/pages/account/components/UpdatePswModal.tsx +++ b/projects/app/src/pages/account/components/UpdatePswModal.tsx @@ -56,8 +56,8 @@ const UpdatePswModal = ({ onClose }: { onClose: () => void }) => { {...register('newPsw', { required: true, maxLength: { - value: 20, - message: '密码最少 4 位最多 20 位' + value: 60, + message: '密码最少 4 位最多 60 位' } })} > @@ -70,8 +70,8 @@ const UpdatePswModal = ({ onClose }: { onClose: () => void }) => { {...register('confirmPsw', { required: true, maxLength: { - value: 20, - message: '密码最少 4 位最多 20 位' + value: 60, + message: '密码最少 4 位最多 60 位' } })} > diff --git a/projects/app/src/pages/account/components/UsageDetail.tsx b/projects/app/src/pages/account/components/UsageDetail.tsx index d75cd5c2c..3482f5df7 100644 --- a/projects/app/src/pages/account/components/UsageDetail.tsx +++ b/projects/app/src/pages/account/components/UsageDetail.tsx @@ -25,8 +25,9 @@ const UsageDetail = ({ usage, onClose }: { usage: UsageItemType; onClose: () => [usage.list] ); - const { hasModel, hasCharsLen, hasDuration } = useMemo(() => { + const { hasModel, hasToken, hasCharsLen, hasDuration } = useMemo(() => { let hasModel = false; + let hasToken = false; let hasCharsLen = false; let hasDuration = false; let hasDataLen = false; @@ -36,6 +37,9 @@ const UsageDetail = ({ usage, onClose }: { usage: UsageItemType; onClose: () => hasModel = true; } + if (typeof item.tokens === 'number') { + hasToken = true; + } if (typeof item.charsLength === 'number') { hasCharsLen = true; } @@ -46,6 +50,7 @@ const UsageDetail = ({ usage, onClose }: { usage: UsageItemType; onClose: () => return { hasModel, + hasToken, hasCharsLen, hasDuration, hasDataLen @@ -91,9 +96,9 @@ const UsageDetail = ({ usage, onClose }: { usage: UsageItemType; onClose: () => {t('support.wallet.usage.Module name')} {hasModel && {t('support.wallet.usage.Ai model')}} + {hasToken && {t('support.wallet.usage.Token Length')}} {hasCharsLen && {t('support.wallet.usage.Text Length')}} {hasDuration && {t('support.wallet.usage.Duration')}} - {t('support.wallet.usage.Total points')} @@ -102,6 +107,7 @@ const UsageDetail = ({ usage, onClose }: { usage: UsageItemType; onClose: () => {t(item.moduleName)} {hasModel && {item.model ?? '-'}} + {hasToken && {item.tokens ?? '-'}} {hasCharsLen && {item.charsLength ?? '-'}} {hasDuration && {item.duration ?? '-'}} {formatNumber(item.amount)} diff --git a/projects/app/src/pages/api/admin/initv469.ts b/projects/app/src/pages/api/admin/initv469.ts index 54bf086ca..b3463ccee 100644 --- a/projects/app/src/pages/api/admin/initv469.ts +++ b/projects/app/src/pages/api/admin/initv469.ts @@ -4,6 +4,11 @@ import { connectToDatabase } from '@/service/mongo'; import { authCert } from '@fastgpt/service/support/permission/auth/common'; import { MongoUsage } from '@fastgpt/service/support/wallet/usage/schema'; import { connectionMongo } from '@fastgpt/service/common/mongo'; +import { checkFiles } from '../timerTask/dataset/checkInValidDatasetFiles'; +import { addHours } from 'date-fns'; +import { checkInvalid as checkInvalidImg } from '../timerTask/dataset/checkInvalidDatasetImage'; +import { checkInvalidCollection } from '../timerTask/dataset/checkInvalidMongoCollection'; +import { checkInvalidVector } from '../timerTask/dataset/checkInvalidVector'; /* pg 中的数据搬到 mongo dataset.datas 中,并做映射 */ export default async function handler(req: NextApiRequest, res: NextApiResponse) { @@ -21,6 +26,21 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) }); } + (async () => { + try { + console.log('执行脏数据清理任务'); + const end = addHours(new Date(), -1); + const start = addHours(new Date(), -360 * 24); + await checkFiles(start, end); + await checkInvalidImg(start, end); + await checkInvalidCollection(start, end); + await checkInvalidVector(start, end); + console.log('执行脏数据清理任务完毕'); + } catch (error) { + console.log('执行脏数据清理任务出错了'); + } + })(); + jsonRes(res, { message: 'success' }); diff --git a/projects/app/src/pages/api/common/file/uploadImage.ts b/projects/app/src/pages/api/common/file/uploadImage.ts index 6e58af019..5a37f451f 100644 --- a/projects/app/src/pages/api/common/file/uploadImage.ts +++ b/projects/app/src/pages/api/common/file/uploadImage.ts @@ -1,16 +1,16 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@fastgpt/service/common/response'; import { connectToDatabase } from '@/service/mongo'; -import { authCertOrShareId } from '@fastgpt/service/support/permission/auth/common'; +import { authChatCert } from '@/service/support/permission/auth/chat'; import { uploadMongoImg } from '@fastgpt/service/common/file/image/controller'; import { UploadImgProps } from '@fastgpt/global/common/file/api'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - const { shareId, ...body } = req.body as UploadImgProps; + const body = req.body as UploadImgProps; - const { teamId } = await authCertOrShareId({ req, shareId, authToken: true }); + const { teamId } = await authChatCert({ req, authToken: true }); const data = await uploadMongoImg({ teamId, diff --git a/projects/app/src/pages/api/common/system/getInitData.ts b/projects/app/src/pages/api/common/system/getInitData.ts index 40dd50bb9..0003d1b45 100644 --- a/projects/app/src/pages/api/common/system/getInitData.ts +++ b/projects/app/src/pages/api/common/system/getInitData.ts @@ -4,8 +4,6 @@ import { jsonRes } from '@fastgpt/service/common/response'; import { readFileSync, readdirSync } from 'fs'; import type { InitDateResponse } from '@/global/common/api/systemRes'; import type { FastGPTConfigFileType } from '@fastgpt/global/common/system/types/index.d'; -import { getTikTokenEnc } from '@fastgpt/global/common/string/tiktoken'; -import { initHttpAgent } from '@fastgpt/service/common/middle/httpAgent'; import { PluginSourceEnum } from '@fastgpt/global/core/plugin/constants'; import { getFastGPTConfigFromDB } from '@fastgpt/service/common/system/config/controller'; import { connectToDatabase } from '@/service/mongo'; @@ -63,7 +61,6 @@ export async function getInitConfig() { await connectToDatabase(); await Promise.all([ - initGlobal(), initSystemConfig(), // getSimpleModeTemplates(), getSystemVersion(), @@ -84,18 +81,6 @@ export async function getInitConfig() { } } -export function initGlobal() { - if (global.communityPlugins) return; - - global.communityPlugins = []; - global.simpleModeTemplates = []; - global.qaQueueLen = global.qaQueueLen ?? 0; - global.vectorQueueLen = global.vectorQueueLen ?? 0; - // init tikToken - getTikTokenEnc(); - initHttpAgent(); -} - export async function initSystemConfig() { // load config const [dbConfig, fileConfig] = await Promise.all([ @@ -125,7 +110,6 @@ export async function initSystemConfig() { // set config initFastGPTConfig(config); - global.systemEnv = config.systemEnv; console.log({ feConfigs: global.feConfigs, diff --git a/projects/app/src/pages/api/common/system/unlockTask.ts b/projects/app/src/pages/api/common/system/unlockTask.ts index b89768883..8089d154d 100644 --- a/projects/app/src/pages/api/common/system/unlockTask.ts +++ b/projects/app/src/pages/api/common/system/unlockTask.ts @@ -1,14 +1,14 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@fastgpt/service/common/response'; import { connectToDatabase } from '@/service/mongo'; -import { startQueue } from '@/service/utils/tools'; import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { startTrainingQueue } from '@/service/core/dataset/training/utils'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); await authCert({ req, authToken: true }); - startQueue(); + startTrainingQueue(); } catch (error) {} jsonRes(res); } diff --git a/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts b/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts index a51329085..d34de5abd 100644 --- a/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts +++ b/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts @@ -4,22 +4,21 @@ import { connectToDatabase } from '@/service/mongo'; import type { CreateQuestionGuideParams } from '@/global/core/ai/api.d'; import { pushQuestionGuideUsage } from '@/service/support/wallet/usage/push'; import { createQuestionGuide } from '@fastgpt/service/core/ai/functions/createQuestionGuide'; -import { authCertOrShareId } from '@fastgpt/service/support/permission/auth/common'; +import { authChatCert } from '@/service/support/permission/auth/chat'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - const { messages, shareId } = req.body as CreateQuestionGuideParams; + const { messages } = req.body as CreateQuestionGuideParams; - const { tmbId, teamId } = await authCertOrShareId({ + const { tmbId, teamId } = await authChatCert({ req, - authToken: true, - shareId + authToken: true }); const qgModel = global.llmModels[0]; - const { result, charsLength } = await createQuestionGuide({ + const { result, tokens } = await createQuestionGuide({ messages, model: qgModel.model }); @@ -29,7 +28,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< }); pushQuestionGuideUsage({ - charsLength, + tokens, teamId, tmbId }); diff --git a/projects/app/src/pages/api/core/chat/clearHistories.ts b/projects/app/src/pages/api/core/chat/clearHistories.ts index 8a5424053..fd8ce18fb 100644 --- a/projects/app/src/pages/api/core/chat/clearHistories.ts +++ b/projects/app/src/pages/api/core/chat/clearHistories.ts @@ -7,12 +7,13 @@ import { MongoChatItem } from '@fastgpt/service/core/chat/chatItemSchema'; import { ClearHistoriesProps } from '@/global/core/chat/api'; import { authOutLink } from '@/service/support/permission/auth/outLink'; import { ChatSourceEnum } from '@fastgpt/global/core/chat/constants'; +import { authTeamSpaceToken } from '@/service/support/permission/auth/team'; /* clear chat history */ export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - const { appId, shareId, outLinkUid } = req.query as ClearHistoriesProps; + const { appId, shareId, outLinkUid, teamId, teamToken } = req.query as ClearHistoriesProps; let chatAppId = appId; @@ -26,6 +27,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) outLinkUid: uid }; } + if (teamId && teamToken) { + const { uid } = await authTeamSpaceToken({ teamId, teamToken }); + return { + teamId, + appId, + outLinkUid: uid + }; + } if (appId) { const { tmbId } = await authCert({ req, authToken: true }); diff --git a/projects/app/src/pages/api/core/chat/getHistories.ts b/projects/app/src/pages/api/core/chat/getHistories.ts index 97ca87fc6..828c5d336 100644 --- a/projects/app/src/pages/api/core/chat/getHistories.ts +++ b/projects/app/src/pages/api/core/chat/getHistories.ts @@ -4,14 +4,15 @@ import { connectToDatabase } from '@/service/mongo'; import { MongoChat } from '@fastgpt/service/core/chat/chatSchema'; import type { ChatHistoryItemType } from '@fastgpt/global/core/chat/type.d'; import { ChatSourceEnum } from '@fastgpt/global/core/chat/constants'; -import { getHistoriesProps } from '@/global/core/chat/api'; +import { GetHistoriesProps } from '@/global/core/chat/api'; import { authOutLink } from '@/service/support/permission/auth/outLink'; import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { authTeamSpaceToken } from '@/service/support/permission/auth/team'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - const { appId, shareId, outLinkUid } = req.body as getHistoriesProps; + const { appId, shareId, outLinkUid, teamId, teamToken } = req.body as GetHistoriesProps; const limit = shareId && outLinkUid ? 20 : 30; @@ -28,10 +29,12 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } }; } - if (appId && outLinkUid) { + if (appId && teamId && teamToken) { + const { uid } = await authTeamSpaceToken({ teamId, teamToken }); return { - shareId, - outLinkUid: outLinkUid, + teamId, + appId, + outLinkUid: uid, source: ChatSourceEnum.team }; } diff --git a/projects/app/src/pages/api/core/chat/item/getSpeech.ts b/projects/app/src/pages/api/core/chat/item/getSpeech.ts index f5763be81..f8f6450ac 100644 --- a/projects/app/src/pages/api/core/chat/item/getSpeech.ts +++ b/projects/app/src/pages/api/core/chat/item/getSpeech.ts @@ -4,7 +4,7 @@ import { connectToDatabase } from '@/service/mongo'; import { GetChatSpeechProps } from '@/global/core/chat/api.d'; import { text2Speech } from '@fastgpt/service/core/ai/audio/speech'; import { pushAudioSpeechUsage } from '@/service/support/wallet/usage/push'; -import { authCertOrShareId } from '@fastgpt/service/support/permission/auth/common'; +import { authChatCert } from '@/service/support/permission/auth/chat'; import { authType2UsageSource } from '@/service/support/wallet/usage/utils'; import { getAudioSpeechModel } from '@fastgpt/service/core/ai/model'; import { MongoTTSBuffer } from '@fastgpt/service/common/buffer/tts/schema'; @@ -19,13 +19,13 @@ import { MongoTTSBuffer } from '@fastgpt/service/common/buffer/tts/schema'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - const { ttsConfig, input, shareId } = req.body as GetChatSpeechProps; + const { ttsConfig, input } = req.body as GetChatSpeechProps; if (!ttsConfig.model || !ttsConfig.voice) { throw new Error('model or voice not found'); } - const { teamId, tmbId, authType } = await authCertOrShareId({ req, authToken: true, shareId }); + const { teamId, tmbId, authType } = await authChatCert({ req, authToken: true }); const ttsModel = getAudioSpeechModel(ttsConfig.model); const voiceData = ttsModel.voices?.find((item) => item.value === ttsConfig.voice); diff --git a/projects/app/src/pages/api/core/chat/outLink/getInforByTeamId.ts b/projects/app/src/pages/api/core/chat/outLink/getInforByTeamId.ts deleted file mode 100644 index 224d9a074..000000000 --- a/projects/app/src/pages/api/core/chat/outLink/getInforByTeamId.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; -import { jsonRes } from '@fastgpt/service/common/response'; -import { connectToDatabase } from '@/service/mongo'; -import type { chatByTeamProps } from '@/global/core/chat/api.d'; -import axios from 'axios'; -import { MongoChatItem } from '@fastgpt/service/core/chat/chatItemSchema'; -import { getChatItems } from '@fastgpt/service/core/chat/controller'; -import { selectShareResponse } from '@/utils/service/core/chat'; -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - try { - await connectToDatabase(); - - let { teamId, appId, outLinkUid } = req.query as chatByTeamProps; - - const history = await MongoChatItem.find({ - appId: appId, - outLinkUid: outLinkUid, - teamId: teamId - }); - - jsonRes(res, { - data: history - }); - } catch (err) { - jsonRes(res, { - code: 500, - data: req.query, - error: err - }); - } -} - -export const config = { - api: { - responseLimit: '10mb' - } -}; diff --git a/projects/app/src/pages/api/core/chat/outLink/init.ts b/projects/app/src/pages/api/core/chat/outLink/init.ts index 27bb33138..e9647d89e 100644 --- a/projects/app/src/pages/api/core/chat/outLink/init.ts +++ b/projects/app/src/pages/api/core/chat/outLink/init.ts @@ -9,7 +9,7 @@ import { getChatItems } from '@fastgpt/service/core/chat/controller'; import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema'; import { authOutLink } from '@/service/support/permission/auth/outLink'; import { MongoApp } from '@fastgpt/service/core/app/schema'; -import { selectShareResponse } from '@/utils/service/core/chat'; +import { selectSimpleChatResponse } from '@/utils/service/core/chat'; import { AppErrEnum } from '@fastgpt/global/common/error/code/app'; import { MongoChat } from '@fastgpt/service/core/chat/chatSchema'; import { ChatErrEnum } from '@fastgpt/global/common/error/code/chat'; @@ -50,7 +50,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) // pick share response field history.forEach((item) => { - item.responseData = selectShareResponse({ responseData: item.responseData }); + item.responseData = selectSimpleChatResponse({ responseData: item.responseData }); }); jsonRes(res, { diff --git a/projects/app/src/pages/api/core/chat/team/init.ts b/projects/app/src/pages/api/core/chat/team/init.ts index 47b5f0e6f..43a49d7ad 100644 --- a/projects/app/src/pages/api/core/chat/team/init.ts +++ b/projects/app/src/pages/api/core/chat/team/init.ts @@ -4,59 +4,57 @@ import { connectToDatabase } from '@/service/mongo'; import { getGuideModule } from '@fastgpt/global/core/module/utils'; import { getChatModelNameListByModules } from '@/service/core/app/module'; import { ModuleOutputKeyEnum } from '@fastgpt/global/core/module/constants'; -import type { InitChatProps, InitChatResponse } from '@/global/core/chat/api.d'; +import type { InitChatResponse, InitTeamChatProps } from '@/global/core/chat/api.d'; import { MongoChat } from '@fastgpt/service/core/chat/chatSchema'; import { MongoApp } from '@fastgpt/service/core/app/schema'; import { getChatItems } from '@fastgpt/service/core/chat/controller'; import { AppErrEnum } from '@fastgpt/global/common/error/code/app'; +import { authTeamSpaceToken } from '@/service/support/permission/auth/team'; +import { MongoTeam } from '@fastgpt/service/support/user/team/teamSchema'; +import { ChatErrEnum } from '@fastgpt/global/common/error/code/chat'; +import { selectSimpleChatResponse } from '@/utils/service/core/chat'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - let { appId, chatId, outLinkUid } = req.query as { - chatId?: string; - appId?: string; - outLinkUid?: string; - }; + let { teamId, appId, chatId, teamToken } = req.query as InitTeamChatProps; - if (!appId) { - return jsonRes(res, { - code: 501, - message: "You don't have an app yet" - }); + if (!teamId || !appId || !teamToken) { + throw new Error('teamId, appId, teamToken are required'); } - // auth app permission - const [chat, app] = await Promise.all([ - // authApp({ - // req, - // authToken: false, - // appId, - // per: 'r' - // }), - chatId ? MongoChat.findOne({ appId, chatId }) : undefined, + const { uid } = await authTeamSpaceToken({ + teamId, + teamToken + }); + + const [team, chat, app] = await Promise.all([ + MongoTeam.findById(teamId, 'name avatar').lean(), + MongoChat.findOne({ teamId, appId, chatId }).lean(), MongoApp.findById(appId).lean() ]); + if (!app) { throw new Error(AppErrEnum.unExist); } // auth chat permission - // if (chat && chat.outLinkUid !== outLinkUid) { - // throw new Error(ChatErrEnum.unAuthChat); - // } - // // auth chat permission - // if (chat && !app.canWrite && String(tmbId) !== String(chat?.tmbId)) { - // throw new Error(ChatErrEnum.unAuthChat); - // } + if (chat && chat.outLinkUid !== uid) { + throw new Error(ChatErrEnum.unAuthChat); + } // get app and history const { history } = await getChatItems({ appId, chatId, limit: 30, - field: `dataId obj value adminFeedback userBadFeedback userGoodFeedback ${ModuleOutputKeyEnum.responseData}` + field: `dataId obj value userGoodFeedback userBadFeedback adminFeedback ${ModuleOutputKeyEnum.responseData}` + }); + + // pick share response field + history.forEach((item) => { + item.responseData = selectSimpleChatResponse({ responseData: item.responseData }); }); jsonRes(res, { @@ -64,7 +62,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) chatId, appId, title: chat?.title || '新对话', - userAvatar: undefined, + userAvatar: team?.avatar, variables: chat?.variables || {}, history, app: { diff --git a/projects/app/src/pages/api/core/dataset/collection/list.ts b/projects/app/src/pages/api/core/dataset/collection/list.ts index af2fbf515..5923871c6 100644 --- a/projects/app/src/pages/api/core/dataset/collection/list.ts +++ b/projects/app/src/pages/api/core/dataset/collection/list.ts @@ -8,9 +8,9 @@ import type { GetDatasetCollectionsProps } from '@/global/core/api/datasetReq'; import { PagingData } from '@/types'; import { MongoDatasetCollection } from '@fastgpt/service/core/dataset/collection/schema'; import { DatasetCollectionTypeEnum } from '@fastgpt/global/core/dataset/constants'; -import { startQueue } from '@/service/utils/tools'; import { authDataset } from '@fastgpt/service/support/permission/auth/dataset'; import { DatasetDataCollectionName } from '@fastgpt/service/core/dataset/data/schema'; +import { startTrainingQueue } from '@/service/core/dataset/training/utils'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { @@ -158,7 +158,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< ); if (data.find((item) => item.trainingAmount > 0)) { - startQueue(); + startTrainingQueue(); } // count collections diff --git a/projects/app/src/pages/api/core/dataset/data/insertData.ts b/projects/app/src/pages/api/core/dataset/data/insertData.ts index 81c0b6e28..fa8e2de1b 100644 --- a/projects/app/src/pages/api/core/dataset/data/insertData.ts +++ b/projects/app/src/pages/api/core/dataset/data/insertData.ts @@ -75,7 +75,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex a: formatA }); - const { insertId, charsLength } = await insertData2Dataset({ + const { insertId, tokens } = await insertData2Dataset({ teamId, tmbId, datasetId, @@ -90,7 +90,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex pushGenerateVectorUsage({ teamId, tmbId, - charsLength, + tokens, model: vectorModelData.model }); diff --git a/projects/app/src/pages/api/core/dataset/data/update.ts b/projects/app/src/pages/api/core/dataset/data/update.ts index eaf3cab3d..a2d7d1d96 100644 --- a/projects/app/src/pages/api/core/dataset/data/update.ts +++ b/projects/app/src/pages/api/core/dataset/data/update.ts @@ -34,7 +34,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex insertLen: 1 }); - const { charsLength } = await updateData2Dataset({ + const { tokens } = await updateData2Dataset({ dataId: id, q, a, @@ -45,7 +45,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex pushGenerateVectorUsage({ teamId, tmbId, - charsLength, + tokens, model: vectorModel }); diff --git a/projects/app/src/pages/api/core/dataset/searchTest.ts b/projects/app/src/pages/api/core/dataset/searchTest.ts index 893f9f48d..9e6efeb71 100644 --- a/projects/app/src/pages/api/core/dataset/searchTest.ts +++ b/projects/app/src/pages/api/core/dataset/searchTest.ts @@ -58,7 +58,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex extensionBg: datasetSearchExtensionBg }); - const { searchRes, charsLength, ...result } = await searchDatasetData({ + const { searchRes, tokens, ...result } = await searchDatasetData({ teamId, reRankQuery: rewriteQuery, queries: concatQueries, @@ -74,14 +74,14 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex const { totalPoints } = pushGenerateVectorUsage({ teamId, tmbId, - charsLength, + tokens, model: dataset.vectorModel, source: apikey ? UsageSourceEnum.api : UsageSourceEnum.fastgpt, ...(aiExtensionResult && extensionModel && { extensionModel: extensionModel.name, - extensionCharsLength: aiExtensionResult.charsLength + extensionTokens: aiExtensionResult.tokens }) }); if (apikey) { diff --git a/projects/app/src/pages/api/timerTask/dataset/checkInValidDatasetFiles.ts b/projects/app/src/pages/api/timerTask/dataset/checkInValidDatasetFiles.ts new file mode 100644 index 000000000..c3521c066 --- /dev/null +++ b/projects/app/src/pages/api/timerTask/dataset/checkInValidDatasetFiles.ts @@ -0,0 +1,91 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@fastgpt/service/common/response'; +import { connectToDatabase } from '@/service/mongo'; +import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { + delFileByFileIdList, + getGFSCollection +} from '@fastgpt/service/common/file/gridfs/controller'; +import { addLog } from '@fastgpt/service/common/system/log'; +import { MongoDatasetCollection } from '@fastgpt/service/core/dataset/collection/schema'; +import { addHours } from 'date-fns'; + +/* + check dataset.files data. If there is no match in dataset.collections, delete it + 可能异常情况 + 1. 上传了文件,未成功创建集合 +*/ +let deleteFileAmount = 0; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { startHour = 24, endHour = 1 } = req.body as { + startHour?: number; + endHour?: number; + limit?: number; + }; + await authCert({ req, authRoot: true }); + await connectToDatabase(); + + // start: now - maxDay, end: now - 3 day + const start = addHours(new Date(), -startHour); + const end = addHours(new Date(), -endHour); + deleteFileAmount = 0; + console.log(start, end); + + await checkFiles(start, end); + + jsonRes(res, { + data: deleteFileAmount, + message: 'success' + }); + } catch (error) { + addLog.error(`check valid dataset files error`, error); + + jsonRes(res, { + code: 500, + error + }); + } +} + +export async function checkFiles(start: Date, end: Date) { + const collection = getGFSCollection('dataset'); + const where = { + uploadDate: { $gte: start, $lte: end } + }; + + // 1. get all file _id + const files = await collection + .find(where, { + projection: { + metadata: 1, + _id: 1 + } + }) + .toArray(); + console.log('total files', files.length); + + let index = 0; + for await (const file of files) { + try { + // 2. find fileId in dataset.collections + const hasCollection = await MongoDatasetCollection.countDocuments({ + teamId: file.metadata.teamId, + fileId: file._id + }); + + // 3. if not found, delete file + if (hasCollection === 0) { + await delFileByFileIdList({ bucketName: 'dataset', fileIdList: [String(file._id)] }); + console.log('delete file', file._id); + deleteFileAmount++; + } + index++; + index % 100 === 0 && console.log(index); + } catch (error) { + console.log(error); + } + } + console.log(`检测完成,共删除 ${deleteFileAmount} 个无效文件`); +} diff --git a/projects/app/src/pages/api/timerTask/dataset/checkInvalidDatasetImage.ts b/projects/app/src/pages/api/timerTask/dataset/checkInvalidDatasetImage.ts new file mode 100644 index 000000000..bec2be633 --- /dev/null +++ b/projects/app/src/pages/api/timerTask/dataset/checkInvalidDatasetImage.ts @@ -0,0 +1,88 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@fastgpt/service/common/response'; +import { connectToDatabase } from '@/service/mongo'; +import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { addLog } from '@fastgpt/service/common/system/log'; +import { addHours } from 'date-fns'; +import { MongoDatasetCollection } from '@fastgpt/service/core/dataset/collection/schema'; +import { MongoImage } from '@fastgpt/service/common/file/image/schema'; + +/* + 检测无效的数据集图片 + + 可能异常情况: + 1. 上传文件过程中,上传了图片,但是最终没有创建数据集。 +*/ + +let deleteImageAmount = 0; + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { + startHour = 72, + endHour = 24, + limit = 10 + } = req.body as { startHour?: number; endHour?: number; limit?: number }; + await authCert({ req, authRoot: true }); + await connectToDatabase(); + + // start: now - maxDay, end: now - 3 day + const start = addHours(new Date(), -startHour); + const end = addHours(new Date(), -endHour); + deleteImageAmount = 0; + + await checkInvalid(start, end, limit); + + jsonRes(res, { + data: deleteImageAmount + }); + } catch (error) { + addLog.error(`check Invalid user error`, error); + + jsonRes(res, { + code: 500, + error + }); + } +} + +export async function checkInvalid(start: Date, end: Date, limit = 50) { + const images = await MongoImage.find( + { + createTime: { + $gte: start, + $lte: end + }, + 'metadata.relatedId': { $exists: true } + }, + '_id teamId metadata' + ); + console.log('total images', images.length); + let index = 0; + + for await (const image of images) { + try { + // 1. 检测是否有对应的集合 + const collection = await MongoDatasetCollection.findOne( + { + teamId: image.teamId, + 'metadata.relatedImgId': image.metadata?.relatedId + }, + '_id' + ); + + if (!collection) { + await image.deleteOne(); + deleteImageAmount++; + } + + index++; + + index % 100 === 0 && console.log(index); + } catch (error) { + console.log(error); + } + } + + console.log(`检测完成,共删除 ${deleteImageAmount} 个无效图片`); +} diff --git a/projects/app/src/pages/api/timerTask/dataset/checkInvalidMongoCollection.ts b/projects/app/src/pages/api/timerTask/dataset/checkInvalidMongoCollection.ts new file mode 100644 index 000000000..2f335289c --- /dev/null +++ b/projects/app/src/pages/api/timerTask/dataset/checkInvalidMongoCollection.ts @@ -0,0 +1,96 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@fastgpt/service/common/response'; +import { connectToDatabase } from '@/service/mongo'; +import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { addLog } from '@fastgpt/service/common/system/log'; +import { deleteDatasetDataVector } from '@fastgpt/service/common/vectorStore/controller'; +import { MongoDatasetData } from '@fastgpt/service/core/dataset/data/schema'; +import { addHours } from 'date-fns'; +import { MongoDatasetCollection } from '@fastgpt/service/core/dataset/collection/schema'; +import { MongoDatasetTraining } from '@fastgpt/service/core/dataset/training/schema'; + +/* + 检测无效的 Mongo 数据 + 异常情况: + 1. 训练过程删除知识库,可能导致还会有新的数据插入,导致无效。 +*/ + +let deleteAmount = 0; +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { startHour = 3, endHour = 1 } = req.body as { startHour?: number; endHour?: number }; + await authCert({ req, authRoot: true }); + await connectToDatabase(); + + // start: now - maxDay, end: now - endHour + const start = addHours(new Date(), -startHour); + const end = addHours(new Date(), -endHour); + deleteAmount = 0; + + await checkInvalidCollection(start, end); + + jsonRes(res, { + data: deleteAmount, + message: 'success' + }); + } catch (error) { + addLog.error(`check Invalid user error`, error); + + jsonRes(res, { + code: 500, + error + }); + } +} + +export async function checkInvalidCollection(start: Date, end: Date) { + // 1. 获取时间范围的所有data + const rows = await MongoDatasetData.find( + { + updateTime: { + $gte: start, + $lte: end + } + }, + '_id teamId collectionId' + ).lean(); + + // 2. 合并所有的collectionId + const map = new Map(); + for (const item of rows) { + const collectionId = String(item.collectionId); + if (!map.has(collectionId)) { + map.set(collectionId, { teamId: item.teamId, collectionId }); + } + } + const list = Array.from(map.values()); + console.log('total collections', list.length); + let index = 0; + + for await (const item of list) { + try { + // 3. 查看该collection是否存在,不存在,则删除对应的数据 + const collection = await MongoDatasetCollection.findOne({ _id: item.collectionId }); + if (!collection) { + const result = await Promise.all([ + MongoDatasetTraining.deleteMany({ + teamId: item.teamId, + collectionId: item.collectionId + }), + MongoDatasetData.deleteMany({ + teamId: item.teamId, + collectionId: item.collectionId + }), + deleteDatasetDataVector({ + teamId: item.teamId, + collectionIds: [String(item.collectionId)] + }) + ]); + console.log(result); + console.log('collection is not found', item); + continue; + } + } catch (error) {} + console.log(++index); + } +} diff --git a/projects/app/src/pages/api/timerTask/dataset/checkInvalidVector.ts b/projects/app/src/pages/api/timerTask/dataset/checkInvalidVector.ts new file mode 100644 index 000000000..25e220b10 --- /dev/null +++ b/projects/app/src/pages/api/timerTask/dataset/checkInvalidVector.ts @@ -0,0 +1,86 @@ +import type { NextApiRequest, NextApiResponse } from 'next'; +import { jsonRes } from '@fastgpt/service/common/response'; +import { connectToDatabase } from '@/service/mongo'; +import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { addLog } from '@fastgpt/service/common/system/log'; +import { + deleteDatasetDataVector, + getVectorDataByTime +} from '@fastgpt/service/common/vectorStore/controller'; +import { MongoDatasetData } from '@fastgpt/service/core/dataset/data/schema'; +import { addHours } from 'date-fns'; + +/* + 检测无效的 Vector 数据. + 异常情况: + 1. 插入数据时,vector成功,mongo失败 + 2. 更新数据,也会有插入 vector +*/ + +let deletedVectorAmount = 0; +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + try { + const { startHour = 5, endHour = 1 } = req.body as { startHour?: number; endHour?: number }; + await authCert({ req, authRoot: true }); + await connectToDatabase(); + + // start: now - maxDay, end: now - endHour + const start = addHours(new Date(), -startHour); + const end = addHours(new Date(), -endHour); + deletedVectorAmount = 0; + + await checkInvalidVector(start, end); + + jsonRes(res, { + data: deletedVectorAmount, + message: 'success' + }); + } catch (error) { + addLog.error(`check Invalid user error`, error); + + jsonRes(res, { + code: 500, + error + }); + } +} + +export async function checkInvalidVector(start: Date, end: Date) { + // 1. get all vector data + const rows = await getVectorDataByTime(start, end); + console.log('total data', rows.length); + + let index = 0; + + for await (const item of rows) { + if (!item.teamId || !item.datasetId || !item.id) { + console.log('error data', item); + continue; + } + try { + // 2. find dataset.data + const hasData = await MongoDatasetData.countDocuments({ + teamId: item.teamId, + datasetId: item.datasetId, + 'indexes.dataId': item.id + }); + + // 3. if not found, delete vector + if (hasData === 0) { + await deleteDatasetDataVector({ + teamId: item.teamId, + id: item.id + }); + console.log('delete vector data', item.id); + deletedVectorAmount++; + } + + index++; + index % 100 === 0 && console.log(index); + } catch (error) { + console.log(error); + } + } + + console.log(`检测完成,共删除 ${deletedVectorAmount} 个无效 向量 数据`); +} diff --git a/projects/app/src/pages/api/v1/audio/transcriptions.ts b/projects/app/src/pages/api/v1/audio/transcriptions.ts index 1c6997d51..fd3cb7861 100644 --- a/projects/app/src/pages/api/v1/audio/transcriptions.ts +++ b/projects/app/src/pages/api/v1/audio/transcriptions.ts @@ -1,12 +1,12 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@fastgpt/service/common/response'; -import { authCert } from '@fastgpt/service/support/permission/auth/common'; import { withNextCors } from '@fastgpt/service/common/middle/cors'; import { getUploadModel } from '@fastgpt/service/common/file/multer'; import { removeFilesByPaths } from '@fastgpt/service/common/file/utils'; import fs from 'fs'; import { getAIApi } from '@fastgpt/service/core/ai/config'; import { pushWhisperUsage } from '@/service/support/wallet/usage/push'; +import { authChatCert } from '@/service/support/permission/auth/chat'; const upload = getUploadModel({ maxSize: 2 @@ -18,12 +18,20 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex try { const { file, - data: { duration } - } = await upload.doUpload<{ duration: number; shareId?: string }>(req, res); + data: { duration, teamId: spaceTeamId, teamToken } + } = await upload.doUpload<{ + duration: number; + shareId?: string; + teamId?: string; + teamToken?: string; + }>(req, res); + + req.body.teamId = spaceTeamId; + req.body.teamToken = teamToken; filePaths = [file.path]; - const { teamId, tmbId } = await authCert({ req, authToken: true }); + const { teamId, tmbId } = await authChatCert({ req, authToken: true }); if (!global.whisperModel) { throw new Error('whisper model not found'); diff --git a/projects/app/src/pages/api/v1/chat/completions.ts b/projects/app/src/pages/api/v1/chat/completions.ts index 5f9640fd5..332a50ace 100644 --- a/projects/app/src/pages/api/v1/chat/completions.ts +++ b/projects/app/src/pages/api/v1/chat/completions.ts @@ -18,31 +18,28 @@ import { authOutLinkChatStart } from '@/service/support/permission/auth/outLink' import { pushResult2Remote, addOutLinkUsage } from '@fastgpt/service/support/outLink/tools'; import requestIp from 'request-ip'; import { getUsageSourceByAuthType } from '@fastgpt/global/support/wallet/usage/tools'; -import { authTeamShareChatStart } from '@/service/support/permission/auth/teamChat'; -import { selectShareResponse } from '@/utils/service/core/chat'; +import { authTeamSpaceToken } from '@/service/support/permission/auth/team'; +import { selectSimpleChatResponse } from '@/utils/service/core/chat'; import { updateApiKeyUsage } from '@fastgpt/service/support/openapi/tools'; import { connectToDatabase } from '@/service/mongo'; import { getUserChatInfoAndAuthTeamPoints } from '@/service/support/permission/auth/team'; import { AuthUserTypeEnum } from '@fastgpt/global/support/permission/constant'; import { MongoApp } from '@fastgpt/service/core/app/schema'; -import { autChatCrud } from '@/service/support/permission/auth/chat'; +import { UserModelSchema } from '@fastgpt/global/support/user/type'; +import { AppSchema } from '@fastgpt/global/core/app/type'; +import { AuthOutLinkChatProps } from '@fastgpt/global/support/outLink/api'; +import { MongoChat } from '@fastgpt/service/core/chat/chatSchema'; +import { ChatErrEnum } from '@fastgpt/global/common/error/code/chat'; +import { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat'; type FastGptWebChatProps = { chatId?: string; // undefined: nonuse history, '': new chat, 'xxxxx': use history appId?: string; }; -type FastGptShareChatProps = { - shareId?: string; - outLinkUid?: string; -}; -type FastGptTeamShareChatProps = { - shareTeamId?: string; - outLinkUid?: string; -}; + export type Props = ChatCompletionCreateParams & FastGptWebChatProps & - FastGptShareChatProps & - FastGptTeamShareChatProps & { + OutLinkChatAuthProps & { messages: ChatMessageItemType[]; stream?: boolean; detail?: boolean; @@ -53,6 +50,18 @@ export type ChatResponseType = { quoteLen?: number; }; +type AuthResponseType = { + teamId: string; + tmbId: string; + user: UserModelSchema; + app: AppSchema; + responseDetail?: boolean; + authType: `${AuthUserTypeEnum}`; + apikey?: string; + canWrite: boolean; + outLinkUserId?: string; +}; + export default withNextCors(async function handler(req: NextApiRequest, res: NextApiResponse) { res.on('close', () => { res.end(); @@ -65,9 +74,12 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex const { chatId, appId, - shareTeamId, + // share chat shareId, outLinkUid, + // team chat + teamId: spaceTeamId, + teamToken, stream = false, detail = false, messages = [], @@ -100,136 +112,44 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex if (!question) { throw new Error('Question is empty'); } - /* auth app permission */ + + /* + 1. auth app permission + 2. auth balance + 3. get app + 4. parse outLink token + */ const { teamId, tmbId, user, app, responseDetail, authType, apikey, canWrite, outLinkUserId } = await (async () => { + // share chat if (shareId && outLinkUid) { - const { teamId, tmbId, user, appId, authType, responseDetail, uid } = - await authOutLinkChatStart({ - shareId, - ip: originIp, - outLinkUid, - question: question.value - }); - const app = await MongoApp.findById(appId); - - if (!app) { - return Promise.reject('app is empty'); - } - - return { - teamId, - tmbId, - user, - app, - responseDetail, - apikey: '', - authType, - canWrite: false, - outLinkUserId: uid - }; - } - // team Apps share - if (shareTeamId && appId && outLinkUid) { - const { user, uid, tmbId } = await authTeamShareChatStart({ - teamId: shareTeamId, - ip: originIp, + return authShareChat({ + shareId, outLinkUid, + chatId, + ip: originIp, question: question.value }); - const app = await MongoApp.findById(appId); - if (!app) { - return Promise.reject('app is empty'); - } - - return { - teamId: shareTeamId, - tmbId, - user, - app, - responseDetail: detail, - authType: AuthUserTypeEnum.token, - apikey: '', - canWrite: false, - outLinkUserId: uid - }; + } + // team space chat + if (spaceTeamId && appId && teamToken) { + return authTeamSpaceChat({ + teamId: spaceTeamId, + teamToken, + appId, + chatId + }); } - const { - appId: apiKeyAppId, - teamId, - tmbId, - authType, - apikey - } = await authCert({ + /* parse req: api or token */ + return authHeaderRequest({ req, - authToken: true, - authApiKey: true - }); - - const { user } = await getUserChatInfoAndAuthTeamPoints(tmbId); - - // openapi key - if (authType === AuthUserTypeEnum.apikey) { - if (!apiKeyAppId) { - return Promise.reject( - 'Key is error. You need to use the app key rather than the account key.' - ); - } - const app = await MongoApp.findById(apiKeyAppId); - - if (!app) { - return Promise.reject('app is empty'); - } - - return { - teamId, - tmbId, - user, - app, - responseDetail: detail, - apikey, - authType, - canWrite: true - }; - } - - // token auth - if (!appId) { - return Promise.reject('appId is empty'); - } - const { app, canWrite } = await authApp({ - req, - authToken: true, appId, - per: 'r' + chatId, + detail }); - - return { - teamId, - tmbId, - user, - app, - responseDetail: detail, - apikey, - authType, - canWrite: canWrite || false - }; })(); - // auth chat permission - await autChatCrud({ - req, - authToken: true, - authApiKey: true, - appId: app._id, - chatId, - shareId, - shareTeamId, - outLinkUid, - per: 'w' - }); - // get and concat history const { history } = await getChatItems({ appId: app._id, @@ -237,7 +157,6 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex limit: 30, field: `dataId obj value` }); - const concatHistories = history.concat(chatMessages); const responseChatItemId: string | undefined = messages[messages.length - 1].dataId; @@ -263,13 +182,14 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex // save chat if (chatId) { + const isOwnerUse = !shareId && !spaceTeamId && String(tmbId) === String(app.tmbId); await saveChat({ chatId, appId: app._id, teamId, tmbId: tmbId, variables, - updateUseTime: !shareId && String(tmbId) === String(app.tmbId), // owner update use time + updateUseTime: isOwnerUse, // owner update use time shareId, outLinkUid: outLinkUserId, source: (() => { @@ -279,6 +199,9 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex if (authType === 'apikey') { return ChatSourceEnum.api; } + if (spaceTeamId) { + return ChatSourceEnum.team; + } return ChatSourceEnum.online; })(), content: [ @@ -299,7 +222,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex addLog.info(`completions running time: ${(Date.now() - startTime) / 1000}s`); /* select fe response field */ - const feResponseData = canWrite ? responseData : selectShareResponse({ responseData }); + const feResponseData = canWrite ? responseData : selectSimpleChatResponse({ responseData }); if (stream) { responseWrite({ @@ -382,3 +305,162 @@ export const config = { responseLimit: '20mb' } }; + +const authShareChat = async ({ + chatId, + ...data +}: AuthOutLinkChatProps & { + shareId: string; + chatId?: string; +}): Promise => { + const { teamId, tmbId, user, appId, authType, responseDetail, uid } = + await authOutLinkChatStart(data); + const app = await MongoApp.findById(appId).lean(); + + if (!app) { + return Promise.reject('app is empty'); + } + + // get chat + const chat = await MongoChat.findOne({ appId, chatId }).lean(); + if (chat && (chat.shareId !== data.shareId || chat.outLinkUid !== uid)) { + return Promise.reject(ChatErrEnum.unAuthChat); + } + + return { + teamId, + tmbId, + user, + app, + responseDetail, + apikey: '', + authType, + canWrite: false, + outLinkUserId: uid + }; +}; +const authTeamSpaceChat = async ({ + appId, + teamId, + teamToken, + chatId +}: { + appId: string; + teamId: string; + teamToken: string; + chatId?: string; +}): Promise => { + const { uid } = await authTeamSpaceToken({ + teamId, + teamToken + }); + + const app = await MongoApp.findById(appId).lean(); + if (!app) { + return Promise.reject('app is empty'); + } + + const [chat, { user }] = await Promise.all([ + MongoChat.findOne({ appId, chatId }).lean(), + getUserChatInfoAndAuthTeamPoints(app.tmbId) + ]); + + if (chat && (String(chat.teamId) !== teamId || chat.outLinkUid !== uid)) { + return Promise.reject(ChatErrEnum.unAuthChat); + } + + return { + teamId, + tmbId: app.tmbId, + user, + app, + responseDetail: true, + authType: AuthUserTypeEnum.outLink, + apikey: '', + canWrite: false, + outLinkUserId: uid + }; +}; +const authHeaderRequest = async ({ + req, + appId, + chatId, + detail +}: { + req: NextApiRequest; + appId?: string; + chatId?: string; + detail?: boolean; +}): Promise => { + const { + appId: apiKeyAppId, + teamId, + tmbId, + authType, + apikey, + canWrite: apiKeyCanWrite + } = await authCert({ + req, + authToken: true, + authApiKey: true + }); + + const { app, canWrite } = await (async () => { + if (authType === AuthUserTypeEnum.apikey) { + if (!apiKeyAppId) { + return Promise.reject( + 'Key is error. You need to use the app key rather than the account key.' + ); + } + const app = await MongoApp.findById(apiKeyAppId); + + if (!app) { + return Promise.reject('app is empty'); + } + + appId = String(app._id); + + return { + app, + canWrite: apiKeyCanWrite + }; + } else { + // token auth + if (!appId) { + return Promise.reject('appId is empty'); + } + const { app, canWrite } = await authApp({ + req, + authToken: true, + appId, + per: 'r' + }); + + return { + app, + + canWrite: canWrite + }; + } + })(); + + const [{ user }, chat] = await Promise.all([ + getUserChatInfoAndAuthTeamPoints(tmbId), + MongoChat.findOne({ appId, chatId }).lean() + ]); + + if (chat && (String(chat.teamId) !== teamId || String(chat.tmbId) !== tmbId)) { + return Promise.reject(ChatErrEnum.unAuthChat); + } + + return { + teamId, + tmbId, + user, + app, + responseDetail: detail, + apikey, + authType, + canWrite + }; +}; diff --git a/projects/app/src/pages/api/v1/embeddings.ts b/projects/app/src/pages/api/v1/embeddings.ts index 2c251a80a..adf0daeb7 100644 --- a/projects/app/src/pages/api/v1/embeddings.ts +++ b/projects/app/src/pages/api/v1/embeddings.ts @@ -36,7 +36,7 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex await checkTeamAIPoints(teamId); - const { charsLength, vectors } = await getVectorsByText({ + const { tokens, vectors } = await getVectorsByText({ input: query, model: getVectorModel(model) }); @@ -50,15 +50,15 @@ export default withNextCors(async function handler(req: NextApiRequest, res: Nex })), model, usage: { - prompt_tokens: charsLength, - total_tokens: charsLength + prompt_tokens: tokens, + total_tokens: tokens } }); const { totalPoints } = pushGenerateVectorUsage({ teamId, tmbId, - charsLength, + tokens, model, billId, source: getUsageSourceByAuthType({ authType }) diff --git a/projects/app/src/pages/app/detail/components/OutLink/SelectUsingWayModal.tsx b/projects/app/src/pages/app/detail/components/OutLink/SelectUsingWayModal.tsx index 9a4a54e44..fb0b34523 100644 --- a/projects/app/src/pages/app/detail/components/OutLink/SelectUsingWayModal.tsx +++ b/projects/app/src/pages/app/detail/components/OutLink/SelectUsingWayModal.tsx @@ -136,7 +136,7 @@ const SelectUsingWayModal = ({ share, onClose }: { share: OutLinkSchema; onClose /> {/* config */} - + {t('core.app.outLink.Show History')} diff --git a/projects/app/src/pages/app/detail/components/OutLink/Share.tsx b/projects/app/src/pages/app/detail/components/OutLink/Share.tsx index 048028f33..eb4631d65 100644 --- a/projects/app/src/pages/app/detail/components/OutLink/Share.tsx +++ b/projects/app/src/pages/app/detail/components/OutLink/Share.tsx @@ -14,10 +14,6 @@ import { ModalBody, Input, Switch, - Menu, - MenuButton, - MenuList, - MenuItem, Link } from '@chakra-ui/react'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; diff --git a/projects/app/src/pages/app/detail/components/SimpleEdit/AppCard.tsx b/projects/app/src/pages/app/detail/components/SimpleEdit/AppCard.tsx index 9f230ef31..fa5e43740 100644 --- a/projects/app/src/pages/app/detail/components/SimpleEdit/AppCard.tsx +++ b/projects/app/src/pages/app/detail/components/SimpleEdit/AppCard.tsx @@ -13,7 +13,7 @@ import PermissionIconText from '@/components/support/permission/IconText'; import dynamic from 'next/dynamic'; import Avatar from '@/components/Avatar'; import MyIcon from '@fastgpt/web/components/common/Icon'; -import TagsEditModal from './tagsEditModal'; +import TagsEditModal from './TagsEditModal'; import { useSystemStore } from '@/web/common/system/useSystemStore'; const InfoModal = dynamic(() => import('../InfoModal')); @@ -156,9 +156,7 @@ const AppCard = ({ appId }: { appId: string }) => { {settingAppInfo && ( setSettingAppInfo(undefined)} /> )} - {TeamTagsSet && ( - setTeamTagsSet(undefined)} /> - )} + {TeamTagsSet && setTeamTagsSet(undefined)} />} ); }; diff --git a/projects/app/src/pages/app/detail/components/SimpleEdit/TagsEditModal.tsx b/projects/app/src/pages/app/detail/components/SimpleEdit/TagsEditModal.tsx new file mode 100644 index 000000000..445551eed --- /dev/null +++ b/projects/app/src/pages/app/detail/components/SimpleEdit/TagsEditModal.tsx @@ -0,0 +1,143 @@ +import React, { useState } from 'react'; +import MyModal from '@/components/MyModal'; +import { useTranslation } from 'next-i18next'; +import { + Button, + Flex, + Box, + ModalFooter, + ModalBody, + Menu, + MenuButton, + HStack, + Tag, + TagCloseButton, + MenuList, + Input, + MenuOptionGroup, + MenuItemOption, + TagLabel +} from '@chakra-ui/react'; +import { useToast } from '@fastgpt/web/hooks/useToast'; +import { useAppStore } from '@/web/core/app/store/useAppStore'; +import { useRequest } from '@/web/common/hooks/useRequest'; +import { getTeamsTags } from '@/web/support/user/team/api'; +import { useQuery } from '@tanstack/react-query'; + +const TagsEditModal = ({ onClose }: { onClose: () => void }) => { + const { t } = useTranslation(); + const { appDetail } = useAppStore(); + const { toast } = useToast(); + const { replaceAppDetail } = useAppStore(); + const [selectedTags, setSelectedTags] = useState(appDetail?.teamTags || []); + + // submit config + const { mutate: saveSubmitSuccess, isLoading: btnLoading } = useRequest({ + mutationFn: async () => { + await replaceAppDetail(appDetail._id, { + teamTags: selectedTags + }); + }, + onSuccess() { + onClose(); + toast({ + title: t('common.Update Success'), + status: 'success' + }); + }, + errorToast: t('common.Update Failed') + }); + + const { data: teamTags = [] } = useQuery(['getTeamsTags'], getTeamsTags); + const [searchKey, setSearchKey] = useState(''); + const filterTeamTags = teamTags.filter((item) => { + return item.label.includes(searchKey); + }, []); + + return ( + + + + {t('团队标签')} + + + + + {teamTags.map((item, index) => { + const key: string = item?.key; + if (selectedTags.indexOf(key as never) > -1) { + return ( + + {item.label} + + + ); + } + })} + + + + + { + setSearchKey(e.target.value); + }} + /> + + + { + //@ts-ignore + setSelectedTags(e); + }} + > + {filterTeamTags.map((item) => { + return ( + + {item?.label} + + ); + })} + + + + + + + + + + + ); +}; +export default TagsEditModal; diff --git a/projects/app/src/pages/app/detail/components/SimpleEdit/tagsEditModal.tsx b/projects/app/src/pages/app/detail/components/SimpleEdit/tagsEditModal.tsx deleted file mode 100644 index 37e0737d7..000000000 --- a/projects/app/src/pages/app/detail/components/SimpleEdit/tagsEditModal.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React, { useCallback, useState, useEffect } from 'react'; -import MyModal from '@/components/MyModal'; -import { useTranslation } from 'next-i18next'; -import { Button, Flex, Box, ModalFooter, ModalBody } from '@chakra-ui/react'; -import TagsEdit from '@/components/TagEdit'; -import { useToast } from '@fastgpt/web/hooks/useToast'; -import { AppSchema } from '@fastgpt/global/core/app/type.d'; -import { TeamTagsSchema } from '@fastgpt/global/support/user/team/type'; -import { useAppStore } from '@/web/core/app/store/useAppStore'; -import { useRequest } from '@/web/common/hooks/useRequest'; -import { getTeamsTags } from '@/web/support/user/team/api'; -const TagsEditModal = ({ appDetail, onClose }: { appDetail?: any; onClose: () => void }) => { - const { t } = useTranslation(); - const [teamsTags, setTeamTags] = useState>([]); - const [selectedTags, setSelectedTags] = useState(appDetail?.teamTags); - const { toast } = useToast(); - const { replaceAppDetail } = useAppStore(); - - // submit config - const { mutate: saveSubmitSuccess, isLoading: btnLoading } = useRequest({ - mutationFn: async () => { - await replaceAppDetail(appDetail._id, { - teamTags: selectedTags - }); - }, - onSuccess() { - onClose(); - toast({ - title: t('common.Update Success'), - status: 'success' - }); - }, - errorToast: t('common.Update Failed') - }); - // - - // // 点击选择标签 - // const clickTag = (tagId :Number) => { - // const index = selectedTags.indexOf(tagId); - // if (index === -1) { - // // 如果 num 不在数组 arr 中,添加它 - // setSelectedTags([tagId,...selectedTags]) - // } else { - // const _selectedTags = [...selectedTags]; - // _selectedTags.splice(index, 1); - // console.log('_selectedTags',_selectedTags); - // // 如果 num 已经在数组 arr 中,移除它 - // setSelectedTags(_selectedTags); - // } - // } - - useEffect(() => { - // get team tags - getTeamsTags(appDetail?.teamId).then((res: any) => { - setTeamTags(res?.list); - }); - }, []); - - return ( - - - {/* - {teamsTags.map((item,index) => { - return -1 ? 'green':'blue' } - onClick={() => clickTag(item._id)} - > - {item.label} - - })} - */} - - - {t('团队标签')} - - ) => setSelectedTags(item)} - /> - - - - - - - - ); -}; -export default TagsEditModal; diff --git a/projects/app/src/pages/chat/components/SliderApps.tsx b/projects/app/src/pages/chat/components/SliderApps.tsx index 596be623f..91108eb4c 100644 --- a/projects/app/src/pages/chat/components/SliderApps.tsx +++ b/projects/app/src/pages/chat/components/SliderApps.tsx @@ -1,45 +1,52 @@ import React from 'react'; import { Flex, Box, IconButton } from '@chakra-ui/react'; import { useRouter } from 'next/router'; -import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'next-i18next'; import MyIcon from '@fastgpt/web/components/common/Icon'; import Avatar from '@/components/Avatar'; -import { useAppStore } from '@/web/core/app/store/useAppStore'; +import { AppListItemType } from '@fastgpt/global/core/app/type'; -const SliderApps = ({ appId }: { appId: string }) => { +const SliderApps = ({ + showExist = true, + apps, + activeAppId +}: { + showExist?: boolean; + apps: AppListItemType[]; + activeAppId: string; +}) => { const { t } = useTranslation(); const router = useRouter(); - const { myApps, loadMyApps } = useAppStore(); - - useQuery(['loadModels'], () => loadMyApps(false)); return ( - router.push('/app/list')} - > - } - bg={'white'} - boxShadow={'1px 1px 9px rgba(0,0,0,0.15)'} - size={'smSquare'} - borderRadius={'50%'} - aria-label={''} - /> - {t('core.chat.Exit Chat')} - + {showExist && ( + router.push('/app/list')} + > + } + bg={'white'} + boxShadow={'1px 1px 9px rgba(0,0,0,0.15)'} + size={'smSquare'} + borderRadius={'50%'} + aria-label={''} + /> + {t('core.chat.Exit Chat')} + + )} + - {myApps.map((item) => ( + {apps.map((item) => ( { cursor={'pointer'} borderRadius={'md'} alignItems={'center'} - {...(item._id === appId + {...(item._id === activeAppId ? { bg: 'white', boxShadow: 'md' @@ -60,6 +67,8 @@ const SliderApps = ({ appId }: { appId: string }) => { onClick: () => { router.replace({ query: { + ...router.query, + chatId: '', appId: item._id } }); diff --git a/projects/app/src/pages/chat/index.tsx b/projects/app/src/pages/chat/index.tsx index 6d145dd06..dba934e74 100644 --- a/projects/app/src/pages/chat/index.tsx +++ b/projects/app/src/pages/chat/index.tsx @@ -129,6 +129,8 @@ const Chat = ({ appId, chatId }: { appId: string; chatId: string }) => { [appId, chatId, histories, pushHistory, router, setChatData, t, updateHistory] ); + useQuery(['loadModels'], () => loadMyApps(false)); + // get chat app info const loadChatInfo = useCallback( async ({ @@ -251,7 +253,7 @@ const Chat = ({ appId, chatId }: { appId: string; chatId: string }) => { {/* pc show myself apps */} {isPc && ( - + )} diff --git a/projects/app/src/pages/chat/share.tsx b/projects/app/src/pages/chat/share.tsx index 1aa4b2acc..5d261a992 100644 --- a/projects/app/src/pages/chat/share.tsx +++ b/projects/app/src/pages/chat/share.tsx @@ -22,22 +22,29 @@ import { serviceSideProps } from '@/web/common/utils/i18n'; import { checkChatSupportSelectFileByChatModels } from '@/web/core/chat/utils'; import { useTranslation } from 'next-i18next'; import { getInitOutLinkChatInfo } from '@/web/core/chat/api'; -import { POST } from '@/web/common/api/request'; import { chatContentReplaceBlock } from '@fastgpt/global/core/chat/utils'; import { useChatStore } from '@/web/core/chat/storeChat'; import { ChatStatusEnum } from '@fastgpt/global/core/chat/constants'; import MyBox from '@/components/common/MyBox'; +import { MongoOutLink } from '@fastgpt/service/support/outLink/schema'; +import { OutLinkWithAppType } from '@fastgpt/global/support/outLink/type'; const OutLink = ({ shareId, chatId, showHistory, - authToken + authToken, + appName, + appIntro, + appAvatar }: { shareId: string; chatId: string; showHistory: '0' | '1'; authToken?: string; + appName?: string; + appIntro?: string; + appAvatar?: string; }) => { const { t } = useTranslation(); const router = useRouter(); @@ -150,7 +157,18 @@ const OutLink = ({ return { responseText, responseData, isNewChat: forbidRefresh.current }; }, - [chatId, shareId, outLinkUid, setChatData, appId, pushHistory, router, histories, updateHistory] + [ + chatId, + shareId, + outLinkUid, + t, + setChatData, + appId, + pushHistory, + router, + histories, + updateHistory + ] ); const loadChatInfo = useCallback( @@ -235,28 +253,6 @@ const OutLink = ({ setIdEmbed(window !== top); }, []); - // todo:4.6.4 init: update local chat history, add outLinkUid - useEffect(() => { - const activeHistory = shareChatHistory.filter((item) => !item.delete); - if (!localUId || !shareId || activeHistory.length === 0) return; - (async () => { - try { - await POST('/core/chat/initLocalShareHistoryV464', { - shareId, - outLinkUid: localUId, - chatIds: shareChatHistory.map((item) => item.chatId) - }); - clearLocalHistory(); - // router.reload(); - } catch (error) { - toast({ - status: 'warning', - title: getErrText(error, t('core.shareChat.Init Error')) - }); - } - })(); - }, [clearLocalHistory, localUId, router, shareChatHistory, shareId, t, toast]); - return ( - {chatData.app.name} + {appName || chatData.app?.name} + + { + try { + const app = (await MongoOutLink.findOne( + { + shareId + }, + 'appId' + ) + .populate('appId', 'name avatar intro') + .lean()) as OutLinkWithAppType; + return app; + } catch (error) { + return undefined; + } + })(); + return { props: { shareId, chatId, showHistory, authToken, + appName: app?.appId?.name, + appAvatar: app?.appId?.avatar, + appIntro: app?.appId?.intro, ...(await serviceSideProps(context)) } }; diff --git a/projects/app/src/pages/chat/team.tsx b/projects/app/src/pages/chat/team.tsx index e153f7414..138a8a617 100644 --- a/projects/app/src/pages/chat/team.tsx +++ b/projects/app/src/pages/chat/team.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import React, { useCallback, useEffect, useRef } from 'react'; import Head from 'next/head'; import { getTeamChatInfo } from '@/web/core/chat/api'; import { useRouter } from 'next/router'; @@ -11,13 +11,12 @@ import { DrawerContent, useTheme } from '@chakra-ui/react'; -import Avatar from '@/components/Avatar'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useQuery } from '@tanstack/react-query'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import SideBar from '@/components/SideBar'; import PageContainer from '@/components/PageContainer'; -import { getChatListById } from '@/web/core/chat/api'; +import { getMyTokensApps } from '@/web/core/chat/api'; import ChatHistorySlider from './components/ChatHistorySlider'; import ChatHeader from './components/ChatHeader'; import { serviceSideProps } from '@/web/common/utils/i18n'; @@ -25,112 +24,49 @@ import { useTranslation } from 'next-i18next'; import { checkChatSupportSelectFileByChatModels } from '@/web/core/chat/utils'; import { useChatStore } from '@/web/core/chat/storeChat'; import { customAlphabet } from 'nanoid'; -import { useLoading } from '@/web/common/hooks/useLoading'; const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 12); import ChatBox, { type ComponentRef, type StartChatFnProps } from '@/components/ChatBox'; import { streamFetch } from '@/web/common/api/fetch'; -import { useTeamShareChatStore } from '@/web/core/chat/storeTeamChat'; -import type { - ChatHistoryItemType, - chatAppListSchema, - teamInfoType -} from '@fastgpt/global/core/chat/type.d'; +import type { ChatHistoryItemType } from '@fastgpt/global/core/chat/type.d'; import { chatContentReplaceBlock } from '@fastgpt/global/core/chat/utils'; import { ChatStatusEnum } from '@fastgpt/global/core/chat/constants'; -import { POST } from '@/web/common/api/request'; +import { getErrText } from '@fastgpt/global/common/error/utils'; +import MyBox from '@/components/common/MyBox'; +import SliderApps from './components/SliderApps'; + const OutLink = ({ - shareTeamId, + teamId, appId, chatId, - authToken + teamToken }: { - shareTeamId: string; + teamId: string; appId: string; chatId: string; - authToken: string; + teamToken: string; }) => { - type routerQueryType = { - chatId?: string; - appId?: string; - shareTeamId: string; - authToken?: string; - }; const { t } = useTranslation(); const router = useRouter(); const { toast } = useToast(); const theme = useTheme(); - const [myApps, setMyApps] = useState>([]); const { isPc } = useSystemStore(); const ChatBoxRef = useRef(null); - const [teamInfo, setTeamInfo] = useState(); - const { Loading, setIsLoading } = useLoading(); const forbidRefresh = useRef(false); const { isOpen: isOpenSlider, onClose: onCloseSlider, onOpen: onOpenSlider } = useDisclosure(); const { + chatData, + setChatData, histories, loadHistories, lastChatAppId, - setLastChatAppId, lastChatId, - setLastChatId, pushHistory, updateHistory, delOneHistory, - chatData, - setChatData, delOneHistoryItem, clearHistories } = useChatStore(); - const { - localUId, - teamShareChatHistory, // abandon - clearLocalHistory // abandon - } = useTeamShareChatStore(); - - const outLinkUid: string = authToken || localUId; - - // 纯网络获取流程 - const loadApps = useCallback(async () => { - try { - if (!shareTeamId) { - toast({ - status: 'error', - title: t('core.chat.You need to a chat app') - }); - return; - } - // 根据获取历史记录列表 - const res = await getChatListById({ shareTeamId, authToken }); - const { apps, teamInfo } = res; - setMyApps(apps); - setTeamInfo(teamInfo); - if (apps.length <= 0) { - return toast({ - status: 'error', - title: t('core.chat.You need to a chat app') - }); - } - if (!apps.find((obj) => obj._id === appId)) { - toast({ - status: 'warning', - title: 'you do not have this App' - }); - router.replace({ - query: { - appId: apps[0]?._id, - shareTeamId, - authToken: authToken - } as routerQueryType - }); - } - } catch (error: any) { - toast({ - status: 'warning', - title: error?.message - }); - } - }, [appId, authToken, router, shareTeamId, t, toast]); const startChat = useCallback( async ({ messages, controller, generatingMessage, variables }: StartChatFnProps) => { @@ -142,14 +78,14 @@ const OutLink = ({ messages: prompts, variables, appId, - shareTeamId, - outLinkUid: outLinkUid, + teamId, + teamToken, chatId: completionChatId }, onMessage: generatingMessage, abortCtrl: controller }); - + console.log(responseData); const newTitle = chatContentReplaceBlock(prompts[0].content).slice(0, 20) || prompts[1]?.value?.slice(0, 20) || @@ -169,11 +105,9 @@ const OutLink = ({ forbidRefresh.current = true; router.replace({ query: { - chatId: completionChatId, - appId, - shareTeamId, - authToken: authToken - } as routerQueryType + ...router.query, + chatId: completionChatId + } }); } } else { @@ -183,7 +117,9 @@ const OutLink = ({ updateHistory({ ...currentChat, updateTime: new Date(), - title: newTitle + title: newTitle, + teamId, + teamToken }); } // update chat window @@ -195,227 +131,146 @@ const OutLink = ({ return { responseText, responseData, isNewChat: forbidRefresh.current }; }, - [appId, chatId, histories, pushHistory, router, setChatData, updateHistory] + [ + appId, + teamToken, + chatId, + histories, + pushHistory, + router, + setChatData, + teamId, + t, + updateHistory + ] ); - const { isFetching } = useQuery(['init', appId, shareTeamId], async () => { - console.log('res', 3); - if (!shareTeamId) { + /* replace router query to last chat */ + useEffect(() => { + if ((!chatId || !appId) && (lastChatId || lastChatAppId)) { + router.replace({ + query: { + ...router.query, + chatId: chatId || lastChatId, + appId: appId || lastChatAppId + } + }); + } + }, []); + + // get chat app list + const loadApps = useCallback(async () => { + try { + const apps = await getMyTokensApps({ teamId, teamToken }); + + if (apps.length <= 0) { + toast({ + status: 'error', + title: t('core.chat.You need to a chat app') + }); + return []; + } + + // if app id not exist, redirect to first app + if (!appId || !apps.find((item) => item._id === appId)) { + router.replace({ + query: { + ...router.query, + appId: apps[0]?._id + } + }); + } + return apps; + } catch (error: any) { + toast({ + status: 'warning', + title: getErrText(error) + }); + } + return []; + }, [appId, teamToken, router, teamId, t, toast]); + const { data: myApps = [], isLoading: isLoadingApps } = useQuery(['initApps', teamId], () => { + if (!teamId) { toast({ status: 'error', - title: t('core.chat.You need to a chat app') + title: t('support.user.team.tag.Have not opened') }); return; } - return shareTeamId && loadApps(); + return loadApps(); }); + // load histories useQuery(['loadHistories', appId], () => { - if (shareTeamId && appId) { - return loadHistories({ appId, outLinkUid }); + if (teamId && appId) { + return loadHistories({ teamId, appId, teamToken: teamToken }); } return; }); - // 初始化聊天框 - useQuery(['init', { appId, chatId }], () => { - if (!shareTeamId) { - toast({ - status: 'error', - title: t('core.chat.You need to a chat app') - }); - return; - } - if (myApps.length > 0 && myApps.findIndex((obj) => obj._id === appId) === -1) { - toast({ - status: 'warning', - title: 'you do not have this App' - }); - return; - } - // pc: redirect to latest model chat - if (!appId && lastChatAppId) { - return router.replace({ - query: { - appId: lastChatAppId, - chatId: lastChatId, - shareTeamId, - authToken: authToken - } as routerQueryType - }); - } - if (!appId && myApps[0]) { - return router.replace({ - query: { - appId: myApps[0]._id, - chatId: lastChatId, - shareTeamId, - authToken: authToken - } as routerQueryType - }); - } - if (!appId) { - (async () => { - const { apps = [] } = await getChatListById({ shareTeamId, authToken }); - setMyApps(apps); - if (apps.length === 0) { - toast({ - status: 'error', - title: t('core.chat.You need to a chat app') - }); - } else { - router.replace({ - query: { - appId: apps[0]._id, - chatId: lastChatId, - shareTeamId, - authToken: authToken - } as routerQueryType - }); - } - })(); - return; - } - - // store id - appId && setLastChatAppId(appId); - setLastChatId(chatId); - return loadChatInfo({ - appId, - chatId, - loading: appId !== chatData.appId - }); - }); // get chat app info - const loadChatInfo = useCallback( - async ({ - appId, - chatId, - loading = false - }: { - appId: string; - chatId: string; - loading?: boolean; - }) => { - try { - if (!shareTeamId) { - toast({ - status: 'error', - title: t('core.chat.You need to a chat app') - }); - return; - } - loading && setIsLoading(true); - const res = await getTeamChatInfo({ appId, chatId, outLinkUid }); - console.log('res', res); - const history = res.history.map((item) => ({ - ...item, - status: ChatStatusEnum.finish - })); + const loadChatInfo = useCallback(async () => { + try { + const res = await getTeamChatInfo({ teamId, appId, chatId, teamToken: teamToken }); - setChatData({ - ...res, - history - }); + const history = res.history.map((item) => ({ + ...item, + status: ChatStatusEnum.finish + })); - // have records. - ChatBoxRef.current?.resetHistory(history); - ChatBoxRef.current?.resetVariables(res.variables); - if (res.history.length > 0) { - setTimeout(() => { - ChatBoxRef.current?.scrollToBottom('auto'); - }, 500); - } - } catch (e: any) { - // reset all chat tore - setLastChatAppId(''); - setLastChatId(''); - toast({ - title: t('core.chat.Failed to initialize chat'), - status: 'error' - }); - if (e?.code === 501) { - //router.replace('/app/list'); - } else if (chatId) { - router.replace({ - query: { - ...router.query, - chatId: '' - } as routerQueryType - }); - } + setChatData({ + ...res, + history + }); + + // have records. + ChatBoxRef.current?.resetHistory(history); + ChatBoxRef.current?.resetVariables(res.variables); + + if (res.history.length > 0) { + setTimeout(() => { + ChatBoxRef.current?.scrollToBottom('auto'); + }, 500); } - setIsLoading(false); + } catch (e: any) { + toast({ + title: t('core.chat.Failed to initialize chat'), + status: 'error' + }); + if (chatId) { + router.replace({ + query: { + ...router.query, + chatId: '' + } + }); + } + } + return null; + }, [teamId, appId, chatId, teamToken, setChatData, toast, t, router]); + const { isFetching } = useQuery(['init', teamId, appId, chatId], () => { + if (forbidRefresh.current) { + forbidRefresh.current = false; return null; - }, - [setIsLoading, setChatData, router, setLastChatAppId, setLastChatId, toast] - ); - // 监测路由改变 - useEffect(() => { - const activeHistory = teamShareChatHistory.filter((item) => !item.delete); - if (!localUId || !shareTeamId || activeHistory.length === 0) return; - (async () => { - try { - await POST('/core/chat/initLocalShareHistoryV464', { - outLinkUid: localUId, - chatIds: teamShareChatHistory.map((item) => item.chatId) - }); - clearLocalHistory(); - // router.reload(); - } catch (error) { - toast({ - status: 'warning', - title: t('core.shareChat.Init Error') - }); - } - })(); - }, [clearLocalHistory, localUId, router, teamShareChatHistory, shareTeamId, t, toast]); + } + if (teamId && appId) { + return loadChatInfo(); + } + return null; + }); return ( - + + + {chatData.app.name} + {/* pc show myself apps */} - - - - {myApps && - myApps.map((item) => ( - { - router.replace({ - query: { - appId: item._id, - shareTeamId, - authToken: authToken - } as routerQueryType - }); - } - })} - > - - - {item.name} - - - ))} - - - + {isPc && ( + + + + )} + {((children: React.ReactNode) => { @@ -449,36 +304,35 @@ const OutLink = ({ onChangeChat={(chatId) => { router.replace({ query: { - chatId: chatId || '', - appId, - shareTeamId, - authToken: authToken - } as routerQueryType + ...router.query, + chatId: chatId || '' + } }); if (!isPc) { onCloseSlider(); } }} - onDelHistory={(e) => delOneHistory({ ...e, appId })} + onDelHistory={(e) => delOneHistory({ ...e, appId, teamId, teamToken })} onClearHistory={() => { - clearHistories({ appId }); + clearHistories({ appId, teamId, teamToken }); router.replace({ query: { - appId, - shareTeamId, - authToken: authToken - } as routerQueryType + ...router.query, + chatId: '' + } }); }} onSetHistoryTop={(e) => { - updateHistory({ ...e, appId }); + updateHistory({ ...e, teamId, teamToken, appId }); }} onSetCustomTitle={async (e) => { updateHistory({ appId, chatId: e.chatId, title: e.title, - customTitle: e.title + customTitle: e.title, + teamId, + teamToken }); }} /> @@ -496,8 +350,8 @@ const OutLink = ({ appAvatar={chatData.app.avatar} appName={chatData.app.name} history={chatData.history} - showHistory={true} onOpenSlider={onOpenSlider} + showHistory /> {/* chat box */} @@ -512,33 +366,33 @@ const OutLink = ({ onUpdateVariable={(e) => {}} onStartChat={startChat} onDelMessage={(e) => - delOneHistoryItem({ ...e, appId: chatData.appId, chatId, outLinkUid }) + delOneHistoryItem({ ...e, appId: chatData.appId, chatId, teamId, teamToken }) } appId={chatData.appId} - shareTeamId={shareTeamId} chatId={chatId} - outLinkUid={outLinkUid} + teamId={teamId} + teamToken={teamToken} /> - + ); }; export async function getServerSideProps(context: any) { - const shareTeamId = context?.query?.shareTeamId || ''; + const teamId = context?.query?.teamId || ''; const appId = context?.query?.appId || ''; const chatId = context?.query?.chatId || ''; - const authToken: string = context?.query?.authToken || ''; + const teamToken: string = context?.query?.teamToken || ''; return { props: { - shareTeamId, + teamId, appId, chatId, - authToken, + teamToken, ...(await serviceSideProps(context)) } }; diff --git a/projects/app/src/pages/dataset/detail/components/Import/Provider.tsx b/projects/app/src/pages/dataset/detail/components/Import/Provider.tsx index fb6c5525c..2d9b62f2c 100644 --- a/projects/app/src/pages/dataset/detail/components/Import/Provider.tsx +++ b/projects/app/src/pages/dataset/detail/components/Import/Provider.tsx @@ -95,6 +95,20 @@ const Provider = ({ const customSplitChar = processParamsForm.watch('customSplitChar'); const modeStaticParams = { + [TrainingModeEnum.auto]: { + chunkOverlapRatio: 0.2, + maxChunkSize: 2048, + minChunkSize: 100, + autoChunkSize: vectorModel?.defaultToken ? vectorModel?.defaultToken * 2 : 1024, + chunkSize: vectorModel?.defaultToken ? vectorModel?.defaultToken * 2 : 1024, + showChunkInput: false, + showPromptInput: false, + charsPointsPrice: agentModel.charsPointsPrice, + priceTip: t('core.dataset.import.Auto mode Estimated Price Tips', { + price: agentModel.charsPointsPrice + }), + uploadRate: 100 + }, [TrainingModeEnum.chunk]: { chunkSizeField: 'embeddingChunkSize' as ChunkSizeFieldType, chunkOverlapRatio: 0.2, @@ -149,10 +163,17 @@ const Provider = ({ [sources] ); const predictPoints = useMemo(() => { - if (mode === TrainingModeEnum.qa) { - return +(((totalChunkChars * 1.5) / 1000) * agentModel.charsPointsPrice).toFixed(2); + const totalTokensPredict = totalChunkChars / 1000; + if (mode === TrainingModeEnum.auto) { + const price = totalTokensPredict * 1.3 * agentModel.charsPointsPrice; + return +price.toFixed(2); } - return +((totalChunkChars / 1000) * vectorModel.charsPointsPrice).toFixed(2); + if (mode === TrainingModeEnum.qa) { + const price = totalTokensPredict * 1.2 * agentModel.charsPointsPrice; + return +price.toFixed(2); + } + + return +(totalTokensPredict * vectorModel.charsPointsPrice).toFixed(2); }, [agentModel.charsPointsPrice, mode, totalChunkChars, vectorModel.charsPointsPrice]); const totalChunks = useMemo( () => sources.reduce((sum, file) => sum + file.chunks.length, 0), diff --git a/projects/app/src/pages/dataset/detail/components/Import/commonProgress/DataProcess.tsx b/projects/app/src/pages/dataset/detail/components/Import/commonProgress/DataProcess.tsx index d34e536a2..8e0dd57cc 100644 --- a/projects/app/src/pages/dataset/detail/components/Import/commonProgress/DataProcess.tsx +++ b/projects/app/src/pages/dataset/detail/components/Import/commonProgress/DataProcess.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; import { Box, Flex, @@ -60,6 +60,15 @@ function DataProcess({ onClose: onCloseCustomPrompt } = useDisclosure(); + const trainingModeList = useMemo(() => { + const list = Object.entries(TrainingTypeMap); + + return list.filter(([key, value]) => { + if (feConfigs?.isPlus) return true; + return value.isPlus; + }); + }, [feConfigs?.isPlus]); + useEffect(() => { if (showPreviewChunks) { splitSources2Chunks(); @@ -79,7 +88,7 @@ function DataProcess({ {t('core.dataset.import.Training mode')} ({ + list={trainingModeList.map(([key, value]) => ({ title: t(value.label), value: key, tooltip: t(value.tooltip) @@ -91,7 +100,7 @@ function DataProcess({ setValue('mode', e); setRefresh(!refresh); }} - gridTemplateColumns={'1fr 1fr'} + gridTemplateColumns={'repeat(3,1fr)'} defaultBg="white" activeBg="white" /> diff --git a/projects/app/src/pages/login/components/ForgetPasswordForm.tsx b/projects/app/src/pages/login/components/ForgetPasswordForm.tsx index e1fee7099..b0f9c3774 100644 --- a/projects/app/src/pages/login/components/ForgetPasswordForm.tsx +++ b/projects/app/src/pages/login/components/ForgetPasswordForm.tsx @@ -1,7 +1,7 @@ import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Box, Input, Button } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; -import { PageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/constants/user'; import { postFindPassword } from '@/web/support/user/api'; import { useSendCode } from '@/web/support/user/hooks/useSendCode'; import type { ResLogin } from '@/global/support/api/userRes.d'; @@ -9,7 +9,7 @@ import { useToast } from '@fastgpt/web/hooks/useToast'; import { useSystemStore } from '@/web/common/system/useSystemStore'; interface Props { - setPageType: Dispatch<`${PageTypeEnum}`>; + setPageType: Dispatch<`${LoginPageTypeEnum}`>; loginSuccess: (e: ResLogin) => void; } @@ -181,7 +181,7 @@ const RegisterForm = ({ setPageType, loginSuccess }: Props) => { color={'primary.700'} cursor={'pointer'} _hover={{ textDecoration: 'underline' }} - onClick={() => setPageType('login')} + onClick={() => setPageType(LoginPageTypeEnum.passwordLogin)} > 去登录 diff --git a/projects/app/src/pages/login/components/LoginForm.tsx b/projects/app/src/pages/login/components/LoginForm.tsx deleted file mode 100644 index e25aee326..000000000 --- a/projects/app/src/pages/login/components/LoginForm.tsx +++ /dev/null @@ -1,251 +0,0 @@ -import React, { useState, Dispatch, useCallback, useRef } from 'react'; -import { - FormControl, - Flex, - Input, - Button, - Divider, - AbsoluteCenter, - Box, - Link, - useTheme -} from '@chakra-ui/react'; -import { useForm } from 'react-hook-form'; -import { useRouter } from 'next/router'; -import { PageTypeEnum } from '@/constants/user'; -import { OAuthEnum } from '@fastgpt/global/support/user/constant'; -import { postLogin } from '@/web/support/user/api'; -import type { ResLogin } from '@/global/support/api/userRes'; -import { useToast } from '@fastgpt/web/hooks/useToast'; -import { useSystemStore } from '@/web/common/system/useSystemStore'; -import MyIcon from '@fastgpt/web/components/common/Icon'; -import { customAlphabet } from 'nanoid'; -import { getDocPath } from '@/web/common/system/doc'; -import Avatar from '@/components/Avatar'; -import { LOGO_ICON } from '@fastgpt/global/common/system/constants'; -import { useTranslation } from 'next-i18next'; -const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 8); - -interface Props { - setPageType: Dispatch<`${PageTypeEnum}`>; - loginSuccess: (e: ResLogin) => void; -} - -interface LoginFormType { - username: string; - password: string; -} - -const LoginForm = ({ setPageType, loginSuccess }: Props) => { - const { t } = useTranslation(); - const router = useRouter(); - const theme = useTheme(); - const { lastRoute = '/app/list' } = router.query as { lastRoute: string }; - const { toast } = useToast(); - const { setLoginStore, feConfigs } = useSystemStore(); - const { - register, - handleSubmit, - formState: { errors } - } = useForm(); - - const [requesting, setRequesting] = useState(false); - - const onclickLogin = useCallback( - async ({ username, password }: LoginFormType) => { - setRequesting(true); - try { - loginSuccess( - await postLogin({ - username, - password - }) - ); - toast({ - title: '登录成功', - status: 'success' - }); - } catch (error: any) { - toast({ - title: error.message || '登录异常', - status: 'error' - }); - } - setRequesting(false); - }, - [loginSuccess, toast] - ); - - const redirectUri = `${location.origin}/login/provider`; - const state = useRef(nanoid()); - - const oAuthList = [ - ...(feConfigs?.oauth?.github - ? [ - { - label: t('support.user.login.Github'), - provider: OAuthEnum.github, - icon: 'common/gitFill', - redirectUrl: `https://github.com/login/oauth/authorize?client_id=${feConfigs?.oauth?.github}&redirect_uri=${redirectUri}&state=${state.current}&scope=user:email%20read:user` - } - ] - : []), - ...(feConfigs?.oauth?.google - ? [ - { - label: t('support.user.login.Google'), - provider: OAuthEnum.google, - icon: 'common/googleFill', - redirectUrl: `https://accounts.google.com/o/oauth2/v2/auth?client_id=${feConfigs?.oauth?.google}&redirect_uri=${redirectUri}&state=${state.current}&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20openid&include_granted_scopes=true` - } - ] - : []) - ]; - - const isCommunityVersion = feConfigs?.show_register === false && feConfigs?.show_git; - - return ( - - - - - - - {feConfigs?.systemTitle} - - - { - if (e.keyCode === 13 && !e.shiftKey && !requesting) { - handleSubmit(onclickLogin)(); - } - }} - > - - - - - - - {feConfigs?.docUrl && ( - - 使用即代表你同意我们的{' '} - - 免责声明 - - - )} - - - - {feConfigs?.show_register && ( - <> - - setPageType('forgetPassword')} - fontSize="sm" - > - 忘记密码? - - - setPageType('register')} - fontSize="sm" - > - 注册账号 - - - - )} - - - {/* oauth */} - {feConfigs?.show_register && oAuthList.length > 0 && ( - <> - - - - or - - - - {oAuthList.map((item) => ( - - - - ))} - - - )} - - ); -}; - -export default LoginForm; diff --git a/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx b/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx new file mode 100644 index 000000000..b2fa6d99e --- /dev/null +++ b/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx @@ -0,0 +1,171 @@ +import React, { useState, Dispatch, useCallback } from 'react'; +import { FormControl, Flex, Input, Button, Box, Link } from '@chakra-ui/react'; +import { useForm } from 'react-hook-form'; +import { LoginPageTypeEnum } from '@/constants/user'; +import { postLogin } from '@/web/support/user/api'; +import type { ResLogin } from '@/global/support/api/userRes'; +import { useToast } from '@fastgpt/web/hooks/useToast'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { getDocPath } from '@/web/common/system/doc'; +import { useTranslation } from 'next-i18next'; +import FormLayout from './components/FormLayout'; + +interface Props { + setPageType: Dispatch<`${LoginPageTypeEnum}`>; + loginSuccess: (e: ResLogin) => void; +} + +interface LoginFormType { + username: string; + password: string; +} + +const LoginForm = ({ setPageType, loginSuccess }: Props) => { + const { t } = useTranslation(); + const { toast } = useToast(); + const { feConfigs } = useSystemStore(); + const { + register, + handleSubmit, + formState: { errors } + } = useForm(); + + const [requesting, setRequesting] = useState(false); + + const onclickLogin = useCallback( + async ({ username, password }: LoginFormType) => { + setRequesting(true); + try { + loginSuccess( + await postLogin({ + username, + password + }) + ); + toast({ + title: '登录成功', + status: 'success' + }); + } catch (error: any) { + toast({ + title: error.message || '登录异常', + status: 'error' + }); + } + setRequesting(false); + }, + [loginSuccess, toast] + ); + + const isCommunityVersion = feConfigs?.show_register === false && !feConfigs?.isPlus; + + const loginOptions = [ + feConfigs?.show_phoneLogin ? t('support.user.login.Phone number') : '', + feConfigs?.show_emailLogin ? t('support.user.login.Email') : '', + t('support.user.login.Username') + ].filter(Boolean); + + const placeholder = isCommunityVersion + ? t('support.user.login.Root login') + : loginOptions.join('/'); + + return ( + + { + if (e.keyCode === 13 && !e.shiftKey && !requesting) { + handleSubmit(onclickLogin)(); + } + }} + > + + + + + + + {feConfigs?.docUrl && ( + + {t('support.user.login.Policy tip')} + + {t('support.user.login.Terms')} + + {t('support.user.login.And')} + + {t('support.user.login.Privacy')} + + + )} + + + + {feConfigs?.show_register && ( + <> + + setPageType('forgetPassword')} + fontSize="sm" + > + {t('support.user.login.Forget Password')} + + + setPageType('register')} + fontSize="sm" + > + {t('support.user.login.Register')} + + + + )} + + + ); +}; + +export default LoginForm; diff --git a/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx b/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx new file mode 100644 index 000000000..235dee8ba --- /dev/null +++ b/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx @@ -0,0 +1,60 @@ +import React, { Dispatch } from 'react'; +import { LoginPageTypeEnum } from '@/constants/user'; +import type { ResLogin } from '@/global/support/api/userRes'; +import { Box, Center, Image } from '@chakra-ui/react'; +import { useQuery } from '@tanstack/react-query'; +import { getWXLoginQR, getWXLoginResult } from '@/web/support/user/api'; +import { getErrText } from '@fastgpt/global/common/error/utils'; +import { useRouter } from 'next/router'; +import { useToast } from '@fastgpt/web/hooks/useToast'; +import FormLayout from './components/FormLayout'; +import { useTranslation } from 'next-i18next'; +import Loading from '@/components/Loading'; + +interface Props { + loginSuccess: (e: ResLogin) => void; + setPageType: Dispatch<`${LoginPageTypeEnum}`>; +} + +const WechatForm = ({ setPageType, loginSuccess }: Props) => { + const { t } = useTranslation(); + const { toast } = useToast(); + + const { data: wechatInfo } = useQuery(['getWXLoginQR'], getWXLoginQR, { + onError(err) { + toast({ + status: 'warning', + title: getErrText(err, '获取二维码失败') + }); + } + }); + + useQuery(['getWXLoginResult', wechatInfo?.code], () => getWXLoginResult(wechatInfo?.code || ''), { + refetchInterval: 3 * 1000, + enabled: !!wechatInfo?.code, + onSuccess(data: ResLogin) { + loginSuccess(data); + } + }); + + return ( + + + + {t('support.user.login.Wx qr login')} + + + {wechatInfo?.codeUrl ? ( + qrcode + ) : ( +
+ +
+ )} +
+
+
+ ); +}; + +export default WechatForm; diff --git a/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx b/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx new file mode 100644 index 000000000..9907bacd2 --- /dev/null +++ b/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx @@ -0,0 +1,136 @@ +import Divider from '@/components/core/module/Flow/components/modules/Divider'; +import { LoginPageTypeEnum } from '@/constants/user'; +import { useSystemStore } from '@/web/common/system/useSystemStore'; +import { AbsoluteCenter, Box, Button, Flex, Image } from '@chakra-ui/react'; +import { LOGO_ICON } from '@fastgpt/global/common/system/constants'; +import { OAuthEnum } from '@fastgpt/global/support/user/constant'; +import MyIcon from '@fastgpt/web/components/common/Icon'; +import { customAlphabet } from 'nanoid'; +import { useRouter } from 'next/router'; +import { Dispatch, useRef } from 'react'; +import { useTranslation } from 'react-i18next'; +const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 8); + +interface Props { + children: React.ReactNode; + setPageType: Dispatch<`${LoginPageTypeEnum}`>; + pageType: `${LoginPageTypeEnum}`; +} + +const FormLayout = ({ children, setPageType, pageType }: Props) => { + const { t } = useTranslation(); + const router = useRouter(); + const { setLoginStore, feConfigs } = useSystemStore(); + const { lastRoute = '/app/list' } = router.query as { lastRoute: string }; + const state = useRef(nanoid()); + const redirectUri = `${location.origin}/login/provider`; + + const oAuthList = [ + ...(feConfigs?.oauth?.github + ? [ + { + label: t('support.user.login.Github'), + provider: OAuthEnum.github, + icon: 'common/gitFill', + redirectUrl: `https://github.com/login/oauth/authorize?client_id=${feConfigs?.oauth?.github}&redirect_uri=${redirectUri}&state=${state.current}&scope=user:email%20read:user` + } + ] + : []), + ...(feConfigs?.oauth?.google + ? [ + { + label: t('support.user.login.Google'), + provider: OAuthEnum.google, + icon: 'common/googleFill', + redirectUrl: `https://accounts.google.com/o/oauth2/v2/auth?client_id=${feConfigs?.oauth?.google}&redirect_uri=${redirectUri}&state=${state.current}&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20openid&include_granted_scopes=true` + } + ] + : []), + ...(feConfigs?.oauth?.wechat && pageType !== LoginPageTypeEnum.wechat + ? [ + { + label: t('support.user.login.Wechat'), + provider: OAuthEnum.wechat, + icon: 'common/wechatFill', + pageType: LoginPageTypeEnum.wechat + } + ] + : []), + ...(pageType !== LoginPageTypeEnum.passwordLogin + ? [ + { + label: t('support.user.login.Password login'), + provider: LoginPageTypeEnum.passwordLogin, + icon: 'support/account/passwordLogin', + pageType: LoginPageTypeEnum.passwordLogin + } + ] + : []) + ]; + return ( + + + + {'icon'} + + + {feConfigs?.systemTitle} + + + {children} + + {feConfigs?.show_register && oAuthList.length > 0 && ( + <> + + + + or + + + + {oAuthList.map((item) => ( + + + + ))} + + + )} + + ); +}; + +export default FormLayout; diff --git a/projects/app/src/pages/login/components/RegisterForm.tsx b/projects/app/src/pages/login/components/RegisterForm.tsx index 51b23717f..93a09a77f 100644 --- a/projects/app/src/pages/login/components/RegisterForm.tsx +++ b/projects/app/src/pages/login/components/RegisterForm.tsx @@ -1,7 +1,7 @@ import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Box, Input, Button } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; -import { PageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/constants/user'; import { postRegister } from '@/web/support/user/api'; import { useSendCode } from '@/web/support/user/hooks/useSendCode'; import type { ResLogin } from '@/global/support/api/userRes'; @@ -13,7 +13,7 @@ import { useTranslation } from 'next-i18next'; interface Props { loginSuccess: (e: ResLogin) => void; - setPageType: Dispatch<`${PageTypeEnum}`>; + setPageType: Dispatch<`${LoginPageTypeEnum}`>; } interface RegisterType { @@ -196,7 +196,7 @@ const RegisterForm = ({ setPageType, loginSuccess }: Props) => { color={'primary.700'} cursor={'pointer'} _hover={{ textDecoration: 'underline' }} - onClick={() => setPageType('login')} + onClick={() => setPageType(LoginPageTypeEnum.passwordLogin)} > 已有账号,去登录 diff --git a/projects/app/src/pages/login/index.tsx b/projects/app/src/pages/login/index.tsx index a87c1e70f..4a360e948 100644 --- a/projects/app/src/pages/login/index.tsx +++ b/projects/app/src/pages/login/index.tsx @@ -1,25 +1,28 @@ import React, { useState, useCallback, useEffect } from 'react'; -import { Box, Flex, Image, useDisclosure } from '@chakra-ui/react'; -import { PageTypeEnum } from '@/constants/user'; +import { Box, Center, Flex, useDisclosure } from '@chakra-ui/react'; +import { LoginPageTypeEnum } from '@/constants/user'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import type { ResLogin } from '@/global/support/api/userRes.d'; import { useRouter } from 'next/router'; import { useUserStore } from '@/web/support/user/useUserStore'; import { useChatStore } from '@/web/core/chat/storeChat'; -import LoginForm from './components/LoginForm'; +import LoginForm from './components/LoginForm/LoginForm'; import dynamic from 'next/dynamic'; import { serviceSideProps } from '@/web/common/utils/i18n'; import { clearToken, setToken } from '@/web/support/user/auth'; import CommunityModal from '@/components/CommunityModal'; import Script from 'next/script'; +import Loading from '@/components/Loading'; + const RegisterForm = dynamic(() => import('./components/RegisterForm')); const ForgetPasswordForm = dynamic(() => import('./components/ForgetPasswordForm')); +const WechatForm = dynamic(() => import('./components/LoginForm/WechatForm')); const Login = () => { const router = useRouter(); const { lastRoute = '' } = router.query as { lastRoute: string }; const { feConfigs } = useSystemStore(); - const [pageType, setPageType] = useState<`${PageTypeEnum}`>(PageTypeEnum.login); + const [pageType, setPageType] = useState<`${LoginPageTypeEnum}`>(); const { setUserInfo } = useUserStore(); const { setLastChatId, setLastChatAppId } = useChatStore(); const { isOpen, onOpen, onClose } = useDisclosure(); @@ -39,11 +42,12 @@ const Login = () => { [lastRoute, router, setLastChatId, setLastChatAppId, setUserInfo] ); - function DynamicComponent({ type }: { type: `${PageTypeEnum}` }) { + function DynamicComponent({ type }: { type: `${LoginPageTypeEnum}` }) { const TypeMap = { - [PageTypeEnum.login]: LoginForm, - [PageTypeEnum.register]: RegisterForm, - [PageTypeEnum.forgetPassword]: ForgetPasswordForm + [LoginPageTypeEnum.passwordLogin]: LoginForm, + [LoginPageTypeEnum.register]: RegisterForm, + [LoginPageTypeEnum.forgetPassword]: ForgetPasswordForm, + [LoginPageTypeEnum.wechat]: WechatForm }; const Component = TypeMap[type]; @@ -51,6 +55,13 @@ const Login = () => { return ; } + /* default login type */ + useEffect(() => { + if (!feConfigs.oauth) return; + setPageType( + feConfigs.oauth?.wechat ? LoginPageTypeEnum.wechat : LoginPageTypeEnum.passwordLogin + ); + }, [feConfigs.oauth, feConfigs.oauth?.wechat]); useEffect(() => { clearToken(); router.prefetch('/app/list'); @@ -87,7 +98,13 @@ const Login = () => { ]} > - + {pageType ? ( + + ) : ( +
+ +
+ )}
{feConfigs?.concatMd && ( { @@ -15,7 +15,7 @@ const FAQ = () => { }, { title: '什么是AI积分?', - desc: '每次调用AI模型时,都会消耗一定的AI积分。具体的计算标准可参考上方的“AI 积分计算标准”。\n1 字符=1中英文字符和标点符号,会去掉换行和空格符号,计算字符时包含对话上下文与知识库引用。' + desc: '每次调用AI模型时,都会消耗一定的AI积分。具体的计算标准可参考上方的“AI 积分计算标准”。\nToken计算采用GPT3.5相同公式,1Token≈0.7中文字符≈0.9英文单词,连续出现的字符可能被认为是1个Tokens。' }, { title: 'AI积分会过期么?', diff --git a/projects/app/src/pages/price/components/Points.tsx b/projects/app/src/pages/price/components/Points.tsx index 98292329c..e079da7f0 100644 --- a/projects/app/src/pages/price/components/Points.tsx +++ b/projects/app/src/pages/price/components/Points.tsx @@ -42,7 +42,7 @@ const Points = () => { {llmModelList?.map((item, i) => ( {item.name} - {item.charsPointsPrice}积分 / 1000字符 + {item.charsPointsPrice}积分 / 1000 Tokens ))} @@ -67,7 +67,7 @@ const Points = () => { {vectorModelList?.map((item, i) => ( {item.name} - {item.charsPointsPrice}积分 / 1000字符 + {item.charsPointsPrice}积分 / 1000 Tokens ))} diff --git a/projects/app/src/service/common/system/cron.ts b/projects/app/src/service/common/system/cron.ts index fa2f4096d..8ab3ad580 100644 --- a/projects/app/src/service/common/system/cron.ts +++ b/projects/app/src/service/common/system/cron.ts @@ -1,21 +1,12 @@ -import { initSystemConfig } from '@/pages/api/common/system/getInitData'; -import { startQueue } from '@/service/utils/tools'; import { setCron } from '@fastgpt/service/common/system/cron'; +import { startTrainingQueue } from '@/service/core/dataset/training/utils'; export const startCron = () => { - setUpdateSystemConfigCron(); setTrainingQueueCron(); }; -export const setUpdateSystemConfigCron = () => { - setCron('*/5 * * * *', () => { - initSystemConfig(); - console.log('refresh system config'); - }); -}; - export const setTrainingQueueCron = () => { setCron('*/1 * * * *', () => { - startQueue(); + startTrainingQueue(); }); }; diff --git a/projects/app/src/service/common/system/index.ts b/projects/app/src/service/common/system/index.ts index 5e342d558..74d16ae35 100644 --- a/projects/app/src/service/common/system/index.ts +++ b/projects/app/src/service/common/system/index.ts @@ -1,3 +1,5 @@ +import { getTikTokenEnc } from '@fastgpt/global/common/string/tiktoken'; +import { initHttpAgent } from '@fastgpt/service/common/middle/httpAgent'; import { existsSync, readFileSync } from 'fs'; export const readConfigData = (name: string) => { @@ -23,3 +25,15 @@ export const readConfigData = (name: string) => { return content; }; + +export function initGlobal() { + if (global.communityPlugins) return; + + global.communityPlugins = []; + global.simpleModeTemplates = []; + global.qaQueueLen = global.qaQueueLen ?? 0; + global.vectorQueueLen = global.vectorQueueLen ?? 0; + // init tikToken + getTikTokenEnc(); + initHttpAgent(); +} diff --git a/projects/app/src/service/common/system/volumnMongoWatch.ts b/projects/app/src/service/common/system/volumnMongoWatch.ts new file mode 100644 index 000000000..bf186f740 --- /dev/null +++ b/projects/app/src/service/common/system/volumnMongoWatch.ts @@ -0,0 +1,21 @@ +import { initSystemConfig } from '@/pages/api/common/system/getInitData'; +import { createDatasetTrainingMongoWatch } from '@/service/core/dataset/training/utils'; +import { MongoSystemConfigs } from '@fastgpt/service/common/system/config/schema'; + +export const startMongoWatch = async () => { + reloadConfigWatch(); + createDatasetTrainingMongoWatch(); +}; + +const reloadConfigWatch = () => { + const changeStream = MongoSystemConfigs.watch(); + + changeStream.on('change', async (change) => { + try { + if (change.operationType === 'insert') { + await initSystemConfig(); + console.log('refresh system config'); + } + } catch (error) {} + }); +}; diff --git a/projects/app/src/service/core/dataset/data/controller.ts b/projects/app/src/service/core/dataset/data/controller.ts index d832ebb40..ec93ac6fb 100644 --- a/projects/app/src/service/core/dataset/data/controller.ts +++ b/projects/app/src/service/core/dataset/data/controller.ts @@ -35,7 +35,6 @@ import type { import { pushDataListToTrainingQueue } from '@fastgpt/service/core/dataset/training/controller'; import { getVectorModel } from '@fastgpt/service/core/ai/model'; import { mongoSessionRun } from '@fastgpt/service/common/mongo/sessionRun'; -import { startQueue } from '@/service/utils/tools'; export async function pushDataToTrainingQueue( props: { @@ -49,8 +48,6 @@ export async function pushDataToTrainingQueue( datasetModelList: global.llmModels }); - startQueue(); - return result; } @@ -129,7 +126,7 @@ export async function insertData2Dataset({ return { insertId: _id, - charsLength: result.reduce((acc, cur) => acc + cur.charsLength, 0) + tokens: result.reduce((acc, cur) => acc + cur.tokens, 0) }; } @@ -240,11 +237,11 @@ export async function updateData2Dataset({ return result; } return { - charsLength: 0 + tokens: 0 }; }) ); - const charsLength = insertResult.reduce((acc, cur) => acc + cur.charsLength, 0); + const tokens = insertResult.reduce((acc, cur) => acc + cur.tokens, 0); // console.log(clonePatchResult2Insert); await mongoSessionRun(async (session) => { // update mongo @@ -273,7 +270,7 @@ export async function updateData2Dataset({ }); return { - charsLength + tokens }; } @@ -343,7 +340,7 @@ export async function searchDatasetData(props: SearchDatasetDataProps) { }; }; const embeddingRecall = async ({ query, limit }: { query: string; limit: number }) => { - const { vectors, charsLength } = await getVectorsByText({ + const { vectors, tokens } = await getVectorsByText({ model: getVectorModel(model), input: query }); @@ -407,7 +404,7 @@ export async function searchDatasetData(props: SearchDatasetDataProps) { return { embeddingRecallResults: formatResult, - charsLength + tokens }; }; const fullTextRecall = async ({ @@ -552,22 +549,21 @@ export async function searchDatasetData(props: SearchDatasetDataProps) { // multi query recall const embeddingRecallResList: SearchDataResponseItemType[][] = []; const fullTextRecallResList: SearchDataResponseItemType[][] = []; - let totalCharsLength = 0; + let totalTokens = 0; await Promise.all( queries.map(async (query) => { - const [{ charsLength, embeddingRecallResults }, { fullTextRecallResults }] = - await Promise.all([ - embeddingRecall({ - query, - limit: embeddingLimit - }), - fullTextRecall({ - query, - limit: fullTextLimit - }) - ]); - totalCharsLength += charsLength; + const [{ tokens, embeddingRecallResults }, { fullTextRecallResults }] = await Promise.all([ + embeddingRecall({ + query, + limit: embeddingLimit + }), + fullTextRecall({ + query, + limit: fullTextLimit + }) + ]); + totalTokens += tokens; embeddingRecallResList.push(embeddingRecallResults); fullTextRecallResList.push(fullTextRecallResults); @@ -583,7 +579,7 @@ export async function searchDatasetData(props: SearchDatasetDataProps) { ).slice(0, fullTextLimit); return { - charsLength: totalCharsLength, + tokens: totalTokens, embeddingRecallResults: rrfEmbRecall, fullTextRecallResults: rrfFTRecall }; @@ -594,7 +590,7 @@ export async function searchDatasetData(props: SearchDatasetDataProps) { const { embeddingLimit, fullTextLimit } = countRecallLimit(); // recall - const { embeddingRecallResults, fullTextRecallResults, charsLength } = await multiQueryRecall({ + const { embeddingRecallResults, fullTextRecallResults, tokens } = await multiQueryRecall({ embeddingLimit, fullTextLimit }); @@ -666,7 +662,7 @@ export async function searchDatasetData(props: SearchDatasetDataProps) { return { searchRes: filterResultsByMaxTokens(scoreFilter, maxTokens), - charsLength, + tokens, searchMode, limit: maxTokens, similarity, diff --git a/projects/app/src/service/core/dataset/training/utils.ts b/projects/app/src/service/core/dataset/training/utils.ts new file mode 100644 index 000000000..df3f033b3 --- /dev/null +++ b/projects/app/src/service/core/dataset/training/utils.ts @@ -0,0 +1,31 @@ +import { generateQA } from '@/service/events/generateQA'; +import { generateVector } from '@/service/events/generateVector'; +import { TrainingModeEnum } from '@fastgpt/global/core/dataset/constants'; +import { DatasetTrainingSchemaType } from '@fastgpt/global/core/dataset/type'; +import { MongoDatasetTraining } from '@fastgpt/service/core/dataset/training/schema'; + +export const createDatasetTrainingMongoWatch = () => { + const changeStream = MongoDatasetTraining.watch(); + + changeStream.on('change', async (change) => { + try { + if (change.operationType === 'insert') { + const fullDocument = change.fullDocument as DatasetTrainingSchemaType; + const { mode } = fullDocument; + if (mode === TrainingModeEnum.qa) { + generateQA(); + } else if (mode === TrainingModeEnum.chunk) { + generateVector(); + } + } + } catch (error) {} + }); +}; + +export const startTrainingQueue = (fast?: boolean) => { + const max = global.systemEnv?.qaMaxProcess || 10; + for (let i = 0; i < max; i++) { + generateQA(); + generateVector(); + } +}; diff --git a/projects/app/src/service/events/generateQA.ts b/projects/app/src/service/events/generateQA.ts index 45754b7f0..b023b17d9 100644 --- a/projects/app/src/service/events/generateQA.ts +++ b/projects/app/src/service/events/generateQA.ts @@ -10,8 +10,10 @@ import { Prompt_AgentQA } from '@/global/core/prompt/agent'; import type { PushDatasetDataChunkProps } from '@fastgpt/global/core/dataset/api.d'; import { pushDataToTrainingQueue } from '@/service/core/dataset/data/controller'; import { getLLMModel } from '@fastgpt/service/core/ai/model'; -import { checkInvalidChunkAndLock, checkTeamAiPointsAndLock } from './utils'; -import { countGptMessagesChars } from '@fastgpt/service/core/chat/utils'; +import { checkTeamAiPointsAndLock } from './utils'; +import { checkInvalidChunkAndLock } from '@fastgpt/service/core/dataset/training/utils'; +import { addMinutes } from 'date-fns'; +import { countGptMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; const reduceQueue = () => { global.qaQueueLen = global.qaQueueLen > 0 ? global.qaQueueLen - 1 : 0; @@ -20,9 +22,11 @@ const reduceQueue = () => { }; export async function generateQA(): Promise { - if (global.qaQueueLen >= global.systemEnv.qaMaxProcess) return; + const max = global.systemEnv?.qaMaxProcess || 10; + if (global.qaQueueLen >= max) return; global.qaQueueLen++; + const startTime = Date.now(); // get training data const { data, @@ -33,7 +37,7 @@ export async function generateQA(): Promise { try { const data = await MongoDatasetTraining.findOneAndUpdate( { - lockTime: { $lte: new Date(Date.now() - 6 * 60 * 1000) }, + lockTime: { $lte: addMinutes(new Date(), -6) }, mode: TrainingModeEnum.qa }, { @@ -66,7 +70,7 @@ export async function generateQA(): Promise { text: data.q }; } catch (error) { - console.log(`Get Training Data error`, error); + addLog.error(`[QA Queue] Error`, error); return { error: true }; @@ -75,7 +79,7 @@ export async function generateQA(): Promise { if (done || !data) { if (reduceQueue()) { - console.log(`【QA】Task Done`); + addLog.info(`[QA Queue] Done`); } return; } @@ -83,17 +87,15 @@ export async function generateQA(): Promise { reduceQueue(); return generateQA(); } - console.log('Start QA Training'); // auth balance if (!(await checkTeamAiPointsAndLock(data.teamId, data.tmbId))) { - console.log('balance not enough'); reduceQueue(); return generateQA(); } + addLog.info(`[QA Queue] Start`); try { - const startTime = Date.now(); const model = getLLMModel(data.model)?.model; const prompt = `${data.prompt || Prompt_AgentQA.description} ${replaceVariable(Prompt_AgentQA.fixedText, { text })}`; @@ -119,8 +121,8 @@ ${replaceVariable(Prompt_AgentQA.fixedText, { text })}`; const qaArr = formatSplitText(answer, text); // 格式化后的QA对 - addLog.info(`QA Training Finish`, { - time: `${(Date.now() - startTime) / 1000}s`, + addLog.info(`[QA Queue] Finish`, { + time: Date.now() - startTime, splitLength: qaArr.length, usage: chatResponse.usage }); @@ -146,7 +148,7 @@ ${replaceVariable(Prompt_AgentQA.fixedText, { text })}`; pushQAUsage({ teamId: data.teamId, tmbId: data.tmbId, - charsLength: countGptMessagesChars(messages).length, + tokens: countGptMessagesTokens(messages), billId: data.billId, model }); diff --git a/projects/app/src/service/events/generateVector.ts b/projects/app/src/service/events/generateVector.ts index 6b1132261..a9a37cfd1 100644 --- a/projects/app/src/service/events/generateVector.ts +++ b/projects/app/src/service/events/generateVector.ts @@ -2,8 +2,10 @@ import { insertData2Dataset } from '@/service/core/dataset/data/controller'; import { MongoDatasetTraining } from '@fastgpt/service/core/dataset/training/schema'; import { TrainingModeEnum } from '@fastgpt/global/core/dataset/constants'; import { pushGenerateVectorUsage } from '@/service/support/wallet/usage/push'; -import { checkInvalidChunkAndLock, checkTeamAiPointsAndLock } from './utils'; -import { delay } from '@fastgpt/global/common/system/utils'; +import { checkTeamAiPointsAndLock } from './utils'; +import { checkInvalidChunkAndLock } from '@fastgpt/service/core/dataset/training/utils'; +import { addMinutes } from 'date-fns'; +import { addLog } from '@fastgpt/service/common/system/log'; const reduceQueue = () => { global.vectorQueueLen = global.vectorQueueLen > 0 ? global.vectorQueueLen - 1 : 0; @@ -13,7 +15,8 @@ const reduceQueue = () => { /* 索引生成队列。每导入一次,就是一个单独的线程 */ export async function generateVector(): Promise { - if (global.vectorQueueLen >= global.systemEnv.vectorMaxProcess) return; + const max = global.systemEnv?.vectorMaxProcess || 10; + if (global.vectorQueueLen >= max) return; global.vectorQueueLen++; const start = Date.now(); @@ -27,7 +30,7 @@ export async function generateVector(): Promise { try { const data = await MongoDatasetTraining.findOneAndUpdate( { - lockTime: { $lte: new Date(Date.now() - 1 * 60 * 1000) }, + lockTime: { $lte: addMinutes(new Date(), -1) }, mode: TrainingModeEnum.chunk }, { @@ -68,7 +71,7 @@ export async function generateVector(): Promise { } }; } catch (error) { - console.log(`Get Training Data error`, error); + addLog.error(`Get Training Data error`, error); return { error: true }; @@ -77,11 +80,12 @@ export async function generateVector(): Promise { if (done || !data) { if (reduceQueue()) { - console.log(`【index】Task done`); + addLog.info(`[Vector Queue] Done`); } return; } if (error) { + addLog.error(`[Vector Queue] Error`, { error }); reduceQueue(); return generateVector(); } @@ -92,6 +96,8 @@ export async function generateVector(): Promise { return generateVector(); } + addLog.info(`[Vector Queue] Start`); + // create vector and insert try { // invalid data @@ -103,7 +109,7 @@ export async function generateVector(): Promise { } // insert to dataset - const { charsLength } = await insertData2Dataset({ + const { tokens } = await insertData2Dataset({ teamId: data.teamId, tmbId: data.tmbId, datasetId: data.datasetId, @@ -119,7 +125,7 @@ export async function generateVector(): Promise { pushGenerateVectorUsage({ teamId: data.teamId, tmbId: data.tmbId, - charsLength, + tokens, model: data.model, billId: data.billId }); @@ -129,7 +135,9 @@ export async function generateVector(): Promise { reduceQueue(); generateVector(); - console.log(`embedding finished, time: ${Date.now() - start}ms`); + addLog.info(`[Vector Queue] Finish`, { + time: Date.now() - start + }); } catch (err: any) { reduceQueue(); diff --git a/projects/app/src/service/events/utils.ts b/projects/app/src/service/events/utils.ts index 6953d9003..a2540b94d 100644 --- a/projects/app/src/service/events/utils.ts +++ b/projects/app/src/service/events/utils.ts @@ -2,10 +2,6 @@ import { TeamErrEnum } from '@fastgpt/global/common/error/code/team'; import { checkTeamAIPoints } from '@fastgpt/service/support/permission/teamLimit'; import { sendOneInform } from '../support/user/inform/api'; import { lockTrainingDataByTeamId } from '@fastgpt/service/core/dataset/training/controller'; -import { DatasetTrainingSchemaType } from '@fastgpt/global/core/dataset/type'; -import { addLog } from '@fastgpt/service/common/system/log'; -import { MongoDatasetTraining } from '@fastgpt/service/core/dataset/training/schema'; -import { getErrText } from '@fastgpt/global/common/error/utils'; export const checkTeamAiPointsAndLock = async (teamId: string, tmbId: string) => { try { @@ -29,41 +25,3 @@ export const checkTeamAiPointsAndLock = async (teamId: string, tmbId: string) => return false; } }; - -export const checkInvalidChunkAndLock = async ({ - err, - errText, - data -}: { - err: any; - errText: string; - data: DatasetTrainingSchemaType; -}) => { - if (err?.response) { - addLog.info(`openai error: ${errText}`, { - status: err.response?.status, - stateusText: err.response?.statusText, - data: err.response?.data - }); - } else { - console.log(err); - addLog.error(getErrText(err, errText)); - } - - if ( - err?.message === 'invalid message format' || - err?.type === 'invalid_request_error' || - err?.code === 500 - ) { - addLog.info('Lock training data'); - console.log(err); - - try { - await MongoDatasetTraining.findByIdAndUpdate(data._id, { - lockTime: new Date('2998/5/5') - }); - } catch (error) {} - return true; - } - return false; -}; diff --git a/projects/app/src/service/moduleDispatch/agent/classifyQuestion.ts b/projects/app/src/service/moduleDispatch/agent/classifyQuestion.ts index 1e5a575a2..f041de4be 100644 --- a/projects/app/src/service/moduleDispatch/agent/classifyQuestion.ts +++ b/projects/app/src/service/moduleDispatch/agent/classifyQuestion.ts @@ -1,6 +1,7 @@ import { adaptChat2GptMessages } from '@fastgpt/global/core/chat/adapt'; -import { ChatContextFilter, countMessagesChars } from '@fastgpt/service/core/chat/utils'; -import type { moduleDispatchResType, ChatItemType } from '@fastgpt/global/core/chat/type.d'; +import { ChatContextFilter } from '@fastgpt/service/core/chat/utils'; +import { countMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; +import type { ChatItemType } from '@fastgpt/global/core/chat/type.d'; import { ChatRoleEnum } from '@fastgpt/global/core/chat/constants'; import { getAIApi } from '@fastgpt/service/core/ai/config'; import type { @@ -14,7 +15,7 @@ import { Prompt_CQJson } from '@/global/core/prompt/agent'; import { LLMModelItemType } from '@fastgpt/global/core/ai/model.d'; import { ModelTypeEnum, getLLMModel } from '@fastgpt/service/core/ai/model'; import { getHistories } from '../utils'; -import { formatModelChars2Points } from '@/service/support/wallet/usage/utils'; +import { formatModelChars2Points } from '@fastgpt/service/support/wallet/usage/utils'; type Props = ModuleDispatchProps<{ [ModuleInputKeyEnum.aiModel]: string; @@ -46,7 +47,7 @@ export const dispatchClassifyQuestion = async (props: Props): Promise { + const { arg, tokens } = await (async () => { if (cqModel.toolChoice) { return toolChoice({ ...props, @@ -65,7 +66,7 @@ export const dispatchClassifyQuestion = async (props: Props): Promise answer.includes(item.key) || answer.includes(item.value))?.key || ''; return { - charsLength: countMessagesChars(messages), + tokens: countMessagesTokens(messages), arg: { type: id } }; } diff --git a/projects/app/src/service/moduleDispatch/agent/extract.ts b/projects/app/src/service/moduleDispatch/agent/extract.ts index 53dd21c6a..54e1845f1 100644 --- a/projects/app/src/service/moduleDispatch/agent/extract.ts +++ b/projects/app/src/service/moduleDispatch/agent/extract.ts @@ -1,6 +1,7 @@ import { adaptChat2GptMessages } from '@fastgpt/global/core/chat/adapt'; -import { ChatContextFilter, countMessagesChars } from '@fastgpt/service/core/chat/utils'; -import type { moduleDispatchResType, ChatItemType } from '@fastgpt/global/core/chat/type.d'; +import { ChatContextFilter } from '@fastgpt/service/core/chat/utils'; +import type { ChatItemType } from '@fastgpt/global/core/chat/type.d'; +import { countMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; import { ChatRoleEnum } from '@fastgpt/global/core/chat/constants'; import { getAIApi } from '@fastgpt/service/core/ai/config'; import type { @@ -14,7 +15,7 @@ import { replaceVariable } from '@fastgpt/global/common/string/tools'; import { LLMModelItemType } from '@fastgpt/global/core/ai/model.d'; import { getHistories } from '../utils'; import { ModelTypeEnum, getLLMModel } from '@fastgpt/service/core/ai/model'; -import { formatModelChars2Points } from '@/service/support/wallet/usage/utils'; +import { formatModelChars2Points } from '@fastgpt/service/support/wallet/usage/utils'; type Props = ModuleDispatchProps<{ [ModuleInputKeyEnum.history]?: ChatItemType[]; @@ -46,7 +47,7 @@ export async function dispatchContentExtract(props: Props): Promise { const extractModel = getLLMModel(model); const chatHistories = getHistories(history, histories); - const { arg, charsLength } = await (async () => { + const { arg, tokens } = await (async () => { if (extractModel.toolChoice) { return toolChoice({ ...props, @@ -85,7 +86,7 @@ export async function dispatchContentExtract(props: Props): Promise { const { totalPoints, modelName } = formatModelChars2Points({ model: extractModel.model, - charsLength, + tokens, modelType: ModelTypeEnum.llm }); @@ -98,7 +99,7 @@ export async function dispatchContentExtract(props: Props): Promise { totalPoints: user.openaiAccount?.key ? 0 : totalPoints, model: modelName, query: content, - charsLength, + tokens, extractDescription: description, extractResult: arg, contextTotalLen: chatHistories.length + 2 @@ -108,7 +109,7 @@ export async function dispatchContentExtract(props: Props): Promise { moduleName: name, totalPoints: user.openaiAccount?.key ? 0 : totalPoints, model: modelName, - charsLength + tokens } ] }; @@ -170,6 +171,12 @@ ${description || '根据用户要求获取适当的 JSON 字符串。'} required: extractKeys.filter((item) => item.required).map((item) => item.key) } }; + const tools: any = [ + { + type: 'function', + function: agentFunction + } + ]; const ai = getAIApi({ userKey: user.openaiAccount, @@ -180,12 +187,7 @@ ${description || '根据用户要求获取适当的 JSON 字符串。'} model: extractModel.model, temperature: 0, messages: [...adaptMessages], - tools: [ - { - type: 'function', - function: agentFunction - } - ], + tools, tool_choice: { type: 'function', function: { name: agentFunName } } }); @@ -202,12 +204,9 @@ ${description || '根据用户要求获取适当的 JSON 字符串。'} } })(); - const functionChars = - description.length + extractKeys.reduce((sum, item) => sum + item.desc.length, 0); - return { rawResponse: response?.choices?.[0]?.message?.tool_calls?.[0]?.function?.arguments || '', - charsLength: countMessagesChars(messages) + functionChars, + tokens: countMessagesTokens(messages, tools), arg }; } @@ -257,7 +256,7 @@ Human: ${content}` if (start === -1 || end === -1) return { rawResponse: answer, - charsLength: countMessagesChars(messages), + tokens: countMessagesTokens(messages), arg: {} }; @@ -269,14 +268,14 @@ Human: ${content}` try { return { rawResponse: answer, - charsLength: countMessagesChars(messages), + tokens: countMessagesTokens(messages), arg: JSON.parse(jsonStr) as Record }; } catch (error) { return { rawResponse: answer, - charsLength: countMessagesChars(messages), + tokens: countMessagesTokens(messages), arg: {} }; } diff --git a/projects/app/src/service/moduleDispatch/chat/oneapi.ts b/projects/app/src/service/moduleDispatch/chat/oneapi.ts index 6f049bc5c..b074b4639 100644 --- a/projects/app/src/service/moduleDispatch/chat/oneapi.ts +++ b/projects/app/src/service/moduleDispatch/chat/oneapi.ts @@ -1,17 +1,17 @@ import type { NextApiResponse } from 'next'; -import { ChatContextFilter, countMessagesChars } from '@fastgpt/service/core/chat/utils'; -import type { moduleDispatchResType, ChatItemType } from '@fastgpt/global/core/chat/type.d'; +import { ChatContextFilter } from '@fastgpt/service/core/chat/utils'; +import type { ChatItemType } from '@fastgpt/global/core/chat/type.d'; import { ChatRoleEnum } from '@fastgpt/global/core/chat/constants'; import { sseResponseEventEnum } from '@fastgpt/service/common/response/constant'; import { textAdaptGptResponse } from '@/utils/adapt'; import { getAIApi } from '@fastgpt/service/core/ai/config'; import type { ChatCompletion, StreamChatType } from '@fastgpt/global/core/ai/type.d'; -import { formatModelChars2Points } from '@/service/support/wallet/usage/utils'; +import { formatModelChars2Points } from '@fastgpt/service/support/wallet/usage/utils'; import type { LLMModelItemType } from '@fastgpt/global/core/ai/model.d'; import { postTextCensor } from '@/service/common/censor'; import { ChatCompletionRequestMessageRoleEnum } from '@fastgpt/global/core/ai/constant'; import type { ModuleDispatchResponse, ModuleItemType } from '@fastgpt/global/core/module/type.d'; -import { countMessagesTokens, sliceMessagesTB } from '@fastgpt/global/common/string/tiktoken'; +import { countMessagesTokens } from '@fastgpt/global/common/string/tiktoken'; import { adaptChat2GptMessages } from '@fastgpt/global/core/chat/adapt'; import { Prompt_QuotePromptList, Prompt_QuoteTemplateList } from '@/global/core/prompt/AIChat'; import type { AIChatModuleProps } from '@fastgpt/global/core/module/node/type.d'; @@ -98,7 +98,7 @@ export const dispatchChatCompletion = async (props: ChatProps): Promise tokensLimit ? tokensLimit - promptsToken : maxToken; + if (maxToken <= 0) { + return Promise.reject('Over max token'); + } return { max_tokens: maxToken }; diff --git a/projects/app/src/service/moduleDispatch/dataset/search.ts b/projects/app/src/service/moduleDispatch/dataset/search.ts index 3f37e1e2b..742b7feac 100644 --- a/projects/app/src/service/moduleDispatch/dataset/search.ts +++ b/projects/app/src/service/moduleDispatch/dataset/search.ts @@ -1,5 +1,5 @@ import type { moduleDispatchResType } from '@fastgpt/global/core/chat/type.d'; -import { formatModelChars2Points } from '@/service/support/wallet/usage/utils'; +import { formatModelChars2Points } from '@fastgpt/service/support/wallet/usage/utils'; import type { SelectedDatasetType } from '@fastgpt/global/core/module/api.d'; import type { SearchDataResponseItemType } from '@fastgpt/global/core/dataset/type'; import type { @@ -12,7 +12,7 @@ import { ModuleInputKeyEnum, ModuleOutputKeyEnum } from '@fastgpt/global/core/mo import { DatasetSearchModeEnum } from '@fastgpt/global/core/dataset/constants'; import { getHistories } from '../utils'; import { datasetSearchQueryExtension } from '@fastgpt/service/core/dataset/search/utils'; -import { ChatModuleBillType } from '@fastgpt/global/support/wallet/bill/type'; +import { ChatModuleUsageType } from '@fastgpt/global/support/wallet/bill/type'; import { checkTeamReRankPermission } from '@fastgpt/service/support/permission/teamLimit'; type DatasetSearchProps = ModuleDispatchProps<{ @@ -85,7 +85,7 @@ export async function dispatchDatasetSearch( // start search const { searchRes, - charsLength, + tokens, usingSimilarityFilter, usingReRank: searchUsingReRank } = await searchDatasetData({ @@ -104,37 +104,37 @@ export async function dispatchDatasetSearch( // vector const { totalPoints, modelName } = formatModelChars2Points({ model: vectorModel.model, - charsLength, + tokens, modelType: ModelTypeEnum.vector }); const responseData: moduleDispatchResType & { totalPoints: number } = { totalPoints, query: concatQueries.join('\n'), model: modelName, - charsLength, + tokens, similarity: usingSimilarityFilter ? similarity : undefined, limit, searchMode, searchUsingReRank: searchUsingReRank }; - const moduleDispatchBills: ChatModuleBillType[] = [ + const moduleDispatchBills: ChatModuleUsageType[] = [ { totalPoints, moduleName: module.name, model: modelName, - charsLength + tokens } ]; if (aiExtensionResult) { const { totalPoints, modelName } = formatModelChars2Points({ model: aiExtensionResult.model, - charsLength: aiExtensionResult.charsLength, + tokens: aiExtensionResult.tokens, modelType: ModelTypeEnum.llm }); responseData.totalPoints += totalPoints; - responseData.charsLength = aiExtensionResult.charsLength; + responseData.tokens = aiExtensionResult.tokens; responseData.extensionModel = modelName; responseData.extensionResult = aiExtensionResult.extensionQueries?.join('\n') || @@ -144,7 +144,7 @@ export async function dispatchDatasetSearch( totalPoints, moduleName: 'core.module.template.Query extension', model: modelName, - charsLength: aiExtensionResult.charsLength + tokens: aiExtensionResult.tokens }); } diff --git a/projects/app/src/service/moduleDispatch/index.ts b/projects/app/src/service/moduleDispatch/index.ts index 1acdbe24b..4fa6ea15f 100644 --- a/projects/app/src/service/moduleDispatch/index.ts +++ b/projects/app/src/service/moduleDispatch/index.ts @@ -28,7 +28,7 @@ import { dispatchRunPlugin } from './plugin/run'; import { dispatchPluginInput } from './plugin/runInput'; import { dispatchPluginOutput } from './plugin/runOutput'; import { valueTypeFormat } from './utils'; -import { ChatModuleBillType } from '@fastgpt/global/support/wallet/bill/type'; +import { ChatModuleUsageType } from '@fastgpt/global/support/wallet/bill/type'; const callbackMap: Record<`${FlowNodeTypeEnum}`, Function> = { [FlowNodeTypeEnum.historyNode]: dispatchHistory, @@ -83,7 +83,7 @@ export async function dispatchModules({ // let storeData: Record = {}; // after module used let chatResponse: ChatHistoryItemResType[] = []; // response request and save to database let chatAnswerText = ''; // AI answer - let chatModuleBills: ChatModuleBillType[] = []; + let chatModuleBills: ChatModuleUsageType[] = []; let runningTime = Date.now(); function pushStore( @@ -95,7 +95,7 @@ export async function dispatchModules({ }: { answerText?: string; responseData?: ChatHistoryItemResType | ChatHistoryItemResType[]; - moduleDispatchBills?: ChatModuleBillType[]; + moduleDispatchBills?: ChatModuleUsageType[]; } ) { const time = Date.now(); @@ -165,7 +165,6 @@ export async function dispatchModules({ const filterModules = nextRunModules.filter((module) => { if (set.has(module.moduleId)) return false; set.add(module.moduleId); - ``; return true; }); diff --git a/projects/app/src/service/moduleDispatch/plugin/run.ts b/projects/app/src/service/moduleDispatch/plugin/run.ts index 244c25898..9f8bb099a 100644 --- a/projects/app/src/service/moduleDispatch/plugin/run.ts +++ b/projects/app/src/service/moduleDispatch/plugin/run.ts @@ -95,7 +95,7 @@ export const dispatchRunPlugin = async (props: RunPluginProps): Promise sum + (item.totalPoints || 0), 0), model: plugin.name, - charsLength: 0 + tokens: 0 } ], ...(output ? output.pluginOutput : {}) diff --git a/projects/app/src/service/moduleDispatch/tools/http468.ts b/projects/app/src/service/moduleDispatch/tools/http468.ts index 86f330358..f20630be6 100644 --- a/projects/app/src/service/moduleDispatch/tools/http468.ts +++ b/projects/app/src/service/moduleDispatch/tools/http468.ts @@ -10,6 +10,7 @@ import { import axios from 'axios'; import { valueTypeFormat } from '../utils'; import { SERVICE_LOCAL_HOST } from '@fastgpt/service/common/system/tools'; +import { addLog } from '@fastgpt/service/common/system/log'; type PropsArrType = { key: string; @@ -130,7 +131,7 @@ export const dispatchHttp468Request = async (props: HttpRequestProps): Promise 0 ? params : undefined, body: Object.keys(requestBody).length > 0 ? requestBody : undefined, headers: Object.keys(headers).length > 0 ? headers : undefined, - httpResult: { error: err } + httpResult: { error: formatHttpError(error) } } }; } @@ -280,21 +281,14 @@ function removeUndefinedSign(obj: Record) { } return obj; } -function httpRequestErrorResponseData(error: any) { - try { - return { - message: error?.message || undefined, - name: error?.name || undefined, - method: error?.config?.method || undefined, - baseURL: error?.config?.baseURL || undefined, - url: error?.config?.url || undefined, - code: error?.code || undefined, - status: error?.status || undefined - } - } catch (error) { - return { - message: 'Request Failed', - name: "AxiosError", - }; - } +function formatHttpError(error: any) { + return { + message: error?.message, + name: error?.name, + method: error?.config?.method, + baseURL: error?.config?.baseURL, + url: error?.config?.url, + code: error?.code, + status: error?.status + }; } diff --git a/projects/app/src/service/moduleDispatch/tools/queryExternsion.ts b/projects/app/src/service/moduleDispatch/tools/queryExternsion.ts index 469f712bb..879d7c504 100644 --- a/projects/app/src/service/moduleDispatch/tools/queryExternsion.ts +++ b/projects/app/src/service/moduleDispatch/tools/queryExternsion.ts @@ -5,7 +5,7 @@ import type { } from '@fastgpt/global/core/module/type.d'; import { ModuleInputKeyEnum, ModuleOutputKeyEnum } from '@fastgpt/global/core/module/constants'; import { ModelTypeEnum, getLLMModel } from '@fastgpt/service/core/ai/model'; -import { formatModelChars2Points } from '@/service/support/wallet/usage/utils'; +import { formatModelChars2Points } from '@fastgpt/service/support/wallet/usage/utils'; import { queryExtension } from '@fastgpt/service/core/ai/functions/queryExtension'; import { getHistories } from '../utils'; import { hashStr } from '@fastgpt/global/common/string/tools'; @@ -32,7 +32,7 @@ export const dispatchQueryExtension = async ({ const queryExtensionModel = getLLMModel(model); const chatHistories = getHistories(history, histories); - const { extensionQueries, charsLength } = await queryExtension({ + const { extensionQueries, tokens } = await queryExtension({ chatBg: systemPrompt, query: userChatInput, histories: chatHistories, @@ -43,7 +43,7 @@ export const dispatchQueryExtension = async ({ const { totalPoints, modelName } = formatModelChars2Points({ model: queryExtensionModel.model, - charsLength, + tokens, modelType: ModelTypeEnum.llm }); @@ -60,7 +60,7 @@ export const dispatchQueryExtension = async ({ [ModuleOutputKeyEnum.responseData]: { totalPoints, model: modelName, - charsLength, + tokens, query: userChatInput, textOutput: JSON.stringify(filterSameQueries) }, @@ -69,7 +69,7 @@ export const dispatchQueryExtension = async ({ moduleName: module.name, totalPoints, model: modelName, - charsLength + tokens } ], [ModuleOutputKeyEnum.text]: JSON.stringify(filterSameQueries) diff --git a/projects/app/src/service/mongo.ts b/projects/app/src/service/mongo.ts index 7378f713a..89c79e01b 100644 --- a/projects/app/src/service/mongo.ts +++ b/projects/app/src/service/mongo.ts @@ -1,4 +1,3 @@ -import { startQueue } from './utils/tools'; import { PRICE_SCALE } from '@fastgpt/global/support/wallet/constants'; import { MongoUser } from '@fastgpt/service/support/user/schema'; import { connectMongo } from '@fastgpt/service/common/mongo/init'; @@ -9,22 +8,29 @@ import { initVectorStore } from '@fastgpt/service/common/vectorStore/controller' import { getInitConfig } from '@/pages/api/common/system/getInitData'; import { startCron } from './common/system/cron'; import { mongoSessionRun } from '@fastgpt/service/common/mongo/sessionRun'; +import { initGlobal } from './common/system'; +import { startMongoWatch } from './common/system/volumnMongoWatch'; +import { startTrainingQueue } from './core/dataset/training/utils'; /** * connect MongoDB and init data */ export function connectToDatabase(): Promise { return connectMongo({ - beforeHook: () => {}, + beforeHook: () => { + initGlobal(); + }, afterHook: async () => { - initVectorStore(); - // start queue - startQueue(); + startMongoWatch(); + // cron + startCron(); // init system config getInitConfig(); - // cron - startCron(); + // init vector database + await initVectorStore(); + // start queue + startTrainingQueue(true); initRootUser(); } @@ -62,7 +68,7 @@ async function initRootUser() { rootId = _id; } // init root team - await createDefaultTeam({ userId: rootId, maxSize: 1, balance: 9999 * PRICE_SCALE, session }); + await createDefaultTeam({ userId: rootId, balance: 9999 * PRICE_SCALE, session }); }); console.log(`root user init:`, { diff --git a/projects/app/src/service/support/permission/auth/chat.ts b/projects/app/src/service/support/permission/auth/chat.ts index 199b6457e..f0993d29f 100644 --- a/projects/app/src/service/support/permission/auth/chat.ts +++ b/projects/app/src/service/support/permission/auth/chat.ts @@ -1,11 +1,16 @@ import { ChatSchema } from '@fastgpt/global/core/chat/type'; import { MongoChat } from '@fastgpt/service/core/chat/chatSchema'; import { AuthModeType } from '@fastgpt/service/support/permission/type'; -import { authOutLink } from './outLink'; +import { authOutLink, authOutLinkInit } from './outLink'; import { ChatErrEnum } from '@fastgpt/global/common/error/code/chat'; import { authUserRole } from '@fastgpt/service/support/permission/auth/user'; import { TeamMemberRoleEnum } from '@fastgpt/global/support/user/team/constant'; -import { AuthResponseType } from '@fastgpt/global/support/permission/type'; +import { authTeamSpaceToken } from './team'; +import { authCert } from '@fastgpt/service/support/permission/auth/common'; +import { authOutLinkValid } from '@fastgpt/service/support/permission/auth/outLink'; +import { AuthUserTypeEnum } from '@fastgpt/global/support/permission/constant'; +import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema'; +import { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat'; /* outLink: Must be the owner token: team owner and chat owner have all permissions @@ -14,46 +19,51 @@ export async function autChatCrud({ appId, chatId, shareId, - shareTeamId, outLinkUid, + + teamId: spaceTeamId, + teamToken, per = 'owner', ...props }: AuthModeType & { appId: string; chatId?: string; - shareTeamId?: string; shareId?: string; outLinkUid?: string; + + teamId?: string; + teamToken?: string; }): Promise<{ chat?: ChatSchema; isOutLink: boolean; uid?: string; }> { - const isOutLink = Boolean((shareId || shareTeamId) && outLinkUid); + const isOutLink = Boolean((shareId || spaceTeamId) && outLinkUid); if (!chatId) return { isOutLink, uid: outLinkUid }; const chat = await MongoChat.findOne({ appId, chatId }).lean(); - if (!chat) return { isOutLink, uid: outLinkUid }; - const { uid } = await (async () => { // outLink Auth if (shareId && outLinkUid) { const { uid } = await authOutLink({ shareId, outLinkUid }); - - // auth outLinkUid - if (chat.shareId === shareId && chat.outLinkUid === uid) { + if (!chat || (chat.shareId === shareId && chat.outLinkUid === uid)) { return { uid }; } return Promise.reject(ChatErrEnum.unAuthChat); } - if (shareTeamId && outLinkUid) { - if (chat.teamId == shareTeamId && chat.outLinkUid === outLinkUid) { - return { uid: outLinkUid }; + // auth team space chat + if (spaceTeamId && teamToken) { + const { uid } = await authTeamSpaceToken({ teamId: spaceTeamId, teamToken }); + if (!chat || (String(chat.teamId) === String(spaceTeamId) && chat.outLinkUid === uid)) { + return { uid }; } + return Promise.reject(ChatErrEnum.unAuthChat); } - // req auth + if (!chat) return { id: outLinkUid }; + + // auth req const { teamId, tmbId, role } = await authUserRole(props); if (String(teamId) !== String(chat.teamId)) return Promise.reject(ChatErrEnum.unAuthChat); @@ -67,9 +77,61 @@ export async function autChatCrud({ return Promise.reject(ChatErrEnum.unAuthChat); })(); + if (!chat) return { isOutLink, uid }; + return { chat, isOutLink, uid }; } + +/* + Different chat source + 1. token (header) + 2. apikey (header) + 3. share page (body: shareId outLinkUid) + 4. team chat page (body: teamId teamToken) +*/ +export async function authChatCert(props: AuthModeType) { + const { teamId, teamToken, shareId, outLinkUid } = props.req.body as OutLinkChatAuthProps; + + if (shareId && outLinkUid) { + const { shareChat } = await authOutLinkValid({ shareId }); + const { uid } = await authOutLinkInit({ + outLinkUid, + tokenUrl: shareChat.limit?.hookUrl + }); + + return { + teamId: String(shareChat.teamId), + tmbId: String(shareChat.tmbId), + authType: AuthUserTypeEnum.outLink, + apikey: '', + isOwner: false, + canWrite: false, + outLinkUid: uid + }; + } + if (teamId && teamToken) { + const { uid } = await authTeamSpaceToken({ teamId, teamToken }); + const tmb = await MongoTeamMember.findOne( + { teamId, role: TeamMemberRoleEnum.owner }, + 'tmbId' + ).lean(); + + if (!tmb) return Promise.reject(ChatErrEnum.unAuthChat); + + return { + teamId, + tmbId: String(tmb._id), + authType: AuthUserTypeEnum.teamDomain, + apikey: '', + isOwner: false, + canWrite: false, + outLinkUid: uid + }; + } + + return authCert(props); +} diff --git a/projects/app/src/service/support/permission/auth/team.ts b/projects/app/src/service/support/permission/auth/team.ts index 7abd366f8..3767a32de 100644 --- a/projects/app/src/service/support/permission/auth/team.ts +++ b/projects/app/src/service/support/permission/auth/team.ts @@ -1,9 +1,12 @@ import { UserErrEnum } from '@fastgpt/global/common/error/code/user'; import { TeamMemberWithUserSchema } from '@fastgpt/global/support/user/team/type'; import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema'; -import { MongoTeam } from '@fastgpt/service/support/user/team/teamSchema'; import { checkTeamAIPoints } from '@fastgpt/service/support/permission/teamLimit'; -import axios from 'axios'; +import { GET } from '@fastgpt/service/common/api/plusRequest'; +import { + AuthTeamTagTokenProps, + AuthTokenFromTeamDomainResponse +} from '@fastgpt/global/support/user/team/tag'; export async function getUserChatInfoAndAuthTeamPoints(tmbId: string) { const tmb = (await MongoTeamMember.findById(tmbId, 'teamId userId').populate( @@ -19,25 +22,21 @@ export async function getUserChatInfoAndAuthTeamPoints(tmbId: string) { }; } -type UserInfoType = { - data: { - uid: string; - tags: string[]; - }; -}; - -export async function getShareTeamUid(shareTeamId: string, authToken: string) { - try { - const teamInfo = await MongoTeam.findById(shareTeamId); - const tagsUrl = teamInfo?.tagsUrl; - const { data: userInfo } = await axios.post(tagsUrl + `/getUserInfo`, { autoken: authToken }); - - const uid = userInfo?.data?.uid; - if (uid) { - throw new Error('uid null'); - } - return uid; - } catch (err) { - return ''; - } +export function authTeamTagToken(data: AuthTeamTagTokenProps) { + return GET('/support/user/team/tag/authTeamToken', data); +} +export async function authTeamSpaceToken({ + teamId, + teamToken +}: { + teamId: string; + teamToken: string; +}) { + // get outLink and app + const data = await authTeamTagToken({ teamId, teamToken }); + const uid = data.uid; + + return { + uid + }; } diff --git a/projects/app/src/service/support/permission/auth/teamChat.ts b/projects/app/src/service/support/permission/auth/teamChat.ts deleted file mode 100644 index 0fcdb6370..000000000 --- a/projects/app/src/service/support/permission/auth/teamChat.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { POST } from '@fastgpt/service/common/api/plusRequest'; -import type { AuthOutLinkChatProps } from '@fastgpt/global/support/outLink/api.d'; -import type { chatAppListSchema } from '@fastgpt/global/core/chat/type.d'; -import { getUserChatInfoAndAuthTeamPoints } from './team'; -import { MongoTeam } from '@fastgpt/service/support/user/team/teamSchema'; -import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema'; - -export function authChatTeamInfo(data: { shareTeamId: string; authToken: string }) { - return POST('/core/chat/init', data); -} - -export async function authTeamShareChatStart({ - teamId, - ip, - outLinkUid, - question -}: AuthOutLinkChatProps & { - teamId: string; -}) { - // get outLink and app - const { teamInfo, uid } = await authChatTeamInfo({ shareTeamId: teamId, authToken: outLinkUid }); - // check balance and chat limit - const tmb = await MongoTeamMember.findOne({ teamId, userId: String(teamInfo.ownerId) }); - - if (!tmb) { - throw new Error('can not find it'); - } - - const { user } = await getUserChatInfoAndAuthTeamPoints(String(tmb._id)); - - return { - user, - tmbId: String(tmb._id), - uid: uid - }; -} diff --git a/projects/app/src/service/support/wallet/usage/push.ts b/projects/app/src/service/support/wallet/usage/push.ts index 93ee28bcc..bc122f420 100644 --- a/projects/app/src/service/support/wallet/usage/push.ts +++ b/projects/app/src/service/support/wallet/usage/push.ts @@ -1,10 +1,9 @@ import { UsageSourceEnum } from '@fastgpt/global/support/wallet/usage/constants'; import { ModelTypeEnum } from '@fastgpt/service/core/ai/model'; -import type { ChatHistoryItemResType } from '@fastgpt/global/core/chat/type.d'; import { addLog } from '@fastgpt/service/common/system/log'; import { createUsage, concatUsage } from './controller'; -import { formatModelChars2Points } from '@/service/support/wallet/usage/utils'; -import { ChatModuleBillType } from '@fastgpt/global/support/wallet/bill/type'; +import { formatModelChars2Points } from '@fastgpt/service/support/wallet/usage/utils'; +import { ChatModuleUsageType } from '@fastgpt/global/support/wallet/bill/type'; export const pushChatUsage = ({ appName, @@ -19,7 +18,7 @@ export const pushChatUsage = ({ teamId: string; tmbId: string; source: `${UsageSourceEnum}`; - moduleDispatchBills: ChatModuleBillType[]; + moduleDispatchBills: ChatModuleUsageType[]; }) => { const totalPoints = moduleDispatchBills.reduce((sum, item) => sum + (item.totalPoints || 0), 0); @@ -34,7 +33,7 @@ export const pushChatUsage = ({ moduleName: item.moduleName, amount: item.totalPoints || 0, model: item.model, - charsLength: item.charsLength + tokens: item.tokens })) }); addLog.info(`finish completions`, { @@ -50,20 +49,20 @@ export const pushQAUsage = async ({ teamId, tmbId, model, - charsLength, + tokens, billId }: { teamId: string; tmbId: string; model: string; - charsLength: number; + tokens: number; billId: string; }) => { // 计算价格 const { totalPoints } = formatModelChars2Points({ model, modelType: ModelTypeEnum.llm, - charsLength + tokens }); concatUsage({ @@ -71,7 +70,7 @@ export const pushQAUsage = async ({ teamId, tmbId, totalPoints, - charsLength, + tokens, listIndex: 1 }); @@ -82,30 +81,30 @@ export const pushGenerateVectorUsage = ({ billId, teamId, tmbId, - charsLength, + tokens, model, source = UsageSourceEnum.fastgpt, extensionModel, - extensionCharsLength + extensionTokens }: { billId?: string; teamId: string; tmbId: string; - charsLength: number; + tokens: number; model: string; source?: `${UsageSourceEnum}`; extensionModel?: string; - extensionCharsLength?: number; + extensionTokens?: number; }) => { const { totalPoints: totalVector, modelName: vectorModelName } = formatModelChars2Points({ modelType: ModelTypeEnum.vector, model, - charsLength + tokens }); const { extensionTotalPoints, extensionModelName } = (() => { - if (!extensionModel || !extensionCharsLength) + if (!extensionModel || !extensionTokens) return { extensionTotalPoints: 0, extensionModelName: '' @@ -113,7 +112,7 @@ export const pushGenerateVectorUsage = ({ const { totalPoints, modelName } = formatModelChars2Points({ modelType: ModelTypeEnum.llm, model: extensionModel, - charsLength: extensionCharsLength + tokens: extensionTokens }); return { extensionTotalPoints: totalPoints, @@ -130,7 +129,7 @@ export const pushGenerateVectorUsage = ({ tmbId, totalPoints, billId, - charsLength, + tokens, listIndex: 0 }); } else { @@ -145,7 +144,7 @@ export const pushGenerateVectorUsage = ({ moduleName: 'support.wallet.moduleName.index', amount: totalVector, model: vectorModelName, - charsLength + tokens }, ...(extensionModel !== undefined ? [ @@ -153,7 +152,7 @@ export const pushGenerateVectorUsage = ({ moduleName: 'core.module.template.Query extension', amount: extensionTotalPoints, model: extensionModelName, - charsLength: extensionCharsLength + tokens: extensionTokens } ] : []) @@ -164,17 +163,17 @@ export const pushGenerateVectorUsage = ({ }; export const pushQuestionGuideUsage = ({ - charsLength, + tokens, teamId, tmbId }: { - charsLength: number; + tokens: number; teamId: string; tmbId: string; }) => { const qgModel = global.llmModels[0]; const { totalPoints, modelName } = formatModelChars2Points({ - charsLength, + tokens, model: qgModel.model, modelType: ModelTypeEnum.llm }); @@ -190,14 +189,14 @@ export const pushQuestionGuideUsage = ({ moduleName: 'core.app.Next Step Guide', amount: totalPoints, model: modelName, - charsLength + tokens } ] }); }; export function pushAudioSpeechUsage({ - appName = 'support.wallet.bill.Audio Speech', + appName = 'support.wallet.usage.Audio Speech', model, charsLength, teamId, @@ -213,7 +212,7 @@ export function pushAudioSpeechUsage({ }) { const { totalPoints, modelName } = formatModelChars2Points({ model, - charsLength, + tokens: charsLength, modelType: ModelTypeEnum.audioSpeech }); @@ -249,12 +248,12 @@ export function pushWhisperUsage({ const { totalPoints, modelName } = formatModelChars2Points({ model: whisperModel.model, - charsLength: duration, + tokens: duration, modelType: ModelTypeEnum.whisper, multiple: 60 }); - const name = 'support.wallet.bill.Whisper'; + const name = 'support.wallet.usage.Whisper'; createUsage({ teamId, diff --git a/projects/app/src/service/support/wallet/usage/utils.ts b/projects/app/src/service/support/wallet/usage/utils.ts index d5d2faea1..e3d0f0999 100644 --- a/projects/app/src/service/support/wallet/usage/utils.ts +++ b/projects/app/src/service/support/wallet/usage/utils.ts @@ -1,4 +1,3 @@ -import { ModelTypeEnum, getModelMap } from '@fastgpt/service/core/ai/model'; import { AuthUserTypeEnum } from '@fastgpt/global/support/permission/constant'; import { UsageSourceEnum } from '@fastgpt/global/support/wallet/usage/constants'; @@ -16,29 +15,3 @@ export function authType2UsageSource({ if (authType === AuthUserTypeEnum.apikey) return UsageSourceEnum.api; return UsageSourceEnum.fastgpt; } - -export const formatModelChars2Points = ({ - model, - charsLength = 0, - modelType, - multiple = 1000 -}: { - model: string; - charsLength: number; - modelType: `${ModelTypeEnum}`; - multiple?: number; -}) => { - const modelData = getModelMap?.[modelType]?.(model); - if (!modelData) - return { - totalPoints: 0, - modelName: '' - }; - - const totalPoints = (modelData.charsPointsPrice || 0) * (charsLength / multiple); - - return { - modelName: modelData.name, - totalPoints - }; -}; diff --git a/projects/app/src/service/utils/tools.ts b/projects/app/src/service/utils/tools.ts deleted file mode 100644 index 207dc4274..000000000 --- a/projects/app/src/service/utils/tools.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { generateQA } from '../events/generateQA'; -import { generateVector } from '../events/generateVector'; - -/* start task */ -export const startQueue = () => { - if (!global.systemEnv) return; - - generateQA(); - generateVector(); -}; diff --git a/projects/app/src/types/index.d.ts b/projects/app/src/types/index.d.ts index e2e8fc97c..1acc27f39 100644 --- a/projects/app/src/types/index.d.ts +++ b/projects/app/src/types/index.d.ts @@ -9,7 +9,6 @@ import { } from '@fastgpt/global/core/ai/model.d'; import { TrackEventName } from '@/constants/common'; import { AppSimpleEditConfigTemplateType } from '@fastgpt/global/core/app/type'; -import { FastGPTFeConfigsType, SystemEnvType } from '@fastgpt/global/common/system/types'; import { SubPlanType } from '@fastgpt/global/support/wallet/sub/type'; export type PagingData = { @@ -22,7 +21,6 @@ export type PagingData = { export type RequestPaging = { pageNum: number; pageSize: number; [key]: any }; declare global { - var systemEnv: SystemEnvType; var systemInitd: boolean; var qaQueueLen: number; diff --git a/projects/app/src/utils/service/core/chat/index.ts b/projects/app/src/utils/service/core/chat/index.ts index 2c0d13127..13db150f7 100644 --- a/projects/app/src/utils/service/core/chat/index.ts +++ b/projects/app/src/utils/service/core/chat/index.ts @@ -1,13 +1,14 @@ import type { ChatHistoryItemResType } from '@fastgpt/global/core/chat/type.d'; import { FlowNodeTypeEnum } from '@fastgpt/global/core/module/node/constant'; -export const selectShareResponse = ({ +export const selectSimpleChatResponse = ({ responseData = [] }: { responseData?: ChatHistoryItemResType[]; }) => { const filedList = ['quoteList', 'moduleType']; const filterModuleTypeList: any[] = [FlowNodeTypeEnum.chatNode]; + return responseData .filter((item) => filterModuleTypeList.includes(item.moduleType)) .map((item) => { diff --git a/projects/app/src/web/common/hooks/useSpeech.ts b/projects/app/src/web/common/hooks/useSpeech.ts index 7f44eac1b..3efba434f 100644 --- a/projects/app/src/web/common/hooks/useSpeech.ts +++ b/projects/app/src/web/common/hooks/useSpeech.ts @@ -3,9 +3,9 @@ import { POST } from '../api/request'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useTranslation } from 'next-i18next'; import { getErrText } from '@fastgpt/global/common/error/utils'; +import { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat'; -export const useSpeech = (props?: { shareId?: string }) => { - const { shareId } = props || {}; +export const useSpeech = (props?: OutLinkChatAuthProps) => { const { t } = useTranslation(); const mediaRecorder = useRef(); // const mediaStream = useRef(); @@ -79,7 +79,13 @@ export const useSpeech = (props?: { shareId?: string }) => { const duration = Math.round((Date.now() - startTimestamp.current) / 1000); formData.append('file', blob, 'recording.webm'); - formData.append('metadata', JSON.stringify({ duration, shareId })); + formData.append( + 'data', + JSON.stringify({ + ...props, + duration + }) + ); setIsTransCription(true); try { diff --git a/projects/app/src/web/common/system/doc.ts b/projects/app/src/web/common/system/doc.ts index 5e4f264d1..1d1ccd44b 100644 --- a/projects/app/src/web/common/system/doc.ts +++ b/projects/app/src/web/common/system/doc.ts @@ -3,6 +3,6 @@ export const getDocPath = (path: string) => { const feConfigs = useSystemStore.getState().feConfigs; if (!feConfigs?.docUrl) return ''; - if (feConfigs.docUrl.endsWith('/')) return feConfigs.docUrl; + if (feConfigs.docUrl.endsWith('/')) return feConfigs.docUrl.slice(0, -1); return feConfigs.docUrl + path; }; diff --git a/projects/app/src/web/common/utils/voice.ts b/projects/app/src/web/common/utils/voice.ts index 5140d20c2..fb58d2fa4 100644 --- a/projects/app/src/web/common/utils/voice.ts +++ b/projects/app/src/web/common/utils/voice.ts @@ -4,12 +4,11 @@ import { getErrText } from '@fastgpt/global/common/error/utils'; import type { AppTTSConfigType } from '@fastgpt/global/core/module/type.d'; import { TTSTypeEnum } from '@/constants/app'; import { useTranslation } from 'next-i18next'; -import { useRouter } from 'next/router'; +import type { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat.d'; -export const useAudioPlay = (props?: { ttsConfig?: AppTTSConfigType }) => { +export const useAudioPlay = (props?: OutLinkChatAuthProps & { ttsConfig?: AppTTSConfigType }) => { const { t } = useTranslation(); - const { shareId } = useRouter().query as { shareId?: string }; - const { ttsConfig } = props || {}; + const { ttsConfig, shareId, outLinkUid, teamId, teamToken } = props || {}; const { toast } = useToast(); const [audio, setAudio] = useState(); const [audioLoading, setAudioLoading] = useState(false); @@ -63,7 +62,10 @@ export const useAudioPlay = (props?: { ttsConfig?: AppTTSConfigType }) => { chatItemId, ttsConfig, input: text, - shareId + shareId, + outLinkUid, + teamId, + teamToken }) }); setAudioLoading(false); diff --git a/projects/app/src/web/core/chat/api.ts b/projects/app/src/web/core/chat/api.ts index 0ad81d9e5..faf4b4621 100644 --- a/projects/app/src/web/core/chat/api.ts +++ b/projects/app/src/web/core/chat/api.ts @@ -1,12 +1,13 @@ import { GET, POST, DELETE, PUT } from '@/web/common/api/request'; -import type { ChatHistoryItemType, chatAppListSchema } from '@fastgpt/global/core/chat/type.d'; +import type { ChatHistoryItemType, ChatAppListSchema } from '@fastgpt/global/core/chat/type.d'; import type { CloseCustomFeedbackParams, InitChatProps, InitChatResponse, InitOutLinkChatProps, - getHistoriesProps + GetHistoriesProps, + InitTeamChatProps } from '@/global/core/chat/api.d'; import type { AdminUpdateFeedbackParams, @@ -16,37 +17,23 @@ import type { UpdateHistoryProps } from '@/global/core/chat/api.d'; import { UpdateChatFeedbackProps } from '@fastgpt/global/core/chat/api'; - -/** - * 根据队伍ID和获取 - */ -export const getChatListById = (data: { shareTeamId: string; authToken: string }) => - POST(`/proApi/core/chat/init`, data); - -/** - * 获取团队分享的对话列表 initTeamChat - * @param data - * @returns - */ -export const getinitTeamChat = (data: { teamId: string; authToken: string; appId: string }) => - GET(`/proApi/core/chat/initTeamChat`, data); +import { AuthTeamTagTokenProps } from '@fastgpt/global/support/user/team/tag'; +import { AppListItemType } from '@fastgpt/global/core/app/type'; /** * 获取初始化聊天内容 */ export const getInitChatInfo = (data: InitChatProps) => GET(`/core/chat/init`, data); -export const getInitChatInfoTeam = (data: InitChatProps) => - GET(`/core/chat/init`, data); export const getInitOutLinkChatInfo = (data: InitOutLinkChatProps) => GET(`/core/chat/outLink/init`, data); -export const getTeamChatInfo = (data: { appId: string; chatId: string; outLinkUid?: string }) => +export const getTeamChatInfo = (data: InitTeamChatProps) => GET(`/core/chat/team/init`, data); /** * get current window history(appid or shareId) */ -export const getChatHistories = (data: getHistoriesProps) => +export const getChatHistories = (data: GetHistoriesProps) => POST('/core/chat/getHistories', data); /** @@ -79,3 +66,18 @@ export const updateChatAdminFeedback = (data: AdminUpdateFeedbackParams) => export const closeCustomFeedback = (data: CloseCustomFeedbackParams) => POST('/core/chat/feedback/closeCustom', data).catch(); + +/* team chat */ +/** + * Get the app that can be used with this token + */ +export const getMyTokensApps = (data: AuthTeamTagTokenProps) => + GET(`/proApi/support/user/team/tag/getAppsByTeamTokens`, data); + +/** + * 获取团队分享的对话列表 initTeamChat + * @param data + * @returns + */ +export const getinitTeamChat = (data: { teamId: string; authToken: string; appId: string }) => + GET(`/proApi/core/chat/initTeamChat`, data); diff --git a/projects/app/src/web/core/chat/storeChat.ts b/projects/app/src/web/core/chat/storeChat.ts index d721e754f..419e24d2f 100644 --- a/projects/app/src/web/core/chat/storeChat.ts +++ b/projects/app/src/web/core/chat/storeChat.ts @@ -4,7 +4,7 @@ import { immer } from 'zustand/middleware/immer'; import type { ChatHistoryItemType } from '@fastgpt/global/core/chat/type.d'; import type { InitChatResponse, - getHistoriesProps, + GetHistoriesProps, ClearHistoriesProps, DelHistoryProps, UpdateHistoryProps, @@ -21,7 +21,7 @@ import { defaultChatData } from '@/global/core/chat/constants'; type State = { histories: ChatHistoryItemType[]; - loadHistories: (data: getHistoriesProps) => Promise; + loadHistories: (data: GetHistoriesProps) => Promise; delOneHistory(data: DelHistoryProps): Promise; clearHistories(data: ClearHistoriesProps): Promise; pushHistory: (history: ChatHistoryItemType) => void; diff --git a/projects/app/src/web/core/chat/storeTeamChat.ts b/projects/app/src/web/core/chat/storeTeamChat.ts deleted file mode 100644 index 82521d91b..000000000 --- a/projects/app/src/web/core/chat/storeTeamChat.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { create } from 'zustand'; -import { devtools, persist } from 'zustand/middleware'; -import { immer } from 'zustand/middleware/immer'; -import type { ChatHistoryItemType } from '@fastgpt/global/core/chat/type.d'; -import { customAlphabet } from 'nanoid'; -const nanoid = customAlphabet( - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ1234567890_', - 24 -); - -type State = { - localUId: string; - teamShareChatHistory: (ChatHistoryItemType & { delete?: boolean })[]; - clearLocalHistory: (shareId?: string) => void; -}; - -export const useTeamShareChatStore = create()( - devtools( - persist( - immer((set, get) => ({ - localUId: `shareChat-${Date.now()}-${nanoid()}`, - teamShareChatHistory: [], // old version field - clearLocalHistory() { - // abandon - set((state) => { - state.teamShareChatHistory = state.teamShareChatHistory.map((item) => ({ - ...item, - delete: true - })); - }); - } - })), - { - name: 'shareChatStore', - partialize: (state) => ({ - localUId: state.localUId, - shareChatHistory: state.teamShareChatHistory - }) - } - ) - ) -); diff --git a/projects/app/src/web/support/user/api.ts b/projects/app/src/web/support/user/api.ts index e88f6baac..7abe534eb 100644 --- a/projects/app/src/web/support/user/api.ts +++ b/projects/app/src/web/support/user/api.ts @@ -1,7 +1,7 @@ import { GET, POST, PUT } from '@/web/common/api/request'; import { hashStr } from '@fastgpt/global/common/string/tools'; import type { ResLogin } from '@/global/support/api/userRes.d'; -import { UserAuthTypeEnum } from '@fastgpt/global/support/user/constant'; +import { UserAuthTypeEnum } from '@fastgpt/global/support/user/auth/constants'; import { UserUpdateParams } from '@/types/user'; import { UserType } from '@fastgpt/global/support/user/type.d'; import type { @@ -9,6 +9,7 @@ import type { OauthLoginProps, PostLoginProps } from '@fastgpt/global/support/user/api.d'; +import { GetWXLoginQRResponse } from '@fastgpt/global/support/user/login/api.d'; export const sendAuthCode = (data: { username: string; @@ -71,3 +72,9 @@ export const postLogin = ({ password, ...props }: PostLoginProps) => export const loginOut = () => GET('/support/user/account/loginout'); export const putUserInfo = (data: UserUpdateParams) => PUT('/support/user/account/update', data); + +export const getWXLoginQR = () => + GET('/proApi/support/user/account/login/wx/getQR'); + +export const getWXLoginResult = (code: string) => + GET(`/proApi/support/user/account/login/wx/getResult`, { code }); diff --git a/projects/app/src/web/support/user/hooks/useSendCode.ts b/projects/app/src/web/support/user/hooks/useSendCode.ts index 177a09094..f0970b1a3 100644 --- a/projects/app/src/web/support/user/hooks/useSendCode.ts +++ b/projects/app/src/web/support/user/hooks/useSendCode.ts @@ -1,6 +1,6 @@ import { useState, useMemo, useCallback } from 'react'; import { sendAuthCode } from '@/web/support/user/api'; -import { UserAuthTypeEnum } from '@fastgpt/global/support/user/constant'; +import { UserAuthTypeEnum } from '@fastgpt/global/support/user/auth/constants'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { getErrText } from '@fastgpt/global/common/error/utils'; import { useTranslation } from 'next-i18next'; diff --git a/projects/app/src/web/support/user/team/api.ts b/projects/app/src/web/support/user/team/api.ts index 0250a2617..372df3ca7 100644 --- a/projects/app/src/web/support/user/team/api.ts +++ b/projects/app/src/web/support/user/team/api.ts @@ -8,7 +8,7 @@ import { UpdateTeamMemberProps, UpdateTeamProps } from '@fastgpt/global/support/user/team/controller.d'; -import type { TeamTagsSchema } from '@fastgpt/global/support/user/team/type'; +import type { TeamTagItemType, TeamTagSchema } from '@fastgpt/global/support/user/team/type'; import { TeamItemType, TeamMemberItemType, @@ -25,14 +25,6 @@ export const putUpdateTeam = (data: UpdateTeamProps) => PUT(`/proApi/support/user/team/update`, data); export const putSwitchTeam = (teamId: string) => PUT(`/proApi/support/user/team/switch`, { teamId }); -export const updateTags = (teamId: string, tagsUrl: string) => - POST(`/proApi/support/user/team/tags/asyncTags`, { teamId, tagsUrl }); -export const getTeamsTags = (teamId: string) => - GET(`/proApi/support/user/team/tags/list`, { teamId }); -export const putUpdateTeamTags = (data: any) => - PUT(`/proApi/support/user/team/tags/updateUrl`, data); -export const insertTeamsTags = (tags: Array) => - POST(`/proApi/support/user/team/tags/create`, tags); /* --------------- team member ---------------- */ export const getTeamMembers = (teamId: string) => @@ -50,6 +42,11 @@ export const updateInviteResult = (data: UpdateInviteProps) => export const delLeaveTeam = (teamId: string) => DELETE('/proApi/support/user/team/member/leave', { teamId }); +/* --------------- team tags ---------------- */ +export const getTeamsTags = () => GET(`/proApi/support/user/team/tag/list`); +export const loadTeamTagsByDomain = (domain: string) => + GET(`/proApi/support/user/team/tag/async`, { domain }); + /* team limit */ export const checkTeamExportDatasetLimit = (datasetId: string) => GET(`/support/user/team/limit/exportDatasetLimit`, { datasetId });