@autonoelle/wsg-active 0.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.
Files changed (110) hide show
  1. package/README.md +169 -0
  2. package/dist/activeRestClient.d.ts +30 -0
  3. package/dist/activeRestClient.d.ts.map +1 -0
  4. package/dist/activeRestClient.js +130 -0
  5. package/dist/activeRestClient.js.map +1 -0
  6. package/dist/args.d.ts +33 -0
  7. package/dist/args.d.ts.map +1 -0
  8. package/dist/args.js +83 -0
  9. package/dist/args.js.map +1 -0
  10. package/dist/commands/account.d.ts +23 -0
  11. package/dist/commands/account.d.ts.map +1 -0
  12. package/dist/commands/account.js +322 -0
  13. package/dist/commands/account.js.map +1 -0
  14. package/dist/commands/auth.d.ts +8 -0
  15. package/dist/commands/auth.d.ts.map +1 -0
  16. package/dist/commands/auth.js +30 -0
  17. package/dist/commands/auth.js.map +1 -0
  18. package/dist/commands/battleMap.d.ts +4 -0
  19. package/dist/commands/battleMap.d.ts.map +1 -0
  20. package/dist/commands/battleMap.js +146 -0
  21. package/dist/commands/battleMap.js.map +1 -0
  22. package/dist/commands/config.d.ts +11 -0
  23. package/dist/commands/config.d.ts.map +1 -0
  24. package/dist/commands/config.js +125 -0
  25. package/dist/commands/config.js.map +1 -0
  26. package/dist/commands/discovery.d.ts +2 -0
  27. package/dist/commands/discovery.d.ts.map +1 -0
  28. package/dist/commands/discovery.js +109 -0
  29. package/dist/commands/discovery.js.map +1 -0
  30. package/dist/commands/functions.d.ts +26 -0
  31. package/dist/commands/functions.d.ts.map +1 -0
  32. package/dist/commands/functions.js +237 -0
  33. package/dist/commands/functions.js.map +1 -0
  34. package/dist/commands/mission.d.ts +7 -0
  35. package/dist/commands/mission.d.ts.map +1 -0
  36. package/dist/commands/mission.js +217 -0
  37. package/dist/commands/mission.js.map +1 -0
  38. package/dist/commands/session.d.ts +7 -0
  39. package/dist/commands/session.d.ts.map +1 -0
  40. package/dist/commands/session.js +17 -0
  41. package/dist/commands/session.js.map +1 -0
  42. package/dist/commands/shipPipe.d.ts +11 -0
  43. package/dist/commands/shipPipe.d.ts.map +1 -0
  44. package/dist/commands/shipPipe.js +127 -0
  45. package/dist/commands/shipPipe.js.map +1 -0
  46. package/dist/commands/snapshot.d.ts +33 -0
  47. package/dist/commands/snapshot.d.ts.map +1 -0
  48. package/dist/commands/snapshot.js +308 -0
  49. package/dist/commands/snapshot.js.map +1 -0
  50. package/dist/commands/store.d.ts +32 -0
  51. package/dist/commands/store.d.ts.map +1 -0
  52. package/dist/commands/store.js +212 -0
  53. package/dist/commands/store.js.map +1 -0
  54. package/dist/configTypes.d.ts +131 -0
  55. package/dist/configTypes.d.ts.map +1 -0
  56. package/dist/configTypes.js +152 -0
  57. package/dist/configTypes.js.map +1 -0
  58. package/dist/errors.d.ts +21 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +42 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/gameDataClient.d.ts +15 -0
  63. package/dist/gameDataClient.d.ts.map +1 -0
  64. package/dist/gameDataClient.js +63 -0
  65. package/dist/gameDataClient.js.map +1 -0
  66. package/dist/graphqlClient.d.ts +32 -0
  67. package/dist/graphqlClient.d.ts.map +1 -0
  68. package/dist/graphqlClient.js +106 -0
  69. package/dist/graphqlClient.js.map +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +712 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/output.d.ts +24 -0
  75. package/dist/output.d.ts.map +1 -0
  76. package/dist/output.js +39 -0
  77. package/dist/output.js.map +1 -0
  78. package/dist/security.d.ts +3 -0
  79. package/dist/security.d.ts.map +1 -0
  80. package/dist/security.js +41 -0
  81. package/dist/security.js.map +1 -0
  82. package/dist/tests/clients.test.d.ts +2 -0
  83. package/dist/tests/clients.test.d.ts.map +1 -0
  84. package/dist/tests/clients.test.js +31 -0
  85. package/dist/tests/clients.test.js.map +1 -0
  86. package/dist/tests/security.test.d.ts +2 -0
  87. package/dist/tests/security.test.d.ts.map +1 -0
  88. package/dist/tests/security.test.js +26 -0
  89. package/dist/tests/security.test.js.map +1 -0
  90. package/dist/tests/shipPipe.test.d.ts +2 -0
  91. package/dist/tests/shipPipe.test.d.ts.map +1 -0
  92. package/dist/tests/shipPipe.test.js +31 -0
  93. package/dist/tests/shipPipe.test.js.map +1 -0
  94. package/dist/tests/validation.test.d.ts +2 -0
  95. package/dist/tests/validation.test.d.ts.map +1 -0
  96. package/dist/tests/validation.test.js +58 -0
  97. package/dist/tests/validation.test.js.map +1 -0
  98. package/dist/tests/writeWorkflow.test.d.ts +2 -0
  99. package/dist/tests/writeWorkflow.test.d.ts.map +1 -0
  100. package/dist/tests/writeWorkflow.test.js +22 -0
  101. package/dist/tests/writeWorkflow.test.js.map +1 -0
  102. package/dist/validation.d.ts +18 -0
  103. package/dist/validation.d.ts.map +1 -0
  104. package/dist/validation.js +328 -0
  105. package/dist/validation.js.map +1 -0
  106. package/dist/writeWorkflow.d.ts +16 -0
  107. package/dist/writeWorkflow.d.ts.map +1 -0
  108. package/dist/writeWorkflow.js +135 -0
  109. package/dist/writeWorkflow.js.map +1 -0
  110. package/package.json +31 -0
package/README.md ADDED
@@ -0,0 +1,169 @@
1
+ # AutoNoelle WSG Active CLI
2
+
3
+ 面向脚本和 AI Agent 的账号查询、用户配置、Store、会话与任务控制 CLI。公开舰船、装备、地图、路线和掉落查询请使用相邻的 `autonoelle-wsg-gamedata-cli`。
4
+
5
+ 完整的 ID 映射、配置字段、自然语言示例、安全写入和恢复流程见 [`../AI_AGENT_GUIDE.md`](../AI_AGENT_GUIDE.md)。
6
+
7
+ ## 安装与检查
8
+
9
+ 需要 Node.js 18 或更高版本。
10
+
11
+ ```bash
12
+ npm install
13
+ npm run check
14
+ npm run build
15
+ npm test
16
+ node dist/index.js --help
17
+ ```
18
+
19
+ ## 连接与认证
20
+
21
+ | 全局选项 | 环境变量 | 默认值 |
22
+ | --- | --- | --- |
23
+ | `--query-url <url>` | `AUTO_NOELLE_QUERY_URL` | `https://query.auto.noelle.cool/UserConfig` |
24
+ | `--active-url <url>` | `AUTO_NOELLE_ACTIVE_URL` | `https://api.auto.noelle.cool` |
25
+ | `--data-url <url>` | `AUTO_NOELLE_DATA_URL` | `https://data.auto.noelle.cool/GameData` |
26
+ | `--scope <scope>` | `AUTO_NOELLE_SCOPE` | `CN` |
27
+ | `--k <key>` | `AUTO_NOELLE_USER_KEY` | 无 |
28
+ | `--timeout <ms>` | `AUTO_NOELLE_TIMEOUT_MS` | `15000` |
29
+
30
+ 后端登录响应的历史字段 `accessToken` 实际包含确定性的 AutoNoelle user key,而不是游戏内部 access token。CLI 输出会将它脱敏。
31
+
32
+ ```bash
33
+ autonoelle-wsg-active auth login \
34
+ --username <用户名> \
35
+ --password <密码> \
36
+ --servername <服务器名>
37
+ ```
38
+
39
+ 也可以只设置运行时环境变量 `AUTO_NOELLE_USERNAME`、`AUTO_NOELLE_PASSWORD`、`AUTO_NOELLE_SERVERNAME`;当 `--k`/`AUTO_NOELLE_USER_KEY` 缺失时,后续命令会在当前进程内自动登录并复用 user key,不写入文件、不打印完整凭证。
40
+
41
+ ## 账号查询
42
+
43
+ ```bash
44
+ autonoelle-wsg-active account summary
45
+ autonoelle-wsg-active account resources
46
+ autonoelle-wsg-active account teams --all
47
+ autonoelle-wsg-active account equips --first 20 --fields id
48
+ autonoelle-wsg-active account tasks --first 20
49
+ autonoelle-wsg-active account maps --first 20
50
+ autonoelle-wsg-active account expeditions --all
51
+ autonoelle-wsg-active account dock
52
+ autonoelle-wsg-active account battle
53
+ ```
54
+
55
+ 账号舰船查询会按 CID 关联公开 GameData,并返回图鉴名称、舰种、国籍、改造状态、实例 ID、婚姻状态和占用状态:
56
+
57
+ ```bash
58
+ autonoelle-wsg-active account ships --ship-type BB --level-min 100 --locked --all
59
+ autonoelle-wsg-active account ships --title 胡德 --first 20
60
+ autonoelle-wsg-active account ships --unmarried --available --fields instanceId,cid,title,level,status
61
+ ```
62
+
63
+ 原始快照仍可通过 `snapshot active-info` 分部读取。除非确实需要大型原始对象,不要运行 `snapshot active-info full`。
64
+
65
+ ## 配置发现与安全写入
66
+
67
+ ```bash
68
+ autonoelle-wsg-active config types
69
+ autonoelle-wsg-active config schema
70
+ autonoelle-wsg-active config schema --type MissionBattleConfig
71
+ autonoelle-wsg-active config schema --type ids
72
+ ```
73
+
74
+ 读取配置:
75
+
76
+ ```bash
77
+ autonoelle-wsg-active config get --type MissionBattleConfig
78
+ ```
79
+
80
+ 写入默认为深度合并:保留输入未提供的对象字段,数组整体替换,并移除只读 `description`。先 dry-run,再使用返回的 `currentHash` 做并发保护:
81
+
82
+ ```bash
83
+ autonoelle-wsg-active config set \
84
+ --type MissionBattleConfig \
85
+ --file proposed.json \
86
+ --dry-run
87
+
88
+ autonoelle-wsg-active config set \
89
+ --type MissionBattleConfig \
90
+ --file proposed.json \
91
+ --expect-current-hash <sha256>
92
+ ```
93
+
94
+ CLI 会写前读取、校验、写后回读并比较。后端可能吞掉持久化异常并返回成功,因此回验不可省略。失败或不一致时,CLI 会尝试恢复写前值并报告恢复结果。
95
+
96
+ ## Store、过滤器与地图
97
+
98
+ Store 类型:`ShipPipe`、`ShipReadyPipe`、`TeamPipe`、`BattleMapConfig`。
99
+
100
+ ```bash
101
+ autonoelle-wsg-active store ShipPipe list
102
+ autonoelle-wsg-active store ShipPipe get --id <uuid>
103
+ autonoelle-wsg-active store ShipPipe preview --id <uuid> --first 20
104
+ autonoelle-wsg-active store ShipPipe preview --file pipe.json --all
105
+ autonoelle-wsg-active store ShipPipe set --file pipe.json --dry-run
106
+
107
+ autonoelle-wsg-active store TeamPipe set --file team.json --dry-run
108
+ autonoelle-wsg-active store BattleMapConfig validate --file map.json
109
+ autonoelle-wsg-active store BattleMapConfig set --file map.json --dry-run
110
+ ```
111
+
112
+ 安全删除会先检查 TeamPipe、GlobalDecomposeConfig 和 MissionBattleConfig 引用,删除后确认对象不存在;`--force` 仅供玩家明确批准并具备恢复方案时使用。
113
+
114
+ ```bash
115
+ autonoelle-wsg-active store TeamPipe remove --id <uuid> --dry-run
116
+ autonoelle-wsg-active store TeamPipe remove --id <uuid> --expect-current-hash <sha256>
117
+ ```
118
+
119
+ ## 会话与任务
120
+
121
+ ```bash
122
+ autonoelle-wsg-active session info
123
+ autonoelle-wsg-active session reconnect
124
+ autonoelle-wsg-active session disconnect
125
+ autonoelle-wsg-active session unlock
126
+ autonoelle-wsg-active session autologin --state true
127
+
128
+ autonoelle-wsg-active mission list
129
+ autonoelle-wsg-active mission validate --type MissionBattleConfig
130
+ autonoelle-wsg-active mission validate --type MissionBattleConfig --file proposed.json
131
+ autonoelle-wsg-active mission enable --type MissionBattleConfig --dry-run
132
+ autonoelle-wsg-active mission enable --type MissionBattleConfig
133
+ autonoelle-wsg-active mission disable --type MissionBattleConfig
134
+ ```
135
+
136
+ `mission enable` 会先验证在线状态、完整任务配置、账号队伍、地图配置、TeamPipe、ShipPipe、ShipReadyPipe、候选舰船、容量和资源,再设置并回读状态。`mission disable` 也会回读确认。
137
+
138
+ ## 输出
139
+
140
+ 帮助文本为普通文本;业务命令 stdout 只输出 JSON:
141
+
142
+ ```json
143
+ { "ok": true, "data": {} }
144
+ ```
145
+
146
+ ```json
147
+ {
148
+ "ok": false,
149
+ "error": {
150
+ "code": "MISSION_PREFLIGHT_FAILED",
151
+ "category": "validation",
152
+ "message": "MissionBattleConfig is not safe to start.",
153
+ "details": {},
154
+ "suggestion": "Resolve every preflight error before enabling the mission.",
155
+ "retryable": false
156
+ }
157
+ }
158
+ ```
159
+
160
+ 成功退出码为 `0`,错误退出码非 `0`。密码、user key、access token 和常见认证字段会递归脱敏。
161
+
162
+ ## 安全与限制
163
+
164
+ - 不执行拆船、删装备、付费资源消耗、账号安全修改等不可逆操作。
165
+ - `ShipReadyPipe.useUsedEquip=true` 会从其他非队伍舰船拆装备,必须得到明确批准。
166
+ - `BattleMission.autoDecompose=true` 在船舱满时可能触发拆解链路。
167
+ - 当前持久化 ShipPipe 没有实例 ID 和婚姻字段;`account ships` 可以按这些条件查询,但不能伪装成可保存条件。
168
+ - 精确 `hpRate` 预览需要复现舰船、技能和装备属性聚合,当前会明确拒绝而不是给出不可靠结果。
169
+ - 专用任务 preflight 当前覆盖 `MissionBattleConfig`。
@@ -0,0 +1,30 @@
1
+ /** REST client for Active Manager endpoints. Uses native fetch. */
2
+ import { CliError } from './errors.js';
3
+ export interface ActiveRestOptions {
4
+ activeUrl: string;
5
+ k: string;
6
+ scope: string;
7
+ timeoutMs?: number;
8
+ }
9
+ export interface ActiveBaseOptions {
10
+ activeUrl: string;
11
+ scope: string;
12
+ timeoutMs?: number;
13
+ }
14
+ export declare class ActiveRestError extends CliError {
15
+ readonly httpCode?: number | undefined;
16
+ readonly body?: unknown | undefined;
17
+ constructor(code: string, message: string, httpCode?: number | undefined, body?: unknown | undefined, options?: {
18
+ category?: 'authentication' | 'authorization' | 'network' | 'timeout' | 'server' | 'rest';
19
+ suggestion?: string;
20
+ retryable?: boolean;
21
+ cause?: unknown;
22
+ });
23
+ }
24
+ /** Execute a REST call against the Active Manager. */
25
+ export declare function activeCall<T = unknown>(options: ActiveRestOptions, action: string, body?: Record<string, unknown>): Promise<T>;
26
+ /** Execute a POST call against the Active API. */
27
+ export declare function activePost<T = unknown>(options: ActiveBaseOptions, path: string, body?: Record<string, unknown>, k?: string): Promise<T>;
28
+ /** Validate required options and return parsed options. */
29
+ export declare function buildActiveOptions(): ActiveRestOptions;
30
+ //# sourceMappingURL=activeRestClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activeRestClient.d.ts","sourceRoot":"","sources":["../src/activeRestClient.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAgB,SAAQ,QAAQ;aAIzB,QAAQ,CAAC,EAAE,MAAM;aACjB,IAAI,CAAC,EAAE,OAAO;gBAH9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACC,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,IAAI,CAAC,EAAE,OAAO,YAAA,EAC9B,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,gBAAgB,GAAG,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,OAAO,CAAC;KACZ;CAcT;AAED,sDAAsD;AACtD,wBAAsB,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1C,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,kDAAkD;AAClD,wBAAsB,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1C,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,CAAC,CAAC,EAAE,MAAM,GACT,OAAO,CAAC,CAAC,CAAC,CA8DZ;AA+FD,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,iBAAiB,CAWtD"}
@@ -0,0 +1,130 @@
1
+ /** REST client for Active Manager endpoints. Uses native fetch. */
2
+ import { CliError } from './errors.js';
3
+ export class ActiveRestError extends CliError {
4
+ httpCode;
5
+ body;
6
+ constructor(code, message, httpCode, body, options = {}) {
7
+ super(code, message, {
8
+ category: options.category ?? 'rest',
9
+ details: {
10
+ ...(httpCode === undefined ? {} : { httpCode }),
11
+ ...(body === undefined ? {} : { response: body }),
12
+ },
13
+ suggestion: options.suggestion,
14
+ retryable: options.retryable,
15
+ cause: options.cause,
16
+ });
17
+ this.httpCode = httpCode;
18
+ this.body = body;
19
+ this.name = 'ActiveRestError';
20
+ }
21
+ }
22
+ /** Execute a REST call against the Active Manager. */
23
+ export async function activeCall(options, action, body) {
24
+ return activePost(options, `/User/${action}`, body, options.k);
25
+ }
26
+ /** Execute a POST call against the Active API. */
27
+ export async function activePost(options, path, body, k) {
28
+ const { activeUrl, scope } = options;
29
+ const normalizedPath = path.startsWith('/') ? path : `/${path}`;
30
+ const headers = {
31
+ 'content-type': 'application/json',
32
+ scope,
33
+ };
34
+ if (k) {
35
+ headers.k = k;
36
+ }
37
+ let res;
38
+ const timeoutMs = options.timeoutMs ?? 15_000;
39
+ const controller = new AbortController();
40
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
41
+ try {
42
+ res = await fetch(`${activeUrl}${normalizedPath}`, {
43
+ method: 'POST',
44
+ headers,
45
+ body: JSON.stringify(body ?? {}),
46
+ signal: controller.signal,
47
+ });
48
+ }
49
+ catch (cause) {
50
+ if (cause.name === 'AbortError') {
51
+ throw new ActiveRestError('ACTIVE_TIMEOUT', `Active API request timed out after ${timeoutMs} ms.`, undefined, undefined, { category: 'timeout', retryable: true, cause });
52
+ }
53
+ throw new ActiveRestError('ACTIVE_NETWORK_ERROR', `HTTP 请求失败: ${cause.message}`, undefined, undefined, { category: 'network', retryable: true, cause });
54
+ }
55
+ finally {
56
+ clearTimeout(timeout);
57
+ }
58
+ const responseBody = await parseResponse(res);
59
+ if (!res.ok) {
60
+ throw classifyHttpError(normalizedPath, res.status, responseBody);
61
+ }
62
+ if (isResponseEnvelope(responseBody)) {
63
+ if (responseBody.code !== 0) {
64
+ throw new ActiveRestError('ACTIVE_API_ERROR', responseBody.message || 'Active API returned an error.', res.status, responseBody, { category: 'rest' });
65
+ }
66
+ return responseBody.data;
67
+ }
68
+ return responseBody;
69
+ }
70
+ function isResponseEnvelope(value) {
71
+ return typeof value === 'object'
72
+ && value !== null
73
+ && typeof value.code === 'number';
74
+ }
75
+ async function parseResponse(response) {
76
+ const bodyText = await response.text().catch(() => '');
77
+ if (!bodyText) {
78
+ return null;
79
+ }
80
+ try {
81
+ return JSON.parse(bodyText);
82
+ }
83
+ catch (cause) {
84
+ throw new ActiveRestError('ACTIVE_INVALID_JSON', 'Active API response is not valid JSON.', response.status, undefined, { category: 'rest', cause });
85
+ }
86
+ }
87
+ function classifyHttpError(path, status, body) {
88
+ const message = isResponseEnvelope(body) && body.message
89
+ ? body.message
90
+ : `Active API returned HTTP ${status}.`;
91
+ if (status === 401) {
92
+ return new ActiveRestError('AUTHENTICATION_FAILED', 'AutoNoelle credential is missing, invalid, or expired.', status, body, {
93
+ category: 'authentication',
94
+ suggestion: 'Provide AUTO_NOELLE_USER_KEY/--k, or login using runtime username, password, and server variables.',
95
+ });
96
+ }
97
+ if (status === 403) {
98
+ return new ActiveRestError('AUTHORIZATION_DENIED', 'The credential is not allowed to perform this operation.', status, body, { category: 'authorization' });
99
+ }
100
+ if (status === 503) {
101
+ return new ActiveRestError('ACTIVE_UNAVAILABLE', 'No healthy Active worker is currently available.', status, body, { category: 'server', retryable: true });
102
+ }
103
+ if (path.toLowerCase() === '/auth/login') {
104
+ const serverMissing = message.includes('LOGIN_SERVER_NOT_FOUND') || message.includes('找不到服务器');
105
+ const credentialsInvalid = message.includes('LOGIN_CREDENTIALS_INVALID');
106
+ return new ActiveRestError(serverMissing ? 'SERVER_NOT_FOUND' : credentialsInvalid ? 'INVALID_CREDENTIALS' : 'LOGIN_FAILED', serverMissing
107
+ ? 'The requested game server is not supported by the backend.'
108
+ : credentialsInvalid
109
+ ? 'The username or password was rejected.'
110
+ : 'Login failed. Verify the server name, account, password, and service availability.', status, body, {
111
+ category: serverMissing ? 'rest' : 'authentication',
112
+ suggestion: serverMissing
113
+ ? 'Use an exact server name supported by the backend.'
114
+ : 'Retry with runtime credentials; do not persist credentials in files.',
115
+ });
116
+ }
117
+ return new ActiveRestError(status >= 500 ? 'ACTIVE_SERVER_ERROR' : 'ACTIVE_HTTP_ERROR', message, status, body, { category: status >= 500 ? 'server' : 'rest', retryable: status >= 500 });
118
+ }
119
+ /** Validate required options and return parsed options. */
120
+ export function buildActiveOptions() {
121
+ const activeUrl = process.env.AUTO_NOELLE_ACTIVE_URL || 'https://api.auto.noelle.cool';
122
+ const k = process.env.AUTO_NOELLE_USER_KEY;
123
+ const scope = process.env.AUTO_NOELLE_SCOPE || 'CN';
124
+ const timeoutMs = Number(process.env.AUTO_NOELLE_TIMEOUT_MS ?? 15_000);
125
+ if (!k) {
126
+ throw new Error('缺少 k (userKey),请通过 --k 参数或 AUTO_NOELLE_USER_KEY 环境变量设置');
127
+ }
128
+ return { activeUrl, k, scope, timeoutMs };
129
+ }
130
+ //# sourceMappingURL=activeRestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activeRestClient.js","sourceRoot":"","sources":["../src/activeRestClient.ts"],"names":[],"mappings":"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"}
package/dist/args.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import { type ActiveBaseOptions, type ActiveRestOptions } from './activeRestClient.js';
2
+ import type { GraphQlOptions } from './graphqlClient.js';
3
+ export interface GlobalOptions {
4
+ queryUrl: string;
5
+ activeUrl: string;
6
+ dataUrl: string;
7
+ k: string;
8
+ scope: string;
9
+ timeoutMs: number;
10
+ username?: string;
11
+ password?: string;
12
+ servername?: string;
13
+ }
14
+ export interface GameDataOptions {
15
+ dataUrl: string;
16
+ scope: string;
17
+ timeoutMs?: number;
18
+ }
19
+ export declare function resolveGlobalOptions(cli: {
20
+ queryUrl?: string;
21
+ activeUrl?: string;
22
+ dataUrl?: string;
23
+ k?: string;
24
+ scope?: string;
25
+ timeout?: string;
26
+ }): GlobalOptions;
27
+ export declare function toGameDataOpts(g: GlobalOptions): GameDataOptions;
28
+ export declare function toGqlOpts(g: GlobalOptions): Promise<GraphQlOptions>;
29
+ export declare function toActiveOpts(g: GlobalOptions): Promise<ActiveRestOptions>;
30
+ export declare function toActiveBaseOpts(g: GlobalOptions): ActiveBaseOptions;
31
+ /** Resolve a user key without persisting credentials or printing the login result. */
32
+ export declare function resolveUserKey(g: GlobalOptions): Promise<string>;
33
+ //# sourceMappingURL=args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,aAAa,CAqBhB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,aAAa,GAAG,eAAe,CAEhE;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAEzE;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAE/E;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAEpE;AAID,sFAAsF;AACtF,wBAAsB,cAAc,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCtE"}
package/dist/args.js ADDED
@@ -0,0 +1,83 @@
1
+ import { activePost } from './activeRestClient.js';
2
+ import { CliError } from './errors.js';
3
+ export function resolveGlobalOptions(cli) {
4
+ const scope = (cli.scope ?? process.env.AUTO_NOELLE_SCOPE ?? 'CN').toUpperCase();
5
+ if (scope !== 'CN' && scope !== 'JP') {
6
+ throw new CliError('INVALID_SCOPE', `Invalid scope: ${scope}`, {
7
+ category: 'usage',
8
+ field: 'scope',
9
+ details: { current: scope, expected: ['CN', 'JP'] },
10
+ suggestion: 'Use --scope CN or --scope JP.',
11
+ });
12
+ }
13
+ return {
14
+ queryUrl: cli.queryUrl ?? process.env.AUTO_NOELLE_QUERY_URL ?? 'https://query.auto.noelle.cool/UserConfig',
15
+ activeUrl: cli.activeUrl ?? process.env.AUTO_NOELLE_ACTIVE_URL ?? 'https://api.auto.noelle.cool',
16
+ dataUrl: cli.dataUrl ?? process.env.AUTO_NOELLE_DATA_URL ?? 'https://data.auto.noelle.cool/GameData',
17
+ k: cli.k ?? process.env.AUTO_NOELLE_USER_KEY ?? '',
18
+ scope,
19
+ timeoutMs: resolveTimeout(cli.timeout ?? process.env.AUTO_NOELLE_TIMEOUT_MS),
20
+ username: process.env.AUTO_NOELLE_USERNAME,
21
+ password: process.env.AUTO_NOELLE_PASSWORD,
22
+ servername: process.env.AUTO_NOELLE_SERVERNAME,
23
+ };
24
+ }
25
+ export function toGameDataOpts(g) {
26
+ return { dataUrl: g.dataUrl, scope: g.scope, timeoutMs: g.timeoutMs };
27
+ }
28
+ export async function toGqlOpts(g) {
29
+ return { queryUrl: g.queryUrl, k: await resolveUserKey(g), scope: g.scope, timeoutMs: g.timeoutMs };
30
+ }
31
+ export async function toActiveOpts(g) {
32
+ return { activeUrl: g.activeUrl, k: await resolveUserKey(g), scope: g.scope, timeoutMs: g.timeoutMs };
33
+ }
34
+ export function toActiveBaseOpts(g) {
35
+ return { activeUrl: g.activeUrl, scope: g.scope, timeoutMs: g.timeoutMs };
36
+ }
37
+ let cachedRuntimeUserKey;
38
+ /** Resolve a user key without persisting credentials or printing the login result. */
39
+ export async function resolveUserKey(g) {
40
+ if (g.k) {
41
+ return g.k;
42
+ }
43
+ if (cachedRuntimeUserKey) {
44
+ return cachedRuntimeUserKey;
45
+ }
46
+ if (!g.username || !g.password || !g.servername) {
47
+ throw new CliError('CREDENTIAL_REQUIRED', 'Missing AutoNoelle user key and runtime login credentials.', {
48
+ category: 'authentication',
49
+ details: {
50
+ expected: [
51
+ 'AUTO_NOELLE_USER_KEY or --k',
52
+ 'AUTO_NOELLE_USERNAME + AUTO_NOELLE_PASSWORD + AUTO_NOELLE_SERVERNAME',
53
+ ],
54
+ },
55
+ suggestion: 'Pass credentials only through command arguments or environment variables.',
56
+ });
57
+ }
58
+ const response = await activePost(toActiveBaseOpts(g), '/Auth/Login', { username: g.username, password: g.password, servername: g.servername });
59
+ const userKey = response.accessToken ?? response.userKey;
60
+ if (typeof userKey !== 'string' || !userKey) {
61
+ throw new CliError('LOGIN_CREDENTIAL_MISSING', 'Login succeeded but did not return a usable AutoNoelle user key.', {
62
+ category: 'authentication',
63
+ suggestion: 'Check backend compatibility and retry login.',
64
+ });
65
+ }
66
+ cachedRuntimeUserKey = userKey;
67
+ return userKey;
68
+ }
69
+ function resolveTimeout(value) {
70
+ if (value === undefined) {
71
+ return 15_000;
72
+ }
73
+ const timeoutMs = Number(value);
74
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) {
75
+ throw new CliError('INVALID_TIMEOUT', `Invalid timeout: ${value}`, {
76
+ category: 'usage',
77
+ field: 'timeout',
78
+ details: { current: value, expected: 'positive integer milliseconds' },
79
+ });
80
+ }
81
+ return timeoutMs;
82
+ }
83
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type ActiveRestOptions } from '../activeRestClient.js';
2
+ import type { GameDataOptions } from '../args.js';
3
+ export interface OwnedShipOptions {
4
+ id?: number;
5
+ cid?: number;
6
+ title?: string;
7
+ titleContains?: string;
8
+ shipTypes?: string[];
9
+ countries?: string[];
10
+ levelMin?: number;
11
+ levelMax?: number;
12
+ locked?: boolean;
13
+ married?: boolean;
14
+ evolved?: boolean;
15
+ available?: boolean;
16
+ offset?: number;
17
+ first?: number;
18
+ all?: boolean;
19
+ fields?: string[];
20
+ }
21
+ export declare function summary(opts: ActiveRestOptions): Promise<unknown>;
22
+ export declare function ownedShips(activeOpts: ActiveRestOptions, gameDataOpts: GameDataOptions, options?: OwnedShipOptions): Promise<unknown>;
23
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAoBD,wBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CvE;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,eAAe,EAC7B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CA2BlB"}