opentray 0.14.4 → 0.16.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 +9 -2
- package/dist/index.d.mts +68 -7
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +340 -94
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -9
package/README.md
CHANGED
|
@@ -25,6 +25,12 @@ Use `alpha-A-B` for alpha packages on the same protocol line. Replace `A-B` with
|
|
|
25
25
|
|
|
26
26
|
`packages/cli` is the only unscoped npm package in this monorepo.
|
|
27
27
|
|
|
28
|
+
## Native Artifact Authority
|
|
29
|
+
|
|
30
|
+
Official `TrayExtension` implementations declare a platform-neutral `artifact` descriptor. On first use, the Node SDK resolves the platform package relative to the facade package that declared it, validates the facade, contract, and platform package manifests, and sends one real native-library path to the broker. The broker does not scan consumer `node_modules` directories or reconstruct npm, pnpm, Yarn, or Bun layouts.
|
|
31
|
+
|
|
32
|
+
Low-level custom extensions use an exact-file artifact. `OPENTRAY_EXT_PATH` and source-tree paths are diagnostic inputs; a normal package-manager install must be sufficient for official extensions.
|
|
33
|
+
|
|
28
34
|
## Tray-First API
|
|
29
35
|
|
|
30
36
|
For the first app, call `createTray()` directly. The quickstart stays in one file and does not ask the user to wire a worker or a host loop first:
|
|
@@ -106,7 +112,7 @@ without making a menu item the primary route.
|
|
|
106
112
|
|
|
107
113
|
## Runtime Ownership
|
|
108
114
|
|
|
109
|
-
OpenTray does not ask developers to create a public broker object. The application process or an application-owned background service imports `opentray`, calls `createTray()`, owns event handlers
|
|
115
|
+
OpenTray does not ask developers to create a public broker object. The application process or an application-owned background service imports `opentray`, calls `createTray()`, and owns its event handlers. Calling the returned handle's `destroy()` removes the tray and closes the caller-owned broker session; repeated calls share the same teardown. Process exit remains the final fallback rather than a required cleanup mechanism.
|
|
110
116
|
|
|
111
117
|
Platform runtime packages carry the packaged runtime executable at `bin/opentray` or `bin/opentray.exe`.
|
|
112
118
|
|
|
@@ -165,7 +171,8 @@ pnpm --filter opentray example:win32-bug
|
|
|
165
171
|
pnpm --filter opentray example:tray-panel
|
|
166
172
|
pnpm --filter opentray example:placement
|
|
167
173
|
pnpm --filter opentray example:mediaQuery
|
|
168
|
-
|
|
174
|
+
See the independent Lynx repository for its native carrier smoke path:
|
|
175
|
+
https://github.com/jixoai/opentray-ext-lynx
|
|
169
176
|
```
|
|
170
177
|
|
|
171
178
|
The example matrix stages the packaged runtime executable before `first-app`, skips unsupported or missing native extension carrier artifacts with an explicit reason, and labels contributor-only extension rows as `extension-debug-runtime` coverage. The first-app example exercises the default package runtime. The debug-runtime examples exercise the contributor-only source-tree transport for extension and panel iteration. `example:win32-bug` is intentionally outside the finite matrix: it is Windows-only human evidence tooling for WebView2/DWM residue, not an accepted rendering repair. It disables automatic white-block recovery so its one-pixel pulse remains a geometry-only control. The public API demonstrated by the other examples is tray-first: application code creates trays directly and treats background/service lifecycle as application-owned.
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
|
-
import { AppId, AppIdentity, AppOptions, AppRef, BrokerEndpointIdentity, BrokerEndpointIdentityOptions, ClientFrame, ClientFrame as ClientFrame$1, ClientRequestFrame, ClientRequestFrame as ClientRequestFrame$1, DarwinIcon, DarwinIconText, ExtensionEnvelope, ExtensionEnvelope as ExtensionEnvelope$1, Icon, Icon as Icon$1, Icon as TrayIcon, IconCandidates, IconImage, IconText, LinuxIcon, Menu, Menu as Menu$1, MenuItem, MenuItemId, MenuItemId as MenuItemId$1, MouseButton, PROTOCOL_VERSION, Rect, RequestId, ServerFrame, ServerFrame as ServerFrame$1, SimpleIcon, Tooltip, Tooltip as Tooltip$1, Tooltip as TrayTooltip, TrayBoundsKind, TrayBoundsResult, TrayBoundsResult as TrayBoundsResult$1, TrayEvent, TrayEvent as TrayEvent$1, TrayId, TrayId as TrayId$1, TrayOptions, TrayOptions as TrayOptions$1, Win32Icon, createBrokerEndpointIdentity, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion } from "@opentray/spec";
|
|
1
|
+
import { AppId, AppIdentity, AppOptions, AppRef, BrokerEndpointIdentity, BrokerEndpointIdentityOptions, ClientFrame, ClientFrame as ClientFrame$1, ClientRequestFrame, ClientRequestFrame as ClientRequestFrame$1, DarwinIcon, DarwinIconText, ExpectedExtensionIdentity, ExtensionEnvelope, ExtensionEnvelope as ExtensionEnvelope$1, Icon, Icon as Icon$1, Icon as TrayIcon, IconCandidates, IconImage, IconText, LinuxIcon, Menu, Menu as Menu$1, MenuItem, MenuItemId, MenuItemId as MenuItemId$1, MouseButton, PROTOCOL_VERSION, Rect, RequestId, ServerFrame, ServerFrame as ServerFrame$1, SimpleIcon, Tooltip, Tooltip as Tooltip$1, Tooltip as TrayTooltip, TrayBoundsKind, TrayBoundsResult, TrayBoundsResult as TrayBoundsResult$1, TrayEvent, TrayEvent as TrayEvent$1, TrayId, TrayId as TrayId$1, TrayOptions, TrayOptions as TrayOptions$1, Win32Icon, createBrokerEndpointIdentity, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion } from "@opentray/spec";
|
|
2
2
|
|
|
3
|
+
//#region src/native-extension-artifact.d.ts
|
|
4
|
+
type NativeExtensionArch = "arm64" | "x64";
|
|
5
|
+
type NativeExtensionTarget = `${NodeJS.Platform}-${NativeExtensionArch}`;
|
|
6
|
+
interface NativeExtensionPackageTarget {
|
|
7
|
+
packageName: string;
|
|
8
|
+
libraryPath: string;
|
|
9
|
+
}
|
|
10
|
+
interface NativeExtensionIdentitySource {
|
|
11
|
+
packageJsonUrl: string;
|
|
12
|
+
contractManifestUrl: string;
|
|
13
|
+
}
|
|
14
|
+
interface NativeExtensionPackageArtifact extends NativeExtensionIdentitySource {
|
|
15
|
+
kind: "package";
|
|
16
|
+
targets: Partial<Record<NativeExtensionTarget, NativeExtensionPackageTarget>>;
|
|
17
|
+
}
|
|
18
|
+
interface NativeExtensionFileArtifactBase {
|
|
19
|
+
kind: "file";
|
|
20
|
+
path: string;
|
|
21
|
+
}
|
|
22
|
+
type NativeExtensionFileArtifact = NativeExtensionFileArtifactBase & ({
|
|
23
|
+
expectedIdentity: NativeExtensionExpectedIdentity;
|
|
24
|
+
identitySource?: never;
|
|
25
|
+
} | {
|
|
26
|
+
expectedIdentity?: never;
|
|
27
|
+
identitySource: NativeExtensionIdentitySource;
|
|
28
|
+
});
|
|
29
|
+
type NativeExtensionArtifact = NativeExtensionPackageArtifact | NativeExtensionFileArtifact;
|
|
30
|
+
type NativeExtensionExpectedIdentity = ExpectedExtensionIdentity;
|
|
31
|
+
interface ResolvedNativeExtensionArtifact {
|
|
32
|
+
path: string;
|
|
33
|
+
packageName?: string;
|
|
34
|
+
packageVersion?: string;
|
|
35
|
+
expectedIdentity: NativeExtensionExpectedIdentity;
|
|
36
|
+
target: NativeExtensionTarget;
|
|
37
|
+
}
|
|
38
|
+
declare class NativeExtensionArtifactResolutionError extends Error {
|
|
39
|
+
readonly target: NativeExtensionTarget;
|
|
40
|
+
readonly code = "OPENTRAY_NATIVE_EXTENSION_ARTIFACT_RESOLUTION_FAILED";
|
|
41
|
+
readonly packageName?: string;
|
|
42
|
+
readonly facadePackageJsonUrl?: string;
|
|
43
|
+
constructor(message: string, target: NativeExtensionTarget, options?: ErrorOptions & {
|
|
44
|
+
packageName?: string;
|
|
45
|
+
facadePackageJsonUrl?: string;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Resolve one exact native library from the dependency closure that owns the facade. */
|
|
49
|
+
declare const resolveNativeExtensionArtifact: (artifact: NativeExtensionArtifact, platform?: NodeJS.Platform, arch?: string) => Promise<ResolvedNativeExtensionArtifact>;
|
|
50
|
+
//#endregion
|
|
3
51
|
//#region src/client.d.ts
|
|
4
52
|
interface OpenTrayTransport {
|
|
5
53
|
request(frame: ClientRequestFrame$1): Promise<ServerFrame$1>;
|
|
@@ -19,6 +67,7 @@ interface OpenTrayEventfulClient extends OpenTrayClient {
|
|
|
19
67
|
}
|
|
20
68
|
interface TrayHandle {
|
|
21
69
|
trayId: TrayId$1;
|
|
70
|
+
app: AppHandle;
|
|
22
71
|
getBounds(): Promise<TrayBoundsResult$1>;
|
|
23
72
|
setMenu(menu: Menu$1): Promise<void>;
|
|
24
73
|
setTooltip(tooltip: Tooltip$1): Promise<void>;
|
|
@@ -29,6 +78,13 @@ interface TrayHandle {
|
|
|
29
78
|
extend<TCapability extends object, TOptions = undefined>(extension: TrayExtension<TCapability, TOptions>, options?: TOptions): TrayHandle & TCapability;
|
|
30
79
|
destroy(): Promise<void>;
|
|
31
80
|
}
|
|
81
|
+
interface AppHandle {
|
|
82
|
+
readonly appId: string;
|
|
83
|
+
getName(): Promise<string>;
|
|
84
|
+
setName(name: string): Promise<string>;
|
|
85
|
+
getIcon(): Promise<Icon$1 | null>;
|
|
86
|
+
setIcon(icon: Icon$1 | null): Promise<Icon$1 | null>;
|
|
87
|
+
}
|
|
32
88
|
type TrayScopedEvent = Exclude<TrayEvent$1, {
|
|
33
89
|
type: "ready";
|
|
34
90
|
}>;
|
|
@@ -46,19 +102,19 @@ interface EventfulTrayHandle extends TrayHandle {
|
|
|
46
102
|
}
|
|
47
103
|
interface ExtensionLoadOptions {
|
|
48
104
|
name: string;
|
|
49
|
-
|
|
105
|
+
artifact: NativeExtensionArtifact;
|
|
50
106
|
mountId?: string;
|
|
51
107
|
}
|
|
52
108
|
interface TrayExtensionMountSpec {
|
|
53
109
|
name?: string;
|
|
54
|
-
|
|
110
|
+
artifact?: NativeExtensionArtifact;
|
|
55
111
|
mountId?: string;
|
|
56
112
|
}
|
|
57
113
|
interface TrayExtensionContext {
|
|
58
114
|
readonly appId: string;
|
|
59
115
|
readonly trayId: TrayId$1;
|
|
60
116
|
readonly name: string;
|
|
61
|
-
readonly
|
|
117
|
+
readonly artifact: NativeExtensionArtifact;
|
|
62
118
|
readonly mountId: string;
|
|
63
119
|
ensureLoaded(): Promise<void>;
|
|
64
120
|
command(data: unknown): Promise<void>;
|
|
@@ -66,13 +122,17 @@ interface TrayExtensionContext {
|
|
|
66
122
|
}
|
|
67
123
|
interface TrayExtension<TCapability extends object, TOptions = undefined> {
|
|
68
124
|
readonly name: string;
|
|
69
|
-
readonly
|
|
125
|
+
readonly artifact: NativeExtensionArtifact;
|
|
70
126
|
resolveMount?(options: TOptions | undefined): TrayExtensionMountSpec;
|
|
71
127
|
extend(tray: TrayHandle, context: TrayExtensionContext, options: TOptions | undefined): TCapability;
|
|
72
128
|
}
|
|
73
129
|
declare const createInitFrame: (clientVersion: string) => ClientFrame$1;
|
|
74
130
|
interface CreateClientOptions {
|
|
75
131
|
requestIdPrefix?: string;
|
|
132
|
+
appOptions?: {
|
|
133
|
+
name?: string;
|
|
134
|
+
icon?: Icon$1;
|
|
135
|
+
};
|
|
76
136
|
}
|
|
77
137
|
declare function createClient(transport: OpenTrayConnection, options?: CreateClientOptions): OpenTrayEventfulClient;
|
|
78
138
|
declare function createClient(transport: OpenTrayTransport, options?: CreateClientOptions): OpenTrayClient;
|
|
@@ -132,6 +192,7 @@ interface OpenTrayRuntimeOptions {
|
|
|
132
192
|
clientVersion?: string;
|
|
133
193
|
appId?: string;
|
|
134
194
|
appName?: string;
|
|
195
|
+
appIcon?: Icon$1;
|
|
135
196
|
autoStart?: boolean;
|
|
136
197
|
}
|
|
137
198
|
/** App-facing tray options accepted by top-level createTray. */
|
|
@@ -141,7 +202,7 @@ interface CreateTrayOptions {
|
|
|
141
202
|
icon?: Icon$1;
|
|
142
203
|
menu?: CreateTrayMenu;
|
|
143
204
|
}
|
|
144
|
-
/** Tray handle returned by top-level createTray with ergonomic
|
|
205
|
+
/** Tray handle returned by top-level createTray with ergonomic menu and session ownership. */
|
|
145
206
|
interface CreateTrayHandle extends Omit<EventfulTrayHandle, "setMenu" | "extend" | "destroy"> {
|
|
146
207
|
setMenu(menu: CreateTrayMenu): Promise<void>;
|
|
147
208
|
extend<TCapability extends object, TOptions = undefined>(extension: TrayExtension<TCapability, TOptions>, options?: TOptions): CreateTrayHandle & TCapability;
|
|
@@ -149,5 +210,5 @@ interface CreateTrayHandle extends Omit<EventfulTrayHandle, "setMenu" | "extend"
|
|
|
149
210
|
}
|
|
150
211
|
declare const createTray: (options: CreateTrayOptions, runtimeOptions?: OpenTrayRuntimeOptions) => Promise<CreateTrayHandle>;
|
|
151
212
|
//#endregion
|
|
152
|
-
export { type AppId, type AppIdentity, type AppOptions, type AppRef, type BrokerEndpointIdentity, type BrokerEndpointIdentityOptions, type ClientFrame, type ClientRequestFrame, type CreateClientOptions, type CreateTrayCheckItem, type CreateTrayHandle, type CreateTrayItem, type CreateTrayMenu, type CreateTrayMenu as TrayMenu, type CreateTrayMenuClickHandler, type CreateTrayMenuItem, type CreateTrayOptions, type CreateTrayRadioItem, type CreateTraySeparatorItem, type CreateTraySubmenuItem, type DarwinIcon, type DarwinIconText, type EventfulTrayHandle, type ExtensionEnvelope, type ExtensionLoadOptions, type Icon, type IconCandidates, type IconImage, type IconText, type LinuxIcon, type Menu, type MenuItem, type MenuItemId, type MouseButton, type OpenTrayClient, type OpenTrayConnection, type OpenTrayEventFrame, type OpenTrayEventSource, type OpenTrayRuntimeOptions, type OpenTrayTransport, PROTOCOL_VERSION, type Rect, type ServerFrame, type SimpleIcon, type Tooltip, type TrayBoundsKind, type TrayBoundsResult, type TrayEvent, type TrayEventByType, type TrayEventType, type TrayExtension, type TrayExtensionContext, type TrayExtensionMountSpec, type TrayHandle, type TrayIcon, type TrayId, type TrayOptions, type TrayTooltip, type Win32Icon, createBrokerEndpointIdentity, createClient, createInitFrame, createTray, createTrayHandle, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion };
|
|
213
|
+
export { type AppHandle, type AppId, type AppIdentity, type AppOptions, type AppRef, type BrokerEndpointIdentity, type BrokerEndpointIdentityOptions, type ClientFrame, type ClientRequestFrame, type CreateClientOptions, type CreateTrayCheckItem, type CreateTrayHandle, type CreateTrayItem, type CreateTrayMenu, type CreateTrayMenu as TrayMenu, type CreateTrayMenuClickHandler, type CreateTrayMenuItem, type CreateTrayOptions, type CreateTrayRadioItem, type CreateTraySeparatorItem, type CreateTraySubmenuItem, type DarwinIcon, type DarwinIconText, type EventfulTrayHandle, type ExtensionEnvelope, type ExtensionLoadOptions, type Icon, type IconCandidates, type IconImage, type IconText, type LinuxIcon, type Menu, type MenuItem, type MenuItemId, type MouseButton, type NativeExtensionArch, type NativeExtensionArtifact, NativeExtensionArtifactResolutionError, type NativeExtensionExpectedIdentity, type NativeExtensionFileArtifact, type NativeExtensionIdentitySource, type NativeExtensionPackageArtifact, type NativeExtensionPackageTarget, type NativeExtensionTarget, type OpenTrayClient, type OpenTrayConnection, type OpenTrayEventFrame, type OpenTrayEventSource, type OpenTrayRuntimeOptions, type OpenTrayTransport, PROTOCOL_VERSION, type Rect, type ResolvedNativeExtensionArtifact, type ServerFrame, type SimpleIcon, type Tooltip, type TrayBoundsKind, type TrayBoundsResult, type TrayEvent, type TrayEventByType, type TrayEventType, type TrayExtension, type TrayExtensionContext, type TrayExtensionMountSpec, type TrayHandle, type TrayIcon, type TrayId, type TrayOptions, type TrayTooltip, type Win32Icon, createBrokerEndpointIdentity, createClient, createInitFrame, createTray, createTrayHandle, formatBrokerEndpointName, formatBrokerStateRoot, formatUnixSocketPath, formatWindowsPipeName, isSupportedProtocolVersion, resolveNativeExtensionArtifact };
|
|
153
214
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.ts","../src/menu-input.ts","../src/sdk.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/native-extension-artifact.ts","../src/client.ts","../src/menu-input.ts","../src/sdk.ts"],"mappings":"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"}
|