Skip to content

Commit

Permalink
Fix floating promises originating from index.js
Browse files Browse the repository at this point in the history
  • Loading branch information
Nerivec committed Jun 5, 2024
1 parent cdfbb17 commit 1d40c1c
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 14 deletions.
20 changes: 11 additions & 9 deletions lib/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ const AllExtensions = [
];

type ExtensionArgs = [Zigbee, MQTT, State, PublishEntityState, EventBus,
(enable: boolean, name: string) => Promise<void>, () => void, (extension: Extension) => Promise<void>];
enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>,
addExtension: (extension: Extension) => Promise<void>];

// eslint-disable-next-line @typescript-eslint/no-explicit-any
let sdNotify: any = null;
Expand All @@ -54,12 +55,12 @@ export class Controller {
private zigbee: Zigbee;
private state: State;
private mqtt: MQTT;
private restartCallback: () => void;
private exitCallback: (code: number, restart: boolean) => void;
private restartCallback: () => Promise<void>;
private exitCallback: (code: number, restart: boolean) => Promise<void>;
private extensions: Extension[];
private extensionArgs: ExtensionArgs;

constructor(restartCallback: () => void, exitCallback: (code: number, restart: boolean) => void) {
constructor(restartCallback: () => Promise<void>, exitCallback: (code: number, restart: boolean) => Promise<void>) {
logger.init();
zhSetLogger(logger);
zhcSetLogger(logger);
Expand Down Expand Up @@ -113,7 +114,7 @@ export class Controller {
logger.error('Check https://www.zigbee2mqtt.io/guide/installation/20_zigbee2mqtt-fails-to-start.html for possible solutions'); /* eslint-disable-line max-len */
logger.error('Exiting...');
logger.error(error.stack);
await this.exit(1);
return this.exit(1);
}

// Disable some legacy options on new network creation
Expand Down Expand Up @@ -154,7 +155,7 @@ export class Controller {
} catch (error) {
logger.error(`MQTT failed to connect, exiting...`);
await this.zigbee.stop();
await this.exit(1);
return this.exit(1);
}

// Call extensions
Expand Down Expand Up @@ -212,22 +213,23 @@ export class Controller {
// Wrap-up
this.state.stop();
await this.mqtt.disconnect();
let code = 0;

try {
await this.zigbee.stop();
logger.info('Stopped Zigbee2MQTT');
await this.exit(0, restart);
} catch (error) {
logger.error('Failed to stop Zigbee2MQTT');
await this.exit(1, restart);
code = 1;
}

sdNotify?.stopWatchdogMode();
return this.exit(code, restart);
}

async exit(code: number, restart = false): Promise<void> {
await logger.end();
this.exitCallback(code, restart);
return this.exitCallback(code, restart);
}

@bind async onZigbeeAdapterDisconnected(): Promise<void> {
Expand Down
4 changes: 2 additions & 2 deletions lib/extension/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ abstract class Extension {
protected publishEntityState: PublishEntityState;
protected eventBus: EventBus;
protected enableDisableExtension: (enable: boolean, name: string) => Promise<void>;
protected restartCallback: () => void;
protected restartCallback: () => Promise<void>;
protected addExtension: (extension: Extension) => Promise<void>;

/**
Expand All @@ -22,7 +22,7 @@ abstract class Extension {
*/
constructor(zigbee: Zigbee, mqtt: MQTT, state: State, publishEntityState: PublishEntityState,
eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>,
restartCallback: () => void, addExtension: (extension: Extension) => Promise<void>) {
restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>) {
this.zigbee = zigbee;
this.mqtt = mqtt;
this.state = state;
Expand Down
2 changes: 1 addition & 1 deletion lib/extension/externalConverters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import logger from '../util/logger';
export default class ExternalConverters extends Extension {
constructor(zigbee: Zigbee, mqtt: MQTT, state: State, publishEntityState: PublishEntityState,
eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>,
restartCallback: () => void, addExtension: (extension: Extension) => Promise<void>) {
restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>) {
super(zigbee, mqtt, state, publishEntityState, eventBus, enableDisableExtension, restartCallback, addExtension);

for (const file of settings.get().external_converters) {
Expand Down
2 changes: 1 addition & 1 deletion lib/extension/frontend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export default class Frontend extends Extension {

constructor(zigbee: Zigbee, mqtt: MQTT, state: State, publishEntityState: PublishEntityState,
eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>,
restartCallback: () => void, addExtension: (extension: Extension) => Promise<void>) {
restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>) {
super(zigbee, mqtt, state, publishEntityState, eventBus, enableDisableExtension, restartCallback, addExtension);
this.eventBus.onMQTTMessagePublished(this, this.onMQTTPublishMessage);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/extension/homeassistant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ export default class HomeAssistant extends Extension {

constructor(zigbee: Zigbee, mqtt: MQTT, state: State, publishEntityState: PublishEntityState,
eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>,
restartCallback: () => void, addExtension: (extension: Extension) => Promise<void>) {
restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>) {
super(zigbee, mqtt, state, publishEntityState, eventBus, enableDisableExtension, restartCallback, addExtension);
if (settings.get().advanced.output === 'attribute') {
throw new Error('Home Assistant integration is not possible with attribute output!');
Expand Down

0 comments on commit 1d40c1c

Please sign in to comment.