* Make title a link to "default" events view
* Fix event link
* Always return first page when fetching events by permalink to reset any existing pagination state
When reference submission is a self post identifier may vary slightly since it is considering both title and body. Use string matching on identifies to find "close" matches for reference submission
* Separate rule results from check result ownership since results can be re-used
* Implement ruleset data structure for better representation of results
* Add ruleset assoication to check result
* Partially refactor check caching (TODO)
* Same behavior/structure as authorIs
* Refactor interfaces to use a generic FilterOption type
* Allow simplified data for item/author filters -- when prop data is an array of criteria treat as "include OR"
* Switching to lsio as base means inclusion of s6-overlay for improved init, handling of default permissions, and a maintained base for security/bug fixes
* Also means we can use PUID and PGID as variables instead of requiring --user in run command (more friendly to unraid, portainer, etc...)
* BREAKING: mount directory for configuration,etc. has been changed to /config by default to align with lsio
* Clear npm cache after final production install to reclaim 100MB on image size
* More comprehensive dockerignore to prevent accidentally including development files
* Use correct property from entity metadata which has all real db prefixes added (tablePath)
* Look for specified metadata table name instead of generic 'migrations'
* Simplify conditions (DRY)
Don't rely on default sort chosen by reddit as comment/overview are sorted by new but submitted is sorted by hot (why??). Make sure requests always sort by new to prevent inconsistencies.
To prevent any accidental referenced object property re-assignment only use subreddit name to construct subreddit for usernotes. Want to make sure notes don't get read/written to different subs by mistake...this shouldn't be happening but just to be double extra sure.
Since web DB needs to be built separately from server to allow migrations anyway might as well provide *all* the flexibility
* Reverts breaking change removing caching from web
* Add database config override in web config
To make persistence align with client-server architecture
* Create separate datasource instances for client and server
* Refactor migration logic into service so code can be reused between client/server
* Implement endpoints for backup/migrate on client
* Move migrations into separate folders and move client sessions, invites, and web settings into own migration
* Defer session secret generation until client instantiation and save to database when possible
* BREAKING: Replace web.caching with web.storage and restrict options to specifying either top-level database or cache
* Simplifies init but provides options for different use cases
* Default to database
* Implement generic storage provider for web persistence. Uses either cache or database
* Refactor session/invites to use storage provider
* Implement invite entity for database
* Allow specifying different storage provider for sessions
* Remove action/rule as standalone entities because they depend too much on premise data to make sense (not normalized). Instead, consolidate into premise entities.
* Breakout premise config into config/itemIs/authorIs data to make future querying easier
* Improve errors when checking if file is readable or directory/file is writable
* Implement custom winston-typeorm logging mappings so migrations are output at INFO level
* Add typeorm logging options to database config and default to displaying error, warning, and migrations
* Ensure directory is writeable before using log rotation transport for winston
* Move init logger into index so its always available
* Simplify printing stack for SimpleError when it's a cause
* Better handling for access permissions when reading operator config file
* Add hint to errors relating to permissions access if app detects its running in docker
* Change project location to /home/node to avoid root permissions when creating WORKDIR
* Create default config directory with correct permissions in the event no volume is mounted
* Set default db driver to better-sqlite3 since we control environment -- it has better performance and we know we can use a pre-built binary b/c of base docker image
* Add DATA_DIR env to allow specifying a "base directory" for all other config paths. Defaults to project root (same as existing behavior)
* OPERATOR_ENV OPERATOR_CONFIG LOG_DIR and database locations can now be specified as absolute OR relative (from DATA_DIR)
* Look for config.yaml and config.json if no OPERATOR_CONFIG is present