Commit dca3f820 authored by Ben Hsieh's avatar Ben Hsieh
Browse files

anue-fe-sdk publish commit v0.1.0-alpha-2

parents
{
"name": "anue-fe-sdk",
"version": "0.1.0",
"description": "Anue SDK for developers",
"types": "./types",
"scripts": {
"start": "tsc -w -p ./",
"debug": "sh scripts/debug.sh",
"sandbox:dev-server": "node sandbox/server.bundle.js",
"build:sandbox-ssr": "webpack --config webpack.sandbox-server.js",
"build:sandbox": "webpack --config webpack.sandbox.js",
"sandbox:watch-ssr": "webpack --watch --config webpack.sandbox-server.js",
"sandbox:watch-source": "webpack --watch --config webpack.sandbox.js",
"sandbox:watch-ts": "webpack --watch",
"build": "webpack",
"watch": "webpack --watch",
"size": "webpack --mode production && size-limit",
"analyze": "ANALYZE=true webpack --mode production",
"test": "jest test --coverage",
"lint": "tslint --project ./src",
"test:snapshot": "jest test -u"
},
"keywords": [
"anue",
"sdk"
],
"engines": {
"node": ">=8.0.0",
"yarn": "1.10.1"
},
"author": "anue-fe",
"license": "MIT",
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"post-commit": "node scripts/publish.js"
}
},
"lint-staged": {
"./src/**/*.{ts,tsx}": [
"jest --findRelatedTests --listTests",
"prettier --write --single-quote",
"tslint",
"git add"
]
},
"size-limit": [
{
"limit": "3 KB",
"path": "build/Auth.js"
},
{
"limit": "3 KB",
"path": "build/index.js"
},
{
"limit": "3 KB",
"path": "build/react-native-preset.js"
},
{
"limit": "3 KB",
"path": "build/web-preset.js"
}
],
"devDependencies": {
"@babel/core": "7.2.0",
"@babel/plugin-proposal-class-properties": "7.2.1",
"@babel/preset-env": "7.2.0",
"@babel/preset-react": "7.0.0",
"@types/chalk": "2.2.0",
"@types/copy-webpack-plugin": "4.4.2",
"@types/express": "4.16.0",
"@types/jest": "23.3.10",
"@types/node": "10.12.12",
"@types/prettier": "1.15.2",
"@types/react": "16.7.17",
"@types/react-json-tree": "0.6.8",
"@types/typescript": "2.0.0",
"@types/webpack": "4.4.20",
"@types/webpack-bundle-analyzer": "2.13.0",
"@types/webpack-node-externals": "1.6.3",
"babel-loader": "8.0.4",
"chalk": "2.4.1",
"concurrently": "4.1.0",
"copy-webpack-plugin": "4.6.0",
"express": "4.16.4",
"husky": "1.2.0",
"jest": "23.6.0",
"lint-staged": "8.1.0",
"prettier": "1.15.3",
"react": "16.6.3",
"react-dom": "16.6.3",
"react-dom-server": "0.0.5",
"react-json-tree": "0.11.0",
"size-limit": "0.21.0",
"ts-jest": "23.10.5",
"ts-loader": "5.3.1",
"tsconfig-paths-webpack-plugin": "3.2.0",
"tslint": "5.11.0",
"typescript": "3.2.1",
"uglifyjs-webpack-plugin": "2.0.1",
"webpack": "4.27.1",
"webpack-bundle-analyzer": "3.0.3",
"webpack-cli": "3.1.2",
"webpack-isomorphic-tools": "3.0.6",
"webpack-node-externals": "1.7.2"
}
}
/**
* @doc
* @anue-package Anue.API.Email
* 和電子郵件認證相關的API實作與集合,使用方式
*
* ```Javascript
* import 'anue-fe-sdk'
* import 'anue-fe-sdk/web-preset'
* import Email from 'anue-fe-sdk/API/Email'
*
* // ...
*
* ```
*/
declare const _default: {
verifyActivationCode: (checkCode: string) => Promise<boolean>;
register: (name: string, email: string, password: string, channel: string) => Promise<number>;
};
export default _default;
import Debuggable from '@libraries/Debuggable';
declare class TOS extends Debuggable {
/**
* @doc
* @public
* @method getAllTOS
* @promise
* @returns APIResponse.v1.User.TOS.All
* 單純顯示 ToS,無須登入
*/
getAllTOS: (service?: string) => Promise<APIResponse.v1.User.TOS.All>;
/**
* @doc
* @public
* @method updateTOS
* @promise
* @returns APIResponse.v1.User.TOS
* 使用則接受 ToS
*/
updateTOS: (platform?: string, services?: string) => Promise<APIResponse.v1.User.TOS>;
/**
* @doc
* @public
* @method checkUserTOS
* @promise
* @returns APIResponse.v1.User.TOS.User
* 使用者登入後,檢查 ToS 狀態
*/
checkUserTOS: (service?: string) => Promise<APIResponse.v1.User.TOS.User>;
}
export default TOS;
export {};
/**
* @doc
* @anue-package Anue.API
* API函數集合
*/
import TOS from './TOS';
import Email from './Email';
export { TOS, Email };
export {};
/**
* @anue-package Anue.Auth
* @doc
* Auth模組負責管理Token的交換、管理、刷新等環節。目前的架構上,由於使用者痛
* 一使用[Cognito](https://aws.amazon.com/tw/cognito/)進行統一的身份識別因此不論是透過第三方的身份或是我們自己的
* 認證機制(如Email)最後都得再透過API來取得Cognito ID和authorization token。
*
* ## 範例 (Social與Email登入)
*
* ```Javascript
* import 'anue-fe-sdk'
* import 'anue-fe-sdk/web-preset'
* import Auth from 'anue-fe-sdk/Auth'
* import GoogleWebProvider from 'anue-fe-sdk/GoogleWebProvider'
* import FBWebProvider from 'anue-fe-sdk/FBWebProvider'
* import EmailProvider from 'anue-fe-sdk/EmailProvider'
* import { TOS } from 'anue-fe-sdk/APIs'
* import Constants from 'anue-fe-sdk/Constants
*
* const providers = {
* google: new GoogleWebProvider({ apiKey, appId }),
* fb: new FBWebProvider({ clientId }),
* email: new EmailProvider()
* }
*
*
* const auth = new Auth()
* // optional
* .channel(Constants.SupportedChannel.Stock)
*
* for(const p of providers) {
* auth.connectProvider(p)
* }
*
* async function example() {
*
* // social login
* await providers.google.login()
* // email login
* await providers.email.data({
* name, password, email
* }).login()
*
* // API call
* const tos = await TOS.getAllTOS()
*
* // logout via provider
* await providers.google.logout()
* // or via auth
* auth.clearCredentials()
*
* }
*
*
* ```
*/
import AbstractProvider from '@packages/Provider/AbstractProvider.abstract';
import Debuggable from '@libraries/Debuggable';
import { SupportedChannel } from '@constants/Keys';
import Eventy, { EventyHandler } from '@utils/eventy';
declare class Auth extends Debuggable {
private mHost;
private mChannel;
private mIdToken;
private mAccessToken;
private mCognitoId;
private mAuthorization;
private mIsNewComer;
private removeRequestInspector;
private removeResponseInspector;
private mConnectedProviders;
private mProviderInitialPromise;
event: Eventy;
constructor(config?: Anue.Auth.Config);
host: (host: string) => Auth;
channel: (channel: SupportedChannel) => Auth;
ready: () => Promise<Anue.Auth.Credentials>;
accessToken: (token: string) => Auth;
onStateChange: (fn: EventyHandler<Anue.Auth.StateChangeEvent>) => this;
/**
* @doc
* @method restore
* @public
* @promise
* 讀取Storage中儲存的認證資訊恢復認證的狀態,回傳一個`Promise`物件其返回值表示
* 是否成功恢復認證資訊。
*/
restore: () => Promise<boolean>;
/**
* @doc
* @method portal
* @public
*/
portal: () => void;
/**
* @doc
* @private
* @method requestNetworkInspector
* >! 這個方法不為外部所引用
* 這個方法會在認證步驟`renew`或者`consume`完成之後自動由`Auth`添加至`Network`的
* `requestInspector`佇列之中,此後每當有任何請求時`authorization`會被自動加入在
* 請求的header中。
*/
private requestNetworkInspector;
private getStorageKey;
/**
* @doc
* @private
* @method responseNetworkInspector
* >! 這個方法不為外部所引用
* 這個方法會在認證步驟`renew`或者`consume`完成之後自動由`Auth`添加至`Network`的
* `responseInspector`佇列之中,之後當請求回應狀態代碼為`401`時,這個方法會自動呼叫
* [Auth.renew](#renew)並且試著將原本的請求**重送**。
*/
private responseNetworkInspector;
/**
* @doc
* @method getInitialURL
* @private
* 這個方法會依照當前的環境返回預設的登入驗證伺服器URL,在一般瀏覽器的環境下
* 會返回當前的`hostname`作為預設的host來發出登入等相關的API
* 在`React Native`或者是`NodeJS`這類的環境下預設會產生一個**空字串**
*/
private static getInitialURL;
/**
* @doc
* @public
* @promise
* @method consume
* @param args 包含第三方認證資訊的物件 [fn:expand_fragment](ProviderToken:type-ProviderToken)
*
* consume方法負責將第三方token即`args.accessToken`在後端認正之後轉換為可以
* 調用我們內部API的token(即Auth.authorization)。
*
* 需注意的要點:
* >! 在提供者為Google時候必須將`idToken`欄位一併帶入
* >! 如果`idType`為`email`則args.accessToken為{ name, email, password }之JSON字串
*
*
* #### Consume Social Provider
*
* ```Javascript
* import Auth 'anue-fe-sdk/Auth'
* const auth = new Auth()
*
* const credentials = await auth.consume({
* idToken,
* accessToken,
* })
* ```
*
* #### Consume Email Provider
*
* * ```Javascript
* import Auth 'anue-fe-sdk/Auth'
* const auth = new Auth()
*
* const form = {
* name: 'foo',
* email: 'bar@anuegroup.com.tw',
* password: '1234567'
* }
*
* const credentials = await auth.consume({
* accessToken: JSON.stringify(form)
* })
* ```
*
*/
consume: (args: Anue.Auth.ProviderToken) => Promise<Anue.Auth.Credentials | null>;
/**
* @doc
* @public
* @promise
* @method renew
* @returns Anue.Auth.Credentials | null
* 使用目前所儲存的使用者資訊來刷新`authorization` (呼叫我們自己提供的API時使用的token)
* 對於`Email`來說這個行為等同於`登入`。
*/
renew: () => Promise<Anue.Auth.Credentials | null>;
private renewRequest;
private setCredentials;
private syncProviderToken;
/**
* @doc
* @name connectProvider
* @param provider AbstractProvider 一個[Provider](->Anue.AbstractProvider)物件
* 將這個provider物件的狀態同步連結到當前的Auth實體,這個行為會將[auth.consume](#consume)與該
* provider之[login](->Anue.AbstractProvder#login)與[logout](->Anue.AbstractProvder#logout)方法進行連結。
*/
connectProvider: (...providers: AbstractProvider[]) => Auth;
/**
* @doc
* @method clearCredentials
* 清除所有儲存的認證資訊,等同於`logout`。當這個Auth物件有使用[connectProvider](->Anue.Auth#connectProvider)
* 連結其他[Provider](->Anue.AbstractProvider)這個方法會在連結的Provider呼叫`logout`時一併被呼叫。
*/
clearCredentials: () => void;
logout: () => void;
/**
* Get last stored credential context object
*/
getCredentialContext: () => Anue.Auth.Credentials | null;
}
export default Auth;
export declare type ProviderResponse = Anue.Provider.NullableResponse;
export declare type ChangeHandler = Anue.Provider.ChangeHandler;
export default abstract class AbstractProvider {
protected mStateChangeHandles: ChangeHandler[];
protected mContext: Anue.Provider.Response | null;
private mEvent;
private mLoginPromise;
abstract loginImpl(): Promise<ProviderResponse | null>;
abstract logoutImpl(): Promise<boolean>;
abstract getName(): string;
abstract getType(): Anue.Auth.SupportedProviderType;
abstract refresh(): Promise<ProviderResponse>;
abstract initImpl(): Promise<AbstractProvider>;
abstract getContext(): ProviderResponse | null;
init: () => Promise<AbstractProvider>;
isLoggedIn: () => boolean;
onLogin: (fn: any) => this;
onLogout: (fn: any) => this;
login: () => Promise<Anue.Provider.NullableResponse>;
logout: () => Promise<boolean>;
onLoginStateChange: (fn: Anue.Provider.ChangeHandler) => AbstractProvider;
}
import AbstractProvider from './AbstractProvider.abstract';
export interface IMailAndPassword {
email: string;
password: string;
}
export default class AnueMailProvider extends AbstractProvider {
private mData;
data: (email: string, password: string) => this;
loginImpl: () => Promise<Anue.Provider.NullableResponse>;
logoutImpl: () => Promise<boolean>;
getName: () => string;
getType: () => import("../../constants/Keys").SupportedProviderType;
refresh: () => Promise<Anue.Provider.NullableResponse>;
initImpl: () => Promise<AbstractProvider>;
getContext(): Anue.Provider.NullableResponse;
}
import AbstractProvider from './AbstractProvider.abstract';
export default class FacebookWebProvider extends AbstractProvider {
private mAuth;
private scriptImported;
private mAppId;
constructor(config: {
appId: string;
});
private transform;
private handleStateChange;
loginImpl: () => Promise<Anue.Provider.NullableResponse>;
logoutImpl: () => Promise<boolean>;
getName: () => string;
getType: () => import("../../constants/Keys").SupportedProviderType;
refresh(): Promise<Anue.Provider.NullableResponse>;
initImpl: () => Promise<AbstractProvider>;
getContext(): Anue.Provider.NullableResponse;
}
import AbstractProvider from './AbstractProvider.abstract';
export default class GoogleProvider extends AbstractProvider {
private mIsScriptLoaded;
private loginPromises;
private logoutPromises;
private mAuth;
private mAppId;
private mApiKey;
constructor(config: {
appId: string;
apiKey: string;
});
private getCurrentUser;
getName: () => string;
getType: () => import("../../constants/Keys").SupportedProviderType;
getContext: () => Anue.Provider.NullableResponse;
refresh: () => Promise<Anue.Provider.Response>;
private populatePromises;
handleLoginState: (loggedIn: boolean) => void;
initImpl: () => Promise<AbstractProvider>;
logoutImpl: () => Promise<boolean>;
loginImpl: () => Promise<Anue.Provider.NullableResponse>;
}
import StorageAbstract from '@libraries/Storage/Storage.abstract';
export default class LocalStorageDriver extends StorageAbstract {
removeItemImpl: (key: any) => Promise<boolean>;
setItemImpl: (key: string, value: any) => Promise<boolean>;
getItemImpl: (key: string) => Promise<string>;
}
import AbstractNetworkInterface from '@libraries/Network/Network.abstract';
export declare enum ContentTypeEnum {
JSON = 0,
BLOB = 1,
TEXT = 2,
UNKNOWN = 3
}
export default class FetchNetworkDriver extends AbstractNetworkInterface {
private static getContentType;
/**
* Send a request and resolves the response, this only throws error
* when things going wrong with network connection.
* otherwise it resolves an Anue.Response object with status code,
* body and other information.
* @param options Request options like url, method, headers, and body
*/
request: <T = any>(options: Anue.Network.RequestOptions) => Promise<T>;
}
import * as Storage from '@libraries/Storage';
import * as Network from '@libraries/Storage';
export { Storage, Network };
import AbstractNetworkInterface from '@libraries/Network/Network.abstract';
export declare enum ContentTypeEnum {
JSON = 0,
BLOB = 1,
TEXT = 2,
UNKNOWN = 3
}
declare class FetchNetworkDriver extends AbstractNetworkInterface {
private static getContentType;
/**
* Send a request and resolves the response, this only throws error
* when things going wrong with network connection.
* otherwise it resolves an Anue.Response object with status code,
* body and other information.
* @param options Request options like url, method, headers, and body
*/
request: <T = any>(options: Anue.Network.RequestOptions) => Promise<T>;
}
declare class FetchNotSupportedDriver extends AbstractNetworkInterface {
protected request: <T = any>(options: Anue.Network.RequestOptions) => Promise<T>;
}
declare const _default: typeof FetchNotSupportedDriver | typeof FetchNetworkDriver;
export default _default;
import StorageAbstract from '@libraries/Storage/Storage.abstract';
declare class LocalStorageDriver extends StorageAbstract {
removeItemImpl: (key: any) => Promise<boolean>;
setItemImpl: (key: string, value: any) => Promise<boolean>;
getItemImpl: (key: string) => Promise<string>;
}
declare class LocalStorageNotSupportedDriver extends StorageAbstract {
protected setItemImpl: (key: string | number, value: any) => Promise<boolean>;
protected getItemImpl: (key: string | number) => Promise<string>;
protected removeItemImpl: (key: string | number) => Promise<boolean>;
}
declare const _default: typeof LocalStorageNotSupportedDriver | typeof LocalStorageDriver;
export default _default;
import * as Storage from '@libraries/Storage';
import * as Network from '@libraries/Network';
export { Storage, Network };
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("react-native-preset", [], factory);
else if(typeof exports === 'object')
exports["react-native-preset"] = factory();
else
root["anue-fe-sdk"] = root["anue-fe-sdk"] || {}, root["anue-fe-sdk"]["react-native-preset"] = factory();
})((typeof window === 'undefined' ? global : window), function() {
return ((typeof window === 'undefined' ? global : window)["webpackJsonp"] = (typeof window === 'undefined' ? global : window)["webpackJsonp"] || []).push([["react-native-preset"],{
/***/ "./src/presets/react-native/AsyncStorageDriver.ts":
/*!********************************************************!*\
!*** ./src/presets/react-native/AsyncStorageDriver.ts ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _libraries_Storage_Storage_abstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libraries/Storage/Storage.abstract */ "./src/libraries/Storage/Storage.abstract.ts");
var __extends = (undefined && undefined.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
if (typeof localStorage === 'undefined') {
console.warn("LocalStorageDriver is not supported in this environment, try use other drivers.");
}
var LocalStorageDriver = /** @class */ (function (_super) {
__extends(LocalStorageDriver, _super);
function LocalStorageDriver() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.removeItemImpl = function (key) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
delete localStorage[key];
return [4 /*yield*/, true];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); };
_this.setItemImpl = function (key, value) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
localStorage[key] = value;
return [4 /*yield*/, true];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); };
_this.getItemImpl = function (key) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, localStorage[key]];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); };
return _this;
}
return LocalStorageDriver;
}(_libraries_Storage_Storage_abstract__WEBPACK_IMPORTED_MODULE_0__["default"]));
/* harmony default export */ __webpack_exports__["default"] = (LocalStorageDriver);
/***/ }),
/***/ "./src/presets/react-native/FetchNetworkDriver.ts":
/*!********************************************************!*\
!*** ./src/presets/react-native/FetchNetworkDriver.ts ***!
\********************************************************/
/*! exports provided: ContentTypeEnum, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentTypeEnum", function() { return ContentTypeEnum; });
/* harmony import */ var _libraries_Network_Network_abstract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libraries/Network/Network.abstract */ "./src/libraries/Network/Network.abstract.ts");
var __extends = (undefined && undefined.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var ContentTypeEnum;
(function (ContentTypeEnum) {
ContentTypeEnum[ContentTypeEnum["JSON"] = 0] = "JSON";
ContentTypeEnum[ContentTypeEnum["BLOB"] = 1] = "BLOB";
ContentTypeEnum[ContentTypeEnum["TEXT"] = 2] = "TEXT";
ContentTypeEnum[ContentTypeEnum["UNKNOWN"] = 3] = "UNKNOWN";
})(ContentTypeEnum || (ContentTypeEnum = {}));
var FetchNetworkDriver = /** @class */ (function (_super) {
__extends(FetchNetworkDriver, _super);
function FetchNetworkDriver() {
var _this = _super !== null && _super.apply(this, arguments) || this;
/**
* Send a request and resolves the response, this only throws error
* when things going wrong with network connection.
* otherwise it resolves an Anue.Response object with status code,
* body and other information.
* @param options Request options like url, method, headers, and body
*/
_this.request = function (options) { return __awaiter(_this, void 0, void 0, function () {
var res, mime, contentType, body, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, fetch(options.url, {
method: options.method,
headers: options.headers,
body: options.body
})];
case 1:
res = _b.sent();
mime = res.headers.get('content-type') || null;
contentType = FetchNetworkDriver.getContentType(mime);
body = null;
_a = contentType;
switch (_a) {
case ContentTypeEnum.BLOB: return [3 /*break*/, 2];
case ContentTypeEnum.JSON: return [3 /*break*/, 4];
}
return [3 /*break*/, 6];
case 2: return [4 /*yield*/, res.blob()];
case 3:
body = _b.sent();
return [3 /*break*/, 8];
case 4: return [4 /*yield*/, res.json()];
case 5:
body = _b.sent();
return [3 /*break*/, 8];
case 6: return [4 /*yield*/, res.text()];
case 7:
body = _b.sent();
return [3 /*break*/, 8];
case 8: return [4 /*yield*/, body];
case 9: return [2 /*return*/, _b.sent()];
}
});
}); };
return _this;
}
FetchNetworkDriver.getContentType = function (mime) {
if (typeof mime !== 'string')
return ContentTypeEnum.UNKNOWN;
if (mime.includes('application/json'))
return ContentTypeEnum.JSON;
else if (mime.includes('text/'))
return ContentTypeEnum.TEXT;
else if (mime.includes('audio') ||
mime.includes('video') ||
mime.includes('image') ||
mime.includes('application/octet'))
return ContentTypeEnum.BLOB;
return ContentTypeEnum.UNKNOWN;
};
return FetchNetworkDriver;
}(_libraries_Network_Network_abstract__WEBPACK_IMPORTED_MODULE_0__["default"]));
/* harmony default export */ __webpack_exports__["default"] = (FetchNetworkDriver);
/***/ }),
/***/ "./src/presets/react-native/index.ts":
/*!*******************************************!*\
!*** ./src/presets/react-native/index.ts ***!
\*******************************************/
/*! exports provided: Storage, Network */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _libraries_Storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @libraries/Storage */ "./src/libraries/Storage/index.ts");
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Storage", function() { return _libraries_Storage__WEBPACK_IMPORTED_MODULE_0__; });
/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "Network", function() { return _libraries_Storage__WEBPACK_IMPORTED_MODULE_0__; });
/* harmony import */ var _constants_Keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @constants/Keys */ "./src/constants/Keys.ts");
/* harmony import */ var _libraries_SharedContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @libraries/SharedContext */ "./src/libraries/SharedContext/index.ts");
/* harmony import */ var _FetchNetworkDriver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FetchNetworkDriver */ "./src/presets/react-native/FetchNetworkDriver.ts");
/* harmony import */ var _AsyncStorageDriver__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AsyncStorageDriver */ "./src/presets/react-native/AsyncStorageDriver.ts");
_libraries_SharedContext__WEBPACK_IMPORTED_MODULE_2__["default"].set(_constants_Keys__WEBPACK_IMPORTED_MODULE_1__["default"].Storage.Driver, new _AsyncStorageDriver__WEBPACK_IMPORTED_MODULE_4__["default"]());
_libraries_SharedContext__WEBPACK_IMPORTED_MODULE_2__["default"].set(_constants_Keys__WEBPACK_IMPORTED_MODULE_1__["default"].Network.Driver, new _FetchNetworkDriver__WEBPACK_IMPORTED_MODULE_3__["default"]());
/***/ })
},[["./src/presets/react-native/index.ts","runtime","common"]]]);
});
//# sourceMappingURL=react-native-preset.js.map
\ No newline at end of file
{"version":3,"sources":["webpack://anue-fe-sdk.[name]/webpack/universalModuleDefinition","webpack://anue-fe-sdk.[name]/./src/presets/react-native/AsyncStorageDriver.ts","webpack://anue-fe-sdk.[name]/./src/presets/react-native/FetchNetworkDriver.ts","webpack://anue-fe-sdk.[name]/./src/presets/react-native/index.ts"],"names":[],"mappings":"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","file":"react-native-preset.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"react-native-preset\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"react-native-preset\"] = factory();\n\telse\n\t\troot[\"anue-fe-sdk\"] = root[\"anue-fe-sdk\"] || {}, root[\"anue-fe-sdk\"][\"react-native-preset\"] = factory();\n})((typeof window === 'undefined' ? global : window), function() {\nreturn ","import StorageAbstract from '@libraries/Storage/Storage.abstract';\n\nif (typeof localStorage === 'undefined') {\n console.warn(\n `LocalStorageDriver is not supported in this environment, try use other drivers.`\n );\n}\n\nexport default class LocalStorageDriver extends StorageAbstract {\n removeItemImpl = async (key): Promise<boolean> => {\n delete localStorage[key];\n return await true;\n };\n\n setItemImpl = async (key: string, value: any): Promise<boolean> => {\n localStorage[key] = value;\n return await true;\n };\n\n getItemImpl = async (key: string): Promise<string> => {\n return await localStorage[key];\n };\n}\n","import AbstractNetworkInterface from '@libraries/Network/Network.abstract';\n\nexport enum ContentTypeEnum {\n JSON,\n BLOB,\n TEXT,\n UNKNOWN\n}\n\nexport default class FetchNetworkDriver extends AbstractNetworkInterface {\n private static getContentType = (mime: string | null): ContentTypeEnum => {\n if (typeof mime !== 'string') return ContentTypeEnum.UNKNOWN;\n\n if (mime.includes('application/json')) return ContentTypeEnum.JSON;\n else if (mime.includes('text/')) return ContentTypeEnum.TEXT;\n else if (\n mime.includes('audio') ||\n mime.includes('video') ||\n mime.includes('image') ||\n mime.includes('application/octet')\n )\n return ContentTypeEnum.BLOB;\n return ContentTypeEnum.UNKNOWN;\n };\n\n /**\n * Send a request and resolves the response, this only throws error\n * when things going wrong with network connection.\n * otherwise it resolves an Anue.Response object with status code,\n * body and other information.\n * @param options Request options like url, method, headers, and body\n */\n request = async <T = any>(\n options: Anue.Network.RequestOptions\n ): Promise<T> => {\n const res: Response = await fetch(options.url, {\n method: options.method,\n headers: options.headers,\n body: options.body\n });\n\n const mime = res.headers.get('content-type') || null;\n const contentType = FetchNetworkDriver.getContentType(mime);\n let body: any = null;\n\n switch (contentType) {\n case ContentTypeEnum.BLOB:\n body = await res.blob();\n break;\n case ContentTypeEnum.JSON:\n body = await res.json();\n break;\n default:\n body = await res.text();\n break;\n }\n\n return await body;\n };\n}\n","import * as Storage from '@libraries/Storage';\nimport * as Network from '@libraries/Storage';\nimport Keys from '@constants/Keys';\nimport SharedContext from '@libraries/SharedContext';\nimport FetchNetworkDriver from './FetchNetworkDriver';\nimport AsyncStorageDriver from './AsyncStorageDriver';\n\nSharedContext.set(Keys.Storage.Driver, new AsyncStorageDriver());\nSharedContext.set(Keys.Network.Driver, new FetchNetworkDriver());\n\nexport { Storage, Network };\n"],"sourceRoot":""}
\ No newline at end of file
/******/ (function(modules) { // webpackBootstrap
/******/ // install a JSONP callback for chunk loading
/******/ function webpackJsonpCallback(data) {
/******/ var chunkIds = data[0];
/******/ var moreModules = data[1];
/******/ var executeModules = data[2];
/******/
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0, resolves = [];
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(installedChunks[chunkId]) {
/******/ resolves.push(installedChunks[chunkId][0]);
/******/ }
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ for(moduleId in moreModules) {
/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ modules[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/ while(resolves.length) {
/******/ resolves.shift()();
/******/ }
/******/
/******/ // add entry modules from loaded chunk to deferred list
/******/ deferredModules.push.apply(deferredModules, executeModules || []);
/******/
/******/ // run deferred modules when all chunks ready
/******/ return checkDeferredModules();
/******/ };
/******/ function checkDeferredModules() {
/******/ var result;
/******/ for(var i = 0; i < deferredModules.length; i++) {
/******/ var deferredModule = deferredModules[i];
/******/ var fulfilled = true;
/******/ for(var j = 1; j < deferredModule.length; j++) {
/******/ var depId = deferredModule[j];
/******/ if(installedChunks[depId] !== 0) fulfilled = false;
/******/ }
/******/ if(fulfilled) {
/******/ deferredModules.splice(i--, 1);
/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
/******/ }
/******/ }
/******/ return result;
/******/ }
/******/
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // Promise = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ "runtime": 0
/******/ };
/******/
/******/ var deferredModules = [];
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ var jsonpArray = (typeof window === 'undefined' ? global : window)["webpackJsonp"] = (typeof window === 'undefined' ? global : window)["webpackJsonp"] || [];
/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
/******/ jsonpArray.push = webpackJsonpCallback;
/******/ jsonpArray = jsonpArray.slice();
/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
/******/ var parentJsonpFunction = oldJsonpFunction;
/******/
/******/
/******/ // run deferred modules from other chunks
/******/ checkDeferredModules();
/******/ })
/************************************************************************/
/******/ ([]);
//# sourceMappingURL=runtime.js.map
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment