2021-07-05 04:19:04 +01:00
|
|
|
import { actions } from './mastodon-data.js'
|
|
|
|
import { users } from '../tests/users.js'
|
|
|
|
import { postStatus } from '../src/routes/_api/statuses.js'
|
|
|
|
import { followAccount } from '../src/routes/_api/follow.js'
|
|
|
|
import { favoriteStatus } from '../src/routes/_api/favorite.js'
|
|
|
|
import { reblogStatus } from '../src/routes/_api/reblog.js'
|
2018-03-06 04:51:42 +00:00
|
|
|
import fetch from 'node-fetch'
|
|
|
|
import FileApi from 'file-api'
|
2021-07-05 04:19:04 +01:00
|
|
|
import { pinStatus } from '../src/routes/_api/pin.js'
|
|
|
|
import { submitMedia } from '../tests/submitMedia.js'
|
2018-03-05 18:10:50 +00:00
|
|
|
|
2018-03-06 04:51:42 +00:00
|
|
|
global.File = FileApi.File
|
|
|
|
global.FormData = FileApi.FormData
|
|
|
|
global.fetch = fetch
|
|
|
|
|
|
|
|
export async function restoreMastodonData () {
|
2018-03-05 18:10:50 +00:00
|
|
|
console.log('Restoring mastodon data...')
|
2019-08-03 21:49:37 +01:00
|
|
|
const internalIdsToIds = {}
|
|
|
|
for (const action of actions) {
|
2022-11-18 01:09:24 +00:00
|
|
|
if (!action.post || /@/.test(action.post.text)) {
|
|
|
|
// If the action is a boost, favorite, mention, etc., then it needs to
|
2018-11-11 19:12:41 +00:00
|
|
|
// be delayed, otherwise it may appear in an unpredictable order and break the tests.
|
2022-11-18 01:09:24 +00:00
|
|
|
await new Promise(resolve => setTimeout(resolve, 1500))
|
2018-11-11 19:12:41 +00:00
|
|
|
}
|
2018-03-06 04:51:42 +00:00
|
|
|
console.log(JSON.stringify(action))
|
2019-08-03 21:49:37 +01:00
|
|
|
const accessToken = users[action.user].accessToken
|
2018-03-06 17:03:59 +00:00
|
|
|
|
2018-03-06 04:29:49 +00:00
|
|
|
if (action.post) {
|
2019-08-03 21:49:37 +01:00
|
|
|
const { text, media, sensitive, spoiler, privacy, inReplyTo, internalId } = action.post
|
|
|
|
const mediaIds = media && await Promise.all(media.map(async mediaItem => {
|
|
|
|
const mediaResponse = await submitMedia(accessToken, mediaItem, 'kitten')
|
2018-03-06 04:29:49 +00:00
|
|
|
return mediaResponse.id
|
|
|
|
}))
|
2019-08-03 21:49:37 +01:00
|
|
|
const inReplyToId = inReplyTo && internalIdsToIds[inReplyTo]
|
|
|
|
const status = await postStatus('localhost:3000', accessToken, text, inReplyToId, mediaIds,
|
2018-03-06 04:29:49 +00:00
|
|
|
sensitive, spoiler, privacy || 'public')
|
|
|
|
if (typeof internalId !== 'undefined') {
|
|
|
|
internalIdsToIds[internalId] = status.id
|
|
|
|
}
|
|
|
|
} else if (action.follow) {
|
2018-03-06 04:51:42 +00:00
|
|
|
await followAccount('localhost:3000', accessToken, users[action.follow].id)
|
2018-03-06 04:29:49 +00:00
|
|
|
} else if (action.favorite) {
|
|
|
|
await favoriteStatus('localhost:3000', accessToken, internalIdsToIds[action.favorite])
|
|
|
|
} else if (action.boost) {
|
2018-03-06 04:51:42 +00:00
|
|
|
await reblogStatus('localhost:3000', accessToken, internalIdsToIds[action.boost])
|
2018-03-06 06:36:54 +00:00
|
|
|
} else if (action.pin) {
|
|
|
|
await pinStatus('localhost:3000', accessToken, internalIdsToIds[action.pin])
|
2018-03-06 04:29:49 +00:00
|
|
|
}
|
|
|
|
}
|
2018-03-06 05:21:28 +00:00
|
|
|
console.log('Restored mastodon data')
|
2018-03-06 07:56:48 +00:00
|
|
|
}
|