UNPKG

angular-avoscloud

Version:

a avoscloud service module based on Angular.js and ngResource.

129 lines (112 loc) 3.65 kB
;(function(angular) { 'use strict'; if (!angular) throw new Error('avoscloud.init(); angular.js required.'); // Inject as a angular module angular .module('avoscloud', ['ngResource']) .constant('AVOSCLOUD_CONFIGS', initDefaultConfigs()) .provider('avoscloud', ['$httpProvider', 'AVOSCLOUD_CONFIGS', avoscloud]); function avoscloud($httpProvider, defautConfigs) { // Init configs this.configs = defautConfigs; // Use X-Domain to request cross domain $httpProvider.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With']; // Init SDK exports this.$get = ['$resource', function($resource) { return initSDK($resource, $httpProvider, this); }]; // Custom configs function this.config = function(configs) { if (!configs || !angular.isObject(configs)) return; var self = this; angular.forEach(configs, function(v, k) { self.configs[k] = v; }); this.configs = joinHost(this.configs); $httpProvider.defaults.headers.common['X-AVOSCloud-Application-Id'] = this.configs.appId ? this.configs.appId : this.configs['X-AVOSCloud-Application-Id']; $httpProvider.defaults.headers.common['X-AVOSCloud-Application-Key'] = this.configs.appKey ? this.configs.appKey : this.configs['X-AVOSCloud-Application-Key']; return this.configs; } } // init SDK function initSDK($resource, $httpProvider, self) { var apiMap = { 'login': 'login', 'signin': 'login', // alias 'push': 'push', 'sms': 'requestSmsCode', // alias 'msg': 'requestSmsCode', // alias 'rtm': 'rtm/messages/logs', 'functions': 'functions', 'feedback': 'feedback', 'requestPasswordReset': 'requestPasswordReset', 'resetPassword': 'requestPasswordReset', // alias 'requestEmailVerify': 'requestEmailVerify', 'verifyEmail': 'requestEmailVerify', // alias 'requestMobilePhoneVerify': 'requestMobilePhoneVerify', 'verifyPhone': 'requestMobilePhoneVerify', // alias 'requestLoginSmsCode': 'requestLoginSmsCode', 'smsLogin': 'requestLoginSmsCode', // alias 'requestSmsCode': 'requestSmsCode', 'verifyMobilePhone': 'verifyMobilePhone/:code', 'verifySmsCode': 'verifySmsCode/:code', 'classes': 'classes/:className/:objectId', 'users': 'users/:objectId/:action', 'roles': 'roles/:objectId', 'installations': 'installations/:objectId', 'stats': 'stats/:type', 'batch': 'batch' }; // create `$resource` instance var sdk = {}; angular.forEach(apiMap, function(endpoint, key) { var extraMethods = { 'post': { method: 'POST' }, 'update': { method: 'PUT' }, 'put': { method: 'PUT' } }; sdk[key] = $resource( self.configs.host + endpoint, null, extraMethods ); }); // shortcut method to set custom headers sdk.headers = function(k, v) { if (!k || !v) return; if (k === 'session' || k === 'sid') k = 'X-AVOSCloud-Session-Token'; $httpProvider.defaults.headers.common[k] = v; return $httpProvider.defaults.headers; }; return sdk; } function initDefaultConfigs() { return joinHost({ protocol: 'https', apiversion: 1.1, hostname: 'cn.avoscloud.com' }); } function joinHost(obj) { obj.host = obj.protocol + '://' + obj.hostname + '/' + obj.apiversion + '/'; return obj; } })(window.angular);