@tx5dr/plugin-api 1.1.0 → 1.2.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/README.md ADDED
@@ -0,0 +1,135 @@
1
+ # @tx5dr/plugin-api
2
+
3
+ Public plugin API for the [TX-5DR](https://github.com/boybook/tx-5dr) digital radio engine.
4
+
5
+ Plugin authors should import from this package instead of reaching into internal monorepo packages. It provides TypeScript types for plugin definitions, runtime helpers, logbook sync providers, and the iframe Bridge SDK.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install --save-dev @tx5dr/plugin-api
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ### TypeScript
16
+
17
+ ```typescript
18
+ import type { PluginDefinition, PluginContext } from '@tx5dr/plugin-api';
19
+
20
+ const plugin: PluginDefinition = {
21
+ name: 'my-plugin',
22
+ version: '1.0.0',
23
+ type: 'utility',
24
+ hooks: {
25
+ onDecode(messages, ctx) {
26
+ for (const msg of messages) {
27
+ ctx.log.debug('Decoded', { raw: msg.rawMessage });
28
+ }
29
+ },
30
+ },
31
+ };
32
+
33
+ export default plugin;
34
+ ```
35
+
36
+ ### JavaScript (with JSDoc types)
37
+
38
+ ```javascript
39
+ /** @type {import('@tx5dr/plugin-api').PluginDefinition} */
40
+ export default {
41
+ name: 'my-plugin',
42
+ version: '1.0.0',
43
+ type: 'utility',
44
+ hooks: {
45
+ onDecode(messages, ctx) {
46
+ for (const msg of messages) {
47
+ ctx.log.debug('Decoded', { raw: msg.rawMessage });
48
+ }
49
+ },
50
+ },
51
+ };
52
+ ```
53
+
54
+ ## Exports
55
+
56
+ | Subpath | Description |
57
+ |---------|-------------|
58
+ | `@tx5dr/plugin-api` | Core types: `PluginDefinition`, `PluginContext`, `PluginHooks`, helper interfaces, radio/message types |
59
+ | `@tx5dr/plugin-api/testing` | Mock factories for unit testing: `createMockContext()`, `createMockSlotInfo()`, `createMockParsedMessage()` |
60
+ | `@tx5dr/plugin-api/bridge` | Ambient type declarations for the iframe Bridge SDK (`window.tx5dr`) |
61
+
62
+ ## Bridge SDK Types
63
+
64
+ Plugin iframe pages communicate with the host via the Bridge SDK (`window.tx5dr`), which is automatically injected by the host. To get IDE autocomplete for the Bridge SDK, add the type reference to your project:
65
+
66
+ **tsconfig.json / jsconfig.json:**
67
+
68
+ ```json
69
+ {
70
+ "compilerOptions": {
71
+ "types": ["@tx5dr/plugin-api/bridge"]
72
+ }
73
+ }
74
+ ```
75
+
76
+ **Or per-file:**
77
+
78
+ ```javascript
79
+ /// <reference types="@tx5dr/plugin-api/bridge" />
80
+
81
+ tx5dr.invoke('getState').then(function(state) {
82
+ // Full autocomplete for tx5dr methods
83
+ });
84
+ ```
85
+
86
+ ## CSS Design Tokens
87
+
88
+ The host injects CSS custom properties (`--tx5dr-*`) into every iframe page. A reference copy is included in this package at `tokens.css` — copy it into your project for CSS autocomplete in your IDE:
89
+
90
+ ```bash
91
+ cp node_modules/@tx5dr/plugin-api/tokens.css ./ui/
92
+ ```
93
+
94
+ Then use the tokens in your plugin CSS:
95
+
96
+ ```css
97
+ .container {
98
+ background: var(--tx5dr-bg-content);
99
+ color: var(--tx5dr-text);
100
+ border-radius: var(--tx5dr-radius-md);
101
+ padding: var(--tx5dr-spacing-md);
102
+ font-family: var(--tx5dr-font);
103
+ }
104
+ ```
105
+
106
+ ## Testing
107
+
108
+ ```typescript
109
+ import { describe, it, expect } from 'vitest';
110
+ import {
111
+ createMockContext,
112
+ createMockSlotInfo,
113
+ createMockParsedMessage,
114
+ } from '@tx5dr/plugin-api/testing';
115
+ import plugin from './index.js';
116
+
117
+ describe('my-plugin', () => {
118
+ it('processes decoded messages', () => {
119
+ const ctx = createMockContext();
120
+ const messages = [createMockParsedMessage({ rawMessage: 'CQ W1AW FN31' })];
121
+
122
+ plugin.hooks!.onDecode!(messages, ctx);
123
+
124
+ expect(ctx.log._calls.some(c => c.level === 'debug')).toBe(true);
125
+ });
126
+ });
127
+ ```
128
+
129
+ ## Documentation
130
+
131
+ For the full plugin system guide, see [docs/plugin-system.md](https://github.com/boybook/tx-5dr/blob/main/docs/plugin-system.md).
132
+
133
+ ## License
134
+
135
+ MIT
package/dist/helpers.d.ts CHANGED
@@ -25,6 +25,14 @@ export interface KVStore {
25
25
  * Returns a shallow snapshot of all stored entries in this scope.
26
26
  */
27
27
  getAll(): Record<string, unknown>;
28
+ /**
29
+ * Flushes pending writes to persistent storage.
30
+ *
31
+ * In normal operation the host flushes automatically. Call this explicitly
32
+ * only when you need to guarantee that recently written data survives a
33
+ * crash or restart (e.g. during a migration sequence).
34
+ */
35
+ flush(): Promise<void>;
28
36
  }
29
37
  /**
30
38
  * Structured logger dedicated to a plugin instance.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -29,7 +29,16 @@ export type { KVStore, PluginLogger, PluginTimers, OperatorControl, RadioControl
29
29
  /** Common radio/message/settings types re-exported for plugin author convenience. */
30
30
  export type { FT8Message, FT8MessageBase, FT8MessageCQ, FT8MessageCall, FT8MessageSignalReport, FT8MessageRogerReport, FT8MessageRRR, FT8MessageSeventyThree, FT8MessageFoxRR73, FT8MessageCustom, FT8MessageUnknown, ParsedFT8Message, LogbookAnalysis, SlotInfo, SlotPack, QSORecord, FrameMessage, ModeDescriptor, OperatorSlots, DxccStatus, TargetSelectionPriorityMode, PluginType, PluginInstanceScope, PluginPermission, PluginSettingType, PluginSettingDescriptor, PluginSettingScope, PluginQuickAction, PluginQuickSetting, PluginCapability, PluginPanelDescriptor, PluginPanelComponent, PluginPanelWidth, PluginSettingOption, PluginStorageScope, PluginStorageConfig, PluginManifest, PluginStatus, PluginUIPageDescriptor, PluginUIConfig, } from '@tx5dr/contracts';
31
31
  /** Logbook sync provider interfaces. */
32
- export type { LogbookSyncProvider, LogbookSyncRegistrar, SyncAction, SyncTestResult, SyncUploadResult, SyncPreflightIssue, SyncUploadPreflightResult, SyncDownloadResult, SyncDownloadOptions, } from './sync.js';
32
+ export type { LogbookSyncProvider, LogbookSyncRegistrar, SyncAction, SyncTestResult, SyncUploadOptions, SyncUploadResult, SyncPreflightIssue, SyncUploadPreflightResult, SyncDownloadResult, SyncDownloadOptions, } from './sync.js';
33
33
  /** Stable runtime enum values commonly referenced by plugin implementations. */
34
34
  export { FT8MessageType } from './ft8-message-type.js';
35
+ /** Utility functions for plugin authors. */
36
+ export { normalizeCallsign } from './utils/callsign.js';
37
+ /** ADIF (Amateur Data Interchange Format) utilities. */
38
+ export { parseADIFContent, parseADIFRecord, parseADIFFields, convertQSOToADIF, generateADIFFile, formatADIFDate, formatADIFTime, parseADIFDateTime, } from './utils/adif.js';
39
+ /** Plugin page scope path utilities. */
40
+ export { getPluginPageScopePath, getPluginPageScopeSegments, } from './utils/page-scope.js';
41
+ export type { PluginPageBoundResource } from './utils/page-scope.js';
42
+ /** QSO text field utilities. */
43
+ export { parseLegacyComment, resolveQsoComment, buildCommentFromMessageHistory, normalizeMessageHistory, } from './utils/qso-text-fields.js';
35
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uDAAuD;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAEtB,+EAA+E;AAC/E,YAAY,EACV,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,qFAAqF;AACrF,YAAY,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,wCAAwC;AACxC,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uDAAuD;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAEtB,+EAA+E;AAC/E,YAAY,EACV,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,qFAAqF;AACrF,YAAY,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,2BAA2B,EAC3B,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,wCAAwC;AACxC,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,wCAAwC;AACxC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,gCAAgC;AAChC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -21,4 +21,12 @@
21
21
  */
22
22
  /** Stable runtime enum values commonly referenced by plugin implementations. */
23
23
  export { FT8MessageType } from './ft8-message-type.js';
24
+ /** Utility functions for plugin authors. */
25
+ export { normalizeCallsign } from './utils/callsign.js';
26
+ /** ADIF (Amateur Data Interchange Format) utilities. */
27
+ export { parseADIFContent, parseADIFRecord, parseADIFFields, convertQSOToADIF, generateADIFFile, formatADIFDate, formatADIFTime, parseADIFDateTime, } from './utils/adif.js';
28
+ /** Plugin page scope path utilities. */
29
+ export { getPluginPageScopePath, getPluginPageScopeSegments, } from './utils/page-scope.js';
30
+ /** QSO text field utilities. */
31
+ export { parseLegacyComment, resolveQsoComment, buildCommentFromMessageHistory, normalizeMessageHistory, } from './utils/qso-text-fields.js';
24
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAyGH,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA0GH,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,wCAAwC;AACxC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,gCAAgC;AAChC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,4BAA4B,CAAC"}
package/dist/sync.d.ts CHANGED
@@ -49,11 +49,15 @@ export interface LogbookSyncProvider {
49
49
  /**
50
50
  * Uploads QSO records to the external service.
51
51
  *
52
- * The provider queries the logbook via `ctx.logbook.queryQSOs()` internally
53
- * to determine which records to upload. It is also responsible for updating
54
- * QSL status fields (e.g. `lotwQslSent`) via `ctx.logbook.updateQSO()`.
52
+ * Manual uploads typically query the logbook via `ctx.logbook.queryQSOs()`
53
+ * internally to determine which records to upload. Auto-upload may pass a
54
+ * narrow `options.records` batch so providers can upload only the freshly
55
+ * completed QSOs without re-scanning the entire logbook.
56
+ *
57
+ * Providers remain responsible for updating any per-QSO sync fields
58
+ * (e.g. `lotwQslSent`) via `ctx.logbook.updateQSO()`.
55
59
  */
56
- upload(callsign: string): Promise<SyncUploadResult>;
60
+ upload(callsign: string, options?: SyncUploadOptions): Promise<SyncUploadResult>;
57
61
  /**
58
62
  * Optional host-visible upload readiness check.
59
63
  *
@@ -117,6 +121,17 @@ export interface SyncUploadResult {
117
121
  failed: number;
118
122
  errors?: string[];
119
123
  }
124
+ export interface SyncUploadOptions {
125
+ /** Distinguishes manual uploads from auto-upload triggered by QSO completion. */
126
+ trigger?: 'manual' | 'auto';
127
+ /**
128
+ * Optional explicit QSO batch supplied by the host.
129
+ *
130
+ * When present, providers should prefer this list over performing another
131
+ * logbook scan so auto-upload can stay scoped to the just-completed QSOs.
132
+ */
133
+ records?: import('@tx5dr/contracts').QSORecord[];
134
+ }
120
135
  export interface SyncPreflightIssue {
121
136
  code: string;
122
137
  severity: 'info' | 'warning' | 'error';
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,9 @@ export function createMockKVStore(initial) {
16
16
  getAll() {
17
17
  return Object.fromEntries(data);
18
18
  },
19
+ async flush() {
20
+ // no-op in mock
21
+ },
19
22
  };
20
23
  }
21
24
  // ===== Factory: Logger =====
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * ADIF (Amateur Data Interchange Format) utilities
3
+ *
4
+ * Provides parsing, generation and conversion of ADIF format records.
5
+ * Used by logbook sync plugins (WaveLog, QRZ, LoTW).
6
+ */
7
+ import type { QSORecord } from '@tx5dr/contracts';
8
+ /**
9
+ * Format a Date as ADIF date string (YYYYMMDD).
10
+ */
11
+ export declare function formatADIFDate(date: Date): string;
12
+ /**
13
+ * Format a Date as ADIF time string (HHMMSS).
14
+ */
15
+ export declare function formatADIFTime(date: Date): string;
16
+ /**
17
+ * Parse ADIF date and time strings into an ISO date string.
18
+ * @param dateStr ADIF date format YYYYMMDD
19
+ * @param timeStr ADIF time format HHMMSS or HHMM
20
+ */
21
+ export declare function parseADIFDateTime(dateStr: string, timeStr: string): string;
22
+ /**
23
+ * Convert a QSORecord to a single ADIF record string.
24
+ */
25
+ export declare function convertQSOToADIF(qso: QSORecord, options?: {
26
+ includeStationCallsign?: boolean;
27
+ includeMyGrid?: boolean;
28
+ }): string;
29
+ /**
30
+ * Parse ADIF field string into key-value pairs.
31
+ */
32
+ export declare function parseADIFFields(recordStr: string): Record<string, string>;
33
+ /**
34
+ * Parse a single ADIF record string into a QSORecord.
35
+ * @param recordStr Single ADIF record string
36
+ * @param source Source identifier (used for ID generation)
37
+ */
38
+ export declare function parseADIFRecord(recordStr: string, source?: string): QSORecord | null;
39
+ /**
40
+ * Parse a complete ADIF content string into QSORecord array.
41
+ * @param adifContent Complete ADIF file content
42
+ * @param source Source identifier
43
+ */
44
+ export declare function parseADIFContent(adifContent: string, source?: string): QSORecord[];
45
+ /**
46
+ * Generate a complete ADIF file with header.
47
+ */
48
+ export declare function generateADIFFile(qsos: QSORecord[], options?: {
49
+ programId?: string;
50
+ programVersion?: string;
51
+ includeStationCallsign?: boolean;
52
+ }): string;
53
+ //# sourceMappingURL=adif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adif.d.ts","sourceRoot":"","sources":["../../src/utils/adif.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAoClD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAKjD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAU1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CA2IT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAazE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAe,GAAG,SAAS,GAAG,IAAI,CAkK5F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,MAAe,GAAG,SAAS,EAAE,CAqB1F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,MAAM,CAwBT"}
@@ -0,0 +1,421 @@
1
+ /**
2
+ * ADIF (Amateur Data Interchange Format) utilities
3
+ *
4
+ * Provides parsing, generation and conversion of ADIF format records.
5
+ * Used by logbook sync plugins (WaveLog, QRZ, LoTW).
6
+ */
7
+ import { getBandFromFrequency, resolveDXCCEntity, DXCC_RESOLVER_VERSION } from '@tx5dr/core';
8
+ import { parseLegacyComment, resolveQsoComment } from './qso-text-fields.js';
9
+ function mapAdifModeToInternal(mode, submode) {
10
+ const normalizedMode = mode?.trim().toUpperCase();
11
+ const normalizedSubmode = submode?.trim().toUpperCase();
12
+ if (normalizedMode === 'MFSK' && normalizedSubmode === 'FT4') {
13
+ return { mode: 'FT4', submode: 'FT4' };
14
+ }
15
+ return {
16
+ mode: mode || 'FT8',
17
+ submode: submode || undefined,
18
+ };
19
+ }
20
+ function mapInternalModeToAdif(mode, submode) {
21
+ const normalizedMode = mode?.trim().toUpperCase();
22
+ const normalizedSubmode = submode?.trim().toUpperCase();
23
+ if (normalizedMode === 'FT4') {
24
+ return { mode: 'MFSK', submode: 'FT4' };
25
+ }
26
+ if (normalizedMode === 'MFSK' && normalizedSubmode) {
27
+ return { mode: 'MFSK', submode: normalizedSubmode };
28
+ }
29
+ return {
30
+ mode: mode || 'FT8',
31
+ submode: submode || undefined,
32
+ };
33
+ }
34
+ /**
35
+ * Format a Date as ADIF date string (YYYYMMDD).
36
+ */
37
+ export function formatADIFDate(date) {
38
+ const year = date.getUTCFullYear().toString().padStart(4, '0');
39
+ const month = (date.getUTCMonth() + 1).toString().padStart(2, '0');
40
+ const day = date.getUTCDate().toString().padStart(2, '0');
41
+ return `${year}${month}${day}`;
42
+ }
43
+ /**
44
+ * Format a Date as ADIF time string (HHMMSS).
45
+ */
46
+ export function formatADIFTime(date) {
47
+ const hours = date.getUTCHours().toString().padStart(2, '0');
48
+ const minutes = date.getUTCMinutes().toString().padStart(2, '0');
49
+ const seconds = date.getUTCSeconds().toString().padStart(2, '0');
50
+ return `${hours}${minutes}${seconds}`;
51
+ }
52
+ /**
53
+ * Parse ADIF date and time strings into an ISO date string.
54
+ * @param dateStr ADIF date format YYYYMMDD
55
+ * @param timeStr ADIF time format HHMMSS or HHMM
56
+ */
57
+ export function parseADIFDateTime(dateStr, timeStr) {
58
+ const year = dateStr.substring(0, 4);
59
+ const month = dateStr.substring(4, 6);
60
+ const day = dateStr.substring(6, 8);
61
+ const hour = timeStr.substring(0, 2);
62
+ const minute = timeStr.substring(2, 4);
63
+ const second = timeStr.substring(4, 6) || '00';
64
+ return new Date(`${year}-${month}-${day}T${hour}:${minute}:${second}Z`).toISOString();
65
+ }
66
+ /**
67
+ * Convert a QSORecord to a single ADIF record string.
68
+ */
69
+ export function convertQSOToADIF(qso, options) {
70
+ const adifFields = [];
71
+ const opts = { includeStationCallsign: false, includeMyGrid: true, ...options };
72
+ const adifMode = mapInternalModeToAdif(qso.mode, qso.submode);
73
+ adifFields.push(`<call:${qso.callsign.length}>${qso.callsign}`);
74
+ const startTime = new Date(qso.startTime);
75
+ const qsoDate = formatADIFDate(startTime);
76
+ const qsoTime = formatADIFTime(startTime);
77
+ adifFields.push(`<qso_date:8>${qsoDate}`);
78
+ adifFields.push(`<time_on:6>${qsoTime}`);
79
+ if (qso.endTime) {
80
+ const endTime = new Date(qso.endTime);
81
+ adifFields.push(`<qso_date_off:8>${formatADIFDate(endTime)}`);
82
+ adifFields.push(`<time_off:6>${formatADIFTime(endTime)}`);
83
+ }
84
+ else {
85
+ adifFields.push(`<qso_date_off:8>${qsoDate}`);
86
+ adifFields.push(`<time_off:6>${qsoTime}`);
87
+ }
88
+ if (adifMode.mode) {
89
+ adifFields.push(`<mode:${adifMode.mode.length}>${adifMode.mode}`);
90
+ }
91
+ if (adifMode.submode) {
92
+ adifFields.push(`<submode:${adifMode.submode.length}>${adifMode.submode}`);
93
+ }
94
+ const freqMHz = (qso.frequency / 1000000).toFixed(6);
95
+ adifFields.push(`<freq:${freqMHz.length}>${freqMHz}`);
96
+ const band = getBandFromFrequency(qso.frequency);
97
+ if (band !== 'Unknown') {
98
+ adifFields.push(`<band:${band.length}>${band}`);
99
+ }
100
+ if (qso.grid) {
101
+ adifFields.push(`<gridsquare:${qso.grid.length}>${qso.grid}`);
102
+ }
103
+ if (qso.dxccId) {
104
+ const value = String(qso.dxccId);
105
+ adifFields.push(`<dxcc:${value.length}>${value}`);
106
+ }
107
+ if (qso.dxccEntity) {
108
+ adifFields.push(`<country:${qso.dxccEntity.length}>${qso.dxccEntity}`);
109
+ }
110
+ if (qso.cqZone) {
111
+ const value = String(qso.cqZone);
112
+ adifFields.push(`<cqz:${value.length}>${value}`);
113
+ }
114
+ if (qso.ituZone) {
115
+ const value = String(qso.ituZone);
116
+ adifFields.push(`<ituz:${value.length}>${value}`);
117
+ }
118
+ if (qso.reportSent) {
119
+ adifFields.push(`<rst_sent:${qso.reportSent.length}>${qso.reportSent}`);
120
+ }
121
+ if (qso.reportReceived) {
122
+ adifFields.push(`<rst_rcvd:${qso.reportReceived.length}>${qso.reportReceived}`);
123
+ }
124
+ if (opts.includeStationCallsign && qso.myCallsign) {
125
+ adifFields.push(`<station_callsign:${qso.myCallsign.length}>${qso.myCallsign}`);
126
+ }
127
+ if (qso.myDxccId) {
128
+ const value = String(qso.myDxccId);
129
+ adifFields.push(`<my_dxcc:${value.length}>${value}`);
130
+ }
131
+ if (qso.myCqZone) {
132
+ const value = String(qso.myCqZone);
133
+ adifFields.push(`<my_cq_zone:${value.length}>${value}`);
134
+ }
135
+ if (qso.myItuZone) {
136
+ const value = String(qso.myItuZone);
137
+ adifFields.push(`<my_itu_zone:${value.length}>${value}`);
138
+ }
139
+ if (qso.myState) {
140
+ adifFields.push(`<my_state:${qso.myState.length}>${qso.myState}`);
141
+ }
142
+ if (qso.myCounty) {
143
+ adifFields.push(`<my_cnty:${qso.myCounty.length}>${qso.myCounty}`);
144
+ }
145
+ if (qso.myIota) {
146
+ adifFields.push(`<my_iota:${qso.myIota.length}>${qso.myIota}`);
147
+ }
148
+ if (opts.includeMyGrid && qso.myGrid) {
149
+ adifFields.push(`<my_gridsquare:${qso.myGrid.length}>${qso.myGrid}`);
150
+ }
151
+ if (qso.myCallsign) {
152
+ adifFields.push(`<operator:${qso.myCallsign.length}>${qso.myCallsign}`);
153
+ }
154
+ if (qso.lotwQslSent) {
155
+ adifFields.push(`<lotw_qsl_sent:${qso.lotwQslSent.length}>${qso.lotwQslSent}`);
156
+ }
157
+ if (qso.lotwQslReceived) {
158
+ adifFields.push(`<lotw_qsl_rcvd:${qso.lotwQslReceived.length}>${qso.lotwQslReceived}`);
159
+ }
160
+ if (qso.lotwQslSentDate) {
161
+ const dateStr = formatADIFDate(new Date(qso.lotwQslSentDate));
162
+ adifFields.push(`<lotw_qslsdate:8>${dateStr}`);
163
+ }
164
+ if (qso.lotwQslReceivedDate) {
165
+ const dateStr = formatADIFDate(new Date(qso.lotwQslReceivedDate));
166
+ adifFields.push(`<lotw_qslrdate:8>${dateStr}`);
167
+ }
168
+ if (qso.dxccStatus) {
169
+ adifFields.push(`<app_tx5dr_dxcc_status:${qso.dxccStatus.length}>${qso.dxccStatus}`);
170
+ }
171
+ if (qso.dxccSource) {
172
+ adifFields.push(`<app_tx5dr_dxcc_source:${qso.dxccSource.length}>${qso.dxccSource}`);
173
+ }
174
+ if (qso.dxccConfidence) {
175
+ adifFields.push(`<app_tx5dr_dxcc_confidence:${qso.dxccConfidence.length}>${qso.dxccConfidence}`);
176
+ }
177
+ if (qso.dxccNeedsReview !== undefined) {
178
+ adifFields.push(`<app_tx5dr_dxcc_needs_review:1>${qso.dxccNeedsReview ? 'Y' : 'N'}`);
179
+ }
180
+ if (qso.stationLocationId) {
181
+ adifFields.push(`<app_tx5dr_station_location_id:${qso.stationLocationId.length}>${qso.stationLocationId}`);
182
+ }
183
+ const comment = resolveQsoComment(qso);
184
+ if (comment) {
185
+ adifFields.push(`<comment:${comment.length}>${comment}`);
186
+ }
187
+ if (qso.qth) {
188
+ adifFields.push(`<qth:${qso.qth.length}>${qso.qth}`);
189
+ }
190
+ if (qso.notes) {
191
+ adifFields.push(`<notes:${qso.notes.length}>${qso.notes}`);
192
+ }
193
+ adifFields.push('<eor>');
194
+ return adifFields.join(' ');
195
+ }
196
+ /**
197
+ * Parse ADIF field string into key-value pairs.
198
+ */
199
+ export function parseADIFFields(recordStr) {
200
+ const fields = {};
201
+ const fieldRegex = /<(\w+):(\d+)>([^<]*)/gi;
202
+ let match;
203
+ while ((match = fieldRegex.exec(recordStr)) !== null) {
204
+ const fieldName = match[1].toLowerCase();
205
+ const fieldLength = parseInt(match[2]);
206
+ const fieldValue = match[3].substring(0, fieldLength);
207
+ fields[fieldName] = fieldValue;
208
+ }
209
+ return fields;
210
+ }
211
+ /**
212
+ * Parse a single ADIF record string into a QSORecord.
213
+ * @param recordStr Single ADIF record string
214
+ * @param source Source identifier (used for ID generation)
215
+ */
216
+ export function parseADIFRecord(recordStr, source = 'adif') {
217
+ const fields = parseADIFFields(recordStr);
218
+ if (!fields.call || !fields.qso_date || !fields.time_on) {
219
+ console.warn('[ADIFUtils] ADIF record missing required fields, skipping:', fields);
220
+ return null;
221
+ }
222
+ try {
223
+ const qsoDate = fields.qso_date;
224
+ const timeOn = fields.time_on;
225
+ const timeOff = fields.time_off || timeOn;
226
+ const modeInfo = mapAdifModeToInternal(fields.mode, fields.submode);
227
+ const startTime = parseADIFDateTime(qsoDate, timeOn);
228
+ const endTime = parseADIFDateTime(fields.qso_date_off || qsoDate, timeOff);
229
+ const { comment, messageHistory } = parseLegacyComment(fields.comment);
230
+ const record = {
231
+ id: `${source}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
232
+ callsign: fields.call.toUpperCase(),
233
+ startTime: new Date(startTime).getTime(),
234
+ endTime: new Date(endTime).getTime(),
235
+ frequency: fields.freq ? Math.round(parseFloat(fields.freq) * 1000000) : 14074000,
236
+ mode: modeInfo.mode,
237
+ submode: modeInfo.submode,
238
+ reportSent: fields.rst_sent || '',
239
+ reportReceived: fields.rst_rcvd || '',
240
+ grid: fields.gridsquare || '',
241
+ myCallsign: fields.station_callsign || fields.operator || undefined,
242
+ myGrid: fields.my_gridsquare || '',
243
+ qth: fields.qth || undefined,
244
+ comment,
245
+ notes: fields.notes || fields.note || undefined,
246
+ messageHistory,
247
+ };
248
+ if (fields.dxcc) {
249
+ const parsedDxcc = Number.parseInt(fields.dxcc, 10);
250
+ if (Number.isFinite(parsedDxcc)) {
251
+ record.dxccId = parsedDxcc;
252
+ }
253
+ }
254
+ if (fields.country) {
255
+ record.dxccEntity = fields.country;
256
+ }
257
+ if (fields.cqz) {
258
+ const parsedCqz = Number.parseInt(fields.cqz, 10);
259
+ if (Number.isFinite(parsedCqz)) {
260
+ record.cqZone = parsedCqz;
261
+ }
262
+ }
263
+ if (fields.ituz) {
264
+ const parsedItuz = Number.parseInt(fields.ituz, 10);
265
+ if (Number.isFinite(parsedItuz)) {
266
+ record.ituZone = parsedItuz;
267
+ }
268
+ }
269
+ if (fields.my_dxcc) {
270
+ const parsedMyDxcc = Number.parseInt(fields.my_dxcc, 10);
271
+ if (Number.isFinite(parsedMyDxcc)) {
272
+ record.myDxccId = parsedMyDxcc;
273
+ }
274
+ }
275
+ if (fields.my_cq_zone) {
276
+ const parsedMyCq = Number.parseInt(fields.my_cq_zone, 10);
277
+ if (Number.isFinite(parsedMyCq)) {
278
+ record.myCqZone = parsedMyCq;
279
+ }
280
+ }
281
+ if (fields.my_itu_zone) {
282
+ const parsedMyItu = Number.parseInt(fields.my_itu_zone, 10);
283
+ if (Number.isFinite(parsedMyItu)) {
284
+ record.myItuZone = parsedMyItu;
285
+ }
286
+ }
287
+ if (fields.my_state) {
288
+ record.myState = fields.my_state;
289
+ }
290
+ if (fields.my_cnty) {
291
+ record.myCounty = fields.my_cnty;
292
+ }
293
+ if (fields.my_iota) {
294
+ record.myIota = fields.my_iota;
295
+ }
296
+ if (fields.app_tx5dr_dxcc_status) {
297
+ record.dxccStatus = fields.app_tx5dr_dxcc_status;
298
+ }
299
+ if (fields.app_tx5dr_dxcc_source) {
300
+ record.dxccSource = fields.app_tx5dr_dxcc_source;
301
+ }
302
+ if (fields.app_tx5dr_dxcc_confidence) {
303
+ record.dxccConfidence = fields.app_tx5dr_dxcc_confidence;
304
+ }
305
+ if (fields.app_tx5dr_dxcc_needs_review) {
306
+ record.dxccNeedsReview = fields.app_tx5dr_dxcc_needs_review === 'Y';
307
+ }
308
+ if (fields.app_tx5dr_station_location_id) {
309
+ record.stationLocationId = fields.app_tx5dr_station_location_id;
310
+ }
311
+ // LoTW QSL status
312
+ const lotwSent = fields.lotw_qsl_sent?.toUpperCase();
313
+ if (lotwSent && ['Y', 'N', 'R', 'Q', 'I'].includes(lotwSent)) {
314
+ record.lotwQslSent = lotwSent;
315
+ }
316
+ const lotwRcvd = (fields.lotw_qsl_rcvd || fields.app_lotw_rxqsl)?.toUpperCase();
317
+ if (lotwRcvd && ['Y', 'N', 'R', 'I', 'V'].includes(lotwRcvd)) {
318
+ record.lotwQslReceived = lotwRcvd;
319
+ }
320
+ if (fields.lotw_qslsdate) {
321
+ try {
322
+ record.lotwQslSentDate = new Date(parseADIFDateTime(fields.lotw_qslsdate, '000000')).getTime();
323
+ }
324
+ catch { /* ignore parse error */ }
325
+ }
326
+ if (fields.lotw_qslrdate) {
327
+ try {
328
+ record.lotwQslReceivedDate = new Date(parseADIFDateTime(fields.lotw_qslrdate, '000000')).getTime();
329
+ }
330
+ catch { /* ignore parse error */ }
331
+ }
332
+ // QRZ QSL status
333
+ const qrzStatus = fields.app_qrzlog_status?.toUpperCase();
334
+ if (qrzStatus === 'C' || qrzStatus === 'Y') {
335
+ record.qrzQslReceived = 'Y';
336
+ }
337
+ if (record.dxccSource !== 'manual_override') {
338
+ const resolution = resolveDXCCEntity(record.callsign, record.startTime);
339
+ if (resolution.entity) {
340
+ record.dxccId = resolution.entity.entityCode;
341
+ record.dxccEntity = resolution.entity.name;
342
+ record.countryCode = resolution.entity.countryCode;
343
+ record.cqZone = resolution.entity.cqZone;
344
+ record.ituZone = resolution.entity.ituZone;
345
+ record.dxccStatus = resolution.entity.deleted ? 'deleted' : 'current';
346
+ record.dxccConfidence = resolution.confidence;
347
+ record.dxccSource = 'resolver';
348
+ record.dxccNeedsReview = resolution.needsReview;
349
+ record.dxccResolvedAt = Date.now();
350
+ record.dxccResolverVersion = DXCC_RESOLVER_VERSION;
351
+ }
352
+ else {
353
+ record.dxccId = undefined;
354
+ record.dxccEntity = undefined;
355
+ record.countryCode = undefined;
356
+ record.cqZone = undefined;
357
+ record.ituZone = undefined;
358
+ record.dxccStatus = 'unknown';
359
+ record.dxccConfidence = resolution.confidence;
360
+ record.dxccSource = 'resolver';
361
+ record.dxccNeedsReview = true;
362
+ record.dxccResolvedAt = Date.now();
363
+ record.dxccResolverVersion = DXCC_RESOLVER_VERSION;
364
+ }
365
+ }
366
+ return record;
367
+ }
368
+ catch (error) {
369
+ console.warn('[ADIFUtils] Error parsing ADIF record', { error, fields });
370
+ return null;
371
+ }
372
+ }
373
+ /**
374
+ * Parse a complete ADIF content string into QSORecord array.
375
+ * @param adifContent Complete ADIF file content
376
+ * @param source Source identifier
377
+ */
378
+ export function parseADIFContent(adifContent, source = 'adif') {
379
+ const records = [];
380
+ try {
381
+ const eohIndex = adifContent.search(/<eoh>/i);
382
+ const body = eohIndex >= 0 ? adifContent.substring(eohIndex + 5) : adifContent;
383
+ const recordStrings = body.split(/<eor>/i).filter(r => r.trim().length > 0);
384
+ for (const recordStr of recordStrings) {
385
+ const qso = parseADIFRecord(recordStr, source);
386
+ if (qso) {
387
+ records.push(qso);
388
+ }
389
+ }
390
+ }
391
+ catch (error) {
392
+ console.error('[ADIFUtils] Failed to parse ADIF content:', error);
393
+ throw new Error('ADIF format parse error');
394
+ }
395
+ return records;
396
+ }
397
+ /**
398
+ * Generate a complete ADIF file with header.
399
+ */
400
+ export function generateADIFFile(qsos, options) {
401
+ const opts = {
402
+ programId: 'TX5DR',
403
+ programVersion: '1.0',
404
+ includeStationCallsign: false,
405
+ ...options,
406
+ };
407
+ const lines = [];
408
+ lines.push(`Generated by ${opts.programId} v${opts.programVersion}`);
409
+ lines.push(`<adif_ver:5>3.1.4`);
410
+ lines.push(`<programid:${opts.programId.length}>${opts.programId}`);
411
+ lines.push(`<programversion:${opts.programVersion.length}>${opts.programVersion}`);
412
+ lines.push('<eoh>');
413
+ lines.push('');
414
+ for (const qso of qsos) {
415
+ lines.push(convertQSOToADIF(qso, {
416
+ includeStationCallsign: opts.includeStationCallsign,
417
+ }));
418
+ }
419
+ return lines.join('\n');
420
+ }
421
+ //# sourceMappingURL=adif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adif.js","sourceRoot":"","sources":["../../src/utils/adif.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Callsign normalization utilities
3
+ *
4
+ * Strips portable/mobile suffixes (e.g. BG3YZA/P → BG3YZA) so that
5
+ * logbook access checks match the base callsign regardless of suffix.
6
+ */
7
+ /**
8
+ * Extract the base callsign by removing prefixes/suffixes.
9
+ * Picks the longest segment that looks like a callsign (contains both
10
+ * letters and digits). Examples:
11
+ * "BG3YZA" → "BG3YZA"
12
+ * "BG3YZA/P" → "BG3YZA"
13
+ * "VK9/BG3YZA" → "BG3YZA"
14
+ * "BG3YZA/QRP" → "BG3YZA"
15
+ */
16
+ export declare function normalizeCallsign(callsign: string): string;
17
+ //# sourceMappingURL=callsign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callsign.d.ts","sourceRoot":"","sources":["../../src/utils/callsign.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1D"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Callsign normalization utilities
3
+ *
4
+ * Strips portable/mobile suffixes (e.g. BG3YZA/P → BG3YZA) so that
5
+ * logbook access checks match the base callsign regardless of suffix.
6
+ */
7
+ /**
8
+ * Extract the base callsign by removing prefixes/suffixes.
9
+ * Picks the longest segment that looks like a callsign (contains both
10
+ * letters and digits). Examples:
11
+ * "BG3YZA" → "BG3YZA"
12
+ * "BG3YZA/P" → "BG3YZA"
13
+ * "VK9/BG3YZA" → "BG3YZA"
14
+ * "BG3YZA/QRP" → "BG3YZA"
15
+ */
16
+ export function normalizeCallsign(callsign) {
17
+ const upper = callsign.toUpperCase().trim();
18
+ if (!upper.includes('/'))
19
+ return upper;
20
+ const parts = upper.split('/');
21
+ let best = parts[0];
22
+ for (const part of parts) {
23
+ if (part.length > best.length && /[A-Z]/.test(part) && /\d/.test(part)) {
24
+ best = part;
25
+ }
26
+ }
27
+ return best;
28
+ }
29
+ //# sourceMappingURL=callsign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callsign.js","sourceRoot":"","sources":["../../src/utils/callsign.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface PluginPageBoundResource {
2
+ kind: 'callsign' | 'operator';
3
+ value: string;
4
+ }
5
+ export declare function getPluginPageScopeSegments(resource?: PluginPageBoundResource | null): string[];
6
+ export declare function getPluginPageScopePath(resource?: PluginPageBoundResource | null): string;
7
+ //# sourceMappingURL=page-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-scope.d.ts","sourceRoot":"","sources":["../../src/utils/page-scope.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,wBAAgB,0BAA0B,CACxC,QAAQ,CAAC,EAAE,uBAAuB,GAAG,IAAI,GACxC,MAAM,EAAE,CAUV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,CAAC,EAAE,uBAAuB,GAAG,IAAI,GACxC,MAAM,CAER"}
@@ -0,0 +1,18 @@
1
+ import path from 'path';
2
+ import { normalizeCallsign } from './callsign.js';
3
+ function toSafeSegment(value) {
4
+ return encodeURIComponent(value.trim());
5
+ }
6
+ export function getPluginPageScopeSegments(resource) {
7
+ if (!resource) {
8
+ return ['global'];
9
+ }
10
+ if (resource.kind === 'callsign') {
11
+ return ['callsigns', toSafeSegment(normalizeCallsign(resource.value))];
12
+ }
13
+ return ['operators', toSafeSegment(resource.value)];
14
+ }
15
+ export function getPluginPageScopePath(resource) {
16
+ return path.posix.join(...getPluginPageScopeSegments(resource));
17
+ }
18
+ //# sourceMappingURL=page-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-scope.js","sourceRoot":"","sources":["../../src/utils/page-scope.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAAyC;IAEzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAyC;IAEzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { QSORecord } from '@tx5dr/contracts';
2
+ export declare function normalizeMessageHistory(value: unknown): string[];
3
+ export declare function buildCommentFromMessageHistory(messageHistory?: readonly string[]): string | undefined;
4
+ export declare function parseLegacyComment(comment?: string): {
5
+ comment?: string;
6
+ messageHistory: string[];
7
+ };
8
+ export declare function resolveQsoComment(qso: Pick<QSORecord, 'comment' | 'messageHistory'>): string | undefined;
9
+ //# sourceMappingURL=qso-text-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qso-text-fields.d.ts","sourceRoot":"","sources":["../../src/utils/qso-text-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWlD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAQhE;AAED,wBAAgB,8BAA8B,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAGrG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAenG;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC,GAAG,MAAM,GAAG,SAAS,CAExG"}
@@ -0,0 +1,37 @@
1
+ function normalizeOptionalString(value) {
2
+ if (typeof value !== 'string') {
3
+ return undefined;
4
+ }
5
+ const trimmed = value.trim();
6
+ return trimmed.length > 0 ? trimmed : undefined;
7
+ }
8
+ export function normalizeMessageHistory(value) {
9
+ if (!Array.isArray(value)) {
10
+ return [];
11
+ }
12
+ return value
13
+ .map((item) => (typeof item === 'string' ? item.trim() : ''))
14
+ .filter((item) => item.length > 0);
15
+ }
16
+ export function buildCommentFromMessageHistory(messageHistory) {
17
+ const normalized = normalizeMessageHistory(messageHistory ?? []);
18
+ return normalized.length > 0 ? normalized.join(' | ') : undefined;
19
+ }
20
+ export function parseLegacyComment(comment) {
21
+ const normalizedComment = normalizeOptionalString(comment);
22
+ if (!normalizedComment) {
23
+ return { comment: undefined, messageHistory: [] };
24
+ }
25
+ const messageHistory = normalizedComment
26
+ .split(' | ')
27
+ .map((part) => part.trim())
28
+ .filter((part) => part.length > 0);
29
+ return {
30
+ comment: normalizedComment,
31
+ messageHistory: messageHistory.length > 1 ? messageHistory : [],
32
+ };
33
+ }
34
+ export function resolveQsoComment(qso) {
35
+ return normalizeOptionalString(qso.comment) ?? buildCommentFromMessageHistory(qso.messageHistory);
36
+ }
37
+ //# sourceMappingURL=qso-text-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qso-text-fields.js","sourceRoot":"","sources":["../../src/utils/qso-text-fields.ts"],"names":[],"mappings":"AAEA,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC5D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,cAAkC;IAC/E,MAAM,UAAU,GAAG,uBAAuB,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,cAAc,GAAG,iBAAiB;SACrC,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,OAAO;QACL,OAAO,EAAE,iBAAiB;QAC1B,cAAc,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;KAChE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAkD;IAClF,OAAO,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,8BAA8B,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tx5dr/plugin-api",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "description": "Public plugin API for TX-5DR digital radio engine",
6
6
  "license": "MIT",
@@ -17,7 +17,9 @@
17
17
  "digital-radio"
18
18
  ],
19
19
  "files": [
20
- "dist"
20
+ "dist",
21
+ "src/bridge.d.ts",
22
+ "tokens.css"
21
23
  ],
22
24
  "main": "dist/index.js",
23
25
  "types": "dist/index.d.ts",
@@ -31,6 +33,9 @@
31
33
  "import": "./dist/testing/index.js",
32
34
  "require": "./dist/testing/index.js",
33
35
  "types": "./dist/testing/index.d.ts"
36
+ },
37
+ "./bridge": {
38
+ "types": "./src/bridge.d.ts"
34
39
  }
35
40
  },
36
41
  "scripts": {
@@ -39,9 +44,11 @@
39
44
  "lint": "eslint src/**/*.ts",
40
45
  "test": "vitest run --passWithNoTests"
41
46
  },
47
+ "dependencies": {
48
+ "@tx5dr/contracts": "1.2.0",
49
+ "@tx5dr/core": "1.2.0"
50
+ },
42
51
  "devDependencies": {
43
- "@tx5dr/contracts": "workspace:*",
44
- "@tx5dr/shared-config": "workspace:*",
45
52
  "typescript": "^5.0.0",
46
53
  "vitest": "^1.0.0"
47
54
  }
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Ambient type definitions for the TX-5DR Plugin Bridge SDK.
3
+ *
4
+ * The Bridge SDK is automatically injected into plugin iframe pages by the
5
+ * host. It is available as `window.tx5dr` (or simply `tx5dr` in global
6
+ * scope) — plugin code does **not** need to import or install anything at
7
+ * runtime.
8
+ *
9
+ * ## Enabling IDE autocomplete
10
+ *
11
+ * **TypeScript** — add to `tsconfig.json`:
12
+ * ```json
13
+ * { "compilerOptions": { "types": ["@tx5dr/plugin-api/bridge"] } }
14
+ * ```
15
+ *
16
+ * **JavaScript (VS Code)** — add to `jsconfig.json`:
17
+ * ```json
18
+ * { "compilerOptions": { "types": ["@tx5dr/plugin-api/bridge"] } }
19
+ * ```
20
+ *
21
+ * Or add a triple-slash reference at the top of any `.js` / `.ts` file:
22
+ * ```js
23
+ * /// <reference types="@tx5dr/plugin-api/bridge" />
24
+ * ```
25
+ *
26
+ * @see https://github.com/boybook/tx-5dr/blob/main/docs/plugin-system.md
27
+ */
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Bridge SDK interface
31
+ // ---------------------------------------------------------------------------
32
+
33
+ /**
34
+ * The TX-5DR Plugin Bridge SDK exposed as `window.tx5dr` inside plugin
35
+ * iframe pages.
36
+ *
37
+ * All async methods communicate with the host via `postMessage` and return
38
+ * Promises that resolve when the host responds.
39
+ */
40
+ interface Tx5drBridge {
41
+ // ── State (read-only) ────────────────────────────────────────────────
42
+
43
+ /** URL query parameters passed to this iframe page (read-only). */
44
+ readonly params: Readonly<Record<string, string>>;
45
+
46
+ /** Current theme: `'dark'` or `'light'`. */
47
+ readonly theme: 'dark' | 'light';
48
+
49
+ /** Current locale code (e.g. `'zh'`, `'en'`). */
50
+ readonly locale: string;
51
+
52
+ /** Unique session ID assigned to this iframe instance by the host. */
53
+ readonly pageSessionId: string;
54
+
55
+ // ── RPC ──────────────────────────────────────────────────────────────
56
+
57
+ /**
58
+ * Send a request to the plugin's server-side page handler
59
+ * (`ctx.ui.registerPageHandler`).
60
+ *
61
+ * @param action An application-defined action name.
62
+ * @param data Optional payload forwarded to the handler.
63
+ * @returns The value returned by the handler's `onMessage` method.
64
+ */
65
+ invoke(action: string, data?: unknown): Promise<unknown>;
66
+
67
+ // ── Push messaging ───────────────────────────────────────────────────
68
+
69
+ /**
70
+ * Subscribe to server-initiated push messages.
71
+ *
72
+ * The server sends pushes via `ctx.ui.pushToPage(pageId, action, data)`
73
+ * or `requestContext.page.push(action, data)`.
74
+ */
75
+ onPush(action: string, callback: (data: any) => void): void;
76
+
77
+ /** Unsubscribe a previously registered push listener. */
78
+ offPush(action: string, callback: (data: any) => void): void;
79
+
80
+ // ── Key-value store ──────────────────────────────────────────────────
81
+
82
+ /**
83
+ * Read a value from the page-scoped persistent KV store.
84
+ *
85
+ * Scope is determined by the page's instance target and resource binding
86
+ * (e.g. per-callsign).
87
+ */
88
+ storeGet<T = unknown>(key: string, defaultValue?: T): Promise<T>;
89
+
90
+ /** Write a value to the page-scoped persistent KV store. */
91
+ storeSet(key: string, value: unknown): Promise<void>;
92
+
93
+ /** Delete a key from the page-scoped persistent KV store. */
94
+ storeDelete(key: string): Promise<void>;
95
+
96
+ // ── File storage ─────────────────────────────────────────────────────
97
+
98
+ /**
99
+ * Upload a file to the page-scoped file storage.
100
+ *
101
+ * Files are stored under a sandboxed directory determined by the page's
102
+ * instance target and resource binding.
103
+ */
104
+ fileUpload(path: string, file: File | Blob): Promise<void>;
105
+
106
+ /** Read a file from page-scoped storage. Returns `null` if not found. */
107
+ fileRead(path: string): Promise<Blob | null>;
108
+
109
+ /** Delete a file from page-scoped storage. */
110
+ fileDelete(path: string): Promise<boolean>;
111
+
112
+ /** List file paths under the given prefix in page-scoped storage. */
113
+ fileList(prefix?: string): Promise<string[]>;
114
+
115
+ // ── UI controls ──────────────────────────────────────────────────────
116
+
117
+ /**
118
+ * Report the iframe content height so the host can resize the iframe.
119
+ *
120
+ * Recommended: use a `ResizeObserver` on `document.body` and call
121
+ * `tx5dr.resize(document.body.scrollHeight)` on every change.
122
+ */
123
+ resize(height: number): void;
124
+
125
+ /** Ask the parent component to close this iframe (e.g. close a modal). */
126
+ requestClose(): void;
127
+
128
+ /** Register a callback invoked when the host theme changes. */
129
+ onThemeChange(callback: (theme: 'dark' | 'light') => void): void;
130
+ }
131
+
132
+ // ---------------------------------------------------------------------------
133
+ // Global augmentation
134
+ // ---------------------------------------------------------------------------
135
+
136
+ interface Window {
137
+ /** TX-5DR Plugin Bridge SDK — injected by the host into iframe pages. */
138
+ readonly tx5dr: Tx5drBridge;
139
+ }
140
+
141
+ /**
142
+ * Shorthand global reference to the Bridge SDK.
143
+ *
144
+ * Equivalent to `window.tx5dr`. Available because the SDK is injected as a
145
+ * global before any plugin script runs.
146
+ */
147
+ declare var tx5dr: Tx5drBridge;
package/tokens.css ADDED
@@ -0,0 +1,60 @@
1
+ /*
2
+ * TX-5DR Plugin Design Tokens (Reference File)
3
+ *
4
+ * This file is a REFERENCE COPY of the CSS custom properties injected by
5
+ * the TX-5DR host into every plugin iframe page. Its purpose is to enable
6
+ * IDE autocomplete when authoring plugin CSS — the actual runtime values
7
+ * are injected by the host and may differ from these defaults.
8
+ *
9
+ * Usage:
10
+ * Copy this file into your plugin project root (or ui/ directory).
11
+ * VS Code's CSS Language Service will pick up the custom property names
12
+ * and offer autocomplete when you type `var(--tx5dr-`.
13
+ *
14
+ * DO NOT import or link this file in your HTML — the host already injects
15
+ * the tokens via <link rel="stylesheet" href="/api/plugins/_bridge/tokens.css">.
16
+ *
17
+ * The values below correspond to the "dark" theme. Light-theme overrides
18
+ * are applied automatically at runtime by the host when the user switches
19
+ * themes.
20
+ */
21
+ :root {
22
+ /* ── Background ── */
23
+ --tx5dr-bg: #18181b;
24
+ --tx5dr-bg-content: #27272a;
25
+ --tx5dr-bg-hover: #3f3f46;
26
+
27
+ /* ── Text ── */
28
+ --tx5dr-text: #fafafa;
29
+ --tx5dr-text-secondary: #a1a1aa;
30
+
31
+ /* ── Semantic colors ── */
32
+ --tx5dr-primary: #006FEE;
33
+ --tx5dr-primary-hover: #005bc4;
34
+ --tx5dr-success: #17c964;
35
+ --tx5dr-warning: #f5a524;
36
+ --tx5dr-danger: #f31260;
37
+
38
+ /* ── Border ── */
39
+ --tx5dr-border: #3f3f46;
40
+ --tx5dr-focus-ring: rgba(0, 111, 238, 0.4);
41
+
42
+ /* ── Border radius ── */
43
+ --tx5dr-radius-sm: 8px;
44
+ --tx5dr-radius-md: 12px;
45
+ --tx5dr-radius-lg: 16px;
46
+
47
+ /* ── Spacing ── */
48
+ --tx5dr-spacing-xs: 4px;
49
+ --tx5dr-spacing-sm: 8px;
50
+ --tx5dr-spacing-md: 12px;
51
+ --tx5dr-spacing-lg: 16px;
52
+ --tx5dr-spacing-xl: 24px;
53
+
54
+ /* ── Typography ── */
55
+ --tx5dr-font: 'Inter', system-ui, -apple-system, sans-serif;
56
+ --tx5dr-font-mono: 'JetBrains Mono', ui-monospace, monospace;
57
+ --tx5dr-font-size-sm: 13px;
58
+ --tx5dr-font-size-md: 14px;
59
+ --tx5dr-font-size-lg: 16px;
60
+ }