lcs-zalo-sdk
Version:
ZALO NodeJS sdk
407 lines (332 loc) • 12.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.version = exports.ZaloApiException = exports.ZaloSocial = exports.ZS = undefined;
var _getOwnPropertyDescriptor = require('babel-runtime/core-js/object/get-own-property-descriptor');
var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _symbol = require('babel-runtime/core-js/symbol');
var _symbol2 = _interopRequireDefault(_symbol);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _create = require('babel-runtime/core-js/object/create');
var _create2 = _interopRequireDefault(_create);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _desc, _value, _class;
var _request = require('request');
var _request2 = _interopRequireDefault(_request);
var _coreDecorators = require('core-decorators');
var _ZaloApiException = require('./ZaloApiException');
var _ZaloApiException2 = _interopRequireDefault(_ZaloApiException);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
var JSONbig = require('json-bigint')({ "storeAsString": true });
var _require = require('../package.json'),
version = _require.version,
METHODS = ['GET', 'POST', 'DELETE', 'PUT'],
_debug = false,
_logger = {
debug: function debug(message) {
if (_debug) console.log(message);
},
info: function info(message) {
console.log(message);
}
},
defaultOptions = (0, _assign2.default)((0, _create2.default)(null), {
Promise: _promise2.default,
accessToken: null,
appId: null,
appSecret: '',
version: 'v2.0',
timeout: null,
redirectUri: null,
proxy: null
}),
verifyOptionField = function verifyOptionField(key) {
var keys = (0, _keys2.default)(defaultOptions);
return keys.indexOf(key) != -1;
},
stringifyParams = function stringifyParams(params) {
var data = [];
if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) != 'object') return params;
for (var key in params) {
var value = params[key];
if (value && typeof value !== 'string') {
value = (0, _stringify2.default)(value);
}
if (value !== undefined) {
data.push([key, encodeURIComponent(value)].join('='));
}
}
return data.length > 0 ? '?' + data.join('&') : '';
},
postParamData = function postParamData(params) {
var data = {};
for (var key in params) {
var value = params[key];
if (value && (typeof value === 'undefined' ? 'undefined' : (0, _typeof3.default)(value)) === 'object') {
value = (0, _stringify2.default)(value);
}
if (value !== undefined) {
data[key] = value;
}
}
return data;
},
nodeifyCallback = function nodeifyCallback(callback) {
return function (res) {
if (!res || res.error) return callback(new _ZaloApiException2.default(res));
callback(null, res);
};
};
var _opts = (0, _symbol2.default)('opts');
var graph = (0, _symbol2.default)('graph');
var oauthRequest = (0, _symbol2.default)('oauthRequest');
var ZaloSocial = (_class = function () {
function ZaloSocial(opts, _internalInherit) {
(0, _classCallCheck3.default)(this, ZaloSocial);
_logger.debug('opts: ' + (0, _stringify2.default)(opts));
_logger.debug('_internalInherit: ' + _internalInherit);
if (_internalInherit instanceof ZaloSocial) {
this[_opts] = (0, _create2.default)(_internalInherit[_opts]);
} else {
this[_opts] = (0, _create2.default)(defaultOptions);
}
if ((typeof opts === 'undefined' ? 'undefined' : (0, _typeof3.default)(opts)) === 'object') {
this.options(opts);
}
}
(0, _createClass3.default)(ZaloSocial, [{
key: 'api',
value: function api() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var ret = void 0;
//Check params has callback function
if (args.length > 0 && typeof args[args.length - 1] !== 'function') {
var _Promise2 = this.options('Promise');
ret = new _Promise2(function (resolve, reject) {
args.push(function (res) {
if (!res || res.error) {
reject(new _ZaloApiException2.default(res));
} else {
resolve(res);
}
});
});
}
this[graph].apply(this, args);
return ret;
}
}, {
key: graph,
value: function value(path, next) {
var method, params, cb;
if (typeof path !== 'string') {
throw new Error('Path is of type ' + (typeof path === 'undefined' ? 'undefined' : (0, _typeof3.default)(path)) + ', not string');
}
for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
args[_key2 - 2] = arguments[_key2];
}
while (next) {
var type = typeof next === 'undefined' ? 'undefined' : (0, _typeof3.default)(next);
if (type === 'string' && !method) {
method = next.toUpperCase();
} else if (type === 'function' && !cb) {
cb = next;
} else if (type === 'object' && !params) {
params = next;
} else {
_logger.info('Invalid argument passed to ZaloSocial.api(): ' + next);
return;
}
next = args.shift();
}
method = method || 'GET';
params = params || {};
// remove prefix slash if one is given, as it's already in the base url
if (path[0] === '/') {
path = path.substr(1);
}
if (METHODS.indexOf(method) < 0) {
_logger.info('Invalid method passed to ZaloSocial.api(): ' + method);
return;
}
this[oauthRequest](path, method, params, cb);
}
}, {
key: oauthRequest,
value: function value(path, method, params, cb) {
var url, requestOptions, formOptions;
cb = cb || function () {};
url = 'https://graph.zalo.me/' + this.options('version') + '/' + path;
if (!params.access_token) params.access_token = this.options('accessToken');
if (method == 'POST') {
formOptions = postParamData(params);
} else {
url += stringifyParams(params);
}
requestOptions = {
method: method,
url: url,
form: formOptions,
headers: {}
};
if (this.options('proxy')) {
requestOptions['proxy'] = this.options('proxy');
}
if (this.options('timeout')) {
requestOptions['timeout'] = this.options('timeout');
}
if (this.options('userAgent')) {
requestOptions['headers'] = {
'User-Agent': this.options('userAgent')
};
}
requestOptions['headers']['SDK-Source'] = ['NodeSDK', version].join('-');
_logger.debug('Request Options ' + (0, _stringify2.default)(requestOptions));
(0, _request2.default)(requestOptions, function (error, response, body) {
if (error !== null) return cb(error);
var json = void 0;
try {
json = JSONbig.parse(body);
} catch (ex) {
json = {
error: {
code: 'JSONPARSE',
Error: ex
}
};
}
cb(json);
});
}
}, {
key: 'getAccessToken',
value: function getAccessToken() {
return this.options('accessToken');
}
}, {
key: 'getAccessTokenByOauthCode',
value: function getAccessTokenByOauthCode(oauthCode, cb) {
var appId = this.options('appId');
var appSecret = this.options('appSecret');
if (!oauthCode) {
throw new Error('Oauth code required');
}
if (!appId) {
throw new Error('appId required');
}
if (!appSecret) {
throw new Error('appSecret required');
}
if (cb == null || typeof cb !== 'function') {
cb = function cb(res) {
if (res != null && res.access_token) {
this.options({ accessToken: res.access_token });
}
};
}
var url = 'https://oauth.zaloapp.com/v3/access_token?app_id=' + appId + '&app_secret=' + this.options('appSecret') + '&code=' + oauthCode;
var requestOptions = {
url: url,
method: 'GET',
headers: {
'SDK-Source': ['NodeSDK', version].join('-')
}
};
(0, _request2.default)(requestOptions, function (error, response, body) {
if (error !== null) return cb(error);
var json = void 0;
try {
json = JSONbig.parse(body);
} catch (ex) {
json = {
error: {
code: 'JSONPARSE',
Error: ex
}
};
}
cb(json);
});
}
}, {
key: 'setAccessToken',
value: function setAccessToken(accessToken) {
this.options({ accessToken: accessToken });
}
}, {
key: 'getLoginUrl',
value: function getLoginUrl() {
var opt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var appId = opt.appId || this.options('appId');
var redirectUri = opt.redirectUri || this.options('redirectUri');
if (!appId) {
throw new Error('appId required');
}
if (!redirectUri) {
throw new Error('redirectUri required');
}
return 'https://oauth.zaloapp.com/v3/auth?app_id=' + appId + '&redirect_uri=' + encodeURIComponent(redirectUri);
}
}, {
key: 'options',
value: function options(keyOrOptions) {
var opt = this[_opts];
if (!keyOrOptions) return opt;
if (typeof keyOrOptions == 'string' && verifyOptionField(keyOrOptions)) {
return opt[keyOrOptions];
}
if (keyOrOptions && (typeof keyOrOptions === 'undefined' ? 'undefined' : (0, _typeof3.default)(keyOrOptions)) == 'object') {
var keys = (0, _keys2.default)(keyOrOptions);
for (var k in opt) {
if (verifyOptionField(k) && keys.indexOf(k) != -1) {
opt[k] = keyOrOptions[k];
}
}
}
}
}]);
return ZaloSocial;
}(), (_applyDecoratedDescriptor(_class.prototype, 'api', [_coreDecorators.autobind], (0, _getOwnPropertyDescriptor2.default)(_class.prototype, 'api'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'getAccessToken', [_coreDecorators.autobind], (0, _getOwnPropertyDescriptor2.default)(_class.prototype, 'getAccessToken'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'getAccessTokenByOauthCode', [_coreDecorators.autobind], (0, _getOwnPropertyDescriptor2.default)(_class.prototype, 'getAccessTokenByOauthCode'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'setAccessToken', [_coreDecorators.autobind], (0, _getOwnPropertyDescriptor2.default)(_class.prototype, 'setAccessToken'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'getLoginUrl', [_coreDecorators.autobind], (0, _getOwnPropertyDescriptor2.default)(_class.prototype, 'getLoginUrl'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'options', [_coreDecorators.autobind], (0, _getOwnPropertyDescriptor2.default)(_class.prototype, 'options'), _class.prototype)), _class);
var ZS = exports.ZS = new ZaloSocial();
exports.default = ZS;
exports.ZaloSocial = ZaloSocial;
exports.ZaloApiException = _ZaloApiException2.default;
exports.version = version;