API Config and ENVs
Before deep-diving into the app config, let's first through the ENVs.
ENV
This project has multiple environments and can be found under /env
directory. These envs help us to develop, test and deploy. Currently, we have only 2:
local
- For development
production
- For production
An ENV file contains values which you need to be different on different environments. For eg. You need a local DB connection while developing, but a prod connection for online users.
Config
App config can be found in src/appConfig.ts
file.
config.global
Key |
Description |
global.app |
Few app related information. |
global.domain |
Domain. For eg. your-store-api.herokuapp.com OR localhost:3000 |
global.baseUrl |
Base URL. For eg. https://your-store-api.herokuapp.com or http://localhost:3000 |
global.clientOrigins |
A list of origins where API will be used. This is for security. Check the supported origins here |
global.pageSectionItemsLimit |
A number to limit the count of items fetched for a section. For eg. If 15, then only 15 products will be returned for the Products section. |
global.showDoc |
Control if you want to show swagger API doc. |
config.admin
Key |
Description |
admin.email |
Email of the admin. Used as a support email for swagger doc. |
admin.cacheClearKey |
This key will be used when an admin tries to clear the redis cache. The operation will be validated against this key. Very private |
admin.auth.key |
This key will be used to validate an admin from CMS. Very private |
admin.auth.tokenSecret |
To prepare a unique and safe admin token with admin.auth.key for the CMS, a secret key is needed. Very private |
admin.auth.tokenExpiry |
This controls how long the admin should stay logged in. |
config.errors
Key |
Description |
errors.report4xxErrors |
Set this to true if you want to report 4xx errors to Sentry. |
config.userAuth
Key |
Description |
userAuth.tokenSecret |
To prepare a unique and safe user token for users, a secret key is needed. Very private |
userAuth.tokenExpiry.default |
This controls how long the user should stay logged in. |
userAuth.tokenExpiry.extended |
This controls how long the user should stay logged in if they opt-in to Remember me . |
config.order
Key |
Description |
order.status |
There's a dependency in code for 2 order statuses: RECEIVED & CANCELLED . Map these statuses with correct DB ID here. |
order.cancellationReasons |
This is a list of pre-defined reasons shown to users when they cancel the order. |
config.payment
Key |
Description |
payment.refundAmountPercent |
The amount in percentage of order total to refund. |
payment.tax |
Total tax on cart total. First priority is given to percent . If null, considers 'flat' key. |
payment.tax.percent |
Tax amount in percentage |
payment.tax.flat |
Tax amount in flat number |
payment.tax.decimalPrecision |
This controls the number of decimals after calculation of tax. For eg. 17.23491 => 17.23 |
payment.extraCharges |
Total extra charges on cart total. First priority is given to percent . If null, considers 'flat' key. |
payment.extraCharges.percent |
Extra charge amount in percentage |
payment.extraCharges.flat |
Extra charge amount in flat number |
payment.extraCharges.decimalPrecision |
This controls the number of decimals after calculation of tax. For eg. 17.23491 => 17.23 |
payment.smallestCurrencyUnit |
Smallest currency unit to form 1 amount. For eg. 1 dollar = 100 cents, 1 rupee = 100 paisa. Used by Stripe to process payments. |
payment.deliveryPriceMapping |
A mapping of [whenAmountAbove]: [deliveryPrice]. Should be in ascending order of whenAmountAbove. |
config.database
Key |
Description |
database.url |
DB connection URL. If provided, other credentials such host, password, etc.. will be ignored. |
database.host |
DB host for connection |
database.post |
DB post for connection |
database.name |
DB name for connection |
database.user |
DB user for connection |
database.password |
DB password for connection |
database.enableLogging |
If set to true, TypeORM logging will be enabled. |
database.enableSync |
If set to true, any changes in models will be reflected in DB on save. Also if a table is not present in DB but present as a model, TypeORM will create one table. So DB and its tables are eligible for auto sync. |
config.cache
Key |
Description |
cache.redis |
Redis is used to cache data at service method level. This is done offload DB operations. |
cache.redis.enabled |
To disable redis cache, set it to false |
cache.redis.mode |
Redis mode (standalone / cluster ). Redis connection reference |
cache.redis.url |
Redis connection URL. IF provided, other credentials will be ignored. Redis connection reference |
cache.redis.host |
Redis connection reference |
cache.redis.port |
Redis connection reference |
cache.redis.dbIndex |
Redis connection reference |
cache.redis.password |
Redis connection reference |
cache.redis.keyPrefix |
Used as a prefix for all Redis cache keys. |
cache.redis.maxTtl |
How long the cache should be kept at max. |
cache.httpResponse |
We have caching at HTTP response level too. |
cache.httpResponse.enabled |
To disable HTTP response cache, set it to false |
config.allow
There are 2 ways you can disable:
- directly from project ENV files by setting the value as
false
- or expose these ENV variables separately and keep values here as blank. You can avoid a build with this approach and change will be applied immediately.
Key |
Description |
allow.newRegisterations |
Allow new registerations. |
allow.newOrders |
Allow new orders. |
config.integrations
Key |
Description |
integrations.stripePayment |
Stripe is used to process payments |
integrations.stripePayment.secretKey |
Get secret key from Stripe dashboard |
integrations.sentryErrorReporting |
Sentry is used to monitor app health |
integrations.sentryErrorReporting.enabled |
To disable this integration |
integrations.sentryErrorReporting.dsn |
Get DSN from Sentry's dashboard |