node-red-contrib-tibber-api
Version:
Node Red module for integrating with Tibber api
104 lines (102 loc) • 3.74 kB
HTML
<!-- <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>