@tx5dr/plugin-api 1.0.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 (41) hide show
  1. package/dist/__tests__/ft8-message-type.test.d.ts +2 -0
  2. package/dist/__tests__/ft8-message-type.test.d.ts.map +1 -0
  3. package/dist/__tests__/ft8-message-type.test.js +9 -0
  4. package/dist/__tests__/ft8-message-type.test.js.map +1 -0
  5. package/dist/__tests__/testing-utils.test.d.ts +2 -0
  6. package/dist/__tests__/testing-utils.test.d.ts.map +1 -0
  7. package/dist/__tests__/testing-utils.test.js +151 -0
  8. package/dist/__tests__/testing-utils.test.js.map +1 -0
  9. package/dist/context.d.ts +82 -0
  10. package/dist/context.d.ts.map +1 -0
  11. package/dist/context.js +2 -0
  12. package/dist/context.js.map +1 -0
  13. package/dist/definition.d.ts +181 -0
  14. package/dist/definition.d.ts.map +1 -0
  15. package/dist/definition.js +2 -0
  16. package/dist/definition.js.map +1 -0
  17. package/dist/ft8-message-type.d.ts +21 -0
  18. package/dist/ft8-message-type.d.ts.map +1 -0
  19. package/dist/ft8-message-type.js +21 -0
  20. package/dist/ft8-message-type.js.map +1 -0
  21. package/dist/helpers.d.ts +223 -0
  22. package/dist/helpers.d.ts.map +1 -0
  23. package/dist/helpers.js +2 -0
  24. package/dist/helpers.js.map +1 -0
  25. package/dist/hooks.d.ts +204 -0
  26. package/dist/hooks.d.ts.map +1 -0
  27. package/dist/hooks.js +2 -0
  28. package/dist/hooks.js.map +1 -0
  29. package/dist/index.d.ts +33 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +24 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/runtime.d.ts +116 -0
  34. package/dist/runtime.d.ts.map +1 -0
  35. package/dist/runtime.js +2 -0
  36. package/dist/runtime.js.map +1 -0
  37. package/dist/testing/index.d.ts +83 -0
  38. package/dist/testing/index.d.ts.map +1 -0
  39. package/dist/testing/index.js +190 -0
  40. package/dist/testing/index.js.map +1 -0
  41. package/package.json +48 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Test utilities for `@tx5dr/plugin-api`.
3
+ *
4
+ * Zero external dependencies — pure TypeScript mock implementations of all
5
+ * plugin-api interfaces. Use in plugin unit tests without pulling in the full
6
+ * TX-5DR server environment.
7
+ *
8
+ * ```ts
9
+ * import { createMockContext, createMockSlotInfo } from '@tx5dr/plugin-api/testing';
10
+ * ```
11
+ */
12
+ import type { KVStore, PluginLogger, PluginTimers, OperatorControl, RadioControl, LogbookAccess, BandAccess, UIBridge } from '../helpers.js';
13
+ import type { PluginContext } from '../context.js';
14
+ import type { SlotInfo, ParsedFT8Message, ModeDescriptor } from '@tx5dr/contracts';
15
+ /** KVStore backed by an in-memory Map. Inspect `_data` in assertions. */
16
+ export interface MockKVStore extends KVStore {
17
+ readonly _data: Map<string, unknown>;
18
+ }
19
+ /** Logger that records every call. Inspect `_calls` in assertions. */
20
+ export interface MockLogger extends PluginLogger {
21
+ readonly _calls: Array<{
22
+ level: string;
23
+ message: string;
24
+ data?: unknown;
25
+ }>;
26
+ }
27
+ /** Timer manager backed by a Map. Inspect `_active` for registered timers. */
28
+ export interface MockTimers extends PluginTimers {
29
+ readonly _active: Map<string, number>;
30
+ }
31
+ /** UIBridge that captures sent data. Inspect `_sentData` in assertions. */
32
+ export interface MockUIBridge extends UIBridge {
33
+ readonly _sentData: Map<string, unknown[]>;
34
+ }
35
+ /** Full mock context with typed access to all sub-mocks. */
36
+ export interface MockPluginContext extends PluginContext {
37
+ readonly store: {
38
+ readonly global: MockKVStore;
39
+ readonly operator: MockKVStore;
40
+ };
41
+ readonly log: MockLogger;
42
+ readonly timers: MockTimers;
43
+ readonly ui: MockUIBridge;
44
+ }
45
+ export declare function createMockKVStore(initial?: Record<string, unknown>): MockKVStore;
46
+ export declare function createMockLogger(): MockLogger;
47
+ export declare function createMockTimers(): MockTimers;
48
+ export declare function createMockOperatorControl(overrides?: Partial<OperatorControl>): OperatorControl;
49
+ export declare function createMockRadioControl(overrides?: Partial<RadioControl>): RadioControl;
50
+ export declare function createMockLogbookAccess(overrides?: Partial<LogbookAccess>): LogbookAccess;
51
+ export declare function createMockBandAccess(overrides?: Partial<BandAccess>): BandAccess;
52
+ export declare function createMockUIBridge(): MockUIBridge;
53
+ export interface MockPluginContextOptions {
54
+ /** Initial config values (default: empty). */
55
+ config?: Record<string, unknown>;
56
+ /** Operator identifier (default: `'operator-0'`). */
57
+ operatorId?: string;
58
+ /** Station callsign (default: `'W1AW'`). */
59
+ callsign?: string;
60
+ /** Station grid (default: `'FN31'`). */
61
+ grid?: string;
62
+ /** Audio offset frequency in Hz (default: `1500`). */
63
+ frequency?: number;
64
+ /** Partial mode descriptor overrides. */
65
+ mode?: Partial<ModeDescriptor>;
66
+ /** Additional operator control overrides. */
67
+ operator?: Partial<OperatorControl>;
68
+ /** Radio control overrides. */
69
+ radio?: Partial<RadioControl>;
70
+ /** Logbook access overrides. */
71
+ logbook?: Partial<LogbookAccess>;
72
+ /** Band access overrides. */
73
+ band?: Partial<BandAccess>;
74
+ /** Pre-constructed stores (uses fresh empty stores when omitted). */
75
+ store?: {
76
+ global?: MockKVStore;
77
+ operator?: MockKVStore;
78
+ };
79
+ }
80
+ export declare function createMockContext(options?: MockPluginContextOptions): MockPluginContext;
81
+ export declare function createMockSlotInfo(overrides?: Partial<SlotInfo>): SlotInfo;
82
+ export declare function createMockParsedMessage(overrides?: Partial<ParsedFT8Message>): ParsedFT8Message;
83
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ import { FT8MessageType } from '../ft8-message-type.js';
2
+ // ===== Factory: KVStore =====
3
+ export function createMockKVStore(initial) {
4
+ const data = new Map(initial ? Object.entries(initial) : []);
5
+ return {
6
+ _data: data,
7
+ get(key, defaultValue) {
8
+ return (data.has(key) ? data.get(key) : defaultValue);
9
+ },
10
+ set(key, value) {
11
+ data.set(key, value);
12
+ },
13
+ delete(key) {
14
+ data.delete(key);
15
+ },
16
+ getAll() {
17
+ return Object.fromEntries(data);
18
+ },
19
+ };
20
+ }
21
+ // ===== Factory: Logger =====
22
+ export function createMockLogger() {
23
+ const calls = [];
24
+ return {
25
+ _calls: calls,
26
+ debug(message, data) {
27
+ calls.push({ level: 'debug', message, data });
28
+ },
29
+ info(message, data) {
30
+ calls.push({ level: 'info', message, data });
31
+ },
32
+ warn(message, data) {
33
+ calls.push({ level: 'warn', message, data });
34
+ },
35
+ error(message, error) {
36
+ calls.push({ level: 'error', message, data: error });
37
+ },
38
+ };
39
+ }
40
+ // ===== Factory: Timers =====
41
+ export function createMockTimers() {
42
+ const active = new Map();
43
+ return {
44
+ _active: active,
45
+ set(id, intervalMs) {
46
+ active.set(id, intervalMs);
47
+ },
48
+ clear(id) {
49
+ active.delete(id);
50
+ },
51
+ clearAll() {
52
+ active.clear();
53
+ },
54
+ };
55
+ }
56
+ // ===== Factory: OperatorControl =====
57
+ const DEFAULT_MODE = {
58
+ name: 'FT8',
59
+ slotMs: 15000,
60
+ toleranceMs: 100,
61
+ windowTiming: [12000],
62
+ transmitTiming: 1180,
63
+ encodeAdvance: 400,
64
+ };
65
+ export function createMockOperatorControl(overrides) {
66
+ return {
67
+ id: 'operator-0',
68
+ isTransmitting: false,
69
+ callsign: 'W1AW',
70
+ grid: 'FN31',
71
+ frequency: 1500,
72
+ mode: DEFAULT_MODE,
73
+ transmitCycles: [0],
74
+ automation: null,
75
+ startTransmitting() { },
76
+ stopTransmitting() { },
77
+ call() { },
78
+ setTransmitCycles() { },
79
+ hasWorkedCallsign: async () => false,
80
+ isTargetBeingWorkedByOthers: () => false,
81
+ recordQSO() { },
82
+ notifySlotsUpdated() { },
83
+ notifyStateChanged() { },
84
+ ...overrides,
85
+ };
86
+ }
87
+ // ===== Factory: RadioControl =====
88
+ export function createMockRadioControl(overrides) {
89
+ return {
90
+ frequency: 14074000,
91
+ band: '20m',
92
+ isConnected: true,
93
+ setFrequency: async () => { },
94
+ ...overrides,
95
+ };
96
+ }
97
+ // ===== Factory: LogbookAccess =====
98
+ export function createMockLogbookAccess(overrides) {
99
+ return {
100
+ hasWorked: async () => false,
101
+ hasWorkedDXCC: async () => false,
102
+ hasWorkedGrid: async () => false,
103
+ ...overrides,
104
+ };
105
+ }
106
+ // ===== Factory: BandAccess =====
107
+ export function createMockBandAccess(overrides) {
108
+ return {
109
+ getActiveCallers: () => [],
110
+ getLatestSlotPack: () => null,
111
+ findIdleTransmitFrequency: () => null,
112
+ evaluateAutoTargetEligibility: () => ({ eligible: true, reason: 'plain_cq' }),
113
+ ...overrides,
114
+ };
115
+ }
116
+ // ===== Factory: UIBridge =====
117
+ export function createMockUIBridge() {
118
+ const sentData = new Map();
119
+ return {
120
+ _sentData: sentData,
121
+ send(panelId, data) {
122
+ const existing = sentData.get(panelId) ?? [];
123
+ existing.push(data);
124
+ sentData.set(panelId, existing);
125
+ },
126
+ };
127
+ }
128
+ export function createMockContext(options) {
129
+ const opts = options ?? {};
130
+ const log = createMockLogger();
131
+ const timers = createMockTimers();
132
+ const ui = createMockUIBridge();
133
+ const globalStore = opts.store?.global ?? createMockKVStore();
134
+ const operatorStore = opts.store?.operator ?? createMockKVStore();
135
+ const mode = opts.mode
136
+ ? { ...DEFAULT_MODE, ...opts.mode }
137
+ : DEFAULT_MODE;
138
+ const operator = createMockOperatorControl({
139
+ id: opts.operatorId ?? 'operator-0',
140
+ callsign: opts.callsign ?? 'W1AW',
141
+ grid: opts.grid ?? 'FN31',
142
+ frequency: opts.frequency ?? 1500,
143
+ mode,
144
+ ...opts.operator,
145
+ });
146
+ const radio = createMockRadioControl(opts.radio);
147
+ const logbook = createMockLogbookAccess(opts.logbook);
148
+ const band = createMockBandAccess(opts.band);
149
+ return {
150
+ config: opts.config ?? {},
151
+ store: { global: globalStore, operator: operatorStore },
152
+ log,
153
+ timers,
154
+ operator,
155
+ radio,
156
+ logbook,
157
+ band,
158
+ ui,
159
+ };
160
+ }
161
+ // ===== Data factories =====
162
+ export function createMockSlotInfo(overrides) {
163
+ return {
164
+ id: 'slot-0',
165
+ startMs: 0,
166
+ phaseMs: 0,
167
+ driftMs: 0,
168
+ cycleNumber: 0,
169
+ utcSeconds: 0,
170
+ mode: 'FT8',
171
+ ...overrides,
172
+ };
173
+ }
174
+ export function createMockParsedMessage(overrides) {
175
+ return {
176
+ snr: -10,
177
+ dt: 0.1,
178
+ df: 1500,
179
+ rawMessage: 'CQ TEST W1AW FN31',
180
+ message: {
181
+ type: FT8MessageType.CQ,
182
+ senderCallsign: 'W1AW',
183
+ grid: 'FN31',
184
+ },
185
+ slotId: 'slot-0',
186
+ timestamp: 0,
187
+ ...overrides,
188
+ };
189
+ }
190
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@tx5dr/plugin-api",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Public plugin API for TX-5DR digital radio engine",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/boybook/tx-5dr.git",
10
+ "directory": "packages/plugin-api"
11
+ },
12
+ "keywords": [
13
+ "tx5dr",
14
+ "plugin",
15
+ "ham-radio",
16
+ "ft8",
17
+ "digital-radio"
18
+ ],
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "main": "dist/index.js",
23
+ "types": "dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "import": "./dist/index.js",
27
+ "require": "./dist/index.js",
28
+ "types": "./dist/index.d.ts"
29
+ },
30
+ "./testing": {
31
+ "import": "./dist/testing/index.js",
32
+ "require": "./dist/testing/index.js",
33
+ "types": "./dist/testing/index.d.ts"
34
+ }
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "lint": "eslint src/**/*.ts",
40
+ "test": "vitest run --passWithNoTests"
41
+ },
42
+ "devDependencies": {
43
+ "@tx5dr/contracts": "workspace:*",
44
+ "@tx5dr/shared-config": "workspace:*",
45
+ "typescript": "^5.0.0",
46
+ "vitest": "^1.0.0"
47
+ }
48
+ }