create-secra 0.1.7 → 1.0.1

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 (97) hide show
  1. package/antd-adapter-template/README.md +24 -0
  2. package/antd-adapter-template/index.html +16 -0
  3. package/antd-adapter-template/package-lock.json +3420 -0
  4. package/antd-adapter-template/package.json +20 -47
  5. package/antd-adapter-template/src/app/App.tsx +7 -0
  6. package/antd-adapter-template/src/app/layouts/AppLayout.tsx +163 -0
  7. package/antd-adapter-template/src/app/router.ts +26 -0
  8. package/antd-adapter-template/src/app/routes/RouteTitleSync.tsx +26 -0
  9. package/antd-adapter-template/src/app/routes/dynamic-routes.ts +52 -0
  10. package/antd-adapter-template/src/app/routes/route-modules.ts +4 -0
  11. package/antd-adapter-template/src/app/routes/static-routes.tsx +110 -0
  12. package/antd-adapter-template/src/app/routes/types.ts +9 -0
  13. package/antd-adapter-template/src/features/auth/api/auth-api.ts +61 -0
  14. package/antd-adapter-template/src/features/auth/auth-store.ts +125 -0
  15. package/antd-adapter-template/src/features/auth/auth-types.ts +29 -0
  16. package/antd-adapter-template/src/features/auth/authorization.ts +46 -0
  17. package/antd-adapter-template/src/features/auth/use-auth.ts +10 -0
  18. package/antd-adapter-template/src/main.tsx +79 -0
  19. package/antd-adapter-template/src/pages/dashboard/DashboardPage.tsx +105 -0
  20. package/antd-adapter-template/src/pages/errors/ForbiddenPage.tsx +36 -0
  21. package/antd-adapter-template/src/pages/errors/NotFoundPage.tsx +36 -0
  22. package/antd-adapter-template/src/pages/home/HomePage.tsx +129 -0
  23. package/antd-adapter-template/src/pages/login/LoginPage.tsx +128 -0
  24. package/antd-adapter-template/src/pages/permission-test/PermissionTestPage.tsx +55 -0
  25. package/antd-adapter-template/src/pages/restricted/RestrictedDemoPage.tsx +17 -0
  26. package/antd-adapter-template/src/shared/kernel/app-kernel.ts +10 -0
  27. package/antd-adapter-template/src/shared/request/client.ts +46 -0
  28. package/antd-adapter-template/src/shared/request/contracts.ts +6 -0
  29. package/antd-adapter-template/src/shared/request/kv-adapter.ts +14 -0
  30. package/antd-adapter-template/src/shared/request/kv-backend.ts +244 -0
  31. package/antd-adapter-template/src/shared/request/ky-browser-stub.ts +6 -0
  32. package/antd-adapter-template/src/shared/request/undici-browser-stub.ts +4 -0
  33. package/antd-adapter-template/src/styles/global.css +185 -0
  34. package/antd-adapter-template/src/vite-env.d.ts +2 -0
  35. package/antd-adapter-template/tsconfig.app.json +10 -13
  36. package/antd-adapter-template/tsconfig.json +7 -2
  37. package/antd-adapter-template/tsconfig.node.json +6 -16
  38. package/antd-adapter-template/vite.config.ts +24 -0
  39. package/bin/index.mjs +29 -5
  40. package/package.json +2 -2
  41. package/template/apps/core/src/main.tsx +34 -13
  42. package/template/package.json +6 -2
  43. package/template/packages/sdk/package.json +3 -0
  44. package/template/packages/sdk/src/request/index.ts +1 -1
  45. package/template/pnpm-lock.yaml +67 -88
  46. package/antd-adapter-template/apps/core/index.html +0 -13
  47. package/antd-adapter-template/apps/core/package.json +0 -18
  48. package/antd-adapter-template/apps/core/public/favicon.ico +0 -1
  49. package/antd-adapter-template/apps/core/public/favicon.svg +0 -1
  50. package/antd-adapter-template/apps/core/public/logo.svg +0 -1
  51. package/antd-adapter-template/apps/core/src/api/auth.ts +0 -49
  52. package/antd-adapter-template/apps/core/src/assets/react.svg +0 -1
  53. package/antd-adapter-template/apps/core/src/components/AntdGlobalProvider.tsx +0 -87
  54. package/antd-adapter-template/apps/core/src/components/AntdRootLayout.tsx +0 -10
  55. package/antd-adapter-template/apps/core/src/components/layout.tsx +0 -387
  56. package/antd-adapter-template/apps/core/src/guards/auth-route-guard.ts +0 -45
  57. package/antd-adapter-template/apps/core/src/main.tsx +0 -65
  58. package/antd-adapter-template/apps/core/src/pages/auth/components/account-login-fields.tsx +0 -60
  59. package/antd-adapter-template/apps/core/src/pages/auth/components/phone-login-fields.tsx +0 -60
  60. package/antd-adapter-template/apps/core/src/pages/auth/login.tsx +0 -169
  61. package/antd-adapter-template/apps/core/src/pages/index.tsx +0 -156
  62. package/antd-adapter-template/apps/core/src/router.ts +0 -42
  63. package/antd-adapter-template/apps/core/src/shims/use-sync-external-store-shim.ts +0 -3
  64. package/antd-adapter-template/apps/core/src/theme/theme.css +0 -48
  65. package/antd-adapter-template/apps/core/src/types/crypto-js.d.ts +0 -5
  66. package/antd-adapter-template/apps/core/src/utils/index.ts +0 -12
  67. package/antd-adapter-template/apps/core/src/utils/md5.ts +0 -6
  68. package/antd-adapter-template/apps/core/tsconfig.app.json +0 -11
  69. package/antd-adapter-template/apps/core/tsconfig.json +0 -13
  70. package/antd-adapter-template/apps/core/tsconfig.node.json +0 -7
  71. package/antd-adapter-template/apps/core/vite.config.ts +0 -118
  72. package/antd-adapter-template/eslint.config.js +0 -23
  73. package/antd-adapter-template/packages/sdk/.swcrc +0 -18
  74. package/antd-adapter-template/packages/sdk/package.json +0 -52
  75. package/antd-adapter-template/packages/sdk/src/build/index.ts +0 -28
  76. package/antd-adapter-template/packages/sdk/src/build/plugins/auto-import.ts +0 -46
  77. package/antd-adapter-template/packages/sdk/src/build/plugins/bundle-analyzer.ts +0 -33
  78. package/antd-adapter-template/packages/sdk/src/build/plugins/remove-console.ts +0 -23
  79. package/antd-adapter-template/packages/sdk/src/build/plugins/unocss.ts +0 -202
  80. package/antd-adapter-template/packages/sdk/src/build/plugins/unplugin-icon.ts +0 -43
  81. package/antd-adapter-template/packages/sdk/src/components/i18n-switch-dropdown.tsx +0 -139
  82. package/antd-adapter-template/packages/sdk/src/components/index.ts +0 -2
  83. package/antd-adapter-template/packages/sdk/src/components/theme-switch-dropdown.tsx +0 -131
  84. package/antd-adapter-template/packages/sdk/src/hooks/auth/core.ts +0 -101
  85. package/antd-adapter-template/packages/sdk/src/hooks/auth/index.ts +0 -139
  86. package/antd-adapter-template/packages/sdk/src/hooks/auth/with-auth.tsx +0 -41
  87. package/antd-adapter-template/packages/sdk/src/hooks/index.ts +0 -1
  88. package/antd-adapter-template/packages/sdk/src/i18n/index.ts +0 -150
  89. package/antd-adapter-template/packages/sdk/src/index.ts +0 -11
  90. package/antd-adapter-template/packages/sdk/src/request/index.ts +0 -436
  91. package/antd-adapter-template/packages/sdk/src/storage/README.md +0 -30
  92. package/antd-adapter-template/packages/sdk/src/storage/index.ts +0 -57
  93. package/antd-adapter-template/packages/sdk/src/styles/reset.css +0 -111
  94. package/antd-adapter-template/packages/sdk/src/theme/index.ts +0 -466
  95. package/antd-adapter-template/packages/sdk/tsconfig.json +0 -16
  96. package/antd-adapter-template/pnpm-workspace.yaml +0 -3
  97. package/antd-adapter-template/turbo.json +0 -17
package/bin/index.mjs CHANGED
@@ -15,12 +15,23 @@ const TEMPLATE_OPTIONS = [
15
15
  label: "最小可用版本",
16
16
  templatePath: DEFAULT_TEMPLATE,
17
17
  templateName: "template",
18
+ nextSteps: (manager, targetDir) => [
19
+ ` cd ${targetDir}`,
20
+ ` ${manager === "yarn" ? "yarn" : `${manager} install`}`,
21
+ " pnpm -r --filter \"./packages/*\" build",
22
+ " pnpm dev",
23
+ ],
18
24
  },
19
25
  {
20
26
  key: "2",
21
27
  label: "antd UI 适配器版本",
22
28
  templatePath: ANT_DESIGN_ADAPTER_TEMPLATE,
23
29
  templateName: "antd-adapter-template",
30
+ nextSteps: (manager, targetDir) => [
31
+ ` cd ${targetDir}`,
32
+ ` ${manager === "yarn" ? "yarn" : `${manager} install`}`,
33
+ ` ${manager} dev`,
34
+ ],
24
35
  },
25
36
  ];
26
37
  const EXCLUDED_DIRS = new Set(["node_modules", "dist", ".turbo", ".git"]);
@@ -172,6 +183,7 @@ async function resolveTemplate() {
172
183
  template: templateFromEnv,
173
184
  selectedName: templateName || "custom",
174
185
  selectedLabel: templateName || "自定义模板",
186
+ nextSteps: null,
175
187
  };
176
188
  }
177
189
 
@@ -182,6 +194,7 @@ async function resolveTemplate() {
182
194
  template: matchedByName.templatePath,
183
195
  selectedName: matchedByName.templateName,
184
196
  selectedLabel: matchedByName.label,
197
+ nextSteps: matchedByName.nextSteps,
185
198
  };
186
199
  }
187
200
  }
@@ -192,6 +205,7 @@ async function resolveTemplate() {
192
205
  template: matchedByArg.templatePath,
193
206
  selectedName: matchedByArg.templateName,
194
207
  selectedLabel: matchedByArg.label,
208
+ nextSteps: matchedByArg.nextSteps,
195
209
  };
196
210
  }
197
211
 
@@ -201,6 +215,7 @@ async function resolveTemplate() {
201
215
  template: fallback.templatePath,
202
216
  selectedName: fallback.templateName,
203
217
  selectedLabel: fallback.label,
218
+ nextSteps: fallback.nextSteps,
204
219
  };
205
220
  }
206
221
 
@@ -209,11 +224,12 @@ async function resolveTemplate() {
209
224
  template: selected.templatePath,
210
225
  selectedName: selected.templateName,
211
226
  selectedLabel: selected.label,
227
+ nextSteps: selected.nextSteps,
212
228
  };
213
229
  }
214
230
 
215
231
  async function main() {
216
- const { template, selectedLabel } = await resolveTemplate();
232
+ const { template, selectedLabel, nextSteps } = await resolveTemplate();
217
233
 
218
234
  if (existsSync(targetPath)) {
219
235
  const files = readdirSync(targetPath);
@@ -242,10 +258,18 @@ async function main() {
242
258
  const manager = detectPackageManager(targetPath);
243
259
 
244
260
  console.log(`[create-secra] Done. Next steps:`);
245
- console.log(` cd ${targetDir}`);
246
- console.log(` ${manager === "yarn" ? "yarn" : `${manager} install`}`);
247
- console.log(` pnpm -r --filter "./packages/*" build`);
248
- console.log(` pnpm dev`);
261
+ const renderedNextSteps =
262
+ typeof nextSteps === "function"
263
+ ? nextSteps(manager, targetDir)
264
+ : [
265
+ ` cd ${targetDir}`,
266
+ ` ${manager === "yarn" ? "yarn" : `${manager} install`}`,
267
+ ` ${manager} dev`,
268
+ ];
269
+
270
+ renderedNextSteps.forEach((step) => {
271
+ console.log(step);
272
+ });
249
273
  }
250
274
 
251
275
  main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-secra",
3
- "version": "0.1.7",
3
+ "version": "1.0.1",
4
4
  "description": "Create a Secra project from the official template.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "scaffold"
18
18
  ],
19
19
  "scripts": {
20
- "prepublishOnly": "npm version patch"
20
+
21
21
  },
22
22
  "license": "MIT"
23
23
  }
@@ -1,14 +1,35 @@
1
1
  import '@vlian/sdk/reset.css';
2
- import { startApp } from '@vlian/framework/core';
3
- import { getRoutes } from './router';
4
-
5
- startApp({
6
- router: {
7
- enabled: true,
8
- routes: getRoutes,
9
- mode: 'browser',
10
- },
11
- }).catch((error) => {
12
- // eslint-disable-next-line no-console
13
- console.error('启动失败:', error);
14
- });
2
+ import { kernelStartApp, type KernelRenderContext } from '@vlian/framework/kernel';
3
+ import { LogLevel } from "@vlian/logger";
4
+ import {StrictMode} from "react";
5
+ import { createRoot } from 'react-dom/client';
6
+ import App from "./pages/index.tsx"
7
+ const container = document.getElementById('root');
8
+
9
+ if (!container) {
10
+ throw new Error('Root container #root was not found.');
11
+ }
12
+
13
+ const rootContainer = container;
14
+
15
+ const startApp = async () => {
16
+ await kernelStartApp({
17
+ config: {
18
+ logger: {
19
+ level: import.meta.env.PROD ? LogLevel.INFO : LogLevel.DEBUG,
20
+ },
21
+ },
22
+ render: (_context: KernelRenderContext) => {
23
+
24
+ const root = createRoot(rootContainer);
25
+
26
+ root.render(
27
+ <StrictMode>
28
+ <App />
29
+ </StrictMode>,
30
+ );
31
+ }
32
+ })
33
+ }
34
+
35
+ void startApp();
@@ -4,6 +4,9 @@
4
4
  "version": "0.0.1",
5
5
  "packageManager": "pnpm@9.12.3",
6
6
  "scripts": {
7
+ "build:packages": "pnpm -r --filter \"./packages/*\" build",
8
+ "prebuild": "pnpm run build:packages",
9
+ "predev": "pnpm run build:packages",
7
10
  "build": "turbo run build",
8
11
  "dev": "turbo run dev",
9
12
  "lint": "turbo run lint",
@@ -12,9 +15,10 @@
12
15
  },
13
16
  "dependencies": {
14
17
  "@ant-design/icons": "^6.1.0",
15
- "@vlian/framework": "^1.2.16",
16
- "@vlian/infrastructure": "^0.9.11",
18
+ "@vlian/framework": "^2.0.3",
19
+ "@vlian/logger": "^0.1.1",
17
20
  "@vlian/sdk": "workspace:*",
21
+ "@vlian/utils": "^2.0.1",
18
22
  "ahooks": "^3.8.5",
19
23
  "antd": "^5.29.3",
20
24
  "i18next": "^25.7.4",
@@ -28,5 +28,8 @@
28
28
  "@swc/cli": "^0.7.3",
29
29
  "@swc/core": "^1.13.5"
30
30
  },
31
+ "dependencies": {
32
+ "@vlian/request": "^0.1.0"
33
+ },
31
34
  "private": true
32
35
  }
@@ -13,7 +13,7 @@ import {
13
13
  PluginPriority,
14
14
  type RequestPlugin,
15
15
  type RequestClientConfig,
16
- } from "@vlian/framework/request";
16
+ } from "@vlian/request";
17
17
 
18
18
  export interface ApiResponse<T = unknown> {
19
19
  data: T;
@@ -12,14 +12,17 @@ importers:
12
12
  specifier: ^6.1.0
13
13
  version: 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
14
14
  '@vlian/framework':
15
- specifier: ^1.2.1
16
- version: 1.2.1(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(axios@1.13.2)(classnames@2.5.1)(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
17
- '@vlian/infrastructure':
18
- specifier: ^0.9.11
19
- version: 0.9.11(@vlian/framework@1.2.1(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(axios@1.13.2)(classnames@2.5.1)(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))
15
+ specifier: ^2.0.3
16
+ version: 2.0.3(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))(i18next@25.8.0(typescript@5.9.3))
17
+ '@vlian/logger':
18
+ specifier: ^0.1.1
19
+ version: 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
20
20
  '@vlian/sdk':
21
21
  specifier: workspace:*
22
22
  version: link:packages/sdk
23
+ '@vlian/utils':
24
+ specifier: ^2.0.1
25
+ version: 2.0.1(axios@1.13.2)(react@19.2.3)
23
26
  ahooks:
24
27
  specifier: ^3.8.5
25
28
  version: 3.9.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -142,6 +145,10 @@ importers:
142
145
  apps/core: {}
143
146
 
144
147
  packages/sdk:
148
+ dependencies:
149
+ '@vlian/request':
150
+ specifier: ^0.1.0
151
+ version: 0.1.3(@vlian/csrf@0.1.2)(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/monitoring@0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))))
145
152
  devDependencies:
146
153
  '@swc/cli':
147
154
  specifier: ^0.7.3
@@ -170,12 +177,6 @@ packages:
170
177
  react: '>=16.0.0'
171
178
  react-dom: '>=16.0.0'
172
179
 
173
- '@ant-design/cssinjs@2.0.3':
174
- resolution: {integrity: sha512-HAo8SZ3a6G8v6jT0suCz1270na6EA3obeJWM4uzRijBhdwdoMAXWK2f4WWkwB28yUufsfk3CAhN1coGPQq4kNQ==}
175
- peerDependencies:
176
- react: '>=16.0.0'
177
- react-dom: '>=16.0.0'
178
-
179
180
  '@ant-design/fast-color@2.0.6':
180
181
  resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==}
181
182
  engines: {node: '>=8.x'}
@@ -955,35 +956,46 @@ packages:
955
956
  peerDependencies:
956
957
  vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
957
958
 
958
- '@vlian/framework@1.2.1':
959
- resolution: {integrity: sha512-ZBGeCKpSi2hNKZpbIkn/KEq/nBkbBUwkkHqZHK8RwvcCkVAq07mWtGiQks2XH5ab9poomPN7XjEk96PXTaIS+Q==}
959
+ '@vlian/csrf@0.1.2':
960
+ resolution: {integrity: sha512-kXu4Uo2geux+wCAfornRCCdn34hrI7jeb5XSmvo/acEZWKax4uW7lEfco4XuA0j71pBp1hydFf3iJVJ4wnElXw==}
961
+ engines: {node: '>=16.0.0'}
962
+
963
+ '@vlian/framework@2.0.3':
964
+ resolution: {integrity: sha512-j+43f4zCQ2EJ7ffojkS9t/Y11/KImye8RLNE1frhLg5bIqwRx+dmn5cEmm4bPfMCpWUCbu1V4fC+zfTHZaPxYQ==}
960
965
  engines: {node: '>=16.0.0'}
961
966
  peerDependencies:
962
- antd: ^5.0.0
967
+ '@vlian/logger': ^0.1.0
968
+ '@vlian/utils': ^2.0.1
963
969
  i18next: ^23.0.0 || ^24.0.0 || ^25.0.0
964
- react: ^18.0.0 || ^19.0.0
965
- react-dom: ^18.0.0 || ^19.0.0
966
- react-i18next: ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
967
- react-router-dom: ^6.0.0 || ^7.0.0
968
970
 
969
- '@vlian/infrastructure@0.9.11':
970
- resolution: {integrity: sha512-rQP1VojOqRf9OgYd9+nlXe2iEpjVPaI1Sd7zTlyZ2/zOyJL9xhHieWxcGAZO+iNElyyBolc2Sao4ri6AhMlj9w==}
971
+ '@vlian/logger@0.1.1':
972
+ resolution: {integrity: sha512-sS8GA5wqTU2bDtVdg+c1JNjK3NmK/rE5Yk57T3ieRivkhWY4rQMAQ0gQ9QriEfRyJ6MlHfj0vL9SNB1O3g5E2Q==}
973
+ engines: {node: '>=16.0.0'}
971
974
  peerDependencies:
972
- '@vlian/framework': ^1.1.0
975
+ '@vlian/utils': ^2.0.1
973
976
 
974
- '@vlian/router@1.0.16':
975
- resolution: {integrity: sha512-mDjqRNQ7QZYbhEK6xMRteZOo076w3SFDPW1nOClLRvIRaBU+0xQp1D4zwZZPpI7lZ7JPwbnw3eNPFRWNTL8nwA==}
977
+ '@vlian/monitoring@0.1.1':
978
+ resolution: {integrity: sha512-pXUid+p3rudGoKE2g93gkJmbPcFtTxUZvtaZQMoKU+W1wJqvuS2zGYfOEq23Q8EvAINdnl3wXKGPSfhQ0vSK2Q==}
979
+ engines: {node: '>=16.0.0'}
976
980
  peerDependencies:
977
- '@ant-design/cssinjs': '>=1.24.0'
978
- classnames: '>=2.3.0'
979
- react: ^19.2.0
980
- react-dom: ^19.2.0
981
- react-router-dom: ^7.0.0
982
-
983
- '@vlian/utils@0.0.40':
984
- resolution: {integrity: sha512-50lxeXRGv9byrcerMZmL7Akd/DushCiFIVQzgmy+hmY4treEOfzceGYqLJydDWIavCgYXYCnpRtmL0CTwMIgQw==}
981
+ '@vlian/logger': ^0.1.0
982
+
983
+ '@vlian/request@0.1.3':
984
+ resolution: {integrity: sha512-+LE9Wxj/Qn5d66vz63Z4uGa5ZflaVa9OBrcyIjEXcLTQ7ApC4z12Medlt862yUFai78Bw2Q7Cjd4Qz3pdqN5vw==}
985
+ engines: {node: '>=16.0.0'}
985
986
  peerDependencies:
986
- axios: '>=1.12.0'
987
+ '@vlian/csrf': ^0.1.2
988
+ '@vlian/logger': ^0.1.0
989
+ '@vlian/monitoring': ^0.1.0
990
+
991
+ '@vlian/utils@2.0.1':
992
+ resolution: {integrity: sha512-vj2xSjXiUFPG2UqTgQSTvUnq16voairfXGeGda2T+1ifV2SnwAOfLpI+K6mroAn3ceSeeLDgLopX9qZ35EFLQw==}
993
+ peerDependencies:
994
+ axios: ^1.12.0
995
+ dexie: ^4.3.0
996
+ peerDependenciesMeta:
997
+ dexie:
998
+ optional: true
987
999
 
988
1000
  '@vue/compiler-core@3.0.11':
989
1001
  resolution: {integrity: sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw==}
@@ -1526,9 +1538,6 @@ packages:
1526
1538
  resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
1527
1539
  engines: {node: '>=8'}
1528
1540
 
1529
- dexie@4.2.1:
1530
- resolution: {integrity: sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==}
1531
-
1532
1541
  dom-serializer@0.2.2:
1533
1542
  resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
1534
1543
 
@@ -1548,8 +1557,8 @@ packages:
1548
1557
  resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
1549
1558
  engines: {node: '>= 4'}
1550
1559
 
1551
- dompurify@3.3.1:
1552
- resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
1560
+ dompurify@3.3.3:
1561
+ resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==}
1553
1562
 
1554
1563
  domutils@1.7.0:
1555
1564
  resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
@@ -1895,7 +1904,7 @@ packages:
1895
1904
 
1896
1905
  glob@7.2.3:
1897
1906
  resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1898
- deprecated: Glob versions prior to v9 are no longer supported
1907
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
1899
1908
 
1900
1909
  globals@14.0.0:
1901
1910
  resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
@@ -3070,11 +3079,6 @@ packages:
3070
3079
  peerDependencies:
3071
3080
  react: ^19.2.3
3072
3081
 
3073
- react-error-boundary@6.1.0:
3074
- resolution: {integrity: sha512-02k9WQ/mUhdbXir0tC1NiMesGzRPaCsJEWU/4bcFrbY1YMZOtHShtZP6zw0SJrBWA/31H0KT9/FgdL8+sPKgHA==}
3075
- peerDependencies:
3076
- react: ^18.0.0 || ^19.0.0
3077
-
3078
3082
  react-fast-compare@3.2.2:
3079
3083
  resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
3080
3084
 
@@ -3187,6 +3191,7 @@ packages:
3187
3191
  rolldown-vite@7.2.5:
3188
3192
  resolution: {integrity: sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA==}
3189
3193
  engines: {node: ^20.19.0 || >=22.12.0}
3194
+ deprecated: Use 7.3.1 for migration purposes. For the most recent updates, migrate to Vite 8 once you're ready.
3190
3195
  hasBin: true
3191
3196
  peerDependencies:
3192
3197
  '@types/node': ^20.19.0 || >=22.12.0
@@ -3904,18 +3909,6 @@ snapshots:
3904
3909
  react-dom: 19.2.3(react@19.2.3)
3905
3910
  stylis: 4.3.6
3906
3911
 
3907
- '@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
3908
- dependencies:
3909
- '@babel/runtime': 7.28.6
3910
- '@emotion/hash': 0.8.0
3911
- '@emotion/unitless': 0.7.5
3912
- '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
3913
- clsx: 2.1.1
3914
- csstype: 3.2.3
3915
- react: 19.2.3
3916
- react-dom: 19.2.3(react@19.2.3)
3917
- stylis: 4.3.6
3918
-
3919
3912
  '@ant-design/fast-color@2.0.6':
3920
3913
  dependencies:
3921
3914
  '@babel/runtime': 7.28.6
@@ -4748,49 +4741,41 @@ snapshots:
4748
4741
  transitivePeerDependencies:
4749
4742
  - supports-color
4750
4743
 
4751
- '@vlian/framework@1.2.1(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(axios@1.13.2)(classnames@2.5.1)(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)':
4744
+ '@vlian/csrf@0.1.2': {}
4745
+
4746
+ '@vlian/framework@2.0.3(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))(i18next@25.8.0(typescript@5.9.3))':
4752
4747
  dependencies:
4753
- '@vlian/router': 1.0.16(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(classnames@2.5.1)(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
4754
- '@vlian/utils': 0.0.40(axios@1.13.2)(react@19.2.3)
4755
- antd: 5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
4756
- dompurify: 3.3.1
4748
+ '@vlian/logger': 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
4749
+ '@vlian/utils': 2.0.1(axios@1.13.2)(react@19.2.3)
4757
4750
  i18next: 25.8.0(typescript@5.9.3)
4758
- react: 19.2.3
4759
- react-dom: 19.2.3(react@19.2.3)
4760
- react-error-boundary: 6.1.0(react@19.2.3)
4761
- react-i18next: 15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
4762
- react-router-dom: 7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
4763
4751
  zod: 4.3.5
4764
- transitivePeerDependencies:
4765
- - '@ant-design/cssinjs'
4766
- - axios
4767
- - classnames
4768
4752
 
4769
- '@vlian/infrastructure@0.9.11(@vlian/framework@1.2.1(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(axios@1.13.2)(classnames@2.5.1)(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))':
4753
+ '@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))':
4770
4754
  dependencies:
4771
- '@vlian/framework': 1.2.1(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(antd@5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(axios@1.13.2)(classnames@2.5.1)(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
4755
+ '@vlian/utils': 2.0.1(axios@1.13.2)(react@19.2.3)
4772
4756
 
4773
- '@vlian/router@1.0.16(@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(classnames@2.5.1)(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)':
4757
+ '@vlian/monitoring@0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))':
4774
4758
  dependencies:
4775
- '@ant-design/cssinjs': 2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
4776
- ahooks: 3.9.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
4777
- classnames: 2.5.1
4778
- qs: 6.14.1
4779
- react: 19.2.3
4780
- react-dom: 19.2.3(react@19.2.3)
4781
- react-router-dom: 7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
4759
+ '@vlian/logger': 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
4760
+
4761
+ '@vlian/request@0.1.3(@vlian/csrf@0.1.2)(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/monitoring@0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))))':
4762
+ dependencies:
4763
+ '@vlian/csrf': 0.1.2
4764
+ '@vlian/logger': 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
4765
+ '@vlian/monitoring': 0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))
4782
4766
 
4783
- '@vlian/utils@0.0.40(axios@1.13.2)(react@19.2.3)':
4767
+ '@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)':
4784
4768
  dependencies:
4785
4769
  axios: 1.13.2
4786
4770
  axios-retry: 4.5.0(axios@1.13.2)
4787
4771
  colord: 2.9.3
4788
4772
  crypto-js: 4.2.0
4789
- dexie: 4.2.1
4773
+ dompurify: 3.3.3
4790
4774
  lodash: 4.17.23
4791
4775
  nanoid: 5.1.6
4792
4776
  qs: 6.14.1
4793
4777
  swr: 2.3.8(react@19.2.3)
4778
+ zod: 4.3.5
4794
4779
  transitivePeerDependencies:
4795
4780
  - react
4796
4781
 
@@ -5462,8 +5447,6 @@ snapshots:
5462
5447
 
5463
5448
  detect-libc@2.1.2: {}
5464
5449
 
5465
- dexie@4.2.1: {}
5466
-
5467
5450
  dom-serializer@0.2.2:
5468
5451
  dependencies:
5469
5452
  domelementtype: 2.3.0
@@ -5487,7 +5470,7 @@ snapshots:
5487
5470
  dependencies:
5488
5471
  domelementtype: 2.3.0
5489
5472
 
5490
- dompurify@3.3.1:
5473
+ dompurify@3.3.3:
5491
5474
  optionalDependencies:
5492
5475
  '@types/trusted-types': 2.0.7
5493
5476
 
@@ -7150,10 +7133,6 @@ snapshots:
7150
7133
  react: 19.2.3
7151
7134
  scheduler: 0.27.0
7152
7135
 
7153
- react-error-boundary@6.1.0(react@19.2.3):
7154
- dependencies:
7155
- react: 19.2.3
7156
-
7157
7136
  react-fast-compare@3.2.2: {}
7158
7137
 
7159
7138
  react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3):
@@ -1,13 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>core</title>
8
- </head>
9
- <body>
10
- <div id="root"></div>
11
- <script type="module" src="/src/main.tsx"></script>
12
- </body>
13
- </html>
@@ -1,18 +0,0 @@
1
- {
2
- "name": "core",
3
- "private": true,
4
- "version": "0.0.15",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "vite",
8
- "build": "tsc -b && vite build",
9
- "lint": "eslint .",
10
- "preview": "vite preview"
11
- },
12
- "dependencies": {
13
- "@reduxjs/toolkit": "^2.11.0",
14
- "@vlian/sdk": "workspace:*",
15
- "crypto-js": "^4.2.0",
16
- "lucide-react": "^0.575.0"
17
- }
18
- }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.07 100"><path fill="#24d6fe" d="M54.65 100l18.21-25.37H36.22L54.65 100z"/><path fill="#24d6fe" d="M72.86 24.94l-.07-.09L54.54 0 36.28 24.85l18.26 24.84 18.32 24.94 18.18 24.75 18.03-25.14-36.21-49.3z"/><path fill="#9e5df9" opacity=".5" d="M72.79 24.85L54.54 0 36.28 24.85l18.26 24.84 18.25-24.84z"/><path fill="#9e5df9" d="M36.22 49.69H18.03L0 74.24 18.09 99.3l18.13-24.67 18.32-24.94H36.22z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.07 100"><path fill="#24d6fe" d="M54.65 100l18.21-25.37H36.22L54.65 100z"/><path fill="#24d6fe" d="M72.86 24.94l-.07-.09L54.54 0 36.28 24.85l18.26 24.84 18.32 24.94 18.18 24.75 18.03-25.14-36.21-49.3z"/><path fill="#9e5df9" opacity=".5" d="M72.79 24.85L54.54 0 36.28 24.85l18.26 24.84 18.25-24.84z"/><path fill="#9e5df9" d="M36.22 49.69H18.03L0 74.24 18.09 99.3l18.13-24.67 18.32-24.94H36.22z"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.07 100"><path fill="#24d6fe" d="M54.65 100l18.21-25.37H36.22L54.65 100z"/><path fill="#24d6fe" d="M72.86 24.94l-.07-.09L54.54 0 36.28 24.85l18.26 24.84 18.32 24.94 18.18 24.75 18.03-25.14-36.21-49.3z"/><path fill="#9e5df9" opacity=".5" d="M72.79 24.85L54.54 0 36.28 24.85l18.26 24.84 18.25-24.84z"/><path fill="#9e5df9" d="M36.22 49.69H18.03L0 74.24 18.09 99.3l18.13-24.67 18.32-24.94H36.22z"/></svg>
@@ -1,49 +0,0 @@
1
- export interface LoginRequest extends Record<string, unknown> {
2
- identifier: string;
3
- password: string;
4
- }
5
-
6
- export interface LoginUser {
7
- id: string;
8
- tenant_id: string;
9
- display_name: string;
10
- email: string | null;
11
- phone: string | null;
12
- }
13
-
14
- export interface LoginResponse {
15
- access_token: string;
16
- refresh_token: string;
17
- token_type: string;
18
- expires_in: number;
19
- refresh_expires_in: number;
20
- user: LoginUser;
21
- require_password_change: boolean;
22
- }
23
-
24
- const MOCK_PASSWORD_MD5 = "0192023a7bbd73250516f069df18b500";
25
-
26
- export const login = async (payload: LoginRequest): Promise<LoginResponse> => {
27
- await new Promise((resolve) => setTimeout(resolve, 200));
28
- const identifier = payload.identifier.trim();
29
- if (!identifier || payload.password !== MOCK_PASSWORD_MD5) {
30
- throw new Error("用户名或密码错误");
31
- }
32
-
33
- const now = Date.now();
34
- return {
35
- access_token: `mock-access-token-${now}`,
36
- refresh_token: `mock-refresh-token-${now}`,
37
- token_type: "Bearer",
38
- expires_in: 7200,
39
- refresh_expires_in: 2592000,
40
- user: {
41
- id: "mock-user-1",
42
- tenant_id: "mock-tenant-1",
43
- display_name: identifier,
44
- email: `${identifier}@example.com`,
45
- phone: null,
46
- },
47
- require_password_change: false,
48
- };
49
- };
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>