UNPKG

node-red-contrib-tibber-api

Version:

Node Red module for integrating with Tibber api

104 lines (102 loc) 3.74 kB
<!-- <script type="text/javascript" src="tools.js"></script> --> <script type="text/javascript"> const urlValidator = function (url) { var regExp = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/; return new RegExp(regExp).test(url); }; RED.nodes.registerType("tibber-api-endpoint", { category: "config", credentials: { accessToken: { type: 'text', }, }, defaults: { queryUrl: { value: "https://api.tibber.com/v1-beta/gql", validate: (value) => { var queryUrl = $("#node-config-input-queryUrl").val(); return urlValidator(value ? value : queryUrl) || urlValidator(value); } }, feedConnectionTimeout: { value: 30, required: true, validate: (value) => { if (value < 5) { $("#node-config-input-feedConnectionTimeout").val(5); return false; } return RED.validators.number(value); } }, feedTimeout: { value: 60, required: true, validate: (value) => { if (value < 5) { $("#node-config-input-feedTimeout").val(5); return false; } return RED.validators.number(value); } }, queryRequestTimeout: { value: 30, required: true, validate: (value) => { if (value < 5) { $("#node-config-input-queryRequestTimeout").val(5); return false; } return RED.validators.number(value); } }, name: { value: "" } }, label: function () { return this.name ? this.name : 'Access Token'; }, oneditprepare: function () { if (this.credentials.accessToken) { delete this.apiKey; } if (!this.feedConnectionTimeout) { this.feedConnectionTimeout = 30; $("#node-config-input-feedConnectionTimeout").val(this.feedConnectionTimeout); } if (!this.queryRequestTimeout) { this.queryRequestTimeout = 30; $("#node-config-input-queryRequestTimeout").val(this.queryRequestTimeout); } } }); </script> <script type="text/x-red" data-template-name="tibber-api-endpoint"> <div class="form-row"> <label for="node-config-input-queryUrl"><i class="icon-bookmark"></i> GraphQL Endpoint</label> <input type="text" id="node-config-input-queryUrl" placeholder="GraphQL Endpoint"> </div> <div class="form-row"> <label for="node-config-input-accessToken"><i class="icon-bookmark"></i> Access Token</label> <input type="text" id="node-config-input-accessToken" placeholder="Accss Token"> </div> <div class="form-row"> <label for="node-config-input-feedConnectionTimeout"><i class="icon-tag"></i> Connection Timeout (s)</label> <input type="number" id="node-config-input-feedConnectionTimeout" placeholder="Feed Connection Timeout"> </div> <div class="form-row"> <label for="node-config-input-feedTimeout"><i class="icon-tag"></i> Feed Timeout (s)</label> <input type="number" id="node-config-input-feedTimeout" placeholder="Feed Timeout"> </div> <div class="form-row"> <label for="node-config-input-queryRequestTimeout"><i class="icon-tag"></i> Request Timeout (s)</label> <input type="number" id="node-config-input-queryRequestTimeout" placeholder="Query Request Timeout"> </div> <div class="form-row"> <label for="node-config-input-name"><i class="icon-bookmark"></i> Name</label> <input type="text" id="node-config-input-name" placeholder="Name"> </div> </script>