diff --git a/.gitignore b/.gitignore index 87422e4..778624b 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ yarn-error.log* # Convex convex/_generated +apps/admin/.env.staging +apps/storefront/.env.staging +convex/.env.staging diff --git a/package-lock.json b/package-lock.json index 87979af..b5dcd47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ ], "dependencies": { "@clerk/backend": "^2.32.1", + "@convex-dev/resend": "^0.2.3", "@tailwindcss/postcss": "^4.2.0", "convex": "^1.32.0", "next": "16.1.6", @@ -829,6 +830,48 @@ "node": ">=18.17.0" } }, + "node_modules/@convex-dev/rate-limiter": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@convex-dev/rate-limiter/-/rate-limiter-0.3.2.tgz", + "integrity": "sha512-+oBPsBfFbzdxiF/9XaaTQmVnvDlvEfg/c69/v8LxTbw4VLuiflIKlfnPQL8OS0azXQQ11hcPWHmU8ytFmHKDXA==", + "license": "Apache-2.0", + "peerDependencies": { + "convex": "^1.24.8", + "react": "^18.2.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/@convex-dev/resend": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@convex-dev/resend/-/resend-0.2.3.tgz", + "integrity": "sha512-eH7xmj49u0nZVvHyztxg3BLrBq2hJAVxJDBdmFFK07zgUCblGq+Pp6k7X+YtmBHcj8Eie4J0kUFeElu8L4KtBg==", + "license": "Apache-2.0", + "dependencies": { + "@convex-dev/rate-limiter": "^0.3.0", + "@convex-dev/workpool": "^0.3.0", + "remeda": "^2.26.0", + "resend": "^6.6.0", + "svix": "^1.70.0" + }, + "peerDependencies": { + "convex": "^1.24.8", + "convex-helpers": "^0.1.106" + } + }, + "node_modules/@convex-dev/workpool": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@convex-dev/workpool/-/workpool-0.3.2.tgz", + "integrity": "sha512-jNPBHLCmZQXaztbBntZgIoM8JhKDmGwaIezZS/zPmX74PzON0Fgysgd9u+NOjJ04Dx2pN8ppBH9ElpsKxCOBpA==", + "license": "Apache-2.0", + "peerDependencies": { + "convex": "^1.31.7", + "convex-helpers": "^0.1.94" + } + }, "node_modules/@dnd-kit/accessibility": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", @@ -8594,8 +8637,9 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" + "devOptional": true, + "license": "MIT", + "peer": true }, "node_modules/@standard-schema/utils": { "version": "0.3.0", @@ -10712,6 +10756,7 @@ "resolved": "https://registry.npmjs.org/convex/-/convex-1.32.0.tgz", "integrity": "sha512-5FlajdLpW75pdLS+/CgGH5H6yeRuA+ru50AKJEYbJpmyILUS+7fdTvsdTaQ7ZFXMv0gE8mX4S+S3AtJ94k0mfw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "esbuild": "0.27.0", "prettier": "^3.0.0", @@ -10741,6 +10786,41 @@ } } }, + "node_modules/convex-helpers": { + "version": "0.1.114", + "resolved": "https://registry.npmjs.org/convex-helpers/-/convex-helpers-0.1.114.tgz", + "integrity": "sha512-elEdh+gG6BDv2dWIWVvBeJPbHnDQS5+WexUuwlGVJXz1EbMkXz/UIQwFIfLMZIXUwW6ot4JYf/1JJKNStrE6lg==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "convex-helpers": "bin.cjs" + }, + "peerDependencies": { + "@standard-schema/spec": "^1.0.0", + "convex": "^1.32.0", + "hono": "^4.0.5", + "react": "^17.0.2 || ^18.0.0 || ^19.0.0", + "typescript": "^5.5", + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@standard-schema/spec": { + "optional": true + }, + "hono": { + "optional": true + }, + "react": { + "optional": true + }, + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/convex-test": { "version": "0.0.41", "resolved": "https://registry.npmjs.org/convex-test/-/convex-test-0.0.41.tgz", @@ -12918,7 +12998,7 @@ "version": "4.12.4", "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.4.tgz", "integrity": "sha512-ooiZW1Xy8rQ4oELQ++otI2T9DsKpV0M6c6cO6JGx4RTfav9poFFLlet9UMXHZnoM1yG0HWGlQLswBGX3RZmHtg==", - "dev": true, + "devOptional": true, "license": "MIT", "peer": true, "engines": { @@ -15194,6 +15274,12 @@ "node": ">= 0.4" } }, + "node_modules/postal-mime": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.3.tgz", + "integrity": "sha512-MjhXadAJaWgYzevi46+3kLak8y6gbg0ku14O1gO/LNOuay8dO+1PtcSGvAdgDR0DoIsSaiIA8y/Ddw6MnrO0Tw==", + "license": "MIT-0" + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -15923,6 +16009,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remeda": { + "version": "2.33.6", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.33.6.tgz", + "integrity": "sha512-tazDGH7s75kUPGBKLvhgBEHMgW+TdDFhjUAMdQj57IoWz6HsGa5D2RX5yDUz6IIqiRRvZiaEHzCzWdTeixc/Kg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/remeda" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15949,6 +16044,37 @@ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", "license": "MIT" }, + "node_modules/resend": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/resend/-/resend-6.9.3.tgz", + "integrity": "sha512-GRXjH9XZBJA+daH7bBVDuTShr22iWCxXA8P7t495G4dM/RC+d+3gHBK/6bz9K6Vpcq11zRQKmD+B+jECwQlyGQ==", + "license": "MIT", + "dependencies": { + "postal-mime": "2.7.3", + "svix": "1.84.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@react-email/render": "*" + }, + "peerDependenciesMeta": { + "@react-email/render": { + "optional": true + } + } + }, + "node_modules/resend/node_modules/svix": { + "version": "1.84.1", + "resolved": "https://registry.npmjs.org/svix/-/svix-1.84.1.tgz", + "integrity": "sha512-K8DPPSZaW/XqXiz1kEyzSHYgmGLnhB43nQCMeKjWGCUpLIpAMMM8kx3rVVOSm6Bo6EHyK1RQLPT4R06skM/MlQ==", + "license": "MIT", + "dependencies": { + "standardwebhooks": "1.0.0", + "uuid": "^10.0.0" + } + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -17497,7 +17623,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "peer": true, "bin": { diff --git a/package.json b/package.json index 7264e0b..39c6331 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "@clerk/backend": "^2.32.1", + "@convex-dev/resend": "^0.2.3", "@tailwindcss/postcss": "^4.2.0", "convex": "^1.32.0", "next": "16.1.6",