+function saveAccountAndServerIfNotExist (account: AccountInstance, t?: Transaction): Bluebird<AccountInstance> | Promise<AccountInstance> {
+ if (t !== undefined) {
+ return save(t)
+ } else {
+ return db.sequelize.transaction(t => {
+ return save(t)
+ })
+ }
+
+ async function save (t: Transaction) {
+ const accountHost = url.parse(account.url).host
+
+ const serverOptions = {
+ where: {
+ host: accountHost
+ },
+ defaults: {
+ host: accountHost
+ },
+ transaction: t
+ }
+ const [ server ] = await db.Server.findOrCreate(serverOptions)
+
+ // Save our new account in database
+ account.set('serverId', server.id)
+ account = await account.save({ transaction: t })
+
+ return account
+ }
+}
+
+async function fetchRemoteAccount (accountUrl: string) {