From 66508fd5aed11b955fc14fe7ba1889cd3b2191a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hernando=20Guzm=C3=A1n?= Date: Fri, 21 May 2021 18:26:14 -0300 Subject: [PATCH] Add sourcecred functions and db fetch functions --- src/utils.ts | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/utils.ts diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..c9e1a04 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,72 @@ +import { sourcecred } from 'sourcecred' +import { config } from 'dotenv' + +import User, { IUser } from './models/User' +import LedgerUpdate from './models/LedgerUpdate' + +config() + +export const log = (message) => console.log(`${Date.now()}: ${message}`) + +const fetchLastLedgerUpdate = async (): Promise => { + const lastLedgerUpdateEntry = await LedgerUpdate.find({}).sort('-modifiedAt').limit(1) + + return lastLedgerUpdateEntry.length ? lastLedgerUpdateEntry[0].modifiedAt : 0 +} + +export const fetchModifiedUsers = async (): Promise => { + const lastLedgerUpdate = await fetchLastLedgerUpdate() + const foundUsers = await User.find({ + modifiedAt: { $gte: lastLedgerUpdate } + }) + + return foundUsers +} + +const storage = new sourcecred.ledger.storage.GithubStorage({ + apiToken: process.env.GITHUB_API_TOKEN, + repo: process.env.REPO, + branch: process.env.BRANCH +}) + +export const manager = new sourcecred.ledger.manager.LedgerManager({ storage }) + +export const loadLedger = async () => { + const ledger = await manager.reloadLedger() + + return ledger +} + +export const createDiscourseIdentity = (discourse, ledger) => { + const newDiscourseIdentityId = ledger.createIdentity( + 'USER', + ledger.nameAvailable(discourse) ? discourse : `${discourse}-discourse` + ) + + ledger.addAlias( + newDiscourseIdentityId, + { + description: `discourse/[@${discourse}](https://forum.1hive.org/u/${discourse}/)`, + address: `N\u0000sourcecred\u0000discourse\u0000user\u0000https://forum.1hive.org\u0000${discourse}\u0000` + } + ) + + return newDiscourseIdentityId +} + +export const createGithubIdentity = (github, ledger) => { + const newGithubIdentityId = ledger.createIdentity( + 'USER', + ledger.nameAvailable(github) ? github : `${github}-github` + ) + + ledger.addAlias( + newGithubIdentityId, + { + description: `github/[@${github}](https://github.com/${github})`, + address: `N\u0000sourcecred\u0000github\u0000USERLIKE\u0000USER\u0000${github}\u0000` + } + ) + + return newGithubIdentityId +}