@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.
- package/README.md +169 -0
- package/dist/activeRestClient.d.ts +30 -0
- package/dist/activeRestClient.d.ts.map +1 -0
- package/dist/activeRestClient.js +130 -0
- package/dist/activeRestClient.js.map +1 -0
- package/dist/args.d.ts +33 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +83 -0
- package/dist/args.js.map +1 -0
- package/dist/commands/account.d.ts +23 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +322 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/auth.d.ts +8 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +30 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/battleMap.d.ts +4 -0
- package/dist/commands/battleMap.d.ts.map +1 -0
- package/dist/commands/battleMap.js +146 -0
- package/dist/commands/battleMap.js.map +1 -0
- package/dist/commands/config.d.ts +11 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +125 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/discovery.d.ts +2 -0
- package/dist/commands/discovery.d.ts.map +1 -0
- package/dist/commands/discovery.js +109 -0
- package/dist/commands/discovery.js.map +1 -0
- package/dist/commands/functions.d.ts +26 -0
- package/dist/commands/functions.d.ts.map +1 -0
- package/dist/commands/functions.js +237 -0
- package/dist/commands/functions.js.map +1 -0
- package/dist/commands/mission.d.ts +7 -0
- package/dist/commands/mission.d.ts.map +1 -0
- package/dist/commands/mission.js +217 -0
- package/dist/commands/mission.js.map +1 -0
- package/dist/commands/session.d.ts +7 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +17 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/shipPipe.d.ts +11 -0
- package/dist/commands/shipPipe.d.ts.map +1 -0
- package/dist/commands/shipPipe.js +127 -0
- package/dist/commands/shipPipe.js.map +1 -0
- package/dist/commands/snapshot.d.ts +33 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +308 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/store.d.ts +32 -0
- package/dist/commands/store.d.ts.map +1 -0
- package/dist/commands/store.js +212 -0
- package/dist/commands/store.js.map +1 -0
- package/dist/configTypes.d.ts +131 -0
- package/dist/configTypes.d.ts.map +1 -0
- package/dist/configTypes.js +152 -0
- package/dist/configTypes.js.map +1 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +42 -0
- package/dist/errors.js.map +1 -0
- package/dist/gameDataClient.d.ts +15 -0
- package/dist/gameDataClient.d.ts.map +1 -0
- package/dist/gameDataClient.js +63 -0
- package/dist/gameDataClient.js.map +1 -0
- package/dist/graphqlClient.d.ts +32 -0
- package/dist/graphqlClient.d.ts.map +1 -0
- package/dist/graphqlClient.js +106 -0
- package/dist/graphqlClient.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +712 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +24 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +39 -0
- package/dist/output.js.map +1 -0
- package/dist/security.d.ts +3 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +41 -0
- package/dist/security.js.map +1 -0
- package/dist/tests/clients.test.d.ts +2 -0
- package/dist/tests/clients.test.d.ts.map +1 -0
- package/dist/tests/clients.test.js +31 -0
- package/dist/tests/clients.test.js.map +1 -0
- package/dist/tests/security.test.d.ts +2 -0
- package/dist/tests/security.test.d.ts.map +1 -0
- package/dist/tests/security.test.js +26 -0
- package/dist/tests/security.test.js.map +1 -0
- package/dist/tests/shipPipe.test.d.ts +2 -0
- package/dist/tests/shipPipe.test.d.ts.map +1 -0
- package/dist/tests/shipPipe.test.js +31 -0
- package/dist/tests/shipPipe.test.js.map +1 -0
- package/dist/tests/validation.test.d.ts +2 -0
- package/dist/tests/validation.test.d.ts.map +1 -0
- package/dist/tests/validation.test.js +58 -0
- package/dist/tests/validation.test.js.map +1 -0
- package/dist/tests/writeWorkflow.test.d.ts +2 -0
- package/dist/tests/writeWorkflow.test.d.ts.map +1 -0
- package/dist/tests/writeWorkflow.test.js +22 -0
- package/dist/tests/writeWorkflow.test.js.map +1 -0
- package/dist/validation.d.ts +18 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +328 -0
- package/dist/validation.js.map +1 -0
- package/dist/writeWorkflow.d.ts +16 -0
- package/dist/writeWorkflow.d.ts.map +1 -0
- package/dist/writeWorkflow.js +135 -0
- package/dist/writeWorkflow.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { activeCall } from '../activeRestClient.js';
|
|
2
|
+
import { CliError } from '../errors.js';
|
|
3
|
+
import { getConfig } from './config.js';
|
|
4
|
+
import { storeApi } from './store.js';
|
|
5
|
+
import { validateConfig, validateStore } from '../validation.js';
|
|
6
|
+
import { validateBattleMapConfig } from './battleMap.js';
|
|
7
|
+
import { ownedShips } from './account.js';
|
|
8
|
+
import { matchesShipPipe } from './shipPipe.js';
|
|
9
|
+
export async function list(opts) {
|
|
10
|
+
return activeCall(opts, 'MissionStates');
|
|
11
|
+
}
|
|
12
|
+
export async function setState(opts, configType, state) {
|
|
13
|
+
await activeCall(opts, 'SetMissionState', { configType, state });
|
|
14
|
+
const verified = await activeCall(opts, 'MissionState', { configType });
|
|
15
|
+
if (!verified || verified.state !== state) {
|
|
16
|
+
throw new CliError('MISSION_STATE_VERIFICATION_FAILED', `Mission state did not become ${state}.`, {
|
|
17
|
+
category: 'server',
|
|
18
|
+
details: { configType, expected: state, actual: verified },
|
|
19
|
+
suggestion: 'Read session and mission state before retrying.',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return { configType, state, verified: true, mission: verified };
|
|
23
|
+
}
|
|
24
|
+
export async function validateBattleStart(activeOpts, gqlOpts, gameDataOpts, proposedConfig) {
|
|
25
|
+
const errors = [];
|
|
26
|
+
const warnings = [];
|
|
27
|
+
const [session, missionConfigValue, mapValues, teamPipeValues, shipPipeValues, shipReadyValues, activeInfo, accountShips] = await Promise.all([
|
|
28
|
+
activeCall(activeOpts, 'Info'),
|
|
29
|
+
proposedConfig === undefined ? getConfig(gqlOpts, 'MissionBattleConfig') : Promise.resolve(proposedConfig),
|
|
30
|
+
storeApi.BattleMapConfig.list(gqlOpts),
|
|
31
|
+
storeApi.TeamPipe.list(gqlOpts),
|
|
32
|
+
storeApi.ShipPipe.list(gqlOpts),
|
|
33
|
+
storeApi.ShipReadyPipe.list(gqlOpts),
|
|
34
|
+
activeCall(activeOpts, 'ActiveUserInfoData'),
|
|
35
|
+
ownedShips(activeOpts, gameDataOpts, { all: true }),
|
|
36
|
+
]);
|
|
37
|
+
if (session.active !== true)
|
|
38
|
+
errors.push(issue('SESSION_OFFLINE', 'error', '$.session.active', 'MissionBattleConfig requires an online Active session.', session.active, true, 'Run session reconnect and retry validation.'));
|
|
39
|
+
const missionConfig = asRecord(missionConfigValue);
|
|
40
|
+
if (!missionConfig)
|
|
41
|
+
throw new CliError('MISSION_CONFIG_INVALID', 'MissionBattleConfig is not an object.', { category: 'server' });
|
|
42
|
+
const structural = validateConfig('MissionBattleConfig', missionConfig);
|
|
43
|
+
errors.push(...structural.errors);
|
|
44
|
+
warnings.push(...structural.warnings);
|
|
45
|
+
const missions = collectionRecords(missionConfig.activeBattle);
|
|
46
|
+
const enabled = missions.map((mission, index) => ({ mission, index })).filter(({ mission }) => mission.enable === true);
|
|
47
|
+
if (enabled.length === 0)
|
|
48
|
+
errors.push(issue('NO_ENABLED_BATTLE_ENTRY', 'error', '$.activeBattle', 'No BattleMission entry is enabled inside MissionBattleConfig.', 0, 1, 'Set exactly one activeBattle entry enable=true, safely write and verify the config, then rerun preflight.'));
|
|
49
|
+
const mapById = indexByStringId(mapValues);
|
|
50
|
+
const teamPipeById = indexByStringId(teamPipeValues);
|
|
51
|
+
const shipPipeById = indexByStringId(shipPipeValues);
|
|
52
|
+
const shipReadyById = indexByStringId(shipReadyValues);
|
|
53
|
+
const accountTeams = indexByNumberId(getProperty(activeInfo, 'TeamInfos'));
|
|
54
|
+
const ownedResult = asRecord(accountShips) ?? {};
|
|
55
|
+
const owned = collectionRecords(ownedResult.items);
|
|
56
|
+
const dependencies = [];
|
|
57
|
+
for (const { mission, index } of enabled) {
|
|
58
|
+
const path = `$.activeBattle[${index}]`;
|
|
59
|
+
const teamId = toInt(mission.teamId);
|
|
60
|
+
const mapId = typeof mission.battleConfigId === 'string' ? mission.battleConfigId : '';
|
|
61
|
+
const teamCheckerId = typeof mission.teamChecker === 'string' ? mission.teamChecker : '';
|
|
62
|
+
const team = teamId === undefined ? undefined : accountTeams.get(teamId);
|
|
63
|
+
const mapConfig = mapById.get(mapId);
|
|
64
|
+
const teamPipe = teamCheckerId && teamCheckerId !== emptyUuid ? teamPipeById.get(teamCheckerId) : undefined;
|
|
65
|
+
if (!team)
|
|
66
|
+
errors.push(issue('ACCOUNT_TEAM_NOT_FOUND', 'error', `${path}.teamId`, `Account fleet ${teamId} does not exist.`, teamId, [...accountTeams.keys()]));
|
|
67
|
+
if (!mapConfig)
|
|
68
|
+
errors.push(issue('BATTLE_MAP_CONFIG_NOT_FOUND', 'error', `${path}.battleConfigId`, `BattleMapConfig ${mapId} does not exist.`, mapId, [...mapById.keys()]));
|
|
69
|
+
if (teamCheckerId && teamCheckerId !== emptyUuid && !teamPipe)
|
|
70
|
+
errors.push(issue('TEAM_PIPE_NOT_FOUND', 'error', `${path}.teamChecker`, `TeamPipe ${teamCheckerId} does not exist.`, teamCheckerId, [...teamPipeById.keys()]));
|
|
71
|
+
let mapValidation = null;
|
|
72
|
+
if (mapConfig) {
|
|
73
|
+
mapValidation = await validateBattleMapConfig(gameDataOpts, mapConfig);
|
|
74
|
+
const validationRecord = asRecord(mapValidation);
|
|
75
|
+
for (const errorValue of collectionRecords(validationRecord?.errors)) {
|
|
76
|
+
errors.push(issue(String(errorValue.code ?? 'MAP_VALIDATION_ERROR'), 'error', `${path}.battleConfigId`, String(errorValue.message ?? 'BattleMapConfig validation failed.'), errorValue.current, errorValue.expected));
|
|
77
|
+
}
|
|
78
|
+
for (const warningValue of collectionRecords(validationRecord?.warnings)) {
|
|
79
|
+
warnings.push(issue(String(warningValue.code ?? 'MAP_VALIDATION_WARNING'), 'warning', `${path}.battleConfigId`, String(warningValue.message ?? 'BattleMapConfig warning.'), warningValue.current, warningValue.expected));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let teamValidation = null;
|
|
83
|
+
if (teamPipe) {
|
|
84
|
+
const structuralTeam = validateStore('TeamPipe', teamPipe);
|
|
85
|
+
errors.push(...structuralTeam.errors.map((entry) => ({ ...entry, path: `${path}.teamChecker${entry.path.slice(1)}` })));
|
|
86
|
+
warnings.push(...structuralTeam.warnings.map((entry) => ({ ...entry, path: `${path}.teamChecker${entry.path.slice(1)}` })));
|
|
87
|
+
teamValidation = validateTeamCandidates(teamPipe, shipPipeById, shipReadyById, owned, path, errors, warnings);
|
|
88
|
+
}
|
|
89
|
+
if (team) {
|
|
90
|
+
const members = numberArray(team.members).filter((id) => id !== 0);
|
|
91
|
+
if (members.length === 0)
|
|
92
|
+
errors.push(issue('ACCOUNT_TEAM_EMPTY', 'error', `${path}.teamId`, `Account fleet ${teamId} is empty.`, members, '1-6 ship instance IDs'));
|
|
93
|
+
if (members.length > 6)
|
|
94
|
+
errors.push(issue('ACCOUNT_TEAM_TOO_LARGE', 'error', `${path}.teamId`, `Account fleet ${teamId} has more than six members.`, members.length, '<= 6'));
|
|
95
|
+
if (new Set(members).size !== members.length)
|
|
96
|
+
errors.push(issue('ACCOUNT_TEAM_DUPLICATES', 'error', `${path}.teamId`, `Account fleet ${teamId} contains duplicate ship instances.`, members, 'unique ship instance IDs'));
|
|
97
|
+
}
|
|
98
|
+
dependencies.push({
|
|
99
|
+
index,
|
|
100
|
+
name: mission.name,
|
|
101
|
+
team: team ? { id: team.id, name: team.name, members: team.members } : null,
|
|
102
|
+
mapConfig: mapConfig ? { id: mapConfig.id, name: mapConfig.name, validation: mapValidation } : null,
|
|
103
|
+
teamPipe: teamPipe ? { id: teamPipe.id, name: teamPipe.name, validation: teamValidation } : null,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
const dataStruct = asRecord(getProperty(activeInfo, 'DataStruct')) ?? {};
|
|
107
|
+
const shipsUsed = collectionRecords(getProperty(activeInfo, 'ShipInfos')).length;
|
|
108
|
+
const maxShips = toInt(dataStruct.maxShip);
|
|
109
|
+
if (maxShips !== undefined && shipsUsed >= maxShips)
|
|
110
|
+
warnings.push(issue('SHIP_DOCK_FULL', 'warning', '$.account.capacity.ships', 'The ship dock is full; a battle can stop or trigger configured auto-decomposition.', { used: shipsUsed, max: maxShips }, 'used < max'));
|
|
111
|
+
return {
|
|
112
|
+
valid: errors.length === 0,
|
|
113
|
+
errors,
|
|
114
|
+
warnings,
|
|
115
|
+
session,
|
|
116
|
+
missionConfig: { structural, enabledEntryCount: enabled.length, totalEntryCount: missions.length },
|
|
117
|
+
account: {
|
|
118
|
+
shipCapacity: { used: shipsUsed, max: maxShips ?? null },
|
|
119
|
+
resources: { oil: dataStruct.oil ?? null, ammo: dataStruct.bullet ?? null },
|
|
120
|
+
},
|
|
121
|
+
dependencies,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function validateTeamCandidates(teamPipe, shipPipeById, shipReadyById, owned, missionPath, errors, warnings) {
|
|
125
|
+
const checkerSlots = asRecord(teamPipe.shipCheckers) ?? {};
|
|
126
|
+
const readySlots = asRecord(teamPipe.shipReadys) ?? {};
|
|
127
|
+
const slotResults = [];
|
|
128
|
+
const selectedEvoCids = new Set();
|
|
129
|
+
for (let position = 6; position >= 1; position -= 1) {
|
|
130
|
+
const checkerIds = stringArray(checkerSlots[`v${position}`]);
|
|
131
|
+
const readyIds = stringArray(readySlots[`v${position}`]);
|
|
132
|
+
const missingCheckers = checkerIds.filter((id) => !shipPipeById.has(id));
|
|
133
|
+
const missingReadys = readyIds.filter((id) => !shipReadyById.has(id));
|
|
134
|
+
if (missingCheckers.length > 0)
|
|
135
|
+
errors.push(issue('SHIP_PIPE_REFERENCE_MISSING', 'error', `${missionPath}.teamChecker.shipCheckers.v${position}`, 'TeamPipe references missing ShipPipe IDs.', missingCheckers, [...shipPipeById.keys()]));
|
|
136
|
+
if (missingReadys.length > 0)
|
|
137
|
+
errors.push(issue('SHIP_READY_REFERENCE_MISSING', 'error', `${missionPath}.teamChecker.shipReadys.v${position}`, 'TeamPipe references missing ShipReadyPipe IDs.', missingReadys, [...shipReadyById.keys()]));
|
|
138
|
+
const pipes = checkerIds.map((id) => shipPipeById.get(id)).filter((pipe) => Boolean(pipe));
|
|
139
|
+
if (pipes.some((pipe) => pipe.hpRate !== null && pipe.hpRate !== undefined))
|
|
140
|
+
errors.push(issue('HP_RATE_PREFLIGHT_UNSUPPORTED', 'error', `${missionPath}.teamChecker.shipCheckers.v${position}`, 'Exact hpRate candidate validation requires computed ship attributes.', checkerIds, 'pipes without hpRate'));
|
|
141
|
+
const candidates = checkerIds.length === 0
|
|
142
|
+
? []
|
|
143
|
+
: owned.filter((ship) => {
|
|
144
|
+
const status = asRecord(ship.status) ?? {};
|
|
145
|
+
if (status.repairing === true || status.inExpedition === true)
|
|
146
|
+
return false;
|
|
147
|
+
return pipes.some((pipe) => matchesShipPipe(pipe, ship));
|
|
148
|
+
}).sort((left, right) => Number(left.level) - Number(right.level));
|
|
149
|
+
const selected = candidates.find((ship) => {
|
|
150
|
+
const evoCid = toInt(ship.evoCid) ?? toInt(ship.cid) ?? 0;
|
|
151
|
+
return !selectedEvoCids.has(evoCid);
|
|
152
|
+
});
|
|
153
|
+
if (checkerIds.length > 0 && candidates.length === 0)
|
|
154
|
+
errors.push(issue('TEAM_SLOT_NO_CANDIDATE', 'error', `${missionPath}.teamChecker.shipCheckers.v${position}`, `No owned ship matches position ${position}.`, checkerIds, 'at least one eligible owned ship'));
|
|
155
|
+
if (selected)
|
|
156
|
+
selectedEvoCids.add(toInt(selected.evoCid) ?? toInt(selected.cid) ?? 0);
|
|
157
|
+
if (checkerIds.length > 0 && !selected && candidates.length > 0)
|
|
158
|
+
errors.push(issue('TEAM_SLOT_EVO_CONFLICT', 'error', `${missionPath}.teamChecker.shipCheckers.v${position}`, `All candidates for position ${position} duplicate an already selected evolution family.`, candidates.map((ship) => ship.instanceId), 'unique evoCid per position'));
|
|
159
|
+
slotResults.unshift({
|
|
160
|
+
position,
|
|
161
|
+
checkerIds,
|
|
162
|
+
readyIds,
|
|
163
|
+
candidateCount: candidates.length,
|
|
164
|
+
selected: selected ? { instanceId: selected.instanceId, cid: selected.cid, title: selected.title, level: selected.level, evoCid: selected.evoCid } : null,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
if (slotResults.every((slot) => slot.checkerIds.length === 0))
|
|
168
|
+
warnings.push(issue('TEAM_PIPE_EMPTY', 'warning', `${missionPath}.teamChecker`, 'TeamPipe has no ship checker references.', teamPipe.id, 'at least v1'));
|
|
169
|
+
return { slots: slotResults };
|
|
170
|
+
}
|
|
171
|
+
function issue(code, severity, path, message, current, expected, suggestion) {
|
|
172
|
+
return { code, severity, path, message, current, expected, suggestion };
|
|
173
|
+
}
|
|
174
|
+
function indexByStringId(value) {
|
|
175
|
+
return new Map(collectionRecords(value).filter((item) => typeof item.id === 'string').map((item) => [item.id, item]));
|
|
176
|
+
}
|
|
177
|
+
function indexByNumberId(value) {
|
|
178
|
+
const result = new Map();
|
|
179
|
+
for (const item of collectionRecords(value)) {
|
|
180
|
+
const id = toInt(item.id);
|
|
181
|
+
if (id !== undefined && id >= 0)
|
|
182
|
+
result.set(id, item);
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
function getProperty(value, key) {
|
|
187
|
+
const record = asRecord(value);
|
|
188
|
+
if (!record)
|
|
189
|
+
return undefined;
|
|
190
|
+
const normalized = key.replace(/[-_\s]/g, '').toLowerCase();
|
|
191
|
+
const match = Object.keys(record).find((entry) => entry.replace(/[-_\s]/g, '').toLowerCase() === normalized);
|
|
192
|
+
return match ? record[match] : undefined;
|
|
193
|
+
}
|
|
194
|
+
function collectionRecords(value) {
|
|
195
|
+
if (Array.isArray(value))
|
|
196
|
+
return value.map(asRecord).filter((entry) => Boolean(entry));
|
|
197
|
+
const record = asRecord(value);
|
|
198
|
+
return record ? Object.values(record).map(asRecord).filter((entry) => Boolean(entry)) : [];
|
|
199
|
+
}
|
|
200
|
+
function asRecord(value) {
|
|
201
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined;
|
|
202
|
+
}
|
|
203
|
+
function toInt(value) {
|
|
204
|
+
if (typeof value === 'number' && Number.isInteger(value))
|
|
205
|
+
return value;
|
|
206
|
+
if (typeof value === 'string' && /^\d+$/.test(value))
|
|
207
|
+
return Number.parseInt(value, 10);
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
function stringArray(value) {
|
|
211
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === 'string') : [];
|
|
212
|
+
}
|
|
213
|
+
function numberArray(value) {
|
|
214
|
+
return Array.isArray(value) ? value.map(toInt).filter((entry) => entry !== undefined) : [];
|
|
215
|
+
}
|
|
216
|
+
const emptyUuid = '00000000-0000-0000-0000-000000000000';
|
|
217
|
+
//# sourceMappingURL=mission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mission.js","sourceRoot":"","sources":["../../src/commands/mission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ActiveRestOptions } from '../activeRestClient.js';
|
|
2
|
+
export declare function info(opts: ActiveRestOptions): Promise<unknown>;
|
|
3
|
+
export declare function reconnect(opts: ActiveRestOptions): Promise<unknown>;
|
|
4
|
+
export declare function disconnect(opts: ActiveRestOptions): Promise<unknown>;
|
|
5
|
+
export declare function unlock(opts: ActiveRestOptions): Promise<unknown>;
|
|
6
|
+
export declare function setAutoLogin(opts: ActiveRestOptions, state: boolean): Promise<unknown>;
|
|
7
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,wBAAsB,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEzE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEtE;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAElB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { activeCall } from '../activeRestClient.js';
|
|
2
|
+
export async function info(opts) {
|
|
3
|
+
return activeCall(opts, 'Info');
|
|
4
|
+
}
|
|
5
|
+
export async function reconnect(opts) {
|
|
6
|
+
return activeCall(opts, 'ReConnect');
|
|
7
|
+
}
|
|
8
|
+
export async function disconnect(opts) {
|
|
9
|
+
return activeCall(opts, 'DisConnect');
|
|
10
|
+
}
|
|
11
|
+
export async function unlock(opts) {
|
|
12
|
+
return activeCall(opts, 'Unlock');
|
|
13
|
+
}
|
|
14
|
+
export async function setAutoLogin(opts, state) {
|
|
15
|
+
return activeCall(opts, 'SetAutoLoginState', { state });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAuB;IAChD,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAuB;IACrD,OAAO,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuB;IACtD,OAAO,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAuB;IAClD,OAAO,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAuB,EACvB,KAAc;IAEd,OAAO,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ActiveRestOptions } from '../activeRestClient.js';
|
|
2
|
+
import type { GameDataOptions } from '../args.js';
|
|
3
|
+
export interface ShipPipePreviewOptions {
|
|
4
|
+
first?: number;
|
|
5
|
+
all?: boolean;
|
|
6
|
+
fields?: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function preview(activeOpts: ActiveRestOptions, gameDataOpts: GameDataOptions, pipeValue: unknown, options?: ShipPipePreviewOptions): Promise<unknown>;
|
|
9
|
+
export declare function readShipPipeFile(filePath: string): Record<string, unknown>;
|
|
10
|
+
export declare function matchesShipPipe(pipe: Record<string, unknown>, ship: Record<string, unknown>): boolean;
|
|
11
|
+
//# sourceMappingURL=shipPipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipPipe.d.ts","sourceRoot":"","sources":["../../src/commands/shipPipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,OAAO,CAC3B,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,eAAe,EAC7B,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,OAAO,CAAC,CAgDlB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE1E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAwBrG"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { CliError } from '../errors.js';
|
|
2
|
+
import { readJsonObject } from '../writeWorkflow.js';
|
|
3
|
+
import { validateStore } from '../validation.js';
|
|
4
|
+
import { ownedShips } from './account.js';
|
|
5
|
+
export async function preview(activeOpts, gameDataOpts, pipeValue, options = {}) {
|
|
6
|
+
const pipe = asRecord(pipeValue);
|
|
7
|
+
if (!pipe) {
|
|
8
|
+
throw new CliError('SHIP_PIPE_REQUIRED', 'ShipPipe preview requires an object.', { category: 'validation' });
|
|
9
|
+
}
|
|
10
|
+
const validation = validateStore('ShipPipe', pipe);
|
|
11
|
+
if (!validation.valid) {
|
|
12
|
+
throw new CliError('STORE_VALIDATION_FAILED', 'ShipPipe validation failed.', {
|
|
13
|
+
category: 'validation',
|
|
14
|
+
details: { validation },
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (getProperty(pipe, 'hpRate') !== null && getProperty(pipe, 'hpRate') !== undefined) {
|
|
18
|
+
throw new CliError('HP_RATE_PREVIEW_REQUIRES_COMPUTED_ATTRIBUTES', 'Exact hpRate preview requires ship, skill, and equipped-item attribute aggregation.', {
|
|
19
|
+
category: 'validation',
|
|
20
|
+
field: 'hpRate',
|
|
21
|
+
suggestion: 'Remove hpRate for this preview or use a backend build exposing computed owned-ship attributes.',
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const accountResult = await ownedShips(activeOpts, gameDataOpts, { all: true });
|
|
25
|
+
const allShips = Array.isArray(accountResult.items)
|
|
26
|
+
? accountResult.items.map(asRecord).filter((item) => Boolean(item))
|
|
27
|
+
: [];
|
|
28
|
+
const matches = allShips.filter((ship) => matchesShipPipe(pipe, ship));
|
|
29
|
+
const first = options.all ? matches.length : Math.max(0, Math.floor(options.first ?? 20));
|
|
30
|
+
const page = matches.slice(0, first);
|
|
31
|
+
const defaultFields = ['instanceId', 'cid', 'title', 'shipType', 'level', 'locked', 'married', 'evolved', 'skillLevel', 'sixthCost', 'status'];
|
|
32
|
+
const fields = options.fields && options.fields.length > 0 ? options.fields : defaultFields;
|
|
33
|
+
return {
|
|
34
|
+
filter: {
|
|
35
|
+
id: getProperty(pipe, 'id') ?? null,
|
|
36
|
+
name: getProperty(pipe, 'name') ?? null,
|
|
37
|
+
},
|
|
38
|
+
semantics: {
|
|
39
|
+
apply: 'shipTypeApply OR shipIdApply; if both are empty/null, all definitions are initially eligible',
|
|
40
|
+
ban: 'shipTypeBan and shipIdBan exclude after apply matching',
|
|
41
|
+
remainingConditions: 'AND, with inclusive min/max ranges',
|
|
42
|
+
target: 'owned ship instances joined to public catalog definitions by CID',
|
|
43
|
+
},
|
|
44
|
+
validation,
|
|
45
|
+
totalOwned: allShips.length,
|
|
46
|
+
totalMatched: matches.length,
|
|
47
|
+
first,
|
|
48
|
+
hasMore: page.length < matches.length,
|
|
49
|
+
items: page.map((ship) => pickFields(ship, fields)),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function readShipPipeFile(filePath) {
|
|
53
|
+
return readJsonObject(filePath);
|
|
54
|
+
}
|
|
55
|
+
export function matchesShipPipe(pipe, ship) {
|
|
56
|
+
if (ship.title === null || ship.title === undefined)
|
|
57
|
+
return false;
|
|
58
|
+
const shipTypeApply = stringArray(getProperty(pipe, 'shipTypeApply'));
|
|
59
|
+
const shipTypeBan = stringArray(getProperty(pipe, 'shipTypeBan'));
|
|
60
|
+
const shipIdApply = numberArray(getProperty(pipe, 'shipIdApply'));
|
|
61
|
+
const shipIdBan = numberArray(getProperty(pipe, 'shipIdBan'));
|
|
62
|
+
const shipType = String(ship.shipType ?? '');
|
|
63
|
+
const cid = Number(ship.cid);
|
|
64
|
+
let result = shipTypeApply.length === 0 && shipIdApply.length === 0;
|
|
65
|
+
if (shipTypeApply.length > 0)
|
|
66
|
+
result = result || shipTypeApply.includes('ALL') || shipTypeApply.includes(shipType);
|
|
67
|
+
if (shipIdApply.length > 0)
|
|
68
|
+
result = result || shipIdApply.includes(cid);
|
|
69
|
+
if (result && shipTypeBan.length > 0)
|
|
70
|
+
result = !shipTypeBan.includes('ALL') && !shipTypeBan.includes(shipType);
|
|
71
|
+
if (result && shipIdBan.length > 0)
|
|
72
|
+
result = !shipIdBan.includes(cid);
|
|
73
|
+
if (!result)
|
|
74
|
+
return false;
|
|
75
|
+
if (!matchesRange(getProperty(pipe, 'levelRange'), Number(ship.level)))
|
|
76
|
+
return false;
|
|
77
|
+
if (!matchesRange(getProperty(pipe, 'skillLevelRange'), Number(ship.skillLevel)))
|
|
78
|
+
return false;
|
|
79
|
+
const isLock = optionalBoolean(getProperty(pipe, 'isLock'));
|
|
80
|
+
if (isLock !== undefined && ship.locked !== isLock)
|
|
81
|
+
return false;
|
|
82
|
+
const isEvo = optionalBoolean(getProperty(pipe, 'isEvo'));
|
|
83
|
+
if (isEvo !== undefined && ship.evolved !== isEvo)
|
|
84
|
+
return false;
|
|
85
|
+
if (!matchesRange(getProperty(pipe, 'sixthCost'), Number(ship.sixthCost)))
|
|
86
|
+
return false;
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
function matchesRange(value, actual) {
|
|
90
|
+
if (value === null || value === undefined)
|
|
91
|
+
return true;
|
|
92
|
+
const range = asRecord(value);
|
|
93
|
+
if (!range || !Number.isFinite(actual))
|
|
94
|
+
return false;
|
|
95
|
+
return Number(range.min) <= actual && actual <= Number(range.max);
|
|
96
|
+
}
|
|
97
|
+
function pickFields(value, fields) {
|
|
98
|
+
const result = {};
|
|
99
|
+
for (const field of fields) {
|
|
100
|
+
if (field in value)
|
|
101
|
+
result[field] = value[field];
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
function getProperty(value, key) {
|
|
106
|
+
const record = asRecord(value);
|
|
107
|
+
if (!record)
|
|
108
|
+
return undefined;
|
|
109
|
+
const normalized = key.replace(/[-_\s]/g, '').toLowerCase();
|
|
110
|
+
const match = Object.keys(record).find((entry) => entry.replace(/[-_\s]/g, '').toLowerCase() === normalized);
|
|
111
|
+
return match ? record[match] : undefined;
|
|
112
|
+
}
|
|
113
|
+
function asRecord(value) {
|
|
114
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
115
|
+
? value
|
|
116
|
+
: undefined;
|
|
117
|
+
}
|
|
118
|
+
function stringArray(value) {
|
|
119
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === 'string') : [];
|
|
120
|
+
}
|
|
121
|
+
function numberArray(value) {
|
|
122
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === 'number') : [];
|
|
123
|
+
}
|
|
124
|
+
function optionalBoolean(value) {
|
|
125
|
+
return typeof value === 'boolean' ? value : undefined;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=shipPipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipPipe.js","sourceRoot":"","sources":["../../src/commands/shipPipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ActiveRestOptions } from '../activeRestClient.js';
|
|
2
|
+
export declare function listParts(): ActiveInfoPart[];
|
|
3
|
+
/** Return the full ActiveUserInfoData as-is. */
|
|
4
|
+
export declare function getFullActiveInfo(opts: ActiveRestOptions): Promise<unknown>;
|
|
5
|
+
/** Return a summary (part names + counts) without slicing. */
|
|
6
|
+
export declare function getSummary(opts: ActiveRestOptions): Promise<unknown>;
|
|
7
|
+
export interface GetPartOptions {
|
|
8
|
+
id?: string;
|
|
9
|
+
first?: number;
|
|
10
|
+
all?: boolean;
|
|
11
|
+
fields?: string[];
|
|
12
|
+
}
|
|
13
|
+
/** Return one part by name, with optional id/first/all/fields slicing. */
|
|
14
|
+
export declare function getPart(opts: ActiveRestOptions, partName: string, query?: GetPartOptions): Promise<unknown>;
|
|
15
|
+
export interface ShipsOptions extends GetPartOptions {
|
|
16
|
+
cid?: number;
|
|
17
|
+
levelMin?: number;
|
|
18
|
+
levelMax?: number;
|
|
19
|
+
locked?: boolean;
|
|
20
|
+
unlocked?: boolean;
|
|
21
|
+
married?: boolean;
|
|
22
|
+
unmarried?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Return the ships part, optionally filtered. */
|
|
25
|
+
export declare function getShips(opts: ActiveRestOptions, query?: ShipsOptions): Promise<unknown>;
|
|
26
|
+
interface ActiveInfoPart {
|
|
27
|
+
name: string;
|
|
28
|
+
key: string;
|
|
29
|
+
aliases: string[];
|
|
30
|
+
description: string;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,wBAAgB,SAAS,IAAI,cAAc,EAAE,CAE5C;AAED,gDAAgD;AAChD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjF;AAED,8DAA8D;AAC9D,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1E;AAID,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,0EAA0E;AAC1E,wBAAsB,OAAO,CAC3B,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,cAAmB,GACzB,OAAO,CAAC,OAAO,CAAC,CAWlB;AAID,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,kDAAkD;AAClD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,iBAAiB,EACvB,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,OAAO,CAAC,CAelB;AA4BD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|