'use strict'; const assert = require('assert'); const { _private: { normalizeWorkspaceRefundProxy, normalizeWorkspaceRefundProxyList, parseStoredSecret, encodeStoredSecret, maskWorkspaceRefundProxy, }, } = require('../src/services/workspace_refund_credentials_store'); const proxy = 'socks5://proxy-user:proxy-pass@127.0.0.1:1080'; const proxy2 = 'socks5://proxy-user:proxy-pass@127.0.0.2:1080'; assert.strictEqual(normalizeWorkspaceRefundProxy(proxy), proxy); assert.deepStrictEqual( normalizeWorkspaceRefundProxyList(`${proxy}\n${proxy2}\n${proxy}`), [proxy, proxy2], '代理池应按行读取、保持顺序并自动去重', ); assert.strictEqual(maskWorkspaceRefundProxy(proxy), 'socks5://127.0.0.1:1080'); assert.strictEqual( maskWorkspaceRefundProxy('127.0.0.1:1080:proxy-user:proxy-pass'), 'auto://127.0.0.1:1080', ); const encoded = encodeStoredSecret('header.payload.signature', [proxy, proxy2]); const decoded = parseStoredSecret(encoded); assert.deepStrictEqual(decoded, { accessToken: 'header.payload.signature', proxies: [proxy, proxy2], }); assert.deepStrictEqual( parseStoredSecret(JSON.stringify({ kind: 'workspace_refund_credentials', version: 2, accessToken: 'legacy-v2.header.signature', proxy, })), { accessToken: 'legacy-v2.header.signature', proxies: [proxy] }, '已有单代理加密配置必须自动迁移为代理池', ); assert.deepStrictEqual( parseStoredSecret('legacy.header.signature'), { accessToken: 'legacy.header.signature', proxies: [] }, '升级前只保存 Token 的文件必须继续兼容', ); assert.throws( () => normalizeWorkspaceRefundProxy('not-a-proxy'), error => error && error.code === 'REFUND_PROXY_INVALID', ); assert.throws( () => normalizeWorkspaceRefundProxyList(Array.from({ length: 21 }, (_, index) => `127.0.0.${index + 1}:1080`)), error => error && error.code === 'REFUND_PROXY_INVALID', ); console.log('workspace_refund_credentials_store.test.js: PASS');