@axiapps/bridge-metrics 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 (86) hide show
  1. package/dist/aggregationTypes.cjs +18 -0
  2. package/dist/aggregationTypes.d.cts +21 -0
  3. package/dist/aggregationTypes.d.ts +21 -0
  4. package/dist/aggregationTypes.js +1 -0
  5. package/dist/boonGeneration.cjs +308 -0
  6. package/dist/boonGeneration.d.cts +65 -0
  7. package/dist/boonGeneration.d.ts +65 -0
  8. package/dist/boonGeneration.js +16 -0
  9. package/dist/chunk-42DVJJLC.js +106 -0
  10. package/dist/chunk-4F55Q6K2.js +0 -0
  11. package/dist/chunk-ELKDB763.js +349 -0
  12. package/dist/chunk-FU74LJEM.js +77 -0
  13. package/dist/chunk-J3YCFY3C.js +37 -0
  14. package/dist/chunk-JP2ZL44R.js +18 -0
  15. package/dist/chunk-K2SRAMGC.js +0 -0
  16. package/dist/chunk-KRHODGVU.js +48 -0
  17. package/dist/chunk-LIGIXSSA.js +1383 -0
  18. package/dist/chunk-M2WR3JBQ.js +0 -0
  19. package/dist/chunk-PMVLNDZZ.js +279 -0
  20. package/dist/chunk-R5EJF5AW.js +147 -0
  21. package/dist/chunk-RGXSI3AI.js +298 -0
  22. package/dist/chunk-UFJJ6WLD.js +197 -0
  23. package/dist/chunk-WW5XFXGC.js +234 -0
  24. package/dist/chunk-ZFZS7JFU.js +10 -0
  25. package/dist/combatMetrics.cjs +251 -0
  26. package/dist/combatMetrics.d.cts +26 -0
  27. package/dist/combatMetrics.d.ts +26 -0
  28. package/dist/combatMetrics.js +21 -0
  29. package/dist/computePlayerAggregation.cjs +2042 -0
  30. package/dist/computePlayerAggregation.d.cts +249 -0
  31. package/dist/computePlayerAggregation.d.ts +249 -0
  32. package/dist/computePlayerAggregation.js +30 -0
  33. package/dist/conditionsMetrics.cjs +328 -0
  34. package/dist/conditionsMetrics.d.cts +67 -0
  35. package/dist/conditionsMetrics.d.ts +67 -0
  36. package/dist/conditionsMetrics.js +18 -0
  37. package/dist/constants.cjs +36 -0
  38. package/dist/constants.d.cts +18 -0
  39. package/dist/constants.d.ts +18 -0
  40. package/dist/constants.js +10 -0
  41. package/dist/dashboardMetrics.cjs +226 -0
  42. package/dist/dashboardMetrics.d.cts +29 -0
  43. package/dist/dashboardMetrics.d.ts +29 -0
  44. package/dist/dashboardMetrics.js +42 -0
  45. package/dist/dpsReportTypes.cjs +18 -0
  46. package/dist/dpsReportTypes.d.cts +294 -0
  47. package/dist/dpsReportTypes.d.ts +294 -0
  48. package/dist/dpsReportTypes.js +1 -0
  49. package/dist/index.cjs +2902 -0
  50. package/dist/index.d.cts +13 -0
  51. package/dist/index.d.ts +13 -0
  52. package/dist/index.js +152 -0
  53. package/dist/metrics-methods.json +38 -0
  54. package/dist/metricsSettings.cjs +75 -0
  55. package/dist/metricsSettings.d.cts +23 -0
  56. package/dist/metricsSettings.d.ts +23 -0
  57. package/dist/metricsSettings.js +8 -0
  58. package/dist/professionUtils.cjs +265 -0
  59. package/dist/professionUtils.d.cts +10 -0
  60. package/dist/professionUtils.d.ts +10 -0
  61. package/dist/professionUtils.js +20 -0
  62. package/dist/reportMetrics.cjs +224 -0
  63. package/dist/reportMetrics.d.cts +85 -0
  64. package/dist/reportMetrics.d.ts +85 -0
  65. package/dist/reportMetrics.js +12 -0
  66. package/dist/resUtility.cjs +52 -0
  67. package/dist/resUtility.d.cts +5 -0
  68. package/dist/resUtility.d.ts +5 -0
  69. package/dist/resUtility.js +8 -0
  70. package/dist/roles.cjs +18 -0
  71. package/dist/roles.d.cts +17 -0
  72. package/dist/roles.d.ts +17 -0
  73. package/dist/roles.js +1 -0
  74. package/dist/rollup.cjs +378 -0
  75. package/dist/rollup.d.cts +103 -0
  76. package/dist/rollup.d.ts +103 -0
  77. package/dist/rollup.js +16 -0
  78. package/dist/statsMetrics.cjs +153 -0
  79. package/dist/statsMetrics.d.cts +39 -0
  80. package/dist/statsMetrics.d.ts +39 -0
  81. package/dist/statsMetrics.js +22 -0
  82. package/dist/timestampUtils.cjs +63 -0
  83. package/dist/timestampUtils.d.cts +12 -0
  84. package/dist/timestampUtils.d.ts +12 -0
  85. package/dist/timestampUtils.js +9 -0
  86. package/package.json +44 -0
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/dashboardMetrics.ts
21
+ var dashboardMetrics_exports = {};
22
+ __export(dashboardMetrics_exports, {
23
+ getPlayerBlocked: () => getPlayerBlocked,
24
+ getPlayerBreakbarDamage: () => getPlayerBreakbarDamage,
25
+ getPlayerCleanses: () => getPlayerCleanses,
26
+ getPlayerDamage: () => getPlayerDamage,
27
+ getPlayerDamageTaken: () => getPlayerDamageTaken,
28
+ getPlayerDashboardTotals: () => getPlayerDashboardTotals,
29
+ getPlayerDeaths: () => getPlayerDeaths,
30
+ getPlayerDistanceToTag: () => getPlayerDistanceToTag,
31
+ getPlayerDodges: () => getPlayerDodges,
32
+ getPlayerDownsTaken: () => getPlayerDownsTaken,
33
+ getPlayerDps: () => getPlayerDps,
34
+ getPlayerEvaded: () => getPlayerEvaded,
35
+ getPlayerMissed: () => getPlayerMissed,
36
+ getPlayerOutgoingInterrupts: () => getPlayerOutgoingInterrupts,
37
+ getPlayerResurrects: () => getPlayerResurrects,
38
+ getPlayerStrips: () => getPlayerStrips,
39
+ getTargetStatTotal: () => getTargetStatTotal
40
+ });
41
+ module.exports = __toCommonJS(dashboardMetrics_exports);
42
+
43
+ // src/metrics-methods.json
44
+ var metrics_methods_default = {
45
+ specVersion: "v5",
46
+ methods: {
47
+ count: {
48
+ label: "Count Events",
49
+ summary: "Counts each CC/strip event once.",
50
+ implications: [
51
+ "Simple and stable across EI versions.",
52
+ "Multi-hit skills can inflate totals."
53
+ ]
54
+ },
55
+ duration: {
56
+ label: "Duration (Seconds)",
57
+ summary: "Uses total CC/strip duration in seconds.",
58
+ implications: [
59
+ "Reflects control impact more directly.",
60
+ "Totals represent time, not event count."
61
+ ]
62
+ },
63
+ tiered: {
64
+ label: "Tiered Impact",
65
+ summary: "Weights events based on average duration tiers.",
66
+ implications: [
67
+ "Balances short vs long CC/strip effects.",
68
+ "Uses averaged durations per player."
69
+ ],
70
+ tiers: {
71
+ shortMs: 500,
72
+ mediumMs: 1500,
73
+ weights: {
74
+ short: 0.5,
75
+ medium: 1,
76
+ long: 2
77
+ }
78
+ }
79
+ }
80
+ }
81
+ };
82
+
83
+ // src/metricsSettings.ts
84
+ var METRICS_SPEC = metrics_methods_default;
85
+ var DEFAULT_DISRUPTION_METHOD = "count";
86
+
87
+ // src/combatMetrics.ts
88
+ var toSeconds = (ms) => (ms || 0) / 1e3;
89
+ var applyTierWeight = (count, durationMs) => {
90
+ if (!count) return 0;
91
+ const tiers = METRICS_SPEC.methods.tiered?.tiers;
92
+ if (!tiers) return count;
93
+ const avg = durationMs / Math.max(count, 1);
94
+ if (avg <= tiers.shortMs) return count * tiers.weights.short;
95
+ if (avg <= tiers.mediumMs) return count * tiers.weights.medium;
96
+ return count * tiers.weights.long;
97
+ };
98
+ var resolveDisruptionValue = (count, durationMs, method) => {
99
+ if (method === "duration") return toSeconds(durationMs);
100
+ if (method === "tiered") return applyTierWeight(count, durationMs);
101
+ return count;
102
+ };
103
+ function computeOutgoingCrowdControl(player, method = DEFAULT_DISRUPTION_METHOD) {
104
+ const stats = player.statsAll?.[0];
105
+ const count = Number(stats?.appliedCrowdControl ?? 0);
106
+ const durationMs = Number(stats?.appliedCrowdControlDuration ?? 0);
107
+ return resolveDisruptionValue(count, durationMs, method);
108
+ }
109
+ function computeDownContribution(player) {
110
+ if (player.statsAll && player.statsAll.length > 0) {
111
+ const val = player.statsAll[0].downContribution;
112
+ if (typeof val === "number" && val > 0) return val;
113
+ }
114
+ let total = 0;
115
+ if (player.totalDamageDist) {
116
+ for (const targetList of player.totalDamageDist) {
117
+ if (targetList) {
118
+ for (const entry of targetList) {
119
+ total += entry.downContribution || 0;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ if (total > 0) return total;
125
+ if (player.statsTargets) {
126
+ for (const targetStats of player.statsTargets) {
127
+ if (targetStats && targetStats.length > 0) {
128
+ total += targetStats[0].downContribution || 0;
129
+ }
130
+ }
131
+ }
132
+ return total;
133
+ }
134
+ function computeSquadBarrier(player) {
135
+ if (!player.extBarrierStats || !player.extBarrierStats.outgoingBarrierAllies) return 0;
136
+ let total = 0;
137
+ for (const squadMember of player.extBarrierStats.outgoingBarrierAllies) {
138
+ if (!squadMember) continue;
139
+ for (const phaseData of squadMember) {
140
+ if (phaseData) {
141
+ total += phaseData.barrier || 0;
142
+ }
143
+ }
144
+ }
145
+ return total;
146
+ }
147
+ function computeSquadHealing(player) {
148
+ if (!player.extHealingStats || !player.extHealingStats.outgoingHealingAllies) return 0;
149
+ let total = 0;
150
+ for (const squadMember of player.extHealingStats.outgoingHealingAllies) {
151
+ if (!squadMember) continue;
152
+ for (const phaseData of squadMember) {
153
+ if (phaseData) {
154
+ total += phaseData.healing || 0;
155
+ }
156
+ }
157
+ }
158
+ return total;
159
+ }
160
+
161
+ // src/dashboardMetrics.ts
162
+ var getPlayerDamage = (player) => player.dpsAll?.[0]?.damage || 0;
163
+ var getPlayerDps = (player) => player.dpsAll?.[0]?.dps || 0;
164
+ var getPlayerCleanses = (player) => (player.support?.[0]?.condiCleanse || 0) + (player.support?.[0]?.condiCleanseSelf || 0);
165
+ var getPlayerStrips = (player, method = DEFAULT_DISRUPTION_METHOD) => {
166
+ const support = player.support?.[0];
167
+ const count = Number(support?.boonStrips ?? 0);
168
+ const durationMs = Number(support?.boonStripsTime ?? 0);
169
+ return resolveDisruptionValue(count, durationMs, method);
170
+ };
171
+ var getPlayerResurrects = (player) => player.support?.[0]?.resurrects || 0;
172
+ var getPlayerDistanceToTag = (player) => {
173
+ const stats = player.statsAll?.[0];
174
+ const distToCom = stats?.distToCom;
175
+ if (distToCom !== void 0 && distToCom !== null) {
176
+ return distToCom;
177
+ }
178
+ return stats?.stackDist || 0;
179
+ };
180
+ var getPlayerBreakbarDamage = (player) => player.dpsAll?.[0]?.breakbarDamage || 0;
181
+ var getPlayerDamageTaken = (player) => player.defenses?.[0]?.damageTaken || 0;
182
+ var getPlayerDeaths = (player) => player.defenses?.[0]?.deadCount || 0;
183
+ var getPlayerDodges = (player) => player.defenses?.[0]?.dodgeCount || 0;
184
+ var getPlayerMissed = (player) => player.defenses?.[0]?.missedCount || 0;
185
+ var getPlayerBlocked = (player) => player.defenses?.[0]?.blockedCount || 0;
186
+ var getPlayerEvaded = (player) => player.defenses?.[0]?.evadedCount || 0;
187
+ var getPlayerDownsTaken = (player) => player.defenses?.[0]?.downCount || 0;
188
+ var getTargetStatTotal = (player, field) => {
189
+ let total = 0;
190
+ const statsTargets = player.statsTargets || [];
191
+ for (const targetStats of statsTargets) {
192
+ if (targetStats && targetStats.length > 0) {
193
+ total += Number(targetStats[0][field] || 0);
194
+ }
195
+ }
196
+ return total;
197
+ };
198
+ var getPlayerOutgoingInterrupts = (player) => getTargetStatTotal(player, "interrupts");
199
+ var getPlayerDashboardTotals = (player, method = DEFAULT_DISRUPTION_METHOD) => ({
200
+ downContrib: computeDownContribution(player),
201
+ cleanses: getPlayerCleanses(player),
202
+ strips: getPlayerStrips(player, method),
203
+ healing: computeSquadHealing(player),
204
+ barrier: computeSquadBarrier(player),
205
+ cc: computeOutgoingCrowdControl(player, method)
206
+ });
207
+ // Annotate the CommonJS export names for ESM import in node:
208
+ 0 && (module.exports = {
209
+ getPlayerBlocked,
210
+ getPlayerBreakbarDamage,
211
+ getPlayerCleanses,
212
+ getPlayerDamage,
213
+ getPlayerDamageTaken,
214
+ getPlayerDashboardTotals,
215
+ getPlayerDeaths,
216
+ getPlayerDistanceToTag,
217
+ getPlayerDodges,
218
+ getPlayerDownsTaken,
219
+ getPlayerDps,
220
+ getPlayerEvaded,
221
+ getPlayerMissed,
222
+ getPlayerOutgoingInterrupts,
223
+ getPlayerResurrects,
224
+ getPlayerStrips,
225
+ getTargetStatTotal
226
+ });
@@ -0,0 +1,29 @@
1
+ import { Player } from './dpsReportTypes.cjs';
2
+ import { DisruptionMethod } from './metricsSettings.cjs';
3
+
4
+ declare const getPlayerDamage: (player: Player) => number;
5
+ declare const getPlayerDps: (player: Player) => number;
6
+ declare const getPlayerCleanses: (player: Player) => number;
7
+ declare const getPlayerStrips: (player: Player, method?: DisruptionMethod) => number;
8
+ declare const getPlayerResurrects: (player: Player) => number;
9
+ declare const getPlayerDistanceToTag: (player: Player) => number;
10
+ declare const getPlayerBreakbarDamage: (player: Player) => number;
11
+ declare const getPlayerDamageTaken: (player: Player) => number;
12
+ declare const getPlayerDeaths: (player: Player) => number;
13
+ declare const getPlayerDodges: (player: Player) => number;
14
+ declare const getPlayerMissed: (player: Player) => number;
15
+ declare const getPlayerBlocked: (player: Player) => number;
16
+ declare const getPlayerEvaded: (player: Player) => number;
17
+ declare const getPlayerDownsTaken: (player: Player) => number;
18
+ declare const getTargetStatTotal: (player: Player, field: "killed" | "downed" | "againstDownedCount" | "interrupts") => number;
19
+ declare const getPlayerOutgoingInterrupts: (player: Player) => number;
20
+ declare const getPlayerDashboardTotals: (player: Player, method?: DisruptionMethod) => {
21
+ downContrib: number;
22
+ cleanses: number;
23
+ strips: number;
24
+ healing: number;
25
+ barrier: number;
26
+ cc: number;
27
+ };
28
+
29
+ export { getPlayerBlocked, getPlayerBreakbarDamage, getPlayerCleanses, getPlayerDamage, getPlayerDamageTaken, getPlayerDashboardTotals, getPlayerDeaths, getPlayerDistanceToTag, getPlayerDodges, getPlayerDownsTaken, getPlayerDps, getPlayerEvaded, getPlayerMissed, getPlayerOutgoingInterrupts, getPlayerResurrects, getPlayerStrips, getTargetStatTotal };
@@ -0,0 +1,29 @@
1
+ import { Player } from './dpsReportTypes.js';
2
+ import { DisruptionMethod } from './metricsSettings.js';
3
+
4
+ declare const getPlayerDamage: (player: Player) => number;
5
+ declare const getPlayerDps: (player: Player) => number;
6
+ declare const getPlayerCleanses: (player: Player) => number;
7
+ declare const getPlayerStrips: (player: Player, method?: DisruptionMethod) => number;
8
+ declare const getPlayerResurrects: (player: Player) => number;
9
+ declare const getPlayerDistanceToTag: (player: Player) => number;
10
+ declare const getPlayerBreakbarDamage: (player: Player) => number;
11
+ declare const getPlayerDamageTaken: (player: Player) => number;
12
+ declare const getPlayerDeaths: (player: Player) => number;
13
+ declare const getPlayerDodges: (player: Player) => number;
14
+ declare const getPlayerMissed: (player: Player) => number;
15
+ declare const getPlayerBlocked: (player: Player) => number;
16
+ declare const getPlayerEvaded: (player: Player) => number;
17
+ declare const getPlayerDownsTaken: (player: Player) => number;
18
+ declare const getTargetStatTotal: (player: Player, field: "killed" | "downed" | "againstDownedCount" | "interrupts") => number;
19
+ declare const getPlayerOutgoingInterrupts: (player: Player) => number;
20
+ declare const getPlayerDashboardTotals: (player: Player, method?: DisruptionMethod) => {
21
+ downContrib: number;
22
+ cleanses: number;
23
+ strips: number;
24
+ healing: number;
25
+ barrier: number;
26
+ cc: number;
27
+ };
28
+
29
+ export { getPlayerBlocked, getPlayerBreakbarDamage, getPlayerCleanses, getPlayerDamage, getPlayerDamageTaken, getPlayerDashboardTotals, getPlayerDeaths, getPlayerDistanceToTag, getPlayerDodges, getPlayerDownsTaken, getPlayerDps, getPlayerEvaded, getPlayerMissed, getPlayerOutgoingInterrupts, getPlayerResurrects, getPlayerStrips, getTargetStatTotal };
@@ -0,0 +1,42 @@
1
+ import {
2
+ getPlayerBlocked,
3
+ getPlayerBreakbarDamage,
4
+ getPlayerCleanses,
5
+ getPlayerDamage,
6
+ getPlayerDamageTaken,
7
+ getPlayerDashboardTotals,
8
+ getPlayerDeaths,
9
+ getPlayerDistanceToTag,
10
+ getPlayerDodges,
11
+ getPlayerDownsTaken,
12
+ getPlayerDps,
13
+ getPlayerEvaded,
14
+ getPlayerMissed,
15
+ getPlayerOutgoingInterrupts,
16
+ getPlayerResurrects,
17
+ getPlayerStrips,
18
+ getTargetStatTotal
19
+ } from "./chunk-FU74LJEM.js";
20
+ import "./chunk-R5EJF5AW.js";
21
+ import "./chunk-ZFZS7JFU.js";
22
+ import "./chunk-PMVLNDZZ.js";
23
+ import "./chunk-KRHODGVU.js";
24
+ export {
25
+ getPlayerBlocked,
26
+ getPlayerBreakbarDamage,
27
+ getPlayerCleanses,
28
+ getPlayerDamage,
29
+ getPlayerDamageTaken,
30
+ getPlayerDashboardTotals,
31
+ getPlayerDeaths,
32
+ getPlayerDistanceToTag,
33
+ getPlayerDodges,
34
+ getPlayerDownsTaken,
35
+ getPlayerDps,
36
+ getPlayerEvaded,
37
+ getPlayerMissed,
38
+ getPlayerOutgoingInterrupts,
39
+ getPlayerResurrects,
40
+ getPlayerStrips,
41
+ getTargetStatTotal
42
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/dpsReportTypes.ts
17
+ var dpsReportTypes_exports = {};
18
+ module.exports = __toCommonJS(dpsReportTypes_exports);
@@ -0,0 +1,294 @@
1
+ interface DamageModifierInfo {
2
+ name: string;
3
+ icon: string;
4
+ description: string;
5
+ nonMultiplier?: boolean;
6
+ skillBased?: boolean;
7
+ approximate?: boolean;
8
+ incoming: boolean;
9
+ }
10
+ interface DamageModifierData {
11
+ id: number;
12
+ damageModifiers: Array<{
13
+ hitCount: number;
14
+ totalHitCount: number;
15
+ damageGain: number;
16
+ totalDamage: number;
17
+ }>;
18
+ }
19
+ interface DPSReportJSON {
20
+ evtc: {
21
+ type: string;
22
+ version: string;
23
+ bossId: number;
24
+ };
25
+ encounterDuration: string;
26
+ recordedBy: string;
27
+ uploadTime: number;
28
+ players: Player[];
29
+ targets: Target[];
30
+ durationMS: number;
31
+ fightName: string;
32
+ success: boolean;
33
+ skillMap?: {
34
+ [key: string]: {
35
+ name: string;
36
+ icon: string;
37
+ autoAttack?: boolean;
38
+ isTraitProc?: boolean;
39
+ isGearProc?: boolean;
40
+ isUnconditionalProc?: boolean;
41
+ };
42
+ };
43
+ buffMap?: {
44
+ [key: string]: {
45
+ name: string;
46
+ stacking: boolean;
47
+ icon?: string;
48
+ classification?: string;
49
+ };
50
+ };
51
+ combatReplayMetaData?: {
52
+ inchToPixel?: number;
53
+ pollingRate?: number;
54
+ sizes?: [number, number];
55
+ maps?: Array<{
56
+ url?: string;
57
+ }>;
58
+ };
59
+ wvWMapData?: {
60
+ redTeamID?: number;
61
+ greenTeamID?: number;
62
+ blueTeamID?: number;
63
+ redShardID?: number;
64
+ greenShardID?: number;
65
+ blueShardID?: number;
66
+ };
67
+ damageModMap?: Record<string, DamageModifierInfo>;
68
+ personalDamageMods?: Record<string, number[]>;
69
+ }
70
+ interface Target {
71
+ id: number;
72
+ name: string;
73
+ isFake: boolean;
74
+ dpsAll: StatsAll[];
75
+ statsAll: StatsAll[];
76
+ defenses: Defenses[];
77
+ totalHealth: number;
78
+ healthPercentBurned: number;
79
+ enemyPlayer: boolean;
80
+ teamID?: number;
81
+ }
82
+ interface Player {
83
+ name: string;
84
+ display_name: string;
85
+ character_name: string;
86
+ profession: string;
87
+ teamID?: number;
88
+ elite_spec: number;
89
+ group: number;
90
+ dpsAll: StatsAll[];
91
+ statsAll?: StatsAll[];
92
+ dpsTargets?: StatsTarget[][];
93
+ defenses: Defenses[];
94
+ support: Support[];
95
+ rotation?: Array<{
96
+ id: number;
97
+ /** Per-instance cast events for this skill. castTime is ms from fight start. */
98
+ skills?: Array<{
99
+ castTime: number;
100
+ duration: number;
101
+ timeGained?: number;
102
+ quickness?: number;
103
+ }>;
104
+ }>;
105
+ extHealingStats?: {
106
+ outgoingHealingAllies?: {
107
+ healing: number;
108
+ downedHealing?: number;
109
+ }[][];
110
+ totalHealingDist?: Array<Array<{
111
+ id: number;
112
+ totalHealing: number;
113
+ totalDownedHealing?: number;
114
+ hits: number;
115
+ min: number;
116
+ max: number;
117
+ indirectHealing?: boolean;
118
+ }>>;
119
+ /** Cumulative total outgoing healing per second (to all targets). Shape: [phase][time]. Diff to get per-second. */
120
+ healing1S?: number[][];
121
+ /** Cumulative healing received per second (from all sources). Shape: [phase][time]. Diff to get per-second. */
122
+ healingReceived1S?: number[][];
123
+ };
124
+ extBarrierStats?: {
125
+ outgoingBarrierAllies?: {
126
+ barrier: number;
127
+ }[][];
128
+ totalBarrierDist?: Array<Array<{
129
+ id: number;
130
+ totalBarrier: number;
131
+ hits: number;
132
+ min: number;
133
+ max: number;
134
+ indirectBarrier?: boolean;
135
+ }>>;
136
+ };
137
+ squadBuffVolumes?: SquadBuffVolume[];
138
+ selfBuffs?: BuffGeneration[];
139
+ groupBuffs?: BuffGeneration[];
140
+ squadBuffs?: BuffGeneration[];
141
+ selfBuffsActive?: BuffGeneration[];
142
+ groupBuffsActive?: BuffGeneration[];
143
+ squadBuffsActive?: BuffGeneration[];
144
+ buffUptimes?: BuffUptimesEntry[];
145
+ totalDamageDist?: TotalDamageDist[][];
146
+ targetDamageDist?: TotalDamageDist[][][];
147
+ totalDamageTaken?: TotalDamageTaken[][];
148
+ statsTargets?: StatsTarget[][];
149
+ combatReplayData?: {
150
+ positions?: Array<[number, number]>;
151
+ dead?: Array<[number, number]>;
152
+ down?: Array<[number, number]>;
153
+ start?: number;
154
+ };
155
+ healthPercents?: Array<[number, number]>;
156
+ hasCommanderTag?: boolean;
157
+ notInSquad?: boolean;
158
+ account?: string;
159
+ stabGeneration?: number;
160
+ activeTimes?: number[];
161
+ damageModifiers?: DamageModifierData[];
162
+ incomingDamageModifiers?: DamageModifierData[];
163
+ damage1S?: number[][];
164
+ targetDamage1S?: number[][][];
165
+ /** Cumulative incoming damage per second. Shape: [phase][time]. Diff adjacent entries to get per-second values. */
166
+ damageTaken1S?: number[][];
167
+ }
168
+ interface StatsAll {
169
+ dps: number;
170
+ damage: number;
171
+ breakbarDamage: number;
172
+ downContribution?: number;
173
+ stackDist?: number;
174
+ distToCom?: number;
175
+ appliedCrowdControl?: number;
176
+ appliedCrowdControlDuration?: number;
177
+ }
178
+ interface Defenses {
179
+ downCount: number;
180
+ deadCount: number;
181
+ missedCount: number;
182
+ blockedCount: number;
183
+ evadedCount: number;
184
+ dodgeCount: number;
185
+ interruptedCount: number;
186
+ damageTaken: number;
187
+ /** Boons stripped from this player by enemies. */
188
+ boonStrips?: number;
189
+ boonStripsTime?: number;
190
+ /** Conditions cleansed from this player (by self or allies). */
191
+ conditionCleanses?: number;
192
+ conditionCleansesTime?: number;
193
+ /** Number of condition damage hits received. */
194
+ conditionDamageTakenCount?: number;
195
+ receivedCrowdControl?: number;
196
+ receivedCrowdControlDuration?: number;
197
+ }
198
+ interface SquadBuffVolume {
199
+ id: number;
200
+ buffVolumeData: {
201
+ outgoing: number;
202
+ }[];
203
+ }
204
+ interface BuffGeneration {
205
+ id: number;
206
+ buffData?: {
207
+ generation?: number;
208
+ wasted?: number;
209
+ }[];
210
+ }
211
+ /** @deprecated Use BuffUptimesEntry */
212
+ interface BuffUptimes {
213
+ id: number;
214
+ buffData: {
215
+ uptime: number;
216
+ }[];
217
+ statesPerSource: {
218
+ [key: string]: number[][];
219
+ };
220
+ }
221
+ /**
222
+ * Per-player per-buff entry in the `buffUptimes` array.
223
+ * `states` is an array of `[timeMs, stackCount]` pairs recording state-change
224
+ * events throughout the fight. The value at any given millisecond is the last
225
+ * `stackCount` whose `timeMs` is ≤ the queried time.
226
+ */
227
+ interface BuffUptimesEntry {
228
+ id: number;
229
+ buffData: {
230
+ uptime: number;
231
+ presence?: number;
232
+ }[];
233
+ /** `[timeMs, stackCount]` state-change pairs, sorted by time ascending. */
234
+ states?: Array<[number, number]>;
235
+ statesPerSource?: {
236
+ [key: string]: Array<[number, number]>;
237
+ };
238
+ }
239
+ interface TotalDamageDist {
240
+ id: number;
241
+ hits: number;
242
+ connectedHits: number;
243
+ flank: number;
244
+ crit: number;
245
+ glance: number;
246
+ totalDamage: number;
247
+ missed: number;
248
+ interrupted: number;
249
+ evaded: number;
250
+ blocked: number;
251
+ min: number;
252
+ max: number;
253
+ downContribution?: number;
254
+ }
255
+ interface TotalDamageTaken {
256
+ id: number;
257
+ hits: number;
258
+ connectedHits: number;
259
+ flank: number;
260
+ crit: number;
261
+ glance: number;
262
+ totalDamage: number;
263
+ missed: number;
264
+ interrupted: number;
265
+ evaded: number;
266
+ blocked: number;
267
+ min: number;
268
+ max: number;
269
+ indirectDamage: boolean;
270
+ }
271
+ interface StatsTarget {
272
+ killed: number;
273
+ downed: number;
274
+ downContribution: number;
275
+ againstDownedCount: number;
276
+ againstDownedDamage: number;
277
+ interrupts?: number;
278
+ }
279
+ interface Support {
280
+ condiCleanse: number;
281
+ condiCleanseTime?: number;
282
+ condiCleanseSelf: number;
283
+ condiCleanseTimeSelf?: number;
284
+ boonStrips: number;
285
+ boonStripsTime?: number;
286
+ boonStripDownContribution?: number;
287
+ boonStripDownContributionTime?: number;
288
+ stunBreak?: number;
289
+ removedStunDuration?: number;
290
+ resurrects: number;
291
+ resurrectTime?: number;
292
+ }
293
+
294
+ export type { BuffGeneration, BuffUptimes, BuffUptimesEntry, DPSReportJSON, DamageModifierData, DamageModifierInfo, Defenses, Player, SquadBuffVolume, StatsAll, StatsTarget, Support, Target, TotalDamageDist, TotalDamageTaken };