@companion-module/host 0.1.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/dist/__tests__/ipc-wrapper.spec.d.ts +2 -0
- package/dist/__tests__/ipc-wrapper.spec.d.ts.map +1 -0
- package/dist/__tests__/ipc-wrapper.spec.js +272 -0
- package/dist/__tests__/ipc-wrapper.spec.js.map +1 -0
- package/dist/api.d.ts +360 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +8 -0
- package/dist/api.js.map +1 -0
- package/dist/context.d.ts +125 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +2 -0
- package/dist/context.js.map +1 -0
- package/dist/instance.d.ts +51 -0
- package/dist/instance.d.ts.map +1 -0
- package/dist/instance.js +317 -0
- package/dist/instance.js.map +1 -0
- package/dist/internal/__tests__/feedback.spec.d.ts +2 -0
- package/dist/internal/__tests__/feedback.spec.d.ts.map +1 -0
- package/dist/internal/__tests__/feedback.spec.js +686 -0
- package/dist/internal/__tests__/feedback.spec.js.map +1 -0
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.d.ts +2 -0
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.d.ts.map +1 -0
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.js +119 -0
- package/dist/internal/__tests__/serializeIsVisibleFn.spec.js.map +1 -0
- package/dist/internal/__tests__/upgrade.spec.d.ts +2 -0
- package/dist/internal/__tests__/upgrade.spec.d.ts.map +1 -0
- package/dist/internal/__tests__/upgrade.spec.js +280 -0
- package/dist/internal/__tests__/upgrade.spec.js.map +1 -0
- package/dist/internal/actions.d.ts +16 -0
- package/dist/internal/actions.d.ts.map +1 -0
- package/dist/internal/actions.js +212 -0
- package/dist/internal/actions.js.map +1 -0
- package/dist/internal/base.d.ts +4 -0
- package/dist/internal/base.d.ts.map +1 -0
- package/dist/internal/base.js +31 -0
- package/dist/internal/base.js.map +1 -0
- package/dist/internal/feedback.d.ts +19 -0
- package/dist/internal/feedback.d.ts.map +1 -0
- package/dist/internal/feedback.js +296 -0
- package/dist/internal/feedback.js.map +1 -0
- package/dist/internal/upgrade.d.ts +15 -0
- package/dist/internal/upgrade.d.ts.map +1 -0
- package/dist/internal/upgrade.js +168 -0
- package/dist/internal/upgrade.js.map +1 -0
- package/dist/ipc-wrapper.d.ts +37 -0
- package/dist/ipc-wrapper.d.ts.map +1 -0
- package/dist/ipc-wrapper.js +123 -0
- package/dist/ipc-wrapper.js.map +1 -0
- package/dist/logging.d.ts +3 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +4 -0
- package/dist/logging.js.map +1 -0
- package/dist/main.d.ts +5 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +5 -0
- package/dist/main.js.map +1 -0
- package/dist/plugin.d.ts +25 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +301 -0
- package/dist/plugin.js.map +1 -0
- package/dist/versions.d.ts +10 -0
- package/dist/versions.d.ts.map +1 -0
- package/dist/versions.js +2 -0
- package/dist/versions.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { literal, } from '@companion-module/base';
|
|
2
|
+
/**
|
|
3
|
+
* Run through the upgrade scripts for the given data
|
|
4
|
+
* Note: this updates the inputs in place, but the result needs to be sent back to companion
|
|
5
|
+
* @param allActions Actions that may need upgrading
|
|
6
|
+
* @param allFeedbacks Feedbacks that may need upgrading
|
|
7
|
+
* @param defaultUpgradeIndex The lastUpgradeIndex of the connection, if known
|
|
8
|
+
* @param upgradeScripts The scripts that may be run
|
|
9
|
+
* @param config The current config of the module
|
|
10
|
+
* @param skipConfigAndSecretsUpgrade Whether to skip upgrading the config and secrets
|
|
11
|
+
* @returns The upgraded data that needs persisting
|
|
12
|
+
*/
|
|
13
|
+
export function runThroughUpgradeScripts(allActionsArray, allFeedbacksArray, defaultUpgradeIndex, upgradeScripts, config, secrets, skipConfigAndSecretsUpgrade) {
|
|
14
|
+
// First we group all the actions and feedbacks by the version they currently are.
|
|
15
|
+
const pendingUpgradesGrouped = new Map();
|
|
16
|
+
const getPendingUpgradeGroup = (i) => {
|
|
17
|
+
let v = pendingUpgradesGrouped.get(i);
|
|
18
|
+
if (!v) {
|
|
19
|
+
v = { actions: [], feedbacks: [], config: false };
|
|
20
|
+
pendingUpgradesGrouped.set(i, v);
|
|
21
|
+
}
|
|
22
|
+
return v;
|
|
23
|
+
};
|
|
24
|
+
for (const action of allActionsArray) {
|
|
25
|
+
const upgradeIndex = action?.upgradeIndex ?? defaultUpgradeIndex;
|
|
26
|
+
if (action && typeof upgradeIndex === 'number') {
|
|
27
|
+
const pending = getPendingUpgradeGroup(upgradeIndex);
|
|
28
|
+
pending.actions.push(action.id);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (const feedback of allFeedbacksArray) {
|
|
32
|
+
const upgradeIndex = feedback?.upgradeIndex ?? defaultUpgradeIndex;
|
|
33
|
+
if (feedback && typeof upgradeIndex === 'number') {
|
|
34
|
+
const pending = getPendingUpgradeGroup(upgradeIndex);
|
|
35
|
+
pending.feedbacks.push(feedback.id);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!skipConfigAndSecretsUpgrade) {
|
|
39
|
+
// If there is config we still need to upgrade that
|
|
40
|
+
for (let i = defaultUpgradeIndex ?? -1; i < upgradeScripts.length; i++) {
|
|
41
|
+
// ensure the group is registered
|
|
42
|
+
getPendingUpgradeGroup(i).config = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const allActions = Object.fromEntries(allActionsArray.map((a) => [a.id, a]));
|
|
46
|
+
const allFeedbacks = Object.fromEntries(allFeedbacksArray.map((a) => [a.id, a]));
|
|
47
|
+
const updatedFeedbacks = {};
|
|
48
|
+
const updatedActions = {};
|
|
49
|
+
let updatedConfig;
|
|
50
|
+
let updatedSecrets;
|
|
51
|
+
if (pendingUpgradesGrouped.size > 0) {
|
|
52
|
+
// Figure out which script to run first. Note: we track the last index we ran, so it is offset by one
|
|
53
|
+
const pendingUpgradeGroups = Array.from(pendingUpgradesGrouped.keys()).sort();
|
|
54
|
+
const firstUpgradeGroup = Math.min(...pendingUpgradeGroups, defaultUpgradeIndex ?? -1) + 1;
|
|
55
|
+
// Start building arrays of the ids which we are upgrading as we go
|
|
56
|
+
const actionsIdsToUpgrade = [];
|
|
57
|
+
const feedbackIdsToUpgrade = [];
|
|
58
|
+
// Perform the upgrades. We start on the first batch/instance, and work our way up to the last
|
|
59
|
+
const targetCount = upgradeScripts.length;
|
|
60
|
+
for (let i = firstUpgradeGroup; i < targetCount; i++) {
|
|
61
|
+
const group = pendingUpgradesGrouped.get(i - 1);
|
|
62
|
+
if (group) {
|
|
63
|
+
// Update the list of objects that need upgrading
|
|
64
|
+
actionsIdsToUpgrade.push(...group.actions);
|
|
65
|
+
feedbackIdsToUpgrade.push(...group.feedbacks);
|
|
66
|
+
}
|
|
67
|
+
// Only upgrade the config, if we are past the last version we had for it
|
|
68
|
+
const upgradeConfigAndSecrets = !!group?.config;
|
|
69
|
+
// Ensure there is something to upgrade
|
|
70
|
+
if (!upgradeConfigAndSecrets && actionsIdsToUpgrade.length === 0 && feedbackIdsToUpgrade.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
const inputConfig = updatedConfig ?? config;
|
|
73
|
+
const inputSecrets = updatedSecrets ?? secrets;
|
|
74
|
+
// We have an upgrade script that can be run
|
|
75
|
+
const fcn = upgradeScripts[i];
|
|
76
|
+
const res = fcn({
|
|
77
|
+
// Pass a clone to avoid mutations
|
|
78
|
+
currentConfig: structuredClone(inputConfig),
|
|
79
|
+
}, {
|
|
80
|
+
config: upgradeConfigAndSecrets ? inputConfig : null,
|
|
81
|
+
secrets: upgradeConfigAndSecrets ? inputSecrets : null,
|
|
82
|
+
// Only pass the actions & feedbacks which need upgrading from this version
|
|
83
|
+
actions: actionsIdsToUpgrade
|
|
84
|
+
.map((id) => {
|
|
85
|
+
const inst = allActions[id];
|
|
86
|
+
if (inst) {
|
|
87
|
+
return literal({
|
|
88
|
+
id: inst.id,
|
|
89
|
+
controlId: inst.controlId,
|
|
90
|
+
actionId: inst.actionId,
|
|
91
|
+
options: inst.options !== undefined ? structuredClone(inst.options) : {},
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
.filter((v) => !!v),
|
|
96
|
+
feedbacks: feedbackIdsToUpgrade
|
|
97
|
+
.map((id) => {
|
|
98
|
+
const inst = allFeedbacks[id];
|
|
99
|
+
if (inst) {
|
|
100
|
+
return literal({
|
|
101
|
+
id: inst.id,
|
|
102
|
+
controlId: inst.controlId,
|
|
103
|
+
feedbackId: inst.feedbackId,
|
|
104
|
+
options: inst.options !== undefined ? structuredClone(inst.options) : {},
|
|
105
|
+
// TODO - style?
|
|
106
|
+
isInverted: inst.isInverted,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
.filter((v) => !!v),
|
|
111
|
+
});
|
|
112
|
+
// Apply changes
|
|
113
|
+
if (upgradeConfigAndSecrets && res.updatedConfig)
|
|
114
|
+
updatedConfig = res.updatedConfig;
|
|
115
|
+
if (upgradeConfigAndSecrets && res.updatedSecrets)
|
|
116
|
+
updatedSecrets = res.updatedSecrets;
|
|
117
|
+
for (const action of res.updatedActions) {
|
|
118
|
+
if (action) {
|
|
119
|
+
const instance = allActions[action.id];
|
|
120
|
+
if (instance) {
|
|
121
|
+
instance.actionId = action.actionId;
|
|
122
|
+
instance.options = action.options;
|
|
123
|
+
instance.upgradeIndex = i;
|
|
124
|
+
// Mark it as changed
|
|
125
|
+
updatedActions[action.id] = instance;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (const feedback of res.updatedFeedbacks) {
|
|
130
|
+
if (feedback) {
|
|
131
|
+
const instance = allFeedbacks[feedback.id];
|
|
132
|
+
if (instance) {
|
|
133
|
+
instance.feedbackId = feedback.feedbackId;
|
|
134
|
+
instance.options = feedback.options;
|
|
135
|
+
instance.upgradeIndex = i;
|
|
136
|
+
// Mark it as changed
|
|
137
|
+
updatedFeedbacks[feedback.id] = {
|
|
138
|
+
...instance,
|
|
139
|
+
style: updatedFeedbacks[feedback.id]?.style ?? feedback.style,
|
|
140
|
+
isInverted: feedback.isInverted ?? false,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Make sure that everything with a upgradeIndex set is sent back
|
|
147
|
+
for (const [id, action] of Object.entries(allActions)) {
|
|
148
|
+
if (!updatedActions[id] && typeof action?.upgradeIndex === 'number') {
|
|
149
|
+
// Send it back to acknowledge that it has been 'upgraded'
|
|
150
|
+
updatedActions[id] = action;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
for (const [id, feedback] of Object.entries(allFeedbacks)) {
|
|
154
|
+
if (!updatedFeedbacks[id] && typeof feedback?.upgradeIndex === 'number') {
|
|
155
|
+
// Send it back to acknowledge that it has been 'upgraded'
|
|
156
|
+
updatedFeedbacks[id] = feedback;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
updatedActions: Object.values(updatedActions),
|
|
162
|
+
updatedFeedbacks: Object.values(updatedFeedbacks),
|
|
163
|
+
updatedConfig,
|
|
164
|
+
updatedSecrets,
|
|
165
|
+
latestUpgradeIndex: upgradeScripts.length - 1,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/internal/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signature for the handler functions
|
|
3
|
+
*/
|
|
4
|
+
type HandlerFunction<T extends (...args: any) => any> = (data: Parameters<T>[0]) => HandlerReturnType<T>;
|
|
5
|
+
type HandlerReturnType<T extends (...args: any) => any> = ReturnType<T> extends never ? Promise<void> : Promise<ReturnType<T>>;
|
|
6
|
+
type HandlerFunctionOrNever<T> = T extends (...args: any) => any ? HandlerFunction<T> : never;
|
|
7
|
+
/** Map of handler functions */
|
|
8
|
+
export type IpcEventHandlers<T extends object> = {
|
|
9
|
+
[K in keyof T]: HandlerFunctionOrNever<T[K]>;
|
|
10
|
+
};
|
|
11
|
+
type ParamsIfReturnIsNever<T extends (...args: any[]) => any> = ReturnType<T> extends never ? Parameters<T> : never;
|
|
12
|
+
type ParamsIfReturnIsValid<T extends (...args: any[]) => any> = ReturnType<T> extends never ? never : Parameters<T>;
|
|
13
|
+
export interface IpcCallMessagePacket {
|
|
14
|
+
direction: 'call';
|
|
15
|
+
name: string;
|
|
16
|
+
payload: string;
|
|
17
|
+
callbackId: number | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface IpcResponseMessagePacket {
|
|
20
|
+
direction: 'response';
|
|
21
|
+
callbackId: number;
|
|
22
|
+
success: boolean;
|
|
23
|
+
payload: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class IpcWrapper<TOutbound extends {
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}, TInbound extends {
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
}> {
|
|
30
|
+
#private;
|
|
31
|
+
constructor(handlers: IpcEventHandlers<TInbound>, sendMessage: (message: IpcCallMessagePacket | IpcResponseMessagePacket) => void, defaultTimeout: number);
|
|
32
|
+
sendWithCb<T extends keyof TOutbound>(name: T, msg: ParamsIfReturnIsValid<TOutbound[T]>[0], defaultResponse?: () => Error, timeout?: number): Promise<ReturnType<TOutbound[T]>>;
|
|
33
|
+
sendWithNoCb<T extends keyof TOutbound>(name: T, msg: ParamsIfReturnIsNever<TOutbound[T]>[0]): void;
|
|
34
|
+
receivedMessage(msg: IpcCallMessagePacket | IpcResponseMessagePacket): void;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=ipc-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-wrapper.d.ts","sourceRoot":"","sources":["../src/ipc-wrapper.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAExG,KAAK,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IACrD,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAErE,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAE7F,+BAA+B;AAC/B,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI;KAC/C,CAAC,IAAI,MAAM,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAA;AAED,KAAK,qBAAqB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AACnH,KAAK,qBAAqB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;AAEnH,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B;AACD,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,UAAU,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CACf;AAQD,qBAAa,UAAU,CAAC,SAAS,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,QAAQ,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE;;gBASvG,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACpC,WAAW,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,wBAAwB,KAAK,IAAI,EAC/E,cAAc,EAAE,MAAM;IAOjB,UAAU,CAAC,CAAC,SAAS,MAAM,SAAS,EACzC,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3C,eAAe,CAAC,EAAE,MAAM,KAAK,EAC7B,OAAO,SAAI,GACT,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAgCpC,YAAY,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IASnG,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,wBAAwB,GAAG,IAAI;CA+E3E"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { assertNever } from '@companion-module/base';
|
|
2
|
+
import ejson from 'ejson';
|
|
3
|
+
const MAX_CALLBACK_ID = 1 << 28;
|
|
4
|
+
export class IpcWrapper {
|
|
5
|
+
#handlers;
|
|
6
|
+
#sendMessage;
|
|
7
|
+
#defaultTimeout;
|
|
8
|
+
#nextCallbackId = 1;
|
|
9
|
+
#pendingCallbacks = new Map();
|
|
10
|
+
constructor(handlers, sendMessage, defaultTimeout) {
|
|
11
|
+
this.#handlers = handlers;
|
|
12
|
+
this.#sendMessage = sendMessage;
|
|
13
|
+
this.#defaultTimeout = defaultTimeout;
|
|
14
|
+
}
|
|
15
|
+
async sendWithCb(name, msg, defaultResponse, timeout = 0) {
|
|
16
|
+
if (timeout <= 0)
|
|
17
|
+
timeout = this.#defaultTimeout;
|
|
18
|
+
const callbacks = { timeout: undefined, resolve: () => null, reject: () => null };
|
|
19
|
+
const promise = new Promise((resolve, reject) => {
|
|
20
|
+
callbacks.resolve = resolve;
|
|
21
|
+
callbacks.reject = reject;
|
|
22
|
+
});
|
|
23
|
+
// Reset the id when it gets really high
|
|
24
|
+
if (this.#nextCallbackId > MAX_CALLBACK_ID)
|
|
25
|
+
this.#nextCallbackId = 1;
|
|
26
|
+
const id = this.#nextCallbackId++;
|
|
27
|
+
this.#pendingCallbacks.set(id, callbacks);
|
|
28
|
+
this.#sendMessage({
|
|
29
|
+
direction: 'call',
|
|
30
|
+
name: String(name),
|
|
31
|
+
payload: ejson.stringify(msg),
|
|
32
|
+
callbackId: id,
|
|
33
|
+
});
|
|
34
|
+
// Setup a timeout, creating the error in the call, so that the stack trace is useful
|
|
35
|
+
const timeoutError = new Error('Call timed out');
|
|
36
|
+
callbacks.timeout = setTimeout(() => {
|
|
37
|
+
callbacks.reject(defaultResponse ? defaultResponse() : timeoutError);
|
|
38
|
+
this.#pendingCallbacks.delete(id);
|
|
39
|
+
}, timeout);
|
|
40
|
+
return promise;
|
|
41
|
+
}
|
|
42
|
+
sendWithNoCb(name, msg) {
|
|
43
|
+
this.#sendMessage({
|
|
44
|
+
direction: 'call',
|
|
45
|
+
name: String(name),
|
|
46
|
+
payload: ejson.stringify(msg),
|
|
47
|
+
callbackId: undefined,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
receivedMessage(msg) {
|
|
51
|
+
const rawMsg = msg;
|
|
52
|
+
switch (msg.direction) {
|
|
53
|
+
case 'call': {
|
|
54
|
+
const handler = this.#handlers[msg.name];
|
|
55
|
+
if (!handler) {
|
|
56
|
+
if (msg.callbackId) {
|
|
57
|
+
this.#sendMessage({
|
|
58
|
+
direction: 'response',
|
|
59
|
+
callbackId: msg.callbackId,
|
|
60
|
+
success: false,
|
|
61
|
+
payload: ejson.stringify({ message: `Unknown command "${msg.name}"` }),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// TODO - should anything be logged here?
|
|
67
|
+
const data = msg.payload ? ejson.parse(msg.payload) : undefined;
|
|
68
|
+
handler(data).then((res) => {
|
|
69
|
+
if (msg.callbackId) {
|
|
70
|
+
this.#sendMessage({
|
|
71
|
+
direction: 'response',
|
|
72
|
+
callbackId: msg.callbackId,
|
|
73
|
+
success: true,
|
|
74
|
+
payload: ejson.stringify(res),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}, (err) => {
|
|
78
|
+
if (msg.callbackId) {
|
|
79
|
+
this.#sendMessage({
|
|
80
|
+
direction: 'response',
|
|
81
|
+
callbackId: msg.callbackId,
|
|
82
|
+
success: false,
|
|
83
|
+
payload: err instanceof Error ? JSON.stringify(err, Object.getOwnPropertyNames(err)) : ejson.stringify(err),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'response': {
|
|
90
|
+
if (!msg.callbackId) {
|
|
91
|
+
console.error(`Ipc: Response message has no callbackId`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const callbacks = this.#pendingCallbacks.get(msg.callbackId);
|
|
95
|
+
this.#pendingCallbacks.delete(msg.callbackId);
|
|
96
|
+
if (!callbacks) {
|
|
97
|
+
// Likely timed out, we should ignore
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
clearTimeout(callbacks.timeout);
|
|
101
|
+
const data = msg.payload ? ejson.parse(msg.payload) : undefined;
|
|
102
|
+
if (msg.success) {
|
|
103
|
+
callbacks.resolve(data);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
let err = data;
|
|
107
|
+
if (data && typeof data === 'object' && 'message' in data) {
|
|
108
|
+
err = new Error(data.message);
|
|
109
|
+
if (data.stack)
|
|
110
|
+
err.stack = data.stack;
|
|
111
|
+
}
|
|
112
|
+
callbacks.reject(err);
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
default:
|
|
117
|
+
assertNever(msg);
|
|
118
|
+
console.error(`Ipc: Message of unknown direction "${rawMsg.direction}"`);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=ipc-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipc-wrapper.js","sourceRoot":"","sources":["../src/ipc-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAE3D"}
|
package/dist/logging.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACpD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAA;AAC7B,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAE5B,cAAc,wBAAwB,CAAA"}
|
package/dist/main.js
ADDED
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAE5B,cAAc,wBAAwB,CAAA"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type RemoteSurfaceConnectionInfo, type HIDDevice, type SurfaceDrawProps, type SurfacePlugin } from '@companion-surface/base';
|
|
2
|
+
import type { SurfaceHostContext } from './context.js';
|
|
3
|
+
import type { PluginFeatures, CheckDeviceResult, OpenDeviceResult } from './types.js';
|
|
4
|
+
export declare class PluginWrapper<TInfo = unknown> {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(host: SurfaceHostContext, plugin: SurfacePlugin<TInfo>);
|
|
7
|
+
getPluginFeatures(): PluginFeatures;
|
|
8
|
+
init(): Promise<void>;
|
|
9
|
+
destroy(): Promise<void>;
|
|
10
|
+
checkHidDevice(hidDevice: HIDDevice): Promise<CheckDeviceResult | null>;
|
|
11
|
+
openHidDevice(hidDevice: HIDDevice): Promise<OpenDeviceResult | null>;
|
|
12
|
+
scanForDevices(): Promise<CheckDeviceResult[]>;
|
|
13
|
+
openScannedDevice(device: CheckDeviceResult): Promise<OpenDeviceResult | null>;
|
|
14
|
+
setBrightness(surfaceId: string, brightness: number): Promise<void>;
|
|
15
|
+
blankSurface(surfaceId: string): Promise<void>;
|
|
16
|
+
updateConfig(surfaceId: string, config: Record<string, any>): Promise<void>;
|
|
17
|
+
readySurface(surfaceId: string, config: Record<string, any>): Promise<void>;
|
|
18
|
+
draw(surfaceId: string, drawProps: SurfaceDrawProps[]): Promise<void>;
|
|
19
|
+
onVariableValue(surfaceId: string, name: string, value: any): Promise<void>;
|
|
20
|
+
showLockedStatus(surfaceId: string, locked: boolean, characterCount: number): Promise<void>;
|
|
21
|
+
showStatus(surfaceId: string, hostname: string, status: string): Promise<void>;
|
|
22
|
+
setupRemoteConnections(connectionInfos: RemoteSurfaceConnectionInfo[]): Promise<void>;
|
|
23
|
+
stopRemoteConnections(connectionIds: string[]): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,2BAA2B,EAEhC,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAGrF,qBAAa,aAAa,CAAC,KAAK,GAAG,OAAO;;gBAS7B,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC;IAQlE,iBAAiB,IAAI,cAAc;IAc7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBxB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAkBvE,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAiGrE,cAAc,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAuB9C,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkC9E,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3E,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3E,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3E,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3F,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9E,sBAAsB,CAAC,eAAe,EAAE,2BAA2B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrF,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAUnE"}
|