@optima-chat/commerce-cli 1.5.1 → 1.7.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/.claude/skills/commerce-product/SKILL.md +47 -17
- package/.claude/skills/commerce-storefront/SKILL.md +9 -4
- package/dist/api/rest/auth.d.ts +0 -4
- package/dist/api/rest/auth.d.ts.map +1 -1
- package/dist/api/rest/auth.js +1 -17
- package/dist/api/rest/auth.js.map +1 -1
- package/dist/api/rest/base.d.ts +1 -1
- package/dist/api/rest/base.js +4 -4
- package/dist/api/rest/base.js.map +1 -1
- package/dist/api/rest/commerce.d.ts +69 -1
- package/dist/api/rest/commerce.d.ts.map +1 -1
- package/dist/api/rest/commerce.js +81 -2
- package/dist/api/rest/commerce.js.map +1 -1
- package/dist/commands/auth/index.d.ts.map +1 -1
- package/dist/commands/auth/index.js +1 -5
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +61 -15
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/logout.d.ts.map +1 -1
- package/dist/commands/auth/logout.js +10 -56
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/whoami.d.ts.map +1 -1
- package/dist/commands/auth/whoami.js +34 -26
- package/dist/commands/auth/whoami.js.map +1 -1
- package/dist/commands/product/add-videos.d.ts +3 -0
- package/dist/commands/product/add-videos.d.ts.map +1 -0
- package/dist/commands/product/add-videos.js +141 -0
- package/dist/commands/product/add-videos.js.map +1 -0
- package/dist/commands/product/index.d.ts.map +1 -1
- package/dist/commands/product/index.js +8 -0
- package/dist/commands/product/index.js.map +1 -1
- package/dist/commands/product/remove-videos.d.ts +3 -0
- package/dist/commands/product/remove-videos.d.ts.map +1 -0
- package/dist/commands/product/remove-videos.js +108 -0
- package/dist/commands/product/remove-videos.js.map +1 -0
- package/dist/commands/product/reorder-videos.d.ts +3 -0
- package/dist/commands/product/reorder-videos.d.ts.map +1 -0
- package/dist/commands/product/reorder-videos.js +111 -0
- package/dist/commands/product/reorder-videos.js.map +1 -0
- package/dist/commands/product/video-status.d.ts +3 -0
- package/dist/commands/product/video-status.d.ts.map +1 -0
- package/dist/commands/product/video-status.js +186 -0
- package/dist/commands/product/video-status.js.map +1 -0
- package/dist/commands/variant/add-images.d.ts.map +1 -1
- package/dist/commands/variant/add-images.js +47 -8
- package/dist/commands/variant/add-images.js.map +1 -1
- package/dist/utils/config.d.ts +13 -45
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +128 -214
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -2
- package/dist/commands/auth/switch.d.ts +0 -3
- package/dist/commands/auth/switch.d.ts.map +0 -1
- package/dist/commands/auth/switch.js +0 -111
- package/dist/commands/auth/switch.js.map +0 -1
- package/dist/commands/auth/test-refresh.d.ts +0 -3
- package/dist/commands/auth/test-refresh.d.ts.map +0 -1
- package/dist/commands/auth/test-refresh.js +0 -43
- package/dist/commands/auth/test-refresh.js.map +0 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { commerceApi } from '../../api/rest/commerce.js';
|
|
4
|
+
import { handleError, createApiError, ValidationError } from '../../utils/error.js';
|
|
5
|
+
import { output } from '../../utils/output.js';
|
|
6
|
+
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
7
|
+
const cmd = new Command('video-status')
|
|
8
|
+
.description('Check video processing status')
|
|
9
|
+
.option('--media-id <id>', 'Media ID of the video (required)')
|
|
10
|
+
.option('--wait', 'Wait for processing to complete (polls every 3 seconds)')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
try {
|
|
13
|
+
await checkVideoStatus(options);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
handleError(error);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
addEnhancedHelp(cmd, {
|
|
20
|
+
examples: [
|
|
21
|
+
'# Check video status',
|
|
22
|
+
'$ commerce product video-status --media-id media_456',
|
|
23
|
+
'',
|
|
24
|
+
'# Wait for processing to complete',
|
|
25
|
+
'$ commerce product video-status --media-id media_456 --wait',
|
|
26
|
+
],
|
|
27
|
+
output: {
|
|
28
|
+
example: JSON.stringify({
|
|
29
|
+
success: true,
|
|
30
|
+
data: {
|
|
31
|
+
media_id: 'media_456',
|
|
32
|
+
status: 'completed',
|
|
33
|
+
progress: 100,
|
|
34
|
+
variants: {
|
|
35
|
+
'480p': { url: 'https://...', size: 12345 },
|
|
36
|
+
'720p': { url: 'https://...', size: 23456 },
|
|
37
|
+
'1080p': { url: 'https://...', size: 45678 },
|
|
38
|
+
'thumbnail': { url: 'https://...' }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}, null, 2)
|
|
42
|
+
},
|
|
43
|
+
relatedCommands: [
|
|
44
|
+
{ command: 'product add-videos', description: 'Add videos to product' },
|
|
45
|
+
{ command: 'upload video', description: 'Upload video to get media ID' },
|
|
46
|
+
],
|
|
47
|
+
notes: [
|
|
48
|
+
'Status values: pending, processing, completed, failed',
|
|
49
|
+
'Videos are transcoded to 480p, 720p, 1080p + thumbnail',
|
|
50
|
+
'Use --wait to automatically poll until complete',
|
|
51
|
+
'Processing usually takes 1-5 minutes depending on file size',
|
|
52
|
+
]
|
|
53
|
+
});
|
|
54
|
+
export const videoStatusCommand = cmd;
|
|
55
|
+
async function checkVideoStatus(options) {
|
|
56
|
+
if (!options.mediaId || options.mediaId.trim().length === 0) {
|
|
57
|
+
throw new ValidationError('Media ID 不能为空', 'media_id');
|
|
58
|
+
}
|
|
59
|
+
const mediaId = options.mediaId;
|
|
60
|
+
if (options.wait) {
|
|
61
|
+
await waitForVideoProcessing(mediaId);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
await getVideoStatus(mediaId);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function getVideoStatus(mediaId) {
|
|
68
|
+
const spinner = output.spinner('正在查询视频状态...');
|
|
69
|
+
try {
|
|
70
|
+
const result = await commerceApi.media.getVideoStatus(mediaId);
|
|
71
|
+
spinner.stop();
|
|
72
|
+
if (output.isJson()) {
|
|
73
|
+
output.success(result);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(chalk.cyan('🎬 视频处理状态'));
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(chalk.gray('Media ID: ') + chalk.white(mediaId));
|
|
80
|
+
console.log(chalk.gray('状态: ') + formatStatus(result.status));
|
|
81
|
+
if (result.progress !== undefined && result.progress !== null) {
|
|
82
|
+
console.log(chalk.gray('进度: ') + chalk.white(`${result.progress}%`));
|
|
83
|
+
}
|
|
84
|
+
if (result.error) {
|
|
85
|
+
console.log(chalk.gray('错误: ') + chalk.red(result.error));
|
|
86
|
+
}
|
|
87
|
+
if (result.variants && Object.keys(result.variants).length > 0) {
|
|
88
|
+
console.log();
|
|
89
|
+
console.log(chalk.gray('转码版本:'));
|
|
90
|
+
for (const [resolution, info] of Object.entries(result.variants)) {
|
|
91
|
+
const variantInfo = info;
|
|
92
|
+
const size = variantInfo.size ? ` (${formatBytes(variantInfo.size)})` : '';
|
|
93
|
+
console.log(chalk.gray(` • ${resolution}:`) + chalk.cyan(` ${variantInfo.url || '处理中...'}${size}`));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
console.log();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
spinner.fail('查询失败');
|
|
101
|
+
throw createApiError(error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function waitForVideoProcessing(mediaId) {
|
|
105
|
+
console.log(chalk.cyan('\n🎬 等待视频处理完成...\n'));
|
|
106
|
+
console.log(chalk.gray('Media ID: ') + chalk.white(mediaId));
|
|
107
|
+
console.log();
|
|
108
|
+
const maxAttempts = 120; // 最多等待 6 分钟(120 * 3秒)
|
|
109
|
+
let attempts = 0;
|
|
110
|
+
while (attempts < maxAttempts) {
|
|
111
|
+
try {
|
|
112
|
+
const result = await commerceApi.media.getVideoStatus(mediaId);
|
|
113
|
+
// 清除上一行并显示当前状态
|
|
114
|
+
process.stdout.write(`\r${chalk.gray('状态:')} ${formatStatus(result.status)}`);
|
|
115
|
+
if (result.progress !== undefined && result.progress !== null) {
|
|
116
|
+
process.stdout.write(chalk.gray(` | 进度: `) + chalk.white(`${result.progress}%`));
|
|
117
|
+
}
|
|
118
|
+
process.stdout.write(' '); // 清除可能的残留字符
|
|
119
|
+
if (result.status === 'completed') {
|
|
120
|
+
console.log('\n');
|
|
121
|
+
console.log(chalk.green('✓ 视频处理完成!'));
|
|
122
|
+
if (result.variants && Object.keys(result.variants).length > 0) {
|
|
123
|
+
console.log();
|
|
124
|
+
console.log(chalk.gray('可用版本:'));
|
|
125
|
+
for (const [resolution, info] of Object.entries(result.variants)) {
|
|
126
|
+
const variantInfo = info;
|
|
127
|
+
const size = variantInfo.size ? ` (${formatBytes(variantInfo.size)})` : '';
|
|
128
|
+
console.log(chalk.gray(` • ${resolution}:`));
|
|
129
|
+
console.log(chalk.cyan(` ${variantInfo.url}${size}`));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
console.log();
|
|
133
|
+
if (output.isJson()) {
|
|
134
|
+
output.success(result);
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (result.status === 'failed') {
|
|
139
|
+
console.log('\n');
|
|
140
|
+
console.log(chalk.red('✗ 视频处理失败'));
|
|
141
|
+
if (result.error) {
|
|
142
|
+
console.log(chalk.gray('错误: ') + chalk.red(result.error));
|
|
143
|
+
}
|
|
144
|
+
console.log();
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
// 等待 3 秒后重试
|
|
148
|
+
await sleep(3000);
|
|
149
|
+
attempts++;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.log('\n');
|
|
153
|
+
throw createApiError(error);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
console.log('\n');
|
|
157
|
+
console.log(chalk.yellow('⚠️ 等待超时,视频仍在处理中'));
|
|
158
|
+
console.log(chalk.gray('请稍后使用 commerce product video-status --media-id ' + mediaId + ' 再次查询'));
|
|
159
|
+
console.log();
|
|
160
|
+
}
|
|
161
|
+
function formatStatus(status) {
|
|
162
|
+
switch (status) {
|
|
163
|
+
case 'pending':
|
|
164
|
+
return chalk.yellow('等待处理');
|
|
165
|
+
case 'processing':
|
|
166
|
+
return chalk.blue('处理中');
|
|
167
|
+
case 'completed':
|
|
168
|
+
return chalk.green('已完成');
|
|
169
|
+
case 'failed':
|
|
170
|
+
return chalk.red('失败');
|
|
171
|
+
default:
|
|
172
|
+
return chalk.gray(status);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function formatBytes(bytes) {
|
|
176
|
+
if (bytes === 0)
|
|
177
|
+
return '0 B';
|
|
178
|
+
const k = 1024;
|
|
179
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
180
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
181
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
|
|
182
|
+
}
|
|
183
|
+
function sleep(ms) {
|
|
184
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=video-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-status.js","sourceRoot":"","sources":["../../../src/commands/product/video-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-images.d.ts","sourceRoot":"","sources":["../../../src/commands/variant/add-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"add-images.d.ts","sourceRoot":"","sources":["../../../src/commands/variant/add-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,eAAO,MAAM,uBAAuB,SAAM,CAAC"}
|
|
@@ -6,9 +6,10 @@ import { handleError, createApiError, ValidationError } from '../../utils/error.
|
|
|
6
6
|
import { output } from '../../utils/output.js';
|
|
7
7
|
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
8
8
|
const cmd = new Command('add-images')
|
|
9
|
-
.description('Add images to variant (supports local files or media IDs)')
|
|
9
|
+
.description('Add images to variant (supports URLs, local files, or media IDs)')
|
|
10
10
|
.option('--product-id <uuid>', 'Product ID (required)')
|
|
11
11
|
.option('--variant-id <uuid>', 'Variant ID (required)')
|
|
12
|
+
.option('--url <urls...>', 'Image URLs (multiple allowed, recommended)')
|
|
12
13
|
.option('--path <paths...>', 'Local image file paths (multiple allowed)')
|
|
13
14
|
.option('--media-id <ids...>', 'Media IDs from upload command (multiple allowed)')
|
|
14
15
|
.action(async (options) => {
|
|
@@ -21,13 +22,19 @@ const cmd = new Command('add-images')
|
|
|
21
22
|
});
|
|
22
23
|
addEnhancedHelp(cmd, {
|
|
23
24
|
examples: [
|
|
24
|
-
'#
|
|
25
|
+
'# Method 1: Use image URLs (RECOMMENDED - simplest)',
|
|
26
|
+
'$ commerce variant add-images \\',
|
|
27
|
+
' --product-id abc-123 \\',
|
|
28
|
+
' --variant-id var-456 \\',
|
|
29
|
+
' --url "https://images.unsplash.com/photo-xxx?w=800"',
|
|
30
|
+
'',
|
|
31
|
+
'# Method 2: Upload local files',
|
|
25
32
|
'$ commerce variant add-images \\',
|
|
26
33
|
' --product-id abc-123 \\',
|
|
27
34
|
' --variant-id var-456 \\',
|
|
28
35
|
' --path ./white-front.jpg ./white-back.jpg',
|
|
29
36
|
'',
|
|
30
|
-
'#
|
|
37
|
+
'# Method 3: Use media IDs',
|
|
31
38
|
'$ commerce upload image --path ./photo.jpg',
|
|
32
39
|
'# Copy media_id from response',
|
|
33
40
|
'$ commerce variant add-images \\',
|
|
@@ -56,8 +63,8 @@ addEnhancedHelp(cmd, {
|
|
|
56
63
|
],
|
|
57
64
|
notes: [
|
|
58
65
|
'product-id and variant-id are required',
|
|
59
|
-
'Provide
|
|
60
|
-
'Using --
|
|
66
|
+
'Provide one of: --url, --path, or --media-id',
|
|
67
|
+
'Using --url is recommended (backend downloads and processes automatically)',
|
|
61
68
|
'Multiple images can be added in one command',
|
|
62
69
|
]
|
|
63
70
|
});
|
|
@@ -72,9 +79,41 @@ async function addVariantImages(options) {
|
|
|
72
79
|
}
|
|
73
80
|
const productId = options.productId;
|
|
74
81
|
const variantId = options.variantId;
|
|
75
|
-
const { path: imagePaths = [], mediaId: mediaIds = [] } = options;
|
|
76
|
-
if (imagePaths.length === 0 && mediaIds.length === 0) {
|
|
77
|
-
throw new ValidationError('请至少提供一张图片(--path 或 --media-id)', 'images');
|
|
82
|
+
const { url: imageUrls = [], path: imagePaths = [], mediaId: mediaIds = [] } = options;
|
|
83
|
+
if (imageUrls.length === 0 && imagePaths.length === 0 && mediaIds.length === 0) {
|
|
84
|
+
throw new ValidationError('请至少提供一张图片(--url、--path 或 --media-id)', 'images');
|
|
85
|
+
}
|
|
86
|
+
// 优先使用 URL(最简单,后端自动处理)
|
|
87
|
+
if (imageUrls.length > 0) {
|
|
88
|
+
const spinner = output.spinner(`正在添加 ${imageUrls.length} 张图片...`);
|
|
89
|
+
try {
|
|
90
|
+
const result = await commerceApi.variants.addImageUrls(productId, variantId, imageUrls);
|
|
91
|
+
spinner.succeed(`图片添加成功!(${imageUrls.length} 张)`);
|
|
92
|
+
if (output.isJson()) {
|
|
93
|
+
output.success({
|
|
94
|
+
product_id: productId,
|
|
95
|
+
variant_id: variantId,
|
|
96
|
+
images: result.images || [],
|
|
97
|
+
count: (result.images || []).length
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.log();
|
|
102
|
+
if (result.images && result.images.length > 0) {
|
|
103
|
+
console.log(chalk.gray('已添加图片数量: ') + chalk.green(result.images.length.toString()));
|
|
104
|
+
console.log(chalk.gray('图片 URL:'));
|
|
105
|
+
result.images.forEach((url, index) => {
|
|
106
|
+
console.log(chalk.cyan(` ${index + 1}. ${url}`));
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
console.log();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
spinner.fail('图片添加失败');
|
|
114
|
+
throw createApiError(error);
|
|
115
|
+
}
|
|
116
|
+
return;
|
|
78
117
|
}
|
|
79
118
|
// 如果有 Media IDs,直接关联
|
|
80
119
|
if (mediaIds.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-images.js","sourceRoot":"","sources":["../../../src/commands/variant/add-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;KAClC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"add-images.js","sourceRoot":"","sources":["../../../src/commands/variant/add-images.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -2,25 +2,20 @@ export type Environment = 'production' | 'stage' | 'development';
|
|
|
2
2
|
interface UserData {
|
|
3
3
|
id: string;
|
|
4
4
|
email: string;
|
|
5
|
-
name
|
|
6
|
-
role: string;
|
|
5
|
+
name?: string;
|
|
7
6
|
}
|
|
8
7
|
interface EnvironmentConfig {
|
|
9
8
|
authUrl: string;
|
|
10
9
|
apiUrl: string;
|
|
11
10
|
storeDomain: string;
|
|
12
11
|
clientId: string;
|
|
13
|
-
configFile: string;
|
|
14
12
|
}
|
|
15
13
|
export declare const ENV_CONFIG: Record<Environment, EnvironmentConfig>;
|
|
16
14
|
/**
|
|
17
|
-
*
|
|
15
|
+
* 获取当前环境
|
|
16
|
+
* 优先级:OPTIMA_ENV 环境变量 > token.json 的 env 字段 > 默认 production
|
|
18
17
|
*/
|
|
19
18
|
export declare function getCurrentEnvironment(): Environment;
|
|
20
|
-
/**
|
|
21
|
-
* 设置当前激活的环境
|
|
22
|
-
*/
|
|
23
|
-
export declare function setCurrentEnvironment(env: Environment): void;
|
|
24
19
|
/**
|
|
25
20
|
* 获取当前环境的配置信息
|
|
26
21
|
*/
|
|
@@ -28,10 +23,10 @@ export declare function getCurrentEnvConfig(): EnvironmentConfig;
|
|
|
28
23
|
/**
|
|
29
24
|
* 保存认证令牌
|
|
30
25
|
*/
|
|
31
|
-
export declare function saveTokens(access_token: string, refresh_token: string, expires_in: number): void;
|
|
26
|
+
export declare function saveTokens(access_token: string, refresh_token: string, expires_in: number, env: Environment, user?: UserData): void;
|
|
32
27
|
/**
|
|
33
|
-
*
|
|
34
|
-
* 优先级:OPTIMA_TOKEN 环境变量 > ~/.optima/token
|
|
28
|
+
* 获取访问令牌
|
|
29
|
+
* 优先级:OPTIMA_TOKEN 环境变量 > ~/.optima/token.json
|
|
35
30
|
*/
|
|
36
31
|
export declare function getAccessToken(): string | null;
|
|
37
32
|
/**
|
|
@@ -39,28 +34,21 @@ export declare function getAccessToken(): string | null;
|
|
|
39
34
|
*/
|
|
40
35
|
export declare function getTokenExpiresAt(): number | null;
|
|
41
36
|
/**
|
|
42
|
-
* 检查 token
|
|
43
|
-
* 采用提前 5 分钟刷新策略,避免以下问题:
|
|
44
|
-
* 1. 请求过程中 token 过期
|
|
45
|
-
* 2. 网络延迟导致刷新不及时
|
|
37
|
+
* 检查 token 是否过期
|
|
46
38
|
*/
|
|
47
39
|
export declare function isTokenExpired(): boolean;
|
|
48
|
-
/**
|
|
49
|
-
* 获取刷新令牌
|
|
50
|
-
*/
|
|
51
|
-
export declare function getRefreshToken(): string | null;
|
|
52
40
|
/**
|
|
53
41
|
* 检查是否已认证(不检查过期)
|
|
54
42
|
*/
|
|
55
43
|
export declare function isAuthenticated(): boolean;
|
|
56
44
|
/**
|
|
57
|
-
*
|
|
45
|
+
* 确保有效的访问令牌
|
|
58
46
|
* @returns 有效的访问令牌,如果无法获取则返回 null
|
|
59
|
-
* @throws AuthenticationError 当 token
|
|
47
|
+
* @throws AuthenticationError 当 token 过期时
|
|
60
48
|
*/
|
|
61
49
|
export declare function ensureValidToken(): Promise<string | null>;
|
|
62
50
|
/**
|
|
63
|
-
*
|
|
51
|
+
* 保存用户信息到 token.json
|
|
64
52
|
*/
|
|
65
53
|
export declare function saveUser(user: UserData): void;
|
|
66
54
|
/**
|
|
@@ -68,45 +56,25 @@ export declare function saveUser(user: UserData): void;
|
|
|
68
56
|
*/
|
|
69
57
|
export declare function getUser(): UserData | null;
|
|
70
58
|
/**
|
|
71
|
-
*
|
|
59
|
+
* 清除配置(登出)- 删除 token.json
|
|
72
60
|
*/
|
|
73
61
|
export declare function clearConfig(): void;
|
|
74
|
-
/**
|
|
75
|
-
* 清除指定环境的配置
|
|
76
|
-
*/
|
|
77
|
-
export declare function clearConfigForEnv(env: Environment): void;
|
|
78
|
-
/**
|
|
79
|
-
* 清除所有环境的配置
|
|
80
|
-
*/
|
|
81
|
-
export declare function clearAllConfigs(): void;
|
|
82
62
|
/**
|
|
83
63
|
* 获取配置文件路径
|
|
84
64
|
*/
|
|
85
65
|
export declare function getConfigPath(): string;
|
|
86
66
|
/**
|
|
87
67
|
* 获取 Commerce API URL
|
|
88
|
-
* 优先级:环境变量 >
|
|
68
|
+
* 优先级:环境变量 > 当前环境配置
|
|
89
69
|
*/
|
|
90
70
|
export declare function getApiUrl(): string;
|
|
91
71
|
/**
|
|
92
72
|
* 获取 Auth API URL
|
|
93
|
-
* 优先级:环境变量 >
|
|
73
|
+
* 优先级:环境变量 > 当前环境配置
|
|
94
74
|
*/
|
|
95
75
|
export declare function getAuthUrl(): string;
|
|
96
|
-
/**
|
|
97
|
-
* 设置 Commerce API URL
|
|
98
|
-
*/
|
|
99
|
-
export declare function setApiUrl(url: string): void;
|
|
100
|
-
/**
|
|
101
|
-
* 设置 Auth API URL
|
|
102
|
-
*/
|
|
103
|
-
export declare function setAuthUrl(url: string): void;
|
|
104
76
|
/**
|
|
105
77
|
* 获取店铺前端域名
|
|
106
|
-
* 根据当前环境返回对应的前端域名
|
|
107
|
-
* - production: optima.shop
|
|
108
|
-
* - stage: stage.optima.shop
|
|
109
|
-
* - development: optima.sh
|
|
110
78
|
*/
|
|
111
79
|
export declare function getStoreDomain(): string;
|
|
112
80
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,aAAa,CAAC;AAKjE,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAcD,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAmB7D,CAAC;AAoFF;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAenD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,iBAAiB,CAGvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,QAAQ,GACd,IAAI,CAWN;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAS9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CASxC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+B/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,QAAQ,GAAG,IAAI,CAGzC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
|