@lark-apaas/auth-sdk 0.1.4 → 0.1.5-alpha.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.
- package/lib/account/AccountClient.d.ts +22 -0
- package/lib/account/AccountClient.d.ts.map +1 -0
- package/lib/account/AccountClient.js +10 -0
- package/lib/account/BaseAccountService.d.ts +25 -0
- package/lib/account/BaseAccountService.d.ts.map +1 -0
- package/lib/account/BaseAccountService.js +106 -0
- package/lib/account/index.d.ts +5 -0
- package/lib/account/index.d.ts.map +1 -0
- package/lib/account/index.js +2 -0
- package/lib/account/internal/brand.d.ts +8 -0
- package/lib/account/internal/brand.d.ts.map +1 -0
- package/lib/account/internal/brand.js +3 -0
- package/lib/account/internal/helpers.d.ts +7 -0
- package/lib/account/internal/helpers.d.ts.map +1 -0
- package/lib/account/internal/helpers.js +14 -0
- package/lib/account/internal/logger.d.ts +15 -0
- package/lib/account/internal/logger.d.ts.map +1 -0
- package/lib/account/internal/logger.js +18 -0
- package/lib/account/internal/slardar.d.ts +2 -0
- package/lib/account/internal/slardar.d.ts.map +1 -0
- package/lib/account/internal/slardar.js +16 -0
- package/lib/account/internal/trace-id.d.ts +12 -0
- package/lib/account/internal/trace-id.d.ts.map +1 -0
- package/lib/account/internal/trace-id.js +20 -0
- package/lib/account/internal/types.d.ts +46 -0
- package/lib/account/internal/types.d.ts.map +1 -0
- package/lib/account/internal/types.js +20 -0
- package/lib/account/services/session-service/index.d.ts +34 -0
- package/lib/account/services/session-service/index.d.ts.map +1 -0
- package/lib/account/services/session-service/index.js +137 -0
- package/lib/account/services/session-service/types.d.ts +30 -0
- package/lib/account/services/session-service/types.d.ts.map +1 -0
- package/lib/account/services/session-service/types.js +0 -0
- package/lib/account/services/user-service/index.d.ts +9 -0
- package/lib/account/services/user-service/index.d.ts.map +1 -0
- package/lib/account/services/user-service/index.js +60 -0
- package/lib/account/services/user-service/types.d.ts +51 -0
- package/lib/account/services/user-service/types.d.ts.map +1 -0
- package/lib/account/services/user-service/types.js +0 -0
- package/lib/index.d.ts +8 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -1
- package/package.json +2 -2
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import SessionService from './services/session-service';
|
|
2
|
+
import UserService from './services/user-service';
|
|
3
|
+
/**
|
|
4
|
+
* 妙搭账户/会话能力 SDK,零参构造。
|
|
5
|
+
*
|
|
6
|
+
* 业务调用方应通过 `authClient` singleton 使用(见 src/index.ts):
|
|
7
|
+
* import { authClient } from '@lark-apaas/auth-sdk';
|
|
8
|
+
* await authClient.user.search({ name: '张三' });
|
|
9
|
+
*
|
|
10
|
+
* 直接 `new AccountClient()` 仅用于测试或特殊场景(多实例隔离)。
|
|
11
|
+
*
|
|
12
|
+
* 构造行为:
|
|
13
|
+
* - `appId` 从 `globalThis.appId` 读取(与现有 toolkit 的 `getAppId()` 一致)
|
|
14
|
+
* - HTTP 走相对路径 + `credentials: 'include'`,使用浏览器本域 session cookie
|
|
15
|
+
* - 不接受任何外部配置(baseUrl/token/brandName/fetch/log/errorHook 全部内化或默认化)
|
|
16
|
+
*/
|
|
17
|
+
export declare class AccountClient {
|
|
18
|
+
readonly user: UserService;
|
|
19
|
+
readonly session: SessionService;
|
|
20
|
+
constructor();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=AccountClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountClient.d.ts","sourceRoot":"","sources":["../../src/account/AccountClient.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAElD;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;;CAOlC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import session_service from "./services/session-service/index.js";
|
|
2
|
+
import user_service from "./services/user-service/index.js";
|
|
3
|
+
class AccountClient {
|
|
4
|
+
constructor(){
|
|
5
|
+
const appId = globalThis.appId ?? '';
|
|
6
|
+
this.user = new user_service(appId);
|
|
7
|
+
this.session = new session_service(appId);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export { AccountClient };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type AccountServiceResponse, type ExtraInfo, type Fetch, type FetchOptions, ServiceName } from './internal/types';
|
|
2
|
+
/**
|
|
3
|
+
* Base for AC services. Owns the fetch pipeline:
|
|
4
|
+
* - Injects X-Suda-Csrf-Token from cookie
|
|
5
|
+
* - Sends body as JSON with credentials: 'include' (session cookie auth)
|
|
6
|
+
* - Normalizes responses into AccountServiceResponse<T>
|
|
7
|
+
* - Logs requests/responses in development
|
|
8
|
+
*
|
|
9
|
+
* 不暴露 baseUrl/token/brandName/fetch 参数(C5 二轮评审决议)。
|
|
10
|
+
*/
|
|
11
|
+
export default abstract class BaseAccountService {
|
|
12
|
+
protected baseUrl: string;
|
|
13
|
+
protected headers: {
|
|
14
|
+
[key: string]: string;
|
|
15
|
+
};
|
|
16
|
+
protected fetch: Fetch;
|
|
17
|
+
protected logger: boolean;
|
|
18
|
+
protected serviceName: ServiceName;
|
|
19
|
+
protected brandId: string;
|
|
20
|
+
protected bizSource: string;
|
|
21
|
+
protected appId: string;
|
|
22
|
+
constructor(appId: string);
|
|
23
|
+
fetchData<T>(url: string, options: FetchOptions, extras?: ExtraInfo): Promise<AccountServiceResponse<T>>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=BaseAccountService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAccountService.d.ts","sourceRoot":"","sources":["../../src/account/BaseAccountService.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,kBAAkB;IAC9C,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEZ,KAAK,EAAE,MAAM;IAenB,SAAS,CAAC,CAAC,EACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;CA8GtC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { BIZ_SOURCE, BRAND_ID } from "./internal/brand.js";
|
|
2
|
+
import { getCookieByName } from "./internal/helpers.js";
|
|
3
|
+
import { logRequest, logResponse } from "./internal/logger.js";
|
|
4
|
+
import { traceIdGenerator } from "./internal/trace-id.js";
|
|
5
|
+
import { ServiceName } from "./internal/types.js";
|
|
6
|
+
class BaseAccountService {
|
|
7
|
+
constructor(appId){
|
|
8
|
+
this.baseUrl = 'undefined' != typeof window ? window.location.origin : '';
|
|
9
|
+
this.headers = {
|
|
10
|
+
'X-Suda-Csrf-Token': getCookieByName('suda-csrf-token'),
|
|
11
|
+
'Content-Type': 'application/json'
|
|
12
|
+
};
|
|
13
|
+
this.logger = 'production' !== process.env.NODE_ENV;
|
|
14
|
+
this.serviceName = ServiceName.DEFAULT;
|
|
15
|
+
this.brandId = BRAND_ID;
|
|
16
|
+
this.bizSource = BIZ_SOURCE;
|
|
17
|
+
this.appId = appId;
|
|
18
|
+
this.fetch = globalThis.fetch.bind(globalThis);
|
|
19
|
+
}
|
|
20
|
+
async fetchData(url, options, extras) {
|
|
21
|
+
const fetchUrl = `${this.baseUrl}${url}`;
|
|
22
|
+
let traceId = -1;
|
|
23
|
+
if (this.logger) {
|
|
24
|
+
traceId = traceIdGenerator.next();
|
|
25
|
+
logRequest({
|
|
26
|
+
traceId,
|
|
27
|
+
url: fetchUrl,
|
|
28
|
+
method: options.method,
|
|
29
|
+
body: options.body
|
|
30
|
+
}, extras?.psmName);
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const res = await this.fetch(fetchUrl, {
|
|
34
|
+
method: options.method,
|
|
35
|
+
mode: 'cors',
|
|
36
|
+
redirect: 'manual',
|
|
37
|
+
credentials: 'include',
|
|
38
|
+
headers: this.headers,
|
|
39
|
+
body: JSON.stringify(options.body)
|
|
40
|
+
});
|
|
41
|
+
let error = null;
|
|
42
|
+
let data = null;
|
|
43
|
+
let status = res.status;
|
|
44
|
+
let statusText = res.statusText;
|
|
45
|
+
if (res.ok) {
|
|
46
|
+
const body = await res.text();
|
|
47
|
+
const parsedBody = JSON.parse(body);
|
|
48
|
+
if (parsedBody.status_code && parsedBody.error_msg) {
|
|
49
|
+
data = null;
|
|
50
|
+
error = {
|
|
51
|
+
code: parsedBody.status_code || res.status,
|
|
52
|
+
details: '',
|
|
53
|
+
hint: '',
|
|
54
|
+
message: parsedBody.error_msg || body
|
|
55
|
+
};
|
|
56
|
+
} else {
|
|
57
|
+
data = parsedBody.data;
|
|
58
|
+
error = null;
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
const body = await res.text();
|
|
62
|
+
let parsedBody = {};
|
|
63
|
+
try {
|
|
64
|
+
parsedBody = JSON.parse(body);
|
|
65
|
+
} catch {}
|
|
66
|
+
error = 429 === res.status ? {
|
|
67
|
+
code: 429,
|
|
68
|
+
message: 'Too many requests received within 5 seconds.',
|
|
69
|
+
details: '',
|
|
70
|
+
hint: 'Retry after 5 seconds.'
|
|
71
|
+
} : {
|
|
72
|
+
code: parsedBody.status_code || res.status,
|
|
73
|
+
message: parsedBody.error_msg || body,
|
|
74
|
+
details: '',
|
|
75
|
+
hint: ''
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const serviceResponse = {
|
|
79
|
+
data,
|
|
80
|
+
error,
|
|
81
|
+
status,
|
|
82
|
+
statusText
|
|
83
|
+
};
|
|
84
|
+
if (this.logger) logResponse(traceId, serviceResponse, extras?.psmName);
|
|
85
|
+
return serviceResponse;
|
|
86
|
+
} catch (e) {
|
|
87
|
+
const internalError = {
|
|
88
|
+
error: {
|
|
89
|
+
code: 500,
|
|
90
|
+
message: e instanceof Error ? e.message : String(e),
|
|
91
|
+
details: '',
|
|
92
|
+
hint: ''
|
|
93
|
+
},
|
|
94
|
+
status: 500,
|
|
95
|
+
statusText: 'Account Internal Error'
|
|
96
|
+
};
|
|
97
|
+
const serviceResponse = {
|
|
98
|
+
data: null,
|
|
99
|
+
...internalError
|
|
100
|
+
};
|
|
101
|
+
if (this.logger) logResponse(traceId, serviceResponse, extras?.psmName);
|
|
102
|
+
return serviceResponse;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export { BaseAccountService as default };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AccountClient } from './AccountClient';
|
|
2
|
+
export type { AccountServiceResponse, AccountServiceError, AccountStatus, UserStatus, } from './internal/types';
|
|
3
|
+
export type { SearchParams, User, UserResponse, I18n as UserI18n, } from './services/user-service/types';
|
|
4
|
+
export type { SignInRedirectionOptions, UserBaseInfo, UserInfoResponse, Avatar, I18n as SessionI18n, I18ns as SessionI18ns, } from './services/session-service/types';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/account/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,aAAa,EACb,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,IAAI,IAAI,QAAQ,GACjB,MAAM,+BAA+B,CAAC;AAGvC,YAAY,EACV,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,IAAI,IAAI,WAAW,EACnB,KAAK,IAAI,YAAY,GACtB,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 妙搭 (Miaoda) brand constants — hard-coded after C5 review.
|
|
3
|
+
* 历史上 `brandName` 是参数,serializeSessionBrandId('miaoda') === '1'。
|
|
4
|
+
* 现 auth-sdk 仅服务妙搭场景,相关常量直接内化。
|
|
5
|
+
*/
|
|
6
|
+
export declare const BIZ_SOURCE = "miaoda";
|
|
7
|
+
export declare const BRAND_ID = "1";
|
|
8
|
+
//# sourceMappingURL=brand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../../src/account/internal/brand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU,WAAW,CAAC;AACnC,eAAO,MAAM,QAAQ,MAAM,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AccountStatus, UserStatus } from './types';
|
|
2
|
+
import type { I18n } from '../services/user-service/types';
|
|
3
|
+
export declare const isBrowser: () => boolean;
|
|
4
|
+
export declare const getCookieByName: (name: string) => string;
|
|
5
|
+
export declare const retrieveNameFromI18n: (i18ns?: I18n) => string;
|
|
6
|
+
export declare const convertUserStatus: (status?: AccountStatus) => UserStatus;
|
|
7
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/account/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAE3D,eAAO,MAAM,SAAS,eAC4C,CAAC;AAEnE,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAW9C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,IAAI,WAEhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,aAAa,KAAG,UAY1D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AccountStatus, UserStatus } from "./types.js";
|
|
2
|
+
const isBrowser = ()=>'undefined' != typeof window && 'undefined' != typeof document;
|
|
3
|
+
const getCookieByName = (name)=>{
|
|
4
|
+
if (!isBrowser()) return '';
|
|
5
|
+
const cookies = document.cookie.split(';');
|
|
6
|
+
return cookies.find((cookie)=>cookie.trim().startsWith(`${name}=`))?.split('=')[1] ?? '';
|
|
7
|
+
};
|
|
8
|
+
const retrieveNameFromI18n = (i18ns)=>i18ns?.zh_cn || i18ns?.en_us || i18ns?.ja_jp || '';
|
|
9
|
+
const convertUserStatus = (status)=>{
|
|
10
|
+
if (status === AccountStatus.Active || status === AccountStatus.Inactive) return UserStatus.active;
|
|
11
|
+
if (status === AccountStatus.Disabled || status === AccountStatus.Terminated) return UserStatus.inactive;
|
|
12
|
+
return UserStatus.active;
|
|
13
|
+
};
|
|
14
|
+
export { convertUserStatus, getCookieByName, isBrowser, retrieveNameFromI18n };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FetchMethod } from './types';
|
|
2
|
+
type LogParams = {
|
|
3
|
+
traceId: number;
|
|
4
|
+
url: string;
|
|
5
|
+
method: FetchMethod;
|
|
6
|
+
body?: unknown;
|
|
7
|
+
};
|
|
8
|
+
export declare const logRequest: (params: LogParams, psmName?: string) => void;
|
|
9
|
+
export declare const logResponse: (traceId: number, response: {
|
|
10
|
+
data: unknown;
|
|
11
|
+
error: unknown;
|
|
12
|
+
status: number;
|
|
13
|
+
}, psmName?: string) => void;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/account/internal/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,QAAQ,SAAS,EAAE,UAAS,MAAkB,SAuBxE,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EACf,UAAU;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC3D,UAAS,MAAkB,SA0B5B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const logRequest = (params, psmName = 'Service')=>{
|
|
2
|
+
const { traceId, url, method, body } = params;
|
|
3
|
+
const decodedParams = Array.from(new URL(url, 'http://temp.invalid').searchParams.entries()).filter(([key])=>![
|
|
4
|
+
'count',
|
|
5
|
+
'tx',
|
|
6
|
+
'missing',
|
|
7
|
+
'resolution',
|
|
8
|
+
'column'
|
|
9
|
+
].includes(key)).map(([key, value])=>`${key}=${value}`);
|
|
10
|
+
console.log(`[Account][${psmName}][Request]`, 'trace id:', traceId, 'method:', method, 'params:', decodedParams.join(','), 'body:', body);
|
|
11
|
+
};
|
|
12
|
+
const logResponse = (traceId, response, psmName = 'Service')=>{
|
|
13
|
+
const { data, error, status } = response;
|
|
14
|
+
const hasError = !!error;
|
|
15
|
+
if (hasError) console.error(`[Account][${psmName}][Response Failed]`, 'trace id:', traceId, 'statusCode:', status, 'error:', error);
|
|
16
|
+
else console.log(`[Account][${psmName}][Response Success]`, 'trace id:', traceId, 'statusCode:', status, 'data:', data);
|
|
17
|
+
};
|
|
18
|
+
export { logRequest, logResponse };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slardar.d.ts","sourceRoot":"","sources":["../../../src/account/internal/slardar.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,sBAAsB,GACjC,OAAO,OAAO,EACd,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAa/B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { slardar } from "@lark-apaas/internal-slardar";
|
|
2
|
+
const toRecordString = (record)=>Object.fromEntries(Object.entries(record).filter(([, value])=>null != value).map(([key, value])=>[
|
|
3
|
+
key,
|
|
4
|
+
String(value)
|
|
5
|
+
]));
|
|
6
|
+
const reportAccountException = (error, extra)=>{
|
|
7
|
+
try {
|
|
8
|
+
const categories = toRecordString({
|
|
9
|
+
source: 'auth-sdk',
|
|
10
|
+
module: 'account',
|
|
11
|
+
...extra
|
|
12
|
+
});
|
|
13
|
+
slardar.captureException(error, categories);
|
|
14
|
+
} catch {}
|
|
15
|
+
};
|
|
16
|
+
export { reportAccountException };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare class TraceIdGenerator {
|
|
2
|
+
private static instance;
|
|
3
|
+
private counter;
|
|
4
|
+
private constructor();
|
|
5
|
+
static getInstance(): TraceIdGenerator;
|
|
6
|
+
next(): number;
|
|
7
|
+
getCurrent(): number;
|
|
8
|
+
reset(): void;
|
|
9
|
+
}
|
|
10
|
+
declare const traceIdGenerator: TraceIdGenerator;
|
|
11
|
+
export { TraceIdGenerator, traceIdGenerator };
|
|
12
|
+
//# sourceMappingURL=trace-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-id.d.ts","sourceRoot":"","sources":["../../../src/account/internal/trace-id.ts"],"names":[],"mappings":"AAAA,cAAM,gBAAgB;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO;WAEO,WAAW,IAAI,gBAAgB;IAOtC,IAAI,IAAI,MAAM;IAId,UAAU,IAAI,MAAM;IAIpB,KAAK,IAAI,IAAI;CAGrB;AAED,QAAA,MAAM,gBAAgB,kBAAiC,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class TraceIdGenerator {
|
|
2
|
+
constructor(){
|
|
3
|
+
this.counter = 1;
|
|
4
|
+
}
|
|
5
|
+
static getInstance() {
|
|
6
|
+
if (!TraceIdGenerator.instance) TraceIdGenerator.instance = new TraceIdGenerator();
|
|
7
|
+
return TraceIdGenerator.instance;
|
|
8
|
+
}
|
|
9
|
+
next() {
|
|
10
|
+
return this.counter++;
|
|
11
|
+
}
|
|
12
|
+
getCurrent() {
|
|
13
|
+
return this.counter;
|
|
14
|
+
}
|
|
15
|
+
reset() {
|
|
16
|
+
this.counter = 1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const traceIdGenerator = TraceIdGenerator.getInstance();
|
|
20
|
+
export { TraceIdGenerator, traceIdGenerator };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare enum ServiceName {
|
|
2
|
+
DEFAULT = "default",
|
|
3
|
+
UserService = "user-service",
|
|
4
|
+
SessionService = "session-service"
|
|
5
|
+
}
|
|
6
|
+
export type Fetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
7
|
+
export type FetchMethod = 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE';
|
|
8
|
+
export type FetchOptions = {
|
|
9
|
+
method: FetchMethod;
|
|
10
|
+
body?: unknown;
|
|
11
|
+
};
|
|
12
|
+
export interface ExtraInfo {
|
|
13
|
+
psmName?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AccountServiceError {
|
|
16
|
+
code: number;
|
|
17
|
+
details: string;
|
|
18
|
+
hint: string | null;
|
|
19
|
+
message: string;
|
|
20
|
+
}
|
|
21
|
+
interface AccountServiceBase {
|
|
22
|
+
status: number;
|
|
23
|
+
statusText: string;
|
|
24
|
+
}
|
|
25
|
+
export interface AccountServiceSuccess<T> extends AccountServiceBase {
|
|
26
|
+
error: null;
|
|
27
|
+
data: T;
|
|
28
|
+
}
|
|
29
|
+
export interface AccountServiceFailure extends AccountServiceBase {
|
|
30
|
+
error: AccountServiceError;
|
|
31
|
+
data: null;
|
|
32
|
+
}
|
|
33
|
+
export type AccountServiceResponse<T> = AccountServiceSuccess<T> | AccountServiceFailure;
|
|
34
|
+
export declare enum AccountStatus {
|
|
35
|
+
Unspecified = 0,
|
|
36
|
+
Inactive = 1,
|
|
37
|
+
Active = 2,
|
|
38
|
+
Disabled = 3,
|
|
39
|
+
Terminated = 4
|
|
40
|
+
}
|
|
41
|
+
export declare enum UserStatus {
|
|
42
|
+
active = 1,
|
|
43
|
+
inactive = 2
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/account/internal/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,WAAW,iBAAiB;IAC5B,cAAc,oBAAoB;CACnC;AAED,MAAM,MAAM,KAAK,GAAG,CAClB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,CAAE,SAAQ,kBAAkB;IAClE,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC,qBAAqB,CAAC,CAAC,CAAC,GACxB,qBAAqB,CAAC;AAG1B,oBAAY,aAAa;IACvB,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,UAAU,IAAI;CACf;AAGD,oBAAY,UAAU;IACpB,MAAM,IAAI;IACV,QAAQ,IAAI;CACb"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var types_ServiceName = /*#__PURE__*/ function(ServiceName) {
|
|
2
|
+
ServiceName["DEFAULT"] = "default";
|
|
3
|
+
ServiceName["UserService"] = "user-service";
|
|
4
|
+
ServiceName["SessionService"] = "session-service";
|
|
5
|
+
return ServiceName;
|
|
6
|
+
}({});
|
|
7
|
+
var types_AccountStatus = /*#__PURE__*/ function(AccountStatus) {
|
|
8
|
+
AccountStatus[AccountStatus["Unspecified"] = 0] = "Unspecified";
|
|
9
|
+
AccountStatus[AccountStatus["Inactive"] = 1] = "Inactive";
|
|
10
|
+
AccountStatus[AccountStatus["Active"] = 2] = "Active";
|
|
11
|
+
AccountStatus[AccountStatus["Disabled"] = 3] = "Disabled";
|
|
12
|
+
AccountStatus[AccountStatus["Terminated"] = 4] = "Terminated";
|
|
13
|
+
return AccountStatus;
|
|
14
|
+
}({});
|
|
15
|
+
var types_UserStatus = /*#__PURE__*/ function(UserStatus) {
|
|
16
|
+
UserStatus[UserStatus["active"] = 1] = "active";
|
|
17
|
+
UserStatus[UserStatus["inactive"] = 2] = "inactive";
|
|
18
|
+
return UserStatus;
|
|
19
|
+
}({});
|
|
20
|
+
export { types_AccountStatus as AccountStatus, types_ServiceName as ServiceName, types_UserStatus as UserStatus };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import BaseAccountService from '../../BaseAccountService';
|
|
2
|
+
import { type AccountServiceResponse, ServiceName } from '../../internal/types';
|
|
3
|
+
import type { SignInRedirectionOptions, UserInfoResponse } from './types';
|
|
4
|
+
export default class SessionService extends BaseAccountService {
|
|
5
|
+
serviceName: ServiceName;
|
|
6
|
+
/** Redirect to login page within app runtime environment. */
|
|
7
|
+
redirectToLogin(options?: SignInRedirectionOptions): AccountServiceResponse<'success'>;
|
|
8
|
+
/** Sign out current user session. */
|
|
9
|
+
signOut(): Promise<AccountServiceResponse<null>>;
|
|
10
|
+
/** Get current page URL with biz_source parameter */
|
|
11
|
+
getUrlWithBizSource(): string;
|
|
12
|
+
/** Gets the current user information if there is an existing session. */
|
|
13
|
+
getUserInfo(): Promise<AccountServiceResponse<UserInfoResponse>>;
|
|
14
|
+
/** Navigate to user profile page within app runtime environment. */
|
|
15
|
+
navigateToUserProfile(options?: {
|
|
16
|
+
newTab?: boolean;
|
|
17
|
+
}): {
|
|
18
|
+
data: null;
|
|
19
|
+
error: {
|
|
20
|
+
code: number;
|
|
21
|
+
message: string;
|
|
22
|
+
hint: string;
|
|
23
|
+
details: string;
|
|
24
|
+
};
|
|
25
|
+
status: number;
|
|
26
|
+
statusText: string;
|
|
27
|
+
} | {
|
|
28
|
+
data: string;
|
|
29
|
+
error: null;
|
|
30
|
+
status: number;
|
|
31
|
+
statusText: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/account/services/session-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,KAAK,sBAAsB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAGV,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAcjB,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,kBAAkB;IACnD,WAAW,cAA8B;IAElD,6DAA6D;IAC7D,eAAe,CACb,OAAO,CAAC,EAAE,wBAAwB,GACjC,sBAAsB,CAAC,SAAS,CAAC;IAqCpC,qCAAqC;IAC/B,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAyBtD,qDAAqD;IACrD,mBAAmB,IAAI,MAAM;IAkB7B,yEAAyE;IACnE,WAAW,IAAI,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAqDtE,oEAAoE;IACpE,qBAAqB,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;CA+BrD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import BaseAccountService from "../../BaseAccountService.js";
|
|
2
|
+
import { isBrowser } from "../../internal/helpers.js";
|
|
3
|
+
import { reportAccountException } from "../../internal/slardar.js";
|
|
4
|
+
import { ServiceName } from "../../internal/types.js";
|
|
5
|
+
const browserEnvError = {
|
|
6
|
+
data: null,
|
|
7
|
+
error: {
|
|
8
|
+
code: 400,
|
|
9
|
+
message: 'Incompatible runtime environment',
|
|
10
|
+
hint: 'Please check if the current environment is browser.',
|
|
11
|
+
details: 'This method can only be invoked in browser environment.'
|
|
12
|
+
},
|
|
13
|
+
status: 400,
|
|
14
|
+
statusText: 'Bad Request'
|
|
15
|
+
};
|
|
16
|
+
class SessionService extends BaseAccountService {
|
|
17
|
+
redirectToLogin(options) {
|
|
18
|
+
if (!isBrowser()) {
|
|
19
|
+
reportAccountException(browserEnvError.error, {
|
|
20
|
+
module: 'session-service',
|
|
21
|
+
method: 'redirectToLogin',
|
|
22
|
+
type: 'runtime'
|
|
23
|
+
});
|
|
24
|
+
console.log('[Account][SessionService.RedirectToLogin] authClient.session.redirectToLogin can only be invoked in browser environment.');
|
|
25
|
+
return browserEnvError;
|
|
26
|
+
}
|
|
27
|
+
const { returnUrl, newTab = false } = options ?? {};
|
|
28
|
+
const encodedRedirectUrl = encodeURIComponent(decodeURIComponent(returnUrl || window.location.href));
|
|
29
|
+
const isSparkFaasPath = window.location.pathname.startsWith('/spark');
|
|
30
|
+
const baseLoginUrl = isSparkFaasPath ? `/spark/faas/${this.appId}/runtime/page/login` : `/app/${this.appId}/runtime/page/login`;
|
|
31
|
+
const loginPageUrl = `${baseLoginUrl}?biz_source=${this.bizSource}&redirect_uri=${encodedRedirectUrl}`;
|
|
32
|
+
if (newTab) window.open(loginPageUrl, '_blank');
|
|
33
|
+
else window.location.href = loginPageUrl;
|
|
34
|
+
return {
|
|
35
|
+
data: 'success',
|
|
36
|
+
error: null,
|
|
37
|
+
status: 200,
|
|
38
|
+
statusText: 'OK'
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async signOut() {
|
|
42
|
+
if (!isBrowser()) {
|
|
43
|
+
reportAccountException(browserEnvError.error, {
|
|
44
|
+
module: 'session-service',
|
|
45
|
+
method: 'signOut',
|
|
46
|
+
type: 'runtime'
|
|
47
|
+
});
|
|
48
|
+
console.log('[Account][SessionService.SignOut] authClient.session.signOut can only be invoked in browser environment.');
|
|
49
|
+
return browserEnvError;
|
|
50
|
+
}
|
|
51
|
+
const location = this.getUrlWithBizSource();
|
|
52
|
+
return this.fetchData('/af/runtime/api/v1/account/logout', {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
body: {
|
|
55
|
+
appID: this.appId,
|
|
56
|
+
redirectURI: location
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
getUrlWithBizSource() {
|
|
61
|
+
if (!isBrowser()) {
|
|
62
|
+
reportAccountException(browserEnvError.error, {
|
|
63
|
+
module: 'session-service',
|
|
64
|
+
method: 'getUrlWithBizSource',
|
|
65
|
+
type: 'runtime'
|
|
66
|
+
});
|
|
67
|
+
console.log('[Account][SessionService.GetUrlWithBizSource] authClient.session.getUrlWithBizSource can only be invoked in browser environment.');
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
70
|
+
const currentUrl = new URL(window.location.href);
|
|
71
|
+
currentUrl.searchParams.set('biz_source', this.bizSource);
|
|
72
|
+
return currentUrl.toString();
|
|
73
|
+
}
|
|
74
|
+
async getUserInfo() {
|
|
75
|
+
if (!isBrowser()) {
|
|
76
|
+
reportAccountException(browserEnvError.error, {
|
|
77
|
+
module: 'session-service',
|
|
78
|
+
method: 'getUserInfo',
|
|
79
|
+
type: 'runtime'
|
|
80
|
+
});
|
|
81
|
+
console.log('[Account][SessionService.GetUserInfo] authClient.session.getUserInfo can only be invoked in browser environment.');
|
|
82
|
+
return Promise.resolve(browserEnvError);
|
|
83
|
+
}
|
|
84
|
+
const url = `/app/${this.appId}/__runtime__/api/v1/account/login/user`;
|
|
85
|
+
const urlObj = new URL(globalThis.location.href);
|
|
86
|
+
const pathSegments = urlObj.hostname.split('.');
|
|
87
|
+
const tenantDomainName = pathSegments[0] ?? '';
|
|
88
|
+
const response = await this.fetchData(url, {
|
|
89
|
+
method: 'POST',
|
|
90
|
+
body: {
|
|
91
|
+
appID: this.appId,
|
|
92
|
+
tenantDomainName
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const userInfoResponse = {
|
|
96
|
+
data: {
|
|
97
|
+
user_info: {
|
|
98
|
+
user_id: response.data?.userInfo?.userID,
|
|
99
|
+
name: response.data?.userInfo?.name,
|
|
100
|
+
avatar: response.data?.userInfo?.avatar,
|
|
101
|
+
email: response.data?.userInfo?.email,
|
|
102
|
+
phone_number: response.data?.userInfo?.desensitizedPhoneNumber
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
error: null,
|
|
106
|
+
status: response.status,
|
|
107
|
+
statusText: response.statusText
|
|
108
|
+
};
|
|
109
|
+
return userInfoResponse;
|
|
110
|
+
}
|
|
111
|
+
navigateToUserProfile(options) {
|
|
112
|
+
if (!isBrowser()) {
|
|
113
|
+
reportAccountException(browserEnvError.error, {
|
|
114
|
+
module: 'session-service',
|
|
115
|
+
method: 'navigateToUserProfile',
|
|
116
|
+
type: 'runtime'
|
|
117
|
+
});
|
|
118
|
+
console.log('[Account][SessionService.NavigateToUserProfile] authClient.session.navigateToUserProfile can only be invoked in browser environment.');
|
|
119
|
+
return browserEnvError;
|
|
120
|
+
}
|
|
121
|
+
const { newTab = false } = options ?? {};
|
|
122
|
+
const encodedReturnUrl = encodeURIComponent(window.location.href);
|
|
123
|
+
const profilePageUrl = `/suda/user?brand=${this.brandId}&returnUrl=${encodedReturnUrl}&appId=${this.appId}`;
|
|
124
|
+
if (newTab) window.open(profilePageUrl, '_blank');
|
|
125
|
+
else window.location.href = profilePageUrl;
|
|
126
|
+
return {
|
|
127
|
+
data: 'success',
|
|
128
|
+
error: null,
|
|
129
|
+
status: 200,
|
|
130
|
+
statusText: 'OK'
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
constructor(...args){
|
|
134
|
+
super(...args), this.serviceName = ServiceName.SessionService;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export { SessionService as default };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface I18n {
|
|
2
|
+
language_code: number;
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
export type I18ns = I18n[];
|
|
6
|
+
export interface Avatar {
|
|
7
|
+
source?: string;
|
|
8
|
+
image?: {
|
|
9
|
+
large?: string;
|
|
10
|
+
};
|
|
11
|
+
color?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SignInRedirectionOptions {
|
|
14
|
+
/** The URL to redirect to after a successful login. Defaults to the current URL. */
|
|
15
|
+
returnUrl?: string;
|
|
16
|
+
/** Whether to open the login page in a new tab. Defaults to `false`. */
|
|
17
|
+
newTab?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface UserBaseInfo {
|
|
20
|
+
user_id?: number;
|
|
21
|
+
name?: I18ns;
|
|
22
|
+
avatar?: Avatar;
|
|
23
|
+
email?: string;
|
|
24
|
+
phone_number?: string;
|
|
25
|
+
tenant_name?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface UserInfoResponse {
|
|
28
|
+
user_info?: UserBaseInfo;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/account/services/session-service/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;AAE3B,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B"}
|
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import BaseAccountService from '../../BaseAccountService';
|
|
2
|
+
import { type AccountServiceResponse, ServiceName } from '../../internal/types';
|
|
3
|
+
import type { SearchParams, UserResponse } from './types';
|
|
4
|
+
export default class UserService extends BaseAccountService {
|
|
5
|
+
serviceName: ServiceName;
|
|
6
|
+
search(params: SearchParams): Promise<AccountServiceResponse<UserResponse>>;
|
|
7
|
+
getByIds(ids: string[] | number[]): Promise<AccountServiceResponse<UserResponse>>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/account/services/user-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,KAAK,sBAAsB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAEV,YAAY,EAEZ,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,kBAAkB;IAChD,WAAW,cAA2B;IAEzC,MAAM,CACV,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAqC1C,QAAQ,CACZ,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GACvB,OAAO,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;CAkCjD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import BaseAccountService from "../../BaseAccountService.js";
|
|
2
|
+
import { convertUserStatus, retrieveNameFromI18n } from "../../internal/helpers.js";
|
|
3
|
+
import { ServiceName } from "../../internal/types.js";
|
|
4
|
+
class UserService extends BaseAccountService {
|
|
5
|
+
async search(params) {
|
|
6
|
+
const { name, pageSize } = params;
|
|
7
|
+
const res = await this.fetchData(`/app/${this.appId}/__runtime__/api/v1/account/search_user`, {
|
|
8
|
+
method: 'POST',
|
|
9
|
+
body: {
|
|
10
|
+
query: name,
|
|
11
|
+
page_size: pageSize
|
|
12
|
+
}
|
|
13
|
+
}, {
|
|
14
|
+
psmName: 'UserService.Search'
|
|
15
|
+
});
|
|
16
|
+
if (res.error) return res;
|
|
17
|
+
return {
|
|
18
|
+
...res,
|
|
19
|
+
data: {
|
|
20
|
+
user_list: res.data?.userList?.map((item)=>({
|
|
21
|
+
avatar: item.avatar ?? '',
|
|
22
|
+
email: item.email ?? '',
|
|
23
|
+
name: retrieveNameFromI18n(item.name) ?? '',
|
|
24
|
+
status: convertUserStatus(item.userStatus),
|
|
25
|
+
user_id: item.userID ?? ''
|
|
26
|
+
})) ?? []
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async getByIds(ids) {
|
|
31
|
+
const res = await this.fetchData(`/app/${this.appId}/__runtime__/api/v1/account/list_users`, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
body: {
|
|
34
|
+
userIDList: ids
|
|
35
|
+
}
|
|
36
|
+
}, {
|
|
37
|
+
psmName: 'UserService.GetByIds'
|
|
38
|
+
});
|
|
39
|
+
if (res.error) return res;
|
|
40
|
+
return {
|
|
41
|
+
...res,
|
|
42
|
+
data: {
|
|
43
|
+
user_list: ids.map((id)=>{
|
|
44
|
+
const item = res.data?.userInfoMap?.[id];
|
|
45
|
+
return {
|
|
46
|
+
avatar: item?.avatar?.image?.large ?? '',
|
|
47
|
+
email: item?.email ?? '',
|
|
48
|
+
name: retrieveNameFromI18n(item?.name) ?? '',
|
|
49
|
+
status: convertUserStatus(item?.userStatus),
|
|
50
|
+
user_id: item?.userID ? String(item.userID) : ''
|
|
51
|
+
};
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
constructor(...args){
|
|
57
|
+
super(...args), this.serviceName = ServiceName.UserService;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export { UserService as default };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AccountStatus, UserStatus } from '../../internal/types';
|
|
2
|
+
export type I18n = {
|
|
3
|
+
zh_cn: string;
|
|
4
|
+
en_us: string;
|
|
5
|
+
ja_jp: string;
|
|
6
|
+
};
|
|
7
|
+
export type SearchParams = {
|
|
8
|
+
name: string;
|
|
9
|
+
pageSize?: number;
|
|
10
|
+
};
|
|
11
|
+
export type User = {
|
|
12
|
+
user_id: string;
|
|
13
|
+
email: string;
|
|
14
|
+
name: string;
|
|
15
|
+
avatar: string;
|
|
16
|
+
status: UserStatus;
|
|
17
|
+
};
|
|
18
|
+
export type DepartmentEntity = {
|
|
19
|
+
departmentID: string;
|
|
20
|
+
larkDepartmentID: string;
|
|
21
|
+
name: I18n;
|
|
22
|
+
};
|
|
23
|
+
export type SearchUserEntity = {
|
|
24
|
+
userID: string;
|
|
25
|
+
larkUserID: string;
|
|
26
|
+
name: I18n;
|
|
27
|
+
avatar: string;
|
|
28
|
+
userType: string;
|
|
29
|
+
email: string;
|
|
30
|
+
userStatus: AccountStatus;
|
|
31
|
+
department: DepartmentEntity;
|
|
32
|
+
};
|
|
33
|
+
export type GetByIdUserEntity = {
|
|
34
|
+
userID: number;
|
|
35
|
+
larkUserID: number;
|
|
36
|
+
name: I18n;
|
|
37
|
+
avatar: {
|
|
38
|
+
source: string;
|
|
39
|
+
image?: {
|
|
40
|
+
large: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
userType: string;
|
|
44
|
+
email: string;
|
|
45
|
+
userStatus: AccountStatus;
|
|
46
|
+
department: DepartmentEntity;
|
|
47
|
+
};
|
|
48
|
+
export type UserResponse = {
|
|
49
|
+
user_list: User[];
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/account/services/user-service/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,MAAM,IAAI,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE;YACN,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,IAAI,EAAE,CAAC;CACnB,CAAC"}
|
|
File without changes
|
package/lib/index.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @lark-apaas/auth-sdk
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* 妙搭账户与鉴权 SDK:
|
|
5
|
+
* - 基于 CASL 的前端权限点鉴权(PermissionClient / AuthProvider / useCan)
|
|
6
|
+
* - 账户与会话能力(user / session services) — 见 ./account
|
|
6
7
|
*/
|
|
7
8
|
export type { PermissionApiResponse, PermissionApiConfig, PermissionPointData, AuthSdkConfig, } from './types';
|
|
8
9
|
export { ROLE_SUBJECT } from './ability-factory';
|
|
9
10
|
export { PermissionClient } from './permission-client';
|
|
10
11
|
export { AuthProvider, useAuth, Can, CanRole, useCan, AbilityContext, useUserPermissions, } from './AuthProvider';
|
|
11
12
|
export type { AuthProviderProps } from './AuthProvider';
|
|
13
|
+
export { AccountClient } from './account';
|
|
14
|
+
export type { AccountServiceResponse, AccountServiceError, SearchParams, User, UserResponse, SignInRedirectionOptions, UserBaseInfo, UserInfoResponse, Avatar, } from './account';
|
|
15
|
+
export { AccountStatus, UserStatus } from './account/internal/types';
|
|
16
|
+
import { AccountClient } from './account';
|
|
17
|
+
export declare const authClient: AccountClient;
|
|
12
18
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EACL,YAAY,EACZ,OAAO,EACP,GAAG,EACH,OAAO,EACP,MAAM,EACN,cAAc,EACd,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,eAAO,MAAM,UAAU,eAAsB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ROLE_SUBJECT } from "./ability-factory.js";
|
|
2
2
|
import { PermissionClient } from "./permission-client.js";
|
|
3
3
|
import { AbilityContext, AuthProvider, Can, CanRole, useAuth, useCan, useUserPermissions } from "./AuthProvider.js";
|
|
4
|
-
|
|
4
|
+
import { AccountClient } from "./account/index.js";
|
|
5
|
+
import { AccountStatus, UserStatus } from "./account/internal/types.js";
|
|
6
|
+
const authClient = new AccountClient();
|
|
7
|
+
export { AbilityContext, AccountClient, AccountStatus, AuthProvider, Can, CanRole, PermissionClient, ROLE_SUBJECT, UserStatus, authClient, useAuth, useCan, useUserPermissions };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/auth-sdk",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.5-alpha.0",
|
|
4
|
+
"description": "妙搭账户与鉴权 SDK:CASL 权限点 + 账户/会话能力",
|
|
5
5
|
"types": "./lib/index.d.ts",
|
|
6
6
|
"main": "./lib/index.js",
|
|
7
7
|
"module": "./lib/index.js",
|