import { GPGME_Message } from "./Message";
/* gpgme.js - Javascript integration for gpgme
* Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
*
* This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, see .
* SPDX-License-Identifier: LGPL-2.1+
*/
/**
* A connection port will be opened for each communication between gpgmejs and
* gnupg. It should be alive as long as there are additional messages to be
* expected.
*/
import { permittedOperations } from './permittedOperations'
import { GPGMEJS_Error} from "./Errors"
/**
* A Connection handles the nativeMessaging interaction.
*/
export class Connection{
constructor(){
this.connect();
}
/**
* Immediately closes the open port.
*/
disconnect() {
if (this._connection){
this._connection.disconnect();
}
}
/**
* Opens a nativeMessaging port.
* returns nothing, but triggers errors if not successfull:
* NO_CONNECT: connection not successfull, chrome.runtime.lastError may be
* available
* ALREADY_CONNECTED: There is already a connection present.
*/
connect(){
if (this._connection){
return new GPGMEJS_Error('ALREADY_CONNECTED');
}
this._connection = chrome.runtime.connectNative('gpgmejson');
if (!this._connection){
return new GPGMEJS_Error('NO_CONNECT');
}
}
/**
* checks if the connection is established
* TODO: some kind of ping to see if the other side responds as expected?
* @returns {Boolean}
*/
get connected(){
return this._connection ? true: false;
}
/**
* Sends a message and resolves with the answer.
* @param {GPGME_Message} message
* @returns {Promise