diff --git a/apps/remix/.bin/stripe-dev.sh b/apps/remix/.bin/stripe-dev.sh new file mode 100755 index 000000000..67d349ded --- /dev/null +++ b/apps/remix/.bin/stripe-dev.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +# Set Error handling +set -eu + +SCRIPT_DIR="$(readlink -f "$(dirname "$0")")" +WEB_APP_DIR="$SCRIPT_DIR/.." + +# Store the original directory +ORIGINAL_DIR=$(pwd) + +# Set up trap to ensure we return to original directory +trap 'cd "$ORIGINAL_DIR"' EXIT + +cd "$WEB_APP_DIR" + +# Define env file paths +ENV_LOCAL_FILE="../../.env.local" + +# Function to load environment variable from env files +load_env_var() { + local var_name=$1 + local var_value="" + + if [ -f "$ENV_LOCAL_FILE" ]; then + var_value=$(grep "^$var_name=" "$ENV_LOCAL_FILE" | cut -d '=' -f2) + fi + + # Remove quotes if present + var_value=$(echo "$var_value" | sed 's/^"\(.*\)"$/\1/' | sed "s/^'\(.*\)'$/\1/") + + echo "$var_value" +} + +NEXT_PUBLIC_FEATURE_BILLING_ENABLED=$(load_env_var "NEXT_PUBLIC_FEATURE_BILLING_ENABLED") + +# Check if NEXT_PUBLIC_FEATURE_BILLING_ENABLED is equal to true +if [ "$NEXT_PUBLIC_FEATURE_BILLING_ENABLED" != "true" ]; then + echo "[ERROR]: NEXT_PUBLIC_FEATURE_BILLING_ENABLED must be enabled." + exit 1 +fi + +# 1. Load NEXT_PRIVATE_STRIPE_API_KEY from env files +NEXT_PRIVATE_STRIPE_API_KEY=$(load_env_var "NEXT_PRIVATE_STRIPE_API_KEY") + +# Check if NEXT_PRIVATE_STRIPE_API_KEY exists +if [ -z "$NEXT_PRIVATE_STRIPE_API_KEY" ]; then + echo "[ERROR]: NEXT_PRIVATE_STRIPE_API_KEY not found in environment files." + echo "[ERROR]: Please make sure it's set in $ENV_LOCAL_FILE" + exit 1 +fi + +# 2. Check if stripe CLI is installed +if ! command -v stripe &> /dev/null; then + echo "[ERROR]: Stripe CLI is not installed or not in PATH." + echo "[ERROR]: Please install the Stripe CLI: https://stripe.com/docs/stripe-cli" + exit 1 +fi + +# 3. Check if NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET env key exists +NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET=$(load_env_var "NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET") + +if [ -z "$NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET" ]; then + echo "╔═════════════════════════════════════════════════════════════════════╗" + echo "║ ║" + echo "║ ! WARNING: NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET MISSING ! ║" + echo "║ ║" + echo "║ Copy the webhook signing secret which will appear in the terminal ║" + echo "║ soon into the env file. ║" + echo "║ ║" + echo "║ The webhook secret will start with whsec_... ║" + echo "║ ║" + echo "╚═════════════════════════════════════════════════════════════════════╝" +fi + +echo "[INFO]: Starting Stripe webhook listener..." +stripe listen --api-key "$NEXT_PRIVATE_STRIPE_API_KEY" --forward-to http://localhost:3000/api/stripe/webhook diff --git a/apps/remix/package.json b/apps/remix/package.json index 689c31ee7..d7c48e686 100644 --- a/apps/remix/package.json +++ b/apps/remix/package.json @@ -7,6 +7,7 @@ "build:app": "npm run typecheck && cross-env NODE_ENV=production react-router build", "build:server": "cross-env NODE_ENV=production rollup -c rollup.config.mjs", "dev": "npm run with:env -- react-router dev", + "dev:billing": "bash .bin/stripe-dev.sh", "start": "npm run with:env -- cross-env NODE_ENV=production node build/server/main.js", "clean": "rimraf .react-router && rimraf node_modules", "typecheck": "react-router typegen && tsc",