UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

565 lines 19.9 kB
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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