@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 +135 -0
- package/dist/helpers.d.ts +8 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/sync.d.ts +19 -4
- package/dist/sync.d.ts.map +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/utils/adif.d.ts +53 -0
- package/dist/utils/adif.d.ts.map +1 -0
- package/dist/utils/adif.js +421 -0
- package/dist/utils/adif.js.map +1 -0
- package/dist/utils/callsign.d.ts +17 -0
- package/dist/utils/callsign.d.ts.map +1 -0
- package/dist/utils/callsign.js +29 -0
- package/dist/utils/callsign.js.map +1 -0
- package/dist/utils/page-scope.d.ts +7 -0
- package/dist/utils/page-scope.d.ts.map +1 -0
- package/dist/utils/page-scope.js +18 -0
- package/dist/utils/page-scope.js.map +1 -0
- package/dist/utils/qso-text-fields.d.ts +9 -0
- package/dist/utils/qso-text-fields.d.ts.map +1 -0
- package/dist/utils/qso-text-fields.js +37 -0
- package/dist/utils/qso-text-fields.js.map +1 -0
- package/package.json +11 -4
- package/src/bridge.d.ts +147 -0
- package/tokens.css +60 -0
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.
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
53
|
-
* to determine which records to upload.
|
|
54
|
-
*
|
|
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';
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAExF,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAE5C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEhC,gEAAgE;IAChE,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1D
|
|
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":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACV,QAAQ,EACR,eAAe,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAK1B,yEAAyE;AACzE,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,8EAA8E;AAC9E,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;CAC5C;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;CAC3B;AAID,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/index.js
CHANGED
|
@@ -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":"AA6BA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAmCxD,+BAA+B;AAE/B,MAAM,UAAU,iBAAiB,CAAC,OAAiC;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAkB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO;QACL,KAAK,EAAE,IAAI;QACX,GAAG,CAAc,GAAW,EAAE,YAAgB;YAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAM,CAAC;QAC7D,CAAC;QACD,GAAG,CAAC,GAAW,EAAE,KAAc;YAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,GAAW;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,MAAM;YACJ,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,gBAAgB;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8BAA8B;AAE9B,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,KAAK;QACb,KAAK,CAAC,OAAe,EAAE,IAA8B;YACnD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,IAA8B;YAClD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,IAA8B;YAClD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,OAAe,EAAE,KAAe;YACpC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8BAA8B;AAE9B,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,OAAO;QACL,OAAO,EAAE,MAAM;QACf,GAAG,CAAC,EAAU,EAAE,UAAkB;YAChC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,EAAU;YACd,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ;YACN,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uCAAuC;AAEvC,MAAM,YAAY,GAAmB;IACnC,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,CAAC,KAAK,CAAC;IACrB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,GAAG;CACnB,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,SAAoC;IAEpC,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,YAAY;QAClB,cAAc,EAAE,CAAC,CAAC,CAAC;QACnB,UAAU,EAAE,IAAI;QAChB,iBAAiB,KAAU,CAAC;QAC5B,gBAAgB,KAAU,CAAC;QAC3B,IAAI,KAAU,CAAC;QACf,iBAAiB,KAAU,CAAC;QAC5B,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;QACpC,2BAA2B,EAAE,GAAG,EAAE,CAAC,KAAK;QACxC,SAAS,KAAU,CAAC;QACpB,kBAAkB,KAAU,CAAC;QAC7B,kBAAkB,KAAU,CAAC;QAC7B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,oCAAoC;AAEpC,MAAM,UAAU,sBAAsB,CACpC,SAAiC;IAEjC,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC5B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,qCAAqC;AAErC,MAAM,UAAU,uBAAuB,CACrC,SAAkC;IAElC,MAAM,cAAc,GAAG;QACrB,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,gBAAgB;QAC1C,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QACzB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACxB,MAAM,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACtB,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACzB,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC/B,aAAa,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KAC9B,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;QAC5B,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;QAChC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;QAChC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QACzB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACxB,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc;QACjC,MAAM,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACtB,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QACzB,aAAa,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC7B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,kCAAkC;AAElC,MAAM,UAAU,oBAAoB,CAClC,SAA+B;IAE/B,OAAO;QACL,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE;QAC1B,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI;QACrC,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAmB,EAAE,CAAC;QACtF,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,gCAAgC;AAEhC,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC9C,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,IAAI,CAAC,OAAe,EAAE,IAAa;YACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,mBAAmB,CAAC,QAAwD;YAC1E,gBAAgB;QAClB,CAAC;QACD,aAAa,CACX,cAAsB,EACtB,OAAe,EACf,KAAe;YAEf,gBAAgB;QAClB,CAAC;QACD,sBAAsB,CAAC,OAAe;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,UAAU,CACR,OAAe,EACf,OAAe,EACf,KAAe;YAEf,gBAAgB;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uCAAuC;AAEvC,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,CAAS,EAAE,IAAY,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,CAAS,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,MAAM,CAAC,CAAS,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,MAAe;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC;AA6BD,MAAM,UAAU,iBAAiB,CAAC,OAAkC;IAClE,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,iBAAiB,EAAE,CAAC;IAElE,MAAM,IAAI,GAAmB,IAAI,CAAC,IAAI;QACpC,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;QACnC,CAAC,CAAC,YAAY,CAAC;IAEjB,MAAM,QAAQ,GAAG,yBAAyB,CAAC;QACzC,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,YAAY;QACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM;QACjC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;QACjC,IAAI;QACJ,GAAG,IAAI,CAAC,QAAQ;KACjB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,EAAE,QAAQ,KAAyB,CAAC,EAAE,CAAC;IAE3D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE;QACvD,GAAG;QACH,MAAM;QACN,QAAQ;QACR,KAAK;QACL,OAAO;QACP,IAAI;QACJ,EAAE;QACF,KAAK;QACL,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,6BAA6B;AAE7B,MAAM,UAAU,kBAAkB,CAAC,SAA6B;IAC9D,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,KAAK;QACX,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAqC;IAC3E,OAAO;QACL,GAAG,EAAE,CAAC,EAAE;QACR,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,mBAAmB;QAC/B,OAAO,EAAE;YACP,IAAI,EAAE,cAAc,CAAC,EAAE;YACvB,cAAc,EAAE,MAAM;YACtB,IAAI,EAAE,MAAM;SACb;QACD,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,CAAC;QACZ,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -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.
|
|
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
|
}
|
package/src/bridge.d.ts
ADDED
|
@@ -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
|
+
}
|