将env相关的代码挪到了frontend当中
This commit is contained in:
parent
43754a75ae
commit
1b4bfac63c
|
|
@ -10,7 +10,6 @@
|
|||
"src/entities/*"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fingerprintjs/fingerprintjs": "^3.3.3",
|
||||
"@uiw/react-amap": "^4.0.2",
|
||||
"@wangeditor/editor": "^5.1.22",
|
||||
"@wangeditor/editor-for-react": "^1.0.4",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { unset } from 'oak-domain/lib/utils/lodash';
|
||||
import { buildSchema, analyzeEntities } from 'oak-domain/src/compiler/schemalBuilder';
|
||||
import { buildSchema, analyzeEntities } from 'oak-domain/lib/compiler/schemalBuilder';
|
||||
|
||||
process.env.NODE_ENV = 'development';
|
||||
process.env.COMPLING_AS_LIB = 'yes';
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
import { WebEnv, WechatMpEnv } from '../general-app-domain/Token/Schema';
|
||||
import { WebEnv, WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { AppType } from '../general-app-domain/Application/Schema';
|
||||
import { EntityDict } from '../general-app-domain';
|
||||
import { QiniuUploadInfo } from 'oak-frontend-base/lib/types/Upload';
|
||||
import { Config, Origin } from '../types/Config';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { CommonAspectDict } from 'oak-common-aspect';
|
||||
import { FrontendRuntimeContext } from '../context/FrontendRuntimeContext';
|
||||
|
||||
export type GeneralAspectDict<
|
||||
ED extends EntityDict,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { BackendRuntimeContext } from "../context/BackendRuntimeContext";
|
|||
import { applicationProjection } from '../types/projection';
|
||||
import {
|
||||
WebEnv,
|
||||
} from '../general-app-domain/Token/Schema';
|
||||
} from 'oak-domain/lib/types/Environment';
|
||||
import {
|
||||
WechatPublicInstance,
|
||||
WechatSDK,
|
||||
|
|
|
|||
|
|
@ -12,10 +12,9 @@ import {
|
|||
WebConfig,
|
||||
} from '../general-app-domain/Application/Schema';
|
||||
import {
|
||||
CreateOperationData as CreateToken,
|
||||
WebEnv,
|
||||
WechatMpEnv,
|
||||
} from '../general-app-domain/Token/Schema';
|
||||
} from 'oak-domain/lib/types/Environment';
|
||||
import { CreateOperationData as CreateWechatUser } from '../general-app-domain/WechatUser/Schema';
|
||||
import { UpdateOperationData as UpdateWechatLoginData } from '../general-app-domain/WechatLogin/Schema';
|
||||
import { Operation as ExtraFileOperation } from '../general-app-domain/ExtraFile/Schema';
|
||||
|
|
|
|||
|
|
@ -5,48 +5,7 @@ import { AbleAction, AbleState, makeAbleActionDef } from 'oak-domain/lib/actions
|
|||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
import { ActionDef } from 'oak-domain/lib/types/Action';
|
||||
import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
|
||||
// https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html
|
||||
export type WechatMpEnv = {
|
||||
type: 'wechatMp',
|
||||
brand: string; // 设备品牌
|
||||
model: string; // 设备型号
|
||||
pixelRatio: number; // 设备像素比
|
||||
screenWidth: number; // 屏幕宽度
|
||||
screenHeight: number; // 屏幕高度
|
||||
windowWidth: number; // 窗口宽度
|
||||
windowHeight: number; // 窗口高度
|
||||
statusBarHeight: number; // 状态栏高度
|
||||
language: string; // 语言
|
||||
version: string; // 微信版本号
|
||||
system: string; // 操作系统及版本
|
||||
platform: string; // 平台
|
||||
fontSizeSetting: number; // 字体大小
|
||||
SDKVersion: string; // 基础库版本
|
||||
};
|
||||
|
||||
|
||||
export type WebEnv = {
|
||||
type: 'web',
|
||||
visitorId: string;
|
||||
platform: {
|
||||
value: string;
|
||||
};
|
||||
timezone: {
|
||||
value: string;
|
||||
};
|
||||
vendor: {
|
||||
value: string;
|
||||
};
|
||||
vendorFlavors: {
|
||||
value: string[];
|
||||
};
|
||||
};
|
||||
|
||||
export type ServerEnv = {
|
||||
type: 'server',
|
||||
}
|
||||
|
||||
export type Environment = WechatMpEnv | WebEnv | ServerEnv;
|
||||
import { Environment } from 'oak-domain/lib/types/Environment';
|
||||
|
||||
export interface Schema extends EntityShape {
|
||||
application?: Application;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { String, Text, Datetime, Int } from 'oak-domain/lib/types/DataType';
|
||||
import { Boolean, Text, Datetime, Int } from 'oak-domain/lib/types/DataType';
|
||||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
import { LocaleDef } from 'oak-domain/lib/types/Locale';
|
||||
import { Index } from 'oak-domain/lib/types/Storage';
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@ export class ExtraFile<
|
|||
> extends Feature {
|
||||
private cache: Cache<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>;
|
||||
private application: Application<ED, Cxt, FrontCxt, AD>;
|
||||
private locales: Locales<ED, Cxt, AD>;
|
||||
private locales: Locales<ED, Cxt, FrontCxt, AD>;
|
||||
constructor(
|
||||
cache: Cache<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>,
|
||||
application: Application<ED, Cxt, FrontCxt, AD>,
|
||||
locales: Locales<ED, Cxt, AD>,
|
||||
locales: Locales<ED, Cxt, FrontCxt, AD>,
|
||||
) {
|
||||
super();
|
||||
this.cache = cache;
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@ export function initialize<
|
|||
);
|
||||
const token = new Token<ED, Cxt, FrontCxt, AD>(
|
||||
basicFeatures.cache,
|
||||
basicFeatures.localStorage
|
||||
basicFeatures.localStorage,
|
||||
basicFeatures.environment
|
||||
);
|
||||
|
||||
// 临时代码,合并后再删
|
||||
|
|
@ -39,7 +40,8 @@ export function initialize<
|
|||
const config = new Config<ED, Cxt, FrontCxt, AD>(basicFeatures.cache);
|
||||
const weiXinJsSdk = new WeiXinJsSdk<ED, Cxt, FrontCxt, AD>(
|
||||
basicFeatures.cache,
|
||||
basicFeatures.localStorage
|
||||
basicFeatures.localStorage,
|
||||
basicFeatures.environment
|
||||
);
|
||||
const theme = new Theme(basicFeatures.cache, basicFeatures.localStorage);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,14 +6,13 @@ import {
|
|||
} from 'oak-domain/lib/types/Exception';
|
||||
import { Cache } from 'oak-frontend-base/lib/features/cache';
|
||||
import { LocalStorage } from 'oak-frontend-base/lib/features/localStorage';
|
||||
import { Environment } from 'oak-frontend-base/lib/features/environment';
|
||||
import { CommonAspectDict } from 'oak-common-aspect';
|
||||
import { WebEnv, WechatMpEnv } from '../general-app-domain/Token/Schema';
|
||||
import { WebEnv, WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { EntityDict } from '../general-app-domain';
|
||||
import { getEnv } from '../utils/env';
|
||||
import AspectDict from '../aspects/AspectDict';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { FrontendRuntimeContext } from '../context/FrontendRuntimeContext';
|
||||
import { ROOT_ROLE_ID } from '../constants';
|
||||
import { tokenProjection } from '../types/projection';
|
||||
import { OakUserInfoLoadingException } from '../types/Exception';
|
||||
|
||||
|
|
@ -24,14 +23,16 @@ export class Token<
|
|||
AD extends AspectDict<ED, Cxt> & CommonAspectDict<ED, Cxt>
|
||||
> extends Feature {
|
||||
private tokenValue?: string;
|
||||
private environment: Environment;
|
||||
private cache: Cache<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>;
|
||||
private storage: LocalStorage;
|
||||
private isLoading = false;
|
||||
|
||||
constructor(cache: Cache<ED, Cxt, FrontCxt, AD>, storage: LocalStorage) {
|
||||
constructor(cache: Cache<ED, Cxt, FrontCxt, AD>, storage: LocalStorage, environment: Environment) {
|
||||
super();
|
||||
this.cache = cache;
|
||||
this.storage = storage;
|
||||
this.environment = environment;
|
||||
const tokenValue = storage.load('token:token');
|
||||
if (tokenValue) {
|
||||
this.tokenValue = tokenValue;
|
||||
|
|
@ -54,7 +55,7 @@ export class Token<
|
|||
}
|
||||
|
||||
async loginByMobile(mobile: string, password?: string, captcha?: string) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('loginByMobile', {
|
||||
password,
|
||||
mobile,
|
||||
|
|
@ -67,9 +68,9 @@ export class Token<
|
|||
}
|
||||
|
||||
async loginByWechatInWebEnv(wechatLoginId: string) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('loginByWechat', {
|
||||
env,
|
||||
env: env as WebEnv,
|
||||
wechatLoginId,
|
||||
});
|
||||
this.tokenValue = result;
|
||||
|
|
@ -78,7 +79,7 @@ export class Token<
|
|||
}
|
||||
|
||||
async loginWechat(code: string, params?: { wechatLoginId?: string }) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('loginWechat', {
|
||||
code,
|
||||
env: env as WebEnv,
|
||||
|
|
@ -92,7 +93,7 @@ export class Token<
|
|||
async loginWechatMp() {
|
||||
const { code } = await wx.login();
|
||||
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('loginWechatMp', {
|
||||
code,
|
||||
env: env as WechatMpEnv,
|
||||
|
|
@ -196,7 +197,7 @@ export class Token<
|
|||
}
|
||||
|
||||
async sendCaptcha(mobile: string) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('sendCaptcha', {
|
||||
mobile,
|
||||
env: env as WebEnv,
|
||||
|
|
@ -227,7 +228,7 @@ export class Token<
|
|||
}
|
||||
|
||||
async getWechatMpUserPhoneNumber(code: string) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
await this.cache.exec('getWechatMpUserPhoneNumber', {
|
||||
code,
|
||||
env: env as WechatMpEnv,
|
||||
|
|
@ -236,7 +237,7 @@ export class Token<
|
|||
}
|
||||
|
||||
async wakeupParasite(id: string) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('wakeupParasite', {
|
||||
id,
|
||||
env: env as WechatMpEnv,
|
||||
|
|
|
|||
|
|
@ -9,12 +9,12 @@ import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
|||
import { FrontendRuntimeContext } from '../context/FrontendRuntimeContext';
|
||||
import { Cache } from 'oak-frontend-base/lib/features/cache';
|
||||
import { LocalStorage } from 'oak-frontend-base/lib/features/localStorage';
|
||||
import { getEnv } from '../utils/env';
|
||||
import { WebEnv } from '../general-app-domain/Token/Schema';
|
||||
import { WebEnv } from 'oak-domain/lib/types/Environment';
|
||||
import { uniq } from 'oak-domain/lib/utils/lodash';
|
||||
|
||||
// const weixin = require('weixin-js-sdk');
|
||||
import weixin from 'weixin-js-sdk';
|
||||
import { Environment } from 'oak-frontend-base/lib/features/environment';
|
||||
|
||||
type Options =
|
||||
| WeixinJsSdk.CheckJsApiOptions
|
||||
|
|
@ -50,17 +50,19 @@ export class WeiXinJsSdk<
|
|||
> extends Feature {
|
||||
private cache: Cache<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>;
|
||||
private storage: LocalStorage;
|
||||
private environment: Environment;
|
||||
private landingUrl?: string; //解决在IOS上,无论路由切换到哪个页面,实际真正有效的的签名URL是【第一次进入应用时的URL】;
|
||||
|
||||
constructor(cache: Cache<ED, Cxt, FrontCxt, AD>, storage: LocalStorage) {
|
||||
constructor(cache: Cache<ED, Cxt, FrontCxt, AD>, storage: LocalStorage, environment: Environment) {
|
||||
super();
|
||||
this.cache = cache;
|
||||
this.storage = storage;
|
||||
this.landingUrl = undefined;
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
async signatureJsSDK(url: string) {
|
||||
const env = await getEnv();
|
||||
const env = await this.environment.getEnv();
|
||||
const { result } = await this.cache.exec('signatureJsSDK', {
|
||||
url,
|
||||
env: env as WebEnv,
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
import { pick } from "oak-domain/lib/utils/lodash";
|
||||
|
||||
export async function getEnv() {
|
||||
const env = await wx.getSystemInfo();
|
||||
const env2 = pick(env, [
|
||||
'brand',
|
||||
'model',
|
||||
'pixelRatio',
|
||||
'screenWidth',
|
||||
'screenHeight',
|
||||
'windowWidth',
|
||||
'windowHeight',
|
||||
'statusBarHeight',
|
||||
'language',
|
||||
'version',
|
||||
'system',
|
||||
'platform',
|
||||
'fontSizeSetting',
|
||||
'SDKVersion'
|
||||
]);
|
||||
return Object.assign(env2, {
|
||||
type: 'wechatMp',
|
||||
}) as any;
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
import { getEnv } from './env.web';
|
||||
|
||||
export {
|
||||
getEnv,
|
||||
};
|
||||
|
||||
console.log('不应该走到这里[utils/env]');
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
import FingerprintJS from '@fingerprintjs/fingerprintjs';
|
||||
import { pick } from 'oak-domain/lib/utils/lodash';
|
||||
|
||||
/**
|
||||
* fingerprintJs当中的一些敏感项
|
||||
* @returns
|
||||
*/
|
||||
export async function getEnv() {
|
||||
const fp = await FingerprintJS.load();
|
||||
const result = await fp.get();
|
||||
|
||||
const { visitorId, components } = result;
|
||||
return Object.assign(
|
||||
pick(components, [
|
||||
'platform',
|
||||
'timezone',
|
||||
'vendor',
|
||||
'vendorFlavors'
|
||||
]), {
|
||||
type: 'web',
|
||||
visitorId,
|
||||
}) as any;
|
||||
}
|
||||
Loading…
Reference in New Issue