@iotize/tap
Version:
IoTize Device client for Javascript
565 lines • 19.9 kB
JavaScript
import { SERVICE_CALLS } from './service-calls';
import { AbstractService } from '@iotize/tap';
export class MqttService extends AbstractService {
constructor() {
super(...arguments);
this.resources = SERVICE_CALLS;
}
/**
* Get mqtt relay client id
*
* LWM2M path: /1024//52
*
* @tapVersion(">=1.86")
* @return
*/
getClientId() {
return this.serviceCallRunner.execute(this.getClientIdCall());
}
/**
*
*
* LWM2M path: /1024//52
*
* @tapVersion(">=1.86")
* @return call options
*/
getClientIdCall() {
const callOptions = Object.assign({}, this.resources.getClientId);
return callOptions;
}
/**
* Set mqtt relay client id
*
* LWM2M path: /1024//52
*
* @tapVersion(">=1.86")
* @param url input
* @return
*/
putClientId(
/*
*
*/
url) {
return this.serviceCallRunner.execute(this.putClientIdCall(url));
}
/**
*
*
* LWM2M path: /1024//52
*
* @tapVersion(">=1.86")
* @param url input
* @return call options
*/
putClientIdCall(
/*
*
*/
url) {
const callOptions = Object.assign({}, this.resources.putClientId);
callOptions.body = url;
return callOptions;
}
/**
* Get mqtt relay login. For firmware version <= 1.86, use serial number (resource /3//2)
*
* LWM2M path: /1024//53
*
* @deprecated
* @tapVersion(">=1.86")
* @return
*/
getUsername() {
return this.serviceCallRunner.execute(this.getUsernameCall());
}
/**
*
*
* LWM2M path: /1024//53
*
* @deprecated
* @tapVersion(">=1.86")
* @return call options
*/
getUsernameCall() {
const callOptions = Object.assign({}, this.resources.getUsername);
return callOptions;
}
/**
* Write mqtt relay password id. For firmware version <= 1.86, use serial number (resource /3//2)
*
* LWM2M path: /1024//53
*
* @tapVersion(">=1.86")
* @param url input
* @return
*/
putUsername(
/*
*
*/
url) {
return this.serviceCallRunner.execute(this.putUsernameCall(url));
}
/**
*
*
* LWM2M path: /1024//53
*
* @tapVersion(">=1.86")
* @param url input
* @return call options
*/
putUsernameCall(
/*
*
*/
url) {
const callOptions = Object.assign({}, this.resources.putUsername);
callOptions.body = url;
return callOptions;
}
/**
* Get mqtt broker hostname
*
* LWM2M path: /1024//50
*
* @tapVersion(">=1.0")
* @return
*/
getBrokerHostname() {
return this.serviceCallRunner.execute(this.getBrokerHostnameCall());
}
/**
*
*
* LWM2M path: /1024//50
*
* @tapVersion(">=1.0")
* @return call options
*/
getBrokerHostnameCall() {
const callOptions = Object.assign({}, this.resources.getBrokerHostname);
return callOptions;
}
/**
* Write mqtt relay host
*
* LWM2M path: /1024//50
*
* @tapVersion(">=1.0")
* @param url input
* @return
*/
putBrokerHostname(
/*
*
*/
url) {
return this.serviceCallRunner.execute(this.putBrokerHostnameCall(url));
}
/**
*
*
* LWM2M path: /1024//50
*
* @tapVersion(">=1.0")
* @param url input
* @return call options
*/
putBrokerHostnameCall(
/*
*
*/
url) {
const callOptions = Object.assign({}, this.resources.putBrokerHostname);
callOptions.body = url;
return callOptions;
}
/**
* Get port of the mqtt broker
*
* LWM2M path: /1024//51
*
* @tapVersion(">=1.0")
* @return
*/
getBrokerPort() {
return this.serviceCallRunner.execute(this.getBrokerPortCall());
}
/**
*
*
* LWM2M path: /1024//51
*
* @tapVersion(">=1.0")
* @return call options
*/
getBrokerPortCall() {
const callOptions = Object.assign({}, this.resources.getBrokerPort);
return callOptions;
}
/**
* Write service name of the mqtt broker
*
* LWM2M path: /1024//51
*
* @tapVersion(">=1.0")
* @param url input
* @return
*/
putBrokerPort(
/*
*
*/
url) {
return this.serviceCallRunner.execute(this.putBrokerPortCall(url));
}
/**
*
*
* LWM2M path: /1024//51
*
* @tapVersion(">=1.0")
* @param url input
* @return call options
*/
putBrokerPortCall(
/*
*
*/
url) {
const callOptions = Object.assign({}, this.resources.putBrokerPort);
callOptions.body = url;
return callOptions;
}
/**
* Get the mqtt broker password
*
* LWM2M path: /1024//54
*
* @tapVersion(">=1.0")
* @return
*/
getPassword() {
return this.serviceCallRunner.execute(this.getPasswordCall());
}
/**
*
*
* LWM2M path: /1024//54
*
* @tapVersion(">=1.0")
* @return call options
*/
getPasswordCall() {
const callOptions = Object.assign({}, this.resources.getPassword);
return callOptions;
}
/**
* Write mqtt broker password
*
* LWM2M path: /1024//54
*
* @tapVersion(">=1.0")
* @param url input
* @return
*/
putPassword(
/*
*
*/
url) {
return this.serviceCallRunner.execute(this.putPasswordCall(url));
}
/**
*
*
* LWM2M path: /1024//54
*
* @tapVersion(">=1.0")
* @param url input
* @return call options
*/
putPasswordCall(
/*
*
*/
url) {
const callOptions = Object.assign({}, this.resources.putPassword);
callOptions.body = url;
return callOptions;
}
/**
* Get the mqtt relay net key
*
* LWM2M path: /1024//55
*
* @tapVersion(">=1.0")
* @return
*/
getRelayNetKey() {
return this.serviceCallRunner.execute(this.getRelayNetKeyCall());
}
/**
*
*
* LWM2M path: /1024//55
*
* @tapVersion(">=1.0")
* @return call options
*/
getRelayNetKeyCall() {
const callOptions = Object.assign({}, this.resources.getRelayNetKey);
return callOptions;
}
/**
* Write mqtt relay net key
*
* LWM2M path: /1024//55
*
* @tapVersion(">=1.0")
* @param netkey input
* @return
*/
putRelayNetKey(
/*
*
*/
netkey) {
return this.serviceCallRunner.execute(this.putRelayNetKeyCall(netkey));
}
/**
*
*
* LWM2M path: /1024//55
*
* @tapVersion(">=1.0")
* @param netkey input
* @return call options
*/
putRelayNetKeyCall(
/*
*
*/
netkey) {
const callOptions = Object.assign({}, this.resources.putRelayNetKey);
callOptions.body = netkey;
return callOptions;
}
/**
* Set MQTT broker certificate data
*
* LWM2M path: /1024//57
*
* @tapVersion(">=1.86")
* @param value input
* @return
*/
putBrokerCertificate(
/*
* Up to 16kB
*/
value) {
return this.serviceCallRunner.execute(this.putBrokerCertificateCall(value));
}
putBrokerCertificateAppendCalls(
/*
* Up to 16kB
*/
value, chunkSize) {
return this.serviceCallRunner.createAppendCalls(this.putBrokerCertificateCall(value), chunkSize);
}
/**
*
*
* LWM2M path: /1024//57
*
* @tapVersion(">=1.86")
* @param value input
* @return call options
*/
putBrokerCertificateCall(
/*
* Up to 16kB
*/
value) {
const callOptions = Object.assign({}, this.resources.putBrokerCertificate);
callOptions.body = value;
return callOptions;
}
/**
* Get MQTT relay topic prefix
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @return
*/
getTopicPrefix() {
return this.serviceCallRunner.execute(this.getTopicPrefixCall());
}
/**
*
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @return call options
*/
getTopicPrefixCall() {
const callOptions = Object.assign({}, this.resources.getTopicPrefix);
return callOptions;
}
/**
* Put MQTT relay topic prefix
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @param topicPrefix input
* @return
*/
putTopicPrefix(
/*
*
*/
topicPrefix) {
return this.serviceCallRunner.execute(this.putTopicPrefixCall(topicPrefix));
}
/**
*
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @param topicPrefix input
* @return call options
*/
putTopicPrefixCall(
/*
*
*/
topicPrefix) {
const callOptions = Object.assign({}, this.resources.putTopicPrefix);
callOptions.body = topicPrefix;
return callOptions;
}
/**
* Get mqtt request topic
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @return
*/
getRequestTopic() {
return this.serviceCallRunner.execute(this.getRequestTopicCall());
}
/**
*
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @return call options
*/
getRequestTopicCall() {
const callOptions = Object.assign({}, this.resources.getRequestTopic);
return callOptions;
}
/**
* Put mqtt request topic
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @param topic input
* @return
*/
putRequestTopic(
/*
*
*/
topic) {
return this.serviceCallRunner.execute(this.putRequestTopicCall(topic));
}
/**
*
*
* LWM2M path: /1024//58
*
* @tapVersion(">=1.86")
* @param topic input
* @return call options
*/
putRequestTopicCall(
/*
*
*/
topic) {
const callOptions = Object.assign({}, this.resources.putRequestTopic);
callOptions.body = topic;
return callOptions;
}
/**
* Get MQTT response topic
*
* LWM2M path: /1024//59
*
* @tapVersion(">=1.107")
* @return
*/
getResponseTopic() {
return this.serviceCallRunner.execute(this.getResponseTopicCall());
}
/**
*
*
* LWM2M path: /1024//59
*
* @tapVersion(">=1.107")
* @return call options
*/
getResponseTopicCall() {
const callOptions = Object.assign({}, this.resources.getResponseTopic);
return callOptions;
}
/**
* Put MQTT response topic
*
* LWM2M path: /1024//59
*
* @tapVersion(">=1.107")
* @param topic input
* @return
*/
putResponseTopic(
/*
*
*/
topic) {
return this.serviceCallRunner.execute(this.putResponseTopicCall(topic));
}
/**
*
*
* LWM2M path: /1024//59
*
* @tapVersion(">=1.107")
* @param topic input
* @return call options
*/
putResponseTopicCall(
/*
*
*/
topic) {
const callOptions = Object.assign({}, this.resources.putResponseTopic);
callOptions.body = topic;
return callOptions;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NlcnZpY2UvaW1wbC9tcXR0L3NyYy9saWIvZ2VuZXJhdGVkL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBRS9ELE1BQU0sT0FBTyxXQUFZLFNBQVEsZUFBZTtJQUFoRDs7UUFDUyxjQUFTLEdBQUcsYUFBYSxDQUFDO0lBMG9CbkMsQ0FBQztJQXhvQkM7Ozs7Ozs7T0FPRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxXQUFXLHFCQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFFLENBQUM7UUFFdEQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsV0FBVztJQUNUOztPQUVHO0lBQ0gsR0FBVztRQUVYLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZUFBZTtJQUNiOztPQUVHO0lBQ0gsR0FBVztRQUVYLE1BQU0sV0FBVyxxQkFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBRSxDQUFDO1FBRXRELFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBRXZCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUks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