This starter app includes all the files necessary to get started with a basic, hello world app. This app uses NextJS, BigDesign, Typescript, and React.
To get the app running locally, follow these instructions:
- Use Node 18+ and NPM 8+. To check the running versions, use the following commands:
node -v
npm -v- Clone and/or fork the repo and install npm packages:
git clone git@github.com:bigcommerce/sample-app-nodejs.git my-bigcommerce-app
cd my-bigcommerce-app
npm install- To expose your app server using an HTTP tunnel, install ngrok globally, then start the ngrok service.
You can use npm to install ngrok:
npm install -g ngrokAlternatively, MacOS users can use the homebrew package manager:
brew install ngrokStart ngrok on port 3000 to expose the default Next.js server:
ngrok http 3000- Use the BigCommerce Developer Portal to register a draft app. For steps 5-7, enter callbacks as
'https://{ngrok_url}/api/{auth || load || uninstall}'. Get thengrok_urlfrom the ngrok terminal session.
https://12345.ngrok-free.app/api/auth # auth callback
https://12345.ngrok-free.app/api/load # load callback
https://12345.ngrok-free.app/api/uninstall # uninstall callback- Copy
.env-sampleto.env.
cp .env-sample .env-
In the
.envfile, replace theCLIENT_IDandCLIENT_SECRETvariables with the API account credentials in the app profile. To locate the credentials, find the app's profile in the Developer Portal, then click View Client ID. -
In the
.envfile, update theAUTH_CALLBACKvariable with thengrok_urlfrom step 4. -
In the
.envfile, enter a secretJWT_KEY. To support HS256 encryption, the JWT key must be at least 32 random characters (256 bits). -
Configure the data store. In the
.envfile, specify theDB_TYPE.The DB type must be either
firebaseormysql.If using Firebase, supply the
FIRE_config keys listed in the.envfile. See the Firebase quickstart (Google).If using MySQL, supply the
MYSQL_config keys listed in the.envfile, then do the initial database migration by running the following npm script:
npm run db:setup- Start your dev environment in a dedicated terminal session, separate from
ngrok.
npm run devIf
ngrokexpires, update the callbacks in steps 4 and 7 with the newngrok_url. You can learn more about persisting ngrok tunnels longer (ngrok).
- Consult our developer documentation to install and launch the app.
This app automatically manages webhooks for BigCommerce stores. Webhooks are essential for real-time inventory management when bundle products are purchased.
The app automatically creates and manages webhooks during the app lifecycle:
- During App Installation (
/api/auth): Creates webhooks for new store installations - During App Loading (
/api/load): Ensures webhooks exist for existing installations (safety check) - During App Uninstall (
/api/uninstall): Cleans up webhooks when the app is removed
The app registers the following webhook:
- Event:
store/order/created - Destination:
{APP_URL}/api/webhooks/orders - Purpose: Updates inventory levels for bundle products when orders are placed
For development and testing purposes, you can use the provided scripts:
node scripts/test-webhook.jsThis script will:
- List existing webhooks for your store
- Test the webhook creation process
- Verify webhook configuration
node scripts/create-webhook.jsNote: The manual script is only needed for local development. In production, webhooks are automatically managed by the app.
- Creation: Webhooks are automatically created when a store installs the app
- Validation: Each app load checks if webhooks exist and recreates them if missing
- Cleanup: Webhooks are automatically removed when the app is uninstalled
- Resilience: Webhook creation failures don't prevent app installation (logged for debugging)
- Webhooks remain active as long as the store is active
- Webhooks are automatically disabled after 90 days of store inactivity
- The app's safety checks ensure webhooks are recreated if they become missing
- No token refresh is needed for webhooks (they use the destination URL)
In production, you must build and run optimized version of the code. Use the following commands to get started:
When you run the
startscript, specify a port number using the-pflag. Otherwise, the process will fail.
npm run build
npm run start -p 3000