mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
Merge branch 'master' into chat-message-notification-e2e-tests
This commit is contained in:
commit
6e88b3f2bc
280
CHANGELOG.md
280
CHANGELOG.md
@ -4,8 +4,88 @@ All notable changes to this project will be documented in this file. Dates are d
|
||||
|
||||
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
|
||||
#### [3.3.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.2.1...3.3.0)
|
||||
|
||||
- fix(webapp): refine group muting locales [`#8378`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8378)
|
||||
- chore(backend): add e-mail setting for our new 'mailserver' to our backend .env.template [`#8359`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8359)
|
||||
- refactor(backend): set up smtp pooling for nodemailer [`#8167`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8167)
|
||||
- release script does not include commits [`#8381`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8381)
|
||||
- refactor(backend): user graphql [`#8354`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8354)
|
||||
- fix block user [`#8363`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8363)
|
||||
- feat(webapp): add mute/unumute group to menu [`#8335`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8335)
|
||||
- test that there is no email sent when no notification [`#8362`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8362)
|
||||
- feat(backend): notify posts in groups [`#8346`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8346)
|
||||
- docker compose files: use current maildev image from the right repo [`#8351`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8351)
|
||||
- feat(backend): notify users when a followed user posted [`#8313`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8313)
|
||||
- fix(backend): fixing admin email notification settings [`#8356`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8356)
|
||||
- fix(backend): error when there is an abandoned email [`#8315`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8315)
|
||||
- migrate commenting users to observe commented posts [`#8308`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8308)
|
||||
- refactor(backend): new chat message notification email [`#8357`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8357)
|
||||
- refactor(backend): clean migrate scripts [`#8317`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8317)
|
||||
- feat(webapp): notification settings frontend [`#8320`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8320)
|
||||
- posts and comments created by the factory set the observe relation [`#8344`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8344)
|
||||
- refactor(backend): lint - import/order [`#8350`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8350)
|
||||
- lint - import/no-relative-parent-imports [`#8349`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8349)
|
||||
- refactor(other): cleanup cypress configuration [`#8345`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8345)
|
||||
- lint - update plugin promise and cleanup rules [`#8343`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8343)
|
||||
- lint plugin n - update and cleanup [`#8342`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8342)
|
||||
- lint import/no-extraneous-dependencies [`#8341`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8341)
|
||||
- build(deps): bump express from 4.21.2 to 5.1.0 in /webapp [`#8334`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8334)
|
||||
- build(deps): bump express from 4.21.2 to 5.1.0 in /backend [`#8322`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8322)
|
||||
- build(deps): bump mime-types from 2.1.35 to 3.0.1 in /backend [`#8298`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8298)
|
||||
- feat(backend): lint rules [`#8339`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8339)
|
||||
- feat(backend): chat notify via email [`#8314`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8314)
|
||||
- build(deps): Bump docker/metadata-action [`#8245`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8245)
|
||||
- build(deps): Bump docker/build-push-action from 6.9.0 to 6.15.0 [`#8244`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8244)
|
||||
- build(deps): bump docker/login-action from 3.3.0 to 3.4.0 [`#8271`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8271)
|
||||
- build(deps): bump sass from 1.85.0 to 1.86.3 in /webapp [`#8333`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8333)
|
||||
- build(deps): bump validator from 13.12.0 to 13.15.0 in /webapp [`#8305`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8305)
|
||||
- build(deps-dev): bump @faker-js/faker from 9.5.0 to 9.6.0 [`#8257`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8257)
|
||||
- build(deps-dev): bump @faker-js/faker from 9.5.0 to 9.6.0 in /webapp [`#8262`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8262)
|
||||
- build(deps): bump crazy-max/ghaction-github-pages from 4.1.0 to 4.2.0 [`#8328`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8328)
|
||||
- build(deps): bump peter-evans/repository-dispatch [`#8330`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8330)
|
||||
- build(deps): Bump actions/checkout from 4.2.1 to 4.2.2 [`#8247`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8247)
|
||||
- build(deps-dev): bump eslint-config-prettier in /webapp [`#8259`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8259)
|
||||
- build(deps-dev): bump eslint-import-resolver-typescript in /backend [`#8326`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8326)
|
||||
- build(deps): bump actions/cache from 4.2.1 to 4.2.3 [`#8287`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8287)
|
||||
- build(deps-dev): bump @types/node from 22.13.5 to 22.14.0 in /backend [`#8325`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8325)
|
||||
- build(deps-dev): bump typescript from 5.7.3 to 5.8.3 in /backend [`#8324`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8324)
|
||||
- build(deps): bump the babel group across 1 directory with 2 updates [`#8296`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8296)
|
||||
- build(deps-dev): bump @faker-js/faker from 9.5.0 to 9.6.0 in /backend [`#8268`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8268)
|
||||
- build(deps-dev): Bump ts-jest in /backend in the typescript group [`#8237`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8237)
|
||||
- build(deps): bump helmet from 8.0.0 to 8.1.0 in /backend [`#8284`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8284)
|
||||
- build(deps): bump validator from 13.12.0 to 13.15.0 in /backend [`#8297`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8297)
|
||||
- build(deps): bump sanitize-html from 2.14.0 to 2.15.0 in /backend [`#8285`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8285)
|
||||
- build(deps): bump the metascraper group across 1 directory with 12 updates [`#8327`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8327)
|
||||
- build(deps-dev): bump @babel/core in the babel group [`#8277`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8277)
|
||||
- build(deps-dev): bump prettier from 3.5.2 to 3.5.3 in /webapp [`#8260`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8260)
|
||||
- build(deps-dev): bump eslint-plugin-vue from 9.32.0 to 9.33.0 in /webapp [`#8264`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8264)
|
||||
- build(deps-dev): bump prettier from 3.5.2 to 3.5.3 in /backend [`#8266`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8266)
|
||||
- fix(other): leftover hetzner deployment [`#8254`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8254)
|
||||
- refactor(backend): comment on observed post notification [`#8311`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8311)
|
||||
- feat(frontend): observe posts [`#8293`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8293)
|
||||
- expose port so the mailserver can actually be used [`#8319`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8319)
|
||||
- build(deps-dev): bump eslint-config-prettier in /backend [`#8269`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8269)
|
||||
- build(deps-dev): bump eslint-plugin-prettier in /backend [`#8300`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8300)
|
||||
- build(deps): bump amannn/action-semantic-pull-request [`#8303`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8303)
|
||||
- build(deps): bump actions/setup-node from 4.2.0 to 4.3.0 [`#8288`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8288)
|
||||
- build(deps): bump actions/upload-artifact from 4.6.1 to 4.6.2 [`#8289`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8289)
|
||||
- fix(backend): typo in groups resolver [`#8318`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8318)
|
||||
- fix frontend package lock [`#8316`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8316)
|
||||
- migration adds OBSERVES relation between author and post [`#8307`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8307)
|
||||
- fix(backend): users observing post count [`#8295`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8295)
|
||||
- feat(webapp): track online status [`#8312`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8312)
|
||||
- Replace argfile by slurpfile [`#8309`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8309)
|
||||
- build(deps-dev): Bump cypress from 14.0.3 to 14.1.0 in the cypress group [`#8229`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8229)
|
||||
- provide information of the observing status of the post after creating a comment [`#8310`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8310)
|
||||
- feat(backend): observe posts [`#8292`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8292)
|
||||
- release: also update helmchart versions [`#8256`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8256)
|
||||
|
||||
#### [3.2.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.2.0...3.2.1)
|
||||
|
||||
> 3 March 2025
|
||||
|
||||
- v3.2.1 [`#8248`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8248)
|
||||
- remove the requirement for non-existant job in publish workflow [`#8251`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8251)
|
||||
- removed dockerhub related stuff [`#8249`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8249)
|
||||
- feat(webapp): implement configurable custom button in header [`#8215`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/8215)
|
||||
@ -295,9 +375,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Bump dotenv from 16.3.1 to 16.4.4 [`#7010`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/7010)
|
||||
- Bump dorny/paths-filter from 3.0.0 to 3.0.1 [`#7006`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/7006)
|
||||
- chore(other): update packages 08.02 [`#75`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/75)
|
||||
- update frontend packages [`fef8157`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fef8157b0cdf9081678365e9a7f6339ef787423c)
|
||||
- update frontend packages [`dce59c1`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/dce59c11089e23f3ed97dfbfea39507e7c098c30)
|
||||
- Add converted SVG icons with properties 'fill' and 'stroke' on 'svg' tag [`b1a7e91`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/b1a7e916314a0d59a65d2cdb244e6117d796dda1)
|
||||
|
||||
#### [3.2.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.1.2...3.2.0)
|
||||
|
||||
@ -453,9 +530,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix(other): fix link in `deployment/TODO-next-update.md` to `deployment/deployment-values.md` [`#6729`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6729)
|
||||
- Bump cypress from 13.2.0 to 13.3.1 [`#6789`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6789)
|
||||
- fix(other): remove buggy space in filename 'neo4j-data-snapshot.yaml ' to 'neo4j-data-snapshot.yaml' [`#6777`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6777)
|
||||
- storybook tests [`ff7a1c5`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ff7a1c548405c3a60341844679e70d93aebb2e3c)
|
||||
- update vuepress [`cbf7bdc`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/cbf7bdc84ccf02c9658748b945dac7ebc405e5b2)
|
||||
- update storybook [`a0b77d7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a0b77d78a3e7a483d204337e3d42dd9dd56ad69a)
|
||||
|
||||
#### [3.1.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.1.1...3.1.2)
|
||||
|
||||
@ -464,9 +538,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- chore(release): release v3.1.2 - fix kubernetes deployment by degrade Node version from v20.7.0 to v20.2.0 [`#6782`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6782)
|
||||
- fix(other): kubernetes error by degrading node version from v20.7.0 to v20.2.0 [`#6779`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6779)
|
||||
- fix(backend): cypher statement in user locales unit test [`#6780`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6780)
|
||||
- Release v3.1.2 - Fix Kubernetes Deployment by degrade Node version from v20.7.0 to v20.2.0 [`aa2d27e`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/aa2d27e8caefeac578fb30fc5b426dbd51e84b34)
|
||||
- Fix Dockerfile labels [`5d2c41d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5d2c41d12ec9c892a38d8f8e2325194618fc35e4)
|
||||
- Degrade Node version from v20.7.0 to v20.2.0 [`988e874`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/988e874934dcf0caa060600e843138664fb367c5)
|
||||
|
||||
#### [3.1.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.1.0...3.1.1)
|
||||
|
||||
@ -496,9 +567,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(other): bump node from 20.2.0-alpine3.17 to 20.6.0-alpine3.17 in /backend [`#6710`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6710)
|
||||
- build(other): bump actions/cache from 3.3.1 to 3.3.2 [`#6714`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6714)
|
||||
- build(other): bump actions/checkout from 3 to 4 [`#6713`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6713)
|
||||
- Bump @storybook/vue from 6.3.6 to 7.4.0 in /webapp [`8113d47`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/8113d47dfcbfa0a63ae1f035d9d24a4c548d2089)
|
||||
- Revert "update cypress packages" [`2229baf`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2229baff6fb74d92ed395fb90a1421f994368a20)
|
||||
- update cypress packages [`dbedcf9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/dbedcf901d3040d1a6a8db62170bdea86d020bb1)
|
||||
|
||||
#### [3.1.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.0.4...3.1.0)
|
||||
|
||||
@ -507,9 +575,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- chore(release): release v3.1.0 – use of dkim in deployment [`#6733`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6733)
|
||||
- chore(other): use dkim values in helm script of backend [`#6731`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6731)
|
||||
- fix(other): add global package.json to workflow file filters [`#6706`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6706)
|
||||
- Release v3.1.0 [`6276d87`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/6276d87c6a427438c5fbf56c0f7bc414293e671d)
|
||||
- Fix super fluid spaces [`ecdaf83`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ecdaf83ac57bd4186f064d891d2570ce2438d47f)
|
||||
- Use DKIM values in Helm script of backend [`2ea98b1`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2ea98b1900c1b33712a2456dde6ba3dfb6d95b00)
|
||||
|
||||
#### [3.0.4](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.0.3...3.0.4)
|
||||
|
||||
@ -525,9 +590,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(other): bump @babel/preset-env from 7.9.5 to 7.22.9 in /backend [`#6578`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6578)
|
||||
- build(other): bump @babel/preset-env from 7.22.7 to 7.22.9 [`#6572`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6572)
|
||||
- build(other): bump dotenv from 8.6.0 to 16.3.1 [`#6483`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6483)
|
||||
- Bump @babel/preset-env from 7.9.5 to 7.22.9 in /backend [`ae0c6f1`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ae0c6f12bd86c39b33a2b48c2eeb0eccb880821c)
|
||||
- Revert "Revert "Revert "update metascraper packages""" [`7fdc5e8`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7fdc5e8f5ed8e191763acfcd74c510138145f612)
|
||||
- Revert "Revert "update metascraper packages"" [`d5c1421`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d5c142129291264d5508b3f32b8500c2451a5f39)
|
||||
|
||||
#### [3.0.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.0.2...3.0.3)
|
||||
|
||||
@ -539,9 +601,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix(webapp): filtermenu mobile bug [`#6694`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6694)
|
||||
- fix(webapp): fix proxyapiurl in chat rooms for the avatars [`#6693`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6693)
|
||||
- fix(webapp): fix the group link in the map [`#6698`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6698)
|
||||
- Bump @babel/core from 7.22.8 to 7.22.9 [`209390a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/209390a7e026b03ee92f7b1ecb3b1a7b3b2e0232)
|
||||
- Write documentation for DKIM e-mail setting [`9f5d32e`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9f5d32e527151854f1888614c59e0aa5f2b504d0)
|
||||
- Release v3.0.3 [`7d761c2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7d761c262a6e7bf6382cc49148c55ac8037db12a)
|
||||
|
||||
#### [3.0.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.0.1...3.0.2)
|
||||
|
||||
@ -550,9 +609,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- chore(release): release v3.0.2 – fix chat avatar error and wrong font in network [`#6674`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6674)
|
||||
- fix(webapp): fix wrong font in whole network comming from chat component [`#6672`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6672)
|
||||
- fix(webapp): fix 'm.avatar is null' error message [`#6671`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6671)
|
||||
- Release v3.0.2 [`7bcad81`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7bcad81785de39115ba03aa37fb26caeff7775f2)
|
||||
- Remove font 'Quicksand' from the chat [`5b95419`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5b954197dc93bd5715f657539ca1b9b32d7d557a)
|
||||
- Fix 'm.avatar is null' error message [`2c12331`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2c123313ed6267bb1c88470ba7ae3f4f693cfc15)
|
||||
|
||||
#### [3.0.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/3.0.0...3.0.1)
|
||||
|
||||
@ -560,9 +616,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
|
||||
- chore(release): release v3.0.1 – fix chat avatars [`#6667`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6667)
|
||||
- fix(webapp): try to fix avatars [`#6660`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6660)
|
||||
- Releasde v3.0.1 – fix chat avatars [`0daeb5b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0daeb5b957e11d206ceddc3e8b275929e1850d18)
|
||||
- conditional url replacement [`5c1ab88`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5c1ab880127a5f4c1b457598fafd3ae9fe1a0d12)
|
||||
- try to fix avatars [`6f43321`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/6f43321abad945602529b962e536546ab541cd70)
|
||||
|
||||
### [3.0.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.7.0...3.0.0)
|
||||
|
||||
@ -656,9 +709,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Bump node from 20.2.0-alpine3.17 to 20.3.0-alpine3.17 in /webapp [`#6408`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6408)
|
||||
- fix(backend): typescript fix [`#6448`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6448)
|
||||
- refactor(backend): migrate completely to typescript [`#6434`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6434)
|
||||
- remove package cypress-file-upload from e2e testing [`73f6bc6`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/73f6bc642194b0c73769d4e8d8e53645b6e80adf)
|
||||
- fixed cypress [`5f545f3`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5f545f3b8fc6927954e036b27ad2e123bcd36149)
|
||||
- fix seed to not use promise all where easily refactored [`1b0f512`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1b0f5124159033214f99bfbc4cebe9dfaa7dd76e)
|
||||
|
||||
#### [2.7.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.6.0...2.7.0)
|
||||
|
||||
@ -716,9 +766,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat(backend): event parameters [`#6198`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6198)
|
||||
- feat(backend): create and update posts with labels [`#6197`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6197)
|
||||
- feat(backend): add article label to posts [`#6196`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6196)
|
||||
- Cypress: update packaage info [`b38769b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/b38769b048e9cb9ca07862a61ea810f21b4ce82a)
|
||||
- update cypress related packageges in package.json [`692ec2a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/692ec2a11555600647ec8d95b8296c9869948b02)
|
||||
- fixed coverage reporting [`540cd40`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/540cd40e10ec0461ef17379cb93d914839f3a84f)
|
||||
|
||||
#### [2.6.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.5.1...2.6.0)
|
||||
|
||||
@ -752,9 +799,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Bump @babel/core from 7.9.0 to 7.21.4 [`#6200`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6200)
|
||||
- Bump @babel/preset-env from 7.12.7 to 7.21.4 [`#6204`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6204)
|
||||
- Bump expect from 25.3.0 to 29.5.0 [`#6098`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6098)
|
||||
- separate test workflows [`3533a36`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3533a36cdc811c0e1dae218fbc2184f7c4bc3951)
|
||||
- get it working [`8df7d5d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/8df7d5d265b0c5ba16f167a213631d765d2f985e)
|
||||
- feat(webapp): group categories on posts [`3244f3f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3244f3f86d1e8c09e0fd49f43c49f0a3aa8b85ab)
|
||||
|
||||
#### [2.5.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.5.0...2.5.1)
|
||||
|
||||
@ -763,9 +807,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- chore(other): release v2.5.1 – fix filter menu width [`#6180`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6180)
|
||||
- feat(webapp): add tooltips to all menu icons [`#6185`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6185)
|
||||
- fix(webapp): popup filter max-width [`#6177`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/6177)
|
||||
- Add tooltip to header notifications menu [`28505a5`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/28505a5b181008ebcde6fa58b7a4a8459a492018)
|
||||
- Add tooltip to header avatar menu [`4c0469f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/4c0469f61a3c2fae23e50c6a5a2a91b63fac149a)
|
||||
- Release v2.5.1 - fix filter menu width [`08def14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/08def14cafef7816d8e43f1896430400bda9635d)
|
||||
|
||||
#### [2.5.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.4.0...2.5.0)
|
||||
|
||||
@ -885,9 +926,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- brand_as_default [`#4`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4)
|
||||
- limit_replicasets [`#3`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3)
|
||||
- Deployment [`#2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2)
|
||||
- moved example into stage.ocelot.social [`61b5112`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/61b5112b8b547a7491d644c7c4dbfead39b61d79)
|
||||
- feat(backand): upgrade jest to 29.4 [`4390d72`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/4390d72477fb941f69bc9bdc24ac7713ef06e827)
|
||||
- pages tests nearly working [`4850e45`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/4850e456fe5b7c158f23acc7f153576472604300)
|
||||
|
||||
#### [2.4.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.3.0...2.4.0)
|
||||
|
||||
@ -910,9 +948,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix(backend): do not expose registered emails on registration [`#5909`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5909)
|
||||
- refactor(backend): node 19 with fixed image upload [`#5897`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5897)
|
||||
- refactor(webapp): nump docker version to `16.19.0` in webapp & maintenance [`#5842`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5842)
|
||||
- updated required packages for node19, fix fs-capacitator [`11087cb`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/11087cbaefde604668ac192b710666df09cb813c)
|
||||
- fixed build error [`3889204`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3889204f871df97b307401032900db7940913038)
|
||||
- linting [`8bfe486`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/8bfe486034badd55a8096982f81aba08207b9e83)
|
||||
|
||||
#### [2.3.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.2.0...2.3.0)
|
||||
|
||||
@ -931,9 +966,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat(other): semantic pullrequest workflow [`#5634`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5634)
|
||||
- fix: Cannot Add Group Members as New Members to Group [`#5635`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5635)
|
||||
- fix: My Groups Count Includes Pending Membership [`#5631`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5631)
|
||||
- frontend: jest coverage [`f57e11d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f57e11dd021dbb156b33fbd5538cf5ca32df7334)
|
||||
- reverted yarn lock [`a01aee8`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a01aee89a92bbc9885e2895c577eb3c63042ba22)
|
||||
- reverted all package updates [`a520089`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a5200893f4508d45619447231b6789178a51daf7)
|
||||
|
||||
#### [2.2.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.1.0...2.2.0)
|
||||
|
||||
@ -953,9 +985,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix: 🍰 Fix Group Teaser [`#5584`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5584)
|
||||
- feat: 🍰 List All Groups [`#5582`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5582)
|
||||
- feat: 🍰 Header Logo Routing Update [`#5579`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5579)
|
||||
- add header menu to component, central variabl for screen width [`401f59a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/401f59ae8de5b1c27f0e26e1f71778d3257d2180)
|
||||
- comment out LanguagesFilter, EmotionsFilter, fix tests, fix lint [`52dcd77`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/52dcd772fa81e02a0d95e89a9fc8232e70a09d28)
|
||||
- fix lint [`15561cb`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/15561cb94f8768e93846c25945c935ae83977553)
|
||||
|
||||
#### [2.1.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/2.0.0...2.1.0)
|
||||
|
||||
@ -965,9 +994,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: 🍰 EPIC Groups [`#5132`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5132)
|
||||
- chore: 🍰 Remove Group Branchs `5059-epic-groups` Separate Auto-Deployment [`#5552`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5552)
|
||||
- fix: [WIP] 🍰 Long Words Are Being Wrapped Now [`#5559`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5559)
|
||||
- Remove groups separate auto-deployment [`c8d8168`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c8d816887b2d49293d1b8ee2805d452fe10d907e)
|
||||
- Release v2.1.0 [`dc085e9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/dc085e9e69b288fce6dd06e8d7eb05ef34bd9a7b)
|
||||
- Add database migration to auto-deployment on publish [`ef06f1a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ef06f1a67d2654aaeb55d0434d3324a3ac37a380)
|
||||
|
||||
### [2.0.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.1.1...2.0.0)
|
||||
|
||||
@ -999,9 +1025,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: 🍰 Implement `JoinGroup`, `GroupMember`, `SwitchGroupMemberRole` Resolvers [`#5199`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5199)
|
||||
- chore: 🍰 Add Groups To Seeding [`#5185`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5185)
|
||||
- feat: 🍰 Implement Group GQL Model And CRUD Resolvers – First Step [`#5139`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5139)
|
||||
- Refine design and functionality of group list and create, edit group [`7b11122`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7b11122bea4868624dd1c1641219e71070412e20)
|
||||
- improved code and tests as suggested by @tirokk, thanks for the great review! [`631f34a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/631f34a2e5224d68279337a92e7535794b670d70)
|
||||
- implement and test post visibilty when leaving or changing the role in a group [`76bfe48`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/76bfe484768cf9b20b2dced865d5d3e3eb999235)
|
||||
|
||||
#### [1.1.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.1.0...1.1.1)
|
||||
|
||||
@ -1030,9 +1053,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Bump cross-env from 7.0.2 to 7.0.3 in /webapp [`#5168`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5168)
|
||||
- chore: 🍰 Add `--logHeapUsage` To Jest Test Call [`#5182`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5182)
|
||||
- refactor: 🍰 Rename `UserGroup` To `UserRole` [`#5143`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5143)
|
||||
- add new yunite icons [`bb0d632`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/bb0d6329e7e36ea03671318ea8dd128a6d5a5a7a)
|
||||
- cleanup refactor rebranding [`5f5c0fa`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5f5c0faa1f28cd4df7681eba335ae5998b2d9cca)
|
||||
- change color and scss in branding [`52070b8`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/52070b8c570970bf48df561134bf67cb4111b640)
|
||||
|
||||
#### [1.1.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.9...1.1.0)
|
||||
|
||||
@ -1042,9 +1062,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: Make Categories Optional [`#5102`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5102)
|
||||
- Update issue templates [`#5101`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5101)
|
||||
- chore: 🍰 Betters Automatic Deployment To `stage.ocelot.social` On Push To `master` Branch [`#5097`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5097)
|
||||
- add optional categories to teaser and post [`bc95500`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/bc955003f7c33aabe592bee782aca973b4f00cba)
|
||||
- env vatiable for CATEGORIES_ACTIVE and switch for categories in contribution form [`e31f250`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e31f250ea5e1949f4f08e72fe82622d41ecd85f1)
|
||||
- fix some tests [`5393c2a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5393c2aeaaf070a637390c430d5f03057030ff52)
|
||||
|
||||
#### [1.0.9](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.8...1.0.9)
|
||||
|
||||
@ -1058,9 +1075,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- chore: 🍰 Change `image` Entries In Docker Compose Files And Fix Apple M1 Problem [`#5073`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5073)
|
||||
- chore: 🍰 Rename Neo4j Docker Image In General To `neo4j-community:*` [`#5078`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5078)
|
||||
- chore: 🍰 Fix `ocelotsocialnetwork/webapp:latest` And `ocelotsocialnetwork/backend:latest` On Start In Cluster [`#5076`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/5076)
|
||||
- Add documentation for Apple M1 Docker Compose override files [`2f3f37c`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2f3f37c158cfc9b300540d3c8f016548b15a5277)
|
||||
- Add documentation for Docker build analyzes [`fbbcc5b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fbbcc5bb854d53b5fa658b83d56d381a3cbc2b1a)
|
||||
- Implement DigitalOcean Kubernetes deployment on publishing [`485e698`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/485e6986b88a14db5ab75ed12bab5cdc73592ca6)
|
||||
|
||||
#### [1.0.8](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.7...1.0.8)
|
||||
|
||||
@ -1077,9 +1091,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- bug: 🍰 Replace Deleted Faker Package [`#4973`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4973)
|
||||
- fix: 🍰 Change Tip Tap Editor Legend Hover To Click [`#4911`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4911)
|
||||
- fix: 🍰 Fix Embed iframe Width And Height CSS [`#4897`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4897)
|
||||
- Implement MySomethingList for social media, use list item slot [`d3cc49d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d3cc49d37ba260f9a285c078c57e673a32a76732)
|
||||
- Split social media page and list component [`b740033`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/b7400339aba22d5fb5506dc3b25f082d7f09edfc)
|
||||
- Remove input addSocialMedia [`58464fd`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/58464fd53ef6aab52af1c2477c2615648ad889e3)
|
||||
|
||||
#### [1.0.7](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.6...1.0.7)
|
||||
|
||||
@ -1096,9 +1107,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- doc: 🍰 Update README.md Etc. [`#4733`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4733)
|
||||
- feat: 🍰 New CSS For Internal Pages [`#4741`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4741)
|
||||
- fix: 🍰 Change Notification E-Mails Settings Page Link [`#4742`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4742)
|
||||
- Refactor internal pages to new CSS [`acad80c`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/acad80c3c8262934dd2e38961c08c0fde769099a)
|
||||
- Renew JWT in decode test [`46eb6b8`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/46eb6b82ea802d4d6ca7294cd32d1fe16425bfea)
|
||||
- Revert "Renew JWT in decode test" only for changing the Neode version [`a0d92b4`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a0d92b4853d09d725c1fb7886cbfed2a00e1f05c)
|
||||
|
||||
#### [1.0.6](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.5...1.0.6)
|
||||
|
||||
@ -1111,9 +1119,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Bump codecov from 3.7.1 to 3.8.2 [`#4401`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4401)
|
||||
- Centered the login-form [`#4660`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4660)
|
||||
- Spelling Change [`#4654`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4654)
|
||||
- suggested solutions [`5699620`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5699620c858925101f561f315034c57fae878964)
|
||||
- Implement or move sort by date filter in filter menu [`16d8a42`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/16d8a42d9b4f90e8a1c22da0637f95adb25b4e8f)
|
||||
- Translate order by [`245be52`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/245be52ac8d9e41998da10cf2d1a752bbefc0c0c)
|
||||
|
||||
#### [1.0.5](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.4...1.0.5)
|
||||
|
||||
@ -1172,9 +1177,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: 🍰 Post Editor Legend [`#4492`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4492)
|
||||
- New Issue type EPIC [`#4536`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4536)
|
||||
- Upgrade to GitHub-native Dependabot [`#4399`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4399)
|
||||
- Remove superfluous package-lock.json [`c7e4e6d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c7e4e6d2b26d448b3d2787aff4a0bde32c24e919)
|
||||
- Delete superfluous and always conflicting file package-lock.json [`9932796`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9932796d233789c76b917de533ec2efc99f6aa4a)
|
||||
- Refactor pageParams, second step [`e8a0a5d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e8a0a5d13c0610066c50c98d5e0d661ee8139217)
|
||||
|
||||
#### [1.0.4](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.3...1.0.4)
|
||||
|
||||
@ -1186,9 +1188,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: 🍰 Flexible Footer Links [`#4468`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4468)
|
||||
- docs: 🍰 Correct 'Contribution.md' [`#4466`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4466)
|
||||
- docs: 🍰 Correct Discord Links And Divers [`#4461`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4461)
|
||||
- Implement flexible page footer links [`1bd4af6`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1bd4af6fd3b5db167575910948a0a72461a1129a)
|
||||
- Implement tests for flexible page footer links [`627a20f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/627a20f66a65450996a5fe3128fd37769fdfd629)
|
||||
- Correct Discord links and divers [`0318910`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0318910488e245c4a1d09181265de63d05a89cf1)
|
||||
|
||||
#### [1.0.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.2...1.0.3)
|
||||
|
||||
@ -1204,18 +1203,12 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- frontend + backend coverage tests [`#4367`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4367)
|
||||
- refactor: 🍰 Refactor E-Mail Templates [`#4350`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4350)
|
||||
- feat: 🍰 Remove More-Info Of Post [`#4316`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4316)
|
||||
- have cypress running locally - the tests still fail [`e3e0341`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e3e03415e1bd9e0be88f33930a52e63d8af64ee1)
|
||||
- have cypress running locally - the tests still fail [`0ec0574`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0ec05743751cfef0cb86c17b87e9e4ef9a2c9e47)
|
||||
- Refactor logos, first step [`ff6cc30`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ff6cc306aff6150a924f1a647387e498d050ea9f)
|
||||
|
||||
#### [1.0.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.1...1.0.2)
|
||||
|
||||
> 6 April 2021
|
||||
|
||||
- fix: Email Confirmation-Link When An Invite-Code Is Given [`#4336`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4336)
|
||||
- release v1.0.2 [`e583010`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e5830101e4b449905fe2d0018627d75af62b2a20)
|
||||
- slider jumps to enter-nonce when link contains invite-code, email and nonce and method is invite-code. Thanks @tirokk [`c80b3a2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c80b3a212835f76cfc2f11542345d6c3b226995b)
|
||||
- fix enail confirmation link when an invite-code is given [`27f0de9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/27f0de9464685c8f960bde9d07986fdc5b20f8f9)
|
||||
|
||||
#### [1.0.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.0...1.0.1)
|
||||
|
||||
@ -1225,9 +1218,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- jwt_expiretime [`#4330`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4330)
|
||||
- Clean env, docker & workflow [`#4337`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4337)
|
||||
- fix: 🍰 Fixing The Avatars unwanted Border [`#4320`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4320)
|
||||
- Change background color of avatar image to white [`e48a99a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e48a99afe63e96cffafe16db7bf5ae35cfdebd7a)
|
||||
- removed config warning [`f6c070a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f6c070a3cb36c5593123b27b4d1b6a5b7a10aba3)
|
||||
- include env files in build process [`dfe6f67`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/dfe6f679b3bb0f440aee986d6d12925cccee9050)
|
||||
|
||||
### [1.0.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.15...1.0.0)
|
||||
|
||||
@ -1241,9 +1231,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix: JWT Expires In 2 Years [`#4278`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4278)
|
||||
- Deployment [`#4263`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4263)
|
||||
- feat: 🍰 Redesign Registration Process Frontend [`#4168`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4168)
|
||||
- Delete unnecessary code [`3fa7e04`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3fa7e04d4895161db1f764ccad58e35188c9d065)
|
||||
- basic invite button in frontend [`356f026`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/356f02622655a57561fcdecfcc8a735d23cac79f)
|
||||
- setting up invite button [`e6dc3f4`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e6dc3f42cedaf9953d737cf30cf7ed317b634be7)
|
||||
|
||||
#### [0.6.15](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.14...0.6.15)
|
||||
|
||||
@ -1255,18 +1242,12 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- dashboard restructuring image [`#4266`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4266)
|
||||
- fix: 🐛 Adapted Editor List Styles [`#4239`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4239)
|
||||
- fix: Scrolling On Profile Page [`#4234`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4234)
|
||||
- release 0.6.15 [`ef4265d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ef4265d9387d94aa09db2b80461c2ec90b4623ae)
|
||||
- count views of post teaser [`1c3f628`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1c3f628fb2e161400319b32da274952c1b57836e)
|
||||
- tests fixed for clickedCount [`96066ea`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/96066eae02e659a00bce280f9f97a28ac1446ce0)
|
||||
|
||||
#### [0.6.14](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.13...0.6.14)
|
||||
|
||||
> 17 February 2021
|
||||
|
||||
- fix: Add Null Migration [`#4233`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4233)
|
||||
- release 0.6.14 [`394860c`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/394860c1d0d6ff23f6653b81288890a67720deab)
|
||||
- add null mutation [`a7489a0`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a7489a044c4b4b556f6b26d555657478ebd6409b)
|
||||
- fixed misspelling in changelog [`3ad6d73`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3ad6d738fd5d9ed25c0cccc6ae60ed5cc37540ba)
|
||||
|
||||
#### [0.6.13](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.12...0.6.13)
|
||||
|
||||
@ -1274,9 +1255,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
|
||||
- fix: css so follow button isn't blocked by adblock [`#4230`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4230)
|
||||
- fix: Query Available Roles As Admin [`#4225`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4225)
|
||||
- release 0.6.13 [`e2503d4`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e2503d496606aa79b5ab59319f76466e04a79bd0)
|
||||
- avoid introspection to get available roles as admin [`a5df793`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a5df793c55ec8792066e61547ae287f7702675fd)
|
||||
- css fix to trick adblock on follow button by @nila99 [`13931c9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/13931c90e7642da93de0e884afd1649de8181c6c)
|
||||
|
||||
#### [0.6.12](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.11...0.6.12)
|
||||
|
||||
@ -1284,8 +1262,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
|
||||
- Smtp secure option [`#4223`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4223)
|
||||
- chore: 🐛 Fix Migrations By Migrations Folder Having .gitkeep [`#4222`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4222)
|
||||
- SMTP_SECURE option [`8e2d8a7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/8e2d8a77c3a825880deb4c668d647ee6503edc7f)
|
||||
- New file .gitkeep in migrations [`814c1b8`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/814c1b88aed2e6e353f2af2f277229629cc2e788)
|
||||
|
||||
#### [0.6.11](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.10...0.6.11)
|
||||
|
||||
@ -1294,16 +1270,12 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- chore: 🍰 Resolve WEBSOCKETS_URI .env Problem [`#4219`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4219)
|
||||
- chore: 🐛 'db:migrate up' By Moving Examples Outside Of Migrations Folder [`#4221`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4221)
|
||||
- fix: Location Tests In Backend [`#4220`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4220)
|
||||
- MAPBOX introduced district for US-Cities. So I used a German City instead [`7a31334`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7a313344cbddaca7bcb073b01a549bfe2a5c3852)
|
||||
- Resolve WEBSOCKETS_URI config problem [`ac27d6a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ac27d6ac9653046d98e559fe1532648d7ddfa92e)
|
||||
- Fix 'db:migrate up' by moving examples outside of migrations folder [`063c730`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/063c730e5fb3e3ea363deb5adebdbf69589ec7b4)
|
||||
|
||||
#### [0.6.10](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.9...0.6.10)
|
||||
|
||||
> 12 February 2021
|
||||
|
||||
- Use original images [`#4217`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4217)
|
||||
- original images instead of broken whitelabled ones [`2303b92`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2303b92146d71d8ec12b6fa75a4a0c513db96594)
|
||||
|
||||
#### [0.6.9](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.8...0.6.9)
|
||||
|
||||
@ -1311,25 +1283,18 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
|
||||
- fix_webapp_production [`#4216`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4216)
|
||||
- Move Old Migrations From HC To Examples Folder To Avoid Conflicts [`#4215`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4215)
|
||||
- typo [`7d21196`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7d21196973282ce904db8776fbef8e0961dac6e5)
|
||||
- fixed prodution stage of webapp container [`02d31d0`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/02d31d0a94aa73a5026d2d9c183c63d1a7e43b6c)
|
||||
- moved old migrations from HC to examples folder to avoid conflicts with new migrations [`efec46d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/efec46d9d485ec439a25adcac6da105683a221ad)
|
||||
|
||||
#### [0.6.8](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.7...0.6.8)
|
||||
|
||||
> 11 February 2021
|
||||
|
||||
- refactor: 🍰 Remove Emojis From Post Page [`#4208`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4208)
|
||||
- release 0.6.8 [`b947918`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/b94791873bb3c9524daff78fc9d0f7bdb385127d)
|
||||
- Refinied design [`58728df`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/58728df97b3a21d34e9476f2be139add33c75b42)
|
||||
- remove emojis from post page [`4097cc1`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/4097cc16f723dfd2af64c4adcfef978b1c81e07b)
|
||||
|
||||
#### [0.6.7](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.6...0.6.7)
|
||||
|
||||
> 10 February 2021
|
||||
|
||||
- Support newest docker [`#4210`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4210)
|
||||
- push all tags again, since docker is updated on github (...) [`c491fd6`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c491fd692155b16822426372c58b5770daf2c0aa)
|
||||
|
||||
#### [0.6.6](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.5...0.6.6)
|
||||
|
||||
@ -1339,9 +1304,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: 🍰 Switch User Role As Admin [`#4136`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4136)
|
||||
- feat: Image Cropping Is Optional [`#4199`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4199)
|
||||
- publish workflow [`#4195`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4195)
|
||||
- change user roles is working, test fails [`c528269`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c528269cb2972e6ea937d31ba22d0e11168141f2)
|
||||
- file upload: refactored [`650e83f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/650e83f4c250389477933a2e7d21d8245b0ce882)
|
||||
- change user role: tests are working [`14dfe2a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/14dfe2ae2cd4a24c06c9229893b33586dfceae4f)
|
||||
|
||||
#### [0.6.5](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.4...0.6.5)
|
||||
|
||||
@ -1366,9 +1328,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat: 🍰 Allow Only Supported Image File Formats [`#3928`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3928)
|
||||
- refactor: Disbale Emoji, Language And Catgeory Filter [`#4193`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4193)
|
||||
- refactor: Remove Catgeories From Post Teaser [`#4191`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4191)
|
||||
- - adjusted changelog to ocelot-social repo [`9603882`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9603882edebf8967e05abfa94e4e1ebf452d4e24)
|
||||
- - first steps towards docker image deployment & github autotagging [`5503216`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5503216ad4a0230ac533042e4a69806590fc2a5a)
|
||||
- - lots of additional tests [`0ba37aa`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0ba37aab18f537d722aede7b87fa0b8e79f80e66)
|
||||
|
||||
#### [0.6.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.6.0...0.6.0)
|
||||
|
||||
@ -1547,9 +1506,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps-dev): bump babel-jest from 25.2.3 to 25.2.4 in /backend [`#3363`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3363)
|
||||
- build(deps-dev): bump expect from 25.2.3 to 25.2.4 [`#3360`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3360)
|
||||
- build(deps-dev): bump auto-changelog from 1.16.2 to 1.16.3 [`#3334`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3334)
|
||||
- snapshot changed / facebook link stays the same for testing purposes [`71f4e2b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/71f4e2bd6e8427de8ddab410ef0f8fc476309bf8)
|
||||
- design data up to now [`72b8c22`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/72b8c2263496ac640ce4cba60da2159092ad2ae0)
|
||||
- Change maintenance svg [`11aabf0`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/11aabf0b16ad69fa9d3e84a1628775d357c24985)
|
||||
|
||||
#### [v0.6.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.5.0...v0.6.0)
|
||||
|
||||
@ -1575,9 +1531,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps-dev): bump babel-jest from 25.2.0 to 25.2.1 in /backend [`#3341`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3341)
|
||||
- build(deps-dev): bump jest from 25.1.0 to 25.2.1 in /webapp [`#3342`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3342)
|
||||
- feat(backend): upload original image files on S3 object storage [`#3262`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3262)
|
||||
- refactor: CategoriesFilter to not use ds-flex [`1ffde6b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1ffde6bf1034d1a1d9b7bca62fe66fe64527314c)
|
||||
- chore: fix lint w/ new linting rules [`06985c2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/06985c2dbbc6699cc5c3dfd6e55cac8d28e9019b)
|
||||
- chore: Fix lint w/ new linting rules [`cb0a3f5`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/cb0a3f5cdd5e7fe47f46ae08798628eecb28e9b5)
|
||||
|
||||
#### [v0.5.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.4.2...v0.5.0)
|
||||
|
||||
@ -1632,9 +1585,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps-dev): bump date-fns from 2.10.0 to 2.11.0 [`#3273`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3273)
|
||||
- build(deps): [security] bump acorn from 6.3.0 to 6.4.1 in /backend [`#3270`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3270)
|
||||
- build(deps): [security] bump acorn from 6.1.1 to 6.4.1 [`#3269`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3269)
|
||||
- Update prettier to v2 [`276ea79`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/276ea79e8ff2de2d02698b486671aee7cfda860e)
|
||||
- Changes requested by @mattwr18 [`9c08db2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9c08db22dcd0ca1ad6e59be8fb0f287935b45537)
|
||||
- search specs refactored [`46fca22`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/46fca229ec35047eda9ac7809e7bc456785a6c70)
|
||||
|
||||
#### [v0.4.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.4.1...v0.4.2)
|
||||
|
||||
@ -1667,9 +1617,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps): bump metascraper-description from 5.11.1 to 5.11.6 in /backend [`#3233`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3233)
|
||||
- build(deps): bump cross-env from 7.0.1 to 7.0.2 in /backend [`#3245`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3245)
|
||||
- build(deps): bump metascraper-title from 5.11.1 to 5.11.6 in /backend [`#3244`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3244)
|
||||
- DRY user.spec.js [`da16590`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/da165906e2ed12baddd902b43064103ab3adfa06)
|
||||
- test deleteuser as admin, moderator, another user and as I myself, fix lint [`3983612`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3983612c56ac92473a192a318959e4c691a3e7b8)
|
||||
- feature: test delete user as admin [`84c1547`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/84c154798efac0cec4c13dfefae18a6a9542058a)
|
||||
|
||||
#### [v0.4.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.4.0...v0.4.1)
|
||||
|
||||
@ -1744,9 +1691,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps): bump sanitize-html from 1.21.1 to 1.22.0 in /backend [`#3145`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3145)
|
||||
- build(deps): bump nodemailer from 6.4.2 to 6.4.3 in /backend [`#3144`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3144)
|
||||
- build(deps): bump metascraper-video from 5.10.7 to 5.11.1 in /backend [`#3143`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3143)
|
||||
- build(deps-dev): bump @storybook/addon-notes in /webapp [`5ef2b25`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5ef2b25ee6a3402a2ebe2f3f55dd65a6e0a1111e)
|
||||
- build(deps-dev): bump @storybook/addon-a11y in /webapp [`f209436`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f209436147fbf9afacfbd6edb6135847e6c4faed)
|
||||
- Lokalise: update of webapp/locales/fr.json [`28e2967`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/28e2967119f1b47752afc959a4c3ae741fdad0b0)
|
||||
|
||||
#### [v0.4.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.3.1...v0.4.0)
|
||||
|
||||
@ -1811,9 +1755,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix: Increase body parser limit [`#3037`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3037)
|
||||
- chore: Update to v0.3.1 [`#3035`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3035)
|
||||
- fix(subscriptions): Don't publish undefined [`#3088`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/3088)
|
||||
- Upgrade cypress, remove log out step [`0df4038`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0df40386dd866c6b9ce540b966dfe00089507d31)
|
||||
- use BaseCard in Comment component and refactor [`e7bf499`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e7bf499d373ec9d5d46be20fd838fbc4dbecb273)
|
||||
- Refactor GQL and tests, first approach [`f380915`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f380915b2c679d42e5db136ea1d923cf00bbcf10)
|
||||
|
||||
#### [v0.3.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.3.0...v0.3.1)
|
||||
|
||||
@ -1866,9 +1807,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- fix: Remove github release script breaking build [`#2971`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2971)
|
||||
- Use original createdAt for merged users/emails [`#2969`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2969)
|
||||
- Fix typo [`#2966`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2966)
|
||||
- Get rid of different factory files [`fc36729`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fc367297e3e054f09b7f8f31788ab68d87f6babf)
|
||||
- Refactor factory for comments [`2fc71d7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2fc71d75a5d5eab9c3467e94e00257ef6dd7d8a0)
|
||||
- Refactor user factory [`2a79c53`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2a79c53765b73f9b91691eb75f55cf8c9e48306e)
|
||||
|
||||
#### [v0.3.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.2.2...v0.3.0)
|
||||
|
||||
@ -1940,9 +1878,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- docs(deployment): Explain how to setup metrics [`#2825`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2825)
|
||||
- refactor(styleguide): Migrate Avatar component to monorepo [`#2700`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2700)
|
||||
- docs(deployment): Explain how to setup metrics (#2825) [`#2411`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2411) [`#2777`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2777)
|
||||
- Improve styling per @alina-beck review [`bcc1ab1`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/bcc1ab167e8b1dfdac1ec0a05a0c14e8234bcabc)
|
||||
- test(cypress): Cover "Pinned post" feature [`d49afc2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d49afc25cfa1c1f98ed04f78dd3ff826cd85ae25)
|
||||
- build(deps-dev): bump @storybook/addon-notes in /webapp [`d6b78e4`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d6b78e4794ac60dee9d9fd3e3c9c53a95fcea152)
|
||||
|
||||
#### [0.2.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.2.2...0.2.2)
|
||||
|
||||
@ -1965,9 +1900,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps): bump @hapi/joi from 17.0.2 to 17.1.0 in /backend [`#2846`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2846)
|
||||
- Release 0.2.2 [`#2844`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2844)
|
||||
- build(deps-dev): bump @storybook/addon-actions in /webapp [`#2842`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2842)
|
||||
- Convert block/unblock to blacklist/whitelist [`c297b83`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c297b83f873edc61ddec370633b9b65896c56591)
|
||||
- Rename blacklist/whitelist to mute/unmute [`ba3e9e1`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ba3e9e1025bf432151c9bf1002045179b338ff7f)
|
||||
- Generate changelog with auto-changelog [`02367f9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/02367f93e0ad635d5f43adf01695f85f06f4c0d2)
|
||||
|
||||
#### [v0.2.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.2.1...v0.2.2)
|
||||
|
||||
@ -1976,7 +1908,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- build(deps): bump metascraper-title from 5.10.3 to 5.10.5 in /backend [`#2835`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2835)
|
||||
- build(deps): bump metascraper-publisher in /backend [`#2836`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2836)
|
||||
- build(deps): bump metascraper-audio from 5.10.3 to 5.10.5 in /backend [`#2840`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/2840)
|
||||
- chore(release): 0.2.2 [`7e26e56`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/7e26e56654d391b0f910a59e28ce67fd1ec0b4a8)
|
||||
|
||||
#### [0.2.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.2.1...0.2.1)
|
||||
|
||||
@ -2071,9 +2002,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- refactor(modules): Various import fixes [`#2773`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2773) [`#2774`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2774)
|
||||
- feat(webapp): Display deployed version in footer [`#1831`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1831)
|
||||
- fix #2229 [`#2229`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2229)
|
||||
- build(deps-dev): bump @storybook/addon-actions in /webapp [`d0124bf`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d0124bf2b4b4a641c9af76d6d2f7b5aa075ade90)
|
||||
- refactor and use base-button in SearchableInput [`fcbe612`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fcbe6125f35c0dd23e2ba1ae63f539f5ef5990ea)
|
||||
- manage button states and color schemes with mixin [`1b9249c`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1b9249c685e34eb2e94b31ee0ec22421c6aa6a73)
|
||||
|
||||
#### [v0.2.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.2.0...v0.2.1)
|
||||
|
||||
@ -2717,9 +2645,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat(webapp): Display deployed version in footer [`#1831`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1831)
|
||||
- fix #2229 [`#2229`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2229)
|
||||
- fixes #2659 [`#2659`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2659)
|
||||
- locales sorted. [`fa906ef`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fa906efb1f40dc5bd80c9678f33c7b607a320099)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
|
||||
#### [v0.2.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.13...v0.2.0)
|
||||
|
||||
@ -3417,9 +3342,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat(webapp): Display deployed version in footer [`#1831`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1831)
|
||||
- fix #2229 [`#2229`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2229)
|
||||
- fixes #2659 [`#2659`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2659)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
- fix lint: tests and lint ok [`d2a43ce`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d2a43cecd74ee3bec291109a85ddb6986315763b)
|
||||
|
||||
#### [v0.1.13](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.12...v0.1.13)
|
||||
|
||||
@ -4138,9 +4060,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- feat(webapp): Display deployed version in footer [`#1831`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1831)
|
||||
- fix #2229 [`#2229`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2229)
|
||||
- fixes #2659 [`#2659`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2659)
|
||||
- Get rid of different factory files [`fc36729`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fc367297e3e054f09b7f8f31788ab68d87f6babf)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- Refactor factory for comments [`2fc71d7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/2fc71d75a5d5eab9c3467e94e00257ef6dd7d8a0)
|
||||
|
||||
#### [v0.1.12](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.11...v0.1.12)
|
||||
|
||||
@ -4968,9 +4887,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Merge pull request #2443 from Human-Connection/2237-longer-comments [`#2237`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2237)
|
||||
- fix #2329: Normalize email on login in the backend [`#2329`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2329)
|
||||
- Fix #2294 [`#2294`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2294)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.11](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.10...v0.1.11)
|
||||
|
||||
@ -5849,9 +5765,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2294 [`#2294`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2294)
|
||||
- Merge pull request #2078 from Human-Connection/fix-2042-back-link [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- locales sorted. [`fa906ef`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fa906efb1f40dc5bd80c9678f33c7b607a320099)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.10](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.9...v0.1.10)
|
||||
|
||||
@ -6783,9 +6696,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2294 [`#2294`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2294)
|
||||
- Merge pull request #2078 from Human-Connection/fix-2042-back-link [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.9](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.8...v0.1.9)
|
||||
|
||||
@ -7774,9 +7684,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.8](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.7...v0.1.8)
|
||||
|
||||
@ -8779,9 +8686,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.7](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.6...v0.1.7)
|
||||
|
||||
@ -9792,9 +9696,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.6](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.5...v0.1.6)
|
||||
|
||||
@ -10831,9 +10732,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- locales sorted. [`fa906ef`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fa906efb1f40dc5bd80c9678f33c7b607a320099)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- Get rid of different factory files [`fc36729`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fc367297e3e054f09b7f8f31788ab68d87f6babf)
|
||||
|
||||
#### [v0.1.5](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.4...v0.1.5)
|
||||
|
||||
@ -11920,9 +11818,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
- fix lint: tests and lint ok [`d2a43ce`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d2a43cecd74ee3bec291109a85ddb6986315763b)
|
||||
|
||||
#### [v0.1.4](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.3...v0.1.4)
|
||||
|
||||
@ -13039,9 +12934,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- remove package-lock.json [`3cf3c31`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3cf3c31808dc6ae59fb9c6ec33e9e178c5556438)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.2...v0.1.3)
|
||||
|
||||
@ -14170,9 +14062,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- remove package-lock.json [`3cf3c31`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3cf3c31808dc6ae59fb9c6ec33e9e178c5556438)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### [v0.1.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.1...v0.1.2)
|
||||
|
||||
@ -15352,9 +15241,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Fix #2042 Back Link To Login Page [`#2042`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/2042)
|
||||
- Merge pull request #2043 from Human-Connection/fix-1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- fix #1993 [`#1993`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1993)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
- fix lint: tests and lint ok [`d2a43ce`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d2a43cecd74ee3bec291109a85ddb6986315763b)
|
||||
|
||||
#### [v0.1.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.1.0...v0.1.1)
|
||||
|
||||
@ -16600,9 +16486,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Merge pull request #1641 from Human-Connection/1639_no_limits_for_post_length [`#1639`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1639)
|
||||
- Fix #1639 [`#1639`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1639)
|
||||
- Add slug to User component, fix #1486 [`#1486`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/1486)
|
||||
- sorting locations files yarn run locales --fix [`3343e14`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3343e1435f320e1d403e16f5d4563aa11cae49a9)
|
||||
- tests user.spec.js tests once clean once broken always alternating [`9d5c192`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d5c192869ec0b088fa071d827b27cf6ca442b78)
|
||||
- test check test WIP [`a4be3f7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a4be3f7adfc36ba7517a0f5399606b1f3d3dccfe)
|
||||
|
||||
#### v0.1.0
|
||||
|
||||
@ -17741,6 +17624,3 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||
- Merge pull request #104 from DakshMiglani/master [`#41`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/41)
|
||||
- Merge pull request #93 from Gerald1614/500_error_on_login [`#49`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/49)
|
||||
- Update schema.graphql [`#7`](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/7)
|
||||
- Fix resolve function returns undefind [`657a5ac`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/657a5ac1f59861a205ddfc21bc72ff3801c8fad0)
|
||||
- Change strategy, only build docker image [`d6b7374`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d6b7374ddbf497bdb5cbc935b88ae085c38b3237)
|
||||
- Copy package.json from webapp/ [`f3a9996`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f3a9996962e5dd8b2e365a032c1a5766fe666103)
|
||||
|
||||
@ -6,18 +6,26 @@ NEO4J_PASSWORD=letmein
|
||||
GRAPHQL_URI=http://localhost:4000
|
||||
CLIENT_URI=http://localhost:3000
|
||||
|
||||
# EMail
|
||||
# E-Mail default settings
|
||||
EMAIL_SUPPORT="devops@ocelot.social"
|
||||
EMAIL_DEFAULT_SENDER="devops@ocelot.social"
|
||||
SMTP_HOST=
|
||||
SMTP_PORT=
|
||||
SMTP_IGNORE_TLS=true
|
||||
SMTP_MAX_CONNECTIONS=5
|
||||
SMTP_MAX_MESSAGES=Infinity
|
||||
SMTP_USERNAME=
|
||||
SMTP_PASSWORD=
|
||||
SMTP_SECURE="false" # true for 465, false for other ports
|
||||
SMTP_DKIM_DOMAINNAME=
|
||||
SMTP_DKIM_KEYSELECTOR=
|
||||
SMTP_DKIM_PRIVATKEY=
|
||||
# E-Mail settings for our 'docker compose up mailserver'
|
||||
# SMTP_HOST=localhost
|
||||
# SMTP_PORT=1025
|
||||
# SMTP_IGNORE_TLS=true
|
||||
# SMTP_USERNAME=
|
||||
# SMTP_PASSWORD=
|
||||
|
||||
JWT_SECRET="b/&&7b78BF&fv/Vd"
|
||||
JWT_EXPIRES="2y"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ocelot-social-backend",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"description": "GraphQL Backend for ocelot.social",
|
||||
"repository": "https://github.com/Ocelot-Social-Community/Ocelot-Social",
|
||||
"author": "ocelot.social Community",
|
||||
@ -47,7 +47,7 @@
|
||||
"cheerio": "~1.0.0",
|
||||
"cors": "~2.8.5",
|
||||
"cross-env": "~7.0.3",
|
||||
"dotenv": "~16.4.7",
|
||||
"dotenv": "~16.5.0",
|
||||
"express": "^5.1.0",
|
||||
"graphql": "^14.6.0",
|
||||
"graphql-middleware": "~4.0.2",
|
||||
@ -58,7 +58,7 @@
|
||||
"graphql-tag": "~2.10.3",
|
||||
"graphql-upload": "^11.0.0",
|
||||
"helmet": "~8.1.0",
|
||||
"ioredis": "^4.16.1",
|
||||
"ioredis": "^5.6.1",
|
||||
"jsonwebtoken": "~8.5.1",
|
||||
"languagedetect": "^2.0.0",
|
||||
"linkify-html": "^4.2.0",
|
||||
@ -102,14 +102,14 @@
|
||||
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.1",
|
||||
"@faker-js/faker": "9.6.0",
|
||||
"@types/jest": "^29.5.14",
|
||||
"@types/node": "^22.14.0",
|
||||
"@types/node": "^22.14.1",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
"@typescript-eslint/parser": "^5.62.0",
|
||||
"apollo-server-testing": "~2.11.0",
|
||||
"eslint": "^8.57.1",
|
||||
"eslint-config-prettier": "^10.1.1",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-import-resolver-typescript": "^4.3.1",
|
||||
"eslint-import-resolver-typescript": "^4.3.2",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-jest": "^28.11.0",
|
||||
"eslint-plugin-n": "^17.17.0",
|
||||
|
||||
@ -57,6 +57,8 @@ const smtp = {
|
||||
SMTP_DKIM_KEYSELECTOR: hasDKIMData && env.SMTP_DKIM_KEYSELECTOR,
|
||||
// PEM format: https://docs.progress.com/bundle/datadirect-hybrid-data-pipeline-installation-46/page/PEM-file-format.html
|
||||
SMTP_DKIM_PRIVATKEY: hasDKIMData && env.SMTP_DKIM_PRIVATKEY.replace(/\\n/g, '\n'), // replace all "\n" in .env string by real line break
|
||||
SMTP_MAX_CONNECTIONS: env.SMTP_MAX_CONNECTIONS || 5,
|
||||
SMTP_MAX_MESSAGES: env.SMTP_MAX_MESSAGES || 100,
|
||||
}
|
||||
|
||||
const neo4j = {
|
||||
|
||||
@ -9,6 +9,25 @@ const hasAuthData = CONFIG.SMTP_USERNAME && CONFIG.SMTP_PASSWORD
|
||||
const hasDKIMData =
|
||||
CONFIG.SMTP_DKIM_DOMAINNAME && CONFIG.SMTP_DKIM_KEYSELECTOR && CONFIG.SMTP_DKIM_PRIVATKEY
|
||||
|
||||
const transporter = nodemailer.createTransport({
|
||||
host: CONFIG.SMTP_HOST,
|
||||
port: CONFIG.SMTP_PORT,
|
||||
ignoreTLS: CONFIG.SMTP_IGNORE_TLS,
|
||||
secure: CONFIG.SMTP_SECURE, // true for 465, false for other ports
|
||||
pool: true,
|
||||
maxConnections: CONFIG.SMTP_MAX_CONNECTIONS,
|
||||
maxMessages: CONFIG.SMTP_MAX_MESSAGES,
|
||||
auth: hasAuthData && {
|
||||
user: CONFIG.SMTP_USERNAME,
|
||||
pass: CONFIG.SMTP_PASSWORD,
|
||||
},
|
||||
dkim: hasDKIMData && {
|
||||
domainName: CONFIG.SMTP_DKIM_DOMAINNAME,
|
||||
keySelector: CONFIG.SMTP_DKIM_KEYSELECTOR,
|
||||
privateKey: CONFIG.SMTP_DKIM_PRIVATKEY,
|
||||
},
|
||||
})
|
||||
|
||||
let sendMailCallback: any = async () => {}
|
||||
if (!hasEmailConfig) {
|
||||
if (!CONFIG.TEST) {
|
||||
@ -38,22 +57,6 @@ if (!hasEmailConfig) {
|
||||
}
|
||||
} else {
|
||||
sendMailCallback = async (templateArgs) => {
|
||||
const transporter = nodemailer.createTransport({
|
||||
host: CONFIG.SMTP_HOST,
|
||||
port: CONFIG.SMTP_PORT,
|
||||
ignoreTLS: CONFIG.SMTP_IGNORE_TLS,
|
||||
secure: CONFIG.SMTP_SECURE, // true for 465, false for other ports
|
||||
auth: hasAuthData && {
|
||||
user: CONFIG.SMTP_USERNAME,
|
||||
pass: CONFIG.SMTP_PASSWORD,
|
||||
},
|
||||
dkim: hasDKIMData && {
|
||||
domainName: CONFIG.SMTP_DKIM_DOMAINNAME,
|
||||
keySelector: CONFIG.SMTP_DKIM_KEYSELECTOR,
|
||||
privateKey: CONFIG.SMTP_DKIM_PRIVATKEY,
|
||||
},
|
||||
})
|
||||
|
||||
transporter.use(
|
||||
'compile',
|
||||
htmlToText({
|
||||
|
||||
430
backend/src/middleware/notifications/followed-users.spec.ts
Normal file
430
backend/src/middleware/notifications/followed-users.spec.ts
Normal file
@ -0,0 +1,430 @@
|
||||
import { createTestClient } from 'apollo-server-testing'
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
import Factory, { cleanDatabase } from '@db/factories'
|
||||
import { getNeode, getDriver } from '@db/neo4j'
|
||||
import { createGroupMutation } from '@graphql/groups'
|
||||
import CONFIG from '@src/config'
|
||||
import createServer from '@src/server'
|
||||
|
||||
CONFIG.CATEGORIES_ACTIVE = false
|
||||
|
||||
const sendMailMock = jest.fn()
|
||||
jest.mock('../helpers/email/sendMail', () => ({
|
||||
sendMail: () => sendMailMock(),
|
||||
}))
|
||||
|
||||
let server, query, mutate, authenticatedUser
|
||||
|
||||
let postAuthor, firstFollower, secondFollower
|
||||
|
||||
const driver = getDriver()
|
||||
const neode = getNeode()
|
||||
|
||||
const createPostMutation = gql`
|
||||
mutation ($id: ID, $title: String!, $content: String!, $groupId: ID) {
|
||||
CreatePost(id: $id, title: $title, content: $content, groupId: $groupId) {
|
||||
id
|
||||
title
|
||||
content
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const notificationQuery = gql`
|
||||
query ($read: Boolean) {
|
||||
notifications(read: $read, orderBy: updatedAt_desc) {
|
||||
read
|
||||
reason
|
||||
createdAt
|
||||
relatedUser {
|
||||
id
|
||||
}
|
||||
from {
|
||||
__typename
|
||||
... on Post {
|
||||
id
|
||||
content
|
||||
}
|
||||
... on Comment {
|
||||
id
|
||||
content
|
||||
}
|
||||
... on Group {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const followUserMutation = gql`
|
||||
mutation ($id: ID!) {
|
||||
followUser(id: $id) {
|
||||
id
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
beforeAll(async () => {
|
||||
await cleanDatabase()
|
||||
|
||||
const createServerResult = createServer({
|
||||
context: () => {
|
||||
return {
|
||||
user: authenticatedUser,
|
||||
neode,
|
||||
driver,
|
||||
cypherParams: {
|
||||
currentUserId: authenticatedUser ? authenticatedUser.id : null,
|
||||
},
|
||||
}
|
||||
},
|
||||
})
|
||||
server = createServerResult.server
|
||||
const createTestClientResult = createTestClient(server)
|
||||
query = createTestClientResult.query
|
||||
mutate = createTestClientResult.mutate
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await cleanDatabase()
|
||||
driver.close()
|
||||
})
|
||||
|
||||
describe('following users notifications', () => {
|
||||
beforeAll(async () => {
|
||||
postAuthor = await Factory.build(
|
||||
'user',
|
||||
{
|
||||
id: 'post-author',
|
||||
name: 'Post Author',
|
||||
slug: 'post-author',
|
||||
},
|
||||
{
|
||||
email: 'test@example.org',
|
||||
password: '1234',
|
||||
},
|
||||
)
|
||||
firstFollower = await Factory.build(
|
||||
'user',
|
||||
{
|
||||
id: 'first-follower',
|
||||
name: 'First Follower',
|
||||
slug: 'first-follower',
|
||||
},
|
||||
{
|
||||
email: 'test2@example.org',
|
||||
password: '1234',
|
||||
},
|
||||
)
|
||||
secondFollower = await Factory.build(
|
||||
'user',
|
||||
{
|
||||
id: 'second-follower',
|
||||
name: 'Second Follower',
|
||||
slug: 'second-follower',
|
||||
},
|
||||
{
|
||||
email: 'test3@example.org',
|
||||
password: '1234',
|
||||
},
|
||||
)
|
||||
await secondFollower.update({ emailNotificationsFollowingUsers: false })
|
||||
authenticatedUser = await firstFollower.toJson()
|
||||
await mutate({
|
||||
mutation: followUserMutation,
|
||||
variables: { id: 'post-author' },
|
||||
})
|
||||
authenticatedUser = await secondFollower.toJson()
|
||||
await mutate({
|
||||
mutation: followUserMutation,
|
||||
variables: { id: 'post-author' },
|
||||
})
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
|
||||
describe('the followed user writes a post', () => {
|
||||
beforeAll(async () => {
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'post',
|
||||
title: 'This is the post',
|
||||
content: 'This is the content of the post',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the post author', async () => {
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends notification to the first follower', async () => {
|
||||
authenticatedUser = await firstFollower.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends notification to the second follower', async () => {
|
||||
authenticatedUser = await secondFollower.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends only one email, as second follower has emails disabled', () => {
|
||||
expect(sendMailMock).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
|
||||
describe('followed user posts in public group', () => {
|
||||
beforeAll(async () => {
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createGroupMutation(),
|
||||
variables: {
|
||||
id: 'g-1',
|
||||
name: 'A group',
|
||||
description: 'A group to test the follow user notification',
|
||||
groupType: 'public',
|
||||
actionRadius: 'national',
|
||||
},
|
||||
})
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'group-post',
|
||||
title: 'This is the post in the group',
|
||||
content: 'This is the content of the post in the group',
|
||||
groupId: 'g-1',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the post author', async () => {
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends a notification to the first follower', async () => {
|
||||
authenticatedUser = await firstFollower.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'group-post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('followed user posts in closed group', () => {
|
||||
beforeAll(async () => {
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createGroupMutation(),
|
||||
variables: {
|
||||
id: 'g-2',
|
||||
name: 'A closed group',
|
||||
description: 'A group to test the follow user notification',
|
||||
groupType: 'closed',
|
||||
actionRadius: 'national',
|
||||
},
|
||||
})
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'closed-group-post',
|
||||
title: 'This is the post in the closed group',
|
||||
content: 'This is the content of the post in the closed group',
|
||||
groupId: 'g-2',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the post author', async () => {
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the first follower', async () => {
|
||||
authenticatedUser = await firstFollower.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'group-post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('followed user posts in hidden group', () => {
|
||||
beforeAll(async () => {
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createGroupMutation(),
|
||||
variables: {
|
||||
id: 'g-3',
|
||||
name: 'A hidden group',
|
||||
description: 'A hidden group to test the follow user notification',
|
||||
groupType: 'hidden',
|
||||
actionRadius: 'national',
|
||||
},
|
||||
})
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'hidden-group-post',
|
||||
title: 'This is the post in the hidden group',
|
||||
content: 'This is the content of the post in the hidden group',
|
||||
groupId: 'g-3',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the post author', async () => {
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the first follower', async () => {
|
||||
authenticatedUser = await firstFollower.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'group-post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'followed_user_posted',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -111,6 +111,7 @@ const handleRemoveUserFromGroup = async (resolve, root, args, context, resolveIn
|
||||
}
|
||||
|
||||
const handleContentDataOfPost = async (resolve, root, args, context, resolveInfo) => {
|
||||
const { groupId } = args
|
||||
const idsOfUsers = extractMentionedUsers(args.content)
|
||||
const post = await resolve(root, args, context, resolveInfo)
|
||||
if (post) {
|
||||
@ -119,6 +120,16 @@ const handleContentDataOfPost = async (resolve, root, args, context, resolveInfo
|
||||
[notifyUsersOfMention('Post', post.id, idsOfUsers, 'mentioned_in_post', context)],
|
||||
'emailNotificationsMention',
|
||||
)
|
||||
await publishNotifications(
|
||||
context,
|
||||
[notifyFollowingUsers(post.id, groupId, context)],
|
||||
'emailNotificationsFollowingUsers',
|
||||
)
|
||||
await publishNotifications(
|
||||
context,
|
||||
[notifyGroupMembersOfNewPost(post.id, groupId, context)],
|
||||
'emailNotificationsPostInGroup',
|
||||
)
|
||||
}
|
||||
return post
|
||||
}
|
||||
@ -171,6 +182,88 @@ const postAuthorOfComment = async (commentId, { context }) => {
|
||||
}
|
||||
}
|
||||
|
||||
const notifyFollowingUsers = async (postId, groupId, context) => {
|
||||
const reason = 'followed_user_posted'
|
||||
const cypher = `
|
||||
MATCH (post:Post { id: $postId })<-[:WROTE]-(author:User { id: $userId })<-[:FOLLOWS]-(user:User)
|
||||
OPTIONAL MATCH (post)-[:IN]->(group:Group { id: $groupId })
|
||||
WITH post, author, user, group WHERE group IS NULL OR group.groupType = 'public'
|
||||
MERGE (post)-[notification:NOTIFIED {reason: $reason}]->(user)
|
||||
SET notification.read = FALSE
|
||||
SET notification.createdAt = COALESCE(notification.createdAt, toString(datetime()))
|
||||
SET notification.updatedAt = toString(datetime())
|
||||
WITH notification, author, user,
|
||||
post {.*, author: properties(author) } AS finalResource
|
||||
RETURN notification {
|
||||
.*,
|
||||
from: finalResource,
|
||||
to: properties(user),
|
||||
relatedUser: properties(author)
|
||||
}
|
||||
`
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
|
||||
const notificationTransactionResponse = await transaction.run(cypher, {
|
||||
postId,
|
||||
reason,
|
||||
groupId: groupId || null,
|
||||
userId: context.user.id,
|
||||
})
|
||||
return notificationTransactionResponse.records.map((record) => record.get('notification'))
|
||||
})
|
||||
try {
|
||||
const notifications = await writeTxResultPromise
|
||||
return notifications
|
||||
} catch (error) {
|
||||
throw new Error(error)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
}
|
||||
|
||||
const notifyGroupMembersOfNewPost = async (postId, groupId, context) => {
|
||||
if (!groupId) return []
|
||||
const reason = 'post_in_group'
|
||||
const cypher = `
|
||||
MATCH (post:Post { id: $postId })<-[:WROTE]-(author:User { id: $userId })
|
||||
MATCH (post)-[:IN]->(group:Group { id: $groupId })<-[membership:MEMBER_OF]-(user:User)
|
||||
WHERE NOT membership.role = 'pending'
|
||||
AND NOT (user)-[:MUTED]->(group)
|
||||
AND NOT user.id = $userId
|
||||
WITH post, author, user
|
||||
MERGE (post)-[notification:NOTIFIED {reason: $reason}]->(user)
|
||||
SET notification.read = FALSE
|
||||
SET notification.createdAt = COALESCE(notification.createdAt, toString(datetime()))
|
||||
SET notification.updatedAt = toString(datetime())
|
||||
WITH notification, author, user,
|
||||
post {.*, author: properties(author) } AS finalResource
|
||||
RETURN notification {
|
||||
.*,
|
||||
from: finalResource,
|
||||
to: properties(user),
|
||||
relatedUser: properties(author)
|
||||
}
|
||||
`
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
|
||||
const notificationTransactionResponse = await transaction.run(cypher, {
|
||||
postId,
|
||||
reason,
|
||||
groupId,
|
||||
userId: context.user.id,
|
||||
})
|
||||
return notificationTransactionResponse.records.map((record) => record.get('notification'))
|
||||
})
|
||||
try {
|
||||
const notifications = await writeTxResultPromise
|
||||
return notifications
|
||||
} catch (error) {
|
||||
throw new Error(error)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
}
|
||||
|
||||
const notifyOwnersOfGroup = async (groupId, userId, reason, context) => {
|
||||
const cypher = `
|
||||
MATCH (user:User { id: $userId })
|
||||
|
||||
400
backend/src/middleware/notifications/posts-in-groups.spec.ts
Normal file
400
backend/src/middleware/notifications/posts-in-groups.spec.ts
Normal file
@ -0,0 +1,400 @@
|
||||
import { createTestClient } from 'apollo-server-testing'
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
import Factory, { cleanDatabase } from '@db/factories'
|
||||
import { getNeode, getDriver } from '@db/neo4j'
|
||||
import {
|
||||
createGroupMutation,
|
||||
joinGroupMutation,
|
||||
changeGroupMemberRoleMutation,
|
||||
} from '@graphql/groups'
|
||||
import CONFIG from '@src/config'
|
||||
import createServer from '@src/server'
|
||||
|
||||
CONFIG.CATEGORIES_ACTIVE = false
|
||||
|
||||
const sendMailMock = jest.fn()
|
||||
jest.mock('../helpers/email/sendMail', () => ({
|
||||
sendMail: () => sendMailMock(),
|
||||
}))
|
||||
|
||||
let server, query, mutate, authenticatedUser
|
||||
|
||||
let postAuthor, groupMember, pendingMember
|
||||
|
||||
const driver = getDriver()
|
||||
const neode = getNeode()
|
||||
|
||||
const createPostMutation = gql`
|
||||
mutation ($id: ID, $title: String!, $content: String!, $groupId: ID) {
|
||||
CreatePost(id: $id, title: $title, content: $content, groupId: $groupId) {
|
||||
id
|
||||
title
|
||||
content
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const notificationQuery = gql`
|
||||
query ($read: Boolean) {
|
||||
notifications(read: $read, orderBy: updatedAt_desc) {
|
||||
read
|
||||
reason
|
||||
createdAt
|
||||
relatedUser {
|
||||
id
|
||||
}
|
||||
from {
|
||||
__typename
|
||||
... on Post {
|
||||
id
|
||||
content
|
||||
}
|
||||
... on Comment {
|
||||
id
|
||||
content
|
||||
}
|
||||
... on Group {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const muteGroupMutation = gql`
|
||||
mutation ($groupId: ID!) {
|
||||
muteGroup(groupId: $groupId) {
|
||||
id
|
||||
isMutedByMe
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const unmuteGroupMutation = gql`
|
||||
mutation ($groupId: ID!) {
|
||||
unmuteGroup(groupId: $groupId) {
|
||||
id
|
||||
isMutedByMe
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const markAllAsRead = async () =>
|
||||
mutate({
|
||||
mutation: gql`
|
||||
mutation {
|
||||
markAllAsRead {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
})
|
||||
|
||||
beforeAll(async () => {
|
||||
await cleanDatabase()
|
||||
|
||||
const createServerResult = createServer({
|
||||
context: () => {
|
||||
return {
|
||||
user: authenticatedUser,
|
||||
neode,
|
||||
driver,
|
||||
cypherParams: {
|
||||
currentUserId: authenticatedUser ? authenticatedUser.id : null,
|
||||
},
|
||||
}
|
||||
},
|
||||
})
|
||||
server = createServerResult.server
|
||||
const createTestClientResult = createTestClient(server)
|
||||
query = createTestClientResult.query
|
||||
mutate = createTestClientResult.mutate
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await cleanDatabase()
|
||||
driver.close()
|
||||
})
|
||||
|
||||
describe('notify group members of new posts in group', () => {
|
||||
beforeAll(async () => {
|
||||
postAuthor = await Factory.build(
|
||||
'user',
|
||||
{
|
||||
id: 'post-author',
|
||||
name: 'Post Author',
|
||||
slug: 'post-author',
|
||||
},
|
||||
{
|
||||
email: 'test@example.org',
|
||||
password: '1234',
|
||||
},
|
||||
)
|
||||
groupMember = await Factory.build(
|
||||
'user',
|
||||
{
|
||||
id: 'group-member',
|
||||
name: 'Group Member',
|
||||
slug: 'group-member',
|
||||
},
|
||||
{
|
||||
email: 'test2@example.org',
|
||||
password: '1234',
|
||||
},
|
||||
)
|
||||
pendingMember = await Factory.build(
|
||||
'user',
|
||||
{
|
||||
id: 'pending-member',
|
||||
name: 'Pending Member',
|
||||
slug: 'pending-member',
|
||||
},
|
||||
{
|
||||
email: 'test3@example.org',
|
||||
password: '1234',
|
||||
},
|
||||
)
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createGroupMutation(),
|
||||
variables: {
|
||||
id: 'g-1',
|
||||
name: 'A closed group',
|
||||
description: 'A closed group to test the notifications to group members',
|
||||
groupType: 'closed',
|
||||
actionRadius: 'national',
|
||||
},
|
||||
})
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await mutate({
|
||||
mutation: joinGroupMutation(),
|
||||
variables: {
|
||||
groupId: 'g-1',
|
||||
userId: 'group-member',
|
||||
},
|
||||
})
|
||||
authenticatedUser = await pendingMember.toJson()
|
||||
await mutate({
|
||||
mutation: joinGroupMutation(),
|
||||
variables: {
|
||||
groupId: 'g-1',
|
||||
userId: 'pending-member',
|
||||
},
|
||||
})
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: changeGroupMemberRoleMutation(),
|
||||
variables: {
|
||||
groupId: 'g-1',
|
||||
userId: 'group-member',
|
||||
roleInGroup: 'usual',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
describe('group owner posts in group', () => {
|
||||
beforeAll(async () => {
|
||||
jest.clearAllMocks()
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await markAllAsRead()
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await markAllAsRead()
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'post',
|
||||
title: 'This is the new post in the group',
|
||||
content: 'This is the content of the new post in the group',
|
||||
groupId: 'g-1',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the author of the post', async () => {
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification to the pending group member', async () => {
|
||||
authenticatedUser = await pendingMember.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends notification to the group member', async () => {
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post',
|
||||
},
|
||||
read: false,
|
||||
reason: 'post_in_group',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends one email', () => {
|
||||
expect(sendMailMock).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
describe('group member mutes group', () => {
|
||||
it('sets the muted status correctly', async () => {
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await expect(
|
||||
mutate({
|
||||
mutation: muteGroupMutation,
|
||||
variables: {
|
||||
groupId: 'g-1',
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
muteGroup: {
|
||||
isMutedByMe: true,
|
||||
},
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO notification when another post is posted', async () => {
|
||||
jest.clearAllMocks()
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await markAllAsRead()
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'post-1',
|
||||
title: 'This is another post in the group',
|
||||
content: 'This is the content of another post in the group',
|
||||
groupId: 'g-1',
|
||||
},
|
||||
})
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO email', () => {
|
||||
expect(sendMailMock).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
describe('group member unmutes group again but disables email', () => {
|
||||
beforeAll(async () => {
|
||||
jest.clearAllMocks()
|
||||
await groupMember.update({ emailNotificationsPostInGroup: false })
|
||||
})
|
||||
|
||||
it('sets the muted status correctly', async () => {
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await expect(
|
||||
mutate({
|
||||
mutation: unmuteGroupMutation,
|
||||
variables: {
|
||||
groupId: 'g-1',
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
unmuteGroup: {
|
||||
isMutedByMe: false,
|
||||
},
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends notification when another post is posted', async () => {
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await markAllAsRead()
|
||||
authenticatedUser = await postAuthor.toJson()
|
||||
await mutate({
|
||||
mutation: createPostMutation,
|
||||
variables: {
|
||||
id: 'post-2',
|
||||
title: 'This is yet another post in the group',
|
||||
content: 'This is the content of yet another post in the group',
|
||||
groupId: 'g-1',
|
||||
},
|
||||
})
|
||||
authenticatedUser = await groupMember.toJson()
|
||||
await expect(
|
||||
query({
|
||||
query: notificationQuery,
|
||||
variables: {
|
||||
read: false,
|
||||
},
|
||||
}),
|
||||
).resolves.toMatchObject({
|
||||
data: {
|
||||
notifications: [
|
||||
{
|
||||
from: {
|
||||
__typename: 'Post',
|
||||
id: 'post-2',
|
||||
},
|
||||
read: false,
|
||||
reason: 'post_in_group',
|
||||
},
|
||||
],
|
||||
},
|
||||
errors: undefined,
|
||||
})
|
||||
})
|
||||
|
||||
it('sends NO email', () => {
|
||||
expect(sendMailMock).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -384,7 +384,7 @@ export default shield(
|
||||
Tag: allow,
|
||||
reports: isModerator,
|
||||
statistics: allow,
|
||||
currentUser: allow,
|
||||
currentUser: isAuthenticated,
|
||||
Group: isAuthenticated,
|
||||
GroupMembers: isAllowedSeeingGroupMembers,
|
||||
GroupCount: isAuthenticated,
|
||||
@ -392,7 +392,6 @@ export default shield(
|
||||
profilePagePosts: allow,
|
||||
Comment: allow,
|
||||
User: or(noEmailFilter, isAdmin),
|
||||
isLoggedIn: allow,
|
||||
Badge: allow,
|
||||
PostsEmotionsCountByEmotion: allow,
|
||||
PostsEmotionsByCurrentUser: isAuthenticated,
|
||||
@ -468,6 +467,8 @@ export default shield(
|
||||
CreateMessage: isAuthenticated,
|
||||
MarkMessagesAsSeen: isAuthenticated,
|
||||
toggleObservePost: isAuthenticated,
|
||||
muteGroup: and(isAuthenticated, isMemberOfGroup),
|
||||
unmuteGroup: and(isAuthenticated, isMemberOfGroup),
|
||||
},
|
||||
User: {
|
||||
email: or(isMyOwn, isAdmin),
|
||||
|
||||
@ -101,7 +101,13 @@ const validateReview = async (resolve, root, args, context, info) => {
|
||||
}
|
||||
|
||||
export const validateNotifyUsers = async (label, reason) => {
|
||||
const reasonsAllowed = ['mentioned_in_post', 'mentioned_in_comment', 'commented_on_post']
|
||||
const reasonsAllowed = [
|
||||
'mentioned_in_post',
|
||||
'mentioned_in_comment',
|
||||
'commented_on_post',
|
||||
'followed_user_posted',
|
||||
'post_in_group',
|
||||
]
|
||||
if (!reasonsAllowed.includes(reason)) throw new Error('Notification reason is not allowed!')
|
||||
if (
|
||||
(label === 'Post' && reason !== 'mentioned_in_post') ||
|
||||
|
||||
@ -185,6 +185,14 @@ export default {
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
},
|
||||
emailNotificationsFollowingUsers: {
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
},
|
||||
emailNotificationsPostInGroup: {
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
},
|
||||
|
||||
locale: {
|
||||
type: 'string',
|
||||
|
||||
@ -368,6 +368,64 @@ export default {
|
||||
session.close()
|
||||
}
|
||||
},
|
||||
muteGroup: async (_parent, params, context, _resolveInfo) => {
|
||||
const { groupId } = params
|
||||
const userId = context.user.id
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
|
||||
const transactionResponse = await transaction.run(
|
||||
`
|
||||
MATCH (group:Group { id: $groupId })
|
||||
MATCH (user:User { id: $userId })
|
||||
MERGE (user)-[m:MUTED]->(group)
|
||||
SET m.createdAt = toString(datetime())
|
||||
RETURN group { .* }
|
||||
`,
|
||||
{
|
||||
groupId,
|
||||
userId,
|
||||
},
|
||||
)
|
||||
const [group] = await transactionResponse.records.map((record) => record.get('group'))
|
||||
return group
|
||||
})
|
||||
try {
|
||||
return await writeTxResultPromise
|
||||
} catch (error) {
|
||||
throw new Error(error)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
},
|
||||
unmuteGroup: async (_parent, params, context, _resolveInfo) => {
|
||||
const { groupId } = params
|
||||
const userId = context.user.id
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
|
||||
const transactionResponse = await transaction.run(
|
||||
`
|
||||
MATCH (group:Group { id: $groupId })
|
||||
MATCH (user:User { id: $userId })
|
||||
OPTIONAL MATCH (user)-[m:MUTED]->(group)
|
||||
DELETE m
|
||||
RETURN group { .* }
|
||||
`,
|
||||
{
|
||||
groupId,
|
||||
userId,
|
||||
},
|
||||
)
|
||||
const [group] = await transactionResponse.records.map((record) => record.get('group'))
|
||||
return group
|
||||
})
|
||||
try {
|
||||
return await writeTxResultPromise
|
||||
} catch (error) {
|
||||
throw new Error(error)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
},
|
||||
},
|
||||
Group: {
|
||||
...Resolver('Group', {
|
||||
@ -380,6 +438,10 @@ export default {
|
||||
avatar: '-[:AVATAR_IMAGE]->(related:Image)',
|
||||
location: '-[:IS_IN]->(related:Location)',
|
||||
},
|
||||
boolean: {
|
||||
isMutedByMe:
|
||||
'MATCH (this)<-[:MUTED]-(related:User {id: $cypherParams.currentUserId}) RETURN COUNT(related) >= 1',
|
||||
},
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
@ -64,55 +64,6 @@ afterEach(async () => {
|
||||
await cleanDatabase()
|
||||
})
|
||||
|
||||
describe('isLoggedIn', () => {
|
||||
const isLoggedInQuery = gql`
|
||||
{
|
||||
isLoggedIn
|
||||
}
|
||||
`
|
||||
const respondsWith = async (expected) => {
|
||||
await expect(query({ query: isLoggedInQuery })).resolves.toMatchObject(expected)
|
||||
}
|
||||
|
||||
describe('unauthenticated', () => {
|
||||
it('returns false', async () => {
|
||||
await respondsWith({ data: { isLoggedIn: false } })
|
||||
})
|
||||
})
|
||||
|
||||
describe('authenticated', () => {
|
||||
beforeEach(async () => {
|
||||
user = await Factory.build('user', { id: 'u3' })
|
||||
const userBearerToken = encode({ id: 'u3' })
|
||||
req = { headers: { authorization: `Bearer ${userBearerToken}` } }
|
||||
})
|
||||
|
||||
it('returns true', async () => {
|
||||
await respondsWith({ data: { isLoggedIn: true } })
|
||||
})
|
||||
|
||||
describe('but user is disabled', () => {
|
||||
beforeEach(async () => {
|
||||
await disable('u3')
|
||||
})
|
||||
|
||||
it('returns false', async () => {
|
||||
await respondsWith({ data: { isLoggedIn: false } })
|
||||
})
|
||||
})
|
||||
|
||||
describe('but user is deleted', () => {
|
||||
beforeEach(async () => {
|
||||
await user.update({ updatedAt: new Date().toISOString(), deleted: true })
|
||||
})
|
||||
|
||||
it('returns false', async () => {
|
||||
await respondsWith({ data: { isLoggedIn: false } })
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('currentUser', () => {
|
||||
const currentUserQuery = gql`
|
||||
{
|
||||
@ -135,8 +86,8 @@ describe('currentUser', () => {
|
||||
}
|
||||
|
||||
describe('unauthenticated', () => {
|
||||
it('returns null', async () => {
|
||||
await respondsWith({ data: { currentUser: null } })
|
||||
it('throws "Not Authorized!"', async () => {
|
||||
await respondsWith({ errors: [{ message: 'Not Authorized!' }] })
|
||||
})
|
||||
})
|
||||
|
||||
@ -200,10 +151,32 @@ describe('currentUser', () => {
|
||||
)
|
||||
})
|
||||
|
||||
it('returns empty array for all categories', async () => {
|
||||
it('returns all categories by default', async () => {
|
||||
await respondsWith({
|
||||
data: {
|
||||
currentUser: expect.objectContaining({ activeCategories: [] }),
|
||||
currentUser: expect.objectContaining({
|
||||
activeCategories: [
|
||||
'cat1',
|
||||
'cat10',
|
||||
'cat11',
|
||||
'cat12',
|
||||
'cat13',
|
||||
'cat14',
|
||||
'cat15',
|
||||
'cat16',
|
||||
'cat17',
|
||||
'cat18',
|
||||
'cat19',
|
||||
'cat2',
|
||||
'cat3',
|
||||
'cat4',
|
||||
'cat5',
|
||||
'cat6',
|
||||
'cat7',
|
||||
'cat8',
|
||||
'cat9',
|
||||
],
|
||||
}),
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { AuthenticationError } from 'apollo-server'
|
||||
import bcrypt from 'bcryptjs'
|
||||
import { neo4jgraphql } from 'neo4j-graphql-js'
|
||||
|
||||
import { getNeode } from '@db/neo4j'
|
||||
import encode from '@jwt/encode'
|
||||
@ -11,38 +12,8 @@ const neode = getNeode()
|
||||
|
||||
export default {
|
||||
Query: {
|
||||
isLoggedIn: (_, args, { driver, user }) => {
|
||||
return Boolean(user && user.id)
|
||||
},
|
||||
currentUser: async (object, params, context, resolveInfo) => {
|
||||
const { user, driver } = context
|
||||
if (!user) return null
|
||||
const session = driver.session()
|
||||
const currentUserTransactionPromise = session.readTransaction(async (transaction) => {
|
||||
const result = await transaction.run(
|
||||
`
|
||||
MATCH (user:User {id: $id})
|
||||
OPTIONAL MATCH (category:Category) WHERE NOT ((user)-[:NOT_INTERESTED_IN]->(category))
|
||||
OPTIONAL MATCH (cats:Category)
|
||||
WITH user, [(user)<-[:OWNED_BY]-(medium:SocialMedia) | properties(medium) ] AS media, category, toString(COUNT(cats)) AS categoryCount
|
||||
RETURN user {.*, socialMedia: media, activeCategories: collect(category.id) } AS user, categoryCount
|
||||
`,
|
||||
{ id: user.id },
|
||||
)
|
||||
const [categoryCount] = result.records.map((record) => record.get('categoryCount'))
|
||||
const [currentUser] = result.records.map((record) => record.get('user'))
|
||||
// frontend expects empty array when all categories are selected
|
||||
if (currentUser.activeCategories.length === parseInt(categoryCount))
|
||||
currentUser.activeCategories = []
|
||||
return currentUser
|
||||
})
|
||||
try {
|
||||
const currentUser = await currentUserTransactionPromise
|
||||
return currentUser
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
},
|
||||
currentUser: async (object, params, context, resolveInfo) =>
|
||||
neo4jgraphql(object, { id: context.user.id }, context, resolveInfo),
|
||||
},
|
||||
Mutation: {
|
||||
login: async (_, { email, password }, { driver, req, user }) => {
|
||||
|
||||
@ -675,6 +675,14 @@ describe('emailNotificationSettings', () => {
|
||||
name: 'mention',
|
||||
value: true,
|
||||
},
|
||||
{
|
||||
name: 'followingUsers',
|
||||
value: true,
|
||||
},
|
||||
{
|
||||
name: 'postInGroup',
|
||||
value: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -765,6 +773,14 @@ describe('emailNotificationSettings', () => {
|
||||
name: 'mention',
|
||||
value: false,
|
||||
},
|
||||
{
|
||||
name: 'followingUsers',
|
||||
value: true,
|
||||
},
|
||||
{
|
||||
name: 'postInGroup',
|
||||
value: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@ -66,12 +66,12 @@ export default {
|
||||
const result = txc.run(
|
||||
`
|
||||
MATCH (user:User)-[:PRIMARY_EMAIL]->(e:EmailAddress {email: $args.email})
|
||||
RETURN user`,
|
||||
RETURN user {.*, email: e.email}`,
|
||||
{ args },
|
||||
)
|
||||
return result
|
||||
})
|
||||
return readTxResult.records.map((r) => r.get('user').properties)
|
||||
return readTxResult.records.map((r) => r.get('user'))
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
@ -113,32 +113,53 @@ export default {
|
||||
blockUser: async (object, args, context, resolveInfo) => {
|
||||
const { user: currentUser } = context
|
||||
if (currentUser.id === args.id) return null
|
||||
await neode.cypher(
|
||||
`
|
||||
MATCH(u:User {id: $currentUser.id})-[r:FOLLOWS]->(b:User {id: $args.id})
|
||||
DELETE r
|
||||
`,
|
||||
{ currentUser, args },
|
||||
)
|
||||
const [user, blockedUser] = await Promise.all([
|
||||
neode.find('User', currentUser.id),
|
||||
neode.find('User', args.id),
|
||||
])
|
||||
await user.relateTo(blockedUser, 'blocked')
|
||||
return blockedUser.toJson()
|
||||
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
|
||||
const unBlockUserTransactionResponse = await transaction.run(
|
||||
`
|
||||
MATCH (blockedUser:User {id: $args.id})
|
||||
MATCH (currentUser:User {id: $currentUser.id})
|
||||
OPTIONAL MATCH (currentUser)-[r:FOLLOWS]->(blockedUser)
|
||||
DELETE r
|
||||
CREATE (currentUser)-[:BLOCKED]->(blockedUser)
|
||||
RETURN blockedUser {.*}
|
||||
`,
|
||||
{ currentUser, args },
|
||||
)
|
||||
return unBlockUserTransactionResponse.records.map((record) => record.get('blockedUser'))[0]
|
||||
})
|
||||
try {
|
||||
return await writeTxResultPromise
|
||||
} catch (error) {
|
||||
throw new UserInputError(error.message)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
},
|
||||
unblockUser: async (object, args, context, resolveInfo) => {
|
||||
const { user: currentUser } = context
|
||||
if (currentUser.id === args.id) return null
|
||||
await neode.cypher(
|
||||
`
|
||||
MATCH(u:User {id: $currentUser.id})-[r:BLOCKED]->(b:User {id: $args.id})
|
||||
DELETE r
|
||||
`,
|
||||
{ currentUser, args },
|
||||
)
|
||||
const blockedUser = await neode.find('User', args.id)
|
||||
return blockedUser.toJson()
|
||||
|
||||
const session = context.driver.session()
|
||||
const writeTxResultPromise = session.writeTransaction(async (transaction) => {
|
||||
const unBlockUserTransactionResponse = await transaction.run(
|
||||
`
|
||||
MATCH(u:User {id: $currentUser.id})-[r:BLOCKED]->(blockedUser:User {id: $args.id})
|
||||
DELETE r
|
||||
RETURN blockedUser {.*}
|
||||
`,
|
||||
{ currentUser, args },
|
||||
)
|
||||
return unBlockUserTransactionResponse.records.map((record) => record.get('blockedUser'))[0]
|
||||
})
|
||||
try {
|
||||
return await writeTxResultPromise
|
||||
} catch (error) {
|
||||
throw new UserInputError(error.message)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
},
|
||||
UpdateUser: async (_parent, params, context, _resolveInfo) => {
|
||||
const { avatar: avatarInput } = params
|
||||
@ -270,14 +291,14 @@ export default {
|
||||
const switchUserRoleResponse = await transaction.run(
|
||||
`
|
||||
MATCH (user:User {id: $id})
|
||||
OPTIONAL MATCH (user)-[:PRIMARY_EMAIL]->(e:EmailAddress)
|
||||
SET user.role = $role
|
||||
SET user.updatedAt = toString(datetime())
|
||||
RETURN user {.*}
|
||||
RETURN user {.*, email: e.email}
|
||||
`,
|
||||
{ id, role },
|
||||
)
|
||||
const [user] = switchUserRoleResponse.records.map((record) => record.get('user'))
|
||||
return user
|
||||
return switchUserRoleResponse.records.map((record) => record.get('user'))[0]
|
||||
})
|
||||
try {
|
||||
const user = await writeTxResultPromise
|
||||
@ -362,14 +383,6 @@ export default {
|
||||
},
|
||||
},
|
||||
User: {
|
||||
email: async (parent, params, context, resolveInfo) => {
|
||||
if (typeof parent.email !== 'undefined') return parent.email
|
||||
const { id } = parent
|
||||
const statement = `MATCH(u:User {id: $id})-[:PRIMARY_EMAIL]->(e:EmailAddress) RETURN e`
|
||||
const result = await neode.cypher(statement, { id })
|
||||
const [{ email }] = result.records.map((r) => r.get('e').properties)
|
||||
return email
|
||||
},
|
||||
emailNotificationSettings: async (parent, params, context, resolveInfo) => {
|
||||
return [
|
||||
{
|
||||
@ -383,6 +396,14 @@ export default {
|
||||
name: 'mention',
|
||||
value: parent.emailNotificationsMention ?? true,
|
||||
},
|
||||
{
|
||||
name: 'followingUsers',
|
||||
value: parent.emailNotificationsFollowingUsers ?? true,
|
||||
},
|
||||
{
|
||||
name: 'postInGroup',
|
||||
value: parent.emailNotificationsPostInGroup ?? true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
enum EmailNotificationSettingsName {
|
||||
commentOnObservedPost
|
||||
mention
|
||||
followingUsers
|
||||
postInGroup
|
||||
chatMessage
|
||||
groupMemberJoined
|
||||
groupMemberLeft
|
||||
groupMemberRemoved
|
||||
groupMemberRoleChanged
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,6 +41,10 @@ type Group {
|
||||
myRole: GroupMemberRole # if 'null' then the current user is no member
|
||||
|
||||
posts: [Post] @relation(name: "IN", direction: "IN")
|
||||
|
||||
isMutedByMe: Boolean!
|
||||
@cypher(
|
||||
statement: "MATCH (this)<-[m:MUTED]-(u:User {id: $cypherParams.currentUserId}) RETURN COUNT(m) >= 1")
|
||||
}
|
||||
|
||||
|
||||
@ -137,4 +141,7 @@ type Mutation {
|
||||
groupId: ID!
|
||||
userId: ID!
|
||||
): User
|
||||
|
||||
muteGroup(groupId: ID!): Group
|
||||
unmuteGroup(groupId: ID!): Group
|
||||
}
|
||||
|
||||
@ -26,6 +26,8 @@ enum NotificationReason {
|
||||
user_left_group
|
||||
changed_group_member_role
|
||||
removed_user_from_group
|
||||
followed_user_posted
|
||||
post_in_group
|
||||
}
|
||||
|
||||
type Query {
|
||||
|
||||
@ -199,8 +199,7 @@ type Query {
|
||||
availableRoles: [UserRole]!
|
||||
mutedUsers: [User]
|
||||
blockedUsers: [User]
|
||||
isLoggedIn: Boolean!
|
||||
currentUser: User
|
||||
currentUser: User!
|
||||
}
|
||||
|
||||
enum Deletable {
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
import { createTestClient } from 'apollo-server-testing'
|
||||
|
||||
import createServer from './server'
|
||||
|
||||
/**
|
||||
* This file is for demonstration purposes. It does not really test the
|
||||
* `isLoggedIn` query but demonstrates how we can use `apollo-server-testing`.
|
||||
* All we need to do is to get an instance of `ApolloServer` and maybe we want
|
||||
* stub out `context` as shown below.
|
||||
*
|
||||
*/
|
||||
|
||||
let user
|
||||
let action
|
||||
describe('isLoggedIn', () => {
|
||||
beforeEach(() => {
|
||||
action = async () => {
|
||||
const { server } = createServer({
|
||||
context: () => {
|
||||
return {
|
||||
user,
|
||||
}
|
||||
},
|
||||
})
|
||||
const { query } = createTestClient(server)
|
||||
|
||||
const isLoggedIn = `{ isLoggedIn }`
|
||||
return query({ query: isLoggedIn })
|
||||
}
|
||||
})
|
||||
|
||||
it('returns false', async () => {
|
||||
const expected = expect.objectContaining({ data: { isLoggedIn: false } })
|
||||
await expect(action()).resolves.toEqual(expected)
|
||||
})
|
||||
|
||||
describe('when authenticated', () => {
|
||||
it('returns true', async () => {
|
||||
user = { id: '123' }
|
||||
const expected = expect.objectContaining({ data: { isLoggedIn: true } })
|
||||
await expect(action()).resolves.toEqual(expected)
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -1579,7 +1579,7 @@
|
||||
url-regex "~4.1.1"
|
||||
video-extensions "~1.1.0"
|
||||
|
||||
"@napi-rs/wasm-runtime@^0.2.7":
|
||||
"@napi-rs/wasm-runtime@^0.2.8":
|
||||
version "0.2.8"
|
||||
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.8.tgz#642e8390ee78ed21d6b79c467aa610e249224ed6"
|
||||
integrity sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==
|
||||
@ -2079,10 +2079,10 @@
|
||||
"@types/node" "*"
|
||||
form-data "^3.0.0"
|
||||
|
||||
"@types/node@*", "@types/node@>=6", "@types/node@^22.14.0":
|
||||
version "22.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e"
|
||||
integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==
|
||||
"@types/node@*", "@types/node@>=6", "@types/node@^22.14.1":
|
||||
version "22.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f"
|
||||
integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==
|
||||
dependencies:
|
||||
undici-types "~6.21.0"
|
||||
|
||||
@ -2289,82 +2289,87 @@
|
||||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
|
||||
integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
|
||||
|
||||
"@unrs/resolver-binding-darwin-arm64@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.3.3.tgz#394065916f98cdc1897cf7234adfdee395725fa8"
|
||||
integrity sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==
|
||||
"@unrs/resolver-binding-darwin-arm64@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.5.0.tgz#0c64ebe422a3d05ada91d8ba84e037383742c955"
|
||||
integrity sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ==
|
||||
|
||||
"@unrs/resolver-binding-darwin-x64@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.3.3.tgz#6a3c75ca984342261c7346db53293b0002e8cde1"
|
||||
integrity sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==
|
||||
"@unrs/resolver-binding-darwin-x64@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.5.0.tgz#57210874eca22ec3a07039c97c028fb19c0c6d57"
|
||||
integrity sha512-qpUrXgH4e/0xu1LOhPEdfgSY3vIXOxDQv370NEL8npN8h40HcQDA+Pl2r4HBW6tTXezWIjxUFcP7tj529RZtDw==
|
||||
|
||||
"@unrs/resolver-binding-freebsd-x64@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.3.3.tgz#6532b8d4fecaca6c4424791c82f7a27aac94fcd5"
|
||||
integrity sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==
|
||||
"@unrs/resolver-binding-freebsd-x64@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.5.0.tgz#4519371d0ad8e557a86623d8497e3abcdcb5ae43"
|
||||
integrity sha512-3tX8r8vgjvZzaJZB4jvxUaaFCDCb3aWDCpZN3EjhGnnwhztslI05KSG5NY/jNjlcZ5QWZ7dEZZ/rNBFsmTaSPw==
|
||||
|
||||
"@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.3.3.tgz#69a8e430095fcf6a76f7350cc27b83464f8cbb91"
|
||||
integrity sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==
|
||||
"@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.5.0.tgz#4fc05aec9e65a6478003a0b9034a06ac0da886ab"
|
||||
integrity sha512-FH+ixzBKaUU9fWOj3TYO+Yn/eO6kYvMLV9eNJlJlkU7OgrxkCmiMS6wUbyT0KA3FOZGxnEQ2z3/BHgYm2jqeLA==
|
||||
|
||||
"@unrs/resolver-binding-linux-arm-musleabihf@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.3.3.tgz#e1fc8440e54929b1f0f6aff6f6e3e9e19ac4a73c"
|
||||
integrity sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==
|
||||
"@unrs/resolver-binding-linux-arm-musleabihf@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.5.0.tgz#c24b35dd5818fcd25569425b1dc1a98a883e248b"
|
||||
integrity sha512-pxCgXMgwB/4PfqFQg73lMhmWwcC0j5L+dNXhZoz/0ek0iS/oAWl65fxZeT/OnU7fVs52MgdP2q02EipqJJXHSg==
|
||||
|
||||
"@unrs/resolver-binding-linux-arm64-gnu@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.3.3.tgz#1249e18b5fa1419addda637d62ef201ce9bcf5a4"
|
||||
integrity sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==
|
||||
"@unrs/resolver-binding-linux-arm64-gnu@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.5.0.tgz#07dc8478a0a356d343790208dc557d6d053689af"
|
||||
integrity sha512-FX2FV7vpLE/+Z0NZX9/1pwWud5Wocm/2PgpUXbT5aSV3QEB10kBPJAzssOQylvdj8mOHoKl5pVkXpbCwww/T2g==
|
||||
|
||||
"@unrs/resolver-binding-linux-arm64-musl@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.3.3.tgz#9af549ce9dde57b31c32a36cbe9eafa05f96befd"
|
||||
integrity sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==
|
||||
"@unrs/resolver-binding-linux-arm64-musl@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.5.0.tgz#169e531731f7e462dffa410034a1d06a7a921aa8"
|
||||
integrity sha512-+gF97xst1BZb28T3nwwzEtq2ewCoMDGKsenYsZuvpmNrW0019G1iUAunZN+FG55L21y+uP7zsGX06OXDQ/viKw==
|
||||
|
||||
"@unrs/resolver-binding-linux-ppc64-gnu@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.3.3.tgz#45aab52319f3e3b2627038a80c0331b0793a4be3"
|
||||
integrity sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==
|
||||
"@unrs/resolver-binding-linux-ppc64-gnu@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.5.0.tgz#f6ad2ff47d74c8158b28a18536a71a8ecf84a17f"
|
||||
integrity sha512-5bEmVcQw9js8JYM2LkUBw5SeELSIxX+qKf9bFrfFINKAp4noZ//hUxLpbF7u/3gTBN1GsER6xOzIZlw/VTdXtA==
|
||||
|
||||
"@unrs/resolver-binding-linux-s390x-gnu@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.3.3.tgz#7d2fe5c43e291d42e66d74fce07d9cf0050b4241"
|
||||
integrity sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==
|
||||
"@unrs/resolver-binding-linux-riscv64-gnu@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.5.0.tgz#2f3986cb44f285f90d27e87cee8b4059de3ffbdd"
|
||||
integrity sha512-GGk/8TPUsf1Q99F+lzMdjE6sGL26uJCwQ9TlvBs8zR3cLQNw/MIumPN7zrs3GFGySjnwXc8gA6J3HKbejywmqA==
|
||||
|
||||
"@unrs/resolver-binding-linux-x64-gnu@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.3.3.tgz#be54ff88c581610c42d8614475c0560f043d7ded"
|
||||
integrity sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==
|
||||
"@unrs/resolver-binding-linux-s390x-gnu@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.5.0.tgz#813ea07833012bc34ecc59f023e422b421138761"
|
||||
integrity sha512-5uRkFYYVNAeVaA4W/CwugjFN3iDOHCPqsBLCCOoJiMfFMMz4evBRsg+498OFa9w6VcTn2bD5aI+RRayaIgk2Sw==
|
||||
|
||||
"@unrs/resolver-binding-linux-x64-musl@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.3.3.tgz#4efa7a1e4f7bf231098ed23df1e19174d360c24f"
|
||||
integrity sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==
|
||||
"@unrs/resolver-binding-linux-x64-gnu@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.5.0.tgz#18b0d7553268fa490db92be578ac4b0fd8cae049"
|
||||
integrity sha512-j905CZH3nehYy6NimNqC2B14pxn4Ltd7guKMyPTzKehbFXTUgihQS/ZfHQTdojkMzbSwBOSgq1dOrY+IpgxDsA==
|
||||
|
||||
"@unrs/resolver-binding-wasm32-wasi@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.3.3.tgz#6df454b4a9b28d47850bcb665d243f09101b782c"
|
||||
integrity sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==
|
||||
"@unrs/resolver-binding-linux-x64-musl@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.5.0.tgz#04541e98d16e358c695393251e365bc3d802dfa4"
|
||||
integrity sha512-dmLevQTuzQRwu5A+mvj54R5aye5I4PVKiWqGxg8tTaYP2k2oTs/3Mo8mgnhPk28VoYCi0fdFYpgzCd4AJndQvQ==
|
||||
|
||||
"@unrs/resolver-binding-wasm32-wasi@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.5.0.tgz#7a2ae7467c4c52d53c20ad7fc2bace1b23de8168"
|
||||
integrity sha512-LtJMhwu7avhoi+kKfAZOKN773RtzLBVVF90YJbB0wyMpUj9yQPeA+mteVUI9P70OG/opH47FeV5AWeaNWWgqJg==
|
||||
dependencies:
|
||||
"@napi-rs/wasm-runtime" "^0.2.7"
|
||||
"@napi-rs/wasm-runtime" "^0.2.8"
|
||||
|
||||
"@unrs/resolver-binding-win32-arm64-msvc@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.3.3.tgz#fb19e118350e1392993a0a6565b427d38c1c1760"
|
||||
integrity sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==
|
||||
"@unrs/resolver-binding-win32-arm64-msvc@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.5.0.tgz#11deb282b8ce73fab26f1d04df0fa4d6363752c2"
|
||||
integrity sha512-FTZBxLL4SO1mgIM86KykzJmPeTPisBDHQV6xtfDXbTMrentuZ6SdQKJUV5BWaoUK3p8kIULlrCcucqdCnk8Npg==
|
||||
|
||||
"@unrs/resolver-binding-win32-ia32-msvc@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.3.3.tgz#23a9c4b5621bba2d472bc78fadde7273a8c4548d"
|
||||
integrity sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==
|
||||
"@unrs/resolver-binding-win32-ia32-msvc@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.5.0.tgz#2a5d414912379425bd395ea15901a5dd5febc7c1"
|
||||
integrity sha512-i5bB7vJ1waUsFciU/FKLd4Zw0VnAkvhiJ4//jYQXyDUuiLKodmtQZVTcOPU7pp97RrNgCFtXfC1gnvj/DHPJTw==
|
||||
|
||||
"@unrs/resolver-binding-win32-x64-msvc@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.3.tgz#eee226e5b4c4d91c862248afd24452c8698ed542"
|
||||
integrity sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==
|
||||
"@unrs/resolver-binding-win32-x64-msvc@1.5.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.5.0.tgz#5768c6bba4a27833a48a8a77e50eb01b520d0962"
|
||||
integrity sha512-wAvXp4k7jhioi4SebXW/yfzzYwsUCr9kIX4gCsUFKpCTUf8Mi7vScJXI3S+kupSUf0LbVHudR8qBbe2wFMSNUw==
|
||||
|
||||
"@wry/context@^0.4.0":
|
||||
version "0.4.4"
|
||||
@ -3999,11 +4004,6 @@ delayed-stream@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||
|
||||
denque@^1.1.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
|
||||
integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
|
||||
|
||||
denque@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
|
||||
@ -4137,10 +4137,10 @@ domutils@^3.0.1, domutils@^3.1.0:
|
||||
domelementtype "^2.3.0"
|
||||
domhandler "^5.0.3"
|
||||
|
||||
dotenv@^16.0.0, dotenv@~16.4.7:
|
||||
version "16.4.7"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
|
||||
integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
|
||||
dotenv@^16.0.0, dotenv@~16.5.0:
|
||||
version "16.5.0"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692"
|
||||
integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==
|
||||
|
||||
dotenv@^4.0.0:
|
||||
version "4.0.0"
|
||||
@ -4600,17 +4600,17 @@ eslint-import-resolver-node@^0.3.9:
|
||||
is-core-module "^2.13.0"
|
||||
resolve "^1.22.4"
|
||||
|
||||
eslint-import-resolver-typescript@^4.3.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.1.tgz#6721c639716de3685363ddb284e2cec60cee60ee"
|
||||
integrity sha512-/dR9YMomeBlvfuvX5q0C3Y/2PHC9OCRdT2ijFwdfq/4Bq+4m5/lqstEp9k3P6ocha1pCbhoY9fkwVYLmOqR0VQ==
|
||||
eslint-import-resolver-typescript@^4.3.2:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.2.tgz#1d2371be6d073bade177ee04a4548dbacdc334c0"
|
||||
integrity sha512-T2LqBXj87ndEC9t1LrDiPkzalSFzD4rrXr6BTzGdgMx1jdQM4T972guQvg7Ih+LNO51GURXI/qMHS5GF3h1ilw==
|
||||
dependencies:
|
||||
debug "^4.4.0"
|
||||
get-tsconfig "^4.10.0"
|
||||
is-bun-module "^2.0.0"
|
||||
stable-hash "^0.0.5"
|
||||
tinyglobby "^0.2.12"
|
||||
unrs-resolver "^1.3.3"
|
||||
unrs-resolver "^1.4.1"
|
||||
|
||||
eslint-module-utils@^2.12.0:
|
||||
version "2.12.0"
|
||||
@ -6027,25 +6027,10 @@ internal-slot@^1.0.7:
|
||||
hasown "^2.0.0"
|
||||
side-channel "^1.0.4"
|
||||
|
||||
ioredis@^4.16.1:
|
||||
version "4.16.1"
|
||||
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.16.1.tgz#377c21d2a4fa8cc31fe9028c666f8dd16a6255bf"
|
||||
integrity sha512-g76Mm9dE7BLuewncu1MimGZw5gDDjDwjoRony/VoSxSJEKAhuYncDEwYKYjtHi2NWsTNIB6XXRjE64uVa/wpKQ==
|
||||
dependencies:
|
||||
cluster-key-slot "^1.1.0"
|
||||
debug "^4.1.1"
|
||||
denque "^1.1.0"
|
||||
lodash.defaults "^4.2.0"
|
||||
lodash.flatten "^4.4.0"
|
||||
redis-commands "1.5.0"
|
||||
redis-errors "^1.2.0"
|
||||
redis-parser "^3.0.0"
|
||||
standard-as-callback "^2.0.1"
|
||||
|
||||
ioredis@^5.3.2:
|
||||
version "5.4.2"
|
||||
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.4.2.tgz#ebb6f1a10b825b2c0fb114763d7e82114a0bee6c"
|
||||
integrity sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==
|
||||
ioredis@^5.3.2, ioredis@^5.6.1:
|
||||
version "5.6.1"
|
||||
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.6.1.tgz#1ed7dc9131081e77342503425afceaf7357ae599"
|
||||
integrity sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==
|
||||
dependencies:
|
||||
"@ioredis/commands" "^1.1.1"
|
||||
cluster-key-slot "^1.1.0"
|
||||
@ -7129,11 +7114,6 @@ lodash.defaults@^4.2.0:
|
||||
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
|
||||
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
|
||||
|
||||
lodash.flatten@^4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
|
||||
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
|
||||
|
||||
lodash.includes@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
||||
@ -8604,11 +8584,6 @@ readdirp@~3.6.0:
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
redis-commands@1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785"
|
||||
integrity sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==
|
||||
|
||||
redis-errors@^1.0.0, redis-errors@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
|
||||
@ -9318,11 +9293,6 @@ stack-utils@^2.0.3:
|
||||
dependencies:
|
||||
escape-string-regexp "^2.0.0"
|
||||
|
||||
standard-as-callback@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.0.1.tgz#ed8bb25648e15831759b6023bdb87e6b60b38126"
|
||||
integrity sha512-NQOxSeB8gOI5WjSaxjBgog2QFw55FV8TkS6Y07BiB3VJ8xNTvUYm0wl0s8ObgQ5NhdpnNfigMIKjgPESzgr4tg==
|
||||
|
||||
standard-as-callback@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45"
|
||||
@ -10085,26 +10055,27 @@ unpipe@1.0.0, unpipe@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
|
||||
|
||||
unrs-resolver@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.3.3.tgz#46bd5dd2ecc650365e050055fc208b5f4ae57803"
|
||||
integrity sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==
|
||||
unrs-resolver@^1.4.1:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.5.0.tgz#d0a608f08321d8e90ba8eb10a3240e7995997275"
|
||||
integrity sha512-6aia3Oy7SEe0MuUGQm2nsyob0L2+g57w178K5SE/3pvSGAIp28BB2O921fKx424Ahc/gQ6v0DXFbhcpyhGZdOA==
|
||||
optionalDependencies:
|
||||
"@unrs/resolver-binding-darwin-arm64" "1.3.3"
|
||||
"@unrs/resolver-binding-darwin-x64" "1.3.3"
|
||||
"@unrs/resolver-binding-freebsd-x64" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-arm-gnueabihf" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-arm-musleabihf" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-arm64-gnu" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-arm64-musl" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-ppc64-gnu" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-s390x-gnu" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-x64-gnu" "1.3.3"
|
||||
"@unrs/resolver-binding-linux-x64-musl" "1.3.3"
|
||||
"@unrs/resolver-binding-wasm32-wasi" "1.3.3"
|
||||
"@unrs/resolver-binding-win32-arm64-msvc" "1.3.3"
|
||||
"@unrs/resolver-binding-win32-ia32-msvc" "1.3.3"
|
||||
"@unrs/resolver-binding-win32-x64-msvc" "1.3.3"
|
||||
"@unrs/resolver-binding-darwin-arm64" "1.5.0"
|
||||
"@unrs/resolver-binding-darwin-x64" "1.5.0"
|
||||
"@unrs/resolver-binding-freebsd-x64" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-arm-gnueabihf" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-arm-musleabihf" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-arm64-gnu" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-arm64-musl" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-ppc64-gnu" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-riscv64-gnu" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-s390x-gnu" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-x64-gnu" "1.5.0"
|
||||
"@unrs/resolver-binding-linux-x64-musl" "1.5.0"
|
||||
"@unrs/resolver-binding-wasm32-wasi" "1.5.0"
|
||||
"@unrs/resolver-binding-win32-arm64-msvc" "1.5.0"
|
||||
"@unrs/resolver-binding-win32-ia32-msvc" "1.5.0"
|
||||
"@unrs/resolver-binding-win32-x64-msvc" "1.5.0"
|
||||
|
||||
update-browserslist-db@^1.1.0:
|
||||
version "1.1.0"
|
||||
|
||||
@ -21,4 +21,4 @@ version: 0.1.0
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: "3.2.0"
|
||||
appVersion: "3.3.0"
|
||||
|
||||
@ -21,4 +21,4 @@ version: 0.1.0
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: "3.2.0"
|
||||
appVersion: "3.3.0"
|
||||
|
||||
@ -39,8 +39,8 @@ services:
|
||||
- 7474:7474
|
||||
|
||||
mailserver:
|
||||
image: djfarrelly/maildev
|
||||
image: maildev/maildev
|
||||
container_name: mailserver
|
||||
ports:
|
||||
- 1080:80
|
||||
- 25:25
|
||||
- 1080:1080
|
||||
- 1025:1025
|
||||
|
||||
@ -37,7 +37,7 @@ services:
|
||||
# - NEO4J_dbms_connector_https_listen__address=0.0.0.0:7473
|
||||
|
||||
mailserver:
|
||||
image: djfarrelly/maildev
|
||||
image: maildev/maildev
|
||||
ports:
|
||||
- 1080:80
|
||||
- 25:25
|
||||
- 1080:1080
|
||||
- 1025:1025
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ocelot-social-frontend",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"description": "ocelot.social new Frontend (in development and not fully implemented) by IT4C Boilerplate for frontends",
|
||||
"main": "build/index.js",
|
||||
"type": "module",
|
||||
|
||||
13
package-lock.json
generated
13
package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "ocelot-social",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ocelot-social",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.26.10",
|
||||
@ -22,7 +22,7 @@
|
||||
"cypress": "^14.2.1",
|
||||
"cypress-network-idle": "^1.15.0",
|
||||
"date-fns": "^3.6.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"dotenv": "^16.5.0",
|
||||
"expect": "^29.6.4",
|
||||
"graphql-request": "^2.0.0",
|
||||
"import": "^0.0.6",
|
||||
@ -8477,10 +8477,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.4.7",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
|
||||
"integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
|
||||
"version": "16.5.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
|
||||
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ocelot-social",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"description": "Free and open source software program code available to run social networks.",
|
||||
"author": "ocelot.social Community",
|
||||
"license": "MIT",
|
||||
@ -46,7 +46,7 @@
|
||||
"cypress": "^14.2.1",
|
||||
"cypress-network-idle": "^1.15.0",
|
||||
"date-fns": "^3.6.0",
|
||||
"dotenv": "^16.4.7",
|
||||
"dotenv": "^16.5.0",
|
||||
"expect": "^29.6.4",
|
||||
"graphql-request": "^2.0.0",
|
||||
"import": "^0.0.6",
|
||||
|
||||
@ -26,4 +26,4 @@ sed -i -e 's/appVersion: ".*"/appVersion: "'"$VERSION_NEW"'"/g' $ROOT_DIR/deploy
|
||||
|
||||
# generate changelog
|
||||
cd $ROOT_DIR
|
||||
yarn run auto-changelog --latest-version $VERSION_NEW
|
||||
yarn run auto-changelog --commit-limit 0 --latest-version $VERSION_NEW
|
||||
@ -1,5 +1,5 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import GroupContentMenu from './GroupContentMenu.vue'
|
||||
import { render, screen, fireEvent } from '@testing-library/vue'
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
@ -7,36 +7,77 @@ const stubs = {
|
||||
'router-link': {
|
||||
template: '<span><slot /></span>',
|
||||
},
|
||||
'v-popover': true,
|
||||
}
|
||||
|
||||
const propsData = {
|
||||
usage: 'groupTeaser',
|
||||
resource: {},
|
||||
group: {},
|
||||
resourceType: 'group',
|
||||
}
|
||||
// Mock Math.random, used in Dropdown
|
||||
Object.assign(Math, {
|
||||
random: () => 0,
|
||||
})
|
||||
|
||||
describe('GroupContentMenu', () => {
|
||||
let wrapper
|
||||
let mocks
|
||||
|
||||
beforeEach(() => {
|
||||
mocks = {
|
||||
$t: jest.fn(),
|
||||
$t: jest.fn((s) => s),
|
||||
}
|
||||
})
|
||||
|
||||
describe('mount', () => {
|
||||
const Wrapper = () => {
|
||||
return mount(GroupContentMenu, { propsData, mocks, localVue, stubs })
|
||||
}
|
||||
const Wrapper = (propsData) => {
|
||||
return render(GroupContentMenu, { propsData, mocks, localVue, stubs })
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
it('renders as groupTeaser', () => {
|
||||
const wrapper = Wrapper({ usage: 'groupTeaser', group: { id: 'groupid' } })
|
||||
expect(wrapper.container).toMatchSnapshot()
|
||||
})
|
||||
|
||||
it('renders as groupProfile, not muted', () => {
|
||||
const wrapper = Wrapper({
|
||||
usage: 'groupProfile',
|
||||
group: { isMutedByMe: false, id: 'groupid' },
|
||||
})
|
||||
expect(wrapper.container).toMatchSnapshot()
|
||||
})
|
||||
|
||||
it('renders', () => {
|
||||
expect(wrapper.findAll('.group-content-menu')).toHaveLength(1)
|
||||
it('renders as groupProfile, muted', () => {
|
||||
const wrapper = Wrapper({
|
||||
usage: 'groupProfile',
|
||||
group: { isMutedByMe: true, id: 'groupid' },
|
||||
})
|
||||
expect(wrapper.container).toMatchSnapshot()
|
||||
})
|
||||
|
||||
it('renders as groupProfile when I am the owner', () => {
|
||||
const wrapper = Wrapper({
|
||||
usage: 'groupProfile',
|
||||
group: { myRole: 'owner', id: 'groupid' },
|
||||
})
|
||||
expect(wrapper.container).toMatchSnapshot()
|
||||
})
|
||||
|
||||
describe('mute button', () => {
|
||||
it('emits mute', async () => {
|
||||
const wrapper = Wrapper({
|
||||
usage: 'groupProfile',
|
||||
group: { isMutedByMe: false, id: 'groupid' },
|
||||
})
|
||||
const muteButton = screen.getByText('group.contentMenu.muteGroup')
|
||||
await fireEvent.click(muteButton)
|
||||
expect(wrapper.emitted().mute).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('unmute button', () => {
|
||||
it('emits unmute', async () => {
|
||||
const wrapper = Wrapper({
|
||||
usage: 'groupProfile',
|
||||
group: { isMutedByMe: true, id: 'groupid' },
|
||||
})
|
||||
const muteButton = screen.getByText('group.contentMenu.unmuteGroup')
|
||||
await fireEvent.click(muteButton)
|
||||
expect(wrapper.emitted().unmute).toBeTruthy()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -62,6 +62,27 @@ export default {
|
||||
params: { id: this.group.id, slug: this.group.slug },
|
||||
})
|
||||
}
|
||||
|
||||
if (this.usage === 'groupProfile') {
|
||||
if (this.group.isMutedByMe) {
|
||||
routes.push({
|
||||
label: this.$t('group.contentMenu.unmuteGroup'),
|
||||
icon: 'volume-up',
|
||||
callback: () => {
|
||||
this.$emit('unmute', this.group.id)
|
||||
},
|
||||
})
|
||||
} else {
|
||||
routes.push({
|
||||
label: this.$t('group.contentMenu.muteGroup'),
|
||||
icon: 'volume-off',
|
||||
callback: () => {
|
||||
this.$emit('mute', this.group.id)
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (this.group.myRole === 'owner') {
|
||||
routes.push({
|
||||
label: this.$t('admin.settings.name'),
|
||||
|
||||
@ -0,0 +1,321 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`GroupContentMenu renders as groupProfile when I am the owner 1`] = `
|
||||
<div>
|
||||
<v-popover-stub
|
||||
autohide="true"
|
||||
class="group-content-menu"
|
||||
container="body"
|
||||
delay="0"
|
||||
handleresize="true"
|
||||
offset="5"
|
||||
openclass="open"
|
||||
opengroup="0"
|
||||
placement="bottom-end"
|
||||
popoverarrowclass="tooltip-arrow popover-arrow"
|
||||
popoverbaseclass="tooltip popover"
|
||||
popoverclass="vue-popover-theme"
|
||||
popoverinnerclass="tooltip-inner popover-inner"
|
||||
popoverwrapperclass="wrapper"
|
||||
popperoptions="[object Object]"
|
||||
trigger="manual"
|
||||
>
|
||||
<button
|
||||
class="base-button --icon-only --circle --small"
|
||||
data-test="group-menu-button"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
<!---->
|
||||
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="group-menu-popover"
|
||||
>
|
||||
<nav
|
||||
class="ds-menu"
|
||||
>
|
||||
<ul
|
||||
class="ds-menu-list"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<li
|
||||
class="ds-menu-item ds-menu-item-level-0"
|
||||
>
|
||||
<a
|
||||
class="ds-menu-item-link"
|
||||
exact="true"
|
||||
href="/"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
group.contentMenu.muteGroup
|
||||
|
||||
</a>
|
||||
<!---->
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li
|
||||
class="ds-menu-item ds-menu-item-level-0"
|
||||
>
|
||||
<a
|
||||
class="ds-menu-item-link"
|
||||
href="/groups/edit/groupid"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
admin.settings.name
|
||||
|
||||
</a>
|
||||
<!---->
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</v-popover-stub>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`GroupContentMenu renders as groupProfile, muted 1`] = `
|
||||
<div>
|
||||
<v-popover-stub
|
||||
autohide="true"
|
||||
class="group-content-menu"
|
||||
container="body"
|
||||
delay="0"
|
||||
handleresize="true"
|
||||
offset="5"
|
||||
openclass="open"
|
||||
opengroup="0"
|
||||
placement="bottom-end"
|
||||
popoverarrowclass="tooltip-arrow popover-arrow"
|
||||
popoverbaseclass="tooltip popover"
|
||||
popoverclass="vue-popover-theme"
|
||||
popoverinnerclass="tooltip-inner popover-inner"
|
||||
popoverwrapperclass="wrapper"
|
||||
popperoptions="[object Object]"
|
||||
trigger="manual"
|
||||
>
|
||||
<button
|
||||
class="base-button --icon-only --circle --small"
|
||||
data-test="group-menu-button"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
<!---->
|
||||
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="group-menu-popover"
|
||||
>
|
||||
<nav
|
||||
class="ds-menu"
|
||||
>
|
||||
<ul
|
||||
class="ds-menu-list"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<li
|
||||
class="ds-menu-item ds-menu-item-level-0"
|
||||
>
|
||||
<a
|
||||
class="ds-menu-item-link"
|
||||
exact="true"
|
||||
href="/"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
group.contentMenu.unmuteGroup
|
||||
|
||||
</a>
|
||||
<!---->
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</v-popover-stub>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`GroupContentMenu renders as groupProfile, not muted 1`] = `
|
||||
<div>
|
||||
<v-popover-stub
|
||||
autohide="true"
|
||||
class="group-content-menu"
|
||||
container="body"
|
||||
delay="0"
|
||||
handleresize="true"
|
||||
offset="5"
|
||||
openclass="open"
|
||||
opengroup="0"
|
||||
placement="bottom-end"
|
||||
popoverarrowclass="tooltip-arrow popover-arrow"
|
||||
popoverbaseclass="tooltip popover"
|
||||
popoverclass="vue-popover-theme"
|
||||
popoverinnerclass="tooltip-inner popover-inner"
|
||||
popoverwrapperclass="wrapper"
|
||||
popperoptions="[object Object]"
|
||||
trigger="manual"
|
||||
>
|
||||
<button
|
||||
class="base-button --icon-only --circle --small"
|
||||
data-test="group-menu-button"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
<!---->
|
||||
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="group-menu-popover"
|
||||
>
|
||||
<nav
|
||||
class="ds-menu"
|
||||
>
|
||||
<ul
|
||||
class="ds-menu-list"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<li
|
||||
class="ds-menu-item ds-menu-item-level-0"
|
||||
>
|
||||
<a
|
||||
class="ds-menu-item-link"
|
||||
exact="true"
|
||||
href="/"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
group.contentMenu.muteGroup
|
||||
|
||||
</a>
|
||||
<!---->
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</v-popover-stub>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`GroupContentMenu renders as groupTeaser 1`] = `
|
||||
<div>
|
||||
<v-popover-stub
|
||||
autohide="true"
|
||||
class="group-content-menu"
|
||||
container="body"
|
||||
delay="0"
|
||||
handleresize="true"
|
||||
offset="5"
|
||||
openclass="open"
|
||||
opengroup="0"
|
||||
placement="bottom-end"
|
||||
popoverarrowclass="tooltip-arrow popover-arrow"
|
||||
popoverbaseclass="tooltip popover"
|
||||
popoverclass="vue-popover-theme"
|
||||
popoverinnerclass="tooltip-inner popover-inner"
|
||||
popoverwrapperclass="wrapper"
|
||||
popperoptions="[object Object]"
|
||||
trigger="manual"
|
||||
>
|
||||
<button
|
||||
class="base-button --icon-only --circle --small"
|
||||
data-test="group-menu-button"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
<!---->
|
||||
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="group-menu-popover"
|
||||
>
|
||||
<nav
|
||||
class="ds-menu"
|
||||
>
|
||||
<ul
|
||||
class="ds-menu-list"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<li
|
||||
class="ds-menu-item ds-menu-item-level-0"
|
||||
>
|
||||
<a
|
||||
class="ds-menu-item-link"
|
||||
href="/groups/groupid"
|
||||
>
|
||||
<span
|
||||
class="base-icon"
|
||||
>
|
||||
<!---->
|
||||
</span>
|
||||
|
||||
group.contentMenu.visitGroupPage
|
||||
|
||||
</a>
|
||||
<!---->
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</v-popover-stub>
|
||||
</div>
|
||||
`;
|
||||
@ -100,7 +100,7 @@ export default {
|
||||
await this.$store.dispatch('auth/login', { email, password })
|
||||
if (this.currentUser && this.currentUser.activeCategories) {
|
||||
this.resetCategories()
|
||||
if (this.currentUser.activeCategories.length > 0) {
|
||||
if (this.currentUser.activeCategories.length < 19) {
|
||||
this.currentUser.activeCategories.forEach((categoryId) => {
|
||||
this.toggleCategory(categoryId)
|
||||
})
|
||||
|
||||
@ -177,6 +177,7 @@ export const groupQuery = (i18n) => {
|
||||
descriptionExcerpt
|
||||
groupType
|
||||
actionRadius
|
||||
isMutedByMe
|
||||
categories {
|
||||
id
|
||||
slug
|
||||
|
||||
25
webapp/graphql/settings/MutedGroups.js
Normal file
25
webapp/graphql/settings/MutedGroups.js
Normal file
@ -0,0 +1,25 @@
|
||||
import gql from 'graphql-tag'
|
||||
|
||||
export const muteGroup = () => {
|
||||
return gql`
|
||||
mutation ($groupId: ID!) {
|
||||
muteGroup(groupId: $groupId) {
|
||||
id
|
||||
name
|
||||
isMutedByMe
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
export const unmuteGroup = () => {
|
||||
return gql`
|
||||
mutation ($groupId: ID!) {
|
||||
unmuteGroup(groupId: $groupId) {
|
||||
id
|
||||
name
|
||||
isMutedByMe
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": "Themen der Gruppe",
|
||||
"changeMemberRole": "Die Rolle wurde auf „{role}“ geändert!",
|
||||
"contentMenu": {
|
||||
"muteGroup": "Stummschalten",
|
||||
"unmuteGroup": "Nicht stummschalten",
|
||||
"visitGroupPage": "Gruppe anzeigen"
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": "Nutzer „{name}“ zur Gruppe hinzufügen?",
|
||||
"confirmAddGroupMemberTitle": "Bestätigen"
|
||||
},
|
||||
"muted": "Gruppe stummgeschaltet",
|
||||
"myGroups": "Meine Gruppen",
|
||||
"name": "Gruppenname",
|
||||
"radius": "Radius",
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": "Geheim — Gruppe (auch der Name) komplett unsichtbar",
|
||||
"public": "Öffentlich — Gruppe und alle Beiträge für registrierte Nutzer sichtbar"
|
||||
},
|
||||
"unmute": "Nicht stummschalten",
|
||||
"unmuted": "Gruppe nicht mehr stummgeschaltet",
|
||||
"update": "Änderung speichern",
|
||||
"updatedGroup": "Die Gruppendaten wurden geändert!"
|
||||
},
|
||||
@ -737,9 +742,11 @@
|
||||
"post": "Beitrag oder Gruppe",
|
||||
"reason": {
|
||||
"changed_group_member_role": "Hat Deine Rolle in der Gruppe geändert …",
|
||||
"commented_on_post": "Hat Deinen Beitrag kommentiert …",
|
||||
"commented_on_post": "Hat einen Beitrag den du beobachtest kommentiert …",
|
||||
"followed_user_posted": "Hat einen neuen Betrag geschrieben …",
|
||||
"mentioned_in_comment": "Hat Dich in einem Kommentar erwähnt …",
|
||||
"mentioned_in_post": "Hat Dich in einem Beitrag erwähnt …",
|
||||
"post_in_group": "Hat einen Beitrag in der Gruppe geschrieben …",
|
||||
"removed_user_from_group": "Hat Dich aus der Gruppe entfernt …",
|
||||
"user_joined_group": "Ist Deiner Gruppe beigetreten …",
|
||||
"user_left_group": "Hat deine Gruppe verlassen …"
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Nachricht erhalten während Abwesenheit",
|
||||
"checkAll": "Alle auswählen",
|
||||
"commentOnObservedPost": "Kommentare zu beobachteten Beiträgen",
|
||||
"followingUsers": "Ein Nutzer dem ich folge veröffentlichte einen neuen Beitrag",
|
||||
"group": "Gruppen",
|
||||
"groupMemberJoined": "Ein Mitglied ist deiner Gruppe beigetreten",
|
||||
"groupMemberLeft": "Ein Mitglied hat deine Gruppe verlassen",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": "Topics of the group",
|
||||
"changeMemberRole": "The role has been changed to “{role}”!",
|
||||
"contentMenu": {
|
||||
"muteGroup": "Mute group",
|
||||
"unmuteGroup": "Unmute group",
|
||||
"visitGroupPage": "Show group"
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": "Add user “{name}” to group?",
|
||||
"confirmAddGroupMemberTitle": "Confirm"
|
||||
},
|
||||
"muted": "Group muted",
|
||||
"myGroups": "My Groups",
|
||||
"name": "Group name",
|
||||
"radius": "Radius",
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": "Secret — Group (including the name) is completely invisible",
|
||||
"public": "Public — Group and all posts are visible for all registered users"
|
||||
},
|
||||
"unmute": "Unmute group",
|
||||
"unmuted": "Group unmuted",
|
||||
"update": "Save change",
|
||||
"updatedGroup": "The group data has been changed."
|
||||
},
|
||||
@ -737,9 +742,11 @@
|
||||
"post": "Post or Group",
|
||||
"reason": {
|
||||
"changed_group_member_role": "Changed your role in group …",
|
||||
"commented_on_post": "Commented on your post …",
|
||||
"commented_on_post": "Commented on a post you observe …",
|
||||
"followed_user_posted": "Wrote a new post …",
|
||||
"mentioned_in_comment": "Mentioned you in a comment …",
|
||||
"mentioned_in_post": "Mentioned you in a post …",
|
||||
"post_in_group": "Posted in a group …",
|
||||
"removed_user_from_group": "Removed you from group …",
|
||||
"user_joined_group": "Joined your group …",
|
||||
"user_left_group": "Left your group …"
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Message received while absent",
|
||||
"checkAll": "Check all",
|
||||
"commentOnObservedPost": "Comments on observed posts",
|
||||
"followingUsers": "User I follow published a new post",
|
||||
"group": "Groups",
|
||||
"groupMemberJoined": "Member joined a group I own",
|
||||
"groupMemberLeft": "Member left a group I own",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": "Silenciar grupo",
|
||||
"unmuteGroup": "Desactivar silencio del grupo",
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": "Grupo silenciado",
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": "Desactivar silencio",
|
||||
"unmuted": "Silencio del grupo desactivado",
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": "Comentó su contribución ...",
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": "Le mencionó en un comentario …",
|
||||
"mentioned_in_post": "Le mencionó en una contribución …",
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Mensaje recibido mientras estaba ausente",
|
||||
"checkAll": "Seleccionar todo",
|
||||
"commentOnObservedPost": "Comentario en una contribución que estoy observando",
|
||||
"followingUsers": null,
|
||||
"group": "Grupos",
|
||||
"groupMemberJoined": "Un nuevo miembro se unió a un grupo mio",
|
||||
"groupMemberLeft": "Un miembro dejó un grupo mio",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": null,
|
||||
"unmuteGroup": null,
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": null,
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": null,
|
||||
"unmuted": null,
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": "Commenté sur votre post…",
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": "Vous a mentionné dans un commentaire…",
|
||||
"mentioned_in_post": "Vous a mentionné dans un post…",
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Message reçu pendant l'absence",
|
||||
"checkAll": "Tout cocher",
|
||||
"commentOnObservedPost": "Commentez une contribution que je suis",
|
||||
"followingUsers": null,
|
||||
"group": "Groups",
|
||||
"groupMemberJoined": "Un nouveau membre a rejoint un de mes groupes",
|
||||
"groupMemberLeft": "Un membre a quitté un de mes groupes",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": null,
|
||||
"unmuteGroup": null,
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": null,
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": null,
|
||||
"unmuted": null,
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": null,
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": null,
|
||||
"mentioned_in_post": null,
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Messaggio ricevuto durante l'assenza",
|
||||
"checkAll": "Seleziona tutto",
|
||||
"commentOnObservedPost": "Commenta un contributo che sto guardando",
|
||||
"followingUsers": null,
|
||||
"group": "Gruppi",
|
||||
"groupMemberJoined": "Un nuovo membro si è unito a un mio gruppo",
|
||||
"groupMemberLeft": "Un membro ha lasciato un mio gruppo",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": null,
|
||||
"unmuteGroup": null,
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": null,
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": null,
|
||||
"unmuted": null,
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": null,
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": null,
|
||||
"mentioned_in_post": null,
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Bericht ontvangen tijdens afwezigheid",
|
||||
"checkAll": "Vink alles aan",
|
||||
"commentOnObservedPost": "Geef commentaar op een bijdrage die ik volg",
|
||||
"followingUsers": null,
|
||||
"group": "Groepen",
|
||||
"groupMemberJoined": "Een nieuw lid is lid geworden van een groep van mij",
|
||||
"groupMemberLeft": "Een lid heeft een groep van mij verlaten",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": null,
|
||||
"unmuteGroup": null,
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": null,
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": null,
|
||||
"unmuted": null,
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": null,
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": null,
|
||||
"mentioned_in_post": null,
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Wiadomość otrzymana podczas nieobecności",
|
||||
"checkAll": "Wybierz wszystko",
|
||||
"commentOnObservedPost": "Skomentuj wpis, który obserwuję",
|
||||
"followingUsers": null,
|
||||
"group": "Grupy",
|
||||
"groupMemberJoined": "Nowy członek dołączył do mojej grupy",
|
||||
"groupMemberLeft": "Członek opuścił moją grupę",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": null,
|
||||
"unmuteGroup": null,
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": null,
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": null,
|
||||
"unmuted": null,
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": "Comentou no seu post …",
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": "Mentionou você em um comentário …",
|
||||
"mentioned_in_post": "Mencinou você em um post …",
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Mensagem recebida durante a ausência",
|
||||
"checkAll": "Marcar tudo",
|
||||
"commentOnObservedPost": "Comentários sobre as mensagens observadas",
|
||||
"followingUsers": null,
|
||||
"group": "Grupos",
|
||||
"groupMemberJoined": "Member joined a group I own",
|
||||
"groupMemberLeft": "Membro saiu de um grupo de que sou proprietário",
|
||||
|
||||
@ -485,6 +485,8 @@
|
||||
"categoriesTitle": null,
|
||||
"changeMemberRole": null,
|
||||
"contentMenu": {
|
||||
"muteGroup": null,
|
||||
"unmuteGroup": null,
|
||||
"visitGroupPage": null
|
||||
},
|
||||
"createNewGroup": {
|
||||
@ -535,6 +537,7 @@
|
||||
"confirmAddGroupMemberText": null,
|
||||
"confirmAddGroupMemberTitle": null
|
||||
},
|
||||
"muted": null,
|
||||
"myGroups": null,
|
||||
"name": null,
|
||||
"radius": null,
|
||||
@ -559,6 +562,8 @@
|
||||
"hidden": null,
|
||||
"public": null
|
||||
},
|
||||
"unmute": null,
|
||||
"unmuted": null,
|
||||
"update": null,
|
||||
"updatedGroup": null
|
||||
},
|
||||
@ -738,8 +743,10 @@
|
||||
"reason": {
|
||||
"changed_group_member_role": null,
|
||||
"commented_on_post": "Комментарий к посту...",
|
||||
"followed_user_posted": null,
|
||||
"mentioned_in_comment": "Упоминание в комментарии....",
|
||||
"mentioned_in_post": "Упоминание в посте....",
|
||||
"post_in_group": null,
|
||||
"removed_user_from_group": null,
|
||||
"user_joined_group": null,
|
||||
"user_left_group": null
|
||||
@ -1043,6 +1050,7 @@
|
||||
"chatMessage": "Сообщение, полученное во время отсутствия",
|
||||
"checkAll": "Отметить все",
|
||||
"commentOnObservedPost": "Комментарии по поводу замеченных сообщений",
|
||||
"followingUsers": null,
|
||||
"group": "Группы",
|
||||
"groupMemberJoined": "Участник присоединился к группе, которой я владею",
|
||||
"groupMemberLeft": "Участник вышел из группы, которой владею",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ocelot-social/maintenance",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"description": "Maintenance page for ocelot.social",
|
||||
"repository": "https://github.com/Ocelot-Social-Community/Ocelot-Social",
|
||||
"author": "ocelot.social Community",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ocelot-social-webapp",
|
||||
"version": "3.2.1",
|
||||
"version": "3.3.0",
|
||||
"description": "ocelot.social Frontend",
|
||||
"repository": "https://github.com/Ocelot-Social-Community/Ocelot-Social",
|
||||
"author": "ocelot.social Community",
|
||||
@ -95,7 +95,7 @@
|
||||
"core-js": "~2.6.10",
|
||||
"css-loader": "~3.5.2",
|
||||
"eslint": "^7.28.0",
|
||||
"eslint-config-prettier": "~10.1.1",
|
||||
"eslint-config-prettier": "~10.1.2",
|
||||
"eslint-config-standard": "~15.0.1",
|
||||
"eslint-loader": "~4.0.0",
|
||||
"eslint-plugin-import": "~2.31.0",
|
||||
|
||||
7845
webapp/pages/groups/_id/__snapshots__/_slug.spec.js.snap
Normal file
7845
webapp/pages/groups/_id/__snapshots__/_slug.spec.js.snap
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -18,18 +18,14 @@
|
||||
<!-- Menu -->
|
||||
<client-only>
|
||||
<group-content-menu
|
||||
v-if="isGroupOwner"
|
||||
v-if="isGroupMemberNonePending"
|
||||
class="group-profile-content-menu"
|
||||
:usage="'groupProfile'"
|
||||
:group="group || {}"
|
||||
placement="bottom-end"
|
||||
@mute="muteGroup"
|
||||
@unmute="unmuteGroup"
|
||||
/>
|
||||
<!-- TODO: implement later on -->
|
||||
<!-- @mute="muteUser"
|
||||
@unmute="unmuteUser"
|
||||
@block="blockUser"
|
||||
@unblock="unblockUser"
|
||||
@delete="deleteUser" -->
|
||||
</client-only>
|
||||
<ds-space margin="small">
|
||||
<!-- group name -->
|
||||
@ -84,19 +80,9 @@
|
||||
</ds-flex-item> -->
|
||||
</ds-flex>
|
||||
<div class="action-buttons">
|
||||
<!-- <base-button v-if="user.isBlocked" @click="unblockUser(user)">
|
||||
{{ $t('settings.blocked-users.unblock') }}
|
||||
</base-button>
|
||||
<base-button v-if="user.isMuted" @click="unmuteUser(user)">
|
||||
{{ $t('settings.muted-users.unmute') }}
|
||||
</base-button>
|
||||
<follow-button
|
||||
v-if="!user.isMuted && !user.isBlocked"
|
||||
:follow-id="user.id"
|
||||
:is-followed="user.followedByCurrentUser"
|
||||
@optimistic="optimisticFollow"
|
||||
@update="updateFollow"
|
||||
/> -->
|
||||
<base-button danger v-if="group.isMutedByMe" @click="unmuteGroup" icon="volume-up">
|
||||
{{ $t('group.unmute') }}
|
||||
</base-button>
|
||||
<!-- Group join / leave -->
|
||||
<join-leave-button
|
||||
:group="group || {}"
|
||||
@ -108,8 +94,6 @@
|
||||
@prepare="prepareJoinLeave"
|
||||
@update="updateJoinLeave"
|
||||
/>
|
||||
<!-- implement:
|
||||
v-if="!user.isMuted && !user.isBlocked" -->
|
||||
</div>
|
||||
<hr />
|
||||
<ds-space margin-top="small" margin-bottom="small">
|
||||
@ -314,8 +298,7 @@
|
||||
import uniqBy from 'lodash/uniqBy'
|
||||
import { profilePagePosts } from '~/graphql/PostQuery'
|
||||
import { updateGroupMutation, groupQuery, groupMembersQuery } from '~/graphql/groups'
|
||||
// import { muteUser, unmuteUser } from '~/graphql/settings/MutedUsers'
|
||||
// import { blockUser, unblockUser } from '~/graphql/settings/BlockedUsers'
|
||||
import { muteGroup, unmuteGroup } from '~/graphql/settings/MutedGroups'
|
||||
import UpdateQuery from '~/components/utils/UpdateQuery'
|
||||
import postListActions from '~/mixins/postListActions'
|
||||
import AvatarUploader from '~/components/Uploader/AvatarUploader'
|
||||
@ -470,6 +453,32 @@ export default {
|
||||
// this.resetPostList()
|
||||
// }
|
||||
// },
|
||||
async muteGroup() {
|
||||
try {
|
||||
await this.$apollo.mutate({
|
||||
mutation: muteGroup(),
|
||||
variables: {
|
||||
groupId: this.group.id,
|
||||
},
|
||||
})
|
||||
this.$toast.success(this.$t('group.muted'))
|
||||
} catch (error) {
|
||||
this.$toast.error(error.message)
|
||||
}
|
||||
},
|
||||
async unmuteGroup() {
|
||||
try {
|
||||
await this.$apollo.mutate({
|
||||
mutation: unmuteGroup(),
|
||||
variables: {
|
||||
groupId: this.group.id,
|
||||
},
|
||||
})
|
||||
this.$toast.success(this.$t('group.unmuted'))
|
||||
} catch (error) {
|
||||
this.$toast.error(error.message)
|
||||
}
|
||||
},
|
||||
uniq(items, field = 'id') {
|
||||
return uniqBy(items, field)
|
||||
},
|
||||
|
||||
@ -9615,10 +9615,10 @@ eslint-config-prettier@^6.0.0:
|
||||
dependencies:
|
||||
get-stdin "^6.0.0"
|
||||
|
||||
eslint-config-prettier@~10.1.1:
|
||||
version "10.1.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz#cf0ff6e5c4e7e15f129f1f1ce2a5ecba92dec132"
|
||||
integrity sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==
|
||||
eslint-config-prettier@~10.1.2:
|
||||
version "10.1.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz#31a4b393c40c4180202c27e829af43323bf85276"
|
||||
integrity sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==
|
||||
|
||||
eslint-config-standard@~15.0.1:
|
||||
version "15.0.1"
|
||||
@ -18637,7 +18637,7 @@ string-length@^4.0.1:
|
||||
char-regex "^1.0.2"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.2.3:
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
@ -18690,6 +18690,15 @@ string-width@^4.2.0:
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^5.0.1, string-width@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||
@ -18749,7 +18758,7 @@ string_decoder@~1.1.1:
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
@ -18784,6 +18793,13 @@ strip-ansi@^6.0.0:
|
||||
dependencies:
|
||||
ansi-regex "^5.0.0"
|
||||
|
||||
strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^7.0.1:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||
@ -20852,7 +20868,7 @@ worker-farm@^1.7.0:
|
||||
dependencies:
|
||||
errno "~0.1.7"
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
@ -20904,6 +20920,15 @@ wrap-ansi@^6.2.0:
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||
|
||||
@ -4445,10 +4445,10 @@ domutils@^3.0.1, domutils@^3.1.0:
|
||||
domelementtype "^2.3.0"
|
||||
domhandler "^5.0.3"
|
||||
|
||||
dotenv@^16.4.7:
|
||||
version "16.4.7"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
|
||||
integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
|
||||
dotenv@^16.5.0:
|
||||
version "16.5.0"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692"
|
||||
integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==
|
||||
|
||||
dotenv@^4.0.0:
|
||||
version "4.0.0"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user