@yoyoboot/yoyo-admin-core 10.5.5
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/dist/abp/application-configuration.d.ts +4 -0
- package/dist/abp/application-configuration.js +156 -0
- package/dist/abp/error.d.ts +7 -0
- package/dist/abp/error.js +65 -0
- package/dist/abp/index.d.ts +3 -0
- package/dist/abp/index.js +3 -0
- package/dist/abp/query.d.ts +16 -0
- package/dist/abp/query.js +21 -0
- package/dist/auth/auth.d.ts +13 -0
- package/dist/auth/auth.js +17 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/storage-contract.d.mts +10 -0
- package/dist/auth/storage-contract.mjs +25 -0
- package/dist/auth/storage.d.ts +40 -0
- package/dist/auth/storage.js +71 -0
- package/dist/contracts/generated/capability/feature-keys.d.ts +2 -0
- package/dist/contracts/generated/capability/feature-keys.js +11 -0
- package/dist/contracts/generated/capability/index.d.ts +2 -0
- package/dist/contracts/generated/capability/index.js +4 -0
- package/dist/contracts/generated/capability/permission-keys.d.ts +2 -0
- package/dist/contracts/generated/capability/permission-keys.js +106 -0
- package/dist/contracts/index.d.ts +8 -0
- package/dist/contracts/index.js +8 -0
- package/dist/contracts/mappers.d.ts +4 -0
- package/dist/contracts/mappers.js +40 -0
- package/dist/contracts/models.d.ts +68 -0
- package/dist/contracts/models.js +1 -0
- package/dist/contracts/page.d.ts +28 -0
- package/dist/contracts/page.js +44 -0
- package/dist/contracts/runtime/datasource.d.ts +109 -0
- package/dist/contracts/runtime/datasource.js +89 -0
- package/dist/contracts/runtime/error.d.ts +23 -0
- package/dist/contracts/runtime/error.js +54 -0
- package/dist/contracts/runtime/mutation.d.ts +49 -0
- package/dist/contracts/runtime/mutation.js +12 -0
- package/dist/contracts/runtime/policy.d.ts +16 -0
- package/dist/contracts/runtime/policy.js +10 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/temporal/index.d.ts +21 -0
- package/dist/temporal/index.js +78 -0
- package/package.json +30 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ApplicationConfigurationState } from "../contracts/index.js";
|
|
2
|
+
export declare function mapApplicationConfiguration(input: unknown): ApplicationConfigurationState;
|
|
3
|
+
export declare function hasGrantedPolicy(configuration: ApplicationConfigurationState, permission: string): boolean;
|
|
4
|
+
export declare function getGrantedPolicyNames(configuration: ApplicationConfigurationState): string[];
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { createEmptyApplicationConfiguration, hasPermission, listGrantedPolicies, } from "../contracts/index.js";
|
|
2
|
+
export function mapApplicationConfiguration(input) {
|
|
3
|
+
const fallback = createEmptyApplicationConfiguration();
|
|
4
|
+
const dto = asRecord(input);
|
|
5
|
+
if (!dto) {
|
|
6
|
+
return fallback;
|
|
7
|
+
}
|
|
8
|
+
const currentUserDto = asRecord(dto.currentUser);
|
|
9
|
+
const currentUser = {
|
|
10
|
+
id: asString(currentUserDto?.id) ?? "",
|
|
11
|
+
userName: asString(currentUserDto?.userName) ?? "",
|
|
12
|
+
name: asString(currentUserDto?.name) ??
|
|
13
|
+
asString(currentUserDto?.userName) ??
|
|
14
|
+
fallback.currentUser.name,
|
|
15
|
+
surname: asString(currentUserDto?.surname) ?? "",
|
|
16
|
+
email: asString(currentUserDto?.email) ?? "",
|
|
17
|
+
title: asString(currentUserDto?.title) ?? "Yoyo Admin Operator",
|
|
18
|
+
initials: asString(currentUserDto?.initials) ??
|
|
19
|
+
buildInitials(asString(currentUserDto?.name), asString(currentUserDto?.surname)),
|
|
20
|
+
isAuthenticated: asBoolean(currentUserDto?.isAuthenticated) ?? false,
|
|
21
|
+
};
|
|
22
|
+
const currentTenantDto = asRecord(dto.currentTenant);
|
|
23
|
+
const tenancyName = asString(currentTenantDto?.tenancyName);
|
|
24
|
+
const currentTenant = {
|
|
25
|
+
id: asString(currentTenantDto?.id) ?? "",
|
|
26
|
+
name: asString(currentTenantDto?.name) ?? fallback.currentTenant.name,
|
|
27
|
+
...(tenancyName === undefined ? {} : { tenancyName }),
|
|
28
|
+
plan: asString(currentTenantDto?.plan) ?? fallback.currentTenant.plan,
|
|
29
|
+
environment: asString(currentTenantDto?.environment) ??
|
|
30
|
+
fallback.currentTenant.environment,
|
|
31
|
+
};
|
|
32
|
+
const identitySwitchDto = asRecord(dto.identitySwitch);
|
|
33
|
+
const rawIdentitySwitchMode = asString(identitySwitchDto?.mode);
|
|
34
|
+
const identitySwitchMode = rawIdentitySwitchMode === "impersonated" ||
|
|
35
|
+
rawIdentitySwitchMode === "delegated" ||
|
|
36
|
+
rawIdentitySwitchMode === "linked"
|
|
37
|
+
? rawIdentitySwitchMode
|
|
38
|
+
: "normal";
|
|
39
|
+
const sourceUserId = asString(identitySwitchDto?.sourceUserId);
|
|
40
|
+
const sourceTenantId = asString(identitySwitchDto?.sourceTenantId);
|
|
41
|
+
const timingDto = asRecord(dto.timing);
|
|
42
|
+
const modules = asArray(dto.modules).map((module) => {
|
|
43
|
+
const moduleDto = asRecord(module);
|
|
44
|
+
return {
|
|
45
|
+
moduleKey: asString(moduleDto?.moduleKey) ?? "",
|
|
46
|
+
permissions: asStringArray(moduleDto?.permissions),
|
|
47
|
+
features: asStringArray(moduleDto?.features),
|
|
48
|
+
navigation: asArray(moduleDto?.navigation).map((item) => {
|
|
49
|
+
const navigationDto = asRecord(item);
|
|
50
|
+
const permission = asString(navigationDto?.permission);
|
|
51
|
+
const feature = asString(navigationDto?.feature);
|
|
52
|
+
return {
|
|
53
|
+
routeName: asString(navigationDto?.routeName) ?? "",
|
|
54
|
+
pageKey: asString(navigationDto?.pageKey) ?? "",
|
|
55
|
+
menuKey: asString(navigationDto?.menuKey) ?? "",
|
|
56
|
+
title: asString(navigationDto?.title) ?? "",
|
|
57
|
+
group: asString(navigationDto?.group) ?? "",
|
|
58
|
+
...(permission === undefined ? {} : { permission }),
|
|
59
|
+
...(feature === undefined ? {} : { feature }),
|
|
60
|
+
};
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
const managedMenus = asArray(dto.managedMenus).map((item) => {
|
|
65
|
+
const menu = asRecord(item);
|
|
66
|
+
const parentMenuKey = asString(menu?.parentMenuKey);
|
|
67
|
+
const title = asString(menu?.title);
|
|
68
|
+
const description = asString(menu?.description);
|
|
69
|
+
const group = asString(menu?.group);
|
|
70
|
+
const subGroup = asString(menu?.subGroup);
|
|
71
|
+
const order = asNumber(menu?.order);
|
|
72
|
+
return {
|
|
73
|
+
menuKey: asString(menu?.menuKey) ?? "",
|
|
74
|
+
routeName: asString(menu?.routeName) ?? "",
|
|
75
|
+
pageKey: asString(menu?.pageKey) ?? "",
|
|
76
|
+
...(parentMenuKey === undefined ? {} : { parentMenuKey }),
|
|
77
|
+
...(title === undefined ? {} : { title }),
|
|
78
|
+
...(description === undefined ? {} : { description }),
|
|
79
|
+
...(group === undefined ? {} : { group }),
|
|
80
|
+
...(subGroup === undefined ? {} : { subGroup }),
|
|
81
|
+
...(order === undefined ? {} : { order }),
|
|
82
|
+
isEnabled: asBoolean(menu?.isEnabled) ?? true,
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
currentUser,
|
|
87
|
+
currentTenant,
|
|
88
|
+
identitySwitch: {
|
|
89
|
+
mode: identitySwitchMode,
|
|
90
|
+
...(sourceUserId ? { sourceUserId } : {}),
|
|
91
|
+
...(sourceTenantId ? { sourceTenantId } : {}),
|
|
92
|
+
canReturn: identitySwitchMode !== "normal" && Boolean(sourceUserId)
|
|
93
|
+
? (asBoolean(identitySwitchDto?.canReturn) ?? false)
|
|
94
|
+
: false,
|
|
95
|
+
},
|
|
96
|
+
timing: {
|
|
97
|
+
timeZoneSettingId: asString(timingDto?.timeZoneSettingId) ?? fallback.timing.timeZoneSettingId,
|
|
98
|
+
timeZoneIana: asString(timingDto?.timeZoneIana) ?? fallback.timing.timeZoneIana,
|
|
99
|
+
},
|
|
100
|
+
grantedPolicies: asBooleanRecord(dto.grantedPolicies),
|
|
101
|
+
settings: asStringRecord(dto.settings),
|
|
102
|
+
features: asRecord(dto.features) ?? {},
|
|
103
|
+
localization: asRecord(dto.localization) ?? {},
|
|
104
|
+
modules,
|
|
105
|
+
managedMenus,
|
|
106
|
+
themePreference: "system",
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export function hasGrantedPolicy(configuration, permission) {
|
|
110
|
+
return hasPermission(configuration.grantedPolicies, permission);
|
|
111
|
+
}
|
|
112
|
+
export function getGrantedPolicyNames(configuration) {
|
|
113
|
+
return listGrantedPolicies(configuration.grantedPolicies);
|
|
114
|
+
}
|
|
115
|
+
function buildInitials(name, surname) {
|
|
116
|
+
const seed = `${name ?? ""}${surname ?? ""}`.replace(/[^a-zA-Z0-9]/g, "");
|
|
117
|
+
return (seed.slice(0, 2) || "YA").toUpperCase();
|
|
118
|
+
}
|
|
119
|
+
function asRecord(value) {
|
|
120
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
121
|
+
? value
|
|
122
|
+
: undefined;
|
|
123
|
+
}
|
|
124
|
+
function asArray(value) {
|
|
125
|
+
return Array.isArray(value) ? value : [];
|
|
126
|
+
}
|
|
127
|
+
function asString(value) {
|
|
128
|
+
return typeof value === "string" ? value : undefined;
|
|
129
|
+
}
|
|
130
|
+
function asBoolean(value) {
|
|
131
|
+
return typeof value === "boolean" ? value : undefined;
|
|
132
|
+
}
|
|
133
|
+
function asNumber(value) {
|
|
134
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
135
|
+
}
|
|
136
|
+
function asStringArray(value) {
|
|
137
|
+
return asArray(value).filter((item) => typeof item === "string");
|
|
138
|
+
}
|
|
139
|
+
function asBooleanRecord(value) {
|
|
140
|
+
const result = {};
|
|
141
|
+
for (const [key, item] of Object.entries(asRecord(value) ?? {})) {
|
|
142
|
+
if (typeof item === "boolean") {
|
|
143
|
+
result[key] = item;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
function asStringRecord(value) {
|
|
149
|
+
const result = {};
|
|
150
|
+
for (const [key, item] of Object.entries(asRecord(value) ?? {})) {
|
|
151
|
+
if (typeof item === "string") {
|
|
152
|
+
result[key] = item;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export function normalizeAbpError(error) {
|
|
2
|
+
const payload = extractErrorPayload(error);
|
|
3
|
+
const abpError = payload?.error ?? {};
|
|
4
|
+
return {
|
|
5
|
+
status: readStatus(error),
|
|
6
|
+
message: typeof abpError.message === 'string' && abpError.message.trim()
|
|
7
|
+
? abpError.message
|
|
8
|
+
: error instanceof Error && error.message.trim()
|
|
9
|
+
? error.message
|
|
10
|
+
: '请求失败,请稍后重试。',
|
|
11
|
+
validationErrors: collectValidationErrors(abpError.validationErrors),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function collectValidationErrors(rawValidationErrors) {
|
|
15
|
+
const result = {};
|
|
16
|
+
for (const entry of Array.isArray(rawValidationErrors) ? rawValidationErrors : []) {
|
|
17
|
+
const message = typeof entry.message === 'string' ? entry.message : '';
|
|
18
|
+
if (!message) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const members = Array.isArray(entry.members) ? entry.members.filter((member) => typeof member === 'string') : [];
|
|
22
|
+
if (members.length === 0) {
|
|
23
|
+
pushValidationMessage(result, '__global', message);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
for (const member of members) {
|
|
27
|
+
pushValidationMessage(result, member, message);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
function pushValidationMessage(result, member, message) {
|
|
33
|
+
if (!result[member]) {
|
|
34
|
+
result[member] = [];
|
|
35
|
+
}
|
|
36
|
+
result[member].push(message);
|
|
37
|
+
}
|
|
38
|
+
function extractErrorPayload(error) {
|
|
39
|
+
if (!error || typeof error !== 'object') {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const directResult = 'result' in error && isRecord(error.result) ? error.result : null;
|
|
43
|
+
if (directResult) {
|
|
44
|
+
return directResult;
|
|
45
|
+
}
|
|
46
|
+
const responseText = 'response' in error && typeof error.response === 'string' ? error.response : '';
|
|
47
|
+
if (!responseText) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
return JSON.parse(responseText);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function readStatus(error) {
|
|
58
|
+
if (error && typeof error === 'object' && 'status' in error && typeof error.status === 'number') {
|
|
59
|
+
return error.status;
|
|
60
|
+
}
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
function isRecord(value) {
|
|
64
|
+
return typeof value === 'object' && value !== null;
|
|
65
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface YAbpPageQueryInput {
|
|
2
|
+
page?: number;
|
|
3
|
+
pageSize?: number;
|
|
4
|
+
keyword?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface YAbpSortColumn {
|
|
7
|
+
key: string;
|
|
8
|
+
sortKey?: string;
|
|
9
|
+
sortable?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface YAbpSortState {
|
|
12
|
+
key: string;
|
|
13
|
+
direction: 'asc' | 'desc';
|
|
14
|
+
}
|
|
15
|
+
export declare function toAbpPageQuery(input: YAbpPageQueryInput): YAbpPageQueryInput;
|
|
16
|
+
export declare function toAbpSorting(columns: readonly YAbpSortColumn[], sort?: YAbpSortState | null): string | undefined;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function toAbpPageQuery(input) {
|
|
2
|
+
const keyword = input.keyword?.trim();
|
|
3
|
+
return {
|
|
4
|
+
page: normalizePositiveInteger(input.page),
|
|
5
|
+
pageSize: normalizePositiveInteger(input.pageSize),
|
|
6
|
+
...(keyword ? { keyword } : {}),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function toAbpSorting(columns, sort) {
|
|
10
|
+
if (!sort)
|
|
11
|
+
return undefined;
|
|
12
|
+
const column = columns.find((candidate) => candidate.key === sort.key);
|
|
13
|
+
if (!column || column.sortable === false)
|
|
14
|
+
return undefined;
|
|
15
|
+
return `${column.sortKey ?? column.key} ${sort.direction}`;
|
|
16
|
+
}
|
|
17
|
+
function normalizePositiveInteger(value) {
|
|
18
|
+
if (!Number.isFinite(value) || !value || value < 1)
|
|
19
|
+
return 1;
|
|
20
|
+
return Math.trunc(value);
|
|
21
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type StorageLike } from './storage.js';
|
|
2
|
+
/** Host-neutral hooks for an authenticated transport adapter. */
|
|
3
|
+
export interface AuthorizedTransportOptions {
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
storage?: StorageLike;
|
|
6
|
+
fetch?: typeof fetch;
|
|
7
|
+
onUnauthorized?: () => void;
|
|
8
|
+
onForbidden?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveApiBaseUrl(primary?: string, fallback?: string): string;
|
|
11
|
+
export declare function signOut(storage?: StorageLike): void;
|
|
12
|
+
export declare function syncTenantContext(value: string | null | undefined, storage?: StorageLike): void;
|
|
13
|
+
export declare function isAuthenticated(storage?: StorageLike): boolean;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { clearAuthState, clearTenantContext, hasAccessToken, writeTenantContext, } from './storage.js';
|
|
2
|
+
export function resolveApiBaseUrl(primary, fallback) {
|
|
3
|
+
return (primary || fallback || '/api').replace(/\/+$/, '');
|
|
4
|
+
}
|
|
5
|
+
export function signOut(storage) {
|
|
6
|
+
clearAuthState(storage);
|
|
7
|
+
}
|
|
8
|
+
export function syncTenantContext(value, storage) {
|
|
9
|
+
if (value) {
|
|
10
|
+
writeTenantContext(value, storage);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
clearTenantContext(storage);
|
|
14
|
+
}
|
|
15
|
+
export function isAuthenticated(storage) {
|
|
16
|
+
return hasAccessToken(storage);
|
|
17
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function createAuthTokenPair(input: any, now?: number): {
|
|
2
|
+
accessToken: any;
|
|
3
|
+
refreshToken: any;
|
|
4
|
+
accessTokenExpiresAt: any;
|
|
5
|
+
refreshTokenExpiresAt: any;
|
|
6
|
+
};
|
|
7
|
+
export function serializeAuthTokenPair(value: any): string;
|
|
8
|
+
export const ACCESS_TOKEN_STORAGE_KEY: "yoyo-admin.access-token";
|
|
9
|
+
export const AUTH_TOKEN_PAIR_STORAGE_KEY: "yoyo-admin.auth-token-pair";
|
|
10
|
+
export const TENANT_CONTEXT_STORAGE_KEY: "yoyo-admin.tenant-context";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const ACCESS_TOKEN_STORAGE_KEY = 'yoyo-admin.access-token';
|
|
2
|
+
export const AUTH_TOKEN_PAIR_STORAGE_KEY = 'yoyo-admin.auth-token-pair';
|
|
3
|
+
export const TENANT_CONTEXT_STORAGE_KEY = 'yoyo-admin.tenant-context';
|
|
4
|
+
export function createAuthTokenPair(input, now = Date.now()) {
|
|
5
|
+
return {
|
|
6
|
+
accessToken: requiredText(input.accessToken, 'accessToken'),
|
|
7
|
+
refreshToken: requiredText(input.refreshToken, 'refreshToken'),
|
|
8
|
+
accessTokenExpiresAt: expiresAt(now, input.accessTokenExpireInSeconds, 'accessTokenExpireInSeconds'),
|
|
9
|
+
refreshTokenExpiresAt: expiresAt(now, input.refreshTokenExpireInSeconds, 'refreshTokenExpireInSeconds'),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function serializeAuthTokenPair(value) {
|
|
13
|
+
return JSON.stringify(value);
|
|
14
|
+
}
|
|
15
|
+
function requiredText(value, name) {
|
|
16
|
+
const normalized = value.trim();
|
|
17
|
+
if (!normalized)
|
|
18
|
+
throw new TypeError(`${name} is required`);
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
function expiresAt(now, seconds, name) {
|
|
22
|
+
if (!Number.isFinite(seconds) || seconds <= 0)
|
|
23
|
+
throw new TypeError(`${name} must be positive`);
|
|
24
|
+
return now + seconds * 1_000;
|
|
25
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface StorageLike {
|
|
2
|
+
getItem(key: string): string | null;
|
|
3
|
+
setItem(key: string, value: string): void;
|
|
4
|
+
removeItem(key: string): void;
|
|
5
|
+
}
|
|
6
|
+
export { ACCESS_TOKEN_STORAGE_KEY, AUTH_TOKEN_PAIR_STORAGE_KEY, TENANT_CONTEXT_STORAGE_KEY, createAuthTokenPair, serializeAuthTokenPair, } from './storage-contract.mjs';
|
|
7
|
+
export interface AuthTokenPair {
|
|
8
|
+
accessToken: string;
|
|
9
|
+
refreshToken: string;
|
|
10
|
+
accessTokenExpiresAt: number;
|
|
11
|
+
refreshTokenExpiresAt: number;
|
|
12
|
+
}
|
|
13
|
+
export interface CreateAuthTokenPairInput {
|
|
14
|
+
accessToken: string;
|
|
15
|
+
refreshToken: string;
|
|
16
|
+
accessTokenExpireInSeconds: number;
|
|
17
|
+
refreshTokenExpireInSeconds: number;
|
|
18
|
+
}
|
|
19
|
+
export type AuthTokenState = {
|
|
20
|
+
status: 'anonymous';
|
|
21
|
+
} | {
|
|
22
|
+
status: 'access-valid';
|
|
23
|
+
tokenPair: AuthTokenPair;
|
|
24
|
+
} | {
|
|
25
|
+
status: 'access-expired';
|
|
26
|
+
tokenPair: AuthTokenPair;
|
|
27
|
+
} | {
|
|
28
|
+
status: 'refresh-expired';
|
|
29
|
+
tokenPair: AuthTokenPair;
|
|
30
|
+
};
|
|
31
|
+
export declare function readAuthTokenPair(storage?: StorageLike): AuthTokenPair | null;
|
|
32
|
+
export declare function writeAuthTokenPair(value: AuthTokenPair, storage?: StorageLike): void;
|
|
33
|
+
export declare function resolveAuthTokenState(storage?: StorageLike, now?: number): AuthTokenState;
|
|
34
|
+
export declare function readAccessToken(storage?: StorageLike): string | null;
|
|
35
|
+
export declare function writeAccessToken(value: string, storage?: StorageLike): void;
|
|
36
|
+
export declare function readTenantContext(storage?: StorageLike): string | null;
|
|
37
|
+
export declare function writeTenantContext(value: string, storage?: StorageLike): void;
|
|
38
|
+
export declare function clearTenantContext(storage?: StorageLike): void;
|
|
39
|
+
export declare function clearAuthState(storage?: StorageLike): void;
|
|
40
|
+
export declare function hasAccessToken(storage?: StorageLike): boolean;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ACCESS_TOKEN_STORAGE_KEY, AUTH_TOKEN_PAIR_STORAGE_KEY, TENANT_CONTEXT_STORAGE_KEY, serializeAuthTokenPair, } from './storage-contract.mjs';
|
|
2
|
+
export { ACCESS_TOKEN_STORAGE_KEY, AUTH_TOKEN_PAIR_STORAGE_KEY, TENANT_CONTEXT_STORAGE_KEY, createAuthTokenPair, serializeAuthTokenPair, } from './storage-contract.mjs';
|
|
3
|
+
export function readAuthTokenPair(storage) {
|
|
4
|
+
const serialized = getStorage(storage)?.getItem(AUTH_TOKEN_PAIR_STORAGE_KEY);
|
|
5
|
+
if (!serialized)
|
|
6
|
+
return null;
|
|
7
|
+
try {
|
|
8
|
+
const candidate = JSON.parse(serialized);
|
|
9
|
+
if (typeof candidate.accessToken !== 'string' ||
|
|
10
|
+
!candidate.accessToken ||
|
|
11
|
+
typeof candidate.refreshToken !== 'string' ||
|
|
12
|
+
!candidate.refreshToken ||
|
|
13
|
+
!isExpiry(candidate.accessTokenExpiresAt) ||
|
|
14
|
+
!isExpiry(candidate.refreshTokenExpiresAt)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return candidate;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function writeAuthTokenPair(value, storage) {
|
|
24
|
+
getStorage(storage)?.setItem(AUTH_TOKEN_PAIR_STORAGE_KEY, serializeAuthTokenPair(value));
|
|
25
|
+
}
|
|
26
|
+
export function resolveAuthTokenState(storage, now = Date.now()) {
|
|
27
|
+
const tokenPair = readAuthTokenPair(storage);
|
|
28
|
+
if (!tokenPair)
|
|
29
|
+
return { status: 'anonymous' };
|
|
30
|
+
if (tokenPair.refreshTokenExpiresAt <= now)
|
|
31
|
+
return { status: 'refresh-expired', tokenPair };
|
|
32
|
+
if (tokenPair.accessTokenExpiresAt <= now)
|
|
33
|
+
return { status: 'access-expired', tokenPair };
|
|
34
|
+
return { status: 'access-valid', tokenPair };
|
|
35
|
+
}
|
|
36
|
+
export function readAccessToken(storage) {
|
|
37
|
+
return readAuthTokenPair(storage)?.accessToken ?? getStorage(storage)?.getItem(ACCESS_TOKEN_STORAGE_KEY) ?? null;
|
|
38
|
+
}
|
|
39
|
+
export function writeAccessToken(value, storage) {
|
|
40
|
+
getStorage(storage)?.setItem(ACCESS_TOKEN_STORAGE_KEY, value);
|
|
41
|
+
}
|
|
42
|
+
export function readTenantContext(storage) {
|
|
43
|
+
return getStorage(storage)?.getItem(TENANT_CONTEXT_STORAGE_KEY) ?? null;
|
|
44
|
+
}
|
|
45
|
+
export function writeTenantContext(value, storage) {
|
|
46
|
+
getStorage(storage)?.setItem(TENANT_CONTEXT_STORAGE_KEY, value);
|
|
47
|
+
}
|
|
48
|
+
export function clearTenantContext(storage) {
|
|
49
|
+
getStorage(storage)?.removeItem(TENANT_CONTEXT_STORAGE_KEY);
|
|
50
|
+
}
|
|
51
|
+
export function clearAuthState(storage) {
|
|
52
|
+
const target = getStorage(storage);
|
|
53
|
+
target?.removeItem(AUTH_TOKEN_PAIR_STORAGE_KEY);
|
|
54
|
+
target?.removeItem(ACCESS_TOKEN_STORAGE_KEY);
|
|
55
|
+
target?.removeItem(TENANT_CONTEXT_STORAGE_KEY);
|
|
56
|
+
}
|
|
57
|
+
export function hasAccessToken(storage) {
|
|
58
|
+
return Boolean(readAccessToken(storage));
|
|
59
|
+
}
|
|
60
|
+
function getStorage(storage) {
|
|
61
|
+
if (storage) {
|
|
62
|
+
return storage;
|
|
63
|
+
}
|
|
64
|
+
if (typeof globalThis.localStorage !== 'undefined') {
|
|
65
|
+
return globalThis.localStorage;
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
function isExpiry(value) {
|
|
70
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0;
|
|
71
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const yoyoAdminFeatureKeys: readonly ["YoyoAdmin.Chat", "YoyoAdmin.Chat.TenantToHost", "YoyoAdmin.Chat.TenantToTenant", "YoyoAdmin.Languages.Dynamic", "YoyoAdmin.Notifications.BatchSend", "YoyoAdmin.Subscription.Analytics"];
|
|
2
|
+
export type YoyoAdminFeatureKey = (typeof yoyoAdminFeatureKeys)[number];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// <auto-generated />
|
|
2
|
+
// DO NOT EDIT. Run Yoyo.Admin.CapabilityExporter to regenerate.
|
|
3
|
+
// schemaVersion: 1.0.0; generatorVersion: 1.0.0; sourceHash: a66e1c47f5e8252d3cefd5236f966d96273fd4481a6de3b24f0c8c157268f92e
|
|
4
|
+
export const yoyoAdminFeatureKeys = [
|
|
5
|
+
"YoyoAdmin.Chat",
|
|
6
|
+
"YoyoAdmin.Chat.TenantToHost",
|
|
7
|
+
"YoyoAdmin.Chat.TenantToTenant",
|
|
8
|
+
"YoyoAdmin.Languages.Dynamic",
|
|
9
|
+
"YoyoAdmin.Notifications.BatchSend",
|
|
10
|
+
"YoyoAdmin.Subscription.Analytics",
|
|
11
|
+
];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const yoyoAdminPermissionKeys: readonly ["Pages", "Pages.Administration", "Pages.Administration.ApplicationConfiguration", "Pages.Administration.AuditLogs", "Pages.Administration.AuditLogs.EntityChanges", "Pages.Administration.AuditLogs.Export", "Pages.Administration.AuditLogs.Query", "Pages.Administration.AuthenticationSecurity", "Pages.Administration.AuthenticationSecurity.ManageHostPolicy", "Pages.Administration.AuthenticationSecurity.ManageTenantPolicy", "Pages.Administration.BasicData", "Pages.Administration.BasicData.MeasuringUnits", "Pages.Administration.BasicData.MeasuringUnits.Create", "Pages.Administration.BasicData.MeasuringUnits.Delete", "Pages.Administration.BasicData.MeasuringUnits.Edit", "Pages.Administration.BasicData.MeasuringUnits.Query", "Pages.Administration.Dashboard", "Pages.Administration.DynamicProperties", "Pages.Administration.DynamicProperties.Create", "Pages.Administration.DynamicProperties.Delete", "Pages.Administration.DynamicProperties.Edit", "Pages.Administration.Editions", "Pages.Administration.Editions.Create", "Pages.Administration.Editions.Delete", "Pages.Administration.Editions.Edit", "Pages.Administration.Editions.ManageFeatures", "Pages.Administration.Editions.MoveTenantsToAnotherEdition", "Pages.Administration.Editions.Query", "Pages.Administration.HostDashboard", "Pages.Administration.HostMaintenance", "Pages.Administration.HostMaintenance.Caching", "Pages.Administration.HostMaintenance.Logs", "Pages.Administration.HostMaintenance.Logs.Download", "Pages.Administration.Identity", "Pages.Administration.Identity.Roles", "Pages.Administration.Identity.Roles.ChangePermissions", "Pages.Administration.Identity.Roles.Create", "Pages.Administration.Identity.Roles.Delete", "Pages.Administration.Identity.Roles.Edit", "Pages.Administration.Identity.Roles.Query", "Pages.Administration.Identity.Users", "Pages.Administration.Identity.Users.ChangePermissions", "Pages.Administration.Identity.Users.Create", "Pages.Administration.Identity.Users.Delete", "Pages.Administration.Identity.Users.Edit", "Pages.Administration.Identity.Users.Impersonation", "Pages.Administration.Identity.Users.Query", "Pages.Administration.Identity.Users.ResetPassword", "Pages.Administration.Identity.Users.Unlock", "Pages.Administration.Languages", "Pages.Administration.Languages.Edit", "Pages.Administration.Languages.Query", "Pages.Administration.LoginLogs", "Pages.Administration.LoginLogs.Query", "Pages.Administration.LoginLogs.Statistics", "Pages.Administration.ManagedMenus", "Pages.Administration.Notifications", "Pages.Administration.Notifications.BatchRetry", "Pages.Administration.Notifications.BatchSend", "Pages.Administration.Notifications.ManageSettings", "Pages.Administration.Notifications.SystemInbox", "Pages.Administration.Notifications.UserInbox", "Pages.Administration.OrganizationUnits", "Pages.Administration.OrganizationUnits.ManageRoles", "Pages.Administration.OrganizationUnits.ManageTree", "Pages.Administration.OrganizationUnits.ManageUsers", "Pages.Administration.OrganizationUnits.Query", "Pages.Administration.Settings", "Pages.Administration.Settings.Host", "Pages.Administration.Settings.Tenant", "Pages.Administration.Tenant.SubscriptionManagement", "Pages.Administration.TenantDashboard", "Pages.Administration.Tenants", "Pages.Administration.Tenants.ChangeFeatures", "Pages.Administration.Tenants.Create", "Pages.Administration.Tenants.Delete", "Pages.Administration.Tenants.Edit", "Pages.Administration.Tenants.Export", "Pages.Administration.Tenants.Impersonation", "Pages.Administration.Tenants.InitializeAdmin", "Pages.Administration.Tenants.ProcessSubscriptionExpirations", "Pages.Administration.Tenants.Query", "Pages.Administration.WebHooks", "Pages.Administration.WebHooks.Attempts", "Pages.Administration.WebHooks.Create", "Pages.Administration.WebHooks.Delete", "Pages.Administration.WebHooks.Edit", "Pages.Administration.WebHooks.Resend", "Pages.PhoneBook", "Pages.PhoneBook.Person", "Pages.PhoneBook.Person.Create", "Pages.PhoneBook.Person.Delete", "Pages.PhoneBook.Person.Edit", "Pages.PhoneBook.Person.Query", "Pages.Tools", "Pages.Tools.ChatwootTester", "Pages.Tools.DomainMonitor", "Pages.Tools.DomainMonitor.History", "Pages.Tools.DomainMonitor.ManageLines", "Pages.Tools.DomainMonitor.Run", "Pages.Tools.DomainMonitor.Settings"];
|
|
2
|
+
export type YoyoAdminPermissionKey = (typeof yoyoAdminPermissionKeys)[number];
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// <auto-generated />
|
|
2
|
+
// DO NOT EDIT. Run Yoyo.Admin.CapabilityExporter to regenerate.
|
|
3
|
+
// schemaVersion: 1.0.0; generatorVersion: 1.0.0; sourceHash: a66e1c47f5e8252d3cefd5236f966d96273fd4481a6de3b24f0c8c157268f92e
|
|
4
|
+
export const yoyoAdminPermissionKeys = [
|
|
5
|
+
"Pages",
|
|
6
|
+
"Pages.Administration",
|
|
7
|
+
"Pages.Administration.ApplicationConfiguration",
|
|
8
|
+
"Pages.Administration.AuditLogs",
|
|
9
|
+
"Pages.Administration.AuditLogs.EntityChanges",
|
|
10
|
+
"Pages.Administration.AuditLogs.Export",
|
|
11
|
+
"Pages.Administration.AuditLogs.Query",
|
|
12
|
+
"Pages.Administration.AuthenticationSecurity",
|
|
13
|
+
"Pages.Administration.AuthenticationSecurity.ManageHostPolicy",
|
|
14
|
+
"Pages.Administration.AuthenticationSecurity.ManageTenantPolicy",
|
|
15
|
+
"Pages.Administration.BasicData",
|
|
16
|
+
"Pages.Administration.BasicData.MeasuringUnits",
|
|
17
|
+
"Pages.Administration.BasicData.MeasuringUnits.Create",
|
|
18
|
+
"Pages.Administration.BasicData.MeasuringUnits.Delete",
|
|
19
|
+
"Pages.Administration.BasicData.MeasuringUnits.Edit",
|
|
20
|
+
"Pages.Administration.BasicData.MeasuringUnits.Query",
|
|
21
|
+
"Pages.Administration.Dashboard",
|
|
22
|
+
"Pages.Administration.DynamicProperties",
|
|
23
|
+
"Pages.Administration.DynamicProperties.Create",
|
|
24
|
+
"Pages.Administration.DynamicProperties.Delete",
|
|
25
|
+
"Pages.Administration.DynamicProperties.Edit",
|
|
26
|
+
"Pages.Administration.Editions",
|
|
27
|
+
"Pages.Administration.Editions.Create",
|
|
28
|
+
"Pages.Administration.Editions.Delete",
|
|
29
|
+
"Pages.Administration.Editions.Edit",
|
|
30
|
+
"Pages.Administration.Editions.ManageFeatures",
|
|
31
|
+
"Pages.Administration.Editions.MoveTenantsToAnotherEdition",
|
|
32
|
+
"Pages.Administration.Editions.Query",
|
|
33
|
+
"Pages.Administration.HostDashboard",
|
|
34
|
+
"Pages.Administration.HostMaintenance",
|
|
35
|
+
"Pages.Administration.HostMaintenance.Caching",
|
|
36
|
+
"Pages.Administration.HostMaintenance.Logs",
|
|
37
|
+
"Pages.Administration.HostMaintenance.Logs.Download",
|
|
38
|
+
"Pages.Administration.Identity",
|
|
39
|
+
"Pages.Administration.Identity.Roles",
|
|
40
|
+
"Pages.Administration.Identity.Roles.ChangePermissions",
|
|
41
|
+
"Pages.Administration.Identity.Roles.Create",
|
|
42
|
+
"Pages.Administration.Identity.Roles.Delete",
|
|
43
|
+
"Pages.Administration.Identity.Roles.Edit",
|
|
44
|
+
"Pages.Administration.Identity.Roles.Query",
|
|
45
|
+
"Pages.Administration.Identity.Users",
|
|
46
|
+
"Pages.Administration.Identity.Users.ChangePermissions",
|
|
47
|
+
"Pages.Administration.Identity.Users.Create",
|
|
48
|
+
"Pages.Administration.Identity.Users.Delete",
|
|
49
|
+
"Pages.Administration.Identity.Users.Edit",
|
|
50
|
+
"Pages.Administration.Identity.Users.Impersonation",
|
|
51
|
+
"Pages.Administration.Identity.Users.Query",
|
|
52
|
+
"Pages.Administration.Identity.Users.ResetPassword",
|
|
53
|
+
"Pages.Administration.Identity.Users.Unlock",
|
|
54
|
+
"Pages.Administration.Languages",
|
|
55
|
+
"Pages.Administration.Languages.Edit",
|
|
56
|
+
"Pages.Administration.Languages.Query",
|
|
57
|
+
"Pages.Administration.LoginLogs",
|
|
58
|
+
"Pages.Administration.LoginLogs.Query",
|
|
59
|
+
"Pages.Administration.LoginLogs.Statistics",
|
|
60
|
+
"Pages.Administration.ManagedMenus",
|
|
61
|
+
"Pages.Administration.Notifications",
|
|
62
|
+
"Pages.Administration.Notifications.BatchRetry",
|
|
63
|
+
"Pages.Administration.Notifications.BatchSend",
|
|
64
|
+
"Pages.Administration.Notifications.ManageSettings",
|
|
65
|
+
"Pages.Administration.Notifications.SystemInbox",
|
|
66
|
+
"Pages.Administration.Notifications.UserInbox",
|
|
67
|
+
"Pages.Administration.OrganizationUnits",
|
|
68
|
+
"Pages.Administration.OrganizationUnits.ManageRoles",
|
|
69
|
+
"Pages.Administration.OrganizationUnits.ManageTree",
|
|
70
|
+
"Pages.Administration.OrganizationUnits.ManageUsers",
|
|
71
|
+
"Pages.Administration.OrganizationUnits.Query",
|
|
72
|
+
"Pages.Administration.Settings",
|
|
73
|
+
"Pages.Administration.Settings.Host",
|
|
74
|
+
"Pages.Administration.Settings.Tenant",
|
|
75
|
+
"Pages.Administration.Tenant.SubscriptionManagement",
|
|
76
|
+
"Pages.Administration.TenantDashboard",
|
|
77
|
+
"Pages.Administration.Tenants",
|
|
78
|
+
"Pages.Administration.Tenants.ChangeFeatures",
|
|
79
|
+
"Pages.Administration.Tenants.Create",
|
|
80
|
+
"Pages.Administration.Tenants.Delete",
|
|
81
|
+
"Pages.Administration.Tenants.Edit",
|
|
82
|
+
"Pages.Administration.Tenants.Export",
|
|
83
|
+
"Pages.Administration.Tenants.Impersonation",
|
|
84
|
+
"Pages.Administration.Tenants.InitializeAdmin",
|
|
85
|
+
"Pages.Administration.Tenants.ProcessSubscriptionExpirations",
|
|
86
|
+
"Pages.Administration.Tenants.Query",
|
|
87
|
+
"Pages.Administration.WebHooks",
|
|
88
|
+
"Pages.Administration.WebHooks.Attempts",
|
|
89
|
+
"Pages.Administration.WebHooks.Create",
|
|
90
|
+
"Pages.Administration.WebHooks.Delete",
|
|
91
|
+
"Pages.Administration.WebHooks.Edit",
|
|
92
|
+
"Pages.Administration.WebHooks.Resend",
|
|
93
|
+
"Pages.PhoneBook",
|
|
94
|
+
"Pages.PhoneBook.Person",
|
|
95
|
+
"Pages.PhoneBook.Person.Create",
|
|
96
|
+
"Pages.PhoneBook.Person.Delete",
|
|
97
|
+
"Pages.PhoneBook.Person.Edit",
|
|
98
|
+
"Pages.PhoneBook.Person.Query",
|
|
99
|
+
"Pages.Tools",
|
|
100
|
+
"Pages.Tools.ChatwootTester",
|
|
101
|
+
"Pages.Tools.DomainMonitor",
|
|
102
|
+
"Pages.Tools.DomainMonitor.History",
|
|
103
|
+
"Pages.Tools.DomainMonitor.ManageLines",
|
|
104
|
+
"Pages.Tools.DomainMonitor.Run",
|
|
105
|
+
"Pages.Tools.DomainMonitor.Settings",
|
|
106
|
+
];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './models.js';
|
|
2
|
+
export * from './mappers.js';
|
|
3
|
+
export * from './page.js';
|
|
4
|
+
export * from './runtime/datasource.js';
|
|
5
|
+
export * from './runtime/error.js';
|
|
6
|
+
export * from './runtime/mutation.js';
|
|
7
|
+
export * from './runtime/policy.js';
|
|
8
|
+
export * from './generated/capability/index.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './models.js';
|
|
2
|
+
export * from './mappers.js';
|
|
3
|
+
export * from './page.js';
|
|
4
|
+
export * from './runtime/datasource.js';
|
|
5
|
+
export * from './runtime/error.js';
|
|
6
|
+
export * from './runtime/mutation.js';
|
|
7
|
+
export * from './runtime/policy.js';
|
|
8
|
+
export * from './generated/capability/index.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ApplicationConfigurationState } from "./models.js";
|
|
2
|
+
export declare function createEmptyApplicationConfiguration(): ApplicationConfigurationState;
|
|
3
|
+
export declare function hasPermission(grantedPolicies: Record<string, boolean>, permission: string): boolean;
|
|
4
|
+
export declare function listGrantedPolicies(grantedPolicies: Record<string, boolean>): string[];
|