ngx-kel-agent 0.4.9 → 0.5.2

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.
@@ -0,0 +1,247 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./agent-message.service";
6
+ export class WsjtxService {
7
+ constructor(messages) {
8
+ this.messages = messages;
9
+ /** Whether we're getting any messages from WSJT-X. */
10
+ this.connected$ = new BehaviorSubject(false);
11
+ /** Subject for listening to WSJT-X "Heartbeat" messages. */
12
+ this.heartbeat$ = new ReplaySubject(1);
13
+ /** Subject for listening to WSJT-X "Status" messages. */
14
+ this.status$ = new ReplaySubject(1);
15
+ /** Subject for listening to WSJT-X "Decode" messages. */
16
+ this.decode$ = new Subject();
17
+ /** Subject for listening to WSJT-X "Clear" messages. */
18
+ this.clear$ = new Subject();
19
+ /** Subject for listening to WSJT-X "QsoLogged" messages. */
20
+ this.qsoLogged$ = new Subject();
21
+ /** Subject for listening to WSJT-X "Close" messages. */
22
+ this.close$ = new Subject();
23
+ /** Subject for listening to WSJT-X "WsprDecode" messages. */
24
+ this.wsprDecode$ = new Subject();
25
+ /** Subject for listening to WSJT-X "LoggedAdif" messages. */
26
+ this.loggedAdif$ = new Subject();
27
+ this.wsjtxId = 'WSJT-X';
28
+ this.setupBehaviors();
29
+ }
30
+ setupBehaviors() {
31
+ this.messages.rxMessage$.subscribe((msg) => this.handleMessage(msg));
32
+ // if we haven't heard from WSJT-X in 15 seconds, consider it "down"
33
+ this.connected$
34
+ .pipe(debounceTime(15000))
35
+ .subscribe(() => this.connected$.next(false));
36
+ // When WSJT-X announces it's closing, set it to "down" immediately
37
+ this.close$.subscribe(() => {
38
+ this.connected$.next(false);
39
+ });
40
+ // When WSJT-X goes down, clear its persistent message subjects
41
+ this.connected$.subscribe((isUp) => {
42
+ if (!isUp) {
43
+ this.heartbeat$.next(null);
44
+ this.status$.next(null);
45
+ }
46
+ });
47
+ }
48
+ handleMessage(msg) {
49
+ if (!msg.wsjtx) {
50
+ return;
51
+ }
52
+ this.connected$.next(true);
53
+ this.wsjtxId = msg.wsjtx.payload.id;
54
+ switch (msg.wsjtx.type) {
55
+ case 'HeartbeatMessage':
56
+ this.heartbeat$.next(msg.wsjtx.payload);
57
+ return;
58
+ case 'StatusMessage':
59
+ this.status$.next(msg.wsjtx.payload);
60
+ return;
61
+ case 'DecodeMessage':
62
+ this.decode$.next(msg.wsjtx.payload);
63
+ return;
64
+ case 'ClearMessage':
65
+ this.clear$.next(msg.wsjtx.payload);
66
+ return;
67
+ case 'QsoLoggedMessage':
68
+ this.qsoLogged$.next(msg.wsjtx.payload);
69
+ return;
70
+ case 'CloseMessage':
71
+ this.close$.next(msg.wsjtx.payload);
72
+ return;
73
+ case 'WSPRDecodeMessage':
74
+ this.wsprDecode$.next(msg.wsjtx.payload);
75
+ return;
76
+ case 'LoggedAdifMessage':
77
+ this.loggedAdif$.next(msg.wsjtx.payload);
78
+ return;
79
+ }
80
+ }
81
+ /** Send a command to WSJT-X to clear the Band Activity window. */
82
+ clearBandActivity() {
83
+ const wsMsg = {
84
+ wsjtx: {
85
+ type: 'ClearMessage',
86
+ payload: { id: this.wsjtxId, window: 0 },
87
+ },
88
+ };
89
+ this.messages.txMessage$.next(wsMsg);
90
+ }
91
+ /** Send a command to WSJT-X to clear the Rx Frequency window. */
92
+ clearRxFreqWindow() {
93
+ const wsMsg = {
94
+ wsjtx: {
95
+ type: 'ClearMessage',
96
+ payload: { id: this.wsjtxId, window: 1 },
97
+ },
98
+ };
99
+ this.messages.txMessage$.next(wsMsg);
100
+ }
101
+ /** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */
102
+ clearAll() {
103
+ const wsMsg = {
104
+ wsjtx: {
105
+ type: 'ClearMessage',
106
+ payload: { id: this.wsjtxId, window: 2 },
107
+ },
108
+ };
109
+ this.messages.txMessage$.next(wsMsg);
110
+ }
111
+ /** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear
112
+ * previous WSJT-X decodes. */
113
+ replay() {
114
+ const wsMsg = {
115
+ wsjtx: {
116
+ type: 'ReplayMessage',
117
+ payload: { id: this.wsjtxId },
118
+ },
119
+ };
120
+ this.messages.txMessage$.next(wsMsg);
121
+ }
122
+ /** Send a command to WSJT-X to halt any transmissions immediately. */
123
+ haltTxNow() {
124
+ const wsMsg = {
125
+ wsjtx: {
126
+ type: 'HaltTxMessage',
127
+ payload: { id: this.wsjtxId, autoTxOnly: false },
128
+ },
129
+ };
130
+ this.messages.txMessage$.next(wsMsg);
131
+ }
132
+ /** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */
133
+ haltTxAfterCurrent() {
134
+ const wsMsg = {
135
+ wsjtx: {
136
+ type: 'HaltTxMessage',
137
+ payload: { id: this.wsjtxId, autoTxOnly: true },
138
+ },
139
+ };
140
+ this.messages.txMessage$.next(wsMsg);
141
+ }
142
+ /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
143
+ reply(decode) {
144
+ const wsMsg = {
145
+ wsjtx: {
146
+ type: 'ReplyMessage',
147
+ payload: {
148
+ id: decode.id,
149
+ time: decode.time,
150
+ snr: decode.snr,
151
+ deltaTime: decode.deltaTime,
152
+ deltaFrequency: decode.deltaFrequency,
153
+ mode: decode.mode,
154
+ message: decode.message,
155
+ lowConfidence: decode.lowConfidence,
156
+ },
157
+ },
158
+ };
159
+ this.messages.txMessage$.next(wsMsg);
160
+ }
161
+ /** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
162
+ highlightCallsign(highlightMsg) {
163
+ highlightMsg.id = this.wsjtxId;
164
+ const wsMsg = {
165
+ wsjtx: {
166
+ type: 'HighlightCallsignMessage',
167
+ payload: highlightMsg,
168
+ },
169
+ };
170
+ this.messages.txMessage$.next(wsMsg);
171
+ }
172
+ /**
173
+ * Send a command to WSJT-X to transmit the given free text. If the text is too long to be
174
+ * encoded in a single message, it may be silently truncated. */
175
+ sendFreeText(freeText) {
176
+ freeText.id = this.wsjtxId;
177
+ const wsMsg = {
178
+ wsjtx: {
179
+ type: 'FreeTextMessage',
180
+ payload: freeText,
181
+ },
182
+ };
183
+ this.messages.txMessage$.next(wsMsg);
184
+ }
185
+ /** Send a command to WSJT-X to set the local station's Maidenhead grid. This is temporary,
186
+ * lasting only as long as WSJT-X is running. */
187
+ setLocation(grid) {
188
+ const wsMsg = {
189
+ wsjtx: {
190
+ type: 'LocationMessage',
191
+ payload: {
192
+ id: this.wsjtxId,
193
+ location: grid,
194
+ },
195
+ },
196
+ };
197
+ this.messages.txMessage$.next(wsMsg);
198
+ }
199
+ /** Send a command to WSJT-X to switch to the named configuration. */
200
+ switchConfiguration(configName) {
201
+ const wsMsg = {
202
+ wsjtx: {
203
+ type: 'SwitchConfigurationMessage',
204
+ payload: {
205
+ id: this.wsjtxId,
206
+ configurationName: configName,
207
+ },
208
+ },
209
+ };
210
+ this.messages.txMessage$.next(wsMsg);
211
+ }
212
+ /** Send a command to WSJT-X to set the given configuration parameters. */
213
+ configure(config) {
214
+ config.id = this.wsjtxId;
215
+ const wsMsg = {
216
+ wsjtx: {
217
+ type: 'ConfigureMessage',
218
+ payload: config,
219
+ },
220
+ };
221
+ this.messages.txMessage$.next(wsMsg);
222
+ }
223
+ /** Given a decode message, format a string the same way as displayed in the WSJT-X Band
224
+ * Activity/Rx Frequency windows. */
225
+ static formatDecode(msg) {
226
+ const secondsSinceMidnight = Math.floor(msg.time / 1000);
227
+ const hours = Math.floor(secondsSinceMidnight / 3600);
228
+ const secondsSinceHour = secondsSinceMidnight - hours * 3600;
229
+ const minutes = Math.floor(secondsSinceHour / 60);
230
+ const seconds = secondsSinceHour - minutes * 60;
231
+ const timeStr = `${hours.toString().padStart(2, '0')}${minutes
232
+ .toString()
233
+ .padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;
234
+ return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime
235
+ .toFixed(1)
236
+ .padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${msg.message}`;
237
+ }
238
+ }
239
+ WsjtxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, deps: [{ token: i1.AgentMessageService }], target: i0.ɵɵFactoryTarget.Injectable });
240
+ WsjtxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, providedIn: 'root' });
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, decorators: [{
242
+ type: Injectable,
243
+ args: [{
244
+ providedIn: 'root',
245
+ }]
246
+ }], ctorParameters: function () { return [{ type: i1.AgentMessageService }]; } });
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NqdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL2xpYi93c2p0eC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUIvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU05QyxNQUFNLE9BQU8sWUFBWTtJQXNCdkIsWUFBb0IsUUFBNkI7UUFBN0IsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFyQmpELHNEQUFzRDtRQUN0QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakUsNERBQTREO1FBQzVDLGVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBd0IsQ0FBQyxDQUFDLENBQUM7UUFDekUseURBQXlEO1FBQ3pDLFlBQU8sR0FBRyxJQUFJLGFBQWEsQ0FBcUIsQ0FBQyxDQUFDLENBQUM7UUFDbkUseURBQXlEO1FBQ3pDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3JELHdEQUF3RDtRQUN4QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNuRCw0REFBNEQ7UUFDNUMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQzNELHdEQUF3RDtRQUN4QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNuRCw2REFBNkQ7UUFDN0MsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUM3RCw2REFBNkQ7UUFDN0MsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUVyRCxZQUFPLEdBQVcsUUFBUSxDQUFDO1FBR2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FB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R0FBRyxDQUFDLEVBQUUsQ0FBQztRQUU1RCxPQUFPLEdBQUcsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTO2FBQ2pFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDVixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQ3pELEdBQUcsQ0FBQyxPQUNOLEVBQUUsQ0FBQztJQUNMLENBQUM7O3lHQTFQVSxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNOzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBXc2p0eENsZWFyLFxuICBXc2p0eENsb3NlLFxuICBXc2p0eENvbmZpZ3VyZSxcbiAgV3NqdHhEZWNvZGUsXG4gIFdzanR4RnJlZVRleHQsXG4gIFdzanR4SGFsdFR4LFxuICBXc2p0eEhlYXJ0YmVhdCxcbiAgV3NqdHhIaWdobGlnaHRDYWxsc2lnbixcbiAgV3NqdHhMb2NhdGlvbixcbiAgV3NqdHhMb2dnZWRBZGlmLFxuICBXc2p0eFFzb0xvZ2dlZCxcbiAgV3NqdHhSZXBsYXksXG4gIFdzanR4UmVwbHksXG4gIFdzanR4U3RhdHVzLFxuICBXc2p0eFN3aXRjaENvbmZpZ3VyYXRpb24sXG4gIFdzanR4V3NwckRlY29kZSxcbn0gZnJvbSAnLi93c2p0eC1tZXNzYWdlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZ2VudE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV3NqdHhTZXJ2aWNlIHtcbiAgLyoqIFdoZXRoZXIgd2UncmUgZ2V0dGluZyBhbnkgbWVzc2FnZXMgZnJvbSBXU0pULVguICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiSGVhcnRiZWF0XCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBoZWFydGJlYXQkID0gbmV3IFJlcGxheVN1YmplY3Q8V3NqdHhIZWFydGJlYXQgfCBudWxsPigxKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJTdGF0dXNcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyQgPSBuZXcgUmVwbGF5U3ViamVjdDxXc2p0eFN0YXR1cyB8IG51bGw+KDEpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkRlY29kZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVjb2RlJCA9IG5ldyBTdWJqZWN0PFdzanR4RGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsZWFyXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxXc2p0eENsZWFyPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIlFzb0xvZ2dlZFwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcXNvTG9nZ2VkJCA9IG5ldyBTdWJqZWN0PFdzanR4UXNvTG9nZ2VkPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsb3NlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBjbG9zZSQgPSBuZXcgU3ViamVjdDxXc2p0eENsb3NlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIldzcHJEZWNvZGVcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzcHJEZWNvZGUkID0gbmV3IFN1YmplY3Q8V3NqdHhXc3ByRGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkxvZ2dlZEFkaWZcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEFkaWYkID0gbmV3IFN1YmplY3Q8V3NqdHhMb2dnZWRBZGlmPigpO1xuXG4gIHByaXZhdGUgd3NqdHhJZDogc3RyaW5nID0gJ1dTSlQtWCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtZXNzYWdlczogQWdlbnRNZXNzYWdlU2VydmljZSkge1xuICAgIHRoaXMuc2V0dXBCZWhhdmlvcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBCZWhhdmlvcnMoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlcy5yeE1lc3NhZ2UkLnN1YnNjcmliZSgobXNnKSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobXNnKSk7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBoZWFyZCBmcm9tIFdTSlQtWCBpbiAxNSBzZWNvbmRzLCBjb25zaWRlciBpdCBcImRvd25cIlxuICAgIHRoaXMuY29ubmVjdGVkJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MDAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpKTtcbiAgICAvLyBXaGVuIFdTSlQtWCBhbm5vdW5jZXMgaXQncyBjbG9zaW5nLCBzZXQgaXQgdG8gXCJkb3duXCIgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmNsb3NlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xuICAgIH0pO1xuICAgIC8vIFdoZW4gV1NKVC1YIGdvZXMgZG93biwgY2xlYXIgaXRzIHBlcnNpc3RlbnQgbWVzc2FnZSBzdWJqZWN0c1xuICAgIHRoaXMuY29ubmVjdGVkJC5zdWJzY3JpYmUoKGlzVXApID0+IHtcbiAgICAgIGlmICghaXNVcCkge1xuICAgICAgICB0aGlzLmhlYXJ0YmVhdCQubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5zdGF0dXMkLm5leHQobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1lc3NhZ2UobXNnOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW1zZy53c2p0eCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLndzanR4SWQgPSBtc2cud3NqdHgucGF5bG9hZC5pZDtcbiAgICBzd2l0Y2ggKG1zZy53c2p0eC50eXBlKSB7XG4gICAgICBjYXNlICdIZWFydGJlYXRNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5oZWFydGJlYXQkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhIZWFydGJlYXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdTdGF0dXNNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5zdGF0dXMkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhTdGF0dXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdEZWNvZGVNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5kZWNvZGUkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhEZWNvZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdDbGVhck1lc3NhZ2UnOlxuICAgICAgICB0aGlzLmNsZWFyJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4Q2xlYXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdRc29Mb2dnZWRNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5xc29Mb2dnZWQkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhRc29Mb2dnZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdDbG9zZU1lc3NhZ2UnOlxuICAgICAgICB0aGlzLmNsb3NlJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4Q2xvc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdXU1BSRGVjb2RlTWVzc2FnZSc6XG4gICAgICAgIHRoaXMud3NwckRlY29kZSQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eFdzcHJEZWNvZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdMb2dnZWRBZGlmTWVzc2FnZSc6XG4gICAgICAgIHRoaXMubG9nZ2VkQWRpZiQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eExvZ2dlZEFkaWYpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBjbGVhciB0aGUgQmFuZCBBY3Rpdml0eSB3aW5kb3cuICovXG4gIHB1YmxpYyBjbGVhckJhbmRBY3Rpdml0eSgpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDbGVhck1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhDbGVhcj57IGlkOiB0aGlzLndzanR4SWQsIHdpbmRvdzogMCB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIFJ4IEZyZXF1ZW5jeSB3aW5kb3cuICovXG4gIHB1YmxpYyBjbGVhclJ4RnJlcVdpbmRvdygpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDbGVhck1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhDbGVhcj57IGlkOiB0aGlzLndzanR4SWQsIHdpbmRvdzogMSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIEJhbmQgQWN0aXZpdHkgYW5kIFJ4IEZyZXF1ZW5jeSB3aW5kb3dzLiAqL1xuICBwdWJsaWMgY2xlYXJBbGwoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+eyBpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDIgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHJlcGxheSBtZXNzYWdlcy4gVXNlZnVsIGZvciBhIGZyZXNoIGNsaWVudCB0aGF0IHdhbnRzIHRvIGhlYXJcbiAgICogcHJldmlvdXMgV1NKVC1YIGRlY29kZXMuICovXG4gIHB1YmxpYyByZXBsYXkoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnUmVwbGF5TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eFJlcGxheT57IGlkOiB0aGlzLndzanR4SWQgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGhhbHQgYW55IHRyYW5zbWlzc2lvbnMgaW1tZWRpYXRlbHkuICovXG4gIHB1YmxpYyBoYWx0VHhOb3coKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnSGFsdFR4TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eEhhbHRUeD57IGlkOiB0aGlzLndzanR4SWQsIGF1dG9UeE9ubHk6IGZhbHNlIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBzdG9wIGF1dG8tdHJhbnNtaXR0aW5nIGFmdGVyIGZpbmlzaGluZyB0aGUgY3VycmVudCByb3VuZC4gKi9cbiAgcHVibGljIGhhbHRUeEFmdGVyQ3VycmVudCgpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIYWx0VHhNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4SGFsdFR4PnsgaWQ6IHRoaXMud3NqdHhJZCwgYXV0b1R4T25seTogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gcmVwbHkgdG8gdGhlIGdpdmVuIGRlY29kZS4gVGhlIG1lc3NhZ2UgbXVzdCBpbmNsdWRlIENRIG9yIFFSWi4gKi9cbiAgcHVibGljIHJlcGx5KGRlY29kZTogV3NqdHhEZWNvZGUpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdSZXBseU1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhSZXBseT57XG4gICAgICAgICAgaWQ6IGRlY29kZS5pZCxcbiAgICAgICAgICB0aW1lOiBkZWNvZGUudGltZSxcbiAgICAgICAgICBzbnI6IGRlY29kZS5zbnIsXG4gICAgICAgICAgZGVsdGFUaW1lOiBkZWNvZGUuZGVsdGFUaW1lLFxuICAgICAgICAgIGRlbHRhRnJlcXVlbmN5OiBkZWNvZGUuZGVsdGFGcmVxdWVuY3ksXG4gICAgICAgICAgbW9kZTogZGVjb2RlLm1vZGUsXG4gICAgICAgICAgbWVzc2FnZTogZGVjb2RlLm1lc3NhZ2UsXG4gICAgICAgICAgbG93Q29uZmlkZW5jZTogZGVjb2RlLmxvd0NvbmZpZGVuY2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byByZXBseSB0byB0aGUgZ2l2ZW4gZGVjb2RlLiBUaGUgbWVzc2FnZSBtdXN0IGluY2x1ZGUgQ1Egb3IgUVJaLiAqL1xuICBwdWJsaWMgaGlnaGxpZ2h0Q2FsbHNpZ24oaGlnaGxpZ2h0TXNnOiBXc2p0eEhpZ2hsaWdodENhbGxzaWduKSB7XG4gICAgaGlnaGxpZ2h0TXNnLmlkID0gdGhpcy53c2p0eElkO1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0hpZ2hsaWdodENhbGxzaWduTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IGhpZ2hsaWdodE1zZyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHRyYW5zbWl0IHRoZSBnaXZlbiBmcmVlIHRleHQuIElmIHRoZSB0ZXh0IGlzIHRvbyBsb25nIHRvIGJlXG4gICAqIGVuY29kZWQgaW4gYSBzaW5nbGUgbWVzc2FnZSwgaXQgbWF5IGJlIHNpbGVudGx5IHRydW5jYXRlZC4gKi9cbiAgcHVibGljIHNlbmRGcmVlVGV4dChmcmVlVGV4dDogV3NqdHhGcmVlVGV4dCkge1xuICAgIGZyZWVUZXh0LmlkID0gdGhpcy53c2p0eElkO1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0ZyZWVUZXh0TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IGZyZWVUZXh0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc2V0IHRoZSBsb2NhbCBzdGF0aW9uJ3MgTWFpZGVuaGVhZCBncmlkLiBUaGlzIGlzIHRlbXBvcmFyeSxcbiAgICogbGFzdGluZyBvbmx5IGFzIGxvbmcgYXMgV1NKVC1YIGlzIHJ1bm5pbmcuICovXG4gIHB1YmxpYyBzZXRMb2NhdGlvbihncmlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdMb2NhdGlvbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhMb2NhdGlvbj57XG4gICAgICAgICAgaWQ6IHRoaXMud3NqdHhJZCxcbiAgICAgICAgICBsb2NhdGlvbjogZ3JpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHN3aXRjaCB0byB0aGUgbmFtZWQgY29uZmlndXJhdGlvbi4gKi9cbiAgcHVibGljIHN3aXRjaENvbmZpZ3VyYXRpb24oY29uZmlnTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnU3dpdGNoQ29uZmlndXJhdGlvbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhTd2l0Y2hDb25maWd1cmF0aW9uPntcbiAgICAgICAgICBpZDogdGhpcy53c2p0eElkLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25OYW1lOiBjb25maWdOYW1lLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc2V0IHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuICovXG4gIHB1YmxpYyBjb25maWd1cmUoY29uZmlnOiBXc2p0eENvbmZpZ3VyZSkge1xuICAgIGNvbmZpZy5pZCA9IHRoaXMud3NqdHhJZDtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDb25maWd1cmVNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogY29uZmlnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBHaXZlbiBhIGRlY29kZSBtZXNzYWdlLCBmb3JtYXQgYSBzdHJpbmcgdGhlIHNhbWUgd2F5IGFzIGRpc3BsYXllZCBpbiB0aGUgV1NKVC1YIEJhbmRcbiAgICogQWN0aXZpdHkvUnggRnJlcXVlbmN5IHdpbmRvd3MuICovXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGVjb2RlKG1zZzogV3NqdHhEZWNvZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlY29uZHNTaW5jZU1pZG5pZ2h0ID0gTWF0aC5mbG9vcihtc2cudGltZSAvIDEwMDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzU2luY2VNaWRuaWdodCAvIDM2MDApO1xuICAgIGNvbnN0IHNlY29uZHNTaW5jZUhvdXIgPSBzZWNvbmRzU2luY2VNaWRuaWdodCAtIGhvdXJzICogMzYwMDtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzU2luY2VIb3VyIC8gNjApO1xuICAgIGNvbnN0IHNlY29uZHMgPSBzZWNvbmRzU2luY2VIb3VyIC0gbWludXRlcyAqIDYwO1xuICAgIGNvbnN0IHRpbWVTdHIgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9JHttaW51dGVzXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9JHtzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgcmV0dXJuIGAke3RpbWVTdHJ9ICR7bXNnLnNuci50b1N0cmluZygpLnBhZFN0YXJ0KDMpfSAke21zZy5kZWx0YVRpbWVcbiAgICAgIC50b0ZpeGVkKDEpXG4gICAgICAucGFkU3RhcnQoNCl9ICR7bXNnLmRlbHRhRnJlcXVlbmN5LnRvU3RyaW5nKCkucGFkU3RhcnQoNCl9IH4gICR7XG4gICAgICBtc2cubWVzc2FnZVxuICAgIH1gO1xuICB9XG59XG4iXX0=
@@ -2,5 +2,11 @@
2
2
  * Public API Surface of ngx-kel-agent
3
3
  */
4
4
  export * from './lib/agent.service';
5
- export * from './lib/messages';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1rZWwtYWdlbnRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hZ2VudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc3NhZ2VzJztcbiJdfQ==
5
+ export * from './lib/agent-message.service';
6
+ export * from './lib/hamlib-messages';
7
+ export * from './lib/hamlib.service';
8
+ export * from './lib/wsjtx-messages';
9
+ export * from './lib/wsjtx.service';
10
+ // export * from './lib/ngx-kel-agent.component';
11
+ // export * from './lib/ngx-kel-agent.module';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxpREFBaUQ7QUFDakQsOENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gta2VsLWFnZW50XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWdlbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGFtbGliLW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hhbWxpYi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5tb2R1bGUnO1xuIl19