将env相关的代码挪到了frontend当中

This commit is contained in:
Xu Chang 2023-08-12 15:23:27 +08:00
parent 43754a75ae
commit 1b4bfac63c
14 changed files with 31 additions and 125 deletions

View File

@ -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",

View File

@ -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';

View File

@ -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,

View File

@ -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,

View File

@ -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';

View File

@ -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;

View File

@ -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';

View File

@ -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;

View File

@ -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);

View File

@ -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,

View File

@ -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,

View File

@ -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;
}

View File

@ -1,7 +0,0 @@
import { getEnv } from './env.web';
export {
getEnv,
};
console.log('不应该走到这里[utils/env]');

View File

@ -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;
}