bottender-facebook
Version:
Facebook connector for Bottender.
112 lines (86 loc) • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _warning = _interopRequireDefault(require("warning"));
var _bottender = require("bottender");
var _FacebookClient = _interopRequireDefault(require("./FacebookClient"));
var _FacebookContext = _interopRequireDefault(require("./FacebookContext"));
var _FacebookEvent = _interopRequireDefault(require("./FacebookEvent"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class FacebookConnector extends _bottender.MessengerConnector {
constructor({
accessToken,
appSecret,
client,
mapPageToAccessToken,
verifyToken,
batchConfig,
origin,
skipAppSecretProof,
skipProfile
}) {
const _client = client || _FacebookClient.default.connect({
accessToken: accessToken || '',
appSecret,
origin,
skipAppSecretProof
});
super({
accessToken,
appSecret,
client: _client,
mapPageToAccessToken,
verifyToken,
batchConfig,
origin,
skipAppSecretProof,
skipProfile
});
_defineProperty(this, "_client", this._client);
_defineProperty(this, "_appSecret", this._appSecret);
}
mapRequestToEvents(body) {
const rawEvents = this._getRawEventsFromRequest(body);
const isStandby = this._isStandby(body);
let pageIds = [];
if (body.object === 'page' && body.entry) {
pageIds = body.entry.map(ent => {
if (ent.messaging || ent.standby || ent.changes) {
return ent.id;
}
return null;
}).filter(event => event != null);
}
return rawEvents.map((event, index) => new _FacebookEvent.default(event, {
isStandby,
// pageId is from Facebook events (Page webhook),
// _getPageIdFromRawEvent() is from Messenger events
pageId: pageIds[index] || this._getPageIdFromRawEvent(event)
}));
}
async createContext(params) {
let customAccessToken;
if (this._mapPageToAccessToken) {
const {
pageId
} = params.event;
if (!pageId) {
(0, _warning.default)(false, 'Could not find pageId from request body.');
} else {
customAccessToken = await this._mapPageToAccessToken(pageId);
}
}
return new _FacebookContext.default(_objectSpread({}, params, {
client: this._client,
customAccessToken,
batchQueue: this._batchQueue,
appId: this._appId
}));
}
}
exports.default = FacebookConnector;