add relativeTarget to easily parse on Hugo side

This commit is contained in:
Wouter Groeneveld 2021-03-10 09:00:19 +01:00
parent 0ff54d8a7b
commit e6fbcd4b89
4 changed files with 17 additions and 8 deletions

View File

@ -150,3 +150,5 @@ In cooperation with https://github.com/wgroeneveld/serve-my-jams
#### 5.1 `getWebmentions`
Calls the get webmention endpoint, sorts by date, adds metadata such as relative date (`x days ago`, property `publishedFromNow`), and returns data. Could be written in a `data` folder for Hugo to parse, for example.
Parameters: just one, the `domain`.

View File

@ -1,5 +1,4 @@
const serveMyJamDomain = "brainbaking.com"
const serveMyJamToken = "miauwkes"
const serveMyJamEndpoint = "https://jam.brainbaking.com"
@ -8,7 +7,5 @@ const serveMyJamEndpoint = "https://jam.brainbaking.com"
// don't care if token is visible, just an extra security-by-obscurity step, everything is public anyway
module.exports = {
serveMyJamEndpoint,
serveMyJamDomain,
serveMyJamToken
}

View File

@ -6,12 +6,13 @@ const dayjs = require('dayjs')
const relativeTime = require('dayjs/plugin/relativeTime')
dayjs.extend(relativeTime)
async function getWebmentions() {
const url = `${config.serveMyJamEndpoint}/webmention/${config.serveMyJamDomain}/${config.serveMyJamToken}`
async function getWebmentions(domain) {
const url = `${config.serveMyJamEndpoint}/webmention/${domain}/${config.serveMyJamToken}`
const result = await got(url)
result.body.json.forEach(mention => {
mention.publishedFromNow = dayjs(mention.published).fromNow()
mention.relativeTarget = mention.target.substring(mention.target.indexOf(domain) + domain.length, mention.target.length)
})
return result.body.json.sort((a, b) => dayjs(b.published).toDate() - dayjs(a.published).toDate())

View File

@ -5,15 +5,24 @@ const dayjs = require('dayjs')
describe("webmention receive serve-my-jam tests", () => {
const { getWebmentions } = require('./../../src/webmention/get')
const domain = "brainbaking.com"
MockDate.set(dayjs('2021-03-11T19:00:00').toDate())
test("getWebmentions fetches from serve-my-jam depending on config", async () => {
const result = await getWebmentions()
const result = await getWebmentions(domain)
expect(result.length).toBe(4)
})
test("getWebmentions enriches data with relatiave url", async () => {
const result = await getWebmentions(domain)
const mention = result[0]
expect(mention.relativeTarget).toEqual("/post/2021/02/my-retro-desktop-setup/")
expect(mention.target).toEqual("https://brainbaking.com/post/2021/02/my-retro-desktop-setup/")
})
test("getWebmentions enriches data with fromNow data", async () => {
const result = await getWebmentions()
const result = await getWebmentions(domain)
const mention = result[0]
expect(mention.published).toEqual("2021-03-08T18:35:24")
@ -21,7 +30,7 @@ describe("webmention receive serve-my-jam tests", () => {
})
test("getWebmentions are sorted by published date descending", async() => {
const result = await getWebmentions()
const result = await getWebmentions(domain)
expect(result[0].published).toEqual("2021-03-08T18:35:24")
expect(result[1].published).toEqual("2021-03-08T17:14:25")