arcrun 1.0.6 → 1.1.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/dist/commands/auth-recipe.d.ts +11 -0
- package/dist/commands/auth-recipe.d.ts.map +1 -0
- package/dist/commands/auth-recipe.js +180 -0
- package/dist/commands/auth-recipe.js.map +1 -0
- package/dist/commands/creds.d.ts.map +1 -1
- package/dist/commands/creds.js +51 -24
- package/dist/commands/creds.js.map +1 -1
- package/dist/commands/init.js +14 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/parts.d.ts.map +1 -1
- package/dist/commands/parts.js +322 -151
- package/dist/commands/parts.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +70 -42
- package/dist/commands/push.js.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +2 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* acr auth-recipe — 第三方服務認證 Recipe 管理
|
|
3
|
+
*
|
|
4
|
+
* acr auth-recipe list 列出所有平台預建的 auth recipe(服務清單)
|
|
5
|
+
* acr auth-recipe info <service> 顯示某服務的 recipe 詳情
|
|
6
|
+
* acr auth-recipe scaffold <service> 輸出 credentials.yaml 範本 + workflow 使用範例
|
|
7
|
+
*/
|
|
8
|
+
export declare function cmdAuthRecipeList(): Promise<void>;
|
|
9
|
+
export declare function cmdAuthRecipeInfo(service: string): Promise<void>;
|
|
10
|
+
export declare function cmdAuthRecipeScaffold(service: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=auth-recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-recipe.d.ts","sourceRoot":"","sources":["../../src/commands/auth-recipe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8FH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDvD;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtE;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1E"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* acr auth-recipe — 第三方服務認證 Recipe 管理
|
|
3
|
+
*
|
|
4
|
+
* acr auth-recipe list 列出所有平台預建的 auth recipe(服務清單)
|
|
5
|
+
* acr auth-recipe info <service> 顯示某服務的 recipe 詳情
|
|
6
|
+
* acr auth-recipe scaffold <service> 輸出 credentials.yaml 範本 + workflow 使用範例
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { loadConfig, getCypherExecutorUrl } from '../lib/config.js';
|
|
10
|
+
async function fetchAuthRecipes(baseUrl) {
|
|
11
|
+
const res = await fetch(`${baseUrl}/auth-recipes`);
|
|
12
|
+
if (!res.ok)
|
|
13
|
+
throw new Error(`HTTP ${res.status}`);
|
|
14
|
+
const data = await res.json();
|
|
15
|
+
return data.recipes ?? [];
|
|
16
|
+
}
|
|
17
|
+
async function fetchAuthRecipe(baseUrl, service) {
|
|
18
|
+
const res = await fetch(`${baseUrl}/auth-recipes/${service}`);
|
|
19
|
+
if (res.status === 404)
|
|
20
|
+
return null;
|
|
21
|
+
if (!res.ok)
|
|
22
|
+
throw new Error(`HTTP ${res.status}`);
|
|
23
|
+
const data = await res.json();
|
|
24
|
+
return data.recipe ?? null;
|
|
25
|
+
}
|
|
26
|
+
/** 輸出 credentials.yaml 範本 */
|
|
27
|
+
function buildCredentialsYaml(recipe) {
|
|
28
|
+
const lines = [
|
|
29
|
+
`# credentials.yaml — ${recipe.display_name ?? recipe.service}`,
|
|
30
|
+
`# 填入後執行:acr creds push`,
|
|
31
|
+
``,
|
|
32
|
+
];
|
|
33
|
+
for (const s of recipe.required_secrets) {
|
|
34
|
+
if (s.help)
|
|
35
|
+
lines.push(`# ${s.label}`);
|
|
36
|
+
if (s.help)
|
|
37
|
+
lines.push(`# ${s.help}`);
|
|
38
|
+
if (s.help_url)
|
|
39
|
+
lines.push(`# 說明文件:${s.help_url}`);
|
|
40
|
+
if (s.type === 'json_blob') {
|
|
41
|
+
lines.push(`${s.key}: |`);
|
|
42
|
+
lines.push(` {`);
|
|
43
|
+
lines.push(` "type": "service_account",`);
|
|
44
|
+
lines.push(` ...`);
|
|
45
|
+
lines.push(` }`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
lines.push(`${s.key}: ""`);
|
|
49
|
+
}
|
|
50
|
+
lines.push(``);
|
|
51
|
+
}
|
|
52
|
+
return lines.join('\n');
|
|
53
|
+
}
|
|
54
|
+
/** 輸出 workflow.yaml config 範例 */
|
|
55
|
+
function buildWorkflowExample(recipe) {
|
|
56
|
+
const lines = [
|
|
57
|
+
`# workflow.yaml — ${recipe.display_name ?? recipe.service} 使用範例`,
|
|
58
|
+
``,
|
|
59
|
+
`name: my_workflow`,
|
|
60
|
+
`triplets:`,
|
|
61
|
+
` - "input >> PIPE >> ${recipe.service}_call"`,
|
|
62
|
+
` - "${recipe.service}_call >> PIPE >> output"`,
|
|
63
|
+
``,
|
|
64
|
+
`config:`,
|
|
65
|
+
` ${recipe.service}_call:`,
|
|
66
|
+
` component: ${recipe.service}`,
|
|
67
|
+
` method: POST`,
|
|
68
|
+
` _path: /your-endpoint-path`,
|
|
69
|
+
` # 其他參數依 API 文件填入`,
|
|
70
|
+
];
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
73
|
+
export async function cmdAuthRecipeList() {
|
|
74
|
+
const config = loadConfig();
|
|
75
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
76
|
+
try {
|
|
77
|
+
const recipes = await fetchAuthRecipes(baseUrl);
|
|
78
|
+
if (recipes.length === 0) {
|
|
79
|
+
console.log(chalk.yellow(' 尚無 auth recipe。'));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// 依 primitive 分組
|
|
83
|
+
const staticKey = recipes.filter(r => r.primitive === 'static_key');
|
|
84
|
+
const serviceAccount = recipes.filter(r => r.primitive === 'service_account');
|
|
85
|
+
const others = recipes.filter(r => r.primitive !== 'static_key' && r.primitive !== 'service_account');
|
|
86
|
+
console.log(chalk.bold(`\n 第三方服務整合(${recipes.length} 個)\n`));
|
|
87
|
+
if (staticKey.length) {
|
|
88
|
+
console.log(chalk.gray(' API Key / Token 類:'));
|
|
89
|
+
for (const r of staticKey) {
|
|
90
|
+
const name = (r.display_name ?? r.service).padEnd(30);
|
|
91
|
+
const secrets = r.required_secrets.map(s => s.key).join(', ');
|
|
92
|
+
console.log(` ${chalk.cyan(r.service.padEnd(22))} ${name} ${chalk.gray(`需要: ${secrets}`)}`);
|
|
93
|
+
}
|
|
94
|
+
console.log();
|
|
95
|
+
}
|
|
96
|
+
if (serviceAccount.length) {
|
|
97
|
+
console.log(chalk.gray(' Service Account / JWT 類:'));
|
|
98
|
+
for (const r of serviceAccount) {
|
|
99
|
+
const name = (r.display_name ?? r.service).padEnd(30);
|
|
100
|
+
const secrets = r.required_secrets.map(s => s.key).join(', ');
|
|
101
|
+
console.log(` ${chalk.cyan(r.service.padEnd(22))} ${name} ${chalk.gray(`需要: ${secrets}`)}`);
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
}
|
|
105
|
+
if (others.length) {
|
|
106
|
+
console.log(chalk.gray(' 其他:'));
|
|
107
|
+
for (const r of others) {
|
|
108
|
+
console.log(` ${chalk.cyan(r.service.padEnd(22))} ${r.display_name ?? r.service}`);
|
|
109
|
+
}
|
|
110
|
+
console.log();
|
|
111
|
+
}
|
|
112
|
+
console.log(chalk.gray(` 使用 acr auth-recipe scaffold <service> 查看設定範本\n`));
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
console.error(chalk.red(` 無法取得 auth recipe 清單:${e instanceof Error ? e.message : e}`));
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export async function cmdAuthRecipeInfo(service) {
|
|
120
|
+
const config = loadConfig();
|
|
121
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
122
|
+
try {
|
|
123
|
+
const recipe = await fetchAuthRecipe(baseUrl, service);
|
|
124
|
+
if (!recipe) {
|
|
125
|
+
console.error(chalk.red(` 找不到 auth recipe:${service}`));
|
|
126
|
+
console.log(chalk.gray(` 執行 acr auth-recipe list 查看所有可用服務`));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
console.log(chalk.bold(`\n ${recipe.display_name ?? recipe.service}\n`));
|
|
130
|
+
if (recipe.description)
|
|
131
|
+
console.log(` ${recipe.description}\n`);
|
|
132
|
+
console.log(` service: ${recipe.service}`);
|
|
133
|
+
console.log(` primitive: ${recipe.primitive}`);
|
|
134
|
+
console.log(` base_url: ${recipe.base_url}`);
|
|
135
|
+
if (recipe.token_exchange) {
|
|
136
|
+
console.log(` scopes: ${recipe.token_exchange.scopes.join(', ')}`);
|
|
137
|
+
}
|
|
138
|
+
console.log(`\n ${chalk.bold('需要的 credentials:')}`);
|
|
139
|
+
for (const s of recipe.required_secrets) {
|
|
140
|
+
console.log(` ${chalk.cyan(s.key)}${s.optional ? chalk.gray(' (optional)') : ''}`);
|
|
141
|
+
console.log(` ${s.label}`);
|
|
142
|
+
if (s.help)
|
|
143
|
+
console.log(chalk.gray(` ${s.help}`));
|
|
144
|
+
if (s.help_url)
|
|
145
|
+
console.log(chalk.gray(` → ${s.help_url}`));
|
|
146
|
+
}
|
|
147
|
+
console.log();
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
console.error(chalk.red(` 錯誤:${e instanceof Error ? e.message : e}`));
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export async function cmdAuthRecipeScaffold(service) {
|
|
155
|
+
const config = loadConfig();
|
|
156
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
157
|
+
try {
|
|
158
|
+
const recipe = await fetchAuthRecipe(baseUrl, service);
|
|
159
|
+
if (!recipe) {
|
|
160
|
+
console.error(chalk.red(` 找不到 auth recipe:${service}`));
|
|
161
|
+
console.log(chalk.gray(` 執行 acr auth-recipe list 查看所有可用服務`));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
console.log(chalk.bold(`\n ── credentials.yaml 範本 ────────────────────────────────\n`));
|
|
165
|
+
console.log(buildCredentialsYaml(recipe));
|
|
166
|
+
console.log(chalk.bold(`\n ── workflow.yaml 範例 ───────────────────────────────────\n`));
|
|
167
|
+
console.log(buildWorkflowExample(recipe));
|
|
168
|
+
console.log();
|
|
169
|
+
if (recipe.primitive === 'service_account') {
|
|
170
|
+
console.log(chalk.yellow(` 注意(Service Account):\n` +
|
|
171
|
+
` 將整份 Service Account JSON 貼入 credentials.yaml 的 ${recipe.required_secrets[0].key} 欄位。\n` +
|
|
172
|
+
` 格式:多行 YAML literal block(| 後換行縮排)。\n`));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
console.error(chalk.red(` 錯誤:${e instanceof Error ? e.message : e}`));
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=auth-recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-recipe.js","sourceRoot":"","sources":["../../src/commands/auth-recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creds.d.ts","sourceRoot":"","sources":["../../src/commands/creds.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"creds.d.ts","sourceRoot":"","sources":["../../src/commands/creds.ts"],"names":[],"mappings":"AAwCA,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoElE"}
|
package/dist/commands/creds.js
CHANGED
|
@@ -1,18 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* acr creds push [credentials.yaml]
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
*
|
|
4
|
+
* 讀取 credentials.yaml,以 ENCRYPTION_KEY 加密後 POST 至 cypher.arcrun.dev/credentials。
|
|
5
|
+
* Server 以 {api_key}:cred:{name} 為 KV key 存入 CREDENTIALS_KV(多租戶隔離)。
|
|
6
|
+
*
|
|
7
|
+
* 不再需要用戶提供 CF API Token 或 KV Namespace ID。
|
|
5
8
|
*/
|
|
6
9
|
import { readFileSync } from 'node:fs';
|
|
7
10
|
import yaml from 'js-yaml';
|
|
8
11
|
import chalk from 'chalk';
|
|
9
12
|
import ora from 'ora';
|
|
10
|
-
import { loadConfig } from '../lib/config.js';
|
|
11
|
-
|
|
13
|
+
import { loadConfig, getCypherExecutorUrl } from '../lib/config.js';
|
|
14
|
+
async function encryptValue(value, encryptionKey) {
|
|
15
|
+
const keyBytes = hexToUint8Array(encryptionKey);
|
|
16
|
+
const cryptoKey = await crypto.subtle.importKey('raw', keyBytes.buffer, { name: 'AES-GCM' }, false, ['encrypt']);
|
|
17
|
+
const ivBytes = crypto.getRandomValues(new Uint8Array(12));
|
|
18
|
+
const encoded = new TextEncoder().encode(value);
|
|
19
|
+
const cipherBuffer = await crypto.subtle.encrypt({ name: 'AES-GCM', iv: ivBytes }, cryptoKey, encoded);
|
|
20
|
+
return {
|
|
21
|
+
encrypted: Buffer.from(new Uint8Array(cipherBuffer)).toString('base64'),
|
|
22
|
+
iv: Buffer.from(ivBytes).toString('base64'),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function hexToUint8Array(hex) {
|
|
26
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
27
|
+
for (let i = 0; i < hex.length; i += 2)
|
|
28
|
+
bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
|
|
29
|
+
return bytes;
|
|
30
|
+
}
|
|
12
31
|
export async function cmdCredsPush(filePath) {
|
|
13
32
|
const config = loadConfig();
|
|
14
|
-
if (
|
|
15
|
-
console.error(chalk.red('
|
|
33
|
+
if (config.mode === 'local') {
|
|
34
|
+
console.error(chalk.red('Local 模式不支援 acr creds push。'));
|
|
35
|
+
console.log(chalk.gray('請先執行 acr init 設定 Standard 模式,取得 API Key。'));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
if (!config.api_key) {
|
|
39
|
+
console.error(chalk.red('缺少 api_key,請重新執行 acr init。'));
|
|
16
40
|
process.exit(1);
|
|
17
41
|
}
|
|
18
42
|
// 讀取 credentials.yaml
|
|
@@ -30,33 +54,36 @@ export async function cmdCredsPush(filePath) {
|
|
|
30
54
|
console.log(chalk.yellow('credentials.yaml 中沒有有效的 credential(請取消注解並填入值)'));
|
|
31
55
|
return;
|
|
32
56
|
}
|
|
33
|
-
//
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!namespaceId) {
|
|
38
|
-
console.error(chalk.red('缺少 KV Namespace ID,請執行 acr init'));
|
|
57
|
+
// 加密金鑰:優先從 config 讀(acr init 時自動寫入),其次從環境變數
|
|
58
|
+
const encryptionKey = config.encryption_key ?? process.env.ARCRUN_ENCRYPTION_KEY ?? '';
|
|
59
|
+
if (!encryptionKey || encryptionKey.length < 64) {
|
|
60
|
+
console.error(chalk.red('缺少 encryption_key。請重新執行 acr init 取得設定。'));
|
|
39
61
|
process.exit(1);
|
|
40
62
|
}
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
namespaceId,
|
|
44
|
-
apiToken: config.cf_api_token,
|
|
45
|
-
});
|
|
46
|
-
// 加密金鑰(若無則用 dev 模式 base64)
|
|
47
|
-
const encryptionKey = process.env.ARCRUN_ENCRYPTION_KEY ?? '';
|
|
48
|
-
console.log(chalk.bold(`\n 上傳 ${entries.length} 個 credentials 至你的 CF KV\n`));
|
|
63
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
64
|
+
console.log(chalk.bold(`\n 上傳 ${entries.length} 個 credentials 至 ${baseUrl}\n`));
|
|
49
65
|
for (const [name, value] of entries) {
|
|
50
66
|
const spinner = ora(` ${name}`).start();
|
|
51
67
|
try {
|
|
52
|
-
const encrypted = await
|
|
53
|
-
await
|
|
54
|
-
|
|
68
|
+
const { encrypted, iv } = await encryptValue(String(value), encryptionKey);
|
|
69
|
+
const res = await fetch(`${baseUrl}/credentials`, {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
headers: {
|
|
72
|
+
'Content-Type': 'application/json',
|
|
73
|
+
'X-Arcrun-API-Key': config.api_key,
|
|
74
|
+
},
|
|
75
|
+
body: JSON.stringify({ name, encrypted, iv }),
|
|
76
|
+
});
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
const errBody = await res.text().catch(() => '');
|
|
79
|
+
throw new Error(`HTTP ${res.status}: ${errBody.slice(0, 200)}`);
|
|
80
|
+
}
|
|
81
|
+
spinner.succeed(chalk.green(` ✓ ${name}`));
|
|
55
82
|
}
|
|
56
83
|
catch (e) {
|
|
57
84
|
spinner.fail(chalk.red(` ✗ ${name} 失敗:${e instanceof Error ? e.message : e}`));
|
|
58
85
|
}
|
|
59
86
|
}
|
|
60
|
-
console.log(chalk.gray('\n
|
|
87
|
+
console.log(chalk.gray('\n Credential 已加密儲存。執行 workflow 時會自動注入,無需在 --input 手動帶 token。\n'));
|
|
61
88
|
}
|
|
62
89
|
//# sourceMappingURL=creds.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creds.js","sourceRoot":"","sources":["../../src/commands/creds.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"creds.js","sourceRoot":"","sources":["../../src/commands/creds.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -47,51 +47,45 @@ async function initLocal() {
|
|
|
47
47
|
console.log(chalk.gray(' 需要用自己的 CF 帳號存放 credentials?執行 acr init(Standard 模式)。\n'));
|
|
48
48
|
}
|
|
49
49
|
async function initStandard(rl) {
|
|
50
|
-
console.log(chalk.gray(' Standard
|
|
51
|
-
const
|
|
52
|
-
const kvNamespaceId = await prompt(rl, 'USER_KV Namespace ID(先至 CF Dashboard 建立一個 KV 後貼上)');
|
|
53
|
-
const cfApiToken = await prompt(rl, 'CF API Token(只需 KV Edit 權限,供 acr 讀寫你的 KV)');
|
|
54
|
-
const email = await prompt(rl, 'Email(取得 arcrun.dev API Key)');
|
|
50
|
+
console.log(chalk.gray(' Standard 模式:只需要 email,不需要 Cloudflare 帳號\n'));
|
|
51
|
+
const email = await prompt(rl, 'Email(用來取得 API Key)');
|
|
55
52
|
process.stdout.write(chalk.gray('\n → 向 arcrun.dev 取得 API Key...'));
|
|
56
|
-
let apiKey;
|
|
53
|
+
let apiKey = '';
|
|
54
|
+
let encryptionKey = '';
|
|
57
55
|
try {
|
|
58
56
|
const res = await fetch(ARCRUN_REGISTER_URL, {
|
|
59
57
|
method: 'POST',
|
|
60
58
|
headers: { 'Content-Type': 'application/json' },
|
|
61
|
-
body: JSON.stringify({ email }),
|
|
59
|
+
body: JSON.stringify({ email }),
|
|
62
60
|
});
|
|
63
61
|
if (!res.ok) {
|
|
64
62
|
const err = await res.text();
|
|
65
|
-
throw new Error(
|
|
63
|
+
throw new Error(`取得失敗(${res.status}):${err}`);
|
|
66
64
|
}
|
|
67
65
|
const data = await res.json();
|
|
68
66
|
apiKey = data.api_key;
|
|
67
|
+
encryptionKey = data.encryption_key;
|
|
69
68
|
console.log(chalk.green(' ✓'));
|
|
70
69
|
}
|
|
71
70
|
catch (e) {
|
|
72
|
-
console.log(chalk.yellow(
|
|
73
|
-
|
|
71
|
+
console.log(chalk.yellow(` ✗ ${e instanceof Error ? e.message : e}`));
|
|
72
|
+
console.log(chalk.yellow(' 請確認網路連線後重新執行 acr init\n'));
|
|
73
|
+
process.exit(1);
|
|
74
74
|
}
|
|
75
75
|
const config = {
|
|
76
76
|
mode: 'standard',
|
|
77
|
-
cloudflare_account_id: accountId,
|
|
78
|
-
user_kv_namespace_id: kvNamespaceId,
|
|
79
|
-
cf_api_token: cfApiToken,
|
|
80
77
|
api_key: apiKey,
|
|
78
|
+
encryption_key: encryptionKey,
|
|
81
79
|
};
|
|
82
80
|
saveConfig(config);
|
|
83
|
-
// 建立空白 credentials.yaml
|
|
84
81
|
createCredentialsYamlIfMissing();
|
|
85
82
|
console.log(chalk.green('\n ✓ 設定完成 → ~/.arcrun/config.yaml'));
|
|
86
|
-
|
|
87
|
-
console.log(chalk.green(` ✓ API Key:${apiKey.slice(0, 8)}...(已安全儲存)`));
|
|
88
|
-
}
|
|
83
|
+
console.log(chalk.green(` ✓ API Key:${apiKey.slice(0, 8)}...`));
|
|
89
84
|
console.log(chalk.green(' ✓ 建立 credentials.yaml(已加入 .gitignore)\n'));
|
|
90
|
-
console.log(chalk.gray(' 你的 credential 與 workflow 存在你自己的 CF KV,arcrun 不會儲存它們。\n'));
|
|
91
85
|
console.log(' 下一步:');
|
|
86
|
+
console.log(chalk.cyan(' acr parts scaffold <component>') + ' # 查看零件 config 範本');
|
|
92
87
|
console.log(chalk.cyan(' acr creds push credentials.yaml') + ' # 上傳加密 credentials');
|
|
93
|
-
console.log(chalk.cyan(' acr push workflow.yaml') + '
|
|
94
|
-
console.log(chalk.cyan(' acr run <workflow_name>') + ' # 執行 workflow\n');
|
|
88
|
+
console.log(chalk.cyan(' acr push workflow.yaml') + ' # 部署 workflow 並取得 Webhook URL\n');
|
|
95
89
|
}
|
|
96
90
|
async function initSelfHosted(rl) {
|
|
97
91
|
console.log(chalk.gray(' Self-hosted 模式:自行部署所有 Worker 到你的 Cloudflare 帳號\n'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAEjE,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AAEjE,KAAK,UAAU,MAAM,CAAC,EAAsC,EAAE,QAAgB;IAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAkD;IAC9E,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,OAAO;KACd,CAAC;IAEF,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,wBAAwB,EAAE,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,GAAG,0BAA0B,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAsC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/commands/parts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../src/commands/parts.ts"],"names":[],"mappings":"AAiSA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC9C;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEzE;AAED,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEvG"}
|