-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.js
More file actions
67 lines (60 loc) 路 2.16 KB
/
Copy pathindex.js
File metadata and controls
67 lines (60 loc) 路 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const _ = {
get: require('lodash.get'),
set: require('lodash.set'),
isString: require('lodash.isstring')
}
/**
* sets the receiving page's Page Access Token.
*
* This is for your convenience so that you can use your bot from different
* Facebook pages.
*
* It sets `context.messenger.recipient.pageAccessToken` to the [Page Access
* Token]
* (https://developers.facebook.com/docs/messenger-platform/guides/quick-start#get_page_access_token)
* of the page specified in `context.messenger.pageId`
*
* @param {Object|String} pageAccessTokens an object with page ids as
* property names and their respective Page Access
* values token as values or a string that will always
* be used
* @return {function} a middleware function to be used with
* `messenger-core`
*/
module.exports = PageAccessTokens
function PageAccessTokens(pageAccessTokens) {
const getToken =
!pageAccessTokens || _.isString(pageAccessTokens)
? pageAccessTokenFunctionFromString(pageAccessTokens)
: pageAccessTokenFromHash
return async function(message, context) {
const pageAccessToken = getToken(message, context)
if (!pageAccessToken) {
const pageId = getPageId(message, context)
if (context.log)
context.log.warn({ pageId }, 'no page access token found for page')
}
_.set(context, 'messenger.recipient.pageAccessToken', pageAccessToken)
}
function pageAccessTokenFunctionFromString(pageAccessToken) {
pageAccessToken = pageAccessToken || 'MESSENGER_PAGE_ACCESS_TOKEN'
if (/^[a-z0-9_]{1,64}$/i.test(pageAccessToken)) {
pageAccessToken = process.env[pageAccessToken]
}
return function() {
return pageAccessToken
}
}
function pageAccessTokenFromHash(message, context) {
const pageId = getPageId(message, context)
const pageAccessToken = _.get(pageAccessTokens, pageId)
return pageAccessToken
}
function getPageId(message, context) {
return (
_.get(context, 'messenger.pageId') ||
_.get(context, 'messenger.recipient.id') ||
_.get(message, 'recipient.id')
)
}
}