@takaro/gameserver 0.0.1

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 (78) hide show
  1. package/README.md +36 -0
  2. package/dist/TakaroEmitter.d.ts +26 -0
  3. package/dist/TakaroEmitter.js +97 -0
  4. package/dist/TakaroEmitter.js.map +1 -0
  5. package/dist/gameservers/7d2d/apiResponses.d.ts +193 -0
  6. package/dist/gameservers/7d2d/apiResponses.js +2 -0
  7. package/dist/gameservers/7d2d/apiResponses.js.map +1 -0
  8. package/dist/gameservers/7d2d/connectionInfo.d.ts +32 -0
  9. package/dist/gameservers/7d2d/connectionInfo.js +58 -0
  10. package/dist/gameservers/7d2d/connectionInfo.js.map +1 -0
  11. package/dist/gameservers/7d2d/emitter.d.ts +30 -0
  12. package/dist/gameservers/7d2d/emitter.js +261 -0
  13. package/dist/gameservers/7d2d/emitter.js.map +1 -0
  14. package/dist/gameservers/7d2d/index.d.ts +28 -0
  15. package/dist/gameservers/7d2d/index.js +267 -0
  16. package/dist/gameservers/7d2d/index.js.map +1 -0
  17. package/dist/gameservers/7d2d/itemWorker.d.ts +1 -0
  18. package/dist/gameservers/7d2d/itemWorker.js +31 -0
  19. package/dist/gameservers/7d2d/itemWorker.js.map +1 -0
  20. package/dist/gameservers/7d2d/items-7d2d.json +17705 -0
  21. package/dist/gameservers/7d2d/sdtdAPIClient.d.ts +14 -0
  22. package/dist/gameservers/7d2d/sdtdAPIClient.js +60 -0
  23. package/dist/gameservers/7d2d/sdtdAPIClient.js.map +1 -0
  24. package/dist/gameservers/mock/connectionInfo.d.ts +20 -0
  25. package/dist/gameservers/mock/connectionInfo.js +37 -0
  26. package/dist/gameservers/mock/connectionInfo.js.map +1 -0
  27. package/dist/gameservers/mock/emitter.d.ts +12 -0
  28. package/dist/gameservers/mock/emitter.js +33 -0
  29. package/dist/gameservers/mock/emitter.js.map +1 -0
  30. package/dist/gameservers/mock/index.d.ts +31 -0
  31. package/dist/gameservers/mock/index.js +135 -0
  32. package/dist/gameservers/mock/index.js.map +1 -0
  33. package/dist/gameservers/rust/connectionInfo.d.ts +28 -0
  34. package/dist/gameservers/rust/connectionInfo.js +51 -0
  35. package/dist/gameservers/rust/connectionInfo.js.map +1 -0
  36. package/dist/gameservers/rust/emitter.d.ts +30 -0
  37. package/dist/gameservers/rust/emitter.js +160 -0
  38. package/dist/gameservers/rust/emitter.js.map +1 -0
  39. package/dist/gameservers/rust/index.d.ts +29 -0
  40. package/dist/gameservers/rust/index.js +189 -0
  41. package/dist/gameservers/rust/index.js.map +1 -0
  42. package/dist/gameservers/rust/items-rust.json +20771 -0
  43. package/dist/getGame.d.ts +8 -0
  44. package/dist/getGame.js +26 -0
  45. package/dist/getGame.js.map +1 -0
  46. package/dist/interfaces/GameServer.d.ts +57 -0
  47. package/dist/interfaces/GameServer.js +95 -0
  48. package/dist/interfaces/GameServer.js.map +1 -0
  49. package/dist/main.d.ts +9 -0
  50. package/dist/main.js +10 -0
  51. package/dist/main.js.map +1 -0
  52. package/package.json +26 -0
  53. package/src/TakaroEmitter.ts +138 -0
  54. package/src/TakaroEmitter.unit.test.ts +125 -0
  55. package/src/__tests__/gameEventEmitter.test.ts +36 -0
  56. package/src/gameservers/7d2d/__tests__/7d2dActions.unit.test.ts +91 -0
  57. package/src/gameservers/7d2d/__tests__/7d2dEventDetection.unit.test.ts +324 -0
  58. package/src/gameservers/7d2d/apiResponses.ts +214 -0
  59. package/src/gameservers/7d2d/connectionInfo.ts +40 -0
  60. package/src/gameservers/7d2d/emitter.ts +325 -0
  61. package/src/gameservers/7d2d/index.ts +318 -0
  62. package/src/gameservers/7d2d/itemWorker.ts +34 -0
  63. package/src/gameservers/7d2d/items-7d2d.json +17705 -0
  64. package/src/gameservers/7d2d/sdtdAPIClient.ts +82 -0
  65. package/src/gameservers/mock/connectionInfo.ts +25 -0
  66. package/src/gameservers/mock/emitter.ts +37 -0
  67. package/src/gameservers/mock/index.ts +156 -0
  68. package/src/gameservers/rust/__tests__/rustActions.unit.test.ts +140 -0
  69. package/src/gameservers/rust/connectionInfo.ts +35 -0
  70. package/src/gameservers/rust/emitter.ts +198 -0
  71. package/src/gameservers/rust/index.ts +230 -0
  72. package/src/gameservers/rust/items-rust.json +20771 -0
  73. package/src/getGame.ts +32 -0
  74. package/src/interfaces/GameServer.ts +95 -0
  75. package/src/main.ts +14 -0
  76. package/tsconfig.build.json +9 -0
  77. package/tsconfig.json +9 -0
  78. package/typedoc.json +3 -0
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # @takaro/config
2
+
3
+ An opinionated config manager based on [node-convict](https://github.com/mozilla/node-convict)
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ import { Config, IBaseConfig } from '@takaro/config';
9
+
10
+ interface IExampleConfig extends IBaseConfig {
11
+ test: string;
12
+ }
13
+
14
+ // This is a schema from convict
15
+ const exampleSchema = {
16
+ test: {
17
+ doc: 'Test value',
18
+ format: String,
19
+ default: 'test',
20
+ env: 'TAKARO_TEST'
21
+ }
22
+ };
23
+
24
+ const config = new Config<IExampleConfig>([exampleSchema]);
25
+
26
+ // ---
27
+
28
+ config.load({ test: 1 });
29
+ // Error! 'test' should be a string
30
+ config.validate();
31
+
32
+ // ---
33
+
34
+ config.load({ test: 'Hello world' });
35
+ config.get('test') // 'Hello world'
36
+ ```
@@ -0,0 +1,26 @@
1
+ import { BaseEvent, EventChatMessage, EventEntityKilled, EventLogLine, EventPlayerConnected, EventPlayerDeath, EventPlayerDisconnected, GameEvents } from '@takaro/modules';
2
+ import { errors } from '@takaro/util';
3
+ /**
4
+ * Maps event types to their listener function signatures
5
+ * This allows our EventEmitter to be strongly typed
6
+ */
7
+ export interface IEventMap {
8
+ [GameEvents.LOG_LINE]: (log: EventLogLine) => Promise<void>;
9
+ [GameEvents.PLAYER_CONNECTED]: (player: EventPlayerConnected) => Promise<void>;
10
+ [GameEvents.PLAYER_DISCONNECTED]: (player: EventPlayerDisconnected) => Promise<void>;
11
+ [GameEvents.CHAT_MESSAGE]: (chatMessage: EventChatMessage) => Promise<void>;
12
+ [GameEvents.PLAYER_DEATH]: (playerDeath: EventPlayerDeath) => Promise<void>;
13
+ [GameEvents.ENTITY_KILLED]: (entityKilled: EventEntityKilled) => Promise<void>;
14
+ error: (error: errors.TakaroError | Error) => Promise<void> | void;
15
+ }
16
+ export declare abstract class TakaroEmitter {
17
+ private listenerMap;
18
+ abstract stop(): Promise<void>;
19
+ abstract start(): Promise<void>;
20
+ constructor();
21
+ emit<E extends keyof IEventMap>(event: E, data: BaseEvent<unknown> | Error): Promise<void>;
22
+ on<E extends keyof IEventMap>(event: E, listener: IEventMap[E]): this;
23
+ off<E extends keyof IEventMap>(event: E, listener: IEventMap[E]): this;
24
+ hasErrorListener(): boolean;
25
+ }
26
+ export declare function getErrorProxyHandler<T extends TakaroEmitter>(emitter: T): T;
@@ -0,0 +1,97 @@
1
+ import { GameEvents, } from '@takaro/modules';
2
+ import { errors, isTakaroDTO, logger } from '@takaro/util';
3
+ import { isPromise } from 'util/types';
4
+ const log = logger('TakaroEmitter');
5
+ export class TakaroEmitter {
6
+ constructor() {
7
+ this.listenerMap = new Map();
8
+ return getErrorProxyHandler(this);
9
+ }
10
+ async emit(event, data) {
11
+ try {
12
+ // No listeners are attached, return early
13
+ if (!this.listenerMap.has(event))
14
+ return;
15
+ // Validate the data, it is user-input after all :)
16
+ if (isTakaroDTO(data)) {
17
+ if (!data.timestamp)
18
+ data.timestamp = new Date().toISOString();
19
+ // await data.validate();
20
+ }
21
+ const listeners = this.listenerMap.get(event);
22
+ if (listeners) {
23
+ for (const listener of listeners) {
24
+ // We know this is okay because our listener map always corresponds to the right event
25
+ // This is implicit in our implementation and checked in the tests
26
+ // @ts-expect-error Can't get the types quite right :(
27
+ await listener(data);
28
+ }
29
+ }
30
+ }
31
+ catch (error) {
32
+ this.emit('error', error);
33
+ }
34
+ }
35
+ on(event, listener) {
36
+ this.listenerMap.set(event, [listener]);
37
+ return this;
38
+ }
39
+ off(event, listener) {
40
+ const listeners = this.listenerMap.get(event);
41
+ if (listeners) {
42
+ this.listenerMap.set(event, listeners.filter((l) => l !== listener));
43
+ }
44
+ return this;
45
+ }
46
+ hasErrorListener() {
47
+ return this.listenerMap.has('error');
48
+ }
49
+ }
50
+ export function getErrorProxyHandler(emitter) {
51
+ const errorProxyHandler = {
52
+ construct(target, argArray) {
53
+ return Reflect.construct(target, argArray, TakaroEmitter);
54
+ },
55
+ set: function (obj, prop, value) {
56
+ obj[prop] = value;
57
+ return true;
58
+ },
59
+ get(target, prop) {
60
+ return async (...[one, two]) => {
61
+ try {
62
+ // Check if callable function
63
+ if (typeof target[prop] === 'function') {
64
+ return await target[prop](one, two);
65
+ // Or if its a Promise, await it
66
+ }
67
+ else if (isPromise(target[prop])) {
68
+ return await target[prop];
69
+ }
70
+ else {
71
+ // Otherwise, return the value
72
+ return target[prop];
73
+ }
74
+ }
75
+ catch (error) {
76
+ if (!target.hasErrorListener()) {
77
+ log.error('Unhandled error', error);
78
+ const err = new Error('Unhandled error in TakaroEmitter, attach a listener to the "error" event to handle this');
79
+ Error.captureStackTrace(err);
80
+ throw err;
81
+ }
82
+ if (error instanceof errors.TakaroError) {
83
+ await target.emit('error', error);
84
+ }
85
+ else if (error instanceof Error) {
86
+ await target.emit('error', error);
87
+ }
88
+ if (!TakaroEmitter.prototype.hasOwnProperty(prop)) {
89
+ return Promise.reject(error);
90
+ }
91
+ }
92
+ };
93
+ },
94
+ };
95
+ return new Proxy(emitter, errorProxyHandler);
96
+ }
97
+ //# sourceMappingURL=TakaroEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TakaroEmitter.js","sourceRoot":"","sources":["../src/TakaroEmitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ export interface GameTime {
2
+ days: number;
3
+ hours: number;
4
+ minutes: number;
5
+ }
6
+ export interface StatsResponse {
7
+ gametime: GameTime;
8
+ players: number;
9
+ hostiles: number;
10
+ animals: number;
11
+ }
12
+ export interface Position {
13
+ x: number;
14
+ y: number;
15
+ z: number;
16
+ }
17
+ export interface OnlinePlayerResponse {
18
+ steamid: string;
19
+ crossplatformid: string;
20
+ entityid: number;
21
+ ip: string;
22
+ name: string;
23
+ online: boolean;
24
+ position: Position;
25
+ level: number;
26
+ health: number;
27
+ stamina: number;
28
+ zombiekills: number;
29
+ playerkills: number;
30
+ playerdeaths: number;
31
+ score: number;
32
+ totalplaytime: number;
33
+ lastonline: string;
34
+ ping: number;
35
+ }
36
+ export interface EntityLocation {
37
+ id: number;
38
+ name: string;
39
+ position: Position;
40
+ }
41
+ export interface LandClaimsResponse {
42
+ claimsize: number;
43
+ claimowners: Array<ClaimOwner>;
44
+ }
45
+ export interface ClaimOwner {
46
+ steamid: string;
47
+ claimactive: boolean;
48
+ playername: string;
49
+ claims: Array<Position>;
50
+ }
51
+ export interface CommandResponse {
52
+ command: string;
53
+ parameters: string;
54
+ result: string;
55
+ }
56
+ export interface AllowedCommands {
57
+ commands: Array<CommandEntry>;
58
+ }
59
+ export interface CommandEntry {
60
+ command: string;
61
+ description: string;
62
+ help: string;
63
+ }
64
+ export interface InventoryResponse {
65
+ playername: string;
66
+ userid: string;
67
+ crossplatformid: string;
68
+ bag: Array<InventoryItem>;
69
+ belt: Array<InventoryItem>;
70
+ equipment: PlayerEquipment;
71
+ }
72
+ export interface InventoryItem {
73
+ count: number;
74
+ name: string;
75
+ icon: string;
76
+ iconcolor: string;
77
+ quality: number;
78
+ }
79
+ export interface PlayerEquipment extends Record<string, InventoryItem> {
80
+ head: InventoryItem;
81
+ eyes: InventoryItem;
82
+ face: InventoryItem;
83
+ armor: InventoryItem;
84
+ jacket: InventoryItem;
85
+ shirt: InventoryItem;
86
+ legarmor: InventoryItem;
87
+ pants: InventoryItem;
88
+ boots: InventoryItem;
89
+ gloves: InventoryItem;
90
+ }
91
+ export interface PlayerListResponse {
92
+ total: number;
93
+ totalUnfiltered: number;
94
+ firstResult: number;
95
+ players: Array<PlayerNotOnline>;
96
+ }
97
+ export interface PlayerNotOnline {
98
+ steamid: string;
99
+ entityid: number;
100
+ ip: string;
101
+ name: string;
102
+ online: boolean;
103
+ position: Position;
104
+ totalplaytime: number;
105
+ lastonline: string;
106
+ ping: number;
107
+ banned: boolean;
108
+ }
109
+ export interface PlayerLocation {
110
+ steamid: string;
111
+ crossplatformid: string;
112
+ name: string;
113
+ online: boolean;
114
+ position: Position;
115
+ }
116
+ export interface GetServerInfo {
117
+ GameType: GetServerInfoEntry;
118
+ GameName: GetServerInfoEntry;
119
+ GameHost: GetServerInfoEntry;
120
+ ServerDescription: GetServerInfoEntry;
121
+ ServerWebsiteURL: GetServerInfoEntry;
122
+ LevelName: GetServerInfoEntry;
123
+ GameMode: GetServerInfoEntry;
124
+ Version: GetServerInfoEntry;
125
+ IP: GetServerInfoEntry;
126
+ CountryCode: GetServerInfoEntry;
127
+ SteamID: GetServerInfoEntry;
128
+ CompatibilityVersion: GetServerInfoEntry;
129
+ Platform: GetServerInfoEntry;
130
+ Port: GetServerInfoEntry;
131
+ CurrentPlayers: GetServerInfoEntry;
132
+ MaxPlayers: GetServerInfoEntry;
133
+ GameDifficulty: GetServerInfoEntry;
134
+ DayNightLength: GetServerInfoEntry;
135
+ ZombiesRun: GetServerInfoEntry;
136
+ DayCount: GetServerInfoEntry;
137
+ Ping: GetServerInfoEntry;
138
+ DropOnDeath: GetServerInfoEntry;
139
+ DropOnQuit: GetServerInfoEntry;
140
+ BloodMoonEnemyCount: GetServerInfoEntry;
141
+ EnemyDifficulty: GetServerInfoEntry;
142
+ PlayerKillingMode: GetServerInfoEntry;
143
+ CurrentServerTime: GetServerInfoEntry;
144
+ DayLightLength: GetServerInfoEntry;
145
+ BlockDurabilityModifier: GetServerInfoEntry;
146
+ AirDropFrequency: GetServerInfoEntry;
147
+ LootAbundance: GetServerInfoEntry;
148
+ LootRespawnDays: GetServerInfoEntry;
149
+ MaxSpawnedZombies: GetServerInfoEntry;
150
+ LandClaimSize: GetServerInfoEntry;
151
+ LandClaimDeadZone: GetServerInfoEntry;
152
+ LandClaimExpiryTime: GetServerInfoEntry;
153
+ LandClaimDecayMode: GetServerInfoEntry;
154
+ LandClaimOnlineDurabilityModifier: GetServerInfoEntry;
155
+ LandClaimOfflineDurabilityModifier: GetServerInfoEntry;
156
+ MaxSpawnedAnimals: GetServerInfoEntry;
157
+ IsDedicated: GetServerInfoEntry;
158
+ IsPasswordProtected: GetServerInfoEntry;
159
+ ShowFriendPlayerOnMap: GetServerInfoEntry;
160
+ BuildCreate: GetServerInfoEntry;
161
+ EACEnabled: GetServerInfoEntry;
162
+ Architecture64: GetServerInfoEntry;
163
+ StockSettings: GetServerInfoEntry;
164
+ StockFiles: GetServerInfoEntry;
165
+ RequiresMod: GetServerInfoEntry;
166
+ AirDropMarker: GetServerInfoEntry;
167
+ EnemySpawnMode: GetServerInfoEntry;
168
+ IsPublic: GetServerInfoEntry;
169
+ }
170
+ export interface GetServerInfoEntry {
171
+ type: string;
172
+ value: any;
173
+ }
174
+ export interface GetWebUIUpdatesResponse {
175
+ gametime: GameTime;
176
+ players: number;
177
+ hostiles: number;
178
+ animals: number;
179
+ newlogs: number;
180
+ }
181
+ export interface LogLine {
182
+ date: string;
183
+ time: string;
184
+ uptime: string;
185
+ msg: string;
186
+ trace: string;
187
+ type: string;
188
+ }
189
+ export interface GetLog {
190
+ firstLine: number;
191
+ lastLine: number;
192
+ entries: Array<LogLine>;
193
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=apiResponses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiResponses.js","sourceRoot":"","sources":["../../../src/gameservers/7d2d/apiResponses.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { TakaroDTO } from '@takaro/util';
2
+ export declare class SdtdConnectionInfo extends TakaroDTO<SdtdConnectionInfo> {
3
+ readonly host: string;
4
+ readonly adminUser: string;
5
+ readonly adminToken: string;
6
+ readonly useTls: boolean;
7
+ readonly useCPM: boolean;
8
+ }
9
+ export declare const sdtdJsonSchema: {
10
+ $schema: string;
11
+ title: string;
12
+ type: string;
13
+ properties: {
14
+ host: {
15
+ type: string;
16
+ };
17
+ adminUser: {
18
+ type: string;
19
+ };
20
+ adminToken: {
21
+ type: string;
22
+ };
23
+ useTls: {
24
+ type: string;
25
+ };
26
+ useCPM: {
27
+ type: string;
28
+ default: boolean;
29
+ };
30
+ };
31
+ required: string[];
32
+ };
@@ -0,0 +1,58 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { IsString, IsBoolean } from 'class-validator';
11
+ import { TakaroDTO } from '@takaro/util';
12
+ export class SdtdConnectionInfo extends TakaroDTO {
13
+ }
14
+ __decorate([
15
+ IsString(),
16
+ __metadata("design:type", String)
17
+ ], SdtdConnectionInfo.prototype, "host", void 0);
18
+ __decorate([
19
+ IsString(),
20
+ __metadata("design:type", String)
21
+ ], SdtdConnectionInfo.prototype, "adminUser", void 0);
22
+ __decorate([
23
+ IsString(),
24
+ __metadata("design:type", String)
25
+ ], SdtdConnectionInfo.prototype, "adminToken", void 0);
26
+ __decorate([
27
+ IsBoolean(),
28
+ __metadata("design:type", Boolean)
29
+ ], SdtdConnectionInfo.prototype, "useTls", void 0);
30
+ __decorate([
31
+ IsBoolean(),
32
+ __metadata("design:type", Boolean)
33
+ ], SdtdConnectionInfo.prototype, "useCPM", void 0);
34
+ export const sdtdJsonSchema = {
35
+ $schema: 'http://json-schema.org/draft-07/schema#',
36
+ title: 'SdtdConnectionInfo',
37
+ type: 'object',
38
+ properties: {
39
+ host: {
40
+ type: 'string',
41
+ },
42
+ adminUser: {
43
+ type: 'string',
44
+ },
45
+ adminToken: {
46
+ type: 'string',
47
+ },
48
+ useTls: {
49
+ type: 'boolean',
50
+ },
51
+ useCPM: {
52
+ type: 'boolean',
53
+ default: false,
54
+ },
55
+ },
56
+ required: ['host', 'adminUser', 'adminToken', 'useTls'],
57
+ };
58
+ //# sourceMappingURL=connectionInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionInfo.js","sourceRoot":"","sources":["../../../src/gameservers/7d2d/connectionInfo.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,OAAO,kBAAmB,SAAQ,SAA6B;CAWpE;AATiB;IADf,QAAQ,EAAE;;gDACmB;AAEd;IADf,QAAQ,EAAE;;qDACwB;AAEnB;IADf,QAAQ,EAAE;;sDACyB;AAEpB;IADf,SAAS,EAAE;;kDACqB;AAEjB;IADf,SAAS,EAAE;;kDACqB;AAGnC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;SACf;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;SACf;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;SACf;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;SAChB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC;CACxD,CAAC"}
@@ -0,0 +1,30 @@
1
+ /// <reference types="eventsource" resolution-mode="require"/>
2
+ import { JsonObject } from 'type-fest';
3
+ import { SdtdConnectionInfo } from './connectionInfo.js';
4
+ import { TakaroEmitter } from '../../TakaroEmitter.js';
5
+ interface I7DaysToDieEvent extends JsonObject {
6
+ msg: string;
7
+ }
8
+ export declare class SevenDaysToDieEmitter extends TakaroEmitter {
9
+ private config;
10
+ private SSERegex;
11
+ private eventSource;
12
+ private logger;
13
+ private sdtd;
14
+ private recentMessages;
15
+ private checkInterval;
16
+ private lastMessageTimestamp;
17
+ private keepAliveTimeout;
18
+ constructor(config: SdtdConnectionInfo);
19
+ get url(): string;
20
+ start(): Promise<void>;
21
+ stop(): Promise<void>;
22
+ parseMessage(logLine: I7DaysToDieEvent): Promise<void>;
23
+ private handlePlayerConnected;
24
+ private handlePlayerDisconnected;
25
+ private handleChatMessage;
26
+ private handlePlayerDeath;
27
+ private handleEntityKilled;
28
+ listener(data: MessageEvent): Promise<void>;
29
+ }
30
+ export {};