@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
@@ -0,0 +1,125 @@
1
+ import { configTypes, storeTypes } from '../configTypes.js';
2
+ import { gql } from '../graphqlClient.js';
3
+ import { CliError } from '../errors.js';
4
+ import { assertExpectedHash, createWritePlan, readJsonObject, valuesEqual, } from '../writeWorkflow.js';
5
+ import { validateConfig } from '../validation.js';
6
+ export async function listTypes() {
7
+ const configs = Object.entries(configTypes).map(([name, def]) => ({
8
+ name,
9
+ category: def.category,
10
+ queryField: def.queryField,
11
+ mutationField: def.mutationField,
12
+ }));
13
+ const stores = Object.entries(storeTypes).map(([name, def]) => ({
14
+ name,
15
+ listField: def.listField,
16
+ getField: def.getField,
17
+ setField: def.setField,
18
+ removeField: def.removeField,
19
+ }));
20
+ return { configs, stores };
21
+ }
22
+ export async function getConfig(gqlOpts, typeName) {
23
+ const def = configTypes[typeName];
24
+ if (!def) {
25
+ throw new Error(`未知配置类型: ${typeName}`);
26
+ }
27
+ const query = `{ ${def.queryField} ${def.selection} }`;
28
+ const data = await gql(gqlOpts, query);
29
+ return data[def.queryField];
30
+ }
31
+ export async function setConfig(gqlOpts, typeName, filePath, options = {}) {
32
+ const def = configTypes[typeName];
33
+ if (!def) {
34
+ throw new Error(`未知配置类型: ${typeName}`);
35
+ }
36
+ const patch = readJsonObject(filePath);
37
+ const current = await getConfig(gqlOpts, typeName);
38
+ const plan = createWritePlan(current, patch, options.replace);
39
+ const validation = validateConfig(typeName, plan.proposed);
40
+ assertExpectedHash(plan.currentHash, options.expectedCurrentHash);
41
+ const planResult = {
42
+ operation: options.dryRun ? 'validate' : 'write',
43
+ type: typeName,
44
+ mode: options.replace ? 'replace' : 'merge',
45
+ changed: plan.changed,
46
+ currentHash: plan.currentHash,
47
+ proposedHash: plan.proposedHash,
48
+ changedPaths: plan.changedPaths,
49
+ validation,
50
+ };
51
+ if (!validation.valid) {
52
+ throw new CliError('CONFIG_VALIDATION_FAILED', `Validation failed for ${typeName}.`, {
53
+ category: 'validation',
54
+ details: { ...planResult, proposed: plan.proposed },
55
+ suggestion: 'Fix every validation error and run with --dry-run again.',
56
+ });
57
+ }
58
+ if (options.dryRun) {
59
+ return { ...planResult, proposed: plan.proposed };
60
+ }
61
+ if (!plan.changed) {
62
+ return { ...planResult, operation: 'noop', verified: true, value: current };
63
+ }
64
+ try {
65
+ await mutateConfig(gqlOpts, typeName, plan.proposed);
66
+ }
67
+ catch (cause) {
68
+ const rollback = await restoreConfigIfChanged(gqlOpts, typeName, plan.current, plan.currentHash);
69
+ if (!rollback.changed)
70
+ throw cause;
71
+ throw new CliError('CONFIG_WRITE_FAILED_ROLLED_BACK', `Writing ${typeName} failed and the previous value was restored.`, {
72
+ category: 'server',
73
+ details: { ...planResult, rollback },
74
+ suggestion: 'Inspect the server error and rerun validation before retrying.',
75
+ cause,
76
+ });
77
+ }
78
+ const verified = await getConfig(gqlOpts, typeName);
79
+ if (!valuesEqual(verified, plan.proposed)) {
80
+ const rollback = await restoreConfigIfChanged(gqlOpts, typeName, plan.current, plan.currentHash);
81
+ throw new CliError('CONFIG_VERIFICATION_FAILED', `The server did not persist ${typeName} exactly as proposed.`, {
82
+ category: 'server',
83
+ details: {
84
+ ...planResult,
85
+ verification: { matched: false, actual: verified },
86
+ rollback,
87
+ },
88
+ suggestion: rollback.restored
89
+ ? 'The original value was restored. Check backend schema compatibility before retrying.'
90
+ : 'Automatic restoration failed; read the current server value before any further write.',
91
+ });
92
+ }
93
+ return {
94
+ ...planResult,
95
+ verified: true,
96
+ rollbackRequired: false,
97
+ value: verified,
98
+ };
99
+ }
100
+ async function mutateConfig(gqlOpts, typeName, input) {
101
+ const def = configTypes[typeName];
102
+ const mutation = `
103
+ mutation SetConfig($config: ${def.inputType}!) {
104
+ ${def.mutationField}(config: $config) ${def.selection}
105
+ }
106
+ `;
107
+ const data = await gql(gqlOpts, mutation, { config: input });
108
+ return data[def.mutationField];
109
+ }
110
+ async function restoreConfigIfChanged(gqlOpts, typeName, original, originalHash) {
111
+ try {
112
+ const actual = await getConfig(gqlOpts, typeName);
113
+ if (valuesEqual(actual, original))
114
+ return { changed: false, restored: true, originalHash };
115
+ if (original === null)
116
+ return { changed: true, restored: false, originalHash, reason: 'No original value is available.' };
117
+ await mutateConfig(gqlOpts, typeName, original);
118
+ const restored = await getConfig(gqlOpts, typeName);
119
+ return { changed: true, restored: valuesEqual(restored, original), originalHash };
120
+ }
121
+ catch (cause) {
122
+ return { changed: true, restored: false, originalHash, reason: cause.message };
123
+ }
124
+ }
125
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAuB,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQlD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI;QACJ,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;KACjC,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI;QACJ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAuB,EACvB,QAAwB;IAExB,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,MAAM,GAAG,CAA0B,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAuB,EACvB,QAAwB,EACxB,QAAgB,EAChB,UAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG;QACjB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;QAChD,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC3C,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,UAAU;KACX,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,0BAA0B,EAAE,yBAAyB,QAAQ,GAAG,EAAE;YACnF,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACnD,UAAU,EAAE,0DAA0D;SACvE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjG,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC;QACnC,MAAM,IAAI,QAAQ,CAAC,iCAAiC,EAAE,WAAW,QAAQ,8CAA8C,EAAE;YACvH,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE;YACpC,UAAU,EAAE,gEAAgE;YAC5E,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjG,MAAM,IAAI,QAAQ,CAAC,4BAA4B,EAAE,8BAA8B,QAAQ,uBAAuB,EAAE;YAC9G,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE;gBACP,GAAG,UAAU;gBACb,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAClD,QAAQ;aACT;YACD,UAAU,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,CAAC,CAAC,sFAAsF;gBACxF,CAAC,CAAC,uFAAuF;SAC5F,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,GAAG,UAAU;QACb,QAAQ,EAAE,IAAI;QACd,gBAAgB,EAAE,KAAK;QACvB,KAAK,EAAE,QAAQ;KAChB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,OAAuB,EACvB,QAAwB,EACxB,KAAc;IAEd,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG;kCACe,GAAG,CAAC,SAAS;QACvC,GAAG,CAAC,aAAa,qBAAqB,GAAG,CAAC,SAAS;;GAExD,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAA0B,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAuB,EACvB,QAAwB,EACxB,QAAiB,EACjB,YAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC3F,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QAC1H,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function schema(typeName?: string): unknown;
2
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/commands/discovery.ts"],"names":[],"mappings":"AAkGA,wBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAUjD"}
@@ -0,0 +1,109 @@
1
+ import { CliError } from '../errors.js';
2
+ const schemas = {
3
+ MissionBattleConfig: {
4
+ storage: 'single config object',
5
+ fields: {
6
+ allowDailyRestart: 'Boolean: reset eligible BattleMission counters at the game daily reset',
7
+ activeBattle: 'BattleMission[]: ordered entries; the backend executes only the first entry whose enable is true',
8
+ },
9
+ BattleMission: {
10
+ enable: 'Boolean: entry-level selection inside MissionBattleConfig',
11
+ autoRestartDaily: 'Boolean: reset this entry when allowDailyRestart is true',
12
+ autoStopWithFishing: 'Int: stop when account shipDrop reaches this non-zero threshold',
13
+ autoDecompose: 'Boolean: run archive lock/strengthen/decompose when the dock is full (destructive side effects)',
14
+ battleConfigId: 'UUID: BattleMapConfig store item ID',
15
+ completeCount: 'Int: persisted completed-sortie count',
16
+ completeCountTarget: 'Int: stop once completeCount reaches this value',
17
+ name: 'String: player-visible entry name',
18
+ teamId: 'Int: account TeamInfo/actual fleet ID',
19
+ teamChecker: 'UUID: TeamPipe ID; empty UUID disables dynamic team replacement',
20
+ teamCheckerContinue: 'Boolean: keep module enabled after team-selection failure',
21
+ onlySpoils: 'Boolean: run only during spoils event time',
22
+ autoStopWithSpoils: 'Boolean: stop at the backend spoils threshold',
23
+ },
24
+ enableLayers: ['BattleMission.enable selects an entry', 'mission enable changes the runtime module state'],
25
+ },
26
+ ShipPipe: {
27
+ storage: 'UUID-keyed store item',
28
+ target: 'owned ship instances; catalog conditions use each instance Cid to resolve EntityShip',
29
+ fields: {
30
+ id: 'UUID store item ID',
31
+ name: 'String',
32
+ shipTypeApply: 'ShipType[]|null',
33
+ shipTypeBan: 'ShipType[]|null',
34
+ levelRange: 'inclusive {min,max}|null',
35
+ skillLevelRange: 'inclusive {min,max}|null',
36
+ hpRate: 'inclusive percent {min,max}|null; max HP includes ship, selected skill, and equipped-item attributes',
37
+ isLock: 'Boolean|null',
38
+ isEvo: 'Boolean|null; compares EntityShip.evoClass',
39
+ sixthCost: 'inclusive EntityShip.cost range|null',
40
+ shipIdApply: 'catalog/configuration CIDs (not owned instance IDs)',
41
+ shipIdBan: 'catalog/configuration CIDs (not owned instance IDs)',
42
+ },
43
+ combination: 'shipTypeApply OR shipIdApply, followed by bans, then all remaining non-null conditions with AND',
44
+ limitations: ['The current backend store model has no owned-instance-ID or marriage field; use account ships for those read-only filters.'],
45
+ },
46
+ ShipReadyPipe: {
47
+ storage: 'UUID-keyed store item',
48
+ fields: {
49
+ id: 'UUID', name: 'String', shipType: 'ShipType',
50
+ equipApply1: 'equipment catalog IDs for slot 1',
51
+ equipApply2: 'equipment catalog IDs for slot 2',
52
+ equipApply3: 'equipment catalog IDs for slot 3',
53
+ equipApply4: 'equipment catalog IDs for slot 4',
54
+ useUsedEquip: 'Boolean; may remove equipment from another non-team ship when enabled',
55
+ },
56
+ },
57
+ TeamPipe: {
58
+ storage: 'UUID-keyed store item',
59
+ fields: {
60
+ id: 'UUID', name: 'String',
61
+ shipCheckers: '{v1..v6: UUID[]|null, values:[UUID[]|null]}: ordered ShipPipe fallbacks; current GraphQL input requires the six-element values compatibility field',
62
+ shipReadys: '{v1..v6: UUID[]|null, values:[UUID[]|null]}: ShipReadyPipe references; current GraphQL input requires values',
63
+ },
64
+ behavior: 'The backend works from position 6 toward 1, prefers existing matching members, otherwise picks the lowest-level eligible ship, and prevents duplicate evoCid families.',
65
+ },
66
+ BattleMapConfig: {
67
+ storage: 'UUID-keyed store item',
68
+ fields: {
69
+ id: 'UUID', name: 'String',
70
+ mapInitNodeId: 'EntityMap.initNodeId (not EntityMap.id)',
71
+ teamHPCondition: '{v1..v6: inclusive HP-percent range}: pre-sortie quick-repair thresholds',
72
+ nodeConfigs: '[{key: node ID, value: BattleMapNodeConfig}] GraphQL dictionary shape',
73
+ },
74
+ BattleMapNodeConfig: {
75
+ isEndPoint: 'stop successfully before routing onward',
76
+ teamHPCondition: 'optional per-position overrides',
77
+ battleConfig: 'timing, formation, conditional formations, night battle, and buff ID',
78
+ nodeBackConfig: 'enemy-fleet conditions that cause return to port',
79
+ nodeRoundConfig: 'enemy-fleet conditions that accept a roundabout/detour',
80
+ },
81
+ },
82
+ credentials: {
83
+ loginResponse: 'The backend legacy field accessToken contains the deterministic AutoNoelle user key, not the game access token.',
84
+ runtimeInputs: ['--k', 'AUTO_NOELLE_USER_KEY', 'AUTO_NOELLE_USERNAME + AUTO_NOELLE_PASSWORD + AUTO_NOELLE_SERVERNAME'],
85
+ persistence: 'The CLIs do not persist credentials and redact sensitive output fields.',
86
+ },
87
+ ids: {
88
+ catalogCid: 'EntityShip.id / ShipInfo.cid / ShipPipe.shipIdApply',
89
+ shipInstanceId: 'ShipInfo.id; unique owned instance ID',
90
+ storeItemId: 'UUID used by ShipPipe, ShipReadyPipe, TeamPipe, and BattleMapConfig',
91
+ mapId: 'EntityMap.id (for GameData lookup)',
92
+ mapInitNodeId: 'EntityMap.initNodeId (stored by BattleMapConfig)',
93
+ mapNodeId: 'EntityMapNode.id (BattleMapConfig.nodeConfigs key)',
94
+ teamId: 'Proto.TeamInfo.id (actual account fleet)',
95
+ },
96
+ };
97
+ export function schema(typeName) {
98
+ if (!typeName)
99
+ return schemas;
100
+ if (!(typeName in schemas)) {
101
+ throw new CliError('SCHEMA_TYPE_UNKNOWN', `Unknown schema type: ${typeName}`, {
102
+ category: 'usage',
103
+ field: 'type',
104
+ details: { supported: Object.keys(schemas) },
105
+ });
106
+ }
107
+ return { type: typeName, schema: schemas[typeName] };
108
+ }
109
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/commands/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * functions — 常用功能模块
3
+ *
4
+ * check-archive: 船坞/图鉴一致性检查
5
+ * - 拉取 Active 快照中的 ShipInfos、ShipArchive
6
+ * - 通过 GameData GraphQL 查询 ships / shipsRelease
7
+ * - 按改造组 (evoCid) 归一化后输出三类异常:走丢、未锁、未获取
8
+ */
9
+ import type { ActiveRestOptions } from '../activeRestClient.js';
10
+ import type { GameDataOptions } from '../args.js';
11
+ export interface CheckArchiveItem {
12
+ status: '走丢' | '未锁' | '未获取';
13
+ cid: number;
14
+ title: string;
15
+ evoCid: number;
16
+ }
17
+ export interface CheckArchiveData {
18
+ summary: {
19
+ lost: number;
20
+ unlocked: number;
21
+ notObtained: number;
22
+ };
23
+ items: CheckArchiveItem[];
24
+ }
25
+ export declare function checkArchive(activeOpts: ActiveRestOptions, gameDataOpts: GameDataOptions): Promise<CheckArchiveData>;
26
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/commands/functions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAID,wBAAsB,YAAY,CAChC,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAmK3B"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * functions — 常用功能模块
3
+ *
4
+ * check-archive: 船坞/图鉴一致性检查
5
+ * - 拉取 Active 快照中的 ShipInfos、ShipArchive
6
+ * - 通过 GameData GraphQL 查询 ships / shipsRelease
7
+ * - 按改造组 (evoCid) 归一化后输出三类异常:走丢、未锁、未获取
8
+ */
9
+ import { activeCall } from '../activeRestClient.js';
10
+ import { gameDataGql } from '../gameDataClient.js';
11
+ // ── Public entry point ───────────────────────────────────────────
12
+ export async function checkArchive(activeOpts, gameDataOpts) {
13
+ // 1. 拉取 Active 快照
14
+ const rawData = await activeCall(activeOpts, 'ActiveUserInfoData');
15
+ const activeInfo = unwrapActiveInfoData(rawData);
16
+ const shipInfos = getProperty(activeInfo, 'ShipInfos');
17
+ const shipArchive = getProperty(activeInfo, 'ShipArchive');
18
+ if (!isRecord(shipInfos)) {
19
+ throw new Error('ActiveUserInfoData 中未找到 ShipInfos 或格式不正确');
20
+ }
21
+ // 2. 拉取 GameData ships(全部,用于改造组映射)
22
+ const shipsQuery = `
23
+ query Ships($scope: String!, $first: Int!, $after: String) {
24
+ ships(scope: $scope, first: $first, after: $after) {
25
+ totalCount
26
+ pageInfo { hasNextPage endCursor }
27
+ nodes { id title evoCid }
28
+ }
29
+ }
30
+ `;
31
+ const shipNodes = await paginateConnection(gameDataOpts, shipsQuery, 'ships');
32
+ // 构建改造组索引
33
+ const cidToEvo = new Map();
34
+ const evoToCids = new Map();
35
+ const cidToTitle = new Map();
36
+ for (const node of shipNodes) {
37
+ const id = coerceInt(node['id']);
38
+ if (id === undefined)
39
+ continue;
40
+ const evoCid = coerceInt(node['evoCid']) ?? id;
41
+ cidToEvo.set(id, evoCid);
42
+ cidToTitle.set(id, String(node['title'] ?? ''));
43
+ let group = evoToCids.get(evoCid);
44
+ if (!group) {
45
+ group = [];
46
+ evoToCids.set(evoCid, group);
47
+ }
48
+ group.push(id);
49
+ }
50
+ // 3. 拉取 GameData shipsRelease(已发布舰船)
51
+ const releaseQuery = `
52
+ query ShipsRelease($scope: String!, $first: Int!, $after: String) {
53
+ shipsRelease(scope: $scope, first: $first, after: $after) {
54
+ totalCount
55
+ pageInfo { hasNextPage endCursor }
56
+ nodes { id title evoCid }
57
+ }
58
+ }
59
+ `;
60
+ const releaseNodes = await paginateConnection(gameDataOpts, releaseQuery, 'shipsRelease');
61
+ // 4. 按改造组分类船坞船锁状态
62
+ // groupState: evoCid -> { hasLocked, hasAny }
63
+ const groupState = new Map();
64
+ for (const ship of Object.values(shipInfos)) {
65
+ const entry = ship;
66
+ const cid = coerceInt(entry['Cid'] ?? entry['cid']);
67
+ const lock = coerceBool(entry['Lock'] ?? entry['lock']);
68
+ if (cid === undefined)
69
+ continue;
70
+ const evoCid = cidToEvo.get(cid) ?? cid;
71
+ let state = groupState.get(evoCid);
72
+ if (!state) {
73
+ state = { hasLocked: false, hasAny: false };
74
+ groupState.set(evoCid, state);
75
+ }
76
+ state.hasAny = true;
77
+ if (lock === true) {
78
+ state.hasLocked = true;
79
+ }
80
+ }
81
+ // 从 groupState 派生出 lockedCidSet / unlockedCidSet
82
+ const lockedCidSet = new Set();
83
+ const unlockedCidSet = new Set();
84
+ for (const [evoCid, state] of groupState) {
85
+ if (!state.hasAny)
86
+ continue;
87
+ const target = state.hasLocked ? lockedCidSet : unlockedCidSet;
88
+ const groupCids = evoToCids.get(evoCid) ?? [evoCid];
89
+ for (const c of groupCids)
90
+ target.add(c);
91
+ }
92
+ // 5. 解析 ShipArchive — 从中提取已解锁图鉴 cid
93
+ const archiveCids = parseArchiveCids(shipArchive);
94
+ // 6. 对 ShipArchive 条目分类:走丢 / 未锁
95
+ const items = [];
96
+ const coveredGroups = new Set(); // 有 archive 记录的分组
97
+ for (const archiveCid of archiveCids) {
98
+ const evoCid = cidToEvo.get(archiveCid) ?? archiveCid;
99
+ coveredGroups.add(evoCid);
100
+ const groupCids = evoToCids.get(evoCid) ?? [evoCid];
101
+ const inLocked = groupCids.some((c) => lockedCidSet.has(c));
102
+ const inUnlocked = groupCids.some((c) => unlockedCidSet.has(c));
103
+ if (inLocked)
104
+ continue; // 锁定正常,不输出
105
+ if (inUnlocked) {
106
+ items.push({
107
+ status: '未锁',
108
+ cid: archiveCid,
109
+ title: cidToTitle.get(archiveCid) ?? `cid:${archiveCid}`,
110
+ evoCid,
111
+ });
112
+ continue;
113
+ }
114
+ // 既不在 lockedCidSet 也不在 unlockedCidSet → 船坞里没有该组船
115
+ items.push({
116
+ status: '走丢',
117
+ cid: archiveCid,
118
+ title: cidToTitle.get(archiveCid) ?? `cid:${archiveCid}`,
119
+ evoCid,
120
+ });
121
+ }
122
+ // 7. 对 shipsRelease 分类:未获取(该组不在 ShipArchive 中)
123
+ const reportedMissingGroups = new Set();
124
+ for (const node of releaseNodes) {
125
+ const releaseCid = coerceInt(node['id']);
126
+ if (releaseCid === undefined)
127
+ continue;
128
+ const evoCid = cidToEvo.get(releaseCid) ?? releaseCid;
129
+ // 如果该组已有 archive 记录,跳过
130
+ if (coveredGroups.has(evoCid))
131
+ continue;
132
+ // 同一 evoCid 组只报告一次
133
+ if (reportedMissingGroups.has(evoCid))
134
+ continue;
135
+ reportedMissingGroups.add(evoCid);
136
+ items.push({
137
+ status: '未获取',
138
+ cid: releaseCid,
139
+ title: cidToTitle.get(releaseCid) ?? `cid:${releaseCid}`,
140
+ evoCid,
141
+ });
142
+ }
143
+ // 8. 汇总
144
+ const lost = items.filter((i) => i.status === '走丢').length;
145
+ const unlocked = items.filter((i) => i.status === '未锁').length;
146
+ const notObtained = items.filter((i) => i.status === '未获取').length;
147
+ return {
148
+ summary: { lost, unlocked, notObtained },
149
+ items,
150
+ };
151
+ }
152
+ // ── Internal helpers ─────────────────────────────────────────────
153
+ /** Paginate through a GraphQL connection and collect all nodes. */
154
+ async function paginateConnection(options, query, fieldName) {
155
+ const allNodes = [];
156
+ const variables = { scope: options.scope, first: 100 };
157
+ let after;
158
+ for (;;) {
159
+ const data = await gameDataGql(options, query, { ...variables, after });
160
+ const connection = data[fieldName];
161
+ if (!connection)
162
+ throw new Error(`响应缺少 ${fieldName} 字段`);
163
+ const nodes = connection.nodes;
164
+ if (nodes)
165
+ allNodes.push(...nodes);
166
+ const pageInfo = connection.pageInfo;
167
+ if (!pageInfo?.hasNextPage)
168
+ break;
169
+ after = pageInfo.endCursor;
170
+ if (!after)
171
+ break;
172
+ }
173
+ return allNodes;
174
+ }
175
+ /** Parse ShipArchive into a set of cids. */
176
+ function parseArchiveCids(archive) {
177
+ const cids = new Set();
178
+ if (!isRecord(archive)) {
179
+ return cids;
180
+ }
181
+ // 后端类型是 Dictionary<int, ShipArchiveInfo>,JSON 中 cid 是对象 key。
182
+ for (const key of Object.keys(archive)) {
183
+ const n = Number.parseInt(key, 10);
184
+ if (Number.isFinite(n))
185
+ cids.add(n);
186
+ }
187
+ return cids;
188
+ }
189
+ /** Locate an ActiveUserInfoData fragment whether wrapped in { data } or not. */
190
+ function unwrapActiveInfoData(data) {
191
+ if (containsActiveInfoPart(data))
192
+ return data;
193
+ const wrapped = getProperty(data, 'data');
194
+ if (containsActiveInfoPart(wrapped))
195
+ return wrapped;
196
+ return data;
197
+ }
198
+ function containsActiveInfoPart(data) {
199
+ // 只需检查我们关心的 key 即可
200
+ return isRecord(data) && (getProperty(data, 'ShipInfos') !== undefined ||
201
+ getProperty(data, 'ShipArchive') !== undefined);
202
+ }
203
+ function getProperty(value, key) {
204
+ if (!isRecord(value))
205
+ return undefined;
206
+ if (Object.prototype.hasOwnProperty.call(value, key))
207
+ return value[key];
208
+ const norm = key.replace(/[-_\s]/g, '').toLowerCase();
209
+ const match = Object.keys(value).find((k) => k.replace(/[-_\s]/g, '').toLowerCase() === norm);
210
+ return match ? value[match] : undefined;
211
+ }
212
+ function isRecord(value) {
213
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
214
+ }
215
+ function coerceInt(value) {
216
+ if (typeof value === 'number')
217
+ return Number.isFinite(value) ? Math.floor(value) : undefined;
218
+ if (typeof value === 'string') {
219
+ const n = Number.parseInt(value, 10);
220
+ return Number.isFinite(n) ? n : undefined;
221
+ }
222
+ return undefined;
223
+ }
224
+ function coerceBool(value) {
225
+ if (typeof value === 'boolean')
226
+ return value;
227
+ if (typeof value === 'number')
228
+ return value !== 0;
229
+ if (typeof value === 'string') {
230
+ if (value === 'true' || value === '1')
231
+ return true;
232
+ if (value === 'false' || value === '0')
233
+ return false;
234
+ }
235
+ return undefined;
236
+ }
237
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/commands/functions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoBnD,oEAAoE;AAEpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAA6B,EAC7B,YAA6B;IAE7B,kBAAkB;IAClB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE3D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,mCAAmC;IACnC,MAAM,UAAU,GAAG;;;;;;;;GAQlB,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,kBAAkB,CACxC,YAAY,EAAE,UAAU,EAAE,OAAO,CAClC,CAAC;IAEF,UAAU;IACV,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,IAAI,EAAE,KAAK,SAAS;YAAE,SAAS;QAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACzB,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,CAAC;YACX,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,qCAAqC;IACrC,MAAM,YAAY,GAAG;;;;;;;;GAQpB,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAC3C,YAAY,EAAE,YAAY,EAAE,cAAc,CAC3C,CAAC;IAEF,kBAAkB;IAClB,iDAAiD;IACjD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmD,CAAC;IAE9E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAA+B,CAAC;QAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAEhC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACxC,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC5C,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,SAAS;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;QAC/D,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,oCAAoC;IACpC,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAElD,gCAAgC;IAChC,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,kBAAkB;IAE3D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;QACtD,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1B,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,IAAI,QAAQ;YAAE,SAAS,CAAC,WAAW;QAEnC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,UAAU,EAAE;gBACxD,MAAM;aACP,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,iDAAiD;QACjD,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,UAAU,EAAE;YACxD,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QAEvC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;QAEtD,uBAAuB;QACvB,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAExC,mBAAmB;QACnB,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAChD,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAElC,KAAK,CAAC,IAAI,CAAC;YACT,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,UAAU,EAAE;YACxD,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;IACR,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAEnE,OAAO;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE;QACxC,KAAK;KACN,CAAC;AACJ,CAAC;AAED,oEAAoE;AAEpE,mEAAmE;AACnE,KAAK,UAAU,kBAAkB,CAC/B,OAAwB,EACxB,KAAa,EACb,SAAiB;IAEjB,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,MAAM,SAAS,GAA4B,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAChF,IAAI,KAAgC,CAAC;IAErC,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CACxC,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAwC,CAAC;QAC1E,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAwB,CAAC;QAClD,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAEnC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAA+C,CAAC;QAC5E,IAAI,CAAC,QAAQ,EAAE,WAAW;YAAE,MAAM;QAClC,KAAK,GAAG,QAAQ,CAAC,SAAsC,CAAC;QACxD,IAAI,CAAC,KAAK;YAAE,MAAM;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4CAA4C;AAC5C,SAAS,gBAAgB,CAAC,OAAgB;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,sBAAsB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,sBAAsB,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAa;IAC3C,mBAAmB;IACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CACvB,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,SAAS;QAC5C,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,SAAS,CAC/C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CACvD,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACnD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ActiveRestOptions } from '../activeRestClient.js';
2
+ import type { GraphQlOptions } from '../graphqlClient.js';
3
+ import type { GameDataOptions } from '../args.js';
4
+ export declare function list(opts: ActiveRestOptions): Promise<unknown>;
5
+ export declare function setState(opts: ActiveRestOptions, configType: string, state: boolean): Promise<unknown>;
6
+ export declare function validateBattleStart(activeOpts: ActiveRestOptions, gqlOpts: GraphQlOptions, gameDataOpts: GameDataOptions, proposedConfig?: unknown): Promise<Record<string, unknown>>;
7
+ //# sourceMappingURL=mission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission.d.ts","sourceRoot":"","sources":["../../src/commands/mission.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AASlD,wBAAsB,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,eAAe,EAC7B,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmGlC"}