@tx5dr/plugin-api 1.3.0 → 1.4.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/dist/hooks.d.ts +9 -4
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/bridge.d.ts +37 -4
package/dist/hooks.d.ts
CHANGED
|
@@ -17,6 +17,13 @@ export interface ScoredCandidate extends ParsedFT8Message {
|
|
|
17
17
|
*/
|
|
18
18
|
score: number;
|
|
19
19
|
}
|
|
20
|
+
export interface QSOFailureInfo {
|
|
21
|
+
targetCallsign: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
stage?: string;
|
|
24
|
+
unansweredTransmissions?: number;
|
|
25
|
+
hadTargetReply?: boolean;
|
|
26
|
+
}
|
|
20
27
|
/**
|
|
21
28
|
* Decision returned from {@link StrategyRuntime.decide}.
|
|
22
29
|
*
|
|
@@ -34,6 +41,7 @@ export interface StrategyDecision {
|
|
|
34
41
|
* - interrupt the operator's current audio/PTT contribution right away.
|
|
35
42
|
*/
|
|
36
43
|
stop?: boolean;
|
|
44
|
+
qsoFailure?: QSOFailureInfo;
|
|
37
45
|
}
|
|
38
46
|
/**
|
|
39
47
|
* Metadata describing why a strategy decision is being evaluated.
|
|
@@ -180,10 +188,7 @@ export interface PluginHooks {
|
|
|
180
188
|
/**
|
|
181
189
|
* Broadcast when an in-progress QSO terminates unsuccessfully.
|
|
182
190
|
*/
|
|
183
|
-
onQSOFail?(info:
|
|
184
|
-
targetCallsign: string;
|
|
185
|
-
reason: string;
|
|
186
|
-
}, ctx: PluginContext): void;
|
|
191
|
+
onQSOFail?(info: QSOFailureInfo, ctx: PluginContext): void;
|
|
187
192
|
/**
|
|
188
193
|
* Broadcast when a named timer created through {@link PluginContext.timers}
|
|
189
194
|
* fires.
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
/** Core plugin definition and lifecycle interfaces. */
|
|
23
23
|
export type { PluginDefinition } from './definition.js';
|
|
24
24
|
export type { PluginContext } from './context.js';
|
|
25
|
-
export type { PluginHooks, AutoCallProposal, AutoCallExecutionRequest, AutoCallExecutionPlan, ScoredCandidate, StrategyDecision, StrategyDecisionMeta, LastMessageInfo, } from './hooks.js';
|
|
25
|
+
export type { PluginHooks, AutoCallProposal, AutoCallExecutionRequest, AutoCallExecutionPlan, ScoredCandidate, StrategyDecision, StrategyDecisionMeta, LastMessageInfo, QSOFailureInfo, } from './hooks.js';
|
|
26
26
|
export type { StrategyRuntime, StrategyRuntimeContext, StrategyRuntimeSnapshot, StrategyRuntimeSlot, StrategyRuntimeSlotContentUpdate, } from './runtime.js';
|
|
27
27
|
/** Host-provided helper interfaces available through {@link PluginContext}. */
|
|
28
28
|
export type { KVStore, PluginLogger, PluginTimers, OperatorControl, RadioControl, LogbookAccess, CallsignLogbookAccess, QSOQueryFilter, BandAccess, IdleTransmitFrequencyOptions, AutoTargetEligibilityReason, AutoTargetEligibilityDecision, UIBridge, PanelMeta, PluginUIHandler, PluginUIRequestContext, PluginUIRequestUser, PluginUIBoundResource, PluginUIInstanceTarget, PluginUIPageSessionInfo, PluginUIPageContext, PluginFileStore, } from './helpers.js';
|
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,
|
|
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,EACf,cAAc,GACf,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,SAAS,EACT,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.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;AA4GH,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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tx5dr/plugin-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Public plugin API for TX-5DR digital radio engine",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"test": "vitest run --passWithNoTests"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@tx5dr/contracts": "1.
|
|
49
|
-
"@tx5dr/core": "1.
|
|
48
|
+
"@tx5dr/contracts": "1.4.0",
|
|
49
|
+
"@tx5dr/core": "1.4.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"typescript": "^5.0.0",
|
package/src/bridge.d.ts
CHANGED
|
@@ -30,6 +30,27 @@
|
|
|
30
30
|
// Bridge SDK interface
|
|
31
31
|
// ---------------------------------------------------------------------------
|
|
32
32
|
|
|
33
|
+
interface Tx5drBridgeState {
|
|
34
|
+
/** URL/init parameters passed to this iframe page. */
|
|
35
|
+
readonly params: Readonly<Record<string, string>>;
|
|
36
|
+
|
|
37
|
+
/** Current theme: `'dark'` or `'light'`. */
|
|
38
|
+
readonly theme: 'dark' | 'light';
|
|
39
|
+
|
|
40
|
+
/** Current locale code (e.g. `'zh'`, `'zh-CN'`, `'en'`). */
|
|
41
|
+
readonly locale: string;
|
|
42
|
+
|
|
43
|
+
/** Unique session ID assigned to this iframe instance by the host. */
|
|
44
|
+
readonly pageSessionId: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface Tx5drBridgeStateChange {
|
|
48
|
+
readonly previous: Tx5drBridgeState;
|
|
49
|
+
readonly current: Tx5drBridgeState;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
type Tx5drBridgeUnsubscribe = () => void;
|
|
53
|
+
|
|
33
54
|
/**
|
|
34
55
|
* The TX-5DR Plugin Bridge SDK exposed as `window.tx5dr` inside plugin
|
|
35
56
|
* iframe pages.
|
|
@@ -40,18 +61,30 @@
|
|
|
40
61
|
interface Tx5drBridge {
|
|
41
62
|
// ── State (read-only) ────────────────────────────────────────────────
|
|
42
63
|
|
|
43
|
-
/** URL
|
|
64
|
+
/** URL/init parameters passed to this iframe page (read-only). */
|
|
44
65
|
readonly params: Readonly<Record<string, string>>;
|
|
45
66
|
|
|
46
67
|
/** Current theme: `'dark'` or `'light'`. */
|
|
47
68
|
readonly theme: 'dark' | 'light';
|
|
48
69
|
|
|
49
|
-
/** Current locale code (e.g. `'zh'`, `'en'`). */
|
|
70
|
+
/** Current locale code (e.g. `'zh'`, `'zh-CN'`, `'en'`). */
|
|
50
71
|
readonly locale: string;
|
|
51
72
|
|
|
52
73
|
/** Unique session ID assigned to this iframe instance by the host. */
|
|
53
74
|
readonly pageSessionId: string;
|
|
54
75
|
|
|
76
|
+
/** Resolves after the host sends the initial authoritative iframe state. */
|
|
77
|
+
readonly ready: Promise<Tx5drBridgeState>;
|
|
78
|
+
|
|
79
|
+
/** Return a snapshot of the current bridge state. */
|
|
80
|
+
getState(): Tx5drBridgeState;
|
|
81
|
+
|
|
82
|
+
/** Subscribe to any bridge state change. Returns an unsubscribe function. */
|
|
83
|
+
onStateChange(callback: (change: Tx5drBridgeStateChange) => void): Tx5drBridgeUnsubscribe;
|
|
84
|
+
|
|
85
|
+
/** Subscribe to locale changes. Returns an unsubscribe function. */
|
|
86
|
+
onLocaleChange(callback: (locale: string) => void): Tx5drBridgeUnsubscribe;
|
|
87
|
+
|
|
55
88
|
// ── RPC ──────────────────────────────────────────────────────────────
|
|
56
89
|
|
|
57
90
|
/**
|
|
@@ -125,8 +158,8 @@ interface Tx5drBridge {
|
|
|
125
158
|
/** Ask the parent component to close this iframe (e.g. close a modal). */
|
|
126
159
|
requestClose(): void;
|
|
127
160
|
|
|
128
|
-
/** Register a callback invoked when the host theme changes. */
|
|
129
|
-
onThemeChange(callback: (theme: 'dark' | 'light') => void):
|
|
161
|
+
/** Register a callback invoked when the host theme changes. Returns an unsubscribe function. */
|
|
162
|
+
onThemeChange(callback: (theme: 'dark' | 'light') => void): Tx5drBridgeUnsubscribe;
|
|
130
163
|
}
|
|
131
164
|
|
|
132
165
|
// ---------------------------------------------------------------------------
|