diff --git a/apps/app-server/Dockerfile b/apps/app-server/Dockerfile index 8e4ab7e1..3f61b64e 100644 --- a/apps/app-server/Dockerfile +++ b/apps/app-server/Dockerfile @@ -18,5 +18,5 @@ RUN pnpm add -g pm2 WORKDIR /app COPY --from=builder /build/apps/app-server/dist/ ./ RUN pnpm init -RUN pnpm install knex ws pg +RUN pnpm install knex ws pg @getbrevo/brevo CMD pm2 start /app/index.js -i max && pm2 logs \ No newline at end of file diff --git a/apps/app-server/package.json b/apps/app-server/package.json index 455c3afa..f29a3ec5 100644 --- a/apps/app-server/package.json +++ b/apps/app-server/package.json @@ -5,12 +5,14 @@ "dependencies": { "@deeplib/data": "workspace:*", "@deeplib/db": "workspace:*", + "@deeplib/mail": "workspace:*", "@deeplib/misc": "workspace:*", "@fastify/cookie": "^9.1.0", "@fastify/cors": "^8.4.1", "@fastify/helmet": "^11.1.1", "@fastify/rate-limit": "^8.0.3", "@fastify/websocket": "^8.2.0", + "@getbrevo/brevo": "^1.0.1", "@sendgrid/mail": "^7.7.0", "@stdlib/base64": "workspace:*", "@stdlib/crypto": "workspace:*", @@ -38,7 +40,6 @@ "objection": "3.0.1", "otplib": "^12.0.1", "redlock": "5.0.0-beta.2", - "sib-api-v3-typescript": "^2.2.2", "stripe": "^14.3.0", "superjson": "npm:@deepnotes/superjson@^1.12.4", "unilogr": "^0.0.27", diff --git a/apps/app-server/src/env.d.ts b/apps/app-server/src/env.d.ts index 9ecfc65b..8d6946b3 100644 --- a/apps/app-server/src/env.d.ts +++ b/apps/app-server/src/env.d.ts @@ -45,15 +45,10 @@ declare namespace NodeJS { MAILJET_API_KEY: string; MAILJET_API_SECRET: string; - SENDINBLUE_API_KEY: string; + BREVO_API_KEY: string; SENDGRID_API_KEY: string; - ZOHO_HOST: string; - ZOHO_PORT: string; - ZOHO_USER: string; - ZOHO_PASSWORD: string; - STRIPE_SECRET_KEY: string; STRIPE_WEBHOOK_SECRET: string; STRIPE_MONTHLY_PRICE_ID: string; diff --git a/apps/app-server/src/mail/sendinblue.ts b/apps/app-server/src/mail/sendinblue.ts deleted file mode 100644 index 9784f89d..00000000 --- a/apps/app-server/src/mail/sendinblue.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { iif } from '@stdlib/misc'; -import { once } from 'lodash'; -import * as SibApiV3Sdk from 'sib-api-v3-typescript'; - -import type { MailOptions } from '.'; - -const _apiInstance = once(() => { - const apiInstance = new SibApiV3Sdk.TransactionalEmailsApi(); - - apiInstance.setApiKey( - SibApiV3Sdk.TransactionalEmailsApiApiKeys.apiKey, - process.env.SENDINBLUE_API_KEY, - ); - - return apiInstance; -}); - -export async function sendSendinblueMail({ - from, - to, - subject, - html, -}: MailOptions) { - const mail = new SibApiV3Sdk.SendSmtpEmail(); - - mail.sender = from; - mail.to = to.map((email) => ({ email })); - mail.subject = iif(process.env.DEV, '[Sendinblue] ', '') + subject; - mail.htmlContent = html; - - await _apiInstance().sendTransacEmail(mail); -} diff --git a/apps/app-server/src/mail/zoho.ts b/apps/app-server/src/mail/zoho.ts deleted file mode 100644 index 49d7de75..00000000 --- a/apps/app-server/src/mail/zoho.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { iif } from '@stdlib/misc'; -import { once } from 'lodash'; -import { createTransport } from 'nodemailer'; -import { htmlToText } from 'nodemailer-html-to-text'; - -import type { MailOptions } from '.'; - -const _getZohoMailTransporter = once(() => { - const mailTransporter = createTransport({ - host: process.env.MAIL_HOST, - secure: true, - port: parseInt(process.env.ZOHO_PORT), - auth: { - user: process.env.MAIL_USER, - pass: process.env.MAIL_PASSWORD, - }, - }); - - mailTransporter.use('compile', htmlToText()); - - return mailTransporter; -}); - -export async function sendZohoMail({ from, to, subject, html }: MailOptions) { - await _getZohoMailTransporter().sendMail({ - from: { - name: from.name, - address: from.email, - }, - to, - subject: iif(process.env.DEV, '[Zoho] ', '') + subject, - html, - }); -} diff --git a/apps/app-server/src/trpc/api/users/account/email-change/request.ts b/apps/app-server/src/trpc/api/users/account/email-change/request.ts index bc87d393..68b9640e 100644 --- a/apps/app-server/src/trpc/api/users/account/email-change/request.ts +++ b/apps/app-server/src/trpc/api/users/account/email-change/request.ts @@ -1,11 +1,11 @@ import { encryptUserEmail, hashUserEmail } from '@deeplib/data'; import { UserModel } from '@deeplib/db'; +import { sendMail } from '@deeplib/mail'; import { padZeroes } from '@stdlib/misc'; import { checkRedlockSignalAborted } from '@stdlib/redlock'; import { TRPCError } from '@trpc/server'; import { randomInt } from 'crypto'; import { once } from 'lodash'; -import { sendMail } from 'src/mail'; import type { InferProcedureOpts } from 'src/trpc/helpers'; import { authProcedure } from 'src/trpc/helpers'; import { z } from 'zod'; diff --git a/apps/app-server/src/trpc/api/users/account/register.ts b/apps/app-server/src/trpc/api/users/account/register.ts index e9e50f48..cf3b1812 100644 --- a/apps/app-server/src/trpc/api/users/account/register.ts +++ b/apps/app-server/src/trpc/api/users/account/register.ts @@ -1,9 +1,9 @@ import { hashUserEmail } from '@deeplib/data'; import { UserModel } from '@deeplib/db'; +import { sendMail } from '@deeplib/mail'; import { w3cEmailRegex } from '@stdlib/misc'; import { TRPCError } from '@trpc/server'; import { once } from 'lodash'; -import { sendMail } from 'src/mail'; import type { InferProcedureOpts } from 'src/trpc/helpers'; import { publicProcedure } from 'src/trpc/helpers'; import { derivePasswordValues } from 'src/utils/crypto'; diff --git a/apps/app-server/tsconfig.json b/apps/app-server/tsconfig.json index a7166a3f..1952e847 100644 --- a/apps/app-server/tsconfig.json +++ b/apps/app-server/tsconfig.json @@ -30,6 +30,7 @@ "references": [ { "path": "../../packages/@deeplib/data/tsconfig.json" }, { "path": "../../packages/@deeplib/db/tsconfig.json" }, + { "path": "../../packages/@deeplib/mail/tsconfig.json" }, { "path": "../../packages/@deeplib/misc/tsconfig.json" }, { "path": "../../packages/@stdlib/base64/tsconfig.json" }, { "path": "../../packages/@stdlib/crypto/tsconfig.json" }, diff --git a/apps/app-server/tsup.config.ts b/apps/app-server/tsup.config.ts index 7a487c17..ba3195a4 100644 --- a/apps/app-server/tsup.config.ts +++ b/apps/app-server/tsup.config.ts @@ -9,5 +9,5 @@ export default defineConfig({ sourcemap: false, splitting: false, dts: false, - noExternal: [/^(?!knex|ws).+$/], + noExternal: [/^(?!knex|ws|@getbrevo\/brevo).+$/], }); diff --git a/apps/client/package.json b/apps/client/package.json index 28b37063..7d2f83b2 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -2,7 +2,7 @@ "name": "@deepnotes/client", "description": "DeepNotes", "homepage": "https://deepnotes.app", - "version": "1.0.14", + "version": "1.0.15", "author": "Gustavo Toyota ", "dependencies": { "@_ueberdosis/prosemirror-tables": "~1.1.3", @@ -69,6 +69,7 @@ "lodash": "^4.17.21", "lowlight": "^2.9.0", "marked": "^9.1.5", + "marked-gfm-heading-id": "^3.1.1", "msgpackr": "^1.9.9", "nanoid": "^3.3.7", "node-fetch": "^2.7.0", @@ -97,7 +98,7 @@ }, "devDependencies": { "@intlify/vite-plugin-vue-i18n": "^3.4.0", - "@quasar/app-vite": "npm:@deepnotes/quasar-app-vite@^2.0.0-alpha.41", + "@quasar/app-vite": "npm:@deepnotes/quasar-app-vite@^2.0.0-alpha.42", "@types/argon2-browser": "^1.18.3", "@types/color": "^3.0.5", "@types/cookie": "^0.5.3", @@ -106,7 +107,6 @@ "@types/katex": "^0.16.5", "@types/libsodium-wrappers-sumo": "^0.7.7", "@types/lodash": "^4.14.200", - "@types/marked": "^6.0.0", "@types/node-fetch": "^2.6.3", "@types/qrcode": "^1.5.4", "@types/showdown": "^2.0.3", diff --git a/apps/client/public/applications/flashcards-thumbnail.webp b/apps/client/public/applications/flashcards-thumbnail.webp index 5ada3f9f..7aa02d84 100644 Binary files a/apps/client/public/applications/flashcards-thumbnail.webp and b/apps/client/public/applications/flashcards-thumbnail.webp differ diff --git a/apps/client/src-capacitor/.gitignore b/apps/client/src-capacitor/.gitignore new file mode 100644 index 00000000..ae0b4303 --- /dev/null +++ b/apps/client/src-capacitor/.gitignore @@ -0,0 +1 @@ +/**/capacitor.config.json \ No newline at end of file diff --git a/apps/client/src-capacitor/android/app/.gitignore b/apps/client/src-capacitor/android/app/.gitignore index bfec2cd4..43b192f5 100644 --- a/apps/client/src-capacitor/android/app/.gitignore +++ b/apps/client/src-capacitor/android/app/.gitignore @@ -1,4 +1,2 @@ /build/* -!/build/.npmkeep - -/keystore.properties \ No newline at end of file +!/build/.npmkeep \ No newline at end of file diff --git a/apps/client/src-capacitor/android/app/build.gradle b/apps/client/src-capacitor/android/app/build.gradle index f1d88195..08608b57 100644 --- a/apps/client/src-capacitor/android/app/build.gradle +++ b/apps/client/src-capacitor/android/app/build.gradle @@ -21,9 +21,9 @@ android { storePassword keyStoreProperties['releaseStorePassword'] } } - + + namespace "app.deepnotes" compileSdkVersion rootProject.ext.compileSdkVersion - defaultConfig { applicationId "app.deepnotes" minSdkVersion rootProject.ext.minSdkVersion @@ -39,8 +39,8 @@ android { } buildTypes { release { - signingConfig signingConfigs.release - minifyEnabled true + signingConfig signingConfigs.release + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } diff --git a/apps/client/src-capacitor/android/app/capacitor.build.gradle b/apps/client/src-capacitor/android/app/capacitor.build.gradle index 1b8f3978..b950bd41 100644 --- a/apps/client/src-capacitor/android/app/capacitor.build.gradle +++ b/apps/client/src-capacitor/android/app/capacitor.build.gradle @@ -2,8 +2,8 @@ android { compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } } diff --git a/apps/client/src-capacitor/android/app/src/main/AndroidManifest.xml b/apps/client/src-capacitor/android/app/src/main/AndroidManifest.xml index af855dab..9f5e9367 100644 --- a/apps/client/src-capacitor/android/app/src/main/AndroidManifest.xml +++ b/apps/client/src-capacitor/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + /dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/apps/client/src-capacitor/android/gradlew.bat b/apps/client/src-capacitor/android/gradlew.bat index ac1b06f9..6689b85b 100644 --- a/apps/client/src-capacitor/android/gradlew.bat +++ b/apps/client/src-capacitor/android/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/apps/client/src-capacitor/android/variables.gradle b/apps/client/src-capacitor/android/variables.gradle index 11a14713..5946adab 100644 --- a/apps/client/src-capacitor/android/variables.gradle +++ b/apps/client/src-capacitor/android/variables.gradle @@ -2,15 +2,15 @@ ext { minSdkVersion = 22 compileSdkVersion = 33 targetSdkVersion = 33 - androidxActivityVersion = '1.4.0' - androidxAppCompatVersion = '1.4.2' + androidxActivityVersion = '1.7.0' + androidxAppCompatVersion = '1.6.1' androidxCoordinatorLayoutVersion = '1.2.0' - androidxCoreVersion = '1.8.0' - androidxFragmentVersion = '1.4.1' - coreSplashScreenVersion = '1.0.0-rc01' - androidxWebkitVersion = '1.4.0' + androidxCoreVersion = '1.10.0' + androidxFragmentVersion = '1.5.6' + coreSplashScreenVersion = '1.0.0' + androidxWebkitVersion = '1.6.1' junitVersion = '4.13.2' - androidxJunitVersion = '1.1.3' - androidxEspressoCoreVersion = '3.4.0' + androidxJunitVersion = '1.1.5' + androidxEspressoCoreVersion = '3.5.1' cordovaAndroidVersion = '10.1.1' } \ No newline at end of file diff --git a/apps/client/src-capacitor/ios/.gitignore b/apps/client/src-capacitor/ios/.gitignore index 9ddf6590..b17468d2 100644 --- a/apps/client/src-capacitor/ios/.gitignore +++ b/apps/client/src-capacitor/ios/.gitignore @@ -1,13 +1,13 @@ -App/build -App/Pods -App/Podfile.lock -App/App/public +/App/build +/App/Pods +/App/Podfile.lock +/App/App/public DerivedData xcuserdata # Cordova plugins for Capacitor -capacitor-cordova-ios-plugins +/capacitor-cordova-ios-plugins # Generated Config files -App/App/capacitor.config.json -App/App/config.xml +/App/App/capacitor.config.json +/App/App/config.xml diff --git a/apps/client/src-capacitor/ios/App/App.xcodeproj/project.pbxproj b/apps/client/src-capacitor/ios/App/App.xcodeproj/project.pbxproj index f8cbeadc..fda353cb 100644 --- a/apps/client/src-capacitor/ios/App/App.xcodeproj/project.pbxproj +++ b/apps/client/src-capacitor/ios/App/App.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; + C80C09CB2A59A461005816A8 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C80C09CA2A59A461005816A8 /* StoreKit.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -29,6 +30,7 @@ 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; + C80C09CA2A59A461005816A8 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -38,6 +40,7 @@ buildActionMask = 2147483647; files = ( A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, + C80C09CB2A59A461005816A8 /* StoreKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,6 +50,7 @@ 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = { isa = PBXGroup; children = ( + C80C09CA2A59A461005816A8 /* StoreKit.framework */, AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */, ); name = Frameworks; diff --git a/apps/client/src-capacitor/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme b/apps/client/src-capacitor/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme index d708c4b0..1f04c396 100644 --- a/apps/client/src-capacitor/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme +++ b/apps/client/src-capacitor/ios/App/App.xcodeproj/xcshareddata/xcschemes/App.xcscheme @@ -50,6 +50,9 @@ ReferencedContainer = "container:App.xcodeproj"> + + + + diff --git a/apps/client/src-capacitor/ios/App/App/capacitor.config.json b/apps/client/src-capacitor/ios/App/App/capacitor.config.json deleted file mode 100644 index a06368e7..00000000 --- a/apps/client/src-capacitor/ios/App/App/capacitor.config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "appId": "app.deepnotes", - "appName": "DeepNotes", - "bundledWebRuntime": false, - "npmClient": "pnpm", - "webDir": "www", - "server": { - "hostname": "deepnotes.app", - "iosScheme": "https", - "androidScheme": "https" - }, - "plugins": { - "CapacitorCookies": { - "enabled": true - }, - "SplashScreen": { - "launchShowDuration": 2000, - "backgroundColor": "#181818" - } - } -} diff --git a/apps/client/src-capacitor/ios/App/Podfile b/apps/client/src-capacitor/ios/App/Podfile index dee62ab5..af8d0709 100644 --- a/apps/client/src-capacitor/ios/App/Podfile +++ b/apps/client/src-capacitor/ios/App/Podfile @@ -1,4 +1,4 @@ -require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers' +require_relative '../../../../../node_modules/.pnpm/@capacitor+ios@5.5.1_@capacitor+core@5.5.1/node_modules/@capacitor/ios/scripts/pods_helpers' platform :ios, '13.0' use_frameworks! @@ -9,11 +9,11 @@ use_frameworks! install! 'cocoapods', :disable_input_output_paths => true def capacitor_pods - pod 'Capacitor', :path => '../../../../../node_modules/.pnpm/@capacitor+ios@4.8.0_@capacitor+core@4.8.0/node_modules/@capacitor/ios' - pod 'CapacitorCordova', :path => '../../../../../node_modules/.pnpm/@capacitor+ios@4.8.0_@capacitor+core@4.8.0/node_modules/@capacitor/ios' - pod 'CapacitorApp', :path => '../../../../../node_modules/.pnpm/@capacitor+app@4.1.1_@capacitor+core@4.8.0/node_modules/@capacitor/app' - pod 'CapacitorClipboard', :path => '../../../../../node_modules/.pnpm/@capacitor+clipboard@4.1.0_@capacitor+core@4.8.0/node_modules/@capacitor/clipboard' - pod 'CapacitorSplashScreen', :path => '../../../../../node_modules/.pnpm/@capacitor+splash-screen@4.2.0_@capacitor+core@4.8.0/node_modules/@capacitor/splash-screen' + pod 'Capacitor', :path => '../../../../../node_modules/.pnpm/@capacitor+ios@5.5.1_@capacitor+core@5.5.1/node_modules/@capacitor/ios' + pod 'CapacitorCordova', :path => '../../../../../node_modules/.pnpm/@capacitor+ios@5.5.1_@capacitor+core@5.5.1/node_modules/@capacitor/ios' + pod 'CapacitorApp', :path => '../../../../../node_modules/.pnpm/@capacitor+app@5.0.6_@capacitor+core@5.5.1/node_modules/@capacitor/app' + pod 'CapacitorClipboard', :path => '../../../../../node_modules/.pnpm/@capacitor+clipboard@5.0.6_@capacitor+core@5.5.1/node_modules/@capacitor/clipboard' + pod 'CapacitorSplashScreen', :path => '../../../../../node_modules/.pnpm/@capacitor+splash-screen@5.0.6_@capacitor+core@5.5.1/node_modules/@capacitor/splash-screen' end target 'App' do diff --git a/apps/client/src-capacitor/ios/App/StoreKitConfig.storekit b/apps/client/src-capacitor/ios/App/StoreKitConfig.storekit new file mode 100644 index 00000000..74de2e04 --- /dev/null +++ b/apps/client/src-capacitor/ios/App/StoreKitConfig.storekit @@ -0,0 +1,79 @@ +{ + "identifier" : "40BB9F32", + "nonRenewingSubscriptions" : [ + + ], + "products" : [ + + ], + "settings" : { + "_applicationInternalID" : "6450611344", + "_developerTeamID" : "NK86B84G2A", + "_lastSynchronizedDate" : 714328042.94737804 + }, + "subscriptionGroups" : [ + { + "id" : "21360347", + "localizations" : [ + + ], + "name" : "Subscription Plans", + "subscriptions" : [ + { + "adHocOffers" : [ + + ], + "codeOffers" : [ + + ], + "displayPrice" : "4.99", + "familyShareable" : false, + "groupNumber" : 1, + "internalID" : "6451053619", + "introductoryOffer" : null, + "localizations" : [ + { + "description" : "Unlimited pages and Collaborative groups", + "displayName" : "Pro Plan", + "locale" : "en_US" + } + ], + "productID" : "ProPlan", + "recurringSubscriptionPeriod" : "P1M", + "referenceName" : "Pro Plan Monthly", + "subscriptionGroupID" : "21360347", + "type" : "RecurringSubscription" + }, + { + "adHocOffers" : [ + + ], + "codeOffers" : [ + + ], + "displayPrice" : "47.9", + "familyShareable" : false, + "groupNumber" : 1, + "internalID" : "6462874130", + "introductoryOffer" : null, + "localizations" : [ + { + "description" : "Unlimited pages and Collaborative groups", + "displayName" : "Pro Plan", + "locale" : "en_US" + } + ], + "productID" : "pro_plan_yearly", + "recurringSubscriptionPeriod" : "P1Y", + "referenceName" : "Pro Plan Yearly", + "subscriptionGroupID" : "21360347", + "type" : "RecurringSubscription" + } + ] + } + ], + "version" : { + "major" : 2, + "minor" : 0 + } +} diff --git a/apps/client/src-capacitor/package.json b/apps/client/src-capacitor/package.json index b3682f8b..036a9374 100644 --- a/apps/client/src-capacitor/package.json +++ b/apps/client/src-capacitor/package.json @@ -1,16 +1,16 @@ { "name": "@deepnotes/client-capacitor", "description": "DeepNotes", - "version": "0.0.2", + "version": "1.0.14", "author": "Gustavo Toyota ", "dependencies": { - "@capacitor/android": "^4.8.1", - "@capacitor/app": "^4.1.1", - "@capacitor/cli": "^4.8.1", - "@capacitor/clipboard": "^4.1.0", - "@capacitor/core": "^4.8.1", - "@capacitor/ios": "^4.8.1", - "@capacitor/splash-screen": "^4.2.0" + "@capacitor/android": "^5.5.1", + "@capacitor/app": "^5.0.6", + "@capacitor/cli": "^5.5.1", + "@capacitor/clipboard": "^5.0.6", + "@capacitor/core": "^5.5.1", + "@capacitor/ios": "^5.5.1", + "@capacitor/splash-screen": "^5.0.6" }, "private": true -} +} \ No newline at end of file diff --git a/apps/client/src/code/pages/page/camera/zooming.ts b/apps/client/src/code/pages/page/camera/zooming.ts index 4d83fc6a..33204ca2 100644 --- a/apps/client/src/code/pages/page/camera/zooming.ts +++ b/apps/client/src/code/pages/page/camera/zooming.ts @@ -44,9 +44,10 @@ export class PageZooming { } this.page.camera.react.pos = this.page.camera.react.pos.add( - new Vec2(event.deltaX, event.deltaY).divScalar( - Math.pow(this.page.camera.react.zoom, 0.8) * 2, - ), + (event.shiftKey + ? new Vec2(event.deltaY, event.deltaX) + : new Vec2(event.deltaX, event.deltaY) + ).divScalar(Math.pow(this.page.camera.react.zoom, 0.8) * 2), ); } } diff --git a/apps/client/src/env.d.ts b/apps/client/src/env.d.ts index b315dad4..2a114545 100644 --- a/apps/client/src/env.d.ts +++ b/apps/client/src/env.d.ts @@ -57,15 +57,10 @@ declare namespace NodeJS { MAILJET_API_KEY: string; MAILJET_API_SECRET: string; - SENDINBLUE_API_KEY: string; + BREVO_API_KEY: string; SENDGRID_API_KEY: string; - ZOHO_HOST: string; - ZOHO_PORT: string; - ZOHO_USER: string; - ZOHO_PASSWORD: string; - STRIPE_SECRET_KEY: string; STRIPE_WEBHOOK_SECRET: string; STRIPE_MONTHLY_PRICE_ID: string; diff --git a/apps/client/src/layouts/HomeLayout/Footer.vue b/apps/client/src/layouts/HomeLayout/Footer.vue index 38a5aee3..ad1c8132 100644 --- a/apps/client/src/layouts/HomeLayout/Footer.vue +++ b/apps/client/src/layouts/HomeLayout/Footer.vue @@ -81,13 +81,6 @@ Discord - - Twitter - - - - LinkedIn - - +
+ + + diff --git a/apps/client/src/layouts/PagesLayout/MainContent/DisplayPage/DisplayScreens/DisplayWorld/DisplayWorld.vue b/apps/client/src/layouts/PagesLayout/MainContent/DisplayPage/DisplayScreens/DisplayWorld/DisplayWorld.vue index 08262b0a..bc0e75ac 100644 --- a/apps/client/src/layouts/PagesLayout/MainContent/DisplayPage/DisplayScreens/DisplayWorld/DisplayWorld.vue +++ b/apps/client/src/layouts/PagesLayout/MainContent/DisplayPage/DisplayScreens/DisplayWorld/DisplayWorld.vue @@ -26,6 +26,8 @@ + + @@ -39,6 +41,7 @@ import DisplayArrows from './DisplayArrows.vue'; import DisplayBackground from './DisplayBackground.vue'; import DisplayBoxSelection from './DisplayBoxSelection.vue'; import DisplayNote from './DisplayNote/DisplayNote.vue'; +import DisplayPanningBoard from './DisplayPanningBoard.vue'; import DOMDisplay from './DOMDisplay.vue'; import InterregionalArrows from './InterregionalArrows.vue'; diff --git a/apps/client/src/pages/home/Download/Download.vue b/apps/client/src/pages/home/Download/Download.vue index 6177d1ad..800c4980 100644 --- a/apps/client/src/pages/home/Download/Download.vue +++ b/apps/client/src/pages/home/Download/Download.vue @@ -212,7 +212,7 @@ import { multiModePath } from 'src/code/utils/misc'; import PlatformCard from './PlatformCard.vue'; -const version = '1.0.8'; +const version = process.env.npm_package_version; const loading = ref(true); diff --git a/apps/client/src/pages/home/Index/Index.vue b/apps/client/src/pages/home/Index/Index.vue index 27da9191..e1d6fbb2 100644 --- a/apps/client/src/pages/home/Index/Index.vue +++ b/apps/client/src/pages/home/Index/Index.vue @@ -166,7 +166,7 @@
- Applications + Use cases
@@ -179,9 +179,9 @@ /> - - + + diff --git a/apps/client/src/pages/home/PrivacyPolicy/PrivacyPolicy.vue b/apps/client/src/pages/home/PrivacyPolicy/PrivacyPolicy.vue index be3a83c5..e74fa6ef 100644 --- a/apps/client/src/pages/home/PrivacyPolicy/PrivacyPolicy.vue +++ b/apps/client/src/pages/home/PrivacyPolicy/PrivacyPolicy.vue @@ -42,9 +42,12 @@