halo-infinite-api 8.0.7 → 8.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/dist/models/halo-infinite/game-variant-category.d.ts +3 -1
- package/dist/models/halo-infinite/game-variant-category.js +3 -1
- package/dist/models/halo-infinite/game-variant-category.js.map +1 -1
- package/dist/models/halo-infinite/stats.d.ts +36 -0
- package/dist/util/expiry-token-cache.js +15 -9
- package/dist/util/expiry-token-cache.js.map +1 -1
- package/package.json +1 -1
- package/src/models/halo-infinite/game-variant-category.ts +3 -1
- package/src/models/halo-infinite/stats.ts +47 -3
- package/src/util/expiry-token-cache.ts +15 -9
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export declare enum GameVariantCategory {
|
|
2
2
|
MultiplayerSlayer = 6,
|
|
3
3
|
MultiplayerAttrition = 7,
|
|
4
|
+
MultiplayerElimination = 8,
|
|
4
5
|
MultiplayerFiesta = 9,
|
|
5
6
|
MultiplayerStrongholds = 11,
|
|
6
7
|
MultiplayerKingOfTheHill = 12,
|
|
7
8
|
MultiplayerTotalControl = 14,
|
|
8
9
|
MultiplayerCtf = 15,
|
|
10
|
+
MultiplayerExtraction = 17,
|
|
9
11
|
MultiplayerOddball = 18,
|
|
10
12
|
MultiplayerStockpile = 19,
|
|
11
13
|
MultiplayerInfection = 22,
|
|
12
14
|
MultiplayerGrifball = 25,
|
|
13
15
|
MultiplayerLandGrab = 39,
|
|
14
|
-
|
|
16
|
+
MultiplayerMinigame = 41,
|
|
15
17
|
MultiplayerFirefight = 42
|
|
16
18
|
}
|
|
@@ -2,17 +2,19 @@ export var GameVariantCategory;
|
|
|
2
2
|
(function (GameVariantCategory) {
|
|
3
3
|
GameVariantCategory[GameVariantCategory["MultiplayerSlayer"] = 6] = "MultiplayerSlayer";
|
|
4
4
|
GameVariantCategory[GameVariantCategory["MultiplayerAttrition"] = 7] = "MultiplayerAttrition";
|
|
5
|
+
GameVariantCategory[GameVariantCategory["MultiplayerElimination"] = 8] = "MultiplayerElimination";
|
|
5
6
|
GameVariantCategory[GameVariantCategory["MultiplayerFiesta"] = 9] = "MultiplayerFiesta";
|
|
6
7
|
GameVariantCategory[GameVariantCategory["MultiplayerStrongholds"] = 11] = "MultiplayerStrongholds";
|
|
7
8
|
GameVariantCategory[GameVariantCategory["MultiplayerKingOfTheHill"] = 12] = "MultiplayerKingOfTheHill";
|
|
8
9
|
GameVariantCategory[GameVariantCategory["MultiplayerTotalControl"] = 14] = "MultiplayerTotalControl";
|
|
9
10
|
GameVariantCategory[GameVariantCategory["MultiplayerCtf"] = 15] = "MultiplayerCtf";
|
|
11
|
+
GameVariantCategory[GameVariantCategory["MultiplayerExtraction"] = 17] = "MultiplayerExtraction";
|
|
10
12
|
GameVariantCategory[GameVariantCategory["MultiplayerOddball"] = 18] = "MultiplayerOddball";
|
|
11
13
|
GameVariantCategory[GameVariantCategory["MultiplayerStockpile"] = 19] = "MultiplayerStockpile";
|
|
12
14
|
GameVariantCategory[GameVariantCategory["MultiplayerInfection"] = 22] = "MultiplayerInfection";
|
|
13
15
|
GameVariantCategory[GameVariantCategory["MultiplayerGrifball"] = 25] = "MultiplayerGrifball";
|
|
14
16
|
GameVariantCategory[GameVariantCategory["MultiplayerLandGrab"] = 39] = "MultiplayerLandGrab";
|
|
15
|
-
GameVariantCategory[GameVariantCategory["
|
|
17
|
+
GameVariantCategory[GameVariantCategory["MultiplayerMinigame"] = 41] = "MultiplayerMinigame";
|
|
16
18
|
GameVariantCategory[GameVariantCategory["MultiplayerFirefight"] = 42] = "MultiplayerFirefight";
|
|
17
19
|
})(GameVariantCategory || (GameVariantCategory = {}));
|
|
18
20
|
//# sourceMappingURL=game-variant-category.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-variant-category.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/game-variant-category.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"game-variant-category.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/game-variant-category.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAiBX;AAjBD,WAAY,mBAAmB;IAC7B,uFAAqB,CAAA;IACrB,6FAAwB,CAAA;IACxB,iGAA0B,CAAA;IAC1B,uFAAqB,CAAA;IACrB,kGAA2B,CAAA;IAC3B,sGAA6B,CAAA;IAC7B,oGAA4B,CAAA;IAC5B,kFAAmB,CAAA;IACnB,gGAA0B,CAAA;IAC1B,0FAAuB,CAAA;IACvB,8FAAyB,CAAA;IACzB,8FAAyB,CAAA;IACzB,4FAAwB,CAAA;IACxB,4FAAwB,CAAA;IACxB,4FAAwB,CAAA;IACxB,8FAAyB,CAAA;AAC3B,CAAC,EAjBW,mBAAmB,KAAnB,mBAAmB,QAiB9B"}
|
|
@@ -68,30 +68,66 @@ export interface StockpileStats {
|
|
|
68
68
|
TimeAsPowerSeedCarrier: string;
|
|
69
69
|
TimeAsPowerSeedDriver: string;
|
|
70
70
|
}
|
|
71
|
+
export interface PvpStats {
|
|
72
|
+
Kills: number;
|
|
73
|
+
Deaths: number;
|
|
74
|
+
Assists: number;
|
|
75
|
+
KDA: number;
|
|
76
|
+
}
|
|
77
|
+
export interface PveStats {
|
|
78
|
+
Kills: number;
|
|
79
|
+
Deaths: number;
|
|
80
|
+
Assists: number;
|
|
81
|
+
KDA: number;
|
|
82
|
+
MarineKills: number;
|
|
83
|
+
GruntKills: number;
|
|
84
|
+
JackalKills: number;
|
|
85
|
+
EliteKills: number;
|
|
86
|
+
BruteKills: number;
|
|
87
|
+
HunterKills: number;
|
|
88
|
+
SkimmerKills: number;
|
|
89
|
+
SentinelKills: number;
|
|
90
|
+
BossKills: number;
|
|
91
|
+
}
|
|
71
92
|
type StatsMap = {
|
|
72
93
|
[GameVariantCategory.MultiplayerOddball]: {
|
|
73
94
|
OddballStats: OddballStats;
|
|
95
|
+
PvpStats: PvpStats;
|
|
74
96
|
};
|
|
75
97
|
[GameVariantCategory.MultiplayerStrongholds]: {
|
|
76
98
|
ZonesStats: ZonesStats;
|
|
99
|
+
PvpStats: PvpStats;
|
|
77
100
|
};
|
|
78
101
|
[GameVariantCategory.MultiplayerCtf]: {
|
|
79
102
|
CaptureTheFlagStats: CaptureTheFlagStats;
|
|
103
|
+
PvpStats: PvpStats;
|
|
80
104
|
};
|
|
81
105
|
[GameVariantCategory.MultiplayerKingOfTheHill]: {
|
|
82
106
|
ZonesStats: ZonesStats;
|
|
107
|
+
PvpStats: PvpStats;
|
|
83
108
|
};
|
|
84
109
|
[GameVariantCategory.MultiplayerExtraction]: {
|
|
85
110
|
ExtractionStats: ExtractionStats;
|
|
111
|
+
PvpStats: PvpStats;
|
|
86
112
|
};
|
|
87
113
|
[GameVariantCategory.MultiplayerFirefight]: {
|
|
88
114
|
EliminationStats: EliminationStats;
|
|
115
|
+
PveStats: PveStats;
|
|
89
116
|
};
|
|
90
117
|
[GameVariantCategory.MultiplayerInfection]: {
|
|
91
118
|
InfectionSTats: InfectionStats;
|
|
119
|
+
PvpStats: PvpStats;
|
|
92
120
|
};
|
|
93
121
|
[GameVariantCategory.MultiplayerStockpile]: {
|
|
94
122
|
StockpileStats: StockpileStats;
|
|
123
|
+
PvpStats: PvpStats;
|
|
124
|
+
};
|
|
125
|
+
[GameVariantCategory.MultiplayerElimination]: {
|
|
126
|
+
EliminationStats: EliminationStats;
|
|
127
|
+
PvpStats: PvpStats;
|
|
128
|
+
};
|
|
129
|
+
[GameVariantCategory.MultiplayerMinigame]: {
|
|
130
|
+
PvpStats: PvpStats;
|
|
95
131
|
};
|
|
96
132
|
};
|
|
97
133
|
export type Stats<TCategory extends GameVariantCategory = GameVariantCategory> = {
|
|
@@ -21,39 +21,45 @@ export class ExpiryTokenCache {
|
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
23
|
// Current token expired, start a new promise
|
|
24
|
-
|
|
24
|
+
const newPromise = new ResolvablePromise();
|
|
25
|
+
this.tokenFetchPromise = newPromise;
|
|
25
26
|
try {
|
|
26
27
|
const newToken = await this.generateNewToken(...args);
|
|
27
|
-
|
|
28
|
+
newPromise.resolve(newToken);
|
|
28
29
|
return newToken;
|
|
29
30
|
}
|
|
30
31
|
catch (e) {
|
|
31
|
-
|
|
32
|
-
this.tokenFetchPromise
|
|
32
|
+
newPromise.reject(e);
|
|
33
|
+
if (this.tokenFetchPromise === newPromise) {
|
|
34
|
+
this.tokenFetchPromise = undefined;
|
|
35
|
+
}
|
|
33
36
|
throw e;
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
else {
|
|
38
41
|
// No one has a token, start a new promise
|
|
39
|
-
|
|
42
|
+
const newPromise = new ResolvablePromise();
|
|
43
|
+
this.tokenFetchPromise = newPromise;
|
|
40
44
|
try {
|
|
41
45
|
const existingToken = await this.getExistingToken();
|
|
42
46
|
if (existingToken?.expiresAt) {
|
|
43
47
|
const expiresAt = coalesceDateTime(existingToken.expiresAt);
|
|
44
48
|
if (expiresAt && expiresAt > DateTime.now()) {
|
|
45
49
|
const newToken = { ...existingToken, expiresAt };
|
|
46
|
-
|
|
50
|
+
newPromise.resolve(newToken);
|
|
47
51
|
return newToken;
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
const newToken = await this.generateNewToken(...args);
|
|
51
|
-
|
|
55
|
+
newPromise.resolve(newToken);
|
|
52
56
|
return newToken;
|
|
53
57
|
}
|
|
54
58
|
catch (e) {
|
|
55
|
-
|
|
56
|
-
this.tokenFetchPromise
|
|
59
|
+
newPromise.reject(e);
|
|
60
|
+
if (this.tokenFetchPromise === newPromise) {
|
|
61
|
+
this.tokenFetchPromise = undefined;
|
|
62
|
+
}
|
|
57
63
|
throw e;
|
|
58
64
|
}
|
|
59
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expiry-token-cache.js","sourceRoot":"","sources":["../../src/util/expiry-token-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,gBAAgB;IAOR;IACA;IAJX,iBAAiB,GAA0C,SAAS,CAAC;IAE7E,YACmB,gBAAqD,EACrD,oBAEhB;QAHgB,qBAAgB,GAAhB,gBAAgB,CAAqC;QACrD,yBAAoB,GAApB,oBAAoB,CAEpC;IACA,CAAC;IAEJ,+DAA+D;IAC/D,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAW;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,yEAAyE;YACzE,mDAAmD;YACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAElD,IAAI,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjE,oCAAoC;gBACpC,OAAO,YAAY,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,
|
|
1
|
+
{"version":3,"file":"expiry-token-cache.js","sourceRoot":"","sources":["../../src/util/expiry-token-cache.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export enum GameVariantCategory {
|
|
2
2
|
MultiplayerSlayer = 6,
|
|
3
3
|
MultiplayerAttrition = 7,
|
|
4
|
+
MultiplayerElimination = 8,
|
|
4
5
|
MultiplayerFiesta = 9,
|
|
5
6
|
MultiplayerStrongholds = 11,
|
|
6
7
|
MultiplayerKingOfTheHill = 12,
|
|
7
8
|
MultiplayerTotalControl = 14,
|
|
8
9
|
MultiplayerCtf = 15,
|
|
10
|
+
MultiplayerExtraction = 17,
|
|
9
11
|
MultiplayerOddball = 18,
|
|
10
12
|
MultiplayerStockpile = 19,
|
|
11
13
|
MultiplayerInfection = 22,
|
|
12
14
|
MultiplayerGrifball = 25,
|
|
13
15
|
MultiplayerLandGrab = 39,
|
|
14
|
-
|
|
16
|
+
MultiplayerMinigame = 41,
|
|
15
17
|
MultiplayerFirefight = 42,
|
|
16
18
|
}
|
|
@@ -76,24 +76,68 @@ export interface StockpileStats {
|
|
|
76
76
|
TimeAsPowerSeedDriver: string;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
export interface PvpStats {
|
|
80
|
+
Kills: number;
|
|
81
|
+
Deaths: number;
|
|
82
|
+
Assists: number;
|
|
83
|
+
KDA: number;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface PveStats {
|
|
87
|
+
Kills: number;
|
|
88
|
+
Deaths: number;
|
|
89
|
+
Assists: number;
|
|
90
|
+
KDA: number;
|
|
91
|
+
MarineKills: number;
|
|
92
|
+
GruntKills: number;
|
|
93
|
+
JackalKills: number;
|
|
94
|
+
EliteKills: number;
|
|
95
|
+
BruteKills: number;
|
|
96
|
+
HunterKills: number;
|
|
97
|
+
SkimmerKills: number;
|
|
98
|
+
SentinelKills: number;
|
|
99
|
+
BossKills: number;
|
|
100
|
+
}
|
|
101
|
+
|
|
79
102
|
type StatsMap = {
|
|
80
|
-
[GameVariantCategory.MultiplayerOddball]: {
|
|
81
|
-
|
|
103
|
+
[GameVariantCategory.MultiplayerOddball]: {
|
|
104
|
+
OddballStats: OddballStats;
|
|
105
|
+
PvpStats: PvpStats;
|
|
106
|
+
};
|
|
107
|
+
[GameVariantCategory.MultiplayerStrongholds]: {
|
|
108
|
+
ZonesStats: ZonesStats;
|
|
109
|
+
PvpStats: PvpStats;
|
|
110
|
+
};
|
|
82
111
|
[GameVariantCategory.MultiplayerCtf]: {
|
|
83
112
|
CaptureTheFlagStats: CaptureTheFlagStats;
|
|
113
|
+
PvpStats: PvpStats;
|
|
114
|
+
};
|
|
115
|
+
[GameVariantCategory.MultiplayerKingOfTheHill]: {
|
|
116
|
+
ZonesStats: ZonesStats;
|
|
117
|
+
PvpStats: PvpStats;
|
|
84
118
|
};
|
|
85
|
-
[GameVariantCategory.MultiplayerKingOfTheHill]: { ZonesStats: ZonesStats };
|
|
86
119
|
[GameVariantCategory.MultiplayerExtraction]: {
|
|
87
120
|
ExtractionStats: ExtractionStats;
|
|
121
|
+
PvpStats: PvpStats;
|
|
88
122
|
};
|
|
89
123
|
[GameVariantCategory.MultiplayerFirefight]: {
|
|
90
124
|
EliminationStats: EliminationStats;
|
|
125
|
+
PveStats: PveStats;
|
|
91
126
|
};
|
|
92
127
|
[GameVariantCategory.MultiplayerInfection]: {
|
|
93
128
|
InfectionSTats: InfectionStats;
|
|
129
|
+
PvpStats: PvpStats;
|
|
94
130
|
};
|
|
95
131
|
[GameVariantCategory.MultiplayerStockpile]: {
|
|
96
132
|
StockpileStats: StockpileStats;
|
|
133
|
+
PvpStats: PvpStats;
|
|
134
|
+
};
|
|
135
|
+
[GameVariantCategory.MultiplayerElimination]: {
|
|
136
|
+
EliminationStats: EliminationStats;
|
|
137
|
+
PvpStats: PvpStats;
|
|
138
|
+
};
|
|
139
|
+
[GameVariantCategory.MultiplayerMinigame]: {
|
|
140
|
+
PvpStats: PvpStats;
|
|
97
141
|
};
|
|
98
142
|
};
|
|
99
143
|
|
|
@@ -27,21 +27,25 @@ export class ExpiryTokenCache<
|
|
|
27
27
|
return currentToken;
|
|
28
28
|
} else {
|
|
29
29
|
// Current token expired, start a new promise
|
|
30
|
-
|
|
30
|
+
const newPromise = new ResolvablePromise<TToken>();
|
|
31
|
+
this.tokenFetchPromise = newPromise;
|
|
31
32
|
|
|
32
33
|
try {
|
|
33
34
|
const newToken = await this.generateNewToken(...args);
|
|
34
|
-
|
|
35
|
+
newPromise.resolve(newToken);
|
|
35
36
|
return newToken;
|
|
36
37
|
} catch (e) {
|
|
37
|
-
|
|
38
|
-
this.tokenFetchPromise
|
|
38
|
+
newPromise.reject(e);
|
|
39
|
+
if (this.tokenFetchPromise === newPromise) {
|
|
40
|
+
this.tokenFetchPromise = undefined;
|
|
41
|
+
}
|
|
39
42
|
throw e;
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
} else {
|
|
43
46
|
// No one has a token, start a new promise
|
|
44
|
-
|
|
47
|
+
const newPromise = new ResolvablePromise<TToken>();
|
|
48
|
+
this.tokenFetchPromise = newPromise;
|
|
45
49
|
|
|
46
50
|
try {
|
|
47
51
|
const existingToken = await this.getExistingToken();
|
|
@@ -50,17 +54,19 @@ export class ExpiryTokenCache<
|
|
|
50
54
|
const expiresAt = coalesceDateTime(existingToken.expiresAt);
|
|
51
55
|
if (expiresAt && expiresAt > DateTime.now()) {
|
|
52
56
|
const newToken = { ...existingToken, expiresAt } as TToken;
|
|
53
|
-
|
|
57
|
+
newPromise.resolve(newToken);
|
|
54
58
|
return newToken;
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
const newToken = await this.generateNewToken(...args);
|
|
59
|
-
|
|
63
|
+
newPromise.resolve(newToken);
|
|
60
64
|
return newToken;
|
|
61
65
|
} catch (e) {
|
|
62
|
-
|
|
63
|
-
this.tokenFetchPromise
|
|
66
|
+
newPromise.reject(e);
|
|
67
|
+
if (this.tokenFetchPromise === newPromise) {
|
|
68
|
+
this.tokenFetchPromise = undefined;
|
|
69
|
+
}
|
|
64
70
|
throw e;
|
|
65
71
|
}
|
|
66
72
|
}
|