giseldo/neodataset huggingface dataset:
Ability to authenticate against Twitter OAuth

<!---
Please read this!

The Definition of Ready (DoR) can be found at https://developers.minds.com/docs/handbook/how-we-work/#definition-of-ready-dor

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "Type::Feature" label and verify the feature you're about to submit isn't a duplicate.
--->

## Goal

<!---
Clearly outline the goal of the issue and why we are doing it
--->

Allow for cross posting to twitter by authentication twitter accounts to minds


## What needs to be done

<!---
Clearly detail what needs to be done to achieve the goal set out above
--->

See above and acceptance criteria below. 

## QA

<!---
Consideration is given to how the issue will be demoed and tested prior to being deployed
--->


## UX/Design

<!---
Sufficient wireframes have been presented and understood by the development team. Full mockups are not required and re-usable components are encouraged.
--->


## Personas

<!---
Who does this user impact and why (optional)
--->

N/A

## Experiments

<!---
Experiments are not required, but it should be made clear if one is expected. If experiments are required, the hypothesis should be outlined.
--->

Feature flag.

## Acceptance Criteria

<!--
Everyone should be able to understand what is expected to be delivered
--->

- [x] Introduce Twitter OAuth flow
- [x] Store access tokens in a new table and handle refresh tokens on failure
- [x] Proof of concept script to create a tweet from minds api
- [x] Encrypt the access tokens on the database
- [ ] Tests (Spec & Integration)

## Definition of Ready Checklist

- [x] Definition Of Done (DoD)
- [x] Acceptance criteria
- [ ] Weighted
- [x] QA
- [x] UX/Design
- [x] Personas
- [x] Experiments

Story points: 8.0
Supermind notifications: Push & In-app

## Goal

Communicate to both the sender and the receiver of a Superminds offer the relevant and actionable events of the offer, so that (a) the sender is aware of when an offer is accepted or declined, and that (b) a receiver is aware of when an offer is received.

## What needs to be done

Create email, push, and in-app notifications that communicate the events listed here, and trigger those notifications at the appropriate time.

| Event                            | Notified user | Clicks to                    | Push notification copy                                |
|----------------------------------|---------------|------------------------------|-------------------------------------------------------|
| Sender sends a Supermind offer   | Sender        | n/a                          | n/a                                                   |
| Sender sends a Supermind offer   | Recipient     | Supermind console > Inbound  | @channelName sent you a Supermind offer               |
| Receiver declines an offer       | Sender        | Supermind console > Outbound | @channelName has declined your Supermind offer        |
| Receiver accepts an offer        | Sender        | Activity post URL            | @channelName has replied to your Supermind offer            |
| 24 hours before an offer expires | Recipient     | Supermind console > Inbound  | Don't forget to review @channelName's Supermind offer |
| An offer expires                 | Sender        | Supermind console > Outbound | @channelName missed your Supermind offer              |

## QA

<!---
Consideration is given to how the issue will be demoed and tested prior to being deployed
--->


## UX/Design

https://www.figma.com/file/thrGepQAxmcMGB7MoEEckM/Supermind?node-id=1024%3A23254

## Personas

- Fans
- Creators

## Experiments

n/a

## Acceptance Criteria

<!--
Everyone should be able to understand what is expected to be delivered
--->

- [x] Push notifications are sent to offer senders and recipients according to the table outlined above.
- [x] Push notifications have links that point to the appropriate sections of the Superminds console.
- [ ] There's an in-app representation of the push notification that taps to the appropriate section of the Superminds console.
- [x] Backend should support returning a supermind by its guid `GET /api/v3/supermind/:guid`
- [x] Clicking on an single supermind notification should navigation to a single view supermind page in the console
- [ ] Clicking on multiple/stacked superminds notifications should navigate the the supermind console
- [x] Push notification should supply a uri for the supermind notification (deeplinking support)
- [x] Add supermind toggle to the push notification settings
- [x] Playright tests 

## Definition of Ready Checklist

- [ ] Definition Of Done (DoD)
- [ ] Acceptance criteria
- [ ] Weighted
- [ ] QA
- [ ] UX/Design
- [ ] Personas
- [ ] Experiments

Story points: 8.0
Read clustered recs from Vitess

<!---
Please read this!

The Definition of Ready (DoR) can be found at https://developers.minds.com/docs/handbook/how-we-work/#definition-of-ready-dor

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "Type::Feature" label and verify the feature you're about to submit isn't a duplicate.
--->

## Goal

<!---
Clearly outline the goal of the issue and why we are doing it
--->

We can't exclude enough seen posts with the current ElasticSearch solution. #2363 will enable us do a `JOIN` query in order to exclude seen results much easier, and with much less bandwidth usage.

## What needs to be done

<!---
Clearly detail what needs to be done to achieve the goal set out above
--->

Read clustered results from MySQL.

```sql
CREATE TABLE clustered_entities_recs (
  cluster_id int,
  entity_guid bigit,
  score float,
  ...
  PRIMARY KEY (cluster_id, entity_guid)
)
```

ES is currently:
```json
{
  'entity_guid': record[0],
  'entity_owner_guid': rprops[0],
  'cluster_id': record[1],
  'score': record[2],
  'total_views': rstats[2],
  'total_engagement': rstats[3],
  '@first_engaged': rstats[0].strftime("%Y-%m-%dT%H:%M:%SZ"),
  '@last_engaged': rstats[1].strftime("%Y-%m-%dT%H:%M:%SZ"),
  '@last_updated': update_str,
  '@time_created': rprops[1].strftime("%Y-%m-%dT%H:%M:%SZ")
}
```

## QA

<!---
Consideration is given to how the issue will be demoed and tested prior to being deployed
--->

Ensure results are being returned. 

## UX/Design

<!---
Sufficient wireframes have been presented and understood by the development team. Full mockups are not required and re-usable components are encouraged.
--->

N/A

## Personas

<!---
Who does this user impact and why (optional)
--->

N/A

## Experiments

<!---
Experiments are not required, but it should be made clear if one is expected. If experiments are required, the hypothesis should be outlined.
--->

No, but do make a feature flag

## Acceptance Criteria

<!--
Everyone should be able to understand what is expected to be delivered
--->

- [ ] Schema for MySQL
- [ ] Querying results from Vitess and removing ElasticSearch
- [ ] Spec tests

## Definition of Ready Checklist

- [x] Definition Of Done (DoD)
- [x] Acceptance criteria
- [ ] Weighted
- [x] QA
- [x] UX/Design
- [x] Personas
- [x] Experiments

Read

Story points: 5.0
(bug): Imagick fix

https://fix-imagick-upgrade-migration-563.minds.io/newsfeed/subscriptions

Had to fix the issues I was having locally with Imagick to enable progress on other tasks that were reliant on this. With the help of @brianhatchet I have identified that the version installed is Imagick 3.4.0. Since Imagick 3.2.0 flattenImages() has been depreciated, I have replaced this with its recommended counterpart in the attached MR

Story points: 5.0
(bug): publishing a blog that was saved as a draft or "unlisted" does not generate activity post

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

Many bloggers like to save drafts or publish blogs as unlisted before making them public so they can work on them. If you save a draft, or publish as unlisted, and eventually try to publish the blog to public, then it does not generate an activity post.

### Steps to reproduce

1. Write a blog
2. Save as draft (can try doing this twice)
3. go back to edit blog and publish as public. 
4. No activity post created

1. Write a blog
2. Publish as unlisted
3. go back and edit blog and publish as public
4. no activity post created

### Platform information 

All

### What is the expected *correct* behavior?

An activity post should be created everytime you publish a blog as "Pubic" no matter what the state of the blog was prior.

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0
(bug): Block function does not extend to wire

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

A user can still be sent tokens by a user that they have blocked.

### Steps to reproduce

1. User 1 - Block user 2
2. User 2 - Wire tokens to user 1

### Platform information 

Cross-platform 

### What is the current *bug* behavior?

A user can still be sent tokens by a user that they have blocked.

### What is the expected *correct* behavior?

A user should not be able to receive any tokens by a user that they have blocked.

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 3.0
(bug): Video thumbnail change only updating thumbnail in users gallery

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

It appears that when setting a thumbnail for a video, it only applies on the media page; in other peoples news-feeds, it is still how it used to be. 

Ideally we **should** also make this feature more readily available (e.g. on the edit on the newsfeed).

### Steps to reproduce

1. Go to the full screen media page for an activity.
2. Click on the options menu (⋮).
3. Hit edit.
4. Set a video thumbnail and save.
5. Refresh and compare the media page thumbnail with the newsfeed in another window/tab.	

### Platform information 

Universal Web.

### What is the current *bug* behavior?

Thumbnail does not update for media feed.

### What is the expected *correct* behavior?

Thumbnail changes should propagate across the site.

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 5.0
(bug): Limited password validation on forgot password

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

When you forget your password, the password strength enforcement is different. Characters like @ are not allowed, but all lower case with no numbers and symbols is.

### Steps to reproduce

1. Log out
2. Click on forgot my password on login form
3. follow instructions
4. try an all lower case password with an @
5. try removing the @

### Platform information 

Very likely cross-platform but reproduced on S7 edge.

### What is the current *bug* behavior?

Weak passwords are allowed.

### What is the expected *correct* behavior?

Weak passwords should not be allowed.

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 5.0
(feat): extend e-tag blur of text to be removable when clicking on area, not just the e-tagged icon

https://www.minds.com/newsfeed/985302636846891008

if you tap on john's remind status addition it will not open, so you can't see what he says. 

if you tap on mine, only mine opens. it should open it all. 

ALSO. 

The mature content optin in settings should not be separate from the nsfw optin on the newsfeed. they need to be the same. the nsfw one should be BOTH places and if you opt in to nudity, there should be NO BLUR. 

Story points: 2.0
(bug): Double upvote a blog post

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

@Grantek  reports that they can double upvote a blog post on anothers channels. See images below.

### Steps to reproduce

1. Post a blog on a test account.
2. Go to the channel.
3. Upvote the post in the feed.
3. Upvote the post in the blog sidebar on the left.

### Platform information 

Cross-platform web

### What is the current *bug* behavior?

Can register 2 upvotes

### What is the expected *correct* behavior?

(What you should see instead)

### Relevant logs and/or screenshots

See comments

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

/label minds/minds~9207169 ~"S \- Triage:new" 


Story points: 4.0
Deleting post in moderated group queue does not remove post

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

If a user deletes a post in a moderated group before it is approved, the post can still be approved and does not get deleted. 

### Steps to reproduce

1. Make a group, make it moderated.
2. Login to a secondary account, create posts numbered 1, 2, 3, 4, 5.
3. Log-in to primary account, go to queue and reject the post numbered 3.
4. Observe the post is no longer in the queue, but if you go back to the group, it is still there with "this post is awaiting moderation" text.

### Platform information 

Cross-platform web

### Relevant logs and/or screenshots

https://www.minds.com/newsfeed/984135202688479232

Story points: 2.0
(bug): Reminded content where the original poster is blocked, shows wrong error message.

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

On desktop as illustrated in image 1 (below), the message displayed to the user is that the post cannot be viewed because the user is blocked - It should be matching the text shown on the front-end, where it says that its not available, because they have blocked X user - this is less confusing.
 
### Steps to reproduce

1. View remind of blocked channel on desktop
2. View the same remind on mobile

### Platform information 

v3.5.0 - Cross-platform

### What is the current *bug* behavior?

Text is a bit misleading and implies the user has the *reminder* blocked. 

### What is the expected *correct* behavior?

Text should match that of the desktop site.

### Relevant logs and/or screenshots

![Wire_2019-06-08_at_7_29_PM](/uploads/13369195e6096d8d4dddb7a71140c186/Wire_2019-06-08_at_7_29_PM.png)

![Screen_Shot_2019-06-08_at_2.54.28_PM](/uploads/d4b280c5f86676e9933032b0ed069cc6/Screen_Shot_2019-06-08_at_2.54.28_PM.png)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 2.0
Duplicate users in messenger

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

- [ ] Backend should filter the output so only one shows
- [ ] Backend should patch

----------

### Summary

There appears to be an issue that causes in some cases users to be duplicated in the messenger window.

### Steps to reproduce

(How one can reproduce the issue - this is very important)

### Platform information

Android, Moto G5 Android 8.1.0

### App version

v3.7.0-rc2

### What is the current *bug* behavior?

Users are shown multiple times.

### What is the expected *correct* behavior?

Users should be shown once.

### Relevant logs and/or screenshots

https://www.minds.com/newsfeed/1003379382771515392

![Screenshot_20190607-083233](/uploads/d8dc829b62af58e44e2c987a19e79f23/Screenshot_20190607-083233.png)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0
(bug): saves do not stick after refresh for new accounts

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

Edits to channel page do not stick after refresh.

### Steps to reproduce

1. Create new account;
2. Click edit button;
3. Edit bio;
4. Click save;
5. Refresh

### Platform information 

Windows 10, FireFox, Chrome, Opera. Appears to be browser independent

Story points: 4.0
(refactor): Ban Snapshot optimizations

- No need to snapshot/restore personal indexes
- No need to snapshot/restore lookup indexes
- No need to snapshot/restore entities (they can just add the 'delete' boolean to them)
- No need to download from ES (a boolean on all the owner_guids documents should suffice)
- There needs to be a distinction between hiding/deleting. Add another function called hide(), and if it is a delete operation for that delegate, it will just pass though as delete().

Story points: 8.0
(feat): ElasticRepository for Feed Impressions

See #468 for CQL schema

```json
{
  "properties": {
    "uuid": {
      "type": "keyword"
    },
    "entity_urn": {
      "type": "keyword"
    },
    "entity_type": {
      "type": "keyword"
    },
    "entity_guid": {
      "type": "long"
    },
    "source": {
      "type": "keyword"
    },
    "campaign": {
      "type": "keyword"
    },
    "medium": {
      "type": "keyword"
    },
    "position": {
      "type": "integer"
    },
    "@timestamp": {
      "type": "date"
    }
  }
}
```

Story points: 2.0
Re-indexing of old blog drafts

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

@authorpendragon via H&S

> This is seriously worrying. Although I doubt that devices matter in this, I'm on Chromebook and Mac Air/High Sierra/Firefox. Minds has given us a sub-channel of our published blogposts. Nice touch. However, I had a massive amount of unlisted blogposts, which have suddenly vanished...and many of my published ones, several the work of months each, are missing. The article below for example comes from my Gail McGowan Mellor channel. It was the product of months of research, writing and fielding comments, yet missing completely from the new blog gallery set-up.

> I retrieved it from way down the list in the Boost Console.

> Anything never boosted (ALL my unlisted work) is of course not retrievable that way. As worrying, although I can get this particular article from Boost, republishing it does not make it show up in the new blogpost listing.

> I've lost access to at least 4/5 of my work. Please restore the previous set-up. I cannot even inventory the amount of loss, which is not balanced by a glitzy new format.

This is critically important because some blog posters like @authorpendragon, but incredibly amounts of effort into their blogs, and the drafts can take months to finalise. 

### Steps to reproduce

(How one can reproduce the issue - this is very important)

### Platform information 

Chromebook and Mac Air/High Sierra/Firefox

### What is the current *bug* behavior?

The user cannot see the majority of their blog drafts

### What is the expected *correct* behavior?

The user should be able to see all of their previous blog drafts.

### Relevant logs and/or screenshots

(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)

### Possible fixes

I believe the workaround to this is to re-index the post manually. Regardless this should not be necessary.

Story points: 5.0
(bug): cannot open moderated posts

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

Opening up moderated posts generates the "Sorry, we couldn't load the activity" error message.

### Steps to reproduce

1. Go to moderated section of a group
2. Click the date on a pending post
3. Does not open.

### Platform information 

Windows 10, chrome.

Story points: 4.0
(bug): subscriber feed does not load

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

The subscriber feed does not load for many users. Clicking "Click to load more" does not produce more results.

### Steps to reproduce

Go to subscription page (e.g. https://www.minds.com/Talon123/subscriptions) and attempt to load them.

### Platform information 

Windows 10, chrome / firefox


### Relevant logs and/or screenshots

https://www.minds.com/newsfeed/973569609504034816

### Possible fixes

I think the error might be produced when the user has over 5,000 subscribers, or had over 5,000 and then removed a lot of them.

Story points: 3.0
Pro cancellation redirects to minds.com/[name], not minds..com[username]

<!---
Please read this!

Before opening a new issue, make sure to search for keywords in the issues
filtered by the "T - Bug" label and verify the issue you're about to submit isn't a duplicate.
--->

### Summary

https://www.minds.com/newsfeed/1126660413816995840
Pro cancellation redirects to minds.com/[name], not minds..com[username]

### Steps to reproduce

Cancel pro, having a name different to your username.

### Platform information 

Should be cross-platform.

### What is the current *bug* behavior?

The wrong page is linked to. Member is left uncertain of whether their cancellation worked due to the bug.

### What is the expected *correct* behavior?

It should redirect to the channel.

### Relevant logs and/or screenshots

![image](/uploads/93b7c2ae579337649a62851b2ab04822/image.png)

### Possible fixes

(If you can, link to the line of code that might be responsible for the problem)

Story points: 1.0