| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- const FN_URL = process.env.FMODE_FUNCTIONS_URL || 'https://server.fmode.cn/api/functions';
- const APP_ID = process.env.PARSE_APP_ID || 'ncloudmaster';
- const JIMENG_FN_ID = process.env.JIMENG_FN_ID || 'WUkf74lVE5';
- const args = parseArgs(process.argv.slice(2));
- async function main() {
- const checks = [];
- if (!args.baseProbe) {
- checks.push(['diagnose', { action: 'diagnose' }]);
- }
- if (!args.skipUnknown) {
- checks.unshift(['unknownAction', { action: 'unknown' }]);
- }
- if (args.workId) {
- checks.push(['diagnose.work', { action: 'diagnose', workId: args.workId }]);
- }
- if (args.assetUrl) {
- checks.push(['diagnose.asset', { action: 'diagnose', assetUrl: args.assetUrl }]);
- }
- if (args.connectivity) {
- checks.push([
- 'diagnose.connectivity.getOhDateByTask',
- {
- action: 'diagnose',
- probeEndpoint: 'getOhDateByTask',
- allowCharge: '1',
- payload: {
- workId: 'codex-connectivity-probe',
- routerName: 'getOhIdentifyMain',
- },
- },
- ]);
- }
- if (args.baseProbe) {
- checks.push([
- 'diagnoseBase.getOhDateByTask',
- {
- action: 'diagnoseBase',
- endpoint: args.endpoint || 'getOhDateByTask',
- payload: parsePayload(args.payload) || {
- workId: 'codex-connectivity-probe',
- routerName: 'getOhIdentifyMain',
- },
- },
- ]);
- }
- if (args.candidateBases) {
- checks.push([
- 'diagnose.candidateBases',
- {
- action: 'diagnose',
- probeCandidates: '1',
- payload: {
- workId: 'codex-connectivity-probe',
- routerName: 'getOhIdentifyMain',
- },
- },
- ]);
- }
- if (args.endpoint) {
- checks.push([
- `diagnose.${args.endpoint}`,
- {
- action: 'diagnose',
- probeEndpoint: args.endpoint,
- allowCharge: args.allowCharge ? '1' : '0',
- payload: parsePayload(args.payload),
- },
- ]);
- }
- let failed = 0;
- for (const [name, body] of checks) {
- const startedAt = Date.now();
- try {
- const result = await call(body);
- const ok = name === 'unknownAction'
- ? result?.success === false || Number(result?.code || 0) >= 400
- : result?.success !== false && Number(result?.code || 200) < 400;
- if (!ok) failed += 1;
- console.log(`${ok ? 'OK' : 'FAIL'} ${name} ${Date.now() - startedAt}ms`);
- console.log(JSON.stringify(redact(result), null, 2));
- } catch (error) {
- failed += 1;
- console.log(`FAIL ${name} ${Date.now() - startedAt}ms`);
- console.log(error?.message || error);
- }
- }
- if (failed) process.exitCode = 1;
- }
- async function call(body) {
- const response = await fetch(FN_URL, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'X-Parse-Application-Id': APP_ID,
- },
- body: JSON.stringify({
- id: JIMENG_FN_ID,
- _ApplicationId: APP_ID,
- ...body,
- }),
- });
- const text = await response.text();
- try {
- return JSON.parse(text);
- } catch {
- return { code: response.status, success: false, error: text };
- }
- }
- function parseArgs(argv) {
- const out = {};
- const booleanFlags = new Set(['allow-charge', 'skip-unknown', 'connectivity', 'candidate-bases', 'base-probe']);
- for (let i = 0; i < argv.length; i += 1) {
- const arg = argv[i];
- if (arg.startsWith('--')) {
- const key = arg.slice(2).replace(/-([a-z])/g, (_, c) => c.toUpperCase());
- if (booleanFlags.has(arg.slice(2))) {
- out[key] = true;
- continue;
- }
- out[key] = argv[i + 1] || '';
- i += 1;
- }
- }
- return out;
- }
- function parsePayload(value) {
- if (!value) return {};
- try {
- return JSON.parse(value);
- } catch {
- throw new Error('--payload 必须是合法 JSON 字符串');
- }
- }
- function redact(value) {
- if (Array.isArray(value)) return value.map(redact);
- if (!value || typeof value !== 'object') return value;
- const out = {};
- for (const [key, raw] of Object.entries(value)) {
- if (isSecretField(key, raw)) {
- out[key] = typeof raw === 'boolean' ? raw : '[redacted]';
- } else {
- out[key] = redact(raw);
- }
- }
- return out;
- }
- function isSecretField(key, value) {
- if (typeof value === 'boolean' || typeof value === 'number') return false;
- if (/tokenSource|tokenConfigured|allowedEndpoints|jimengBaseUrl|parseBaseUrl/i.test(key)) return false;
- return /authorization|secret|password|accessKey|secretKey/i.test(key)
- || (/token/i.test(key) && !/Source|Configured|Format/i.test(key));
- }
- main().catch((error) => {
- console.error(error?.message || error);
- process.exitCode = 1;
- });
|