@solazah/solazah-cli 0.2.10
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/CHANGELOG.md +169 -0
- package/commands/account/login.d.ts +3 -0
- package/commands/account/login.d.ts.map +1 -0
- package/commands/account/logout.d.ts +3 -0
- package/commands/account/logout.d.ts.map +1 -0
- package/commands/account/shared.d.ts +9 -0
- package/commands/account/shared.d.ts.map +1 -0
- package/commands/account/userinfo.d.ts +3 -0
- package/commands/account/userinfo.d.ts.map +1 -0
- package/commands/plugin/create.d.ts +9 -0
- package/commands/plugin/create.d.ts.map +1 -0
- package/commands/plugin/package.d.ts +6 -0
- package/commands/plugin/package.d.ts.map +1 -0
- package/commands/plugin/publish.d.ts +7 -0
- package/commands/plugin/publish.d.ts.map +1 -0
- package/index.d.ts +3 -0
- package/index.d.ts.map +1 -0
- package/index.js +955 -0
- package/index.js.map +1 -0
- package/package.json +14 -0
- package/templates/react/.prettierrc +6 -0
- package/templates/react/.versionrc +17 -0
- package/templates/react/CHANGELOG.md +2 -0
- package/templates/react/README.md +224 -0
- package/templates/react/components.json +22 -0
- package/templates/react/eslint.config.js +21 -0
- package/templates/react/manifest.json +14 -0
- package/templates/react/package.config.js +86 -0
- package/templates/react/package.json +66 -0
- package/templates/react/src/preload/preload.mjs +0 -0
- package/templates/react/src/renderer/components/ui/card.tsx +76 -0
- package/templates/react/src/renderer/components/ui/sonner.tsx +35 -0
- package/templates/react/src/renderer/index.css +164 -0
- package/templates/react/src/renderer/index.html +12 -0
- package/templates/react/src/renderer/lib/utils.ts +6 -0
- package/templates/react/src/renderer/main.tsx +56 -0
- package/templates/react/src/renderer/pages/Home.tsx +154 -0
- package/templates/react/src/renderer/vite-env.d.ts +1 -0
- package/templates/react/template.json +15 -0
- package/templates/react/tsconfig.app.json +25 -0
- package/templates/react/tsconfig.json +19 -0
- package/templates/react/tsconfig.node.json +25 -0
- package/templates/react/vite.config.ts +25 -0
- package/utils/auth-storage.d.ts +27 -0
- package/utils/auth-storage.d.ts.map +1 -0
- package/utils/file.d.ts +41 -0
- package/utils/file.d.ts.map +1 -0
- package/utils/oauth-device.d.ts +98 -0
- package/utils/oauth-device.d.ts.map +1 -0
- package/utils/open-browser.d.ts +5 -0
- package/utils/open-browser.d.ts.map +1 -0
- package/utils/validate.d.ts +21 -0
- package/utils/validate.d.ts.map +1 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {defineConfig} from 'vite'
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import react from '@vitejs/plugin-react'
|
|
4
|
+
import svgr from 'vite-plugin-svgr';
|
|
5
|
+
import tailwindcss from "@tailwindcss/vite"
|
|
6
|
+
|
|
7
|
+
// https://vitejs.dev/config/
|
|
8
|
+
export default defineConfig({
|
|
9
|
+
root:'./src/renderer',
|
|
10
|
+
resolve: {
|
|
11
|
+
alias: {
|
|
12
|
+
"@": path.resolve(__dirname, "./src"),
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
build: {
|
|
16
|
+
outDir: path.resolve(__dirname, "target"),
|
|
17
|
+
emptyOutDir: true
|
|
18
|
+
},
|
|
19
|
+
plugins: [
|
|
20
|
+
svgr(),
|
|
21
|
+
react(),
|
|
22
|
+
tailwindcss()
|
|
23
|
+
],
|
|
24
|
+
base: process.env.NODE_ENV === 'production' ? './' : '/',
|
|
25
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface StoredTokens {
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token?: string;
|
|
4
|
+
id_token?: string;
|
|
5
|
+
token_type: string;
|
|
6
|
+
scope?: string;
|
|
7
|
+
expires_at?: number;
|
|
8
|
+
issuer?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface TokenResponse {
|
|
11
|
+
access_token: string;
|
|
12
|
+
refresh_token?: string;
|
|
13
|
+
id_token?: string;
|
|
14
|
+
token_type: string;
|
|
15
|
+
expires_in?: number;
|
|
16
|
+
scope?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function saveTokens(tokens: StoredTokens): Promise<void>;
|
|
19
|
+
export declare function loadTokens(): Promise<StoredTokens | null>;
|
|
20
|
+
export declare function clearTokens(): Promise<void>;
|
|
21
|
+
export declare function isExpired(tokens: StoredTokens): boolean;
|
|
22
|
+
export declare function toStoredTokens(tokens: TokenResponse, issuer: string): StoredTokens;
|
|
23
|
+
/**
|
|
24
|
+
* 合并刷新后的令牌:若服务器未返回新的 refresh_token 则保留原值。
|
|
25
|
+
*/
|
|
26
|
+
export declare function mergeRefreshedTokens(previous: StoredTokens, refreshed: TokenResponse, issuer: string): StoredTokens;
|
|
27
|
+
//# sourceMappingURL=auth-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-storage.d.ts","sourceRoot":"","sources":["../../src/utils/auth-storage.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAsB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAS/D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAGvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAWlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM,GACb,YAAY,CAMd"}
|
package/utils/file.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface TemplateInfo {
|
|
2
|
+
name: string;
|
|
3
|
+
displayName: string;
|
|
4
|
+
description: string;
|
|
5
|
+
version: string;
|
|
6
|
+
features?: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 检查目录是否为空
|
|
10
|
+
*/
|
|
11
|
+
export declare function isDirectoryEmpty(dirPath: string): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* 确保目录存在
|
|
14
|
+
*/
|
|
15
|
+
export declare function ensureDirectory(dirPath: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 获取模板根目录路径
|
|
18
|
+
*/
|
|
19
|
+
export declare function getTemplatesRootDir(): string;
|
|
20
|
+
/**
|
|
21
|
+
* 获取指定模板的目录路径
|
|
22
|
+
*/
|
|
23
|
+
export declare function getTemplateDir(templateName: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* 获取所有可用模板
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAvailableTemplates(): Promise<TemplateInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* 复制模板文件
|
|
30
|
+
*/
|
|
31
|
+
export declare function copyTemplate(templateDir: string, targetDir: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* 替换文件内容中的占位符
|
|
34
|
+
* 支持 {{PLACEHOLDER}} 格式
|
|
35
|
+
*/
|
|
36
|
+
export declare function replacePlaceholders(filePath: string, replacements: Record<string, string>): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* 批量替换目录中所有文件的占位符
|
|
39
|
+
*/
|
|
40
|
+
export declare function replaceInDirectory(dirPath: string, replacements: Record<string, string>, extensions?: string[]): Promise<void>;
|
|
41
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAsBrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,UAAU,GAAE,MAAM,EAA4D,GAC7E,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { TokenResponse } from './auth-storage.js';
|
|
2
|
+
export declare const DEFAULT_ISSUER = "https://solazah.seayona.com/account";
|
|
3
|
+
export declare const DEFAULT_CLIENT_ID = "solazah-cli";
|
|
4
|
+
export declare const DEFAULT_CLIENT_SECRET = "solazah-cli";
|
|
5
|
+
export declare const DEFAULT_SCOPE = "openid profile offline_access";
|
|
6
|
+
export declare const DEFAULT_TOKEN_TYPE = "Bearer";
|
|
7
|
+
/**
|
|
8
|
+
* 授权服务器默认把 verification_uri 指向后端的表单端点
|
|
9
|
+
* (/account/oauth2/device_verification),但我们的前端是 SPA,
|
|
10
|
+
* 直接让用户访问后端表单会看到空白页。这里统一重写为 SPA 的
|
|
11
|
+
* /#/device hash 路由,由前端引导用户登录并提交 user_code。
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_VERIFICATION_URI = "https://solazah.seayona.com/account/#/device";
|
|
14
|
+
export declare const GRANT_TYPE: {
|
|
15
|
+
readonly DEVICE_CODE: "urn:ietf:params:oauth:grant-type:device_code";
|
|
16
|
+
readonly REFRESH_TOKEN: "refresh_token";
|
|
17
|
+
};
|
|
18
|
+
export declare const TOKEN_HINT: {
|
|
19
|
+
readonly ACCESS: "access_token";
|
|
20
|
+
readonly REFRESH: "refresh_token";
|
|
21
|
+
};
|
|
22
|
+
export type TokenTypeHint = typeof TOKEN_HINT[keyof typeof TOKEN_HINT];
|
|
23
|
+
export declare const DEVICE_ERROR: {
|
|
24
|
+
readonly AUTH_PENDING: "authorization_pending";
|
|
25
|
+
readonly SLOW_DOWN: "slow_down";
|
|
26
|
+
readonly ACCESS_DENIED: "access_denied";
|
|
27
|
+
readonly EXPIRED_TOKEN: "expired_token";
|
|
28
|
+
};
|
|
29
|
+
export interface OidcDiscovery {
|
|
30
|
+
issuer: string;
|
|
31
|
+
device_authorization_endpoint?: string;
|
|
32
|
+
token_endpoint: string;
|
|
33
|
+
userinfo_endpoint?: string;
|
|
34
|
+
end_session_endpoint?: string;
|
|
35
|
+
revocation_endpoint?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface DeviceAuthorizationResponse {
|
|
38
|
+
device_code: string;
|
|
39
|
+
user_code: string;
|
|
40
|
+
verification_uri: string;
|
|
41
|
+
verification_uri_complete?: string;
|
|
42
|
+
expires_in: number;
|
|
43
|
+
interval?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface UserInfo {
|
|
46
|
+
sub: string;
|
|
47
|
+
name?: string;
|
|
48
|
+
username?: string;
|
|
49
|
+
preferred_username?: string;
|
|
50
|
+
email?: string;
|
|
51
|
+
[key: string]: unknown;
|
|
52
|
+
}
|
|
53
|
+
export declare function discover(issuer?: string): Promise<OidcDiscovery>;
|
|
54
|
+
export declare function requestDeviceCode(options: {
|
|
55
|
+
discovery: OidcDiscovery;
|
|
56
|
+
clientId?: string;
|
|
57
|
+
scope?: string;
|
|
58
|
+
}): Promise<DeviceAuthorizationResponse>;
|
|
59
|
+
export type PollStatus = 'success' | 'pending' | 'slow_down' | 'denied' | 'expired' | 'error';
|
|
60
|
+
export interface PollResult {
|
|
61
|
+
status: PollStatus;
|
|
62
|
+
tokens?: TokenResponse;
|
|
63
|
+
error?: string;
|
|
64
|
+
errorDescription?: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function pollToken(options: {
|
|
67
|
+
discovery: OidcDiscovery;
|
|
68
|
+
deviceCode: string;
|
|
69
|
+
clientId?: string;
|
|
70
|
+
}): Promise<PollResult>;
|
|
71
|
+
export declare function fetchUserInfo(options: {
|
|
72
|
+
discovery: OidcDiscovery;
|
|
73
|
+
accessToken: string;
|
|
74
|
+
}): Promise<UserInfo>;
|
|
75
|
+
export declare function refreshTokens(options: {
|
|
76
|
+
discovery: OidcDiscovery;
|
|
77
|
+
refreshToken: string;
|
|
78
|
+
clientId?: string;
|
|
79
|
+
}): Promise<TokenResponse>;
|
|
80
|
+
/**
|
|
81
|
+
* 撤销指定类型的令牌;best-effort,出错不抛出。
|
|
82
|
+
*/
|
|
83
|
+
export declare function revokeToken(options: {
|
|
84
|
+
discovery: OidcDiscovery;
|
|
85
|
+
token: string;
|
|
86
|
+
tokenTypeHint?: TokenTypeHint;
|
|
87
|
+
clientId?: string;
|
|
88
|
+
}): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* 并发撤销 access_token 与 refresh_token。
|
|
91
|
+
*/
|
|
92
|
+
export declare function revokeAll(options: {
|
|
93
|
+
discovery: OidcDiscovery;
|
|
94
|
+
accessToken?: string;
|
|
95
|
+
refreshToken?: string;
|
|
96
|
+
clientId?: string;
|
|
97
|
+
}): Promise<void>;
|
|
98
|
+
//# sourceMappingURL=oauth-device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-device.d.ts","sourceRoot":"","sources":["../../src/utils/oauth-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/utils/open-browser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA8BhD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ValidationResult {
|
|
2
|
+
valid: boolean;
|
|
3
|
+
errors: string[];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* 验证插件名称
|
|
7
|
+
* 接受任何合法的 npm 包名
|
|
8
|
+
*/
|
|
9
|
+
export declare function validatePluginName(name: string): ValidationResult;
|
|
10
|
+
/**
|
|
11
|
+
* 从包名提取插件名称
|
|
12
|
+
* @example extractPluginName('@solazah/solazah-plugin-example') => 'solazah-plugin-example'
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractPluginName(packageName: string): string;
|
|
15
|
+
export declare function extractPluginSimpleName(packageName: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* 生成显示名称
|
|
18
|
+
* @example generateDisplayName('example') => 'Example'
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateDisplayName(name: string): string;
|
|
21
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/utils/validate.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,UAQ1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD"}
|