diff --git a/src/events/fetch-context/books-mf2.js b/src/events/fetch-context/books-mf2.js new file mode 100644 index 0000000..32e2f8c --- /dev/null +++ b/src/events/fetch-context/books-mf2.js @@ -0,0 +1,31 @@ +const fetch = require('node-fetch') +const logger = require('@architect/shared/logger') + +function name () { + return 'Books-MF2' +} + +function isBooksMf2Url (url) { + return (url.indexOf('https://books-mf2.herokuapp.com/') > -1) +} + +async function fetchContext (url) { + if (!isBooksMf2Url(url)) { + return + } + const response = await fetch(url) + if (!response.ok) { + const text = await response.text() + logger.warn('Failed to fetch context from Books-MF2', `${url}\n${text}`) + return + } + const mf2 = await response.json() + if (!('items' in mf2) || !mf2.items.length) return + return mf2.items[0].properties +} + +module.exports = { + name, + isBooksMf2Url, + fetchContext +} diff --git a/src/events/fetch-context/config.arc b/src/events/fetch-context/config.arc new file mode 100644 index 0000000..e2c787a --- /dev/null +++ b/src/events/fetch-context/config.arc @@ -0,0 +1,2 @@ +@aws +timeout 15 diff --git a/src/events/fetch-context/index.js b/src/events/fetch-context/index.js index 9933b3e..0845f45 100644 --- a/src/events/fetch-context/index.js +++ b/src/events/fetch-context/index.js @@ -1,5 +1,6 @@ const arc = require('@architect/functions') const logger = require('@architect/shared/logger') +const booksMf2 = require('./books-mf2') const eventbrite = require('./eventbrite') const granary = require('./granary') const meetup = require('./meetup') @@ -10,6 +11,8 @@ async function getHandler (url) { return meetup } else if (eventbrite.isEventbriteUrl(url)) { return eventbrite + } else if (booksMf2.isBooksMf2Url(url)) { + return booksMf2 } else { return granary }