🐞unsigned error in push_token migration (power plan)
8 Sept 2021 v8.0.3
🐞unsigned int bug in account_users migration
🐞unsafe-line typo in server.js
2 Sept 2021 v8.0.2 Beta
🐞master dashboard user tally including master account in total
🐞base64 API key doesn't work
🐞updating profile in /users throws permissions error
🐞inviting multiple emails doesn't reflect invites in UI
🐞knex migration doesn't work on digital ocean due to primary key constraint
🐞export Event not working on Heroku
🐞form labels are only rendered if label prop exists
🐞clicking logo in email doesn't load website
🔧added placeholder prop to search component
🔧updated mongo model for mongoose 6
🔧enabling 2fa requires entering code to confirm
🔧2fa backup code added
🔧updating all delete modals to use destructive prop (also changed from isDestructive)
🔧added utilities for en/decoding base64
🔧suspicious sign-in logic improved for 2 devices
➕create a new master account using the toolbelt
➕new account actions cards
➕utilty.assert to check for negative values and throw error
2 Sept 2021 v8.0.2 Beta
🐞user invite flow doesn't accept multiple emails at once
20 August 2021 v8.0.1 Beta
🐞undefined email when deleting account in mission control
🐞suspicious sign in magic link had email instead of user.id
🐞successful login after a blocked login doesn't enable user account
🐞registering a parent or child using email/password when already registered via social doesn't save the new password
🐞reset password flow breaks when 2fa is enabled
16 August 2021 v8.0 Beta
🔑 PrivateRoute component allowing a user to access a restricted UI route with empty data
🐞form component not updating file list
🐞get method of model generated by toolbelt has conditional id selector
🐞date picker clipped when rendered inside a modal
🐞date picker styling issues
🐞props.onChange called inside input components if non-existent
🐞conditional table badge function can't compare boolean values
🐞padding issue on fieldset with .error class
🐞table removing time from date strings
🐞styling of signout button in mobile nav
🐞reading null card values in accountController.card
🐞magic and social signin views calling API twice when context updates
🐞await missing on user.account.add and user.account.delete (mongo only)
🐞feedback metrics not showing in mission control (mongo only)
🐞account.get not selecting master account (mongo only)
🐞socialController.handleCallback not adding social IDs if email is already registered with a parent account
🐞admin can't close their own account
➕added support for API keys
➕added client side event tracking and analytics in mission control
➕API requests are logged (when using API key)
➕Two-factor authentication
🔧removed unused account var in account.create model
🔧added developer role
🔧custom table actions can be conditionally rendered
🔧form accepts isDestructive prop which sets confirm button to red (instead of green)
🔧message can render child props inside the component
🔧added mask method to utilities to mask strings
🔧checkbox default can have multiple values
🔧improved fieldset layout using grid component
🔧removed legacy /api/account/update endpoint
🔧date component formats a pretty date
🔧refactored authController with new authenticate function to remove duplicate code
🔧user.enable_supportchanged to user.support_enabled for consistency with 2fa_enabled
5 June 2021 v7.2.1
🐞register a child user via social when email is already a child of another account fails auth
🐞bin/view is checking for non existent env variable to test if Mongo is used
3 June 2021 v7.2
🔑fixed updating user permission updates owner permission
🔧removed division formulas in scss files (unsupported from sass 2.0)
🐞can't update user via mission control
🐞selecting EU region for Mailgun in setup sets base URL to EU
🐞multiple file inputs in a form sharing the one file store
10 May 2021 v7.1.1 Beta
🔑 prevented invite permission from being posted as owner/master in last build
🐞 arrow buttons missing on datepicker
🐞 userController.delete (mongo)
🐞 in accountController.close (mongo)
🐞 added dotenv to knexfile
🐞 user.update bug with postgres
🐞 missioncontrol -> accounts (postgres)
🐞 missioncontrol -> feedback (postgres)
🐞 twitter keys check in socialController
🐞 email not attached to stripe customer
🔧master account moved to own section of integration tests
🔧changed inviteId to invite_id in user signup flow for consistency
30 Apr 2021 v7.1 Beta
🔑 patched potential privilege escalation vulnerability in userController.update
➕ users can be attached to multiple accounts (new account_users table)
➕ user component for switching accounts
➕ child user can close their own account
➕ full view loading available in view context
🔧 loader component accepts fullscreen prop
🔧 knexfile uses environment variables
🔧 signout link moved to main nav
🔧 authController.signup to optimise authentication during signup
🔧 user.last_active is set in new GET /auth endpoint
🔧 moved user permissions into account_users table
🔧 enhanced privilege escalation security defence
🔧 pass input type of null to skip rendering input
🔧 updated missioncontrol /accounts & /users to reflect multi user/accounts
🔧 mission control can delete account via accountController using master token
20 Apr 2021 v7.0 Beta
➕ authenticate with social networks (facebook, twitter)
➕ fontawesome icon pack
➕ static router for server side routes
➕ cryptography support
➕ configured for heroku deployment
➕ invited users listed in account/users table
➕ set the permission level when inviting a user
➕ delete or resend a user invite
➕ preview card details in /account/billing
➕ billing cycle dates in plan UI
➕ list past invoices in billing view
➕ amazon s3 model for uploading files and interacting with buckets
➕ download action added to table
➕ view action in table to load a detail view (example in missioncontrol/logs)
➕ pagination component
➕ log errors and view them in mission control (+ get notified via email)
➕ table can render conditional badge colors
➕ npmrc file to resolve installation issues with legacy-peer-deps in npm7
➕ signout api endpoint to destory auth tokens
🔧 throttle to search component
🔧 enhanced security in reset password flow
🔧 table can render custom actions for a single row
🔧 improved table row callbacks for edit/delete
🔧 improved user.create to use a single object as params
🔧 authController.signin refactored to handle both email/pass and social
🔧 signup form split in two: 1. user/pass OR social 2. plan/payment
🔧 jwt contains provider (facebook, twitter etc.)
🔧 moved domain section of setup into its own view
🔧 updated social share buttons to use fontawesome brand pack
🔧 user model updated to handle social network ids
🔧 split billing view into smaller components
🔧 plan features moved into /config file to simplify pricing component
🔧 auth check in client auth.js now checks for social token, jwt, and subscription
🔧 moved authentication endpoints into new /api/auth file
🔧 added url prop to button for navigating to external links
🔧 improved jwt security by storing active token in db
🔧 more colors added to icon props
🔧 modal form receives server response in callback
🔧 replaced mailgun-js with raw api call (fixed vuln with package)
🔧 updated packages to latest versions
🔧 optimised fetching subscription status (new account.subscription model)
🐞 rejectUnauthorized issue with new version of Postgres
🐞 ; being appended to mongo schema via toolbelt
8 Mar 2021 v6.5
🔑 vulnerability where free plan can be used via API when free plan isn't configured 🔧 duplicate stripe_customer_id in mongo/account
🔧 encoding mongo passwords in case of special characters
🔧 packages updated to latest versions
🔧 installcheck.js updated to use node 15
🐞 set form loading state immediately on submit to avoid duplicate clicks
23 Jan 2021 v6.4
🔑 updating profile checks if email is already registered
➕ goto prop to button component for external URLs
🔧 magic token utilises user ID instead of email for extra security
🔧 removed duplicate (redundant) permission.json from /src
🔧 Bearer token in /test/user had ':' (cosmetic issue)
🐞 'data already declared' bug with mongo template
🐞 sidebar nav hovering too early in Safari
23 Dec 2020 v6.3
🐞 importing price plans bug in plans.js
🔧 url input component regex allows - symbol
16 Dec 2020 v6.2
➕ support for node 15
🔧 swapped node-sass for sass to support node 15
🔧 reference to user.plan -> user.permission in auth component
🔧 feedback email notification uses support email in env var
🐞 subscription checks for 'trialing' in auth component & billing view
19 Nov 2020 v6.1
➕ magic sign in links
➕ helmet.js for enhanced server security
➕ content security policies
➕ .env support
➕ API rate limiting / brute force protection
➕ rounded button prop
➕ suspicious sign-in attempts flagged to user
➕ high risk sign-in attempts are blocked
➕ dedupeArray utility
➕ help view with contact form
➕ password complexity rules added to password component
➕ validate utility for improved server-side validation
➕ server servers static build by default in production
➕ dummy password_confirm field on signup to defend against bot signups
➕ support for react 17
➕ user can toggle impersonation on their account in /help
🔧 assign routes & features.js to array before export (React 17 breaking change)
🔧 useAPI hook imported with require in auth component (React 17 breaking change)
🔧 removed react-moment dependency - now using toISOString in table
🔧 increased email char length in migration scripts to 512
🔧 restricted db inserts on account & user tables to prevent id change attacks
🔧 form submit button is optional based on buttonText prop
🔧 renamed master to mission control in client
🔧 mongo connection string uses srv
🔧 submitOnChange prop added to form
🔧 upgrade mysql driver to mysql2
🔧 support_email added to config
🔧 user can access /api/account/subscription
🔧 loader styling in onboarding
🐞 fieldset.js calling props.onChange twice when using radio
🐞 missing key on feedback buttons
🐞 fixed credit card not saving
18 Sep 2020 v6.0
➕ user impersonation
➕ user feedback widget + reports added to master dashboard
➕ create a react component from the toolbelt
➕ upload files with drag & drop form component
➕ datepicker component added to form
➕ onboarding component
➕ checklist styling options
➕ button type: icon with text
➕ contact form component
➕ toast notification
➕ centered pop animation
➕ add custom actions to table
🔧 removed body from useAPI (unused)
🔧 removed close account via master in unit tests
🐞 auth bug from v5
🐞 issue with drop table in migration template
🐞 bug when clicking sort on table actions column
3 Aug 2020 v5.1
➕ dynamic email generation with JSON
➕ links to docs in setup flow
➕ improve stripe card error feedback
🔧 toolbelt creates knex migration
🐞 updating profile updates name in nav
🐞 patch user returning undefined in string
15 Jul 2020 v5.0
➕ support for mongo db
➕ new user interface design
➕ animations and animate component
➕ hooks: useAPI, usePlans, userPermissions
➕ last_active field for users
➕ improved billing flow and UI
➕ mobile navigation component
➕ landing page design (+ pricing, checkout)
➕ scoped SCSS
➕ new auth page design
➕ public auth permission
➕ success validation indicator on form inputs
➕ support for Node 14.5+
🔧 improved client-side routing
🔧 stripe price & interval moved to plan level
🔧 improved permission handling
🔧 moved to new stripe client package
🔧 all packages updated
🔧 dynamic pricing component using live prices
🔧 improved password reset flow with token
🔧 all components migrated to functional
🔧 deleted external layout - using new home layout
🔧 improved edit/delete functions in tables
🔧 removed legacy client sessions
🔧 merged Button, IconButton and LoadingButton
🔧 tables render clean dates (YYYY-MM-DD)
🔧 removed legacy nested form inputs
🐞 missing blank slate icon on chart
🐞 await bug when sending email
26 May 2020
🐞 split API into multiple files
🐞 testing flow
🐞 deleting invite with postgres
16 May 2020
➕ added support for Postgres, MSSQL, MariaDB, SQLite3, Oracle, & Redshift
➕ knex.js query builder
➕ unit tests added to toolbelt
➕ node 14 support
🔧 improve setup flow to auto-populate stripe plans
🐞 checkboxes not sending multiple values
3 March 2020
➕ support for Gravity Native
➕ notification model for sending push notifications to mobile devices
➕ free plan option with upgrade flow
➕ support for node 13
➕ show prop on table component to filter which columns to show
🔧 replaced "" with ''
🔧 sign in blocked on deactivated accounts
🔧 removed redundant status keys from controllers
🐞 duplicate key entry in demo/users model
8 Jan 2020
🔧 bug with foreign key constraint when creating multiple views with CLI
14 Oct 2019
➕ CLI Toolbelt to create new MVC files
🔧 user invite email automatically injects the email address into the signup form
🔧 improved handling of expired token - now redirects to login screen
🐞 API verification in model/auth.js
🐞 user.create() returning insertId, not uuid.
🐞 rendering a single action button in a table row
10 Sep 2019
➕ classnames package for creating css classes
🐞 web font not showing
🐞 sizing of icon button
🐞 notification banner not showing close button
🐞 table not showing loader when loading its own data
🐞 table not re-rendering when data prop changes
24 Aug 2018
➕ feather icons
🐞 bug with table sorting
8 Aug 2018
🔧 improved installation/setup process
6 Aug 2019 v3.1 BETA
➕ SCA payment authentication
➕ settings now use ENV vars
🔧 html email templates use dynamically injected url
🔧 improved server-side chart creation with chart.create() model
🔧 stateless application – all server sessions discarded
🐞 invite table not accepting UUIDs
12 Jun 2019 v3.0 BETA
➕ front-end React UI
🔧 configured for Node v12
🔧 new API endpoints for React
🔧 removed gulp
🔧 removed node router
🔧 removed node auth (now handled with React)
7 May 2019 v2.1
🔑 implemented improved security when updating users
14 Apr 2019 v2.0
➕ homepage, pricing and auth page designs
➕ API uses token authentication
➕ router middleware authentication
➕ viewController to reduce complexity of router.js
🔧 implemented proper API routing and methods
🔧 form urls and methods to utilise new API
🔧 improved permission handling
🔧 improved structure of controller and models
🔧 moved stripe methods into separate stripe model
🔧 improved view model to properly utilise respective models
🔧 AJAX request now use proper error codes
🔧 centralised error handling – no more try/catch
🔧 can no longer edit config at runtime
🐞 account.create saving stripe id on error
🐞 config/account not updating email
27 Feb 2019
➕ admin for accounts and users located at /config/accounts and /config/users
5 Feb 2019
🔧 verifySubscription to account.js – automatically checks for an active stripe subscription on in sign in flow
16 Jan 2019
🔧 model & controllers updated to use async/await
🔧 removed has_users table: tables are now linked using foreign key
🐞 validation issue with emails using 4 letter domains extensions
🐞 issue with gulp watch only running once
6 Dec 2018 v1.1
➕ forms can be automatically validated & submitted with submitAJAXForm()
➕ setup process is now managed in the browser at /config/setup
➕ internal config dashboard added at /config (run config/setup first)
➕ metrics available at /config
➕ isURLValid() added to form.js to check input field for a valid URL string
➕ isPhoneValid() added to form.js to check input field for a valid phone number
➕ isSelect() valid added to form.js to check that an option has been selected
🔧 docs now located at https://usegravity.app/docs
🔧 stripe publishable API key is automatically written to file during setup
🔧 settings.js changed to settings.json – update any references to the settings file 🔧 chart functions now show a blank message when there is no data to show
🔧 isRadioValid(), isCheckboxValid(), isSelectValid() now re-validate when an option is selected
🔧 database should be initialised in each model with db.init()
🐞 resolved broken link to /home/privacy in router.js
🐞 plan field length in database updated to 32 chars to accommodate long Stripe plan IDs
🐞 prefixes added to animations