diff --git a/package.json b/package.json index 6142c536d..b6069da58 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", - "ai": "^2.2.37", + "@ai-sdk/svelte": "^1.1.22", "analytics": "^0.8.14", "cron-parser": "^4.9.0", "dayjs": "^1.11.13", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72072365e..dc75b7bce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@ai-sdk/svelte': + specifier: ^1.1.22 + version: 1.1.22(svelte@4.2.19)(zod@3.24.2) '@appwrite.io/console': specifier: 1.5.2 version: 1.5.2 @@ -26,9 +29,6 @@ importers: '@stripe/stripe-js': specifier: ^3.5.0 version: 3.5.0 - ai: - specifier: ^2.2.37 - version: 2.2.37(react@18.3.1)(solid-js@1.9.0)(svelte@4.2.19)(vue@3.5.8(typescript@5.6.3)) analytics: specifier: ^0.8.14 version: 0.8.14(@types/dlv@1.1.4) @@ -174,6 +174,37 @@ packages: '@adobe/css-tools@4.4.1': resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} + '@ai-sdk/provider-utils@2.1.11': + resolution: {integrity: sha512-lMnXA5KaRJidzW7gQmlo/SnX6D+AKk5GxHFcQtOaGOSJNmu/qcNZc1rGaO7K5qW52OvCLXtnWudR4cc/FvMpVQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@ai-sdk/provider@1.0.10': + resolution: {integrity: sha512-pco8Zl9U0xwXI+nCLc0woMtxbvjU8hRmGTseAUiPHFLYAAL8trRPCukg69IDeinOvIeo1SmXxAIdWWPZOLb4Cg==} + engines: {node: '>=18'} + + '@ai-sdk/svelte@1.1.22': + resolution: {integrity: sha512-xtJjvEPHD8GDB1iODvsRLKplZ9CVUN/gT4U+nttuEvjV42qoPXKkrWwjTLEdWKnwTnoHuuI8mnQMje6RhFWtpA==} + engines: {node: '>=18'} + peerDependencies: + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + '@ai-sdk/ui-utils@1.1.17': + resolution: {integrity: sha512-fCnp/wntZGqPf6tiCmhuQoSDLSBhXoI5DU2JX4As96EO870+jliE6ozvYUwYOZC6Ta2OKAjjWPcSP7HeHX0b+g==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -1435,35 +1466,6 @@ packages: '@vitest/utils@1.6.1': resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==} - '@vue/compiler-core@3.5.8': - resolution: {integrity: sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==} - - '@vue/compiler-dom@3.5.8': - resolution: {integrity: sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==} - - '@vue/compiler-sfc@3.5.8': - resolution: {integrity: sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==} - - '@vue/compiler-ssr@3.5.8': - resolution: {integrity: sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==} - - '@vue/reactivity@3.5.8': - resolution: {integrity: sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg==} - - '@vue/runtime-core@3.5.8': - resolution: {integrity: sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ==} - - '@vue/runtime-dom@3.5.8': - resolution: {integrity: sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ==} - - '@vue/server-renderer@3.5.8': - resolution: {integrity: sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA==} - peerDependencies: - vue: 3.5.8 - - '@vue/shared@3.5.8': - resolution: {integrity: sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==} - abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -1491,24 +1493,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - ai@2.2.37: - resolution: {integrity: sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==} - engines: {node: '>=14.6'} - peerDependencies: - react: ^18.2.0 - solid-js: ^1.7.7 - svelte: ^3.0.0 || ^4.0.0 - vue: ^3.3.4 - peerDependenciesMeta: - react: - optional: true - solid-js: - optional: true - svelte: - optional: true - vue: - optional: true - ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1763,9 +1747,6 @@ packages: resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} engines: {node: '>=14'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - data-urls@4.0.0: resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} engines: {node: '>=14'} @@ -1986,9 +1967,6 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1996,9 +1974,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eventsource-parser@1.0.0: - resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==} - engines: {node: '>=14.18'} + eventsource-parser@3.0.0: + resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} + engines: {node: '>=18.0.0'} execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -2558,6 +2536,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2616,10 +2597,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -2735,13 +2712,13 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.9: + resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -3050,10 +3027,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3157,6 +3130,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3166,16 +3142,6 @@ packages: engines: {node: '>=10'} hasBin: true - seroval-plugins@1.1.1: - resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.1.1: - resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} - engines: {node: '>=10'} - set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -3227,16 +3193,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - solid-js@1.9.0: - resolution: {integrity: sha512-MDRx9+mtTBYfaY+Xy+F+GI57U04uYXj/I7jWQISzDUTvDXKOiPltOzoCSLXn0vk5mhs/OPZlG0UoWBaKPvlWBQ==} - - solid-swr-store@0.10.7: - resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} - engines: {node: '>=10'} - peerDependencies: - solid-js: ^1.2 - swr-store: ^0.10 - sorcery@0.11.1: resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} hasBin: true @@ -3259,11 +3215,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sswr@2.0.0: - resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} - peerDependencies: - svelte: ^4.0.0 - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -3440,23 +3391,6 @@ packages: resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==} engines: {node: '>=16'} - swr-store@0.10.6: - resolution: {integrity: sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw==} - engines: {node: '>=10'} - - swr@2.2.0: - resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 - - swrev@4.0.0: - resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} - - swrv@1.0.4: - resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} - peerDependencies: - vue: '>=3.2.26 < 4' - symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -3580,11 +3514,6 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3661,14 +3590,6 @@ packages: jsdom: optional: true - vue@3.5.8: - resolution: {integrity: sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -3791,6 +3712,14 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + zod-to-json-schema@3.24.3: + resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + zrender@5.6.0: resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} @@ -3798,6 +3727,36 @@ snapshots: '@adobe/css-tools@4.4.1': {} + '@ai-sdk/provider-utils@2.1.11(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.10 + eventsource-parser: 3.0.0 + nanoid: 3.3.9 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.24.2 + + '@ai-sdk/provider@1.0.10': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/svelte@1.1.22(svelte@4.2.19)(zod@3.24.2)': + dependencies: + '@ai-sdk/provider-utils': 2.1.11(zod@3.24.2) + '@ai-sdk/ui-utils': 1.1.17(zod@3.24.2) + optionalDependencies: + svelte: 4.2.19 + transitivePeerDependencies: + - zod + + '@ai-sdk/ui-utils@1.1.17(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.0.10 + '@ai-sdk/provider-utils': 2.1.11(zod@3.24.2) + zod-to-json-schema: 3.24.3(zod@3.24.2) + optionalDependencies: + zod: 3.24.2 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -5309,60 +5268,6 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@vue/compiler-core@3.5.8': - dependencies: - '@babel/parser': 7.26.2 - '@vue/shared': 3.5.8 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.8': - dependencies: - '@vue/compiler-core': 3.5.8 - '@vue/shared': 3.5.8 - - '@vue/compiler-sfc@3.5.8': - dependencies: - '@babel/parser': 7.26.2 - '@vue/compiler-core': 3.5.8 - '@vue/compiler-dom': 3.5.8 - '@vue/compiler-ssr': 3.5.8 - '@vue/shared': 3.5.8 - estree-walker: 2.0.2 - magic-string: 0.30.13 - postcss: 8.4.49 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.8': - dependencies: - '@vue/compiler-dom': 3.5.8 - '@vue/shared': 3.5.8 - - '@vue/reactivity@3.5.8': - dependencies: - '@vue/shared': 3.5.8 - - '@vue/runtime-core@3.5.8': - dependencies: - '@vue/reactivity': 3.5.8 - '@vue/shared': 3.5.8 - - '@vue/runtime-dom@3.5.8': - dependencies: - '@vue/reactivity': 3.5.8 - '@vue/runtime-core': 3.5.8 - '@vue/shared': 3.5.8 - csstype: 3.1.3 - - '@vue/server-renderer@3.5.8(vue@3.5.8(typescript@5.6.3))': - dependencies: - '@vue/compiler-ssr': 3.5.8 - '@vue/shared': 3.5.8 - vue: 3.5.8(typescript@5.6.3) - - '@vue/shared@3.5.8': {} - abab@2.0.6: {} acorn-import-attributes@1.9.5(acorn@8.14.0): @@ -5385,21 +5290,6 @@ snapshots: transitivePeerDependencies: - supports-color - ai@2.2.37(react@18.3.1)(solid-js@1.9.0)(svelte@4.2.19)(vue@3.5.8(typescript@5.6.3)): - dependencies: - eventsource-parser: 1.0.0 - nanoid: 3.3.6 - solid-swr-store: 0.10.7(solid-js@1.9.0)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.19) - swr: 2.2.0(react@18.3.1) - swr-store: 0.10.6 - swrv: 1.0.4(vue@3.5.8(typescript@5.6.3)) - optionalDependencies: - react: 18.3.1 - solid-js: 1.9.0 - svelte: 4.2.19 - vue: 3.5.8(typescript@5.6.3) - ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -5699,8 +5589,6 @@ snapshots: dependencies: rrweb-cssom: 0.6.0 - csstype@3.1.3: {} - data-urls@4.0.0: dependencies: abab: 2.0.6 @@ -5962,15 +5850,13 @@ snapshots: estraverse@5.3.0: {} - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.6 esutils@2.0.3: {} - eventsource-parser@1.0.0: {} + eventsource-parser@3.0.0: {} execa@5.1.1: dependencies: @@ -6737,6 +6623,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} @@ -6781,10 +6669,6 @@ snapshots: lodash@4.17.21: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - loupe@2.3.7: dependencies: get-func-name: 2.0.2 @@ -6885,10 +6769,10 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.6: {} - nanoid@3.3.7: {} + nanoid@3.3.9: {} + nanoid@5.0.8: {} natural-compare@1.4.0: {} @@ -7145,10 +7029,6 @@ snapshots: react-is@18.3.1: {} - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -7275,16 +7155,12 @@ snapshots: dependencies: xmlchars: 2.2.0 + secure-json-parse@2.7.0: {} + semver@6.3.1: {} semver@7.6.3: {} - seroval-plugins@1.1.1(seroval@1.1.1): - dependencies: - seroval: 1.1.1 - - seroval@1.1.1: {} - set-cookie-parser@2.7.1: {} set-function-length@1.2.2: @@ -7340,17 +7216,6 @@ snapshots: slash@3.0.0: {} - solid-js@1.9.0: - dependencies: - csstype: 3.1.3 - seroval: 1.1.1 - seroval-plugins: 1.1.1(seroval@1.1.1) - - solid-swr-store@0.10.7(solid-js@1.9.0)(swr-store@0.10.6): - dependencies: - solid-js: 1.9.0 - swr-store: 0.10.6 - sorcery@0.11.1: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -7375,11 +7240,6 @@ snapshots: sprintf-js@1.0.3: {} - sswr@2.0.0(svelte@4.2.19): - dependencies: - svelte: 4.2.19 - swrev: 4.0.0 - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -7523,21 +7383,6 @@ snapshots: magic-string: 0.30.13 periscopic: 3.1.0 - swr-store@0.10.6: - dependencies: - dequal: 2.0.3 - - swr@2.2.0(react@18.3.1): - dependencies: - react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) - - swrev@4.0.0: {} - - swrv@1.0.4(vue@3.5.8(typescript@5.6.3)): - dependencies: - vue: 3.5.8(typescript@5.6.3) - symbol-tree@3.2.4: {} tabbable@6.2.0: {} @@ -7642,10 +7487,6 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-sync-external-store@1.2.2(react@18.3.1): - dependencies: - react: 18.3.1 - util-deprecate@1.0.2: {} v8-to-istanbul@9.3.0: @@ -7722,16 +7563,6 @@ snapshots: - supports-color - terser - vue@3.5.8(typescript@5.6.3): - dependencies: - '@vue/compiler-dom': 3.5.8 - '@vue/compiler-sfc': 3.5.8 - '@vue/runtime-dom': 3.5.8 - '@vue/server-renderer': 3.5.8(vue@3.5.8(typescript@5.6.3)) - '@vue/shared': 3.5.8 - optionalDependencies: - typescript: 5.6.3 - w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 @@ -7841,6 +7672,12 @@ snapshots: yocto-queue@1.1.1: {} + zod-to-json-schema@3.24.3(zod@3.24.2): + dependencies: + zod: 3.24.2 + + zod@3.24.2: {} + zrender@5.6.0: dependencies: tslib: 2.3.0 diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 036cf56c8..260cffe51 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -6,6 +6,7 @@ import { user } from '$lib/stores/user'; import { ENV, MODE, VARS, isCloud } from '$lib/system'; import { AppwriteException } from '@appwrite.io/console'; import { browser } from '$app/environment'; +import { getReferrerAndUtmSource } from '$lib/helpers/utm'; function plausible(domain: string): AnalyticsPlugin { if (!browser) return { name: 'analytics-plugin-plausible' }; @@ -65,6 +66,8 @@ export function trackEvent(name: string, data: object = null): void { }; } + data = { ...data, ...getReferrerAndUtmSource() }; + if (ENV.DEV || ENV.PREVIEW) { console.debug(`[Analytics] Event ${name} ${path}`, data); } else { diff --git a/src/lib/commandCenter/panels/ai.svelte b/src/lib/commandCenter/panels/ai.svelte index c4327962d..13326ac8e 100644 --- a/src/lib/commandCenter/panels/ai.svelte +++ b/src/lib/commandCenter/panels/ai.svelte @@ -6,7 +6,7 @@ import { Alert, AvatarInitials, Code, LoadingDots, SvgIcon } from '$lib/components'; import { user } from '$lib/stores/user'; - import { useCompletion } from 'ai/svelte'; + import { useCompletion } from '@ai-sdk/svelte'; import { subPanels } from '../subPanels'; import { isLanguage, type Language } from '$lib/components/code.svelte'; @@ -19,7 +19,8 @@ headers: { 'x-appwrite-project': 'console' }, - credentials: 'include' + credentials: 'include', + streamProtocol: 'text' }); const examples = [ diff --git a/src/lib/helpers/utm.ts b/src/lib/helpers/utm.ts new file mode 100644 index 000000000..df2cb2158 --- /dev/null +++ b/src/lib/helpers/utm.ts @@ -0,0 +1,17 @@ +export function getReferrerAndUtmSource() { + if (sessionStorage) { + let values = {}; + if (sessionStorage.getItem('utmReferral')) { + values = { ...values, utmReferral: sessionStorage.getItem('utmReferral') }; + } + if (sessionStorage.getItem('utmSource')) { + values = { ...values, utmSource: sessionStorage.getItem('utmSource') }; + } + if (sessionStorage.getItem('utmMedium')) { + values = { ...values, utmMedium: sessionStorage.getItem('utmMedium') }; + } + + return values; + } + return {}; +} diff --git a/src/lib/wizards/functions/connectExisting.svelte b/src/lib/wizards/functions/connectExisting.svelte index 62331ed97..0d19b079a 100644 --- a/src/lib/wizards/functions/connectExisting.svelte +++ b/src/lib/wizards/functions/connectExisting.svelte @@ -36,7 +36,8 @@ $repository.id, $choices.branch, $choices.silentMode || undefined, - $choices.rootDir + $choices.rootDir, + $func.specification || undefined ); trackEvent(Submit.FunctionConnectRepo, { customId: !!$func.$id diff --git a/src/routes/(console)/create-organization/+page.svelte b/src/routes/(console)/create-organization/+page.svelte index 621ba3a00..a9a92035e 100644 --- a/src/routes/(console)/create-organization/+page.svelte +++ b/src/routes/(console)/create-organization/+page.svelte @@ -170,7 +170,7 @@ trackEvent(Submit.OrganizationCreate, { plan: tierToPlan(billingPlan)?.name, - budget_cap_enabled: !!billingBudget, + budget_cap_enabled: billingBudget !== null, members_invited: collaborators?.length }); diff --git a/src/routes/(console)/organization-[organization]/billing/+page.svelte b/src/routes/(console)/organization-[organization]/billing/+page.svelte index c370fbf31..2d3772358 100644 --- a/src/routes/(console)/organization-[organization]/billing/+page.svelte +++ b/src/routes/(console)/organization-[organization]/billing/+page.svelte @@ -1,7 +1,6 @@
@@ -107,6 +110,7 @@
diff --git a/src/routes/(console)/organization-[organization]/billing/budgetCap.svelte b/src/routes/(console)/organization-[organization]/billing/budgetCap.svelte index b9c9b5eb3..df6a7e84a 100644 --- a/src/routes/(console)/organization-[organization]/billing/budgetCap.svelte +++ b/src/routes/(console)/organization-[organization]/billing/budgetCap.svelte @@ -9,13 +9,14 @@ import { organization, currentPlan } from '$lib/stores/organization'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; + import BudgetAlert from './budgetAlert.svelte'; let capActive = false; let budget: number; onMount(() => { budget = $organization?.billingBudget; - capActive = !!$organization?.billingBudget; + capActive = $organization?.billingBudget !== null; }); async function updateBudget() { @@ -44,7 +45,7 @@ } $: if (!capActive) { - budget = 0; + budget = null; } @@ -113,3 +114,5 @@ + + 0} /> diff --git a/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/float.svelte b/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/float.svelte index 1578ef58f..e8c88a91f 100644 --- a/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/float.svelte +++ b/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/float.svelte @@ -31,9 +31,9 @@ collectionId, originalKey, data.required, + data.default, data.min, data.max, - data.default, data.key !== originalKey ? data.key : undefined ); } diff --git a/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/integer.svelte b/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/integer.svelte index e9c81f4c9..6012dee53 100644 --- a/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/integer.svelte +++ b/src/routes/(console)/project-[project]/databases/database-[database]/collection-[collection]/attributes/integer.svelte @@ -31,9 +31,9 @@ collectionId, originalKey, data.required, - data.min, - data.max, data.default, + Math.abs(data.min) > Number.MAX_SAFE_INTEGER ? undefined : data.min, + Math.abs(data.max) > Number.MAX_SAFE_INTEGER ? undefined : data.max, data.key !== originalKey ? data.key : undefined ); } diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte index 666b1e0a7..e5d85cf79 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte @@ -135,7 +135,8 @@ $func.providerRepositoryId || undefined, selectedBranch, silentMode, - selectedDir + selectedDir, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateEvents.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateEvents.svelte index fe63e7726..452b4eb4a 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateEvents.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateEvents.svelte @@ -51,7 +51,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateLogging.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateLogging.svelte index 53cf050e6..1749bd2f9 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateLogging.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateLogging.svelte @@ -44,7 +44,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateName.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateName.svelte index 3051debe4..34cef65f3 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateName.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateName.svelte @@ -41,7 +41,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updatePermissions.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updatePermissions.svelte index 41a8ecbe3..72b69affa 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updatePermissions.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updatePermissions.svelte @@ -45,7 +45,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateSchedule.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateSchedule.svelte index a0fb10996..b625f46ba 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateSchedule.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateSchedule.svelte @@ -46,7 +46,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateScopes.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateScopes.svelte index 4b800b2a9..2e9c095b5 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateScopes.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateScopes.svelte @@ -43,7 +43,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateTimeout.svelte b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateTimeout.svelte index 9c4f07753..2c593a21b 100644 --- a/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateTimeout.svelte +++ b/src/routes/(console)/project-[project]/functions/function-[function]/settings/updateTimeout.svelte @@ -41,7 +41,8 @@ $func.providerRepositoryId || undefined, $func.providerBranch || undefined, $func.providerSilentMode || undefined, - $func.providerRootDirectory || undefined + $func.providerRootDirectory || undefined, + $func.specification || undefined ); await invalidate(Dependencies.FUNCTION); addNotification({ diff --git a/src/routes/(console)/project-[project]/messaging/+page.svelte b/src/routes/(console)/project-[project]/messaging/+page.svelte index efac29adc..5d518d5c8 100644 --- a/src/routes/(console)/project-[project]/messaging/+page.svelte +++ b/src/routes/(console)/project-[project]/messaging/+page.svelte @@ -43,6 +43,8 @@ import type { Column } from '$lib/helpers/types'; import { writable } from 'svelte/store'; import { canWriteMessages } from '$lib/stores/roles'; + import { onDestroy, onMount } from 'svelte'; + import { stopPolling, pollMessagesStatus } from './helper'; export let data: PageData; let selected: string[] = []; @@ -90,6 +92,16 @@ showDelete = false; } } + + onMount(() => { + const processingMessages = data.messages.messages.filter( + (message) => message.status === 'processing' + ); + + pollMessagesStatus(processingMessages); + }); + + onDestroy(stopPolling); diff --git a/src/routes/(console)/project-[project]/messaging/helper.ts b/src/routes/(console)/project-[project]/messaging/helper.ts new file mode 100644 index 000000000..389778e14 --- /dev/null +++ b/src/routes/(console)/project-[project]/messaging/helper.ts @@ -0,0 +1,43 @@ +import { sdk } from '$lib/stores/sdk'; +import { type Models } from '@appwrite.io/console'; + +/** Stores active polling intervals for messages. */ +const messageIntervals = new Map>(); + +/** Checks the status of a message and stops polling if it's no longer processing. */ +function checkMessageStatus(message: Models.Message) { + sdk.forProject.messaging + .getMessage(message.$id) + .then((msg) => { + if (msg.status !== 'processing') { + clearPolling(message.$id); + message.status = msg.status; + } + }) + .catch(() => clearPolling(message.$id)); +} + +/** Clears polling for a specific message. */ +function clearPolling(messageId: string) { + const intervalID = messageIntervals.get(messageId); + if (intervalID) { + clearInterval(intervalID); + messageIntervals.delete(messageId); + } +} + +/** Stops polling for all messages. */ +export function stopPolling() { + messageIntervals.forEach((_, messageId) => clearPolling(messageId)); +} + +/** Starts polling message statuses. */ +export function pollMessagesStatus(messages: Models.Message[]) { + messages.forEach((message) => { + clearPolling(message.$id); + checkMessageStatus(message); + + const intervalID = setInterval(() => checkMessageStatus(message), 2000); + messageIntervals.set(message.$id, intervalID); + }); +} diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte index c9bbe244f..f5acb4713 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/overview.svelte @@ -9,6 +9,8 @@ import SendModal from './sendModal.svelte'; import ScheduleModal from './scheduleModal.svelte'; import CancelModal from './cancelModal.svelte'; + import { onDestroy, onMount } from 'svelte'; + import { stopPolling, pollMessagesStatus } from '../helper'; export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; @@ -18,6 +20,14 @@ let showCancel = false; let showFailed = false; let errors: string[] = []; + + onDestroy(stopPolling); + + onMount(() => { + if (message.status === 'processing') { + pollMessagesStatus([message]); + } + }); @@ -70,7 +80,11 @@ - + pollMessagesStatus([message])} /> diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte index fdfaa1d5c..c9b799d79 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/sendModal.svelte @@ -7,12 +7,14 @@ import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; import { MessagingProviderType, type Models } from '@appwrite.io/console'; import { Dependencies } from '$lib/constants'; + import { createEventDispatcher } from 'svelte'; export let show = false; export let message: Models.Message & { data: Record }; export let topics: Models.Topic[]; - let totalTargets = message.targets?.length ?? 0; + const dispatch = createEventDispatcher(); + $: totalTargets = message.targets?.length ?? 0; for (const topic of topics) { if (message.providerType == MessagingProviderType.Push) { @@ -80,6 +82,8 @@ type: 'error' }); trackError(error, Submit.MessagingMessageUpdate); + } finally { + dispatch('update'); } }; diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/updateTopics.svelte index be240b2d1..3d89ccccf 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/updateTopics.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -83,7 +83,7 @@
- + Topics {@const sum = topicIds.length} @@ -92,7 +92,7 @@
Topic
- {#if message.status == 'draft'} + {#if message.status === 'draft'}
- {:else if message.status == 'draft'} + {:else if message.status === 'draft'} (showTopics = true)}>Add a topic {:else} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index e21202297..42ea05abe 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -32,6 +32,19 @@ if (ref || referrer || utmSource || utmCampaign || utmMedium) { sdk.forConsole.sources.create(ref, referrer, utmSource, utmCampaign, utmMedium); } + + if (referrer || ref) { + sessionStorage.setItem('utmReferral', referrer ? referrer : (ref ?? '')); + } + if (utmSource) { + sessionStorage.setItem('utmSource', utmSource); + } + if (utmMedium) { + sessionStorage.setItem('utmMedium', utmMedium); + } + if (utmCampaign) { + sessionStorage.setItem('utmCampaign', utmCampaign); + } } if ($page.url.searchParams.has('migrate')) {