@laiye_packages/uci 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/app/base/index.d.ts +80 -0
  2. package/dist/app/index.d.ts +14 -0
  3. package/dist/app/organization/api/department.d.ts +44 -0
  4. package/dist/app/organization/api/license.d.ts +60 -0
  5. package/dist/app/organization/api/notification.d.ts +98 -0
  6. package/dist/app/organization/api/oem.d.ts +39 -0
  7. package/dist/app/organization/api/open_api.d.ts +78 -0
  8. package/dist/app/organization/api/permission.d.ts +71 -0
  9. package/dist/app/organization/api/session.d.ts +51 -0
  10. package/dist/app/organization/api/sso.d.ts +0 -0
  11. package/dist/app/organization/api/user.d.ts +95 -0
  12. package/dist/app/organization/api/verificationCodes.d.ts +27 -0
  13. package/dist/app/organization/app/index.d.ts +30 -0
  14. package/dist/app/organization/authorizer/base.d.ts +35 -0
  15. package/dist/app/organization/authorizer/direct.d.ts +11 -0
  16. package/dist/app/organization/authorizer/gateway.d.ts +5 -0
  17. package/dist/app/organization/authorizer/redirect.d.ts +18 -0
  18. package/dist/app/organization/authorizer/web.d.ts +25 -0
  19. package/dist/app/organization/index.d.ts +1 -0
  20. package/dist/app/tenant/api/configuration.d.ts +8 -0
  21. package/dist/app/tenant/api/session.d.ts +23 -0
  22. package/dist/app/tenant/api/tenant.d.ts +25 -0
  23. package/dist/app/tenant/api/user.d.ts +27 -0
  24. package/dist/app/tenant/app/index.d.ts +20 -0
  25. package/dist/app/tenant/authorizer/index.d.ts +13 -0
  26. package/dist/app/tenant/index.d.ts +1 -0
  27. package/dist/app/tenant/session/index.d.ts +57 -0
  28. package/dist/config/address.d.ts +5 -0
  29. package/dist/config/app.d.ts +5 -0
  30. package/dist/config/base.d.ts +15 -0
  31. package/dist/config/crypto.d.ts +5 -0
  32. package/dist/config/http.d.ts +14 -0
  33. package/dist/config/index.d.ts +12 -0
  34. package/dist/constants/index.d.ts +1 -0
  35. package/dist/crypto/base.d.ts +14 -0
  36. package/dist/crypto/gm.d.ts +3 -0
  37. package/dist/crypto/index.d.ts +144 -0
  38. package/dist/crypto/sm.d.ts +17 -0
  39. package/dist/env/index.d.ts +76 -0
  40. package/dist/error/index.d.ts +16 -0
  41. package/dist/http/base.d.ts +52 -0
  42. package/dist/http/error.d.ts +34 -0
  43. package/dist/http/index.d.ts +170 -0
  44. package/dist/http/trace.d.ts +1 -0
  45. package/dist/i18n/index.d.ts +50 -0
  46. package/dist/index.d.ts +14 -0
  47. package/dist/index.js +12194 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/logger/index.d.ts +75 -0
  50. package/dist/object/index.d.ts +57 -0
  51. package/dist/observable/index.d.ts +14 -0
  52. package/dist/observable/serializeable.d.ts +86 -0
  53. package/dist/permission/index.d.ts +9 -0
  54. package/dist/session/index.d.ts +74 -0
  55. package/dist/storage/index.d.ts +98 -0
  56. package/package.json +87 -0
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 日志模块,提供默认日志格式化、默认IndexDB存储
3
+ * 说明:
4
+ * 1. 在IndexDB不可用的时候,允许日志不记录或丢失情况,也无需降级处理
5
+ * - IndexDB不可用场景:隐私模式、存储空间不足、浏览器不支持等
6
+ * - 日志丢失影响:仅影响问题排查,不影响核心业务功能
7
+ * 2. 浏览器日志仅用于辅助分析问题,对于日志的健壮性要求不高,无需重试和备用策略
8
+ * - 适用场景:开发调试、线上问题排查
9
+ * - 不适用场景:业务审计、关键操作记录等
10
+ */
11
+ export declare enum LYLogLevel {
12
+ NONE = 0,
13
+ ERROR = 1,
14
+ WARN = 2,
15
+ INFO = 3,
16
+ DEBUG = 4
17
+ }
18
+ export interface ILYLogFormatter {
19
+ format(level: string, namespace: string, args: unknown[]): string;
20
+ }
21
+ export interface ILYLogStorage {
22
+ printToConsole?: boolean;
23
+ write(level: string, message: string, meta?: any): Promise<void>;
24
+ download(filename: string): Promise<void>;
25
+ }
26
+ export interface ILYLogger {
27
+ readonly level: LYLogLevel;
28
+ setLevel(level: LYLogLevel): void;
29
+ error(...args: unknown[]): void;
30
+ warn(...args: unknown[]): void;
31
+ info(...args: unknown[]): void;
32
+ debug(...args: unknown[]): void;
33
+ download(): Promise<void>;
34
+ }
35
+ export declare class LYDefaultLogFormatter implements ILYLogFormatter {
36
+ format(level: string, namespace: string, args: unknown[]): string;
37
+ private formatArgs;
38
+ }
39
+ export declare class LYIndexedDBLogStorage implements ILYLogStorage {
40
+ private _db;
41
+ private _maxLogs;
42
+ private _logBuffer;
43
+ private _bufferSize;
44
+ private _flushInterval;
45
+ private _isFlushing;
46
+ private _printToConsole;
47
+ constructor();
48
+ get printToConsole(): boolean;
49
+ set printToConsole(value: boolean);
50
+ private init;
51
+ private generateId;
52
+ private getMicroTimestamp;
53
+ write(level: string, message: string, meta?: any): Promise<void>;
54
+ private flushBuffer;
55
+ private cleanupOldLogs;
56
+ private getAllLogs;
57
+ download(filename: string): Promise<void>;
58
+ }
59
+ export declare function setFormatter(formatter: ILYLogFormatter): void;
60
+ export declare function setStorage(storage: ILYLogStorage): void;
61
+ export declare function setPrintToConsole(enabled: boolean): void;
62
+ export declare class LYLogger implements ILYLogger {
63
+ private _level;
64
+ private _namespace;
65
+ constructor(namespace: string, level?: LYLogLevel);
66
+ get level(): LYLogLevel;
67
+ setLevel(level: LYLogLevel): void;
68
+ private log;
69
+ error(...args: unknown[]): void;
70
+ warn(...args: unknown[]): void;
71
+ info(...args: unknown[]): void;
72
+ debug(...args: unknown[]): void;
73
+ download(): Promise<void>;
74
+ }
75
+ export declare const logger: LYLogger;
@@ -0,0 +1,57 @@
1
+ import events from 'events';
2
+ import { LYLogger } from '../logger';
3
+ export type LYConstructor<T> = new (...args: any[]) => T;
4
+ type LYClassDesc = {
5
+ name: string;
6
+ Construct: LYConstructor<LYObject>;
7
+ };
8
+ export declare class LYObject extends events.EventEmitter {
9
+ private _logger;
10
+ private static _instances;
11
+ static registerClass(name: string, Construct: LYConstructor<LYObject>): void;
12
+ protected static autoRegister(this: LYConstructor<LYObject>): void;
13
+ static getInstance<T extends LYObject>(obj: LYConstructor<T> | string, ...args: unknown[]): T;
14
+ static getClassName<T extends LYObject>(obj: T | LYConstructor<T>, def?: string): string;
15
+ static getClass<T extends LYObject>(name: string, def?: LYConstructor<T>): LYConstructor<T>;
16
+ static getDerivedClasses<T extends LYObject>(name: string | LYConstructor<T>): LYConstructor<T>[];
17
+ static get classes(): {
18
+ [key: string]: LYClassDesc;
19
+ };
20
+ constructor();
21
+ get className(): string;
22
+ is(className: string): boolean;
23
+ get logger(): LYLogger;
24
+ }
25
+ export declare function register(name: string): (Construct: LYConstructor<LYObject>) => void;
26
+ type LYEventsDefinition = {
27
+ [event: string]: (...args: any[]) => void;
28
+ };
29
+ type LYAny<T> = {
30
+ [key: string]: T;
31
+ };
32
+ type LYValueType<T> = T extends LYAny<infer U> ? U : never;
33
+ type LYUnionToIntersection<Union> = (Union extends any ? (argument: Union) => void : never) extends (argument: infer Intersection) => void ? Intersection : never;
34
+ export type LYEventsWithoutAny<T extends {
35
+ [event: string]: (...args: any[]) => void;
36
+ }> = {
37
+ on: LYUnionToIntersection<LYValueType<{
38
+ [K in keyof T]: (event: K, listener: T[K]) => any;
39
+ }>>;
40
+ emit: LYUnionToIntersection<LYValueType<{
41
+ [K in keyof T]: (event: K, ...args: Parameters<T[K]>) => boolean;
42
+ }>>;
43
+ };
44
+ export type LYEvents<T extends LYEventsDefinition> = LYEventsWithoutAny<T> & {
45
+ on(event: string, listener: (...args: any[]) => void): any;
46
+ emit(event: string, ...args: any[]): any;
47
+ };
48
+ export interface ILYEvents<T extends LYEventsDefinition> {
49
+ on: LYEventsWithoutAny<T>['on'];
50
+ off: LYEventsWithoutAny<T>['on'];
51
+ once: LYEventsWithoutAny<T>['on'];
52
+ addListener: LYEventsWithoutAny<T>['on'];
53
+ removeListener: LYEventsWithoutAny<T>['on'];
54
+ emit: LYEventsWithoutAny<T>['emit'];
55
+ }
56
+ export declare function wait(interval?: number): Promise<void>;
57
+ export {};
@@ -0,0 +1,14 @@
1
+ import { LYSerializeable, SERIALIZE_CREATE, LYCtorInfo } from './serializeable';
2
+ export declare class LYObservable extends LYSerializeable {
3
+ }
4
+ export declare class LYOwnerObservable<T> extends LYObservable {
5
+ private _owner;
6
+ protected static [SERIALIZE_CREATE](ctor: LYCtorInfo, ...args: any[]): LYSerializeable;
7
+ constructor(owner: T);
8
+ get owner(): T;
9
+ set owner(value: T);
10
+ }
11
+ export declare const observe: {
12
+ action: import("mobx").IActionFactory;
13
+ include(target: any, propertyOrContext: any): any;
14
+ };
@@ -0,0 +1,86 @@
1
+ import { EventEmitter } from 'events';
2
+ import { type IObjectDidChange, type IArrayDidChange, type IMapDidChange } from 'mobx';
3
+ import { LYObject, type LYEventsWithoutAny } from '../object';
4
+ /**
5
+ * 序列化管理基类
6
+ * 已实现按所有key进行遍历进行序列化操作,不包含原型上的属性
7
+ * 不支持function、symbol的序列化
8
+ * 支持递归序列化,支持循环引用对象的序列化
9
+ * 考虑到构造函数的特异性,支持自定义构造方式
10
+ * 自定义构造:
11
+ * 1、重写getConstructorArguments实例方法,返回需要的构造函数参数数组
12
+ * 2、重写create静态方法,可获取构造函数、构造对象的所有者(数组对象的所有者不是数组本身,而是上层对象)、对应的所有者的属性名、构造函数的参数(由getConstructorArguments提供)
13
+ * 循环引用处理:
14
+ * 1、deserializeObjects用于存储此次已序列化的对象,当出现循环引用时,直接从中获取已反序列化的对象
15
+ * 2、addReentry、releaseReentry用于确定反序列化入口,releaseReentry过程中reentryCount为0时表示反序列化完成,此时清除deserializeObjects
16
+ * 自定义序列化:
17
+ * 1、可遵从规范重写doSerialize、doDeserialize方法
18
+ * 2、使用@serialize.include定义需序列化的属性
19
+ */
20
+ export declare const UNIQUE_ID: unique symbol;
21
+ declare const SERIALIZE_CACHE: unique symbol;
22
+ declare const FREEZED_DATA: unique symbol;
23
+ declare const BACKUP_DATA: unique symbol;
24
+ declare const OBSERVABLE_DISPOSER: unique symbol;
25
+ export declare const SERIALIZING: unique symbol;
26
+ export declare const DESERIALIZING: unique symbol;
27
+ export declare const SERIALIZE_DATA: unique symbol;
28
+ export declare const SERIALIZE_CREATE: unique symbol;
29
+ export declare const SERIALIZE_GET_CONSTRUCT_ARGS: unique symbol;
30
+ export type LYCtorInfo = {
31
+ Construct: new (...args: any) => LYSerializeable;
32
+ owner: any;
33
+ property: string;
34
+ };
35
+ export type IChange = IObjectDidChange | IArrayDidChange | IMapDidChange;
36
+ type LYSerializeableObserveEvents = {
37
+ ['before-serialize'](target: LYSerializeable): void;
38
+ ['before-deserialize'](target: LYSerializeable): void;
39
+ ['after-serialize'](target: LYSerializeable): void;
40
+ ['after-deserialize'](target: LYSerializeable): void;
41
+ ['property-change'](target: LYSerializeable, property?: string): void;
42
+ };
43
+ export declare class LYSerializeableObserve extends EventEmitter {
44
+ on: LYEventsWithoutAny<LYSerializeableObserveEvents>['on'];
45
+ off: LYEventsWithoutAny<LYSerializeableObserveEvents>['on'];
46
+ once: LYEventsWithoutAny<LYSerializeableObserveEvents>['on'];
47
+ addListener: LYEventsWithoutAny<LYSerializeableObserveEvents>['on'];
48
+ removeListener: LYEventsWithoutAny<LYSerializeableObserveEvents>['on'];
49
+ emit: LYEventsWithoutAny<LYSerializeableObserveEvents>['emit'];
50
+ }
51
+ export declare class LYSerializeable extends LYObject {
52
+ emit: LYEventsWithoutAny<any>['emit'];
53
+ protected static [SERIALIZE_CREATE](ctor: LYCtorInfo, ...args: any[]): LYSerializeable;
54
+ static get observe(): LYSerializeableObserve;
55
+ static serialize(value: any): any | any[];
56
+ static deserialize(data: any, owner?: any, property?: string): any | any[];
57
+ private [UNIQUE_ID];
58
+ private [SERIALIZING];
59
+ private [DESERIALIZING];
60
+ private [SERIALIZE_CACHE];
61
+ private [BACKUP_DATA];
62
+ private [FREEZED_DATA];
63
+ private [OBSERVABLE_DISPOSER];
64
+ protected [SERIALIZE_DATA]: any;
65
+ constructor();
66
+ protected [SERIALIZE_GET_CONSTRUCT_ARGS](): unknown[];
67
+ get isSerializing(): boolean;
68
+ get isDeserializing(): any;
69
+ get freezed(): boolean;
70
+ set freezed(value: boolean);
71
+ backup(): void;
72
+ restore(): void;
73
+ get serializeCached(): boolean;
74
+ clearSerializeCache(): void;
75
+ protected onDataChange(change: IChange, path: string): void;
76
+ protected onPropertyChange(property?: string): void;
77
+ protected doSerialize(): any;
78
+ serialize(): object;
79
+ protected doDeserialize(data: any): void;
80
+ deserialize(o: any): void;
81
+ hasOwnProperty(key: string): any;
82
+ }
83
+ export declare const serialize: {
84
+ include<T extends LYSerializeable>(target: T, property: string): void;
85
+ };
86
+ export {};
@@ -0,0 +1,9 @@
1
+ import { LYObject } from '../object';
2
+ export type LYAction = 'none' | 'create' | 'read' | 'update' | 'delete' | 'execute';
3
+ export declare class LYAppPermission extends LYObject {
4
+ private _app_name;
5
+ private _codes;
6
+ constructor(app_name: string, codes: Record<string, LYAction[]>);
7
+ get app_name(): string;
8
+ getActions(code: string): LYAction[];
9
+ }
@@ -0,0 +1,74 @@
1
+ import { LYObject } from '../object';
2
+ import { type LYAction, LYAppPermission } from '../permission';
3
+ type LYSessionType = 'web' | 'direct' | 'gateway' | 'redirect';
4
+ export declare class LYSession extends LYObject {
5
+ private static _session?;
6
+ private _type;
7
+ private _authentication_name;
8
+ private _id;
9
+ private _token;
10
+ private _user_id;
11
+ private _user_name;
12
+ private _expires_in;
13
+ private _permissions;
14
+ private _created_at;
15
+ private static _refreshCallback?;
16
+ private static _refreshTimer?;
17
+ private static readonly _CHECK_INTERVAL;
18
+ private _is_first_login;
19
+ private _display_name;
20
+ private _email;
21
+ private _phone;
22
+ private _country_code;
23
+ static get(): LYSession | undefined;
24
+ static create(type: LYSessionType, authentication_name: string, id: string, token: string, user_id: string, user_name: string, expires_in: number, permissions: Record<string, Record<string, LYAction[]>>, is_first_login?: boolean, display_name?: string, email?: string, phone?: string, country_code?: string): LYSession;
25
+ static clear(): void;
26
+ constructor(type: LYSessionType, authentication_name: string, id: string, token: string, user_id: string, user_name: string, expires_in: number, permissions: Record<string, Record<string, LYAction[]>>, created_at: number, is_first_login?: boolean, display_name?: string, email?: string, phone?: string, country_code?: string);
27
+ get type(): LYSessionType;
28
+ get authentication_name(): string;
29
+ get id(): string;
30
+ get token(): string;
31
+ get user_id(): string;
32
+ get user_name(): string;
33
+ get expires_in(): number;
34
+ get permissions(): Record<string, LYAppPermission>;
35
+ get created_at(): number;
36
+ get is_first_login(): boolean | undefined;
37
+ get display_name(): string;
38
+ get email(): string;
39
+ get phone(): string;
40
+ get country_code(): string;
41
+ /**
42
+ * 检查session是否已过期
43
+ */
44
+ isExpired(): boolean;
45
+ /**
46
+ * 检查session是否即将过期(在过期前15秒)
47
+ */
48
+ isNearExpiration(): boolean;
49
+ /**
50
+ * 设置刷新回调函数
51
+ */
52
+ static setRefreshCallback(callback: (session: LYSession) => Promise<void>): void;
53
+ /**
54
+ * 获取有效的session,如果过期则尝试刷新
55
+ */
56
+ static getValid(): Promise<LYSession | undefined>;
57
+ /**
58
+ * 更新session信息
59
+ */
60
+ static update(id: string, token: string, user_id: string, user_name: string, expires_in: number, permissions: Record<string, Record<string, LYAction[]>>, display_name?: string, email?: string, phone?: string, country_code?: string): void;
61
+ /**
62
+ * 启动定时器监控session过期
63
+ */
64
+ private static _startRefreshTimer;
65
+ /**
66
+ * 停止定时器
67
+ */
68
+ private static _stopRefreshTimer;
69
+ /**
70
+ * 检查并刷新session
71
+ */
72
+ private static _checkAndRefreshSession;
73
+ }
74
+ export {};
@@ -0,0 +1,98 @@
1
+ import type { ILYEvents, LYEvents } from '../object';
2
+ import { LYObject } from '../object';
3
+ type LYStorageEvents = {
4
+ changed(event: {
5
+ key: string;
6
+ value: any;
7
+ isCrossWindow?: boolean;
8
+ }): void;
9
+ };
10
+ export interface ILYStorage extends ILYEvents<LYStorageEvents> {
11
+ init(): Promise<void>;
12
+ flush(): Promise<void>;
13
+ get<T>(key: string): Promise<T>;
14
+ set(key: string, value: any): Promise<void>;
15
+ has(key: string): Promise<boolean>;
16
+ update(key: string, func: (value: any) => Promise<any>): Promise<void>;
17
+ remove(key: string): Promise<void>;
18
+ clear(): Promise<void>;
19
+ keys(): Promise<string[]>;
20
+ values(): Promise<any[]>;
21
+ entries(): Promise<[string, any][]>;
22
+ }
23
+ export interface ILYStorageSync extends ILYEvents<LYStorageEvents> {
24
+ initSync(): void;
25
+ flushSync(): void;
26
+ getSync<T>(key: string): T;
27
+ setSync(key: string, value: any): void;
28
+ hasSync(key: string): boolean;
29
+ updateSync(key: string, func: (value: any) => any): void;
30
+ removeSync(key: string): void;
31
+ clearSync(): void;
32
+ keysSync(): string[];
33
+ valuesSync(): any[];
34
+ entriesSync(): [string, any][];
35
+ }
36
+ declare class LYBaseLocalStorage extends LYObject implements ILYStorageSync {
37
+ on: LYEvents<LYStorageEvents>['on'];
38
+ off: LYEvents<LYStorageEvents>['on'];
39
+ once: LYEvents<LYStorageEvents>['on'];
40
+ emit: LYEvents<LYStorageEvents>['emit'];
41
+ protected _storage: Storage;
42
+ protected _prefix: string;
43
+ constructor(prefix: string, storage: Storage);
44
+ initSync(): void;
45
+ flushSync(): void;
46
+ getSync<T>(key: string): T;
47
+ setSync(key: string, value: any): void;
48
+ hasSync(key: string): boolean;
49
+ /**
50
+ * 为了更新原子化,譬如我要在原来的基础上+1,如果是先get,在set,而get和set是异步的话,那么get和set中间可能出现对这个值再进行了操作的情况,导致不符合预期
51
+ */
52
+ updateSync(key: string, func: (value: any) => any): void;
53
+ removeSync(key: string): boolean;
54
+ clearSync(): void;
55
+ keysSync(): string[];
56
+ valuesSync(): any[];
57
+ entriesSync(): [string, any][];
58
+ }
59
+ export declare class LYLocalStorage extends LYBaseLocalStorage implements ILYStorageSync {
60
+ constructor(prefix: string);
61
+ }
62
+ export declare class LYSessionStorage extends LYBaseLocalStorage implements ILYStorageSync {
63
+ constructor(prefix: string);
64
+ }
65
+ export interface ILYCloudStorage {
66
+ setValue(key: string, value: string): Promise<void>;
67
+ getValue(key: string): Promise<string>;
68
+ remove(keys: string[]): Promise<void>;
69
+ clear(prefix?: string): Promise<void>;
70
+ getAll(): Promise<Record<string, any>>;
71
+ getKeys(): Promise<string[]>;
72
+ }
73
+ export declare function setCloudStorageImpl(value: ILYCloudStorage): void;
74
+ export declare class LYCloudStorage extends LYObject implements ILYStorage {
75
+ on: LYEvents<LYStorageEvents>['on'];
76
+ off: LYEvents<LYStorageEvents>['on'];
77
+ once: LYEvents<LYStorageEvents>['on'];
78
+ addListener: LYEvents<LYStorageEvents>['on'];
79
+ removeListener: LYEvents<LYStorageEvents>['on'];
80
+ emit: LYEvents<LYStorageEvents>['emit'];
81
+ protected _prefix: string;
82
+ constructor(prefix: string);
83
+ get keyValueImpl(): ILYCloudStorage;
84
+ init(): Promise<void>;
85
+ flush(): Promise<void>;
86
+ get<T>(key: string): Promise<T>;
87
+ set(key: string, value: any): Promise<void>;
88
+ has(key: string): Promise<boolean>;
89
+ update(key: string, func: (value: any) => Promise<any>): Promise<void>;
90
+ remove(key: string): Promise<void>;
91
+ clear(): Promise<void>;
92
+ keys(): Promise<string[]>;
93
+ values(): Promise<any[]>;
94
+ entries(): Promise<[string, any][]>;
95
+ }
96
+ export declare const sharedLocalStorage: LYLocalStorage;
97
+ export declare const sharedCloudStorage: LYCloudStorage;
98
+ export {};
package/package.json ADDED
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "@laiye_packages/uci",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "A comprehensive utility library for frontend applications with HTTP client, storage, i18n, crypto, logger, and OpenTelemetry support",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.js"
10
+ }
11
+ },
12
+ "types": "./dist/index.d.ts",
13
+ "files": [
14
+ "dist",
15
+ "README.md",
16
+ "LICENSE"
17
+ ],
18
+ "scripts": {
19
+ "watch": "rslib build --watch",
20
+ "build": "rslib build",
21
+ "lint": "eslint .",
22
+ "format": "prettier --write .",
23
+ "test": "vitest run src/env/__tests__/env.test.ts"
24
+ },
25
+ "keywords": [
26
+ "utility",
27
+ "http",
28
+ "axios",
29
+ "storage",
30
+ "i18n",
31
+ "crypto",
32
+ "logger",
33
+ "opentelemetry",
34
+ "telemetry",
35
+ "observability",
36
+ "frontend",
37
+ "typescript",
38
+ "web"
39
+ ],
40
+ "author": "laiye",
41
+ "license": "ISC",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://git.laiye.com/laiye-frontend-repos/uci.git"
45
+ },
46
+ "homepage": "https://git.laiye.com/laiye-frontend-repos/uci#readme",
47
+ "bugs": {
48
+ "url": "https://git.laiye.com/laiye-frontend-repos/uci/issues"
49
+ },
50
+ "engines": {
51
+ "node": ">=22.14.0"
52
+ },
53
+ "dependencies": {
54
+ "@opentelemetry/api": "^1.9.0",
55
+ "@opentelemetry/exporter-trace-otlp-http": "^0.202.0",
56
+ "@opentelemetry/instrumentation": "^0.202.0",
57
+ "@opentelemetry/instrumentation-fetch": "^0.202.0",
58
+ "@opentelemetry/instrumentation-xml-http-request": "^0.202.0",
59
+ "@opentelemetry/resources": "^2.0.1",
60
+ "@opentelemetry/sdk-trace-web": "^2.0.1",
61
+ "axios": "^1.8.4",
62
+ "axios-retry": "^4.5.0",
63
+ "downloadjs": "^1.4.7",
64
+ "events": "^3.3.0",
65
+ "gm-crypto": "^0.1.12",
66
+ "i18next": "^25.0.1",
67
+ "idb": "^8.0.2",
68
+ "js-sha256": "^0.11.1",
69
+ "lodash": "^4.17.21",
70
+ "qs": "^6.14.0",
71
+ "sm-crypto": "^0.3.13"
72
+ },
73
+ "devDependencies": {
74
+ "@rslib/core": "^0.13.3",
75
+ "@types/downloadjs": "^1.4.6",
76
+ "@types/events": "^3.0.3",
77
+ "@types/gm": "^1.25.4",
78
+ "@types/lodash": "^4.17.16",
79
+ "@types/node": "^22.17.2",
80
+ "@types/qs": "^6.14.0",
81
+ "@types/sm-crypto": "^0.3.4",
82
+ "fake-indexeddb": "^6.0.1",
83
+ "jsdom": "^26.1.0",
84
+ "typescript": "^5.9.2",
85
+ "vitest": "^3.2.4"
86
+ }
87
+ }