Commit 7af1c86e17fb4a5294cc361b0df79ce0ee9dc002

Authored by Volodymyr Babak
2 parents 0a7d8e86 b63be05f

Merge branch 'develop/2.5.5' into feature/edge

Showing 26 changed files with 1193 additions and 1586 deletions
... ... @@ -44,7 +44,8 @@
44 44 "name": "Save Client Attributes",
45 45 "debugMode": false,
46 46 "configuration": {
47   - "scope": "CLIENT_SCOPE"
  47 + "scope": "CLIENT_SCOPE",
  48 + "notifyDevice": "false"
48 49 }
49 50 },
50 51 {
... ...
... ... @@ -32,7 +32,8 @@
32 32 "name": "Save Client Attributes",
33 33 "debugMode": false,
34 34 "configuration": {
35   - "scope": "CLIENT_SCOPE"
  35 + "scope": "CLIENT_SCOPE",
  36 + "notifyDevice": "false"
36 37 }
37 38 },
38 39 {
... ...
... ... @@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
21 21 import io.netty.channel.EventLoopGroup;
22 22 import lombok.extern.slf4j.Slf4j;
23 23 import org.springframework.data.redis.core.RedisTemplate;
  24 +import org.springframework.util.StringUtils;
24 25 import org.thingsboard.common.util.ListeningExecutor;
25 26 import org.thingsboard.rule.engine.api.MailService;
26 27 import org.thingsboard.rule.engine.api.RuleEngineRpcService;
... ... @@ -43,6 +44,7 @@ import org.thingsboard.server.common.data.rule.RuleNode;
43 44 import org.thingsboard.server.common.msg.TbActorMsg;
44 45 import org.thingsboard.server.common.msg.TbMsg;
45 46 import org.thingsboard.server.common.msg.TbMsgMetaData;
  47 +import org.thingsboard.server.common.msg.queue.ServiceQueue;
46 48 import org.thingsboard.server.common.msg.queue.ServiceType;
47 49 import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
48 50 import org.thingsboard.server.dao.alarm.AlarmService;
... ... @@ -68,7 +70,6 @@ import org.thingsboard.server.service.script.RuleNodeJsScriptEngine;
68 70
69 71 import java.util.Collections;
70 72 import java.util.Set;
71   -import java.util.concurrent.TimeUnit;
72 73 import java.util.function.Consumer;
73 74
74 75 /**
... ... @@ -123,7 +124,7 @@ class DefaultTbContext implements TbContext {
123 124
124 125 @Override
125 126 public void enqueue(TbMsg tbMsg, String queueName, Runnable onSuccess, Consumer<Throwable> onFailure) {
126   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, queueName, getTenantId(), tbMsg.getOriginator());
  127 + TopicPartitionInfo tpi = resolvePartition(tbMsg, queueName);
127 128 enqueue(tpi, tbMsg, onFailure, onSuccess);
128 129 }
129 130
... ... @@ -140,46 +141,57 @@ class DefaultTbContext implements TbContext {
140 141
141 142 @Override
142 143 public void enqueueForTellFailure(TbMsg tbMsg, String failureMessage) {
143   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, getTenantId(), tbMsg.getOriginator());
  144 + TopicPartitionInfo tpi = resolvePartition(tbMsg);
144 145 enqueueForTellNext(tpi, tbMsg, Collections.singleton(TbRelationTypes.FAILURE), failureMessage, null, null);
145 146 }
146 147
147 148 @Override
148 149 public void enqueueForTellNext(TbMsg tbMsg, String relationType) {
149   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, getTenantId(), tbMsg.getOriginator());
  150 + TopicPartitionInfo tpi = resolvePartition(tbMsg);
150 151 enqueueForTellNext(tpi, tbMsg, Collections.singleton(relationType), null, null, null);
151 152 }
152 153
153 154 @Override
154 155 public void enqueueForTellNext(TbMsg tbMsg, Set<String> relationTypes) {
155   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, getTenantId(), tbMsg.getOriginator());
  156 + TopicPartitionInfo tpi = resolvePartition(tbMsg);
156 157 enqueueForTellNext(tpi, tbMsg, relationTypes, null, null, null);
157 158 }
158 159
159 160 @Override
160 161 public void enqueueForTellNext(TbMsg tbMsg, String relationType, Runnable onSuccess, Consumer<Throwable> onFailure) {
161   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, getTenantId(), tbMsg.getOriginator());
  162 + TopicPartitionInfo tpi = resolvePartition(tbMsg);
162 163 enqueueForTellNext(tpi, tbMsg, Collections.singleton(relationType), null, onSuccess, onFailure);
163 164 }
164 165
165 166 @Override
166 167 public void enqueueForTellNext(TbMsg tbMsg, Set<String> relationTypes, Runnable onSuccess, Consumer<Throwable> onFailure) {
167   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, getTenantId(), tbMsg.getOriginator());
  168 + TopicPartitionInfo tpi = resolvePartition(tbMsg);
168 169 enqueueForTellNext(tpi, tbMsg, relationTypes, null, onSuccess, onFailure);
169 170 }
170 171
171 172 @Override
172 173 public void enqueueForTellNext(TbMsg tbMsg, String queueName, String relationType, Runnable onSuccess, Consumer<Throwable> onFailure) {
173   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, queueName, getTenantId(), tbMsg.getOriginator());
  174 + TopicPartitionInfo tpi = resolvePartition(tbMsg, queueName);
174 175 enqueueForTellNext(tpi, tbMsg, Collections.singleton(relationType), null, onSuccess, onFailure);
175 176 }
176 177
177 178 @Override
178 179 public void enqueueForTellNext(TbMsg tbMsg, String queueName, Set<String> relationTypes, Runnable onSuccess, Consumer<Throwable> onFailure) {
179   - TopicPartitionInfo tpi = mainCtx.resolve(ServiceType.TB_RULE_ENGINE, queueName, getTenantId(), tbMsg.getOriginator());
  180 + TopicPartitionInfo tpi = resolvePartition(tbMsg, queueName);
180 181 enqueueForTellNext(tpi, tbMsg, relationTypes, null, onSuccess, onFailure);
181 182 }
182 183
  184 + private TopicPartitionInfo resolvePartition(TbMsg tbMsg, String queueName) {
  185 + if (StringUtils.isEmpty(queueName)) {
  186 + queueName = ServiceQueue.MAIN;
  187 + }
  188 + return mainCtx.resolve(ServiceType.TB_RULE_ENGINE, queueName, getTenantId(), tbMsg.getOriginator());
  189 + }
  190 +
  191 + private TopicPartitionInfo resolvePartition(TbMsg tbMsg) {
  192 + return resolvePartition(tbMsg, tbMsg.getQueueName());
  193 + }
  194 +
183 195 private void enqueueForTellNext(TopicPartitionInfo tpi, TbMsg source, Set<String> relationTypes, String failureMessage, Runnable onSuccess, Consumer<Throwable> onFailure) {
184 196 RuleChainId ruleChainId = nodeCtx.getSelf().getRuleChainId();
185 197 RuleNodeId ruleNodeId = nodeCtx.getSelf().getId();
... ...
... ... @@ -56,7 +56,9 @@ public class TbRuleEngineProcessingStrategyFactory {
56 56 private final boolean retryTimeout;
57 57 private final int maxRetries;
58 58 private final double maxAllowedFailurePercentage;
59   - private final long pauseBetweenRetries;
  59 + private final long maxPauseBetweenRetries;
  60 +
  61 + private long pauseBetweenRetries;
60 62
61 63 private int initialTotalCount;
62 64 private int retryCount;
... ... @@ -69,6 +71,7 @@ public class TbRuleEngineProcessingStrategyFactory {
69 71 this.maxRetries = configuration.getRetries();
70 72 this.maxAllowedFailurePercentage = configuration.getFailurePercentage();
71 73 this.pauseBetweenRetries = configuration.getPauseBetweenRetries();
  74 + this.maxPauseBetweenRetries = configuration.getMaxPauseBetweenRetries();
72 75 }
73 76
74 77 @Override
... ... @@ -108,6 +111,9 @@ public class TbRuleEngineProcessingStrategyFactory {
108 111 } catch (InterruptedException e) {
109 112 throw new RuntimeException(e);
110 113 }
  114 + if (maxPauseBetweenRetries > pauseBetweenRetries) {
  115 + pauseBetweenRetries = Math.min(maxPauseBetweenRetries, pauseBetweenRetries * 2);
  116 + }
111 117 }
112 118 return new TbRuleEngineProcessingDecision(false, toReprocess);
113 119 }
... ...
... ... @@ -392,7 +392,7 @@ public class DefaultDeviceStateService implements DeviceStateService {
392 392 if (stateData != null) {
393 393 DeviceState state = stateData.getState();
394 394 state.setActive(ts < state.getLastActivityTime() + state.getInactivityTimeout());
395   - if (!state.isActive() && (state.getLastInactivityAlarmTime() == 0L || state.getLastInactivityAlarmTime() < state.getLastActivityTime())) {
  395 + if (!state.isActive() && (state.getLastInactivityAlarmTime() == 0L || state.getLastInactivityAlarmTime() < state.getLastActivityTime()) && stateData.getDeviceCreationTime() + state.getInactivityTimeout() < ts) {
396 396 state.setLastInactivityAlarmTime(ts);
397 397 pushRuleEngineMessage(stateData, INACTIVITY_EVENT);
398 398 save(deviceId, INACTIVITY_ALARM_TIME, ts);
... ... @@ -479,6 +479,7 @@ public class DefaultDeviceStateService implements DeviceStateService {
479 479 return DeviceStateData.builder()
480 480 .tenantId(device.getTenantId())
481 481 .deviceId(device.getId())
  482 + .deviceCreationTime(device.getCreatedTime())
482 483 .metaData(md)
483 484 .state(deviceState).build();
484 485 } catch (Exception e) {
... ...
... ... @@ -30,8 +30,8 @@ class DeviceStateData {
30 30
31 31 private final TenantId tenantId;
32 32 private final DeviceId deviceId;
33   -
  33 + private final long deviceCreationTime;
34 34 private TbMsgMetaData metaData;
35 35 private final DeviceState state;
36   -
  36 +
37 37 }
... ...
... ... @@ -216,6 +216,11 @@ public class DefaultSubscriptionManagerService implements SubscriptionManagerSer
216 216
217 217 @Override
218 218 public void onAttributesUpdate(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, TbCallback callback) {
  219 + onAttributesUpdate(tenantId, entityId, scope, attributes, callback, true);
  220 + }
  221 +
  222 + @Override
  223 + public void onAttributesUpdate(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, TbCallback callback, boolean notifyDevice) {
219 224 onLocalSubUpdate(entityId,
220 225 s -> {
221 226 if (TbSubscriptionType.ATTRIBUTES.equals(s.getType())) {
... ... @@ -244,7 +249,7 @@ public class DefaultSubscriptionManagerService implements SubscriptionManagerSer
244 249 deviceStateService.onDeviceInactivityTimeoutUpdate(new DeviceId(entityId.getId()), attribute.getLongValue().orElse(0L));
245 250 }
246 251 }
247   - } else if (TbAttributeSubscriptionScope.SHARED_SCOPE.name().equalsIgnoreCase(scope)) {
  252 + } else if (TbAttributeSubscriptionScope.SHARED_SCOPE.name().equalsIgnoreCase(scope) && notifyDevice) {
248 253 clusterService.pushMsgToCore(DeviceAttributesEventNotificationMsg.onUpdate(tenantId,
249 254 new DeviceId(entityId.getId()), DataConstants.SHARED_SCOPE, new ArrayList<>(attributes))
250 255 , null);
... ...
... ... @@ -35,4 +35,6 @@ public interface SubscriptionManagerService extends ApplicationListener<Partitio
35 35
36 36 void onAttributesUpdate(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, TbCallback callback);
37 37
  38 + void onAttributesUpdate(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, TbCallback callback, boolean notifyDevice);
  39 +
38 40 }
... ...
... ... @@ -128,9 +128,14 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
128 128
129 129 @Override
130 130 public void saveAndNotify(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, FutureCallback<Void> callback) {
  131 + saveAndNotify(tenantId, entityId, scope, attributes, callback, true);
  132 + }
  133 +
  134 + @Override
  135 + public void saveAndNotify(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, FutureCallback<Void> callback, boolean notifyDevice) {
131 136 ListenableFuture<List<Void>> saveFuture = attrService.save(tenantId, entityId, scope, attributes);
132 137 addMainCallback(saveFuture, callback);
133   - addWsCallback(saveFuture, success -> onAttributesUpdate(tenantId, entityId, scope, attributes));
  138 + addWsCallback(saveFuture, success -> onAttributesUpdate(tenantId, entityId, scope, attributes, notifyDevice));
134 139 }
135 140
136 141 @Override
... ... @@ -157,11 +162,11 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
157 162 , System.currentTimeMillis())), callback);
158 163 }
159 164
160   - private void onAttributesUpdate(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes) {
  165 + private void onAttributesUpdate(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, boolean notifyDevice) {
161 166 TopicPartitionInfo tpi = partitionService.resolve(ServiceType.TB_CORE, tenantId, entityId);
162 167 if (currentPartitions.contains(tpi)) {
163 168 if (subscriptionManagerService.isPresent()) {
164   - subscriptionManagerService.get().onAttributesUpdate(tenantId, entityId, scope, attributes, TbCallback.EMPTY);
  169 + subscriptionManagerService.get().onAttributesUpdate(tenantId, entityId, scope, attributes, TbCallback.EMPTY, notifyDevice);
165 170 } else {
166 171 log.warn("Possible misconfiguration because subscriptionManagerService is null!");
167 172 }
... ...
... ... @@ -39,8 +39,7 @@ public abstract class AbstractCleanUpService {
39 39 protected String dbPassword;
40 40
41 41 protected long executeQuery(Connection conn, String query) throws SQLException {
42   - try (Statement statement = conn.createStatement()) {
43   - ResultSet resultSet = statement.executeQuery(query);
  42 + try (Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery(query)) {
44 43 if (log.isDebugEnabled()) {
45 44 getWarnings(statement);
46 45 }
... ...
... ... @@ -577,6 +577,8 @@ transport:
577 577 key_password: "${MQTT_SSL_KEY_PASSWORD:server_key_password}"
578 578 # Type of the key store
579 579 key_store_type: "${MQTT_SSL_KEY_STORE_TYPE:JKS}"
  580 + # Skip certificate validity check for client certificates.
  581 + skip_validity_check_for_client_cert: "${MQTT_SSL_SKIP_VALIDITY_CHECK_FOR_CLIENT_CERT:false}"
580 582 # Local CoAP transport parameters
581 583 coap:
582 584 # Enable/disable coap transport protocol.
... ... @@ -756,6 +758,7 @@ queue:
756 758 retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
757 759 failure-percentage: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
758 760 pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_RETRY_PAUSE:3}"# Time in seconds to wait in consumer thread before retries;
  761 + max-pause-between-retries: "${TB_QUEUE_RE_MAIN_PROCESSING_STRATEGY_MAX_RETRY_PAUSE:3}"# Max allowed time in seconds for pause between retries.
759 762 - name: "${TB_QUEUE_RE_HP_QUEUE_NAME:HighPriority}"
760 763 topic: "${TB_QUEUE_RE_HP_TOPIC:tb_rule_engine.hp}"
761 764 poll-interval: "${TB_QUEUE_RE_HP_POLL_INTERVAL_MS:25}"
... ... @@ -771,6 +774,7 @@ queue:
771 774 retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRIES:0}" # Number of retries, 0 is unlimited
772 775 failure-percentage: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
773 776 pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
  777 + max-pause-between-retries: "${TB_QUEUE_RE_HP_PROCESSING_STRATEGY_MAX_RETRY_PAUSE:5}"# Max allowed time in seconds for pause between retries.
774 778 - name: "${TB_QUEUE_RE_SQ_QUEUE_NAME:SequentialByOriginator}"
775 779 topic: "${TB_QUEUE_RE_SQ_TOPIC:tb_rule_engine.sq}"
776 780 poll-interval: "${TB_QUEUE_RE_SQ_POLL_INTERVAL_MS:25}"
... ... @@ -786,6 +790,7 @@ queue:
786 790 retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRIES:3}" # Number of retries, 0 is unlimited
787 791 failure-percentage: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_FAILURE_PERCENTAGE:0}" # Skip retry if failures or timeouts are less then X percentage of messages;
788 792 pause-between-retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_RETRY_PAUSE:5}"# Time in seconds to wait in consumer thread before retries;
  793 + max-pause-between-retries: "${TB_QUEUE_RE_SQ_PROCESSING_STRATEGY_MAX_RETRY_PAUSE:5}"# Max allowed time in seconds for pause between retries.
789 794 transport:
790 795 # For high priority notifications that require minimum latency and processing time
791 796 notifications_topic: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_TOPIC:tb_transport.notifications}"
... ...
... ... @@ -24,5 +24,6 @@ public class TbRuleEngineQueueAckStrategyConfiguration {
24 24 private int retries;
25 25 private double failurePercentage;
26 26 private long pauseBetweenRetries;
  27 + private long maxPauseBetweenRetries;
27 28
28 29 }
... ...
... ... @@ -47,6 +47,10 @@ public class MqttTransportContext extends TransportContext {
47 47 private Integer maxPayloadSize;
48 48
49 49 @Getter
  50 + @Value("${transport.mqtt.netty.skip_validity_check_for_client_cert:false}")
  51 + private boolean skipValidityCheckForClientCert;
  52 +
  53 + @Getter
50 54 @Setter
51 55 private SslHandler sslHandler;
52 56
... ...
... ... @@ -342,7 +342,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
342 342
343 343 private MqttMessage createUnSubAckMessage(int msgId) {
344 344 MqttFixedHeader mqttFixedHeader =
345   - new MqttFixedHeader(UNSUBACK, false, AT_LEAST_ONCE, false, 0);
  345 + new MqttFixedHeader(UNSUBACK, false, AT_MOST_ONCE, false, 0);
346 346 MqttMessageIdVariableHeader mqttMessageIdVariableHeader = MqttMessageIdVariableHeader.from(msgId);
347 347 return new MqttMessage(mqttFixedHeader, mqttMessageIdVariableHeader);
348 348 }
... ... @@ -383,6 +383,9 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
383 383
384 384 private void processX509CertConnect(ChannelHandlerContext ctx, X509Certificate cert) {
385 385 try {
  386 + if(!context.isSkipValidityCheckForClientCert()){
  387 + cert.checkValidity();
  388 + }
386 389 String strCert = SslUtil.getX509CertificateString(cert);
387 390 String sha3Hash = EncryptionUtil.getSha3Hash(strCert);
388 391 transportService.process(ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
... ... @@ -445,7 +448,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
445 448
446 449 private static MqttSubAckMessage createSubAckMessage(Integer msgId, List<Integer> grantedQoSList) {
447 450 MqttFixedHeader mqttFixedHeader =
448   - new MqttFixedHeader(SUBACK, false, AT_LEAST_ONCE, false, 0);
  451 + new MqttFixedHeader(SUBACK, false, AT_MOST_ONCE, false, 0);
449 452 MqttMessageIdVariableHeader mqttMessageIdVariableHeader = MqttMessageIdVariableHeader.from(msgId);
450 453 MqttSubAckPayload mqttSubAckPayload = new MqttSubAckPayload(grantedQoSList);
451 454 return new MqttSubAckMessage(mqttFixedHeader, mqttMessageIdVariableHeader, mqttSubAckPayload);
... ... @@ -457,7 +460,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
457 460
458 461 public static MqttPubAckMessage createMqttPubAckMsg(int requestId) {
459 462 MqttFixedHeader mqttFixedHeader =
460   - new MqttFixedHeader(PUBACK, false, AT_LEAST_ONCE, false, 0);
  463 + new MqttFixedHeader(PUBACK, false, AT_MOST_ONCE, false, 0);
461 464 MqttMessageIdVariableHeader mqttMsgIdVariableHeader =
462 465 MqttMessageIdVariableHeader.from(requestId);
463 466 return new MqttPubAckMessage(mqttFixedHeader, mqttMsgIdVariableHeader);
... ...
... ... @@ -298,6 +298,7 @@ public class DefaultTransportService implements TransportService {
298 298 TbMsgMetaData metaData = new TbMsgMetaData();
299 299 metaData.putValue("deviceName", sessionInfo.getDeviceName());
300 300 metaData.putValue("deviceType", sessionInfo.getDeviceType());
  301 + metaData.putValue("notifyDevice", "false");
301 302 TbMsg tbMsg = TbMsg.newMsg(SessionMsgType.POST_ATTRIBUTES_REQUEST.name(), deviceId, metaData, gson.toJson(json));
302 303 sendToRuleEngine(tenantId, tbMsg, new TransportTbQueueCallback(callback));
303 304 }
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.dao.event;
17 17
  18 +import com.fasterxml.jackson.databind.node.ObjectNode;
18 19 import com.google.common.util.concurrent.ListenableFuture;
19 20 import lombok.extern.slf4j.Slf4j;
20 21 import org.apache.commons.lang3.StringUtils;
... ... @@ -28,6 +29,7 @@ import org.thingsboard.server.common.data.page.TimePageLink;
28 29 import org.thingsboard.server.dao.exception.DataValidationException;
29 30 import org.thingsboard.server.dao.service.DataValidator;
30 31
  32 +import java.nio.charset.StandardCharsets;
31 33 import java.util.List;
32 34 import java.util.Optional;
33 35
... ... @@ -35,6 +37,8 @@ import java.util.Optional;
35 37 @Slf4j
36 38 public class BaseEventService implements EventService {
37 39
  40 + private static final int MAX_DEBUG_EVENT_SYMBOLS = 4 * 1024;
  41 +
38 42 @Autowired
39 43 public EventDao eventDao;
40 44
... ... @@ -47,6 +51,7 @@ public class BaseEventService implements EventService {
47 51 @Override
48 52 public ListenableFuture<Event> saveAsync(Event event) {
49 53 eventValidator.validate(event, Event::getTenantId);
  54 + checkAndTruncateDebugEvent(event);
50 55 return eventDao.saveAsync(event);
51 56 }
52 57
... ... @@ -56,9 +61,21 @@ public class BaseEventService implements EventService {
56 61 if (StringUtils.isEmpty(event.getUid())) {
57 62 throw new DataValidationException("Event uid should be specified!");
58 63 }
  64 + checkAndTruncateDebugEvent(event);
59 65 return eventDao.saveIfNotExists(event);
60 66 }
61 67
  68 + private void checkAndTruncateDebugEvent(Event event) {
  69 + if (event.getType().startsWith("DEBUG") && event.getBody() != null && event.getBody().has("data")) {
  70 + String dataStr = event.getBody().get("data").asText();
  71 + int length = dataStr.length();
  72 + if (length > MAX_DEBUG_EVENT_SYMBOLS) {
  73 + ((ObjectNode) event.getBody()).put("data", dataStr.substring(0, MAX_DEBUG_EVENT_SYMBOLS) + "...[truncated " + (length - MAX_DEBUG_EVENT_SYMBOLS) + " symbols]");
  74 + log.trace("[{}] Event was truncated: {}", event.getId(), dataStr);
  75 + }
  76 + }
  77 + }
  78 +
62 79 @Override
63 80 public Optional<Event> findEvent(TenantId tenantId, EntityId entityId, String eventType, String eventUid) {
64 81 if (tenantId == null) {
... ...
... ... @@ -12,7 +12,7 @@ spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
12 12
13 13 spring.datasource.username=sa
14 14 spring.datasource.password=
15   -spring.datasource.url=jdbc:hsqldb:file:/tmp/testDb;sql.enforce_size=false
  15 +spring.datasource.url=jdbc:hsqldb:file:target/tmp/testDb;sql.enforce_size=false
16 16 spring.datasource.driverClassName=org.hsqldb.jdbc.JDBCDriver
17 17 spring.datasource.hikari.maximumPoolSize = 50
18 18
... ...
1 1 {
2 2 "name": "thingsboard-js-executor",
3   - "version": "2.5.3",
  3 + "version": "2.5.5",
4 4 "lockfileVersion": 1,
5 5 "requires": true,
6 6 "dependencies": {
... ... @@ -13,9 +13,9 @@
13 13 }
14 14 },
15 15 "@azure/amqp-common": {
16   - "version": "1.0.0-preview.13",
17   - "resolved": "https://registry.npmjs.org/@azure/amqp-common/-/amqp-common-1.0.0-preview.13.tgz",
18   - "integrity": "sha512-v19NGXFm8Hzr2bj/DSWYc2anaDcoAeFQXJGuBT8QO7eS13vaELQNGaynOGipEcI313A1778R/FFCk4o+dylIiw==",
  16 + "version": "1.0.0-preview.17",
  17 + "resolved": "https://registry.npmjs.org/@azure/amqp-common/-/amqp-common-1.0.0-preview.17.tgz",
  18 + "integrity": "sha512-mrvRLvBYbylOBAhU0AeZk2jKDZ63nnleJs2KBYzs3wFx/Vz7J9YLtMYq9/s1CX1T2RFERj9w6lRXY42wGjC4iw==",
19 19 "requires": {
20 20 "@types/async-lock": "^1.1.0",
21 21 "@types/is-buffer": "^2.0.0",
... ... @@ -41,83 +41,96 @@
41 41 "requires": {
42 42 "ms": "^2.1.1"
43 43 }
44   - },
45   - "is-buffer": {
46   - "version": "2.0.4",
47   - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
48   - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
49   - },
50   - "ms": {
51   - "version": "2.1.2",
52   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
53   - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
54 44 }
55 45 }
56 46 },
57 47 "@azure/core-auth": {
58   - "version": "1.1.2",
59   - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.1.2.tgz",
60   - "integrity": "sha512-IUbP/f3v96dpHgXUwsAjUwDzjlUjawyUhWhGKKB6Qxy+iqppC/pVBPyc6kdpyTe7H30HN+4H3f0lar7Wp9Hx6A==",
  48 + "version": "1.1.3",
  49 + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.1.3.tgz",
  50 + "integrity": "sha512-A4xigW0YZZpkj1zK7dKuzbBpGwnhEcRk6WWuIshdHC32raR3EQ1j6VA9XZqE+RFsUgH6OAmIK5BWIz+mZjnd6Q==",
61 51 "requires": {
62 52 "@azure/abort-controller": "^1.0.0",
63 53 "@azure/core-tracing": "1.0.0-preview.8",
64 54 "@opentelemetry/api": "^0.6.1",
65   - "tslib": "^1.10.0"
  55 + "tslib": "^2.0.0"
  56 + },
  57 + "dependencies": {
  58 + "@azure/core-tracing": {
  59 + "version": "1.0.0-preview.8",
  60 + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.8.tgz",
  61 + "integrity": "sha512-ZKUpCd7Dlyfn7bdc+/zC/sf0aRIaNQMDuSj2RhYRFe3p70hVAnYGp3TX4cnG2yoEALp/LTj/XnZGQ8Xzf6Ja/Q==",
  62 + "requires": {
  63 + "@opencensus/web-types": "0.0.7",
  64 + "@opentelemetry/api": "^0.6.1",
  65 + "tslib": "^1.10.0"
  66 + },
  67 + "dependencies": {
  68 + "tslib": {
  69 + "version": "1.13.0",
  70 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
  71 + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
  72 + }
  73 + }
  74 + },
  75 + "@opentelemetry/api": {
  76 + "version": "0.6.1",
  77 + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.6.1.tgz",
  78 + "integrity": "sha512-wpufGZa7tTxw7eAsjXJtiyIQ42IWQdX9iUQp7ACJcKo1hCtuhLU+K2Nv1U6oRwT1oAlZTE6m4CgWKZBhOiau3Q==",
  79 + "requires": {
  80 + "@opentelemetry/context-base": "^0.6.1"
  81 + }
  82 + },
  83 + "tslib": {
  84 + "version": "2.0.1",
  85 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
  86 + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ=="
  87 + }
66 88 }
67 89 },
68 90 "@azure/core-http": {
69   - "version": "1.1.2",
70   - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-1.1.2.tgz",
71   - "integrity": "sha512-xeZpTs6caBIrRipqZs70jgrA+mAFxII5XrBzbOCELPs18n4QWfchB20F94ITAk3GuFVDaSBsOhVL3GP1J+ncGg==",
  91 + "version": "1.1.8",
  92 + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-1.1.8.tgz",
  93 + "integrity": "sha512-hJ9ZblU99sY2dTD6U5EqZ5zjd0QmwwvSp8RYp2zS9s5mhsNobLQFI09bIE6yo891bOySCEepNCE5tL15dLYhIA==",
72 94 "requires": {
73 95 "@azure/abort-controller": "^1.0.0",
74   - "@azure/core-auth": "^1.1.2",
75   - "@azure/core-tracing": "1.0.0-preview.8",
  96 + "@azure/core-auth": "^1.1.3",
  97 + "@azure/core-tracing": "1.0.0-preview.9",
76 98 "@azure/logger": "^1.0.0",
77   - "@opentelemetry/api": "^0.6.1",
  99 + "@opentelemetry/api": "^0.10.2",
78 100 "@types/node-fetch": "^2.5.0",
79 101 "@types/tunnel": "^0.0.1",
80   - "cross-env": "^6.0.3",
81 102 "form-data": "^3.0.0",
82 103 "node-fetch": "^2.6.0",
83 104 "process": "^0.11.10",
84   - "tough-cookie": "^3.0.1",
85   - "tslib": "^1.10.0",
  105 + "tough-cookie": "^4.0.0",
  106 + "tslib": "^2.0.0",
86 107 "tunnel": "^0.0.6",
87   - "uuid": "^3.3.2",
  108 + "uuid": "^8.1.0",
88 109 "xml2js": "^0.4.19"
89 110 },
90 111 "dependencies": {
91   - "form-data": {
92   - "version": "3.0.0",
93   - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
94   - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
95   - "requires": {
96   - "asynckit": "^0.4.0",
97   - "combined-stream": "^1.0.8",
98   - "mime-types": "^2.1.12"
99   - }
100   - },
101   - "tough-cookie": {
102   - "version": "3.0.1",
103   - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
104   - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
105   - "requires": {
106   - "ip-regex": "^2.1.0",
107   - "psl": "^1.1.28",
108   - "punycode": "^2.1.1"
109   - }
  112 + "tslib": {
  113 + "version": "2.0.1",
  114 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
  115 + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ=="
110 116 }
111 117 }
112 118 },
113 119 "@azure/core-tracing": {
114   - "version": "1.0.0-preview.8",
115   - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.8.tgz",
116   - "integrity": "sha512-ZKUpCd7Dlyfn7bdc+/zC/sf0aRIaNQMDuSj2RhYRFe3p70hVAnYGp3TX4cnG2yoEALp/LTj/XnZGQ8Xzf6Ja/Q==",
  120 + "version": "1.0.0-preview.9",
  121 + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.9.tgz",
  122 + "integrity": "sha512-zczolCLJ5QG42AEPQ+Qg9SRYNUyB+yZ5dzof4YEc+dyWczO9G2sBqbAjLB7IqrsdHN2apkiB2oXeDKCsq48jug==",
117 123 "requires": {
118 124 "@opencensus/web-types": "0.0.7",
119   - "@opentelemetry/api": "^0.6.1",
120   - "tslib": "^1.10.0"
  125 + "@opentelemetry/api": "^0.10.2",
  126 + "tslib": "^2.0.0"
  127 + },
  128 + "dependencies": {
  129 + "tslib": {
  130 + "version": "2.0.1",
  131 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
  132 + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ=="
  133 + }
121 134 }
122 135 },
123 136 "@azure/logger": {
... ... @@ -129,11 +142,11 @@
129 142 }
130 143 },
131 144 "@azure/service-bus": {
132   - "version": "1.1.6",
133   - "resolved": "https://registry.npmjs.org/@azure/service-bus/-/service-bus-1.1.6.tgz",
134   - "integrity": "sha512-eCJXcJZGWdlVwLEqMcoIqtUrh/NtyFcDDfq/y8gdCOy3Dzuv8JkPTxjdjcxDthwG9mc5Qter3dGOTwh0U8gwiw==",
  145 + "version": "1.1.10",
  146 + "resolved": "https://registry.npmjs.org/@azure/service-bus/-/service-bus-1.1.10.tgz",
  147 + "integrity": "sha512-QSL8Tt5/Kjn3yvxhKeacVvqocRxLvHtOU20iELriUkZwA9CWNZmm0cTzPrDC8XHtmeEUgk0iWyfmMaGnjQPW0Q==",
135 148 "requires": {
136   - "@azure/amqp-common": "1.0.0-preview.13",
  149 + "@azure/amqp-common": "1.0.0-preview.17",
137 150 "@azure/core-http": "^1.0.0",
138 151 "@opentelemetry/types": "^0.2.0",
139 152 "@types/is-buffer": "^2.0.0",
... ... @@ -143,44 +156,34 @@
143 156 "is-buffer": "^2.0.3",
144 157 "long": "^4.0.0",
145 158 "process": "^0.11.10",
146   - "rhea": "^1.0.18",
  159 + "rhea": "^1.0.23",
147 160 "rhea-promise": "^0.1.15",
148 161 "tslib": "^1.10.0"
149   - },
150   - "dependencies": {
151   - "debug": {
152   - "version": "4.1.1",
153   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
154   - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
155   - "requires": {
156   - "ms": "^2.1.1"
157   - }
158   - },
159   - "is-buffer": {
160   - "version": "2.0.4",
161   - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
162   - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
163   - },
164   - "ms": {
165   - "version": "2.1.2",
166   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
167   - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
168   - }
169 162 }
170 163 },
171 164 "@babel/parser": {
172   - "version": "7.4.5",
173   - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
174   - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==",
  165 + "version": "7.11.5",
  166 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz",
  167 + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==",
175 168 "dev": true
176 169 },
177 170 "@babel/runtime": {
178   - "version": "7.4.5",
179   - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
180   - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
  171 + "version": "7.11.2",
  172 + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz",
  173 + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==",
181 174 "dev": true,
182 175 "requires": {
183   - "regenerator-runtime": "^0.13.2"
  176 + "regenerator-runtime": "^0.13.4"
  177 + }
  178 + },
  179 + "@dabh/diagnostics": {
  180 + "version": "2.0.2",
  181 + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
  182 + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
  183 + "requires": {
  184 + "colorspace": "1.1.x",
  185 + "enabled": "2.0.x",
  186 + "kuler": "^2.0.0"
184 187 }
185 188 },
186 189 "@google-cloud/paginator": {
... ... @@ -230,56 +233,66 @@
230 233 }
231 234 },
232 235 "@grpc/grpc-js": {
233   - "version": "1.0.3",
234   - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.0.3.tgz",
235   - "integrity": "sha512-JKV3f5Bv2TZxK6eJSB9EarsZrnLxrvcFNwI9goq0YRXa3S6NNoCSnI3cG3lkXVIJ03Wng1WXe76kc2JQtRe7AQ==",
  236 + "version": "1.0.5",
  237 + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.0.5.tgz",
  238 + "integrity": "sha512-Hm+xOiqAhcpT9RYM8lc15dbQD7aQurM7ZU8ulmulepiPlN7iwBXXwP3vSBUimoFoApRqz7pSIisXU8pZaCB4og==",
236 239 "requires": {
237 240 "semver": "^6.2.0"
238   - },
239   - "dependencies": {
240   - "semver": {
241   - "version": "6.3.0",
242   - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
243   - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
244   - }
245 241 }
246 242 },
247 243 "@grpc/proto-loader": {
248   - "version": "0.5.4",
249   - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.4.tgz",
250   - "integrity": "sha512-HTM4QpI9B2XFkPz7pjwMyMgZchJ93TVkL3kWPW8GDMDKYxsMnmf4w2TNMJK7+KNiYHS5cJrCEAFlF+AwtXWVPA==",
  244 + "version": "0.5.5",
  245 + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.5.tgz",
  246 + "integrity": "sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==",
251 247 "requires": {
252 248 "lodash.camelcase": "^4.3.0",
253 249 "protobufjs": "^6.8.6"
254 250 }
255 251 },
256   - "@mrmlnc/readdir-enhanced": {
257   - "version": "2.2.1",
258   - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
259   - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
  252 + "@nodelib/fs.scandir": {
  253 + "version": "2.1.3",
  254 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
  255 + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
260 256 "dev": true,
261 257 "requires": {
262   - "call-me-maybe": "^1.0.1",
263   - "glob-to-regexp": "^0.3.0"
  258 + "@nodelib/fs.stat": "2.0.3",
  259 + "run-parallel": "^1.1.9"
264 260 }
265 261 },
266 262 "@nodelib/fs.stat": {
267   - "version": "1.1.3",
268   - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
269   - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
  263 + "version": "2.0.3",
  264 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
  265 + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
270 266 "dev": true
271 267 },
  268 + "@nodelib/fs.walk": {
  269 + "version": "1.2.4",
  270 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
  271 + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
  272 + "dev": true,
  273 + "requires": {
  274 + "@nodelib/fs.scandir": "2.1.3",
  275 + "fastq": "^1.6.0"
  276 + }
  277 + },
272 278 "@opencensus/web-types": {
273 279 "version": "0.0.7",
274 280 "resolved": "https://registry.npmjs.org/@opencensus/web-types/-/web-types-0.0.7.tgz",
275 281 "integrity": "sha512-xB+w7ZDAu3YBzqH44rCmG9/RlrOmFuDPt/bpf17eJr8eZSrLt7nc7LnWdxM9Mmoj/YKMHpxRg28txu3TcpiL+g=="
276 282 },
277 283 "@opentelemetry/api": {
278   - "version": "0.6.1",
279   - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.6.1.tgz",
280   - "integrity": "sha512-wpufGZa7tTxw7eAsjXJtiyIQ42IWQdX9iUQp7ACJcKo1hCtuhLU+K2Nv1U6oRwT1oAlZTE6m4CgWKZBhOiau3Q==",
  284 + "version": "0.10.2",
  285 + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.10.2.tgz",
  286 + "integrity": "sha512-GtpMGd6vkzDMYcpu2t9LlhEgMy/SzBwRnz48EejlRArYqZzqSzAsKmegUK7zHgl+EOIaK9mKHhnRaQu3qw20cA==",
281 287 "requires": {
282   - "@opentelemetry/context-base": "^0.6.1"
  288 + "@opentelemetry/context-base": "^0.10.2"
  289 + },
  290 + "dependencies": {
  291 + "@opentelemetry/context-base": {
  292 + "version": "0.10.2",
  293 + "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.10.2.tgz",
  294 + "integrity": "sha512-hZNKjKOYsckoOEgBziGMnBcX0M7EtstnCmwz5jZUOUYwlZ+/xxX6z3jPu1XVO2Jivk0eLfuP9GP+vFD49CMetw=="
  295 + }
283 296 }
284 297 },
285 298 "@opentelemetry/context-base": {
... ... @@ -351,6 +364,12 @@
351 364 "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.1.2.tgz",
352 365 "integrity": "sha512-j9n4bb6RhgFIydBe0+kpjnBPYumDaDyU8zvbWykyVMkku+c2CSu31MZkLeaBfqIwU+XCxlDpYDfyMQRkM0AkeQ=="
353 366 },
  367 + "@types/color-name": {
  368 + "version": "1.1.1",
  369 + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
  370 + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
  371 + "dev": true
  372 + },
354 373 "@types/duplexify": {
355 374 "version": "3.6.0",
356 375 "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz",
... ... @@ -359,28 +378,11 @@
359 378 "@types/node": "*"
360 379 }
361 380 },
362   - "@types/events": {
363   - "version": "3.0.0",
364   - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
365   - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
366   - "dev": true
367   - },
368 381 "@types/fs-extra": {
369   - "version": "8.1.0",
370   - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.0.tgz",
371   - "integrity": "sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg==",
372   - "requires": {
373   - "@types/node": "*"
374   - }
375   - },
376   - "@types/glob": {
377   - "version": "7.1.1",
378   - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
379   - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
380   - "dev": true,
  382 + "version": "8.1.1",
  383 + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz",
  384 + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==",
381 385 "requires": {
382   - "@types/events": "*",
383   - "@types/minimatch": "*",
384 386 "@types/node": "*"
385 387 }
386 388 },
... ... @@ -397,16 +399,10 @@
397 399 "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
398 400 "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
399 401 },
400   - "@types/minimatch": {
401   - "version": "3.0.3",
402   - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
403   - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
404   - "dev": true
405   - },
406 402 "@types/node": {
407   - "version": "10.12.10",
408   - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.10.tgz",
409   - "integrity": "sha512-8xZEYckCbUVgK8Eg7lf5Iy4COKJ5uXlnIOnePN0WUwSQggy9tolM+tDJf7wMOnT/JT/W9xDYIaYggt3mRV2O5w=="
  403 + "version": "14.11.2",
  404 + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz",
  405 + "integrity": "sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA=="
410 406 },
411 407 "@types/node-fetch": {
412 408 "version": "2.5.7",
... ... @@ -415,18 +411,6 @@
415 411 "requires": {
416 412 "@types/node": "*",
417 413 "form-data": "^3.0.0"
418   - },
419   - "dependencies": {
420   - "form-data": {
421   - "version": "3.0.0",
422   - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
423   - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
424   - "requires": {
425   - "asynckit": "^0.4.0",
426   - "combined-stream": "^1.0.8",
427   - "mime-types": "^2.1.12"
428   - }
429   - }
430 414 }
431 415 },
432 416 "@types/tunnel": {
... ... @@ -452,43 +436,28 @@
452 436 }
453 437 },
454 438 "agent-base": {
455   - "version": "6.0.0",
456   - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz",
457   - "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==",
  439 + "version": "6.0.1",
  440 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz",
  441 + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==",
458 442 "requires": {
459 443 "debug": "4"
460   - },
461   - "dependencies": {
462   - "debug": {
463   - "version": "4.1.1",
464   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
465   - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
466   - "requires": {
467   - "ms": "^2.1.1"
468   - }
469   - },
470   - "ms": {
471   - "version": "2.1.2",
472   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
473   - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
474   - }
475 444 }
476 445 },
477 446 "ajv": {
478   - "version": "6.10.2",
479   - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
480   - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
  447 + "version": "6.12.5",
  448 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
  449 + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
481 450 "requires": {
482   - "fast-deep-equal": "^2.0.1",
  451 + "fast-deep-equal": "^3.1.1",
483 452 "fast-json-stable-stringify": "^2.0.0",
484 453 "json-schema-traverse": "^0.4.1",
485 454 "uri-js": "^4.2.2"
486 455 }
487 456 },
488 457 "amqplib": {
489   - "version": "0.5.5",
490   - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.5.tgz",
491   - "integrity": "sha512-sWx1hbfHbyKMw6bXOK2k6+lHL8TESWxjAx5hG8fBtT7wcxoXNIsFxZMnFyBjxt3yL14vn7WqBDe5U6BGOadtLg==",
  458 + "version": "0.5.6",
  459 + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.6.tgz",
  460 + "integrity": "sha512-J4TR0WAMPBHN+tgTuhNsSObfM9eTVTZm/FNw0LyaGfbiLsBxqSameDNYpChUFXW4bnTKHDXy0ab+nuLhumnRrQ==",
492 461 "requires": {
493 462 "bitsyntax": "~0.1.0",
494 463 "bluebird": "^3.5.2",
... ... @@ -528,41 +497,14 @@
528 497 "dev": true,
529 498 "requires": {
530 499 "string-width": "^2.0.0"
531   - },
532   - "dependencies": {
533   - "ansi-regex": {
534   - "version": "3.0.0",
535   - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
536   - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
537   - "dev": true
538   - },
539   - "is-fullwidth-code-point": {
540   - "version": "2.0.0",
541   - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
542   - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
543   - "dev": true
544   - },
545   - "string-width": {
546   - "version": "2.1.1",
547   - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
548   - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
549   - "dev": true,
550   - "requires": {
551   - "is-fullwidth-code-point": "^2.0.0",
552   - "strip-ansi": "^4.0.0"
553   - }
554   - },
555   - "strip-ansi": {
556   - "version": "4.0.0",
557   - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
558   - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
559   - "dev": true,
560   - "requires": {
561   - "ansi-regex": "^3.0.0"
562   - }
563   - }
564 500 }
565 501 },
  502 + "ansi-regex": {
  503 + "version": "3.0.0",
  504 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
  505 + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
  506 + "dev": true
  507 + },
566 508 "ansi-styles": {
567 509 "version": "3.2.1",
568 510 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
... ... @@ -580,6 +522,17 @@
580 522 "requires": {
581 523 "micromatch": "^3.1.4",
582 524 "normalize-path": "^2.1.1"
  525 + },
  526 + "dependencies": {
  527 + "normalize-path": {
  528 + "version": "2.1.1",
  529 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
  530 + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
  531 + "dev": true,
  532 + "requires": {
  533 + "remove-trailing-separator": "^1.0.1"
  534 + }
  535 + }
583 536 }
584 537 },
585 538 "argparse": {
... ... @@ -609,18 +562,9 @@
609 562 "dev": true
610 563 },
611 564 "array-union": {
612   - "version": "1.0.2",
613   - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
614   - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
615   - "dev": true,
616   - "requires": {
617   - "array-uniq": "^1.0.1"
618   - }
619   - },
620   - "array-uniq": {
621   - "version": "1.0.3",
622   - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
623   - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
  565 + "version": "2.1.0",
  566 + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
  567 + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
624 568 "dev": true
625 569 },
626 570 "array-unique": {
... ... @@ -654,22 +598,19 @@
654 598 "dev": true
655 599 },
656 600 "async": {
657   - "version": "2.6.1",
658   - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
659   - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
660   - "requires": {
661   - "lodash": "^4.17.10"
662   - }
  601 + "version": "3.2.0",
  602 + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
  603 + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
663 604 },
664 605 "async-each": {
665   - "version": "1.0.1",
666   - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
667   - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
  606 + "version": "1.0.3",
  607 + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
  608 + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
668 609 },
669 610 "async-lock": {
670   - "version": "1.2.3",
671   - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.2.3.tgz",
672   - "integrity": "sha512-at+TRmdp2CDNTMIevBK7CMgaA39OpyMA7MtEDa37544GdenYy9m3P5JvXq4zKmUCVc2HWy1pT563U5f0Sj0kuw=="
  611 + "version": "1.2.4",
  612 + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.2.4.tgz",
  613 + "integrity": "sha512-UBQJC2pbeyGutIfYmErGc9RaJYnpZ1FHaxuKwb0ahvGiiCkPUf3p67Io+YLPmmv3RHY+mF6JEtNW8FlHsraAaA=="
673 614 },
674 615 "asynckit": {
675 616 "version": "0.4.0",
... ... @@ -683,11 +624,11 @@
683 624 "dev": true
684 625 },
685 626 "aws-sdk": {
686   - "version": "2.674.0",
687   - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.674.0.tgz",
688   - "integrity": "sha512-C0hBwsA779y3xbS1AClDcsg8ZBJE+BJC4vt1eHpI2mEbr0/qIwOcR2hl1DjXyp3RwHKoa/LPOTHRSSHDq01PxA==",
  627 + "version": "2.761.0",
  628 + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.761.0.tgz",
  629 + "integrity": "sha512-mSzdiqlnruFlJYrQVWPMyPQ8ynJe9P5QVD+edv8HFlYDQNOwpPCjlqI9kE1VE3cVcxkh0j2Q2kfLQa/pAY2w7Q==",
689 630 "requires": {
690   - "buffer": "4.9.1",
  631 + "buffer": "4.9.2",
691 632 "events": "1.1.1",
692 633 "ieee754": "1.1.13",
693 634 "jmespath": "0.15.0",
... ... @@ -699,9 +640,9 @@
699 640 },
700 641 "dependencies": {
701 642 "buffer": {
702   - "version": "4.9.1",
703   - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
704   - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
  643 + "version": "4.9.2",
  644 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
  645 + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
705 646 "requires": {
706 647 "base64-js": "^1.0.2",
707 648 "ieee754": "^1.1.4",
... ... @@ -713,11 +654,6 @@
713 654 "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
714 655 "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
715 656 },
716   - "punycode": {
717   - "version": "1.3.2",
718   - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
719   - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
720   - },
721 657 "sax": {
722 658 "version": "1.2.1",
723 659 "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
... ... @@ -732,6 +668,11 @@
732 668 "querystring": "0.2.0"
733 669 }
734 670 },
  671 + "uuid": {
  672 + "version": "3.3.2",
  673 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
  674 + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
  675 + },
735 676 "xml2js": {
736 677 "version": "0.4.19",
737 678 "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
... ... @@ -754,14 +695,14 @@
754 695 "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
755 696 },
756 697 "aws4": {
757   - "version": "1.8.0",
758   - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
759   - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
  698 + "version": "1.10.1",
  699 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
  700 + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA=="
760 701 },
761 702 "azure-common": {
762   - "version": "0.9.22",
763   - "resolved": "https://registry.npmjs.org/azure-common/-/azure-common-0.9.22.tgz",
764   - "integrity": "sha512-0r9tK9D+1xl2/VPVtfmGmtkMqfooiBLS87fX+Ab0hOCPVVe/6CgVC4in0wSf2Ta8r65DbvxV5P4/t8fp8Q3EsQ==",
  703 + "version": "0.9.25",
  704 + "resolved": "https://registry.npmjs.org/azure-common/-/azure-common-0.9.25.tgz",
  705 + "integrity": "sha512-L7YO3DUQ0iwiaUyD9Wy6B66Y6HmCzMb9vxUqKklgzU+gFRRBKIMSVR4oZS6IkQfFCSm9eKwHuH2p3UdDPszd7g==",
765 706 "requires": {
766 707 "dateformat": "1.0.2-1.2.3",
767 708 "duplexer": "~0.1.1",
... ... @@ -772,7 +713,7 @@
772 713 "underscore": "1.4.x",
773 714 "validator": "^9.4.1",
774 715 "xml2js": "^0.4.19",
775   - "xmlbuilder": "0.4.3"
  716 + "xmlbuilder": "15.1.1"
776 717 },
777 718 "dependencies": {
778 719 "underscore": {
... ... @@ -781,9 +722,9 @@
781 722 "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
782 723 },
783 724 "xmlbuilder": {
784   - "version": "0.4.3",
785   - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.3.tgz",
786   - "integrity": "sha1-xGFLp04K0ZbmCcknLNnh3bKKilg="
  725 + "version": "15.1.1",
  726 + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
  727 + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="
787 728 }
788 729 }
789 730 },
... ... @@ -873,16 +814,26 @@
873 814 }
874 815 },
875 816 "bignumber.js": {
876   - "version": "7.2.1",
877   - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz",
878   - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ=="
  817 + "version": "9.0.0",
  818 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
  819 + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
879 820 },
880 821 "binary-extensions": {
881   - "version": "1.12.0",
882   - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
883   - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
  822 + "version": "1.13.1",
  823 + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
  824 + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
884 825 "dev": true
885 826 },
  827 + "bindings": {
  828 + "version": "1.5.0",
  829 + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
  830 + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
  831 + "dev": true,
  832 + "optional": true,
  833 + "requires": {
  834 + "file-uri-to-path": "1.0.0"
  835 + }
  836 + },
886 837 "bitsyntax": {
887 838 "version": "0.1.0",
888 839 "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz",
... ... @@ -891,6 +842,21 @@
891 842 "buffer-more-ints": "~1.0.0",
892 843 "debug": "~2.6.9",
893 844 "safe-buffer": "~5.1.2"
  845 + },
  846 + "dependencies": {
  847 + "debug": {
  848 + "version": "2.6.9",
  849 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  850 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  851 + "requires": {
  852 + "ms": "2.0.0"
  853 + }
  854 + },
  855 + "ms": {
  856 + "version": "2.0.0",
  857 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  858 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
  859 + }
894 860 }
895 861 },
896 862 "bluebird": {
... ... @@ -911,39 +877,6 @@
911 877 "string-width": "^2.0.0",
912 878 "term-size": "^1.2.0",
913 879 "widest-line": "^2.0.0"
914   - },
915   - "dependencies": {
916   - "ansi-regex": {
917   - "version": "3.0.0",
918   - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
919   - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
920   - "dev": true
921   - },
922   - "is-fullwidth-code-point": {
923   - "version": "2.0.0",
924   - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
925   - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
926   - "dev": true
927   - },
928   - "string-width": {
929   - "version": "2.1.1",
930   - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
931   - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
932   - "dev": true,
933   - "requires": {
934   - "is-fullwidth-code-point": "^2.0.0",
935   - "strip-ansi": "^4.0.0"
936   - }
937   - },
938   - "strip-ansi": {
939   - "version": "4.0.0",
940   - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
941   - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
942   - "dev": true,
943   - "requires": {
944   - "ansi-regex": "^3.0.0"
945   - }
946   - }
947 880 }
948 881 },
949 882 "brace-expansion": {
... ... @@ -1027,12 +960,6 @@
1027 960 "unset-value": "^1.0.0"
1028 961 }
1029 962 },
1030   - "call-me-maybe": {
1031   - "version": "1.0.1",
1032   - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
1033   - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
1034   - "dev": true
1035   - },
1036 963 "camelcase": {
1037 964 "version": "4.1.0",
1038 965 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
... ... @@ -1051,9 +978,9 @@
1051 978 "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
1052 979 },
1053 980 "chalk": {
1054   - "version": "2.4.1",
1055   - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
1056   - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
  981 + "version": "2.4.2",
  982 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
  983 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1057 984 "dev": true,
1058 985 "requires": {
1059 986 "ansi-styles": "^3.2.1",
... ... @@ -1062,24 +989,23 @@
1062 989 }
1063 990 },
1064 991 "chokidar": {
1065   - "version": "2.0.4",
1066   - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
1067   - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
  992 + "version": "2.1.8",
  993 + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
  994 + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
1068 995 "dev": true,
1069 996 "requires": {
1070 997 "anymatch": "^2.0.0",
1071   - "async-each": "^1.0.0",
1072   - "braces": "^2.3.0",
1073   - "fsevents": "^1.2.2",
  998 + "async-each": "^1.0.1",
  999 + "braces": "^2.3.2",
  1000 + "fsevents": "^1.2.7",
1074 1001 "glob-parent": "^3.1.0",
1075   - "inherits": "^2.0.1",
  1002 + "inherits": "^2.0.3",
1076 1003 "is-binary-path": "^1.0.0",
1077 1004 "is-glob": "^4.0.0",
1078   - "lodash.debounce": "^4.0.8",
1079   - "normalize-path": "^2.1.1",
  1005 + "normalize-path": "^3.0.0",
1080 1006 "path-is-absolute": "^1.0.0",
1081   - "readdirp": "^2.0.0",
1082   - "upath": "^1.0.5"
  1007 + "readdirp": "^2.2.1",
  1008 + "upath": "^1.1.1"
1083 1009 }
1084 1010 },
1085 1011 "ci-info": {
... ... @@ -1158,20 +1084,15 @@
1158 1084 "simple-swizzle": "^0.2.2"
1159 1085 }
1160 1086 },
1161   - "colornames": {
1162   - "version": "1.1.1",
1163   - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz",
1164   - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y="
1165   - },
1166 1087 "colors": {
1167   - "version": "1.3.2",
1168   - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz",
1169   - "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ=="
  1088 + "version": "1.4.0",
  1089 + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
  1090 + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
1170 1091 },
1171 1092 "colorspace": {
1172   - "version": "1.1.1",
1173   - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.1.tgz",
1174   - "integrity": "sha512-pI3btWyiuz7Ken0BWh9Elzsmv2bM9AhA7psXib4anUXy/orfZ/E0MbQwhSOG/9L8hLlalqrU0UhOuqxW1YjmVw==",
  1093 + "version": "1.1.2",
  1094 + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
  1095 + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
1175 1096 "requires": {
1176 1097 "color": "3.0.x",
1177 1098 "text-hex": "1.0.x"
... ... @@ -1186,9 +1107,9 @@
1186 1107 }
1187 1108 },
1188 1109 "component-emitter": {
1189   - "version": "1.2.1",
1190   - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
1191   - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
  1110 + "version": "1.3.0",
  1111 + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
  1112 + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
1192 1113 "dev": true
1193 1114 },
1194 1115 "concat-map": {
... ... @@ -1198,20 +1119,20 @@
1198 1119 "dev": true
1199 1120 },
1200 1121 "config": {
1201   - "version": "3.2.2",
1202   - "resolved": "https://registry.npmjs.org/config/-/config-3.2.2.tgz",
1203   - "integrity": "sha512-rOsfIOAcG82AWouK4/vBS/OKz3UPl2T/kP0irExmXJJOoWg2CmdfPLdx56bCoMUMFNh+7soQkQWCUC8DyemiwQ==",
  1122 + "version": "3.3.2",
  1123 + "resolved": "https://registry.npmjs.org/config/-/config-3.3.2.tgz",
  1124 + "integrity": "sha512-NlGfBn2565YA44Irn7GV5KHlIGC3KJbf0062/zW5ddP9VXIuRj0m7HVyFAWvMZvaHPEglyGfwmevGz3KosIpCg==",
1204 1125 "requires": {
1205   - "json5": "^1.0.1"
  1126 + "json5": "^2.1.1"
1206 1127 }
1207 1128 },
1208 1129 "configstore": {
1209   - "version": "3.1.2",
1210   - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
1211   - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
  1130 + "version": "3.1.5",
  1131 + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz",
  1132 + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==",
1212 1133 "dev": true,
1213 1134 "requires": {
1214   - "dot-prop": "^4.1.0",
  1135 + "dot-prop": "^4.2.1",
1215 1136 "graceful-fs": "^4.1.2",
1216 1137 "make-dir": "^1.0.0",
1217 1138 "unique-string": "^1.0.0",
... ... @@ -1239,52 +1160,6 @@
1239 1160 "capture-stack-trace": "^1.0.0"
1240 1161 }
1241 1162 },
1242   - "cross-env": {
1243   - "version": "6.0.3",
1244   - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz",
1245   - "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==",
1246   - "requires": {
1247   - "cross-spawn": "^7.0.0"
1248   - },
1249   - "dependencies": {
1250   - "cross-spawn": {
1251   - "version": "7.0.2",
1252   - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
1253   - "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==",
1254   - "requires": {
1255   - "path-key": "^3.1.0",
1256   - "shebang-command": "^2.0.0",
1257   - "which": "^2.0.1"
1258   - }
1259   - },
1260   - "path-key": {
1261   - "version": "3.1.1",
1262   - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1263   - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
1264   - },
1265   - "shebang-command": {
1266   - "version": "2.0.0",
1267   - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1268   - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1269   - "requires": {
1270   - "shebang-regex": "^3.0.0"
1271   - }
1272   - },
1273   - "shebang-regex": {
1274   - "version": "3.0.0",
1275   - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1276   - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
1277   - },
1278   - "which": {
1279   - "version": "2.0.2",
1280   - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1281   - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1282   - "requires": {
1283   - "isexe": "^2.0.0"
1284   - }
1285   - }
1286   - }
1287   - },
1288 1163 "cross-spawn": {
1289 1164 "version": "5.1.0",
1290 1165 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
... ... @@ -1294,6 +1169,24 @@
1294 1169 "lru-cache": "^4.0.1",
1295 1170 "shebang-command": "^1.2.0",
1296 1171 "which": "^1.2.9"
  1172 + },
  1173 + "dependencies": {
  1174 + "lru-cache": {
  1175 + "version": "4.1.5",
  1176 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
  1177 + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
  1178 + "dev": true,
  1179 + "requires": {
  1180 + "pseudomap": "^1.0.2",
  1181 + "yallist": "^2.1.2"
  1182 + }
  1183 + },
  1184 + "yallist": {
  1185 + "version": "2.1.2",
  1186 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
  1187 + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
  1188 + "dev": true
  1189 + }
1297 1190 }
1298 1191 },
1299 1192 "crypto-random-string": {
... ... @@ -1321,11 +1214,11 @@
1321 1214 "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk="
1322 1215 },
1323 1216 "debug": {
1324   - "version": "2.6.9",
1325   - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1326   - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  1217 + "version": "4.2.0",
  1218 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
  1219 + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
1327 1220 "requires": {
1328   - "ms": "2.0.0"
  1221 + "ms": "2.1.2"
1329 1222 }
1330 1223 },
1331 1224 "decode-uri-component": {
... ... @@ -1392,38 +1285,28 @@
1392 1285 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1393 1286 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
1394 1287 },
1395   - "diagnostics": {
1396   - "version": "1.1.1",
1397   - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz",
1398   - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==",
1399   - "requires": {
1400   - "colorspace": "1.1.x",
1401   - "enabled": "1.0.x",
1402   - "kuler": "1.0.x"
1403   - }
1404   - },
1405 1288 "dir-glob": {
1406   - "version": "2.2.2",
1407   - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
1408   - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
  1289 + "version": "3.0.1",
  1290 + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
  1291 + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
1409 1292 "dev": true,
1410 1293 "requires": {
1411   - "path-type": "^3.0.0"
  1294 + "path-type": "^4.0.0"
1412 1295 }
1413 1296 },
1414 1297 "dot-prop": {
1415   - "version": "4.2.0",
1416   - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
1417   - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
  1298 + "version": "4.2.1",
  1299 + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
  1300 + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
1418 1301 "dev": true,
1419 1302 "requires": {
1420 1303 "is-obj": "^1.0.0"
1421 1304 }
1422 1305 },
1423 1306 "duplexer": {
1424   - "version": "0.1.1",
1425   - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
1426   - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
  1307 + "version": "0.1.2",
  1308 + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
  1309 + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="
1427 1310 },
1428 1311 "duplexer3": {
1429 1312 "version": "0.1.4",
... ... @@ -1460,12 +1343,9 @@
1460 1343 }
1461 1344 },
1462 1345 "enabled": {
1463   - "version": "1.0.2",
1464   - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz",
1465   - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=",
1466   - "requires": {
1467   - "env-variable": "0.0.x"
1468   - }
  1346 + "version": "2.0.0",
  1347 + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
  1348 + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
1469 1349 },
1470 1350 "end-of-stream": {
1471 1351 "version": "1.4.4",
... ... @@ -1475,11 +1355,6 @@
1475 1355 "once": "^1.4.0"
1476 1356 }
1477 1357 },
1478   - "env-variable": {
1479   - "version": "0.0.5",
1480   - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz",
1481   - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA=="
1482   - },
1483 1358 "envconf": {
1484 1359 "version": "0.0.4",
1485 1360 "resolved": "https://registry.npmjs.org/envconf/-/envconf-0.0.4.tgz",
... ... @@ -1492,24 +1367,18 @@
1492 1367 "dev": true
1493 1368 },
1494 1369 "escodegen": {
1495   - "version": "1.11.1",
1496   - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
1497   - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
  1370 + "version": "1.14.3",
  1371 + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
  1372 + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
1498 1373 "dev": true,
1499 1374 "requires": {
1500   - "esprima": "^3.1.3",
  1375 + "esprima": "^4.0.1",
1501 1376 "estraverse": "^4.2.0",
1502 1377 "esutils": "^2.0.2",
1503 1378 "optionator": "^0.8.1",
1504 1379 "source-map": "~0.6.1"
1505 1380 },
1506 1381 "dependencies": {
1507   - "esprima": {
1508   - "version": "3.1.3",
1509   - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
1510   - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
1511   - "dev": true
1512   - },
1513 1382 "source-map": {
1514 1383 "version": "0.6.1",
1515 1384 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
... ... @@ -1525,15 +1394,15 @@
1525 1394 "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
1526 1395 },
1527 1396 "estraverse": {
1528   - "version": "4.2.0",
1529   - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
1530   - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
  1397 + "version": "4.3.0",
  1398 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
  1399 + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1531 1400 "dev": true
1532 1401 },
1533 1402 "esutils": {
1534   - "version": "2.0.2",
1535   - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
1536   - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
  1403 + "version": "2.0.3",
  1404 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
  1405 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1537 1406 "dev": true
1538 1407 },
1539 1408 "event-target-shim": {
... ... @@ -1542,9 +1411,9 @@
1542 1411 "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
1543 1412 },
1544 1413 "events": {
1545   - "version": "3.1.0",
1546   - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
1547   - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
  1414 + "version": "3.2.0",
  1415 + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
  1416 + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
1548 1417 },
1549 1418 "execa": {
1550 1419 "version": "0.7.0",
... ... @@ -1559,6 +1428,14 @@
1559 1428 "p-finally": "^1.0.0",
1560 1429 "signal-exit": "^3.0.0",
1561 1430 "strip-eof": "^1.0.0"
  1431 + },
  1432 + "dependencies": {
  1433 + "is-stream": {
  1434 + "version": "1.1.0",
  1435 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
  1436 + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
  1437 + "dev": true
  1438 + }
1562 1439 }
1563 1440 },
1564 1441 "expand-brackets": {
... ... @@ -1576,6 +1453,15 @@
1576 1453 "to-regex": "^3.0.1"
1577 1454 },
1578 1455 "dependencies": {
  1456 + "debug": {
  1457 + "version": "2.6.9",
  1458 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  1459 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  1460 + "dev": true,
  1461 + "requires": {
  1462 + "ms": "2.0.0"
  1463 + }
  1464 + },
1579 1465 "define-property": {
1580 1466 "version": "0.2.5",
1581 1467 "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
... ... @@ -1593,6 +1479,12 @@
1593 1479 "requires": {
1594 1480 "is-extendable": "^0.1.0"
1595 1481 }
  1482 + },
  1483 + "ms": {
  1484 + "version": "2.0.0",
  1485 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  1486 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
  1487 + "dev": true
1596 1488 }
1597 1489 }
1598 1490 },
... ... @@ -1699,28 +1591,82 @@
1699 1591 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
1700 1592 },
1701 1593 "fast-deep-equal": {
1702   - "version": "2.0.1",
1703   - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
1704   - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
  1594 + "version": "3.1.3",
  1595 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
  1596 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
1705 1597 },
1706 1598 "fast-glob": {
1707   - "version": "2.2.7",
1708   - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
1709   - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
  1599 + "version": "3.2.4",
  1600 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
  1601 + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
1710 1602 "dev": true,
1711 1603 "requires": {
1712   - "@mrmlnc/readdir-enhanced": "^2.2.1",
1713   - "@nodelib/fs.stat": "^1.1.2",
1714   - "glob-parent": "^3.1.0",
1715   - "is-glob": "^4.0.0",
1716   - "merge2": "^1.2.3",
1717   - "micromatch": "^3.1.10"
  1604 + "@nodelib/fs.stat": "^2.0.2",
  1605 + "@nodelib/fs.walk": "^1.2.3",
  1606 + "glob-parent": "^5.1.0",
  1607 + "merge2": "^1.3.0",
  1608 + "micromatch": "^4.0.2",
  1609 + "picomatch": "^2.2.1"
  1610 + },
  1611 + "dependencies": {
  1612 + "braces": {
  1613 + "version": "3.0.2",
  1614 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
  1615 + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
  1616 + "dev": true,
  1617 + "requires": {
  1618 + "fill-range": "^7.0.1"
  1619 + }
  1620 + },
  1621 + "fill-range": {
  1622 + "version": "7.0.1",
  1623 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
  1624 + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
  1625 + "dev": true,
  1626 + "requires": {
  1627 + "to-regex-range": "^5.0.1"
  1628 + }
  1629 + },
  1630 + "glob-parent": {
  1631 + "version": "5.1.1",
  1632 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
  1633 + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
  1634 + "dev": true,
  1635 + "requires": {
  1636 + "is-glob": "^4.0.1"
  1637 + }
  1638 + },
  1639 + "is-number": {
  1640 + "version": "7.0.0",
  1641 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
  1642 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
  1643 + "dev": true
  1644 + },
  1645 + "micromatch": {
  1646 + "version": "4.0.2",
  1647 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
  1648 + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
  1649 + "dev": true,
  1650 + "requires": {
  1651 + "braces": "^3.0.1",
  1652 + "picomatch": "^2.0.5"
  1653 + }
  1654 + },
  1655 + "to-regex-range": {
  1656 + "version": "5.0.1",
  1657 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
  1658 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
  1659 + "dev": true,
  1660 + "requires": {
  1661 + "is-number": "^7.0.0"
  1662 + }
  1663 + }
1718 1664 }
1719 1665 },
1720 1666 "fast-json-stable-stringify": {
1721   - "version": "2.0.0",
1722   - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
1723   - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
  1667 + "version": "2.1.0",
  1668 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
  1669 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
1724 1670 },
1725 1671 "fast-levenshtein": {
1726 1672 "version": "2.0.6",
... ... @@ -1729,19 +1675,28 @@
1729 1675 "dev": true
1730 1676 },
1731 1677 "fast-safe-stringify": {
1732   - "version": "2.0.6",
1733   - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz",
1734   - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg=="
  1678 + "version": "2.0.7",
  1679 + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
  1680 + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
1735 1681 },
1736 1682 "fast-text-encoding": {
1737   - "version": "1.0.2",
1738   - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.2.tgz",
1739   - "integrity": "sha512-5rQdinSsycpzvAoHga2EDn+LRX1d5xLFsuNG0Kg61JrAT/tASXcLL0nf/33v+sAxlQcfYmWbTURa1mmAf55jGw=="
  1683 + "version": "1.0.3",
  1684 + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
  1685 + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
  1686 + },
  1687 + "fastq": {
  1688 + "version": "1.8.0",
  1689 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
  1690 + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
  1691 + "dev": true,
  1692 + "requires": {
  1693 + "reusify": "^1.0.4"
  1694 + }
1740 1695 },
1741 1696 "fecha": {
1742   - "version": "2.3.3",
1743   - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
1744   - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
  1697 + "version": "4.2.0",
  1698 + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz",
  1699 + "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg=="
1745 1700 },
1746 1701 "file-stream-rotator": {
1747 1702 "version": "0.4.1",
... ... @@ -1751,6 +1706,13 @@
1751 1706 "moment": "^2.11.2"
1752 1707 }
1753 1708 },
  1709 + "file-uri-to-path": {
  1710 + "version": "1.0.0",
  1711 + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
  1712 + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
  1713 + "dev": true,
  1714 + "optional": true
  1715 + },
1754 1716 "fill-range": {
1755 1717 "version": "4.0.0",
1756 1718 "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
... ... @@ -1774,6 +1736,11 @@
1774 1736 }
1775 1737 }
1776 1738 },
  1739 + "fn.name": {
  1740 + "version": "1.1.0",
  1741 + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
  1742 + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
  1743 + },
1777 1744 "for-in": {
1778 1745 "version": "1.0.2",
1779 1746 "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
... ... @@ -1786,12 +1753,12 @@
1786 1753 "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
1787 1754 },
1788 1755 "form-data": {
1789   - "version": "2.3.3",
1790   - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
1791   - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
  1756 + "version": "3.0.0",
  1757 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
  1758 + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
1792 1759 "requires": {
1793 1760 "asynckit": "^0.4.0",
1794   - "combined-stream": "^1.0.6",
  1761 + "combined-stream": "^1.0.8",
1795 1762 "mime-types": "^2.1.12"
1796 1763 }
1797 1764 },
... ... @@ -1825,550 +1792,15 @@
1825 1792 "universalify": "^0.1.0"
1826 1793 }
1827 1794 },
1828   - "fs.realpath": {
1829   - "version": "1.0.0",
1830   - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1831   - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1832   - "dev": true
1833   - },
1834 1795 "fsevents": {
1835   - "version": "1.2.4",
1836   - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
1837   - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
  1796 + "version": "1.2.13",
  1797 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
  1798 + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
1838 1799 "dev": true,
1839 1800 "optional": true,
1840 1801 "requires": {
1841   - "nan": "^2.9.2",
1842   - "node-pre-gyp": "^0.10.0"
1843   - },
1844   - "dependencies": {
1845   - "abbrev": {
1846   - "version": "1.1.1",
1847   - "bundled": true,
1848   - "dev": true,
1849   - "optional": true
1850   - },
1851   - "ansi-regex": {
1852   - "version": "2.1.1",
1853   - "bundled": true,
1854   - "dev": true
1855   - },
1856   - "aproba": {
1857   - "version": "1.2.0",
1858   - "bundled": true,
1859   - "dev": true,
1860   - "optional": true
1861   - },
1862   - "are-we-there-yet": {
1863   - "version": "1.1.4",
1864   - "bundled": true,
1865   - "dev": true,
1866   - "optional": true,
1867   - "requires": {
1868   - "delegates": "^1.0.0",
1869   - "readable-stream": "^2.0.6"
1870   - }
1871   - },
1872   - "balanced-match": {
1873   - "version": "1.0.0",
1874   - "bundled": true,
1875   - "dev": true,
1876   - "optional": true
1877   - },
1878   - "brace-expansion": {
1879   - "version": "1.1.11",
1880   - "bundled": true,
1881   - "dev": true,
1882   - "optional": true,
1883   - "requires": {
1884   - "balanced-match": "^1.0.0",
1885   - "concat-map": "0.0.1"
1886   - }
1887   - },
1888   - "chownr": {
1889   - "version": "1.0.1",
1890   - "bundled": true,
1891   - "dev": true,
1892   - "optional": true
1893   - },
1894   - "code-point-at": {
1895   - "version": "1.1.0",
1896   - "bundled": true,
1897   - "dev": true,
1898   - "optional": true
1899   - },
1900   - "concat-map": {
1901   - "version": "0.0.1",
1902   - "bundled": true,
1903   - "dev": true,
1904   - "optional": true
1905   - },
1906   - "console-control-strings": {
1907   - "version": "1.1.0",
1908   - "bundled": true,
1909   - "dev": true,
1910   - "optional": true
1911   - },
1912   - "core-util-is": {
1913   - "version": "1.0.2",
1914   - "bundled": true,
1915   - "dev": true,
1916   - "optional": true
1917   - },
1918   - "debug": {
1919   - "version": "2.6.9",
1920   - "bundled": true,
1921   - "dev": true,
1922   - "optional": true,
1923   - "requires": {
1924   - "ms": "2.0.0"
1925   - }
1926   - },
1927   - "deep-extend": {
1928   - "version": "0.5.1",
1929   - "bundled": true,
1930   - "dev": true,
1931   - "optional": true
1932   - },
1933   - "delegates": {
1934   - "version": "1.0.0",
1935   - "bundled": true,
1936   - "dev": true,
1937   - "optional": true
1938   - },
1939   - "detect-libc": {
1940   - "version": "1.0.3",
1941   - "bundled": true,
1942   - "dev": true,
1943   - "optional": true
1944   - },
1945   - "fs-minipass": {
1946   - "version": "1.2.5",
1947   - "bundled": true,
1948   - "dev": true,
1949   - "optional": true,
1950   - "requires": {
1951   - "minipass": "^2.2.1"
1952   - }
1953   - },
1954   - "fs.realpath": {
1955   - "version": "1.0.0",
1956   - "bundled": true,
1957   - "dev": true,
1958   - "optional": true
1959   - },
1960   - "gauge": {
1961   - "version": "2.7.4",
1962   - "bundled": true,
1963   - "dev": true,
1964   - "optional": true,
1965   - "requires": {
1966   - "aproba": "^1.0.3",
1967   - "console-control-strings": "^1.0.0",
1968   - "has-unicode": "^2.0.0",
1969   - "object-assign": "^4.1.0",
1970   - "signal-exit": "^3.0.0",
1971   - "string-width": "^1.0.1",
1972   - "strip-ansi": "^3.0.1",
1973   - "wide-align": "^1.1.0"
1974   - }
1975   - },
1976   - "glob": {
1977   - "version": "7.1.2",
1978   - "bundled": true,
1979   - "dev": true,
1980   - "optional": true,
1981   - "requires": {
1982   - "fs.realpath": "^1.0.0",
1983   - "inflight": "^1.0.4",
1984   - "inherits": "2",
1985   - "minimatch": "^3.0.4",
1986   - "once": "^1.3.0",
1987   - "path-is-absolute": "^1.0.0"
1988   - }
1989   - },
1990   - "has-unicode": {
1991   - "version": "2.0.1",
1992   - "bundled": true,
1993   - "dev": true,
1994   - "optional": true
1995   - },
1996   - "iconv-lite": {
1997   - "version": "0.4.21",
1998   - "bundled": true,
1999   - "dev": true,
2000   - "optional": true,
2001   - "requires": {
2002   - "safer-buffer": "^2.1.0"
2003   - }
2004   - },
2005   - "ignore-walk": {
2006   - "version": "3.0.1",
2007   - "bundled": true,
2008   - "dev": true,
2009   - "optional": true,
2010   - "requires": {
2011   - "minimatch": "^3.0.4"
2012   - }
2013   - },
2014   - "inflight": {
2015   - "version": "1.0.6",
2016   - "bundled": true,
2017   - "dev": true,
2018   - "optional": true,
2019   - "requires": {
2020   - "once": "^1.3.0",
2021   - "wrappy": "1"
2022   - }
2023   - },
2024   - "inherits": {
2025   - "version": "2.0.3",
2026   - "bundled": true,
2027   - "dev": true,
2028   - "optional": true
2029   - },
2030   - "ini": {
2031   - "version": "1.3.5",
2032   - "bundled": true,
2033   - "dev": true,
2034   - "optional": true
2035   - },
2036   - "is-fullwidth-code-point": {
2037   - "version": "1.0.0",
2038   - "bundled": true,
2039   - "dev": true,
2040   - "optional": true,
2041   - "requires": {
2042   - "number-is-nan": "^1.0.0"
2043   - }
2044   - },
2045   - "isarray": {
2046   - "version": "1.0.0",
2047   - "bundled": true,
2048   - "dev": true,
2049   - "optional": true
2050   - },
2051   - "minimatch": {
2052   - "version": "3.0.4",
2053   - "bundled": true,
2054   - "dev": true,
2055   - "optional": true,
2056   - "requires": {
2057   - "brace-expansion": "^1.1.7"
2058   - }
2059   - },
2060   - "minimist": {
2061   - "version": "0.0.8",
2062   - "bundled": true,
2063   - "dev": true
2064   - },
2065   - "minipass": {
2066   - "version": "2.2.4",
2067   - "bundled": true,
2068   - "dev": true,
2069   - "requires": {
2070   - "safe-buffer": "^5.1.1",
2071   - "yallist": "^3.0.0"
2072   - }
2073   - },
2074   - "minizlib": {
2075   - "version": "1.1.0",
2076   - "bundled": true,
2077   - "dev": true,
2078   - "optional": true,
2079   - "requires": {
2080   - "minipass": "^2.2.1"
2081   - }
2082   - },
2083   - "mkdirp": {
2084   - "version": "0.5.1",
2085   - "bundled": true,
2086   - "dev": true,
2087   - "requires": {
2088   - "minimist": "0.0.8"
2089   - }
2090   - },
2091   - "ms": {
2092   - "version": "2.0.0",
2093   - "bundled": true,
2094   - "dev": true,
2095   - "optional": true
2096   - },
2097   - "needle": {
2098   - "version": "2.2.0",
2099   - "bundled": true,
2100   - "dev": true,
2101   - "optional": true,
2102   - "requires": {
2103   - "debug": "^2.1.2",
2104   - "iconv-lite": "^0.4.4",
2105   - "sax": "^1.2.4"
2106   - }
2107   - },
2108   - "node-pre-gyp": {
2109   - "version": "0.10.0",
2110   - "bundled": true,
2111   - "dev": true,
2112   - "optional": true,
2113   - "requires": {
2114   - "detect-libc": "^1.0.2",
2115   - "mkdirp": "^0.5.1",
2116   - "needle": "^2.2.0",
2117   - "nopt": "^4.0.1",
2118   - "npm-packlist": "^1.1.6",
2119   - "npmlog": "^4.0.2",
2120   - "rc": "^1.1.7",
2121   - "rimraf": "^2.6.1",
2122   - "semver": "^5.3.0",
2123   - "tar": "^4"
2124   - }
2125   - },
2126   - "nopt": {
2127   - "version": "4.0.1",
2128   - "bundled": true,
2129   - "dev": true,
2130   - "optional": true,
2131   - "requires": {
2132   - "abbrev": "1",
2133   - "osenv": "^0.1.4"
2134   - }
2135   - },
2136   - "npm-bundled": {
2137   - "version": "1.0.3",
2138   - "bundled": true,
2139   - "dev": true,
2140   - "optional": true
2141   - },
2142   - "npm-packlist": {
2143   - "version": "1.1.10",
2144   - "bundled": true,
2145   - "dev": true,
2146   - "optional": true,
2147   - "requires": {
2148   - "ignore-walk": "^3.0.1",
2149   - "npm-bundled": "^1.0.1"
2150   - }
2151   - },
2152   - "npmlog": {
2153   - "version": "4.1.2",
2154   - "bundled": true,
2155   - "dev": true,
2156   - "optional": true,
2157   - "requires": {
2158   - "are-we-there-yet": "~1.1.2",
2159   - "console-control-strings": "~1.1.0",
2160   - "gauge": "~2.7.3",
2161   - "set-blocking": "~2.0.0"
2162   - }
2163   - },
2164   - "number-is-nan": {
2165   - "version": "1.0.1",
2166   - "bundled": true,
2167   - "dev": true,
2168   - "optional": true
2169   - },
2170   - "object-assign": {
2171   - "version": "4.1.1",
2172   - "bundled": true,
2173   - "dev": true,
2174   - "optional": true
2175   - },
2176   - "once": {
2177   - "version": "1.4.0",
2178   - "bundled": true,
2179   - "dev": true,
2180   - "optional": true,
2181   - "requires": {
2182   - "wrappy": "1"
2183   - }
2184   - },
2185   - "os-homedir": {
2186   - "version": "1.0.2",
2187   - "bundled": true,
2188   - "dev": true,
2189   - "optional": true
2190   - },
2191   - "os-tmpdir": {
2192   - "version": "1.0.2",
2193   - "bundled": true,
2194   - "dev": true,
2195   - "optional": true
2196   - },
2197   - "osenv": {
2198   - "version": "0.1.5",
2199   - "bundled": true,
2200   - "dev": true,
2201   - "optional": true,
2202   - "requires": {
2203   - "os-homedir": "^1.0.0",
2204   - "os-tmpdir": "^1.0.0"
2205   - }
2206   - },
2207   - "path-is-absolute": {
2208   - "version": "1.0.1",
2209   - "bundled": true,
2210   - "dev": true,
2211   - "optional": true
2212   - },
2213   - "process-nextick-args": {
2214   - "version": "2.0.0",
2215   - "bundled": true,
2216   - "dev": true,
2217   - "optional": true
2218   - },
2219   - "rc": {
2220   - "version": "1.2.7",
2221   - "bundled": true,
2222   - "dev": true,
2223   - "optional": true,
2224   - "requires": {
2225   - "deep-extend": "^0.5.1",
2226   - "ini": "~1.3.0",
2227   - "minimist": "^1.2.0",
2228   - "strip-json-comments": "~2.0.1"
2229   - },
2230   - "dependencies": {
2231   - "minimist": {
2232   - "version": "1.2.0",
2233   - "bundled": true,
2234   - "dev": true,
2235   - "optional": true
2236   - }
2237   - }
2238   - },
2239   - "readable-stream": {
2240   - "version": "2.3.6",
2241   - "bundled": true,
2242   - "dev": true,
2243   - "optional": true,
2244   - "requires": {
2245   - "core-util-is": "~1.0.0",
2246   - "inherits": "~2.0.3",
2247   - "isarray": "~1.0.0",
2248   - "process-nextick-args": "~2.0.0",
2249   - "safe-buffer": "~5.1.1",
2250   - "string_decoder": "~1.1.1",
2251   - "util-deprecate": "~1.0.1"
2252   - }
2253   - },
2254   - "rimraf": {
2255   - "version": "2.6.2",
2256   - "bundled": true,
2257   - "dev": true,
2258   - "optional": true,
2259   - "requires": {
2260   - "glob": "^7.0.5"
2261   - }
2262   - },
2263   - "safe-buffer": {
2264   - "version": "5.1.1",
2265   - "bundled": true,
2266   - "dev": true
2267   - },
2268   - "safer-buffer": {
2269   - "version": "2.1.2",
2270   - "bundled": true,
2271   - "dev": true,
2272   - "optional": true
2273   - },
2274   - "sax": {
2275   - "version": "1.2.4",
2276   - "bundled": true,
2277   - "dev": true,
2278   - "optional": true
2279   - },
2280   - "semver": {
2281   - "version": "5.5.0",
2282   - "bundled": true,
2283   - "dev": true,
2284   - "optional": true
2285   - },
2286   - "set-blocking": {
2287   - "version": "2.0.0",
2288   - "bundled": true,
2289   - "dev": true,
2290   - "optional": true
2291   - },
2292   - "signal-exit": {
2293   - "version": "3.0.2",
2294   - "bundled": true,
2295   - "dev": true,
2296   - "optional": true
2297   - },
2298   - "string-width": {
2299   - "version": "1.0.2",
2300   - "bundled": true,
2301   - "dev": true,
2302   - "optional": true,
2303   - "requires": {
2304   - "code-point-at": "^1.0.0",
2305   - "is-fullwidth-code-point": "^1.0.0",
2306   - "strip-ansi": "^3.0.0"
2307   - }
2308   - },
2309   - "string_decoder": {
2310   - "version": "1.1.1",
2311   - "bundled": true,
2312   - "dev": true,
2313   - "optional": true,
2314   - "requires": {
2315   - "safe-buffer": "~5.1.0"
2316   - }
2317   - },
2318   - "strip-ansi": {
2319   - "version": "3.0.1",
2320   - "bundled": true,
2321   - "dev": true,
2322   - "requires": {
2323   - "ansi-regex": "^2.0.0"
2324   - }
2325   - },
2326   - "strip-json-comments": {
2327   - "version": "2.0.1",
2328   - "bundled": true,
2329   - "dev": true,
2330   - "optional": true
2331   - },
2332   - "tar": {
2333   - "version": "4.4.1",
2334   - "bundled": true,
2335   - "dev": true,
2336   - "optional": true,
2337   - "requires": {
2338   - "chownr": "^1.0.1",
2339   - "fs-minipass": "^1.2.5",
2340   - "minipass": "^2.2.4",
2341   - "minizlib": "^1.1.0",
2342   - "mkdirp": "^0.5.0",
2343   - "safe-buffer": "^5.1.1",
2344   - "yallist": "^3.0.2"
2345   - }
2346   - },
2347   - "util-deprecate": {
2348   - "version": "1.0.2",
2349   - "bundled": true,
2350   - "dev": true,
2351   - "optional": true
2352   - },
2353   - "wide-align": {
2354   - "version": "1.1.2",
2355   - "bundled": true,
2356   - "dev": true,
2357   - "optional": true,
2358   - "requires": {
2359   - "string-width": "^1.0.2"
2360   - }
2361   - },
2362   - "wrappy": {
2363   - "version": "1.0.2",
2364   - "bundled": true,
2365   - "dev": true
2366   - },
2367   - "yallist": {
2368   - "version": "3.0.2",
2369   - "bundled": true,
2370   - "dev": true
2371   - }
  1802 + "bindings": "^1.5.0",
  1803 + "nan": "^2.12.1"
2372 1804 }
2373 1805 },
2374 1806 "gaxios": {
... ... @@ -2381,13 +1813,6 @@
2381 1813 "https-proxy-agent": "^5.0.0",
2382 1814 "is-stream": "^2.0.0",
2383 1815 "node-fetch": "^2.3.0"
2384   - },
2385   - "dependencies": {
2386   - "is-stream": {
2387   - "version": "2.0.0",
2388   - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
2389   - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
2390   - }
2391 1816 }
2392 1817 },
2393 1818 "gcp-metadata": {
... ... @@ -2419,20 +1844,6 @@
2419 1844 "assert-plus": "^1.0.0"
2420 1845 }
2421 1846 },
2422   - "glob": {
2423   - "version": "7.1.4",
2424   - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
2425   - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
2426   - "dev": true,
2427   - "requires": {
2428   - "fs.realpath": "^1.0.0",
2429   - "inflight": "^1.0.4",
2430   - "inherits": "2",
2431   - "minimatch": "^3.0.4",
2432   - "once": "^1.3.0",
2433   - "path-is-absolute": "^1.0.0"
2434   - }
2435   - },
2436 1847 "glob-parent": {
2437 1848 "version": "3.1.0",
2438 1849 "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
... ... @@ -2454,12 +1865,6 @@
2454 1865 }
2455 1866 }
2456 1867 },
2457   - "glob-to-regexp": {
2458   - "version": "0.3.0",
2459   - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
2460   - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
2461   - "dev": true
2462   - },
2463 1868 "global-dirs": {
2464 1869 "version": "0.1.1",
2465 1870 "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
... ... @@ -2470,27 +1875,17 @@
2470 1875 }
2471 1876 },
2472 1877 "globby": {
2473   - "version": "9.2.0",
2474   - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
2475   - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
  1878 + "version": "11.0.1",
  1879 + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
  1880 + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
2476 1881 "dev": true,
2477 1882 "requires": {
2478   - "@types/glob": "^7.1.1",
2479   - "array-union": "^1.0.2",
2480   - "dir-glob": "^2.2.2",
2481   - "fast-glob": "^2.2.6",
2482   - "glob": "^7.1.3",
2483   - "ignore": "^4.0.3",
2484   - "pify": "^4.0.1",
2485   - "slash": "^2.0.0"
2486   - },
2487   - "dependencies": {
2488   - "pify": {
2489   - "version": "4.0.1",
2490   - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
2491   - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
2492   - "dev": true
2493   - }
  1883 + "array-union": "^2.1.0",
  1884 + "dir-glob": "^3.0.1",
  1885 + "fast-glob": "^3.1.1",
  1886 + "ignore": "^5.1.4",
  1887 + "merge2": "^1.3.0",
  1888 + "slash": "^3.0.0"
2494 1889 }
2495 1890 },
2496 1891 "google-auth-library": {
... ... @@ -2507,16 +1902,6 @@
2507 1902 "gtoken": "^4.1.0",
2508 1903 "jws": "^4.0.0",
2509 1904 "lru-cache": "^5.0.0"
2510   - },
2511   - "dependencies": {
2512   - "lru-cache": {
2513   - "version": "5.1.1",
2514   - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
2515   - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
2516   - "requires": {
2517   - "yallist": "^3.0.2"
2518   - }
2519   - }
2520 1905 }
2521 1906 },
2522 1907 "google-gax": {
... ... @@ -2539,13 +1924,6 @@
2539 1924 "retry-request": "^4.0.0",
2540 1925 "semver": "^6.0.0",
2541 1926 "walkdir": "^0.4.0"
2542   - },
2543   - "dependencies": {
2544   - "semver": {
2545   - "version": "6.3.0",
2546   - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2547   - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
2548   - }
2549 1927 }
2550 1928 },
2551 1929 "google-p12-pem": {
... ... @@ -2573,12 +1951,20 @@
2573 1951 "timed-out": "^4.0.0",
2574 1952 "unzip-response": "^2.0.1",
2575 1953 "url-parse-lax": "^1.0.0"
  1954 + },
  1955 + "dependencies": {
  1956 + "is-stream": {
  1957 + "version": "1.1.0",
  1958 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
  1959 + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
  1960 + "dev": true
  1961 + }
2576 1962 }
2577 1963 },
2578 1964 "graceful-fs": {
2579   - "version": "4.1.15",
2580   - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
2581   - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
  1965 + "version": "4.2.4",
  1966 + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
  1967 + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
2582 1968 "dev": true
2583 1969 },
2584 1970 "gtoken": {
... ... @@ -2598,11 +1984,11 @@
2598 1984 "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
2599 1985 },
2600 1986 "har-validator": {
2601   - "version": "5.1.3",
2602   - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
2603   - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
  1987 + "version": "5.1.5",
  1988 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
  1989 + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
2604 1990 "requires": {
2605   - "ajv": "^6.5.5",
  1991 + "ajv": "^6.12.3",
2606 1992 "har-schema": "^2.0.0"
2607 1993 }
2608 1994 },
... ... @@ -2633,6 +2019,12 @@
2633 2019 "kind-of": "^4.0.0"
2634 2020 },
2635 2021 "dependencies": {
  2022 + "is-buffer": {
  2023 + "version": "1.1.6",
  2024 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  2025 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  2026 + "dev": true
  2027 + },
2636 2028 "kind-of": {
2637 2029 "version": "4.0.0",
2638 2030 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
... ... @@ -2661,21 +2053,6 @@
2661 2053 "requires": {
2662 2054 "agent-base": "6",
2663 2055 "debug": "4"
2664   - },
2665   - "dependencies": {
2666   - "debug": {
2667   - "version": "4.1.1",
2668   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
2669   - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
2670   - "requires": {
2671   - "ms": "^2.1.1"
2672   - }
2673   - },
2674   - "ms": {
2675   - "version": "2.1.2",
2676   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2677   - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2678   - }
2679 2056 }
2680 2057 },
2681 2058 "ieee754": {
... ... @@ -2684,9 +2061,9 @@
2684 2061 "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
2685 2062 },
2686 2063 "ignore": {
2687   - "version": "4.0.6",
2688   - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
2689   - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
  2064 + "version": "5.1.8",
  2065 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
  2066 + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
2690 2067 "dev": true
2691 2068 },
2692 2069 "ignore-by-default": {
... ... @@ -2707,20 +2084,10 @@
2707 2084 "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
2708 2085 "dev": true
2709 2086 },
2710   - "inflight": {
2711   - "version": "1.0.6",
2712   - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2713   - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
2714   - "dev": true,
2715   - "requires": {
2716   - "once": "^1.3.0",
2717   - "wrappy": "1"
2718   - }
2719   - },
2720 2087 "inherits": {
2721   - "version": "2.0.3",
2722   - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
2723   - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
  2088 + "version": "2.0.4",
  2089 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
  2090 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
2724 2091 },
2725 2092 "ini": {
2726 2093 "version": "1.3.5",
... ... @@ -2729,20 +2096,15 @@
2729 2096 "dev": true
2730 2097 },
2731 2098 "into-stream": {
2732   - "version": "5.1.0",
2733   - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.0.tgz",
2734   - "integrity": "sha512-cbDhb8qlxKMxPBk/QxTtYg1DQ4CwXmadu7quG3B7nrJsgSncEreF2kwWKZFdnjc/lSNNIkFPsjI7SM0Cx/QXPw==",
  2099 + "version": "5.1.1",
  2100 + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz",
  2101 + "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==",
2735 2102 "dev": true,
2736 2103 "requires": {
2737 2104 "from2": "^2.3.0",
2738   - "p-is-promise": "^2.0.0"
  2105 + "p-is-promise": "^3.0.0"
2739 2106 }
2740 2107 },
2741   - "ip-regex": {
2742   - "version": "2.1.0",
2743   - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
2744   - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
2745   - },
2746 2108 "is-accessor-descriptor": {
2747 2109 "version": "0.1.6",
2748 2110 "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
... ... @@ -2752,6 +2114,12 @@
2752 2114 "kind-of": "^3.0.2"
2753 2115 },
2754 2116 "dependencies": {
  2117 + "is-buffer": {
  2118 + "version": "1.1.6",
  2119 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  2120 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  2121 + "dev": true
  2122 + },
2755 2123 "kind-of": {
2756 2124 "version": "3.2.2",
2757 2125 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -2778,10 +2146,9 @@
2778 2146 }
2779 2147 },
2780 2148 "is-buffer": {
2781   - "version": "1.1.6",
2782   - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
2783   - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
2784   - "dev": true
  2149 + "version": "2.0.4",
  2150 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
  2151 + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
2785 2152 },
2786 2153 "is-ci": {
2787 2154 "version": "1.2.1",
... ... @@ -2801,6 +2168,12 @@
2801 2168 "kind-of": "^3.0.2"
2802 2169 },
2803 2170 "dependencies": {
  2171 + "is-buffer": {
  2172 + "version": "1.1.6",
  2173 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  2174 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  2175 + "dev": true
  2176 + },
2804 2177 "kind-of": {
2805 2178 "version": "3.2.2",
2806 2179 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -2843,10 +2216,16 @@
2843 2216 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
2844 2217 "dev": true
2845 2218 },
  2219 + "is-fullwidth-code-point": {
  2220 + "version": "2.0.0",
  2221 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
  2222 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
  2223 + "dev": true
  2224 + },
2846 2225 "is-glob": {
2847   - "version": "4.0.0",
2848   - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
2849   - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
  2226 + "version": "4.0.1",
  2227 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
  2228 + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
2850 2229 "dev": true,
2851 2230 "requires": {
2852 2231 "is-extglob": "^2.1.1"
... ... @@ -2877,6 +2256,12 @@
2877 2256 "kind-of": "^3.0.2"
2878 2257 },
2879 2258 "dependencies": {
  2259 + "is-buffer": {
  2260 + "version": "1.1.6",
  2261 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  2262 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  2263 + "dev": true
  2264 + },
2880 2265 "kind-of": {
2881 2266 "version": "3.2.2",
2882 2267 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -2919,15 +2304,15 @@
2919 2304 "dev": true
2920 2305 },
2921 2306 "is-retry-allowed": {
2922   - "version": "1.1.0",
2923   - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
2924   - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
  2307 + "version": "1.2.0",
  2308 + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
  2309 + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
2925 2310 "dev": true
2926 2311 },
2927 2312 "is-stream": {
2928   - "version": "1.1.0",
2929   - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
2930   - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
  2313 + "version": "2.0.0",
  2314 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
  2315 + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
2931 2316 },
2932 2317 "is-stream-ended": {
2933 2318 "version": "0.1.4",
... ... @@ -2953,7 +2338,8 @@
2953 2338 "isexe": {
2954 2339 "version": "2.0.0",
2955 2340 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2956   - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
  2341 + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
  2342 + "dev": true
2957 2343 },
2958 2344 "isobject": {
2959 2345 "version": "3.0.1",
... ... @@ -2972,9 +2358,9 @@
2972 2358 "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
2973 2359 },
2974 2360 "js-yaml": {
2975   - "version": "3.12.0",
2976   - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
2977   - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
  2361 + "version": "3.14.0",
  2362 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
  2363 + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
2978 2364 "requires": {
2979 2365 "argparse": "^1.0.7",
2980 2366 "esprima": "^4.0.0"
... ... @@ -2986,11 +2372,11 @@
2986 2372 "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
2987 2373 },
2988 2374 "json-bigint": {
2989   - "version": "0.3.0",
2990   - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz",
2991   - "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=",
  2375 + "version": "0.3.1",
  2376 + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz",
  2377 + "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==",
2992 2378 "requires": {
2993   - "bignumber.js": "^7.0.0"
  2379 + "bignumber.js": "^9.0.0"
2994 2380 }
2995 2381 },
2996 2382 "json-schema": {
... ... @@ -3009,11 +2395,11 @@
3009 2395 "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
3010 2396 },
3011 2397 "json5": {
3012   - "version": "1.0.1",
3013   - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
3014   - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
  2398 + "version": "2.1.3",
  2399 + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
  2400 + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
3015 2401 "requires": {
3016   - "minimist": "^1.2.0"
  2402 + "minimist": "^1.2.5"
3017 2403 }
3018 2404 },
3019 2405 "jsonfile": {
... ... @@ -3061,26 +2447,20 @@
3061 2447 }
3062 2448 },
3063 2449 "kafkajs": {
3064   - "version": "1.12.0",
3065   - "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-1.12.0.tgz",
3066   - "integrity": "sha512-Izkd9iFRgeeKaHEgVpGQH08ygzCbHSxTbnu8W3G3uiNaVjGibUTmTwjv1Qf2M8NORXcPfzwVyg6bBlVj4SKr9g==",
3067   - "requires": {
3068   - "long": "^4.0.0"
3069   - }
  2450 + "version": "1.14.0",
  2451 + "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-1.14.0.tgz",
  2452 + "integrity": "sha512-W+WCekiooY5rJP3Me5N3gWcQ8O6uG6lw0vv9t+sI+WqXKjKwj2+CWIXJy241x+ITE+1M1D19ABSiL2J8lKja5A=="
3070 2453 },
3071 2454 "kind-of": {
3072   - "version": "6.0.2",
3073   - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
3074   - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
  2455 + "version": "6.0.3",
  2456 + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
  2457 + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
3075 2458 "dev": true
3076 2459 },
3077 2460 "kuler": {
3078   - "version": "1.0.1",
3079   - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz",
3080   - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==",
3081   - "requires": {
3082   - "colornames": "^1.1.1"
3083   - }
  2461 + "version": "2.0.0",
  2462 + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
  2463 + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
3084 2464 },
3085 2465 "latest-version": {
3086 2466 "version": "3.1.0",
... ... @@ -3101,11 +2481,6 @@
3101 2481 "type-check": "~0.3.2"
3102 2482 }
3103 2483 },
3104   - "lodash": {
3105   - "version": "4.17.11",
3106   - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
3107   - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
3108   - },
3109 2484 "lodash.at": {
3110 2485 "version": "4.6.0",
3111 2486 "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz",
... ... @@ -3116,12 +2491,6 @@
3116 2491 "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
3117 2492 "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
3118 2493 },
3119   - "lodash.debounce": {
3120   - "version": "4.0.8",
3121   - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
3122   - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
3123   - "dev": true
3124   - },
3125 2494 "lodash.has": {
3126 2495 "version": "4.5.2",
3127 2496 "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
... ... @@ -3133,22 +2502,15 @@
3133 2502 "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40="
3134 2503 },
3135 2504 "logform": {
3136   - "version": "1.10.0",
3137   - "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz",
3138   - "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==",
  2505 + "version": "2.2.0",
  2506 + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
  2507 + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==",
3139 2508 "requires": {
3140 2509 "colors": "^1.2.1",
3141 2510 "fast-safe-stringify": "^2.0.4",
3142   - "fecha": "^2.3.3",
  2511 + "fecha": "^4.2.0",
3143 2512 "ms": "^2.1.1",
3144   - "triple-beam": "^1.2.0"
3145   - },
3146   - "dependencies": {
3147   - "ms": {
3148   - "version": "2.1.1",
3149   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
3150   - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
3151   - }
  2513 + "triple-beam": "^1.3.0"
3152 2514 }
3153 2515 },
3154 2516 "long": {
... ... @@ -3163,12 +2525,10 @@
3163 2525 "dev": true
3164 2526 },
3165 2527 "lru-cache": {
3166   - "version": "4.1.4",
3167   - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz",
3168   - "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==",
3169   - "dev": true,
  2528 + "version": "5.1.1",
  2529 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
  2530 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
3170 2531 "requires": {
3171   - "pseudomap": "^1.0.2",
3172 2532 "yallist": "^3.0.2"
3173 2533 }
3174 2534 },
... ... @@ -3197,9 +2557,9 @@
3197 2557 }
3198 2558 },
3199 2559 "merge2": {
3200   - "version": "1.2.3",
3201   - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
3202   - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
  2560 + "version": "1.4.1",
  2561 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
  2562 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
3203 2563 "dev": true
3204 2564 },
3205 2565 "micromatch": {
... ... @@ -3224,21 +2584,21 @@
3224 2584 }
3225 2585 },
3226 2586 "mime": {
3227   - "version": "2.4.5",
3228   - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
3229   - "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w=="
  2587 + "version": "2.4.6",
  2588 + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
  2589 + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
3230 2590 },
3231 2591 "mime-db": {
3232   - "version": "1.40.0",
3233   - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
3234   - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
  2592 + "version": "1.44.0",
  2593 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
  2594 + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
3235 2595 },
3236 2596 "mime-types": {
3237   - "version": "2.1.24",
3238   - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
3239   - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
  2597 + "version": "2.1.27",
  2598 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
  2599 + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
3240 2600 "requires": {
3241   - "mime-db": "1.40.0"
  2601 + "mime-db": "1.44.0"
3242 2602 }
3243 2603 },
3244 2604 "minimatch": {
... ... @@ -3251,14 +2611,14 @@
3251 2611 }
3252 2612 },
3253 2613 "minimist": {
3254   - "version": "1.2.0",
3255   - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
3256   - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
  2614 + "version": "1.2.5",
  2615 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
  2616 + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
3257 2617 },
3258 2618 "mixin-deep": {
3259   - "version": "1.3.1",
3260   - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
3261   - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
  2619 + "version": "1.3.2",
  2620 + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
  2621 + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
3262 2622 "dev": true,
3263 2623 "requires": {
3264 2624 "for-in": "^1.0.2",
... ... @@ -3277,26 +2637,18 @@
3277 2637 }
3278 2638 },
3279 2639 "mkdirp": {
3280   - "version": "0.5.1",
3281   - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
3282   - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
  2640 + "version": "0.5.5",
  2641 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
  2642 + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
3283 2643 "dev": true,
3284 2644 "requires": {
3285   - "minimist": "0.0.8"
3286   - },
3287   - "dependencies": {
3288   - "minimist": {
3289   - "version": "0.0.8",
3290   - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
3291   - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
3292   - "dev": true
3293   - }
  2645 + "minimist": "^1.2.5"
3294 2646 }
3295 2647 },
3296 2648 "moment": {
3297   - "version": "2.22.2",
3298   - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
3299   - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y="
  2649 + "version": "2.29.0",
  2650 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz",
  2651 + "integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA=="
3300 2652 },
3301 2653 "mpns": {
3302 2654 "version": "2.1.3",
... ... @@ -3304,9 +2656,9 @@
3304 2656 "integrity": "sha512-gPLNoVqwYoKUmNYZ2shMSdaE2XvHSRxWNzyG4DUi6Av7MSujyeOw/nj61nnQeuV/vke5E0Dni468xn0qxTHIZQ=="
3305 2657 },
3306 2658 "ms": {
3307   - "version": "2.0.0",
3308   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3309   - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
  2659 + "version": "2.1.2",
  2660 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
  2661 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3310 2662 },
3311 2663 "multistream": {
3312 2664 "version": "2.1.1",
... ... @@ -3319,9 +2671,9 @@
3319 2671 }
3320 2672 },
3321 2673 "nan": {
3322   - "version": "2.11.1",
3323   - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
3324   - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
  2674 + "version": "2.14.1",
  2675 + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
  2676 + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
3325 2677 "dev": true,
3326 2678 "optional": true
3327 2679 },
... ... @@ -3345,31 +2697,31 @@
3345 2697 }
3346 2698 },
3347 2699 "node-fetch": {
3348   - "version": "2.6.0",
3349   - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
3350   - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
  2700 + "version": "2.6.1",
  2701 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
  2702 + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
3351 2703 },
3352 2704 "node-forge": {
3353   - "version": "0.9.1",
3354   - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz",
3355   - "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ=="
  2705 + "version": "0.9.2",
  2706 + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz",
  2707 + "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw=="
3356 2708 },
3357 2709 "nodemon": {
3358   - "version": "1.18.7",
3359   - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz",
3360   - "integrity": "sha512-xuC1V0F5EcEyKQ1VhHYD13owznQbUw29JKvZ8bVH7TmuvVNHvvbp9pLgE4PjTMRJVe0pJ8fGRvwR2nMiosIsPQ==",
  2710 + "version": "1.19.4",
  2711 + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz",
  2712 + "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==",
3361 2713 "dev": true,
3362 2714 "requires": {
3363   - "chokidar": "^2.0.4",
3364   - "debug": "^3.1.0",
  2715 + "chokidar": "^2.1.8",
  2716 + "debug": "^3.2.6",
3365 2717 "ignore-by-default": "^1.0.1",
3366 2718 "minimatch": "^3.0.4",
3367   - "pstree.remy": "^1.1.2",
3368   - "semver": "^5.5.0",
3369   - "supports-color": "^5.2.0",
  2719 + "pstree.remy": "^1.1.7",
  2720 + "semver": "^5.7.1",
  2721 + "supports-color": "^5.5.0",
3370 2722 "touch": "^3.1.0",
3371 2723 "undefsafe": "^2.0.2",
3372   - "update-notifier": "^2.3.0"
  2724 + "update-notifier": "^2.5.0"
3373 2725 },
3374 2726 "dependencies": {
3375 2727 "debug": {
... ... @@ -3381,10 +2733,10 @@
3381 2733 "ms": "^2.1.1"
3382 2734 }
3383 2735 },
3384   - "ms": {
3385   - "version": "2.1.1",
3386   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
3387   - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
  2736 + "semver": {
  2737 + "version": "5.7.1",
  2738 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
  2739 + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
3388 2740 "dev": true
3389 2741 }
3390 2742 }
... ... @@ -3399,13 +2751,10 @@
3399 2751 }
3400 2752 },
3401 2753 "normalize-path": {
3402   - "version": "2.1.1",
3403   - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
3404   - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
3405   - "dev": true,
3406   - "requires": {
3407   - "remove-trailing-separator": "^1.0.1"
3408   - }
  2754 + "version": "3.0.0",
  2755 + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
  2756 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
  2757 + "dev": true
3409 2758 },
3410 2759 "npm-run-path": {
3411 2760 "version": "2.0.2",
... ... @@ -3441,6 +2790,12 @@
3441 2790 "is-descriptor": "^0.1.0"
3442 2791 }
3443 2792 },
  2793 + "is-buffer": {
  2794 + "version": "1.1.6",
  2795 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  2796 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  2797 + "dev": true
  2798 + },
3444 2799 "kind-of": {
3445 2800 "version": "3.2.2",
3446 2801 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -3484,22 +2839,25 @@
3484 2839 }
3485 2840 },
3486 2841 "one-time": {
3487   - "version": "0.0.4",
3488   - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz",
3489   - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4="
  2842 + "version": "1.0.0",
  2843 + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
  2844 + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
  2845 + "requires": {
  2846 + "fn.name": "1.x.x"
  2847 + }
3490 2848 },
3491 2849 "optionator": {
3492   - "version": "0.8.2",
3493   - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
3494   - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
  2850 + "version": "0.8.3",
  2851 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
  2852 + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
3495 2853 "dev": true,
3496 2854 "requires": {
3497 2855 "deep-is": "~0.1.3",
3498   - "fast-levenshtein": "~2.0.4",
  2856 + "fast-levenshtein": "~2.0.6",
3499 2857 "levn": "~0.3.0",
3500 2858 "prelude-ls": "~1.1.2",
3501 2859 "type-check": "~0.3.2",
3502   - "wordwrap": "~1.0.0"
  2860 + "word-wrap": "~1.2.3"
3503 2861 }
3504 2862 },
3505 2863 "os-tmpdir": {
... ... @@ -3520,9 +2878,9 @@
3520 2878 "dev": true
3521 2879 },
3522 2880 "p-is-promise": {
3523   - "version": "2.1.0",
3524   - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
3525   - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
  2881 + "version": "3.0.0",
  2882 + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz",
  2883 + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==",
3526 2884 "dev": true
3527 2885 },
3528 2886 "package-json": {
... ... @@ -3535,6 +2893,14 @@
3535 2893 "registry-auth-token": "^3.0.1",
3536 2894 "registry-url": "^3.0.3",
3537 2895 "semver": "^5.1.0"
  2896 + },
  2897 + "dependencies": {
  2898 + "semver": {
  2899 + "version": "5.7.1",
  2900 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
  2901 + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
  2902 + "dev": true
  2903 + }
3538 2904 }
3539 2905 },
3540 2906 "pascalcase": {
... ... @@ -3574,19 +2940,22 @@
3574 2940 "dev": true
3575 2941 },
3576 2942 "path-type": {
3577   - "version": "3.0.0",
3578   - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
3579   - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
3580   - "dev": true,
3581   - "requires": {
3582   - "pify": "^3.0.0"
3583   - }
  2943 + "version": "4.0.0",
  2944 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
  2945 + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
  2946 + "dev": true
3584 2947 },
3585 2948 "performance-now": {
3586 2949 "version": "2.1.0",
3587 2950 "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
3588 2951 "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
3589 2952 },
  2953 + "picomatch": {
  2954 + "version": "2.2.2",
  2955 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
  2956 + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
  2957 + "dev": true
  2958 + },
3590 2959 "pify": {
3591 2960 "version": "3.0.0",
3592 2961 "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
... ... @@ -3594,85 +2963,168 @@
3594 2963 "dev": true
3595 2964 },
3596 2965 "pkg": {
3597   - "version": "4.4.0",
3598   - "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.4.0.tgz",
3599   - "integrity": "sha512-bFNJ3v56QwqB6JtAl/YrczlmEKBPBVJ3n5nW905kgvG1ex9DajODpTs0kLAFxyLwoubDQux/RPJFL6WrnD/vpg==",
  2966 + "version": "4.4.9",
  2967 + "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.4.9.tgz",
  2968 + "integrity": "sha512-FK4GqHtcCY2PPPVaKViU0NyRzpo6gCS7tPKN5b7AkElqjAOCH1bsRKgohEnxThr6DWfTGByGqba2YHGR/BqbmA==",
3600 2969 "dev": true,
3601 2970 "requires": {
3602   - "@babel/parser": "~7.4.4",
3603   - "@babel/runtime": "~7.4.4",
3604   - "chalk": "~2.4.2",
3605   - "escodegen": "~1.11.1",
3606   - "fs-extra": "~7.0.1",
3607   - "globby": "~9.2.0",
3608   - "into-stream": "~5.1.0",
3609   - "minimist": "~1.2.0",
3610   - "multistream": "~2.1.1",
3611   - "pkg-fetch": "~2.6.2",
3612   - "progress": "~2.0.3",
3613   - "resolve": "1.6.0",
3614   - "stream-meter": "~1.0.4"
  2971 + "@babel/parser": "^7.9.4",
  2972 + "@babel/runtime": "^7.9.2",
  2973 + "chalk": "^3.0.0",
  2974 + "escodegen": "^1.14.1",
  2975 + "fs-extra": "^8.1.0",
  2976 + "globby": "^11.0.0",
  2977 + "into-stream": "^5.1.1",
  2978 + "minimist": "^1.2.5",
  2979 + "multistream": "^2.1.1",
  2980 + "pkg-fetch": "^2.6.9",
  2981 + "progress": "^2.0.3",
  2982 + "resolve": "^1.15.1",
  2983 + "stream-meter": "^1.0.4"
3615 2984 },
3616 2985 "dependencies": {
  2986 + "ansi-styles": {
  2987 + "version": "4.2.1",
  2988 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
  2989 + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
  2990 + "dev": true,
  2991 + "requires": {
  2992 + "@types/color-name": "^1.1.1",
  2993 + "color-convert": "^2.0.1"
  2994 + }
  2995 + },
3617 2996 "chalk": {
3618   - "version": "2.4.2",
3619   - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
3620   - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
  2997 + "version": "3.0.0",
  2998 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
  2999 + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
3621 3000 "dev": true,
3622 3001 "requires": {
3623   - "ansi-styles": "^3.2.1",
3624   - "escape-string-regexp": "^1.0.5",
3625   - "supports-color": "^5.3.0"
  3002 + "ansi-styles": "^4.1.0",
  3003 + "supports-color": "^7.1.0"
3626 3004 }
3627 3005 },
  3006 + "color-convert": {
  3007 + "version": "2.0.1",
  3008 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
  3009 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
  3010 + "dev": true,
  3011 + "requires": {
  3012 + "color-name": "~1.1.4"
  3013 + }
  3014 + },
  3015 + "color-name": {
  3016 + "version": "1.1.4",
  3017 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
  3018 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
  3019 + "dev": true
  3020 + },
3628 3021 "fs-extra": {
3629   - "version": "7.0.1",
3630   - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
3631   - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
  3022 + "version": "8.1.0",
  3023 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
  3024 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
3632 3025 "dev": true,
3633 3026 "requires": {
3634   - "graceful-fs": "^4.1.2",
  3027 + "graceful-fs": "^4.2.0",
3635 3028 "jsonfile": "^4.0.0",
3636 3029 "universalify": "^0.1.0"
3637 3030 }
  3031 + },
  3032 + "has-flag": {
  3033 + "version": "4.0.0",
  3034 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
  3035 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
  3036 + "dev": true
  3037 + },
  3038 + "supports-color": {
  3039 + "version": "7.2.0",
  3040 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
  3041 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
  3042 + "dev": true,
  3043 + "requires": {
  3044 + "has-flag": "^4.0.0"
  3045 + }
3638 3046 }
3639 3047 }
3640 3048 },
3641 3049 "pkg-fetch": {
3642   - "version": "2.6.2",
3643   - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.2.tgz",
3644   - "integrity": "sha512-7DN6YYP1Kct02mSkhfblK0HkunJ7BJjGBkSkFdIW/QKIovtAMaICidS7feX+mHfnZ98OP7xFJvBluVURlrHJxA==",
  3050 + "version": "2.6.9",
  3051 + "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.9.tgz",
  3052 + "integrity": "sha512-EnVR8LRILXBvaNP+wJOSY02c3+qDDfyEyR+aqAHLhcc9PBnbxFT9UZ1+If49goPQzQPn26TzF//fc6KXZ0aXEg==",
3645 3053 "dev": true,
3646 3054 "requires": {
3647   - "@babel/runtime": "~7.4.4",
3648   - "byline": "~5.0.0",
3649   - "chalk": "~2.4.1",
3650   - "expand-template": "~2.0.3",
3651   - "fs-extra": "~7.0.1",
3652   - "minimist": "~1.2.0",
3653   - "progress": "~2.0.0",
3654   - "request": "~2.88.0",
3655   - "request-progress": "~3.0.0",
3656   - "semver": "~6.0.0",
3657   - "unique-temp-dir": "~1.0.0"
  3055 + "@babel/runtime": "^7.9.2",
  3056 + "byline": "^5.0.0",
  3057 + "chalk": "^3.0.0",
  3058 + "expand-template": "^2.0.3",
  3059 + "fs-extra": "^8.1.0",
  3060 + "minimist": "^1.2.5",
  3061 + "progress": "^2.0.3",
  3062 + "request": "^2.88.0",
  3063 + "request-progress": "^3.0.0",
  3064 + "semver": "^6.3.0",
  3065 + "unique-temp-dir": "^1.0.0"
3658 3066 },
3659 3067 "dependencies": {
  3068 + "ansi-styles": {
  3069 + "version": "4.2.1",
  3070 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
  3071 + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
  3072 + "dev": true,
  3073 + "requires": {
  3074 + "@types/color-name": "^1.1.1",
  3075 + "color-convert": "^2.0.1"
  3076 + }
  3077 + },
  3078 + "chalk": {
  3079 + "version": "3.0.0",
  3080 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
  3081 + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
  3082 + "dev": true,
  3083 + "requires": {
  3084 + "ansi-styles": "^4.1.0",
  3085 + "supports-color": "^7.1.0"
  3086 + }
  3087 + },
  3088 + "color-convert": {
  3089 + "version": "2.0.1",
  3090 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
  3091 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
  3092 + "dev": true,
  3093 + "requires": {
  3094 + "color-name": "~1.1.4"
  3095 + }
  3096 + },
  3097 + "color-name": {
  3098 + "version": "1.1.4",
  3099 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
  3100 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
  3101 + "dev": true
  3102 + },
3660 3103 "fs-extra": {
3661   - "version": "7.0.1",
3662   - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
3663   - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
  3104 + "version": "8.1.0",
  3105 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
  3106 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
3664 3107 "dev": true,
3665 3108 "requires": {
3666   - "graceful-fs": "^4.1.2",
  3109 + "graceful-fs": "^4.2.0",
3667 3110 "jsonfile": "^4.0.0",
3668 3111 "universalify": "^0.1.0"
3669 3112 }
3670 3113 },
3671   - "semver": {
3672   - "version": "6.0.0",
3673   - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
3674   - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
  3114 + "has-flag": {
  3115 + "version": "4.0.0",
  3116 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
  3117 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
3675 3118 "dev": true
  3119 + },
  3120 + "supports-color": {
  3121 + "version": "7.2.0",
  3122 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
  3123 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
  3124 + "dev": true,
  3125 + "requires": {
  3126 + "has-flag": "^4.0.0"
  3127 + }
3676 3128 }
3677 3129 }
3678 3130 },
... ... @@ -3700,9 +3152,9 @@
3700 3152 "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
3701 3153 },
3702 3154 "process-nextick-args": {
3703   - "version": "2.0.0",
3704   - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
3705   - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
  3155 + "version": "2.0.1",
  3156 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
  3157 + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
3706 3158 },
3707 3159 "progress": {
3708 3160 "version": "2.0.3",
... ... @@ -3711,9 +3163,9 @@
3711 3163 "dev": true
3712 3164 },
3713 3165 "protobufjs": {
3714   - "version": "6.9.0",
3715   - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.9.0.tgz",
3716   - "integrity": "sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg==",
  3166 + "version": "6.10.1",
  3167 + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz",
  3168 + "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==",
3717 3169 "requires": {
3718 3170 "@protobufjs/aspromise": "^1.1.2",
3719 3171 "@protobufjs/base64": "^1.1.2",
... ... @@ -3731,9 +3183,9 @@
3731 3183 },
3732 3184 "dependencies": {
3733 3185 "@types/node": {
3734   - "version": "13.13.5",
3735   - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz",
3736   - "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g=="
  3186 + "version": "13.13.21",
  3187 + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.21.tgz",
  3188 + "integrity": "sha512-tlFWakSzBITITJSxHV4hg4KvrhR/7h3xbJdSFbYJBVzKubrASbnnIFuSgolUh7qKGo/ZeJPKUfbZ0WS6Jp14DQ=="
3737 3189 }
3738 3190 }
3739 3191 },
... ... @@ -3744,20 +3196,20 @@
3744 3196 "dev": true
3745 3197 },
3746 3198 "psl": {
3747   - "version": "1.2.0",
3748   - "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
3749   - "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA=="
  3199 + "version": "1.8.0",
  3200 + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
  3201 + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
3750 3202 },
3751 3203 "pstree.remy": {
3752   - "version": "1.1.2",
3753   - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz",
3754   - "integrity": "sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==",
  3204 + "version": "1.1.8",
  3205 + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
  3206 + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
3755 3207 "dev": true
3756 3208 },
3757 3209 "punycode": {
3758   - "version": "2.1.1",
3759   - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
3760   - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
  3210 + "version": "1.3.2",
  3211 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
  3212 + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
3761 3213 },
3762 3214 "qs": {
3763 3215 "version": "6.5.2",
... ... @@ -3770,9 +3222,9 @@
3770 3222 "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
3771 3223 },
3772 3224 "querystringify": {
3773   - "version": "2.1.1",
3774   - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
3775   - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
  3225 + "version": "2.2.0",
  3226 + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
  3227 + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
3776 3228 },
3777 3229 "rc": {
3778 3230 "version": "1.2.8",
... ... @@ -3787,9 +3239,9 @@
3787 3239 }
3788 3240 },
3789 3241 "readable-stream": {
3790   - "version": "2.3.6",
3791   - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
3792   - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
  3242 + "version": "2.3.7",
  3243 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
  3244 + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
3793 3245 "requires": {
3794 3246 "core-util-is": "~1.0.0",
3795 3247 "inherits": "~2.0.3",
... ... @@ -3812,9 +3264,9 @@
3812 3264 }
3813 3265 },
3814 3266 "regenerator-runtime": {
3815   - "version": "0.13.3",
3816   - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
3817   - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
  3267 + "version": "0.13.7",
  3268 + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
  3269 + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
3818 3270 "dev": true
3819 3271 },
3820 3272 "regex-not": {
... ... @@ -3828,9 +3280,9 @@
3828 3280 }
3829 3281 },
3830 3282 "registry-auth-token": {
3831   - "version": "3.3.2",
3832   - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
3833   - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
  3283 + "version": "3.4.0",
  3284 + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
  3285 + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
3834 3286 "dev": true,
3835 3287 "requires": {
3836 3288 "rc": "^1.1.6",
... ... @@ -3865,9 +3317,9 @@
3865 3317 "dev": true
3866 3318 },
3867 3319 "request": {
3868   - "version": "2.88.0",
3869   - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
3870   - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
  3320 + "version": "2.88.2",
  3321 + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
  3322 + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
3871 3323 "requires": {
3872 3324 "aws-sign2": "~0.7.0",
3873 3325 "aws4": "^1.8.0",
... ... @@ -3876,7 +3328,7 @@
3876 3328 "extend": "~3.0.2",
3877 3329 "forever-agent": "~0.6.1",
3878 3330 "form-data": "~2.3.2",
3879   - "har-validator": "~5.1.0",
  3331 + "har-validator": "~5.1.3",
3880 3332 "http-signature": "~1.2.0",
3881 3333 "is-typedarray": "~1.0.0",
3882 3334 "isstream": "~0.1.2",
... ... @@ -3886,9 +3338,40 @@
3886 3338 "performance-now": "^2.1.0",
3887 3339 "qs": "~6.5.2",
3888 3340 "safe-buffer": "^5.1.2",
3889   - "tough-cookie": "~2.4.3",
  3341 + "tough-cookie": "~2.5.0",
3890 3342 "tunnel-agent": "^0.6.0",
3891 3343 "uuid": "^3.3.2"
  3344 + },
  3345 + "dependencies": {
  3346 + "form-data": {
  3347 + "version": "2.3.3",
  3348 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
  3349 + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
  3350 + "requires": {
  3351 + "asynckit": "^0.4.0",
  3352 + "combined-stream": "^1.0.6",
  3353 + "mime-types": "^2.1.12"
  3354 + }
  3355 + },
  3356 + "punycode": {
  3357 + "version": "2.1.1",
  3358 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
  3359 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
  3360 + },
  3361 + "tough-cookie": {
  3362 + "version": "2.5.0",
  3363 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
  3364 + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
  3365 + "requires": {
  3366 + "psl": "^1.1.28",
  3367 + "punycode": "^2.1.1"
  3368 + }
  3369 + },
  3370 + "uuid": {
  3371 + "version": "3.4.0",
  3372 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
  3373 + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
  3374 + }
3892 3375 }
3893 3376 },
3894 3377 "request-progress": {
... ... @@ -3906,12 +3389,12 @@
3906 3389 "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
3907 3390 },
3908 3391 "resolve": {
3909   - "version": "1.6.0",
3910   - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz",
3911   - "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==",
  3392 + "version": "1.17.0",
  3393 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
  3394 + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
3912 3395 "dev": true,
3913 3396 "requires": {
3914   - "path-parse": "^1.0.5"
  3397 + "path-parse": "^1.0.6"
3915 3398 }
3916 3399 },
3917 3400 "resolve-url": {
... ... @@ -3927,37 +3410,37 @@
3927 3410 "dev": true
3928 3411 },
3929 3412 "retry-request": {
3930   - "version": "4.1.1",
3931   - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz",
3932   - "integrity": "sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==",
  3413 + "version": "4.1.3",
  3414 + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.3.tgz",
  3415 + "integrity": "sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==",
3933 3416 "requires": {
3934   - "debug": "^4.1.1",
3935   - "through2": "^3.0.1"
  3417 + "debug": "^4.1.1"
  3418 + }
  3419 + },
  3420 + "reusify": {
  3421 + "version": "1.0.4",
  3422 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
  3423 + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
  3424 + "dev": true
  3425 + },
  3426 + "rhea": {
  3427 + "version": "1.0.24",
  3428 + "resolved": "https://registry.npmjs.org/rhea/-/rhea-1.0.24.tgz",
  3429 + "integrity": "sha512-PEl62U2EhxCO5wMUZ2/bCBcXAVKN9AdMSNQOrp3+R5b77TEaOSiy16MQ0sIOmzj/iqsgIAgPs1mt3FYfu1vIXA==",
  3430 + "requires": {
  3431 + "debug": "0.8.0 - 3.5.0"
3936 3432 },
3937 3433 "dependencies": {
3938 3434 "debug": {
3939   - "version": "4.1.1",
3940   - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
3941   - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
  3435 + "version": "3.2.6",
  3436 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
  3437 + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
3942 3438 "requires": {
3943 3439 "ms": "^2.1.1"
3944 3440 }
3945   - },
3946   - "ms": {
3947   - "version": "2.1.2",
3948   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3949   - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3950 3441 }
3951 3442 }
3952 3443 },
3953   - "rhea": {
3954   - "version": "1.0.21",
3955   - "resolved": "https://registry.npmjs.org/rhea/-/rhea-1.0.21.tgz",
3956   - "integrity": "sha512-9ddxyJR0nlWmynukzZTWN+bSYWu7KLHVMkIH/7PpFG5RHfV5t7zXIfZ6rqJSJe9wBAgnNr2Xz41KM2nPujWiFQ==",
3957   - "requires": {
3958   - "debug": "0.8.0 - 3.5.0"
3959   - }
3960   - },
3961 3444 "rhea-promise": {
3962 3445 "version": "0.1.15",
3963 3446 "resolved": "https://registry.npmjs.org/rhea-promise/-/rhea-promise-0.1.15.tgz",
... ... @@ -3975,14 +3458,15 @@
3975 3458 "requires": {
3976 3459 "ms": "^2.1.1"
3977 3460 }
3978   - },
3979   - "ms": {
3980   - "version": "2.1.2",
3981   - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3982   - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3983 3461 }
3984 3462 }
3985 3463 },
  3464 + "run-parallel": {
  3465 + "version": "1.1.9",
  3466 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
  3467 + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
  3468 + "dev": true
  3469 + },
3986 3470 "safe-buffer": {
3987 3471 "version": "5.1.2",
3988 3472 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
... ... @@ -4008,9 +3492,9 @@
4008 3492 "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
4009 3493 },
4010 3494 "semver": {
4011   - "version": "5.6.0",
4012   - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
4013   - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
  3495 + "version": "6.3.0",
  3496 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
  3497 + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
4014 3498 },
4015 3499 "semver-diff": {
4016 3500 "version": "2.1.0",
... ... @@ -4019,12 +3503,20 @@
4019 3503 "dev": true,
4020 3504 "requires": {
4021 3505 "semver": "^5.0.3"
  3506 + },
  3507 + "dependencies": {
  3508 + "semver": {
  3509 + "version": "5.7.1",
  3510 + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
  3511 + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
  3512 + "dev": true
  3513 + }
4022 3514 }
4023 3515 },
4024 3516 "set-value": {
4025   - "version": "2.0.0",
4026   - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
4027   - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
  3517 + "version": "2.0.1",
  3518 + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
  3519 + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
4028 3520 "dev": true,
4029 3521 "requires": {
4030 3522 "extend-shallow": "^2.0.1",
... ... @@ -4060,9 +3552,9 @@
4060 3552 "dev": true
4061 3553 },
4062 3554 "signal-exit": {
4063   - "version": "3.0.2",
4064   - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
4065   - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
  3555 + "version": "3.0.3",
  3556 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
  3557 + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
4066 3558 "dev": true
4067 3559 },
4068 3560 "simple-swizzle": {
... ... @@ -4074,9 +3566,9 @@
4074 3566 }
4075 3567 },
4076 3568 "slash": {
4077   - "version": "2.0.0",
4078   - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
4079   - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
  3569 + "version": "3.0.0",
  3570 + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
  3571 + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
4080 3572 "dev": true
4081 3573 },
4082 3574 "snapdragon": {
... ... @@ -4095,6 +3587,15 @@
4095 3587 "use": "^3.1.0"
4096 3588 },
4097 3589 "dependencies": {
  3590 + "debug": {
  3591 + "version": "2.6.9",
  3592 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  3593 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  3594 + "dev": true,
  3595 + "requires": {
  3596 + "ms": "2.0.0"
  3597 + }
  3598 + },
4098 3599 "define-property": {
4099 3600 "version": "0.2.5",
4100 3601 "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
... ... @@ -4112,6 +3613,12 @@
4112 3613 "requires": {
4113 3614 "is-extendable": "^0.1.0"
4114 3615 }
  3616 + },
  3617 + "ms": {
  3618 + "version": "2.0.0",
  3619 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  3620 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
  3621 + "dev": true
4115 3622 }
4116 3623 }
4117 3624 },
... ... @@ -4175,6 +3682,12 @@
4175 3682 "kind-of": "^3.2.0"
4176 3683 },
4177 3684 "dependencies": {
  3685 + "is-buffer": {
  3686 + "version": "1.1.6",
  3687 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  3688 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  3689 + "dev": true
  3690 + },
4178 3691 "kind-of": {
4179 3692 "version": "3.2.2",
4180 3693 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -4193,12 +3706,12 @@
4193 3706 "dev": true
4194 3707 },
4195 3708 "source-map-resolve": {
4196   - "version": "0.5.2",
4197   - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
4198   - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
  3709 + "version": "0.5.3",
  3710 + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
  3711 + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
4199 3712 "dev": true,
4200 3713 "requires": {
4201   - "atob": "^2.1.1",
  3714 + "atob": "^2.1.2",
4202 3715 "decode-uri-component": "^0.2.0",
4203 3716 "resolve-url": "^0.2.1",
4204 3717 "source-map-url": "^0.4.0",
... ... @@ -4290,6 +3803,16 @@
4290 3803 "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
4291 3804 "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
4292 3805 },
  3806 + "string-width": {
  3807 + "version": "2.1.1",
  3808 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
  3809 + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
  3810 + "dev": true,
  3811 + "requires": {
  3812 + "is-fullwidth-code-point": "^2.0.0",
  3813 + "strip-ansi": "^4.0.0"
  3814 + }
  3815 + },
4293 3816 "string_decoder": {
4294 3817 "version": "1.1.1",
4295 3818 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
... ... @@ -4298,6 +3821,15 @@
4298 3821 "safe-buffer": "~5.1.0"
4299 3822 }
4300 3823 },
  3824 + "strip-ansi": {
  3825 + "version": "4.0.0",
  3826 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
  3827 + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
  3828 + "dev": true,
  3829 + "requires": {
  3830 + "ansi-regex": "^3.0.0"
  3831 + }
  3832 + },
4301 3833 "strip-eof": {
4302 3834 "version": "1.0.0",
4303 3835 "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
... ... @@ -4344,14 +3876,6 @@
4344 3876 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
4345 3877 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
4346 3878 },
4347   - "through2": {
4348   - "version": "3.0.1",
4349   - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
4350   - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
4351   - "requires": {
4352   - "readable-stream": "2 || 3"
4353   - }
4354   - },
4355 3879 "timed-out": {
4356 3880 "version": "4.0.1",
4357 3881 "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
... ... @@ -4367,6 +3891,12 @@
4367 3891 "kind-of": "^3.0.2"
4368 3892 },
4369 3893 "dependencies": {
  3894 + "is-buffer": {
  3895 + "version": "1.1.6",
  3896 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
  3897 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  3898 + "dev": true
  3899 + },
4370 3900 "kind-of": {
4371 3901 "version": "3.2.2",
4372 3902 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
... ... @@ -4410,18 +3940,19 @@
4410 3940 }
4411 3941 },
4412 3942 "tough-cookie": {
4413   - "version": "2.4.3",
4414   - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
4415   - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
  3943 + "version": "4.0.0",
  3944 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
  3945 + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
4416 3946 "requires": {
4417   - "psl": "^1.1.24",
4418   - "punycode": "^1.4.1"
  3947 + "psl": "^1.1.33",
  3948 + "punycode": "^2.1.1",
  3949 + "universalify": "^0.1.2"
4419 3950 },
4420 3951 "dependencies": {
4421 3952 "punycode": {
4422   - "version": "1.4.1",
4423   - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
4424   - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
  3953 + "version": "2.1.1",
  3954 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
  3955 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
4425 3956 }
4426 3957 }
4427 3958 },
... ... @@ -4431,9 +3962,9 @@
4431 3962 "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
4432 3963 },
4433 3964 "tslib": {
4434   - "version": "1.11.2",
4435   - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.2.tgz",
4436   - "integrity": "sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg=="
  3965 + "version": "1.13.0",
  3966 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
  3967 + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
4437 3968 },
4438 3969 "tunnel": {
4439 3970 "version": "0.0.6",
... ... @@ -4469,52 +4000,46 @@
4469 4000 "dev": true
4470 4001 },
4471 4002 "undefsafe": {
4472   - "version": "2.0.2",
4473   - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",
4474   - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",
  4003 + "version": "2.0.3",
  4004 + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
  4005 + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
4475 4006 "dev": true,
4476 4007 "requires": {
4477 4008 "debug": "^2.2.0"
  4009 + },
  4010 + "dependencies": {
  4011 + "debug": {
  4012 + "version": "2.6.9",
  4013 + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  4014 + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  4015 + "dev": true,
  4016 + "requires": {
  4017 + "ms": "2.0.0"
  4018 + }
  4019 + },
  4020 + "ms": {
  4021 + "version": "2.0.0",
  4022 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
  4023 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
  4024 + "dev": true
  4025 + }
4478 4026 }
4479 4027 },
4480 4028 "underscore": {
4481   - "version": "1.10.2",
4482   - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
4483   - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg=="
  4029 + "version": "1.11.0",
  4030 + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz",
  4031 + "integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw=="
4484 4032 },
4485 4033 "union-value": {
4486   - "version": "1.0.0",
4487   - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
4488   - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
  4034 + "version": "1.0.1",
  4035 + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
  4036 + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
4489 4037 "dev": true,
4490 4038 "requires": {
4491 4039 "arr-union": "^3.1.0",
4492 4040 "get-value": "^2.0.6",
4493 4041 "is-extendable": "^0.1.1",
4494   - "set-value": "^0.4.3"
4495   - },
4496   - "dependencies": {
4497   - "extend-shallow": {
4498   - "version": "2.0.1",
4499   - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
4500   - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
4501   - "dev": true,
4502   - "requires": {
4503   - "is-extendable": "^0.1.0"
4504   - }
4505   - },
4506   - "set-value": {
4507   - "version": "0.4.3",
4508   - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
4509   - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
4510   - "dev": true,
4511   - "requires": {
4512   - "extend-shallow": "^2.0.1",
4513   - "is-extendable": "^0.1.1",
4514   - "is-plain-object": "^2.0.1",
4515   - "to-object-path": "^0.3.0"
4516   - }
4517   - }
  4042 + "set-value": "^2.0.1"
4518 4043 }
4519 4044 },
4520 4045 "unique-string": {
... ... @@ -4540,8 +4065,7 @@
4540 4065 "universalify": {
4541 4066 "version": "0.1.2",
4542 4067 "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
4543   - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
4544   - "dev": true
  4068 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
4545 4069 },
4546 4070 "unset-value": {
4547 4071 "version": "1.0.0",
... ... @@ -4590,9 +4114,9 @@
4590 4114 "dev": true
4591 4115 },
4592 4116 "upath": {
4593   - "version": "1.1.0",
4594   - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
4595   - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
  4117 + "version": "1.2.0",
  4118 + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
  4119 + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
4596 4120 "dev": true
4597 4121 },
4598 4122 "update-notifier": {
... ... @@ -4614,11 +4138,18 @@
4614 4138 }
4615 4139 },
4616 4140 "uri-js": {
4617   - "version": "4.2.2",
4618   - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
4619   - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
  4141 + "version": "4.4.0",
  4142 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
  4143 + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
4620 4144 "requires": {
4621 4145 "punycode": "^2.1.0"
  4146 + },
  4147 + "dependencies": {
  4148 + "punycode": {
  4149 + "version": "2.1.1",
  4150 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
  4151 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
  4152 + }
4622 4153 }
4623 4154 },
4624 4155 "urix": {
... ... @@ -4634,13 +4165,6 @@
4634 4165 "requires": {
4635 4166 "punycode": "1.3.2",
4636 4167 "querystring": "0.2.0"
4637   - },
4638   - "dependencies": {
4639   - "punycode": {
4640   - "version": "1.3.2",
4641   - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
4642   - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
4643   - }
4644 4168 }
4645 4169 },
4646 4170 "url-parse": {
... ... @@ -4673,6 +4197,13 @@
4673 4197 "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
4674 4198 "requires": {
4675 4199 "inherits": "2.0.3"
  4200 + },
  4201 + "dependencies": {
  4202 + "inherits": {
  4203 + "version": "2.0.3",
  4204 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
  4205 + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
  4206 + }
4676 4207 }
4677 4208 },
4678 4209 "util-deprecate": {
... ... @@ -4681,19 +4212,19 @@
4681 4212 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
4682 4213 },
4683 4214 "uuid": {
4684   - "version": "3.3.2",
4685   - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
4686   - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
  4215 + "version": "8.3.0",
  4216 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz",
  4217 + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ=="
4687 4218 },
4688 4219 "uuid-parse": {
4689   - "version": "1.0.0",
4690   - "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.0.0.tgz",
4691   - "integrity": "sha1-9GV3F2JLDkuIrzb5jYlYmlu+5Wk="
  4220 + "version": "1.1.0",
  4221 + "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz",
  4222 + "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A=="
4692 4223 },
4693 4224 "uuid-random": {
4694   - "version": "1.3.0",
4695   - "resolved": "https://registry.npmjs.org/uuid-random/-/uuid-random-1.3.0.tgz",
4696   - "integrity": "sha512-FSIlv8RFRPOjcHeDYStV7u6aJRfp+THrcWkbAJpw51JCyQLDxsFz+4dHgTYP8hSpZeSMXBpb/1qrK4bodXpSRA=="
  4225 + "version": "1.3.2",
  4226 + "resolved": "https://registry.npmjs.org/uuid-random/-/uuid-random-1.3.2.tgz",
  4227 + "integrity": "sha512-UOzej0Le/UgkbWEO8flm+0y+G+ljUon1QWTEZOq1rnMAsxo2+SckbiZdKzAHHlVh6gJqI1TjC/xwgR50MuCrBQ=="
4697 4228 },
4698 4229 "validator": {
4699 4230 "version": "9.4.1",
... ... @@ -4731,86 +4262,84 @@
4731 4262 "dev": true,
4732 4263 "requires": {
4733 4264 "string-width": "^2.1.1"
4734   - },
4735   - "dependencies": {
4736   - "ansi-regex": {
4737   - "version": "3.0.0",
4738   - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
4739   - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
4740   - "dev": true
4741   - },
4742   - "is-fullwidth-code-point": {
4743   - "version": "2.0.0",
4744   - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
4745   - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
4746   - "dev": true
4747   - },
4748   - "string-width": {
4749   - "version": "2.1.1",
4750   - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
4751   - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
4752   - "dev": true,
4753   - "requires": {
4754   - "is-fullwidth-code-point": "^2.0.0",
4755   - "strip-ansi": "^4.0.0"
4756   - }
4757   - },
4758   - "strip-ansi": {
4759   - "version": "4.0.0",
4760   - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
4761   - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
4762   - "dev": true,
4763   - "requires": {
4764   - "ansi-regex": "^3.0.0"
4765   - }
4766   - }
4767 4265 }
4768 4266 },
4769 4267 "winston": {
4770   - "version": "3.1.0",
4771   - "resolved": "https://registry.npmjs.org/winston/-/winston-3.1.0.tgz",
4772   - "integrity": "sha512-FsQfEE+8YIEeuZEYhHDk5cILo1HOcWkGwvoidLrDgPog0r4bser1lEIOco2dN9zpDJ1M88hfDgZvxe5z4xNcwg==",
  4268 + "version": "3.3.3",
  4269 + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
  4270 + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
4773 4271 "requires": {
4774   - "async": "^2.6.0",
4775   - "diagnostics": "^1.1.1",
4776   - "is-stream": "^1.1.0",
4777   - "logform": "^1.9.1",
4778   - "one-time": "0.0.4",
4779   - "readable-stream": "^2.3.6",
  4272 + "@dabh/diagnostics": "^2.0.2",
  4273 + "async": "^3.1.0",
  4274 + "is-stream": "^2.0.0",
  4275 + "logform": "^2.2.0",
  4276 + "one-time": "^1.0.0",
  4277 + "readable-stream": "^3.4.0",
4780 4278 "stack-trace": "0.0.x",
4781 4279 "triple-beam": "^1.3.0",
4782   - "winston-transport": "^4.2.0"
  4280 + "winston-transport": "^4.4.0"
  4281 + },
  4282 + "dependencies": {
  4283 + "readable-stream": {
  4284 + "version": "3.6.0",
  4285 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
  4286 + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
  4287 + "requires": {
  4288 + "inherits": "^2.0.3",
  4289 + "string_decoder": "^1.1.1",
  4290 + "util-deprecate": "^1.0.1"
  4291 + }
  4292 + }
4783 4293 }
4784 4294 },
4785 4295 "winston-compat": {
4786   - "version": "0.1.4",
4787   - "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.4.tgz",
4788   - "integrity": "sha512-mMEfFsSm6GmkFF+f4/0UJtG4N1vSaczGmXLVJYmS/+u2zUaIPcw2ZRuwUg2TvVBjswgiraN+vNnAG8z4fRUZ4w==",
  4296 + "version": "0.1.5",
  4297 + "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.5.tgz",
  4298 + "integrity": "sha512-EPvPcHT604AV3Ji6d3+vX8ENKIml9VSxMRnPQ+cuK/FX6f3hvPP2hxyoeeCOCFvDrJEujalfcKWlWPvAnFyS9g==",
4789 4299 "requires": {
4790 4300 "cycle": "~1.0.3",
4791 4301 "logform": "^1.6.0",
4792 4302 "triple-beam": "^1.2.0"
  4303 + },
  4304 + "dependencies": {
  4305 + "fecha": {
  4306 + "version": "2.3.3",
  4307 + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
  4308 + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
  4309 + },
  4310 + "logform": {
  4311 + "version": "1.10.0",
  4312 + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz",
  4313 + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==",
  4314 + "requires": {
  4315 + "colors": "^1.2.1",
  4316 + "fast-safe-stringify": "^2.0.4",
  4317 + "fecha": "^2.3.3",
  4318 + "ms": "^2.1.1",
  4319 + "triple-beam": "^1.2.0"
  4320 + }
  4321 + }
4793 4322 }
4794 4323 },
4795 4324 "winston-daily-rotate-file": {
4796   - "version": "3.5.1",
4797   - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.5.1.tgz",
4798   - "integrity": "sha512-Y5CECbcJro55HWcWJSzI1DiQrbrfwwvKHdCCJn9wWsWCGfnCPDl5SWIokS2M0EvOKtbZUrlm5DPG522mvjdUBQ==",
  4325 + "version": "3.10.0",
  4326 + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz",
  4327 + "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==",
4799 4328 "requires": {
4800 4329 "file-stream-rotator": "^0.4.1",
4801 4330 "object-hash": "^1.3.0",
4802   - "semver": "^5.6.0",
  4331 + "semver": "^6.2.0",
4803 4332 "triple-beam": "^1.3.0",
4804 4333 "winston-compat": "^0.1.4",
4805 4334 "winston-transport": "^4.2.0"
4806 4335 }
4807 4336 },
4808 4337 "winston-transport": {
4809   - "version": "4.2.0",
4810   - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.2.0.tgz",
4811   - "integrity": "sha512-0R1bvFqxSlK/ZKTH86nymOuKv/cT1PQBMuDdA7k7f0S9fM44dNH6bXnuxwXPrN8lefJgtZq08BKdyZ0DZIy/rg==",
  4338 + "version": "4.4.0",
  4339 + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
  4340 + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
4812 4341 "requires": {
4813   - "readable-stream": "^2.3.6",
  4342 + "readable-stream": "^2.3.7",
4814 4343 "triple-beam": "^1.2.0"
4815 4344 }
4816 4345 },
... ... @@ -4819,10 +4348,10 @@
4819 4348 "resolved": "https://registry.npmjs.org/wns/-/wns-0.5.4.tgz",
4820 4349 "integrity": "sha512-WYiJ7khIwUGBD5KAm+YYmwJDDRzFRs4YGAjtbFSoRIdbn9Jcix3p9khJmpvBTXGommaKkvduAn+pc9l4d9yzVQ=="
4821 4350 },
4822   - "wordwrap": {
4823   - "version": "1.0.0",
4824   - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
4825   - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
  4351 + "word-wrap": {
  4352 + "version": "1.2.3",
  4353 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
  4354 + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
4826 4355 "dev": true
4827 4356 },
4828 4357 "wrappy": {
... ... @@ -4831,9 +4360,9 @@
4831 4360 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
4832 4361 },
4833 4362 "write-file-atomic": {
4834   - "version": "2.3.0",
4835   - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
4836   - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
  4363 + "version": "2.4.3",
  4364 + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
  4365 + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
4837 4366 "dev": true,
4838 4367 "requires": {
4839 4368 "graceful-fs": "^4.1.11",
... ... @@ -4862,9 +4391,9 @@
4862 4391 "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
4863 4392 },
4864 4393 "yallist": {
4865   - "version": "3.0.3",
4866   - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
4867   - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
  4394 + "version": "3.1.1",
  4395 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
  4396 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
4868 4397 }
4869 4398 }
4870 4399 }
... ...
... ... @@ -14,7 +14,7 @@
14 14 "dependencies": {
15 15 "config": "^3.2.2",
16 16 "js-yaml": "^3.12.0",
17   - "kafkajs": "^1.12.0",
  17 + "kafkajs": "^1.14.0",
18 18 "@google-cloud/pubsub": "^1.7.1",
19 19 "aws-sdk": "^2.663.0",
20 20 "amqplib": "^0.5.5",
... ...
... ... @@ -27,20 +27,10 @@ let kafkaAdmin;
27 27 let consumer;
28 28 let producer;
29 29
30   -const topics = [];
31 30 const configEntries = [];
32 31
33 32 function KafkaProducer() {
34 33 this.send = async (responseTopic, scriptId, rawResponse, headers) => {
35   -
36   - if (!topics.includes(responseTopic)) {
37   - let createResponseTopicResult = await createTopic(responseTopic, 1);
38   - topics.push(responseTopic);
39   - if (createResponseTopicResult) {
40   - logger.info('Created new topic: %s', requestTopic);
41   - }
42   - }
43   -
44 34 return producer.send(
45 35 {
46 36 topic: responseTopic,
... ... @@ -99,10 +89,13 @@ function KafkaProducer() {
99 89 }
100 90 }
101 91
102   - let createRequestTopicResult = await createTopic(requestTopic, partitions);
  92 + let topics = await kafkaAdmin.listTopics();
103 93
104   - if (createRequestTopicResult) {
105   - logger.info('Created new topic: %s', requestTopic);
  94 + if (!topics.includes(requestTopic)) {
  95 + let createRequestTopicResult = await createTopic(requestTopic, partitions);
  96 + if (createRequestTopicResult) {
  97 + logger.info('Created new topic: %s', requestTopic);
  98 + }
106 99 }
107 100
108 101 consumer = kafkaClient.consumer({groupId: 'js-executor-group'});
... ...
... ... @@ -36,6 +36,8 @@ public interface RuleEngineTelemetryService {
36 36
37 37 void saveAndNotify(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, FutureCallback<Void> callback);
38 38
  39 + void saveAndNotify(TenantId tenantId, EntityId entityId, String scope, List<AttributeKvEntry> attributes, FutureCallback<Void> callback, boolean notifyDevice);
  40 +
39 41 void saveAttrAndNotify(TenantId tenantId, EntityId entityId, String scope, String key, long value, FutureCallback<Void> callback);
40 42
41 43 void saveAttrAndNotify(TenantId tenantId, EntityId entityId, String scope, String key, String value, FutureCallback<Void> callback);
... ...
... ... @@ -17,7 +17,7 @@ package org.thingsboard.rule.engine.telemetry;
17 17
18 18 import com.google.gson.JsonParser;
19 19 import lombok.extern.slf4j.Slf4j;
20   -import org.springframework.util.StringUtils;
  20 +import org.apache.commons.lang3.StringUtils;
21 21 import org.thingsboard.rule.engine.api.RuleNode;
22 22 import org.thingsboard.rule.engine.api.TbContext;
23 23 import org.thingsboard.rule.engine.api.TbNode;
... ... @@ -53,6 +53,9 @@ public class TbMsgAttributesNode implements TbNode {
53 53 @Override
54 54 public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException {
55 55 this.config = TbNodeUtils.convert(configuration, TbMsgAttributesNodeConfiguration.class);
  56 + if (config.getNotifyDevice() == null) {
  57 + config.setNotifyDevice(true);
  58 + }
56 59 }
57 60
58 61 @Override
... ... @@ -64,8 +67,15 @@ public class TbMsgAttributesNode implements TbNode {
64 67 String src = msg.getData();
65 68 Set<AttributeKvEntry> attributes = JsonConverter.convertToAttributes(new JsonParser().parse(src));
66 69 msg.getMetaData().putValue(SCOPE, config.getScope());
67   - ctx.getTelemetryService().saveAndNotify(ctx.getTenantId(), msg.getOriginator(), config.getScope(),
68   - new ArrayList<>(attributes), new TelemetryNodeCallback(ctx, msg));
  70 + String notifyDeviceStr = msg.getMetaData().getValue("notifyDevice");
  71 + ctx.getTelemetryService().saveAndNotify(
  72 + ctx.getTenantId(),
  73 + msg.getOriginator(),
  74 + config.getScope(),
  75 + new ArrayList<>(attributes),
  76 + new TelemetryNodeCallback(ctx, msg),
  77 + config.getNotifyDevice() || StringUtils.isEmpty(notifyDeviceStr) || Boolean.parseBoolean(notifyDeviceStr)
  78 + );
69 79 }
70 80
71 81 @Override
... ...
... ... @@ -24,10 +24,13 @@ public class TbMsgAttributesNodeConfiguration implements NodeConfiguration<TbMsg
24 24
25 25 private String scope;
26 26
  27 + private Boolean notifyDevice;
  28 +
27 29 @Override
28 30 public TbMsgAttributesNodeConfiguration defaultConfiguration() {
29 31 TbMsgAttributesNodeConfiguration configuration = new TbMsgAttributesNodeConfiguration();
30 32 configuration.setScope(DataConstants.SERVER_SCOPE);
  33 + configuration.setNotifyDevice(false);
31 34 return configuration;
32 35 }
33 36 }
... ...
1   -!function(e){function t(a){if(n[a])return n[a].exports;var i=n[a]={exports:{},id:a,loaded:!1};return e[a].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="/static/",t(0)}(function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))switch(typeof e[t]){case"function":break;case"object":e[t]=function(t){var n=t.slice(1),a=e[t[0]];return function(e,t,i){a.apply(this,[e,t,i].concat(n))}}(e[t]);break;default:e[t]=e[e[t]]}return e}([function(e,t,n){e.exports=n(107)},function(e,t){},1,1,1,1,function(e,t){e.exports=" <section ng-form name=assignCustomerConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.customer-name-pattern</label> <input ng-required=true name=customerNamePattern ng-model=configuration.customerNamePattern> <div ng-messages=assignCustomerConfigForm.customerNamePattern.$error> <div ng-message=required translate>tb.rulenode.customer-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.customer-name-pattern-hint</div> </md-input-container> <md-checkbox aria-label=\"{{ 'tb.rulenode.create-group-if-not-exists' | translate }}\" ng-model=configuration.createCustomerIfNotExists>{{ 'tb.rulenode.create-customer-if-not-exists' | translate }} </md-checkbox> <md-input-container class=md-block> <label translate>tb.rulenode.customer-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=customerCacheExpiration ng-model=configuration.customerCacheExpiration> <div ng-messages=assignCustomerConfigForm.customerCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.customer-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.customer-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.customer-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=' <section ng-form name=attributesConfigForm layout=column> <md-input-container class=md-block> <label translate>attribute.attributes-scope</label> <md-select ng-model=configuration.scope ng-disabled=$root.loading> <md-option ng-repeat="scope in types.attributesScope" ng-value=scope.value> {{scope.name | translate}} </md-option> </md-select> </md-input-container> </section> '},function(e,t){e.exports=' <section class=tb-mqtt-config ng-form name=azureIotHubConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.topic</label> <input ng-required=true name=topicPattern ng-model=configuration.topicPattern> <div ng-messages=azureIotHubConfigForm.topicPattern.$error> <div translate ng-message=required>tb.rulenode.topic-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.hostname</label> <input ng-required=true name=host ng-model=configuration.host> <div ng-messages=azureIotHubConfigForm.host.$error> <div translate ng-message=required>tb.rulenode.hostname-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.device-id</label> <input required name=clientId ng-model=configuration.clientId> <div ng-messages=azureIotHubConfigForm.clientId.$error> <div translate ng-message=required>tb.rulenode.device-id-required</div> </div> </md-input-container> <md-expansion-panel-group class=tb-credentials-panel-group ng-class="{\'disabled\': $root.loading || readonly}" md-component-id=credentialsPanelGroup> <md-expansion-panel md-component-id=credentialsPanel> <md-expansion-panel-collapsed> <div class=tb-panel-title>{{ \'tb.rulenode.credentials\' | translate }}</div> <div class=tb-panel-prompt>{{ ruleNodeTypes.azureIotHubCredentialTypes[configuration.credentials.type].name | translate }}</div> <span flex></span> <md-expansion-panel-icon></md-expansion-panel-icon> </md-expansion-panel-collapsed> <md-expansion-panel-expanded> <md-expansion-panel-header ng-click="$mdExpansionPanel(\'credentialsPanel\').collapse()"> <div class=tb-panel-title>{{ \'tb.rulenode.credentials\' | translate }}</div> <div class=tb-panel-prompt>{{ ruleNodeTypes.azureIotHubCredentialTypes[configuration.credentials.type].name | translate }}</div> <span flex></span> <md-expansion-panel-icon></md-expansion-panel-icon> </md-expansion-panel-header> <md-expansion-panel-content> <div layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.credentials-type</label> <md-select ng-required=true name=credentialsType ng-model=configuration.credentials.type ng-disabled="$root.loading || readonly" ng-change=credentialsTypeChanged()> <md-option ng-repeat="(credentialsType, credentialsValue) in ruleNodeTypes.azureIotHubCredentialTypes" ng-value=credentialsValue.value> {{credentialsValue.name | translate}} </md-option> </md-select> <div ng-messages=azureIotHubConfigForm.credentialsType.$error> <div translate ng-message=required>tb.rulenode.credentials-type-required</div> </div> </md-input-container> <section flex layout=column ng-if="configuration.credentials.type == ruleNodeTypes.azureIotHubCredentialTypes.sas.value"> <md-input-container class=md-block> <label translate>tb.rulenode.sas-key</label> <input required type=password name=sasKey ng-model=configuration.credentials.sasKey> <div ng-messages=azureIotHubConfigForm.sasKey.$error> <div translate ng-message=required>tb.rulenode.sas-key-required</div> </div> </md-input-container> <div class=tb-container ng-class="\'ng-valid\'"> <label class=tb-label translate>tb.rulenode.azure-ca-cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'caCert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'caCert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=caCertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=caCertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=configuration.credentials.caCertFileName>{{configuration.credentials.caCertFileName}}</div> </div> </section> <section flex layout=column ng-if="configuration.credentials.type == ruleNodeTypes.azureIotHubCredentialTypes[\'cert.PEM\'].value" class=dropdown-section> <div class=tb-container ng-class="configuration.credentials.caCertFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.azure-ca-cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'caCert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'caCert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=caCertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=caCertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=configuration.credentials.caCertFileName>{{configuration.credentials.caCertFileName}}</div> </div> <div class=tb-container ng-class="configuration.credentials.certFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'Cert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'Cert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=CertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=CertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.certFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.certFileName>{{configuration.credentials.certFileName}}</div> </div> <div class=tb-container ng-class="configuration.credentials.privateKeyFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.private-key</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'privateKey\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'privateKey\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=privateKeySelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=privateKeySelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.privateKeyFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.privateKeyFileName>{{configuration.credentials.privateKeyFileName}}</div> </div> <md-input-container class=md-block> <label translate>tb.rulenode.private-key-password</label> <input type=password name=privateKeyPassword ng-model=configuration.credentials.password> </md-input-container> </section> </div> </md-expansion-panel-content> </md-expansion-panel-expanded> </md-expansion-panel> </md-expansion-panel-group> </section>'},function(e,t){e.exports=" <section ng-form name=checkPointConfigForm layout=column> <tb-queue-type-list the-form=checkPointConfigForm tb-required=true ng-disabled=false queue-type=serviceType ng-model=configuration.queueName> </tb-queue-type-list> <div class=tb-hint translate>tb.rulenode.select-queue-hint</div> </section> "},function(e,t){e.exports=" <section class=tb-alarm-config ng-form name=alarmConfigForm layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.alarm-details-builder</label> <tb-js-func ng-model=configuration.alarmDetailsBuildJs function-name=Details function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row style=padding-bottom:15px> <md-button ng-click=testDetailsBuildJs($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-details-function' | translate }} </md-button> </div> <md-input-container class=md-block> <label translate>tb.rulenode.alarm-type</label> <input ng-required=true name=alarmType ng-model=configuration.alarmType> <div ng-messages=alarmConfigForm.alarmType.$error> <div ng-message=required translate>tb.rulenode.alarm-type-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-type-pattern-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section class=tb-alarm-config ng-form name=alarmConfigForm layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.alarm-details-builder</label> <tb-js-func ng-model=configuration.alarmDetailsBuildJs function-name=Details function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row style=padding-bottom:15px> <md-button ng-click=testDetailsBuildJs($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-details-function' | translate }} </md-button> </div> <md-checkbox aria-label=\"{{ 'tb.rulenode.use-metadata-interval-patterns' | translate }}\" ng-model=configuration.useMessageAlarmData>{{ 'tb.rulenode.use-message-alarm-data' | translate }} </md-checkbox> <section layout=column layout-gt-sm=row ng-if=!configuration.useMessageAlarmData> <md-input-container flex class=md-block> <label translate>tb.rulenode.alarm-type</label> <input ng-required=true name=alarmType ng-model=configuration.alarmType> <div ng-messages=alarmConfigForm.alarmType.$error> <div ng-message=required translate>tb.rulenode.alarm-type-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-type-pattern-hint</div> </md-input-container> <md-input-container flex class=md-block> <label translate>tb.rulenode.alarm-severity</label> <md-select required name=severity ng-model=configuration.severity> <md-option ng-repeat=\"(severityKey, severity) in types.alarmSeverity\" ng-value=severityKey> {{ severity.name | translate}} </md-option> </md-select> <div ng-messages=alarmConfigForm.severity.$error> <div ng-message=required translate>tb.rulenode.alarm-severity-required</div> </div> </md-input-container> </section> <section layout=column ng-if=!configuration.useMessageAlarmData> <md-checkbox aria-label=\"{{ 'tb.rulenode.propagate' | translate }}\" ng-model=configuration.propagate>{{ 'tb.rulenode.propagate' | translate }} </md-checkbox> <div ng-if=configuration.propagate> <label translate class=\"tb-title no-padding\">tb.rulenode.relation-types-list</label> <md-chips ng-required=false readonly=readonly ng-model=configuration.relationTypes placeholder=\"{{'tb.rulenode.relation-types-list' | translate}}\" md-separator-keys=separatorKeys> </md-chips> </div> <div class=tb-hint style=padding-top:2px ng-if=configuration.propagate translate>tb.rulenode.relation-types-list-hint</div> </section> </section> "},function(e,t){e.exports=" <section ng-form name=createRelationConfigForm layout=column style=min-width:650px> <md-input-container class=md-block style=min-width:100px> <label translate>relation.direction</label> <md-select required ng-model=configuration.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <div layout=row class=tb-entity-select> <md-input-container class=md-block> <tb-entity-type-select style=min-width:100px the-form=createRelationConfigForm tb-required=true ng-model=configuration.entityType> </tb-entity-type-select> </md-input-container> <md-input-container class=md-block flex ng-if=configuration.entityType style=margin-top:38px> <label translate>tb.rulenode.entity-name-pattern</label> <input ng-required=true name=entityNamePattern ng-model=configuration.entityNamePattern> <div ng-messages=createRelationConfigForm.entityNamePattern.$error> <div ng-message=required translate>tb.rulenode.entity-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-name-pattern-hint</div> </md-input-container> <md-input-container class=md-block flex ng-if=\"configuration.entityType == 'DEVICE' || configuration.entityType == 'ASSET'\" style=margin-top:38px> <label translate>tb.rulenode.entity-type-pattern</label> <input ng-required=true name=entityTypePattern ng-model=configuration.entityTypePattern> <div ng-messages=createRelationConfigForm.entityTypePattern.$error> <div ng-message=required translate>tb.rulenode.entity-type-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-type-pattern-hint</div> </md-input-container> </div> <md-input-container class=md-block flex style=margin-top:0> <label translate>tb.rulenode.relation-type-pattern</label> <input ng-required=true name=relationType ng-model=configuration.relationType> <div ng-messages=createRelationConfigForm.relationType.$error> <div ng-message=required translate>tb.rulenode.relation-type-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.relation-type-pattern-hint</div> </md-input-container> <md-checkbox flex ng-if=\"configuration.entityType == 'CUSTOMER' || configuration.entityType == 'ASSET' || configuration.entityType == 'DEVICE'\" aria-label=\"{{ 'tb.rulenode.create-entity-if-not-exists' | translate }}\" ng-model=configuration.createEntityIfNotExists>{{ 'tb.rulenode.create-entity-if-not-exists' | translate }} </md-checkbox> <div class=tb-hint ng-if=\"configuration.entityType == 'CUSTOMER' || configuration.entityType == 'ASSET' || configuration.entityType == 'DEVICE'\" translate>tb.rulenode.create-entity-if-not-exists-hint</div> <md-checkbox flex aria-label=\"{{ 'tb.rulenode.remove-current-relations' | translate }}\" ng-model=configuration.removeCurrentRelations>{{ 'tb.rulenode.remove-current-relations' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.remove-current-relations-hint</div> <md-checkbox flex aria-label=\"{{ 'tb.rulenode.change-originator-to-related-entity' | translate }}\" ng-model=configuration.changeOriginatorToRelatedEntity>{{ 'tb.rulenode.change-originator-to-related-entity' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.change-originator-to-related-entity-hint</div> <md-input-container class=md-block> <label translate>tb.rulenode.entity-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=entityCacheExpiration ng-model=configuration.entityCacheExpiration> <div ng-messages=createRelationConfigForm.entityCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.entity-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.entity-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.entity-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section ng-form name=deleteRelationConfigForm layout=column> <md-checkbox aria-label=\"{{ 'tb.rulenode.delete-relation-to-specific-entity' | translate }}\" ng-model=configuration.deleteForSingleEntity> {{ 'tb.rulenode.delete-relation-to-specific-entity' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.delete-relation-hint</div> <md-input-container class=md-block style=min-width:100px;margin-bottom:38px> <label translate>relation.direction</label> <md-select required ng-model=configuration.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <div layout=row class=tb-entity-select ng-if=configuration.deleteForSingleEntity> <md-input-container class=md-block> <tb-entity-type-select style=min-width:100px the-form=deleteRelationConfigForm tb-required=true ng-model=configuration.entityType> </tb-entity-type-select> </md-input-container> <md-input-container class=md-block flex ng-if=configuration.entityType style=margin-top:38px> <label translate>tb.rulenode.entity-name-pattern</label> <input ng-required=true name=entityNamePattern ng-model=configuration.entityNamePattern> <div ng-messages=deleteRelationConfigForm.entityNamePattern.$error> <div ng-message=required translate>tb.rulenode.entity-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-name-pattern-hint</div> </md-input-container> </div> <md-input-container class=md-block flex> <label translate>tb.rulenode.relation-type-pattern</label> <input ng-required=true name=relationType ng-model=configuration.relationType> <div ng-messages=createRelationConfigForm.relationType.$error> <div ng-message=required translate>tb.rulenode.relation-type-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.relation-type-pattern-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.entity-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=entityCacheExpiration ng-model=configuration.entityCacheExpiration> <div ng-messages=deleteRelationConfigForm.entityCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.entity-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.entity-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.entity-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section class=tb-generator-config ng-form name=generatorConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.message-count</label> <input ng-required=true type=number step=1 name=messageCount ng-model=configuration.msgCount min=0> <div ng-messages=generatorConfigForm.messageCount.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.message-count-required</div> <div ng-message=min translate>tb.rulenode.min-message-count-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.period-seconds</label> <input ng-required=true type=number step=1 name=periodInSeconds ng-model=configuration.periodInSeconds min=1> <div ng-messages=generatorConfigForm.periodInSeconds.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.period-seconds-required</div> <div ng-message=min translate>tb.rulenode.min-period-seconds-message</div> </div> </md-input-container> <div layout=column> <label class=tb-small>{{ 'tb.rulenode.originator' | translate }}</label> <tb-entity-select the-form=generatorConfigForm tb-required=false ng-model=originator> </tb-entity-select> </div> <label translate class=\"tb-title no-padding\">tb.rulenode.generate</label> <tb-js-func ng-model=configuration.jsScript function-name=Generate function-args=\"{{ ['prevMsg', 'prevMetadata', 'prevMsgType'] }}\" no-validate=true> </tb-js-func> <div layout=row> <md-button ng-click=testScript($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-generator-function' | translate }} </md-button> </div> </section> "},function(e,t){e.exports=' <section ng-form name=geoActionConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.latitude-key-name</label> <input ng-required=true name=latitudeKeyName ng-model=configuration.latitudeKeyName> <div ng-messages=geoActionConfigForm.latitudeKeyName.$error> <div ng-message=required translate>tb.rulenode.latitude-key-name-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.longitude-key-name</label> <input ng-required=true name=longitudeKeyName ng-model=configuration.longitudeKeyName> <div ng-messages=geoActionConfigForm.longitudeKeyName.$error> <div ng-message=required translate>tb.rulenode.longitude-key-name-required</div> </div> </md-input-container> <md-checkbox flex aria-label="{{ \'tb.rulenode.fetch-perimeter-info-from-message-metadata\' | translate }}" ng-model=configuration.fetchPerimeterInfoFromMessageMetadata>{{ \'tb.rulenode.fetch-perimeter-info-from-message-metadata\' | translate }} </md-checkbox> <div layout=row class=tb-entity-select ng-if="configuration.fetchPerimeterInfoFromMessageMetadata === false"> <md-input-container class=md-block flex=100> <label translate>tb.rulenode.perimeter-type</label> <md-select required ng-model=configuration.perimeterType flex> <md-option ng-repeat="type in ruleNodeTypes.perimeterType" ng-value=type.value> {{ type.name | translate}} </md-option> </md-select> </md-input-container> </div> <div layout=row layout-wrap ng-if="configuration.perimeterType===ruleNodeTypes.perimeterType.CIRCLE.value && configuration.fetchPerimeterInfoFromMessageMetadata === false"> <div layout=column flex=50> <md-input-container class=md-block flex layout=column style=margin-top:44px> <label translate>tb.rulenode.circle-center-latitude</label> <input type=number min=-90 max=90 step=0.1 ng-required=true name=centerLatitude ng-model=configuration.centerLatitude> <div ng-messages=geoActionConfigForm.centerLatitude.$error> <div ng-message=required translate>tb.rulenode.circle-center-latitude-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block flex style=margin-top:44px> <label translate>tb.rulenode.circle-center-longitude</label> <input type=number min=-180 max=180 step=0.1 ng-required=true name=centerLongitude ng-model=configuration.centerLongitude> <div ng-messages=geoActionConfigForm.centerLongitude.$error> <div ng-message=required translate>tb.rulenode.circle-center-longitude-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block style=margin-top:28px> <label translate>tb.rulenode.range</label> <input type=number min=0 step=0.1 ng-required=true name=range ng-model=configuration.range> <div ng-messages=geoActionConfigForm.range.$error> <div ng-message=required translate>tb.rulenode.range-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block style=margin-top:28px> <label translate>tb.rulenode.range-units</label> <md-select required ng-model=configuration.rangeUnit> <md-option ng-repeat="type in ruleNodeTypes.rangeUnit" ng-value=type.value> {{ type.name | translate}} </md-option> </md-select> </md-input-container> </div> </div> <div layout=row layout-wrap ng-if="configuration.perimeterType===ruleNodeTypes.perimeterType.POLYGON.value && configuration.fetchPerimeterInfoFromMessageMetadata === false"> <div layout=column flex=100> <md-input-container class=md-block style=margin-top:44px> <label translate>tb.rulenode.polygon-definition</label> <input ng-required=true name=polygonsDefinition ng-model=configuration.polygonsDefinition> <div ng-messages=geoActionConfigForm.polygonsDefinition.$error> <div ng-message=required translate>tb.rulenode.polygon-definition-required</div> </div> <div class=tb-hint style=margin-top:5px translate>tb.rulenode.polygon-definition-hint</div> </md-input-container> </div> </div> <div layout=column layout-gt-sm=row> <md-input-container flex class="md-block tb-time-value" flex> <label translate class="tb-title no-padding">tb.rulenode.min-inside-duration</label> <input required type=number step=1 min=1 max=2147483647 name=minInsideDuration ng-model=configuration.minInsideDuration> <div ng-messages=geoActionConfigForm.minInsideDuration.$error> <div translate ng-message=required>tb.rulenode.min-inside-duration-value-required</div> <div ng-message=min translate>tb.rulenode.time-value-range</div> <div ng-message=max translate>tb.rulenode.time-value-range</div> </div> </md-input-container> <md-input-container flex class="md-block tb-time-unit" flex> <label translate class="tb-title no-padding">tb.rulenode.min-inside-duration-time-unit</label> <md-select required name=minInsideDurationTimeUnit aria-label="{{ \'tb.rulenode.min-inside-duration-time-unit\' | translate }}" ng-model=configuration.minInsideDurationTimeUnit> <md-option ng-repeat="timeUnit in ruleNodeTypes.timeUnit" ng-value=timeUnit.value> {{timeUnit.name | translate}} </md-option> </md-select> </md-input-container> </div> <div layout=column layout-gt-sm=row> <md-input-container flex class="md-block tb-time-value" flex> <label translate class="tb-title no-padding">tb.rulenode.min-outside-duration</label> <input required type=number step=1 min=1 max=2147483647 name=minOutsideDuration ng-model=configuration.minOutsideDuration> <div ng-messages=geoActionConfigForm.minOutsideDuration.$error> <div translate ng-message=required>tb.rulenode.min-outside-duration-value-required</div> <div ng-message=min translate>tb.rulenode.time-value-range</div> <div ng-message=max translate>tb.rulenode.time-value-range</div> </div> </md-input-container> <md-input-container flex class="md-block tb-time-unit" flex> <label translate class="tb-title no-padding">tb.rulenode.min-outside-duration-time-unit</label> <md-select required name=minOutsideDurationTimeUnit aria-label="{{ \'tb.rulenode.min-outside-duration-time-unit\' | translate }}" ng-model=configuration.minOutsideDurationTimeUnit> <md-option ng-repeat="timeUnit in ruleNodeTypes.timeUnit" ng-value=timeUnit.value> {{timeUnit.name | translate}} </md-option> </md-select> </md-input-container> </div> </section> '},function(e,t){e.exports=' <section ng-form name=kafkaConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.topic-pattern</label> <input ng-required=true name=topicPattern ng-model=configuration.topicPattern> <div ng-messages=kafkaConfigForm.topicPattern.$error> <div ng-message=required translate>tb.rulenode.topic-pattern-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.bootstrap-servers</label> <input ng-required=true name=bootstrapServers ng-model=configuration.bootstrapServers> <div ng-messages=kafkaConfigForm.bootstrapServers.$error> <div ng-message=required translate>tb.rulenode.bootstrap-servers-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.retries</label> <input type=number step=1 name=retries ng-model=configuration.retries min=0> <div ng-messages=kafkaConfigForm.retries.$error> <div ng-message=min translate>tb.rulenode.min-retries-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.batch-size-bytes</label> <input type=number step=1 name=batchSize ng-model=configuration.batchSize min=0> <div ng-messages=kafkaConfigForm.batchSize.$error> <div ng-message=min translate>tb.rulenode.min-batch-size-bytes-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.linger-ms</label> <input type=number step=1 name=linger ng-model=configuration.linger min=0> <div ng-messages=kafkaConfigForm.linger.$error> <div ng-message=min translate>tb.rulenode.min-linger-ms-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.buffer-memory-bytes</label> <input type=number step=1 name=bufferMemory ng-model=configuration.bufferMemory min=0> <div ng-messages=kafkaConfigForm.bufferMemory.$error> <div ng-message=min translate>tb.rulenode.min-buffer-memory-bytes-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.acks</label> <md-select ng-model=configuration.acks ng-disabled=$root.loading> <md-option ng-repeat="ackValue in ackValues" ng-value=ackValue> {{ ackValue }} </md-option> </md-select> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.key-serializer</label> <input ng-required=true name=keySerializer ng-model=configuration.keySerializer> <div ng-messages=kafkaConfigForm.keySerializer.$error> <div ng-message=required translate>tb.rulenode.key-serializer-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.value-serializer</label> <input ng-required=true name=valueSerializer ng-model=configuration.valueSerializer> <div ng-messages=kafkaConfigForm.valueSerializer.$error> <div ng-message=required translate>tb.rulenode.value-serializer-required</div> </div> </md-input-container> <label translate class=tb-title>tb.rulenode.other-properties</label> <tb-kv-map-config ng-model=configuration.otherProperties ng-required=false key-text="\'tb.rulenode.key\'" key-required-text="\'tb.rulenode.key-required\'" val-text="\'tb.rulenode.value\'" val-required-text="\'tb.rulenode.value-required\'"> </tb-kv-map-config> <md-checkbox flex style=margin-top:18px aria-label="{{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }}" ng-model=configuration.addMetadataKeyValuesAsKafkaHeaders>{{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.add-metadata-key-values-as-kafka-headers-hint</div> <md-input-container flex class=md-block flex ng-if="configuration.addMetadataKeyValuesAsKafkaHeaders == true"> <label translate class=tb-title>tb.rulenode.charset-encoding</label> <md-select required name=addMetadataKeyValuesAsKafkaHeaders aria-label="{{ \'tb.rulenode.charset-encoding\' | translate }}" ng-model=configuration.kafkaHeadersCharset> <md-option ng-repeat="charset in ruleNodeTypes.toBytesStandartCharsetTypes" ng-value=charset.value> {{charset.name | translate}} </md-option> </md-select> </md-input-container> </section> ';
  1 +!function(e){function t(a){if(n[a])return n[a].exports;var i=n[a]={exports:{},id:a,loaded:!1};return e[a].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="/static/",t(0)}(function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))switch(typeof e[t]){case"function":break;case"object":e[t]=function(t){var n=t.slice(1),a=e[t[0]];return function(e,t,i){a.apply(this,[e,t,i].concat(n))}}(e[t]);break;default:e[t]=e[e[t]]}return e}([function(e,t,n){e.exports=n(107)},function(e,t){},1,1,1,1,function(e,t){e.exports=" <section ng-form name=assignCustomerConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.customer-name-pattern</label> <input ng-required=true name=customerNamePattern ng-model=configuration.customerNamePattern> <div ng-messages=assignCustomerConfigForm.customerNamePattern.$error> <div ng-message=required translate>tb.rulenode.customer-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.customer-name-pattern-hint</div> </md-input-container> <md-checkbox aria-label=\"{{ 'tb.rulenode.create-group-if-not-exists' | translate }}\" ng-model=configuration.createCustomerIfNotExists>{{ 'tb.rulenode.create-customer-if-not-exists' | translate }} </md-checkbox> <md-input-container class=md-block> <label translate>tb.rulenode.customer-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=customerCacheExpiration ng-model=configuration.customerCacheExpiration> <div ng-messages=assignCustomerConfigForm.customerCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.customer-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.customer-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.customer-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section ng-form name=attributesConfigForm layout=column> <md-input-container class=md-block> <label translate>attribute.attributes-scope</label> <md-select ng-model=configuration.scope ng-disabled=$root.loading> <md-option ng-repeat=\"scope in types.attributesScope\" ng-value=scope.value> {{scope.name | translate}} </md-option> </md-select> </md-input-container> <md-input-container ng-if=\"configuration.scope === 'SHARED_SCOPE'\"> <md-checkbox flex style=margin-top:18px aria-label=\"{{ 'tb.rulenode.notify-device' | translate }}\" ng-model=configuration.notifyDevice>{{ 'tb.rulenode.notify-device' | translate }} </md-checkbox> <div class=tb-hint translate flex>tb.rulenode.notify-device-hint</div> </md-input-container> </section> "},function(e,t){e.exports=' <section class=tb-mqtt-config ng-form name=azureIotHubConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.topic</label> <input ng-required=true name=topicPattern ng-model=configuration.topicPattern> <div ng-messages=azureIotHubConfigForm.topicPattern.$error> <div translate ng-message=required>tb.rulenode.topic-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.hostname</label> <input ng-required=true name=host ng-model=configuration.host> <div ng-messages=azureIotHubConfigForm.host.$error> <div translate ng-message=required>tb.rulenode.hostname-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.device-id</label> <input required name=clientId ng-model=configuration.clientId> <div ng-messages=azureIotHubConfigForm.clientId.$error> <div translate ng-message=required>tb.rulenode.device-id-required</div> </div> </md-input-container> <md-expansion-panel-group class=tb-credentials-panel-group ng-class="{\'disabled\': $root.loading || readonly}" md-component-id=credentialsPanelGroup> <md-expansion-panel md-component-id=credentialsPanel> <md-expansion-panel-collapsed> <div class=tb-panel-title>{{ \'tb.rulenode.credentials\' | translate }}</div> <div class=tb-panel-prompt>{{ ruleNodeTypes.azureIotHubCredentialTypes[configuration.credentials.type].name | translate }}</div> <span flex></span> <md-expansion-panel-icon></md-expansion-panel-icon> </md-expansion-panel-collapsed> <md-expansion-panel-expanded> <md-expansion-panel-header ng-click="$mdExpansionPanel(\'credentialsPanel\').collapse()"> <div class=tb-panel-title>{{ \'tb.rulenode.credentials\' | translate }}</div> <div class=tb-panel-prompt>{{ ruleNodeTypes.azureIotHubCredentialTypes[configuration.credentials.type].name | translate }}</div> <span flex></span> <md-expansion-panel-icon></md-expansion-panel-icon> </md-expansion-panel-header> <md-expansion-panel-content> <div layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.credentials-type</label> <md-select ng-required=true name=credentialsType ng-model=configuration.credentials.type ng-disabled="$root.loading || readonly" ng-change=credentialsTypeChanged()> <md-option ng-repeat="(credentialsType, credentialsValue) in ruleNodeTypes.azureIotHubCredentialTypes" ng-value=credentialsValue.value> {{credentialsValue.name | translate}} </md-option> </md-select> <div ng-messages=azureIotHubConfigForm.credentialsType.$error> <div translate ng-message=required>tb.rulenode.credentials-type-required</div> </div> </md-input-container> <section flex layout=column ng-if="configuration.credentials.type == ruleNodeTypes.azureIotHubCredentialTypes.sas.value"> <md-input-container class=md-block> <label translate>tb.rulenode.sas-key</label> <input required type=password name=sasKey ng-model=configuration.credentials.sasKey> <div ng-messages=azureIotHubConfigForm.sasKey.$error> <div translate ng-message=required>tb.rulenode.sas-key-required</div> </div> </md-input-container> <div class=tb-container ng-class="\'ng-valid\'"> <label class=tb-label translate>tb.rulenode.azure-ca-cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'caCert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'caCert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=caCertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=caCertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=configuration.credentials.caCertFileName>{{configuration.credentials.caCertFileName}}</div> </div> </section> <section flex layout=column ng-if="configuration.credentials.type == ruleNodeTypes.azureIotHubCredentialTypes[\'cert.PEM\'].value" class=dropdown-section> <div class=tb-container ng-class="configuration.credentials.caCertFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.azure-ca-cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'caCert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'caCert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=caCertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=caCertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=configuration.credentials.caCertFileName>{{configuration.credentials.caCertFileName}}</div> </div> <div class=tb-container ng-class="configuration.credentials.certFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'Cert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'Cert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=CertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=CertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.certFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.certFileName>{{configuration.credentials.certFileName}}</div> </div> <div class=tb-container ng-class="configuration.credentials.privateKeyFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.private-key</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'privateKey\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'privateKey\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=privateKeySelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=privateKeySelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.privateKeyFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.privateKeyFileName>{{configuration.credentials.privateKeyFileName}}</div> </div> <md-input-container class=md-block> <label translate>tb.rulenode.private-key-password</label> <input type=password name=privateKeyPassword ng-model=configuration.credentials.password> </md-input-container> </section> </div> </md-expansion-panel-content> </md-expansion-panel-expanded> </md-expansion-panel> </md-expansion-panel-group> </section>'},function(e,t){e.exports=" <section ng-form name=checkPointConfigForm layout=column> <tb-queue-type-list the-form=checkPointConfigForm tb-required=true ng-disabled=false queue-type=serviceType ng-model=configuration.queueName> </tb-queue-type-list> <div class=tb-hint translate>tb.rulenode.select-queue-hint</div> </section> "},function(e,t){e.exports=" <section class=tb-alarm-config ng-form name=alarmConfigForm layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.alarm-details-builder</label> <tb-js-func ng-model=configuration.alarmDetailsBuildJs function-name=Details function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row style=padding-bottom:15px> <md-button ng-click=testDetailsBuildJs($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-details-function' | translate }} </md-button> </div> <md-input-container class=md-block> <label translate>tb.rulenode.alarm-type</label> <input ng-required=true name=alarmType ng-model=configuration.alarmType> <div ng-messages=alarmConfigForm.alarmType.$error> <div ng-message=required translate>tb.rulenode.alarm-type-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-type-pattern-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section class=tb-alarm-config ng-form name=alarmConfigForm layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.alarm-details-builder</label> <tb-js-func ng-model=configuration.alarmDetailsBuildJs function-name=Details function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row style=padding-bottom:15px> <md-button ng-click=testDetailsBuildJs($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-details-function' | translate }} </md-button> </div> <md-checkbox aria-label=\"{{ 'tb.rulenode.use-metadata-interval-patterns' | translate }}\" ng-model=configuration.useMessageAlarmData>{{ 'tb.rulenode.use-message-alarm-data' | translate }} </md-checkbox> <section layout=column layout-gt-sm=row ng-if=!configuration.useMessageAlarmData> <md-input-container flex class=md-block> <label translate>tb.rulenode.alarm-type</label> <input ng-required=true name=alarmType ng-model=configuration.alarmType> <div ng-messages=alarmConfigForm.alarmType.$error> <div ng-message=required translate>tb.rulenode.alarm-type-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-type-pattern-hint</div> </md-input-container> <md-input-container flex class=md-block> <label translate>tb.rulenode.alarm-severity</label> <md-select required name=severity ng-model=configuration.severity> <md-option ng-repeat=\"(severityKey, severity) in types.alarmSeverity\" ng-value=severityKey> {{ severity.name | translate}} </md-option> </md-select> <div ng-messages=alarmConfigForm.severity.$error> <div ng-message=required translate>tb.rulenode.alarm-severity-required</div> </div> </md-input-container> </section> <section layout=column ng-if=!configuration.useMessageAlarmData> <md-checkbox aria-label=\"{{ 'tb.rulenode.propagate' | translate }}\" ng-model=configuration.propagate>{{ 'tb.rulenode.propagate' | translate }} </md-checkbox> <div ng-if=configuration.propagate> <label translate class=\"tb-title no-padding\">tb.rulenode.relation-types-list</label> <md-chips ng-required=false readonly=readonly ng-model=configuration.relationTypes placeholder=\"{{'tb.rulenode.relation-types-list' | translate}}\" md-separator-keys=separatorKeys> </md-chips> </div> <div class=tb-hint style=padding-top:2px ng-if=configuration.propagate translate>tb.rulenode.relation-types-list-hint</div> </section> </section> "},function(e,t){e.exports=" <section ng-form name=createRelationConfigForm layout=column style=min-width:650px> <md-input-container class=md-block style=min-width:100px> <label translate>relation.direction</label> <md-select required ng-model=configuration.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <div layout=row class=tb-entity-select> <md-input-container class=md-block> <tb-entity-type-select style=min-width:100px the-form=createRelationConfigForm tb-required=true ng-model=configuration.entityType> </tb-entity-type-select> </md-input-container> <md-input-container class=md-block flex ng-if=configuration.entityType style=margin-top:38px> <label translate>tb.rulenode.entity-name-pattern</label> <input ng-required=true name=entityNamePattern ng-model=configuration.entityNamePattern> <div ng-messages=createRelationConfigForm.entityNamePattern.$error> <div ng-message=required translate>tb.rulenode.entity-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-name-pattern-hint</div> </md-input-container> <md-input-container class=md-block flex ng-if=\"configuration.entityType == 'DEVICE' || configuration.entityType == 'ASSET'\" style=margin-top:38px> <label translate>tb.rulenode.entity-type-pattern</label> <input ng-required=true name=entityTypePattern ng-model=configuration.entityTypePattern> <div ng-messages=createRelationConfigForm.entityTypePattern.$error> <div ng-message=required translate>tb.rulenode.entity-type-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-type-pattern-hint</div> </md-input-container> </div> <md-input-container class=md-block flex style=margin-top:0> <label translate>tb.rulenode.relation-type-pattern</label> <input ng-required=true name=relationType ng-model=configuration.relationType> <div ng-messages=createRelationConfigForm.relationType.$error> <div ng-message=required translate>tb.rulenode.relation-type-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.relation-type-pattern-hint</div> </md-input-container> <md-checkbox flex ng-if=\"configuration.entityType == 'CUSTOMER' || configuration.entityType == 'ASSET' || configuration.entityType == 'DEVICE'\" aria-label=\"{{ 'tb.rulenode.create-entity-if-not-exists' | translate }}\" ng-model=configuration.createEntityIfNotExists>{{ 'tb.rulenode.create-entity-if-not-exists' | translate }} </md-checkbox> <div class=tb-hint ng-if=\"configuration.entityType == 'CUSTOMER' || configuration.entityType == 'ASSET' || configuration.entityType == 'DEVICE'\" translate>tb.rulenode.create-entity-if-not-exists-hint</div> <md-checkbox flex aria-label=\"{{ 'tb.rulenode.remove-current-relations' | translate }}\" ng-model=configuration.removeCurrentRelations>{{ 'tb.rulenode.remove-current-relations' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.remove-current-relations-hint</div> <md-checkbox flex aria-label=\"{{ 'tb.rulenode.change-originator-to-related-entity' | translate }}\" ng-model=configuration.changeOriginatorToRelatedEntity>{{ 'tb.rulenode.change-originator-to-related-entity' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.change-originator-to-related-entity-hint</div> <md-input-container class=md-block> <label translate>tb.rulenode.entity-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=entityCacheExpiration ng-model=configuration.entityCacheExpiration> <div ng-messages=createRelationConfigForm.entityCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.entity-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.entity-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.entity-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section ng-form name=deleteRelationConfigForm layout=column> <md-checkbox aria-label=\"{{ 'tb.rulenode.delete-relation-to-specific-entity' | translate }}\" ng-model=configuration.deleteForSingleEntity> {{ 'tb.rulenode.delete-relation-to-specific-entity' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.delete-relation-hint</div> <md-input-container class=md-block style=min-width:100px;margin-bottom:38px> <label translate>relation.direction</label> <md-select required ng-model=configuration.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <div layout=row class=tb-entity-select ng-if=configuration.deleteForSingleEntity> <md-input-container class=md-block> <tb-entity-type-select style=min-width:100px the-form=deleteRelationConfigForm tb-required=true ng-model=configuration.entityType> </tb-entity-type-select> </md-input-container> <md-input-container class=md-block flex ng-if=configuration.entityType style=margin-top:38px> <label translate>tb.rulenode.entity-name-pattern</label> <input ng-required=true name=entityNamePattern ng-model=configuration.entityNamePattern> <div ng-messages=deleteRelationConfigForm.entityNamePattern.$error> <div ng-message=required translate>tb.rulenode.entity-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.entity-name-pattern-hint</div> </md-input-container> </div> <md-input-container class=md-block flex> <label translate>tb.rulenode.relation-type-pattern</label> <input ng-required=true name=relationType ng-model=configuration.relationType> <div ng-messages=createRelationConfigForm.relationType.$error> <div ng-message=required translate>tb.rulenode.relation-type-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.relation-type-pattern-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.entity-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=entityCacheExpiration ng-model=configuration.entityCacheExpiration> <div ng-messages=deleteRelationConfigForm.entityCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.entity-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.entity-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.entity-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section class=tb-generator-config ng-form name=generatorConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.message-count</label> <input ng-required=true type=number step=1 name=messageCount ng-model=configuration.msgCount min=0> <div ng-messages=generatorConfigForm.messageCount.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.message-count-required</div> <div ng-message=min translate>tb.rulenode.min-message-count-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.period-seconds</label> <input ng-required=true type=number step=1 name=periodInSeconds ng-model=configuration.periodInSeconds min=1> <div ng-messages=generatorConfigForm.periodInSeconds.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.period-seconds-required</div> <div ng-message=min translate>tb.rulenode.min-period-seconds-message</div> </div> </md-input-container> <div layout=column> <label class=tb-small>{{ 'tb.rulenode.originator' | translate }}</label> <tb-entity-select the-form=generatorConfigForm tb-required=false ng-model=originator> </tb-entity-select> </div> <label translate class=\"tb-title no-padding\">tb.rulenode.generate</label> <tb-js-func ng-model=configuration.jsScript function-name=Generate function-args=\"{{ ['prevMsg', 'prevMetadata', 'prevMsgType'] }}\" no-validate=true> </tb-js-func> <div layout=row> <md-button ng-click=testScript($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-generator-function' | translate }} </md-button> </div> </section> "},function(e,t){e.exports=' <section ng-form name=geoActionConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.latitude-key-name</label> <input ng-required=true name=latitudeKeyName ng-model=configuration.latitudeKeyName> <div ng-messages=geoActionConfigForm.latitudeKeyName.$error> <div ng-message=required translate>tb.rulenode.latitude-key-name-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.longitude-key-name</label> <input ng-required=true name=longitudeKeyName ng-model=configuration.longitudeKeyName> <div ng-messages=geoActionConfigForm.longitudeKeyName.$error> <div ng-message=required translate>tb.rulenode.longitude-key-name-required</div> </div> </md-input-container> <md-checkbox flex aria-label="{{ \'tb.rulenode.fetch-perimeter-info-from-message-metadata\' | translate }}" ng-model=configuration.fetchPerimeterInfoFromMessageMetadata>{{ \'tb.rulenode.fetch-perimeter-info-from-message-metadata\' | translate }} </md-checkbox> <div layout=row class=tb-entity-select ng-if="configuration.fetchPerimeterInfoFromMessageMetadata === false"> <md-input-container class=md-block flex=100> <label translate>tb.rulenode.perimeter-type</label> <md-select required ng-model=configuration.perimeterType flex> <md-option ng-repeat="type in ruleNodeTypes.perimeterType" ng-value=type.value> {{ type.name | translate}} </md-option> </md-select> </md-input-container> </div> <div layout=row layout-wrap ng-if="configuration.perimeterType===ruleNodeTypes.perimeterType.CIRCLE.value && configuration.fetchPerimeterInfoFromMessageMetadata === false"> <div layout=column flex=50> <md-input-container class=md-block flex layout=column style=margin-top:44px> <label translate>tb.rulenode.circle-center-latitude</label> <input type=number min=-90 max=90 step=0.1 ng-required=true name=centerLatitude ng-model=configuration.centerLatitude> <div ng-messages=geoActionConfigForm.centerLatitude.$error> <div ng-message=required translate>tb.rulenode.circle-center-latitude-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block flex style=margin-top:44px> <label translate>tb.rulenode.circle-center-longitude</label> <input type=number min=-180 max=180 step=0.1 ng-required=true name=centerLongitude ng-model=configuration.centerLongitude> <div ng-messages=geoActionConfigForm.centerLongitude.$error> <div ng-message=required translate>tb.rulenode.circle-center-longitude-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block style=margin-top:28px> <label translate>tb.rulenode.range</label> <input type=number min=0 step=0.1 ng-required=true name=range ng-model=configuration.range> <div ng-messages=geoActionConfigForm.range.$error> <div ng-message=required translate>tb.rulenode.range-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block style=margin-top:28px> <label translate>tb.rulenode.range-units</label> <md-select required ng-model=configuration.rangeUnit> <md-option ng-repeat="type in ruleNodeTypes.rangeUnit" ng-value=type.value> {{ type.name | translate}} </md-option> </md-select> </md-input-container> </div> </div> <div layout=row layout-wrap ng-if="configuration.perimeterType===ruleNodeTypes.perimeterType.POLYGON.value && configuration.fetchPerimeterInfoFromMessageMetadata === false"> <div layout=column flex=100> <md-input-container class=md-block style=margin-top:44px> <label translate>tb.rulenode.polygon-definition</label> <input ng-required=true name=polygonsDefinition ng-model=configuration.polygonsDefinition> <div ng-messages=geoActionConfigForm.polygonsDefinition.$error> <div ng-message=required translate>tb.rulenode.polygon-definition-required</div> </div> <div class=tb-hint style=margin-top:5px translate>tb.rulenode.polygon-definition-hint</div> </md-input-container> </div> </div> <div layout=column layout-gt-sm=row> <md-input-container flex class="md-block tb-time-value" flex> <label translate class="tb-title no-padding">tb.rulenode.min-inside-duration</label> <input required type=number step=1 min=1 max=2147483647 name=minInsideDuration ng-model=configuration.minInsideDuration> <div ng-messages=geoActionConfigForm.minInsideDuration.$error> <div translate ng-message=required>tb.rulenode.min-inside-duration-value-required</div> <div ng-message=min translate>tb.rulenode.time-value-range</div> <div ng-message=max translate>tb.rulenode.time-value-range</div> </div> </md-input-container> <md-input-container flex class="md-block tb-time-unit" flex> <label translate class="tb-title no-padding">tb.rulenode.min-inside-duration-time-unit</label> <md-select required name=minInsideDurationTimeUnit aria-label="{{ \'tb.rulenode.min-inside-duration-time-unit\' | translate }}" ng-model=configuration.minInsideDurationTimeUnit> <md-option ng-repeat="timeUnit in ruleNodeTypes.timeUnit" ng-value=timeUnit.value> {{timeUnit.name | translate}} </md-option> </md-select> </md-input-container> </div> <div layout=column layout-gt-sm=row> <md-input-container flex class="md-block tb-time-value" flex> <label translate class="tb-title no-padding">tb.rulenode.min-outside-duration</label> <input required type=number step=1 min=1 max=2147483647 name=minOutsideDuration ng-model=configuration.minOutsideDuration> <div ng-messages=geoActionConfigForm.minOutsideDuration.$error> <div translate ng-message=required>tb.rulenode.min-outside-duration-value-required</div> <div ng-message=min translate>tb.rulenode.time-value-range</div> <div ng-message=max translate>tb.rulenode.time-value-range</div> </div> </md-input-container> <md-input-container flex class="md-block tb-time-unit" flex> <label translate class="tb-title no-padding">tb.rulenode.min-outside-duration-time-unit</label> <md-select required name=minOutsideDurationTimeUnit aria-label="{{ \'tb.rulenode.min-outside-duration-time-unit\' | translate }}" ng-model=configuration.minOutsideDurationTimeUnit> <md-option ng-repeat="timeUnit in ruleNodeTypes.timeUnit" ng-value=timeUnit.value> {{timeUnit.name | translate}} </md-option> </md-select> </md-input-container> </div> </section> '},function(e,t){e.exports=' <section ng-form name=kafkaConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.topic-pattern</label> <input ng-required=true name=topicPattern ng-model=configuration.topicPattern> <div ng-messages=kafkaConfigForm.topicPattern.$error> <div ng-message=required translate>tb.rulenode.topic-pattern-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.bootstrap-servers</label> <input ng-required=true name=bootstrapServers ng-model=configuration.bootstrapServers> <div ng-messages=kafkaConfigForm.bootstrapServers.$error> <div ng-message=required translate>tb.rulenode.bootstrap-servers-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.retries</label> <input type=number step=1 name=retries ng-model=configuration.retries min=0> <div ng-messages=kafkaConfigForm.retries.$error> <div ng-message=min translate>tb.rulenode.min-retries-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.batch-size-bytes</label> <input type=number step=1 name=batchSize ng-model=configuration.batchSize min=0> <div ng-messages=kafkaConfigForm.batchSize.$error> <div ng-message=min translate>tb.rulenode.min-batch-size-bytes-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.linger-ms</label> <input type=number step=1 name=linger ng-model=configuration.linger min=0> <div ng-messages=kafkaConfigForm.linger.$error> <div ng-message=min translate>tb.rulenode.min-linger-ms-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.buffer-memory-bytes</label> <input type=number step=1 name=bufferMemory ng-model=configuration.bufferMemory min=0> <div ng-messages=kafkaConfigForm.bufferMemory.$error> <div ng-message=min translate>tb.rulenode.min-buffer-memory-bytes-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.acks</label> <md-select ng-model=configuration.acks ng-disabled=$root.loading> <md-option ng-repeat="ackValue in ackValues" ng-value=ackValue> {{ ackValue }} </md-option> </md-select> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.key-serializer</label> <input ng-required=true name=keySerializer ng-model=configuration.keySerializer> <div ng-messages=kafkaConfigForm.keySerializer.$error> <div ng-message=required translate>tb.rulenode.key-serializer-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.value-serializer</label> <input ng-required=true name=valueSerializer ng-model=configuration.valueSerializer> <div ng-messages=kafkaConfigForm.valueSerializer.$error> <div ng-message=required translate>tb.rulenode.value-serializer-required</div> </div> </md-input-container> <label translate class=tb-title>tb.rulenode.other-properties</label> <tb-kv-map-config ng-model=configuration.otherProperties ng-required=false key-text="\'tb.rulenode.key\'" key-required-text="\'tb.rulenode.key-required\'" val-text="\'tb.rulenode.value\'" val-required-text="\'tb.rulenode.value-required\'"> </tb-kv-map-config> <md-checkbox flex style=margin-top:18px aria-label="{{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }}" ng-model=configuration.addMetadataKeyValuesAsKafkaHeaders>{{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.add-metadata-key-values-as-kafka-headers-hint</div> <md-input-container flex class=md-block flex ng-if="configuration.addMetadataKeyValuesAsKafkaHeaders == true"> <label translate class=tb-title>tb.rulenode.charset-encoding</label> <md-select required name=addMetadataKeyValuesAsKafkaHeaders aria-label="{{ \'tb.rulenode.charset-encoding\' | translate }}" ng-model=configuration.kafkaHeadersCharset> <md-option ng-repeat="charset in ruleNodeTypes.toBytesStandartCharsetTypes" ng-value=charset.value> {{charset.name | translate}} </md-option> </md-select> </md-input-container> </section> ';
2 2 },function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.to-string</label> <tb-js-func ng-model=configuration.jsScript function-name=ToString function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row> <md-button ng-click=testScript($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-to-string-function' | translate }} </md-button> </div> </section> "},function(e,t){e.exports=' <section class=tb-mqtt-config ng-form name=mqttConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.topic-pattern</label> <input ng-required=true name=topicPattern ng-model=configuration.topicPattern> <div ng-messages=mqttConfigForm.topicPattern.$error> <div translate ng-message=required>tb.rulenode.topic-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.mqtt-topic-pattern-hint</div> </md-input-container> <div flex layout=column layout-gt-sm=row> <md-input-container flex=60 class=md-block> <label translate>tb.rulenode.host</label> <input ng-required=true name=host ng-model=configuration.host> <div ng-messages=mqttConfigForm.host.$error> <div translate ng-message=required>tb.rulenode.host-required</div> </div> </md-input-container> <md-input-container flex=40 class=md-block> <label translate>tb.rulenode.port</label> <input type=number step=1 min=1 max=65535 ng-required=true name=port ng-model=configuration.port> <div ng-messages=mqttConfigForm.port.$error> <div translate ng-message=required>tb.rulenode.port-required</div> <div translate ng-message=min>tb.rulenode.port-range</div> <div translate ng-message=max>tb.rulenode.port-range</div> </div> </md-input-container> <md-input-container flex=40 class=md-block> <label translate>tb.rulenode.connect-timeout</label> <input type=number step=1 min=1 max=200 ng-required=true name=connectTimeoutSec ng-model=configuration.connectTimeoutSec> <div ng-messages=mqttConfigForm.connectTimeoutSec.$error> <div translate ng-message=required>tb.rulenode.connect-timeout-required</div> <div translate ng-message=min>tb.rulenode.connect-timeout-range</div> <div translate ng-message=max>tb.rulenode.connect-timeout-range</div> </div> </md-input-container> </div> <md-input-container class=md-block> <label translate>tb.rulenode.client-id</label> <input name=clientId ng-model=configuration.clientId> </md-input-container> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.clean-session\' | translate }}" ng-model=configuration.cleanSession> {{ \'tb.rulenode.clean-session\' | translate }} </md-checkbox> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.enable-ssl\' | translate }}" ng-model=configuration.ssl> {{ \'tb.rulenode.enable-ssl\' | translate }} </md-checkbox> <md-expansion-panel-group class=tb-credentials-panel-group ng-class="{\'disabled\': $root.loading || readonly}" md-component-id=credentialsPanelGroup> <md-expansion-panel md-component-id=credentialsPanel> <md-expansion-panel-collapsed> <div class=tb-panel-title>{{ \'tb.rulenode.credentials\' | translate }}</div> <div class=tb-panel-prompt>{{ ruleNodeTypes.mqttCredentialTypes[configuration.credentials.type].name | translate }}</div> <span flex></span> <md-expansion-panel-icon></md-expansion-panel-icon> </md-expansion-panel-collapsed> <md-expansion-panel-expanded> <md-expansion-panel-header ng-click="$mdExpansionPanel(\'credentialsPanel\').collapse()"> <div class=tb-panel-title>{{ \'tb.rulenode.credentials\' | translate }}</div> <div class=tb-panel-prompt>{{ ruleNodeTypes.mqttCredentialTypes[configuration.credentials.type].name | translate }}</div> <span flex></span> <md-expansion-panel-icon></md-expansion-panel-icon> </md-expansion-panel-header> <md-expansion-panel-content> <div layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.credentials-type</label> <md-select ng-required=true name=credentialsType ng-model=configuration.credentials.type ng-disabled="$root.loading || readonly" ng-change=credentialsTypeChanged()> <md-option ng-repeat="(credentialsType, credentialsValue) in ruleNodeTypes.mqttCredentialTypes" ng-value=credentialsValue.value> {{credentialsValue.name | translate}} </md-option> </md-select> <div ng-messages=mqttConfigForm.credentialsType.$error> <div translate ng-message=required>tb.rulenode.credentials-type-required</div> </div> </md-input-container> <section flex layout=column ng-if="configuration.credentials.type == ruleNodeTypes.mqttCredentialTypes.basic.value"> <md-input-container class=md-block> <label translate>tb.rulenode.username</label> <input ng-required=true name=mqttUsername ng-model=configuration.credentials.username> <div ng-messages=mqttConfigForm.mqttUsername.$error> <div translate ng-message=required>tb.rulenode.username-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.password</label> <input type=password ng-required=true name=mqttPassword ng-model=configuration.credentials.password> <div ng-messages=mqttConfigForm.mqttPassword.$error> <div translate ng-message=required>tb.rulenode.password-required</div> </div> </md-input-container> </section> <section flex layout=column ng-if="configuration.credentials.type == ruleNodeTypes.mqttCredentialTypes[\'cert.PEM\'].value" class=dropdown-section> <div class=tb-container ng-class="configuration.credentials.caCertFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.ca-cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'caCert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'caCert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=caCertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=caCertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.caCertFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.caCertFileName>{{configuration.credentials.caCertFileName}}</div> </div> <div class=tb-container ng-class="configuration.credentials.certFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.cert</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'Cert\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'Cert\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=CertSelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=CertSelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.certFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.certFileName>{{configuration.credentials.certFileName}}</div> </div> <div class=tb-container ng-class="configuration.credentials.privateKeyFileName ? \'ng-valid\' : \'ng-invalid\'"> <label class=tb-label translate>tb.rulenode.private-key</label> <div flow-init={singleFile:true} flow-file-added="certFileAdded($file, \'privateKey\')" class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click="clearCertFile(\'privateKey\')" class="tb-file-clear-btn md-icon-button md-primary" aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'action.remove\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.remove\' | translate }}" class=material-icons>close</md-icon> </md-button> </div> <div class="alert tb-flow-drop" flow-drop> <label for=privateKeySelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=privateKeySelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.credentials.privateKeyFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.credentials.privateKeyFileName>{{configuration.credentials.privateKeyFileName}}</div> </div> <md-input-container class=md-block> <label translate>tb.rulenode.private-key-password</label> <input type=password name=privateKeyPassword ng-model=configuration.credentials.password> </md-input-container> </section> </div> </md-expansion-panel-content> </md-expansion-panel-expanded> </md-expansion-panel> </md-expansion-panel-group> </section>'},function(e,t){e.exports=" <section ng-form name=msgCountConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.interval-seconds</label> <input ng-required=true type=number step=1 name=interval ng-model=configuration.interval min=1> <div ng-messages=msgCountConfigForm.interval.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.interval-seconds-required</div> <div ng-message=min translate>tb.rulenode.min-interval-seconds-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.output-timeseries-key-prefix</label> <input ng-required=true name=telemetryPrefix ng-model=configuration.telemetryPrefix> <div ng-messages=msgCountConfigForm.telemetryPrefix.$error> <div translate ng-message=required>tb.rulenode.output-timeseries-key-prefix-required</div> </div> </md-input-container> </section> "},function(e,t){e.exports=' <section ng-form name=msgDelayConfigForm layout=column> <md-checkbox aria-label="{{ \'tb.rulenode.use-metadata-period-in-seconds-patterns\' | translate }}" ng-model=configuration.useMetadataPeriodInSecondsPatterns>{{ \'tb.rulenode.use-metadata-period-in-seconds-patterns\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.use-metadata-period-in-seconds-patterns-hint</div> <md-input-container class=md-block ng-if="configuration.useMetadataPeriodInSecondsPatterns === undefined || configuration.useMetadataPeriodInSecondsPatterns == false"> <label translate>tb.rulenode.period-seconds</label> <input ng-required=true type=number step=1 name=periodInSeconds ng-model=configuration.periodInSeconds min=0> <div ng-messages=msgDelayConfigForm.periodInSeconds.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.period-seconds-required</div> <div ng-message=min translate>tb.rulenode.min-period-0-seconds-message</div> </div> </md-input-container> <md-input-container class=md-block flex ng-if="configuration.useMetadataPeriodInSecondsPatterns === true"> <label translate>tb.rulenode.period-in-seconds-pattern</label> <input ng-required=true name=periodInSecondsPattern ng-model=configuration.periodInSecondsPattern> <div ng-messages=msgDelayConfigForm.periodInSecondsPattern.$error> <div ng-message=required translate>tb.rulenode.period-in-seconds-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.period-in-seconds-pattern-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.max-pending-messages</label> <input ng-required=true type=number step=1 name=maxPendingMsgs ng-model=configuration.maxPendingMsgs min=1 max=100000> <div ng-messages=msgDelayConfigForm.maxPendingMsgs.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.max-pending-messages-required</div> <div ng-message=min translate>tb.rulenode.max-pending-messages-range</div> <div ng-message=max translate>tb.rulenode.max-pending-messages-range</div> </div> </md-input-container> </section> '},function(e,t){e.exports=" <section ng-form name=pubsubConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.gcp-project-id</label> <input ng-required=true name=projectId ng-model=configuration.projectId> <div ng-messages=pubsubConfigForm.projectId.$error> <div ng-message=required translate>tb.rulenode.gcp-project-id-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.pubsub-topic-name</label> <input ng-required=true name=topicName ng-model=configuration.topicName> <div ng-messages=pubsubConfigForm.topicName.$error> <div ng-message=required translate>tb.rulenode.pubsub-topic-name-required</div> </div> </md-input-container> <div class=tb-container ng-class=\"configuration.serviceAccountKeyFileName ? 'ng-valid' : 'ng-invalid'\"> <label class=tb-label translate>tb.rulenode.gcp-service-account-key</label> <div flow-init={singleFile:true} flow-file-added=serviceAccountFileAdded($file) class=tb-file-select-container> <div class=tb-file-clear-container> <md-button ng-click=clearServiceAccountFile() class=\"tb-file-clear-btn md-icon-button md-primary\" aria-label=\"{{ 'action.remove' | translate }}\"> <md-tooltip md-direction=top> {{ 'action.remove' | translate }} </md-tooltip> <md-icon aria-label=\"{{ 'action.remove' | translate }}\" class=material-icons>close</md-icon> </md-button> </div> <div class=\"alert tb-flow-drop\" flow-drop> <label for=serviceAccountKeySelect translate>tb.rulenode.drop-file</label> <input class=file-input flow-btn id=serviceAccountKeySelect> </div> </div> </div> <div class=dropdown-messages> <div ng-if=!configuration.serviceAccountKeyFileName class=tb-error-message translate>tb.rulenode.no-file</div> <div ng-if=configuration.serviceAccountKeyFileName>{{configuration.serviceAccountKeyFileName}}</div> </div> <label translate class=tb-title>tb.rulenode.message-attributes</label> <div class=tb-hint translate>tb.rulenode.message-attributes-hint</div> <tb-kv-map-config ng-model=configuration.messageAttributes ng-required=false key-text=\"'tb.rulenode.name'\" key-required-text=\"'tb.rulenode.name-required'\" val-text=\"'tb.rulenode.value'\" val-required-text=\"'tb.rulenode.value-required'\"> </tb-kv-map-config> </section> "},function(e,t){e.exports=' <section ng-form name=rabbitMqConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.exchange-name-pattern</label> <input name=exchangeNamePattern ng-model=configuration.exchangeNamePattern> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.routing-key-pattern</label> <input name=routingKeyPattern ng-model=configuration.routingKeyPattern> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.message-properties</label> <md-select ng-model=configuration.messageProperties ng-disabled="$root.loading || readonly"> <md-option ng-repeat="property in messageProperties" ng-value=property> {{ property }} </md-option> </md-select> </md-input-container> <div layout-gt-sm=row> <md-input-container class=md-block flex=100 flex-gt-sm=60> <label translate>tb.rulenode.host</label> <input ng-required=true name=host ng-model=configuration.host> <div ng-messages=rabbitMqConfigForm.host.$error> <div ng-message=required translate>tb.rulenode.host-required</div> </div> </md-input-container> <md-input-container class=md-block flex=100 flex-gt-sm=40> <label translate>tb.rulenode.port</label> <input ng-required=true type=number step=1 name=port ng-model=configuration.port min=0 max=65535> <div ng-messages=rabbitMqConfigForm.port.$error> <div ng-message=required translate>tb.rulenode.port-required</div> <div ng-message=min translate>tb.rulenode.port-range</div> <div ng-message=max translate>tb.rulenode.port-range</div> </div> </md-input-container> </div> <md-input-container class=md-block> <label translate>tb.rulenode.virtual-host</label> <input name=virtualHost ng-model=configuration.virtualHost> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.username</label> <input name=virtualHost ng-model=configuration.username> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.password</label> <input name=virtualHost type=password ng-model=configuration.password> </md-input-container> <md-input-container class=md-block> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.automatic-recovery\' | translate }}" ng-model=ruleNode.automaticRecoveryEnabled>{{ \'tb.rulenode.automatic-recovery\' | translate }} </md-checkbox> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.connection-timeout-ms</label> <input type=number step=1 name=connectionTimeout ng-model=configuration.connectionTimeout min=0> <div ng-messages=rabbitMqConfigForm.connectionTimeout.$error> <div ng-message=min translate>tb.rulenode.min-connection-timeout-ms-message</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.handshake-timeout-ms</label> <input type=number step=1 name=handshakeTimeout ng-model=configuration.handshakeTimeout min=0> <div ng-messages=rabbitMqConfigForm.handshakeTimeout.$error> <div ng-message=min translate>tb.rulenode.min-handshake-timeout-ms-message</div> </div> </md-input-container> <label translate class=tb-title>tb.rulenode.client-properties</label> <tb-kv-map-config ng-model=configuration.clientProperties ng-required=false key-text="\'tb.rulenode.key\'" key-required-text="\'tb.rulenode.key-required\'" val-text="\'tb.rulenode.value\'" val-required-text="\'tb.rulenode.value-required\'"> </tb-kv-map-config> </section> '},function(e,t){e.exports=' <section ng-form name=restApiCallConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.endpoint-url-pattern</label> <input required name=endpointUrlPattern ng-model=configuration.restEndpointUrlPattern> <div ng-messages=restApiCallConfigForm.endpointUrlPattern.$error> <div ng-message=required translate>tb.rulenode.endpoint-url-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.endpoint-url-pattern-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.request-method</label> <md-select ng-model=configuration.requestMethod ng-disabled=$root.loading> <md-option ng-repeat="type in ruleNodeTypes.httpRequestType" ng-value=type> {{ type }} </md-option> </md-select> </md-input-container> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.enable-proxy\' | translate }}" ng-model=configuration.enableProxy> {{ \'tb.rulenode.enable-proxy\' | translate }} </md-checkbox> <md-checkbox ng-disabled="$root.loading || readonly" ng-if=!configuration.enableProxy aria-label="{{ \'tb.rulenode.use-simple-client-http-factory\' | translate }}" ng-model=configuration.useSimpleClientHttpFactory> {{ \'tb.rulenode.use-simple-client-http-factory\' | translate }} </md-checkbox> <div ng-if=configuration.enableProxy> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.use-system-proxy-properties\' | translate }}" ng-model=configuration.useSystemProxyProperties> {{ \'tb.rulenode.use-system-proxy-properties\' | translate }} </md-checkbox> <div ng-if=!configuration.useSystemProxyProperties> <div layout-gt-sm=row> <md-input-container class=md-block flex=100 flex-gt-sm=10> <label translate>tb.rulenode.proxy-scheme</label> <md-select ng-disabled="$root.loading || readonly" ng-model=configuration.proxyScheme> <md-option ng-repeat="proxyScheme in proxySchemes" value={{proxyScheme}}> {{proxyScheme}} </md-option> </md-select> </md-input-container> <md-input-container class=md-block flex=100 flex-gt-sm=50> <label translate>tb.rulenode.proxy-host</label> <input required name=proxyHost ng-model=configuration.proxyHost> <div ng-messages=restApiCallConfigForm.proxyHost.$error> <div translate ng-message=required>tb.rulenode.proxy-host-required</div> </div> </md-input-container> <md-input-container class=md-block flex=100 flex-gt-sm=40> <label translate>tb.rulenode.proxy-port</label> <input type=number step=1 min=1 max=65535 required name=proxyPort ng-model=configuration.proxyPort> <div ng-messages=restApiCallConfigForm.proxyPort.$error> <div translate ng-message=required>tb.rulenode.proxy-port-required</div> <div translate ng-message=min>tb.rulenode.proxy-port-range</div> <div translate ng-message=max>tb.rulenode.proxy-port-range</div> </div> </md-input-container> </div> <md-input-container class=md-block> <label translate>tb.rulenode.proxy-user</label> <input name=proxyUser ng-model=configuration.proxyUser> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.proxy-password</label> <input name=proxyPassword ng-model=configuration.proxyPassword> </md-input-container> </div> </div> <md-input-container flex ng-if="!configuration.useSimpleClientHttpFactory || configuration.enableProxy"> <label translate>tb.rulenode.read-timeout</label> <input type=number step=1 ng-model=configuration.readTimeoutMs min=0> <div class=tb-hint translate>tb.rulenode.read-timeout-hint</div> </md-input-container> <md-input-container> <label translate>tb.rulenode.max-parallel-requests-count</label> <input type=number step=1 ng-model=configuration.maxParallelRequestsCount min=0> <div class=tb-hint translate>tb.rulenode.max-parallel-requests-count-hint</div> </md-input-container> <label translate class=tb-title>tb.rulenode.headers</label> <div class=tb-hint translate>tb.rulenode.headers-hint</div> <tb-kv-map-config ng-model=configuration.headers ng-required=false key-text="\'tb.rulenode.header\'" key-required-text="\'tb.rulenode.header-required\'" val-text="\'tb.rulenode.value\'" val-required-text="\'tb.rulenode.value-required\'"> </tb-kv-map-config> <md-checkbox style=line-height:50px ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.use-redis-queue\' | translate }}" ng-model=configuration.useRedisQueueForMsgPersistence> {{ \'tb.rulenode.use-redis-queue\' | translate }} </md-checkbox> <div layout=column ng-if=configuration.useRedisQueueForMsgPersistence> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.trim-redis-queue\' | translate }}" ng-model=configuration.trimQueue> {{ \'tb.rulenode.trim-redis-queue\' | translate }} </md-checkbox> <md-input-container class=md-block> <label translate>tb.rulenode.redis-queue-max-size</label> <input type=number step=1 name=redisQueueMaxSize ng-model=configuration.maxQueueSize min=0> </md-input-container> </div> </section> '},function(e,t){e.exports=" <section ng-form name=rpcReplyConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.request-id-metadata-attribute</label> <input name=requestIdMetaDataAttribute ng-model=configuration.requestIdMetaDataAttribute> </md-input-container> </section> "},function(e,t){e.exports=" <section ng-form name=rpcRequestConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.timeout-sec</label> <input ng-required=true type=number step=1 name=timeoutInSeconds ng-model=configuration.timeoutInSeconds min=0> <div ng-messages=rpcRequestConfigForm.timeoutInSeconds.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.timeout-required</div> <div ng-message=min translate>tb.rulenode.min-timeout-message</div> </div> </md-input-container> </section> "},function(e,t){e.exports=' <section layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.custom-table-name</label> <input ng-required=true name=tableName ng-model=configuration.tableName> <div ng-messages=saveToCustomTableConfigForm.tableName.$error> <div ng-message=required translate>tb.rulenode.custom-table-name-required</div> </div> <div class=tb-hint style=margin-top:5px translate>tb.rulenode.custom-table-hint</div> </md-input-container> <label translate class="tb-title tb-required">tb.rulenode.fields-mapping</label> <tb-kv-map-config ng-model=configuration.fieldsMapping ng-required=true required-text="\'tb.rulenode.fields-mapping-required\'" key-text="\'tb.rulenode.message-field\'" key-required-text="\'tb.rulenode.message-field-required\'" val-text="\'tb.rulenode.table-col\'" val-required-text="\'tb.rulenode.table-col-required\'"> </tb-kv-map-config> </section> '},function(e,t){e.exports=' <section ng-form name=sendEmailConfigForm layout=column> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.use-system-smtp-settings\' | translate }}" ng-model=configuration.useSystemSmtpSettings> {{ \'tb.rulenode.use-system-smtp-settings\' | translate }} </md-checkbox> <section layout=column ng-if=!configuration.useSystemSmtpSettings> <md-input-container class=md-block> <label translate>tb.rulenode.smtp-protocol</label> <md-select ng-disabled="$root.loading || readonly" ng-model=configuration.smtpProtocol> <md-option ng-repeat="smtpProtocol in smtpProtocols" value={{smtpProtocol}}> {{smtpProtocol.toUpperCase()}} </md-option> </md-select> </md-input-container> <div layout-gt-sm=row> <md-input-container class=md-block flex=100 flex-gt-sm=60> <label translate>tb.rulenode.smtp-host</label> <input ng-required=true name=smtpHost ng-model=configuration.smtpHost> <div ng-messages=sendEmailConfigForm.smtpHost.$error> <div translate ng-message=required>tb.rulenode.smtp-host-required</div> </div> </md-input-container> <md-input-container class=md-block flex=100 flex-gt-sm=40> <label translate>tb.rulenode.smtp-port</label> <input type=number step=1 min=1 max=65535 ng-required=true name=port ng-model=configuration.smtpPort> <div ng-messages=sendEmailConfigForm.port.$error> <div translate ng-message=required>tb.rulenode.smtp-port-required</div> <div translate ng-message=min>tb.rulenode.smtp-port-range</div> <div translate ng-message=max>tb.rulenode.smtp-port-range</div> </div> </md-input-container> </div> <md-input-container class=md-block> <label translate>tb.rulenode.timeout-msec</label> <input type=number step=1 min=0 ng-required=true name=timeout ng-model=configuration.timeout> <div ng-messages=sendEmailConfigForm.timeout.$error> <div translate ng-message=required>tb.rulenode.timeout-required</div> <div translate ng-message=min>tb.rulenode.min-timeout-msec-message</div> </div> </md-input-container> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.enable-tls\' | translate }}" ng-model=configuration.enableTls>{{ \'tb.rulenode.enable-tls\' | translate }}</md-checkbox> <md-input-container class=md-block ng-if=configuration.enableTls> <label translate>tb.rulenode.tls-version</label> <md-select ng-disabled="$root.loading || readonly" ng-model=configuration.tlsVersion> <md-option ng-repeat="tlsVersion in tlsVersions" value={{tlsVersion}}> {{tlsVersion}} </md-option> </md-select> </md-input-container> <md-checkbox ng-disabled="$root.loading || readonly" aria-label="{{ \'tb.rulenode.enable-proxy\' | translate }}" ng-model=configuration.enableProxy>{{ \'tb.rulenode.enable-proxy\' | translate }}</md-checkbox> <div layout-gt-sm=row ng-if=configuration.enableProxy> <md-input-container class=md-block flex=100 flex-gt-sm=60> <label translate>tb.rulenode.proxy-host</label> <input ng-required=true name=proxyHost ng-model=configuration.proxyHost> <div ng-messages=sendEmailConfigForm.proxyHost.$error> <div translate ng-message=required>tb.rulenode.proxy-host-required</div> </div> </md-input-container> <md-input-container class=md-block flex=100 flex-gt-sm=40> <label translate>tb.rulenode.proxy-port</label> <input type=number step=1 min=1 max=65535 ng-required=true name=proxyPort ng-model=configuration.proxyPort> <div ng-messages=sendEmailConfigForm.proxyPort.$error> <div translate ng-message=required>tb.rulenode.proxy-port-required</div> <div translate ng-message=min>tb.rulenode.proxy-port-range</div> <div translate ng-message=max>tb.rulenode.proxy-port-range</div> </div> </md-input-container> </div> <md-input-container class=md-block ng-if=configuration.enableProxy> <label translate>tb.rulenode.proxy-user</label> <input name=proxyUser ng-model=configuration.proxyUser> </md-input-container> <md-input-container class=md-block ng-if=configuration.enableProxy> <label translate>tb.rulenode.proxy-password</label> <input name=proxyPassword ng-model=configuration.proxyPassword> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.username</label> <input name=username placeholder="{{ \'tb.rulenode.enter-username\' | translate }}" ng-model=configuration.username> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.password</label> <input name=password placeholder="{{ \'tb.rulenode.enter-password\' | translate }}" type=password ng-model=configuration.password> </md-input-container> </section> </section> '},function(e,t){e.exports=" <section ng-form name=snsConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.topic-arn-pattern</label> <input ng-required=true name=topicArnPattern ng-model=configuration.topicArnPattern> <div ng-messages=snsConfigForm.topicArnPattern.$error> <div ng-message=required translate>tb.rulenode.topic-arn-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.topic-arn-pattern-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.aws-access-key-id</label> <input ng-required=true name=accessKeyId ng-model=configuration.accessKeyId> <div ng-messages=snsConfigForm.accessKeyId.$error> <div ng-message=required translate>tb.rulenode.aws-access-key-id-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.aws-secret-access-key</label> <input ng-required=true name=secretAccessKey ng-model=configuration.secretAccessKey> <div ng-messages=snsConfigForm.secretAccessKey.$error> <div ng-message=required translate>tb.rulenode.aws-secret-access-key-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.aws-region</label> <input ng-required=true name=region ng-model=configuration.region> <div ng-messages=snsConfigForm.region.$error> <div ng-message=required translate>tb.rulenode.aws-region-required</div> </div> </md-input-container> </section> "},function(e,t){e.exports=' <section ng-form name=sqsConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.queue-type</label> <md-select ng-model=configuration.queueType ng-disabled="$root.loading || readonly"> <md-option ng-repeat="type in ruleNodeTypes.sqsQueueType" ng-value=type.value> {{ type.name | translate }} </md-option> </md-select> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.queue-url-pattern</label> <input ng-required=true name=queueUrlPattern ng-model=configuration.queueUrlPattern> <div ng-messages=sqsConfigForm.queueUrlPattern.$error> <div ng-message=required translate>tb.rulenode.queue-url-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.queue-url-pattern-hint</div> </md-input-container> <md-input-container class=md-block ng-if="configuration.queueType == ruleNodeTypes.sqsQueueType.STANDARD.value"> <label translate>tb.rulenode.delay-seconds</label> <input type=number step=1 name=delaySeconds ng-model=configuration.delaySeconds min=0 max=900> <div ng-messages=sqsConfigForm.delaySeconds.$error> <div ng-message=min translate>tb.rulenode.min-delay-seconds-message</div> <div ng-message=max translate>tb.rulenode.max-delay-seconds-message</div> </div> </md-input-container> <label translate class=tb-title>tb.rulenode.message-attributes</label> <div class=tb-hint translate>tb.rulenode.message-attributes-hint</div> <tb-kv-map-config ng-model=configuration.messageAttributes ng-required=false key-text="\'tb.rulenode.name\'" key-required-text="\'tb.rulenode.name-required\'" val-text="\'tb.rulenode.value\'" val-required-text="\'tb.rulenode.value-required\'"> </tb-kv-map-config> <md-input-container class=md-block> <label translate>tb.rulenode.aws-access-key-id</label> <input ng-required=true name=accessKeyId ng-model=configuration.accessKeyId> <div ng-messages=snsConfigForm.accessKeyId.$error> <div ng-message=required translate>tb.rulenode.aws-access-key-id-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.aws-secret-access-key</label> <input ng-required=true name=secretAccessKey ng-model=configuration.secretAccessKey> <div ng-messages=snsConfigForm.secretAccessKey.$error> <div ng-message=required translate>tb.rulenode.aws-secret-access-key-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.aws-region</label> <input ng-required=true name=region ng-model=configuration.region> <div ng-messages=snsConfigForm.region.$error> <div ng-message=required translate>tb.rulenode.aws-region-required</div> </div> </md-input-container> </section> ';
3 3 },function(e,t){e.exports=" <section ng-form name=timeseriesConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.default-ttl</label> <input ng-required=true type=number step=1 name=defaultTTL ng-model=configuration.defaultTTL min=0> <div ng-messages=timeseriesConfigForm.defaultTTL.$error multiple=multiple md-auto-hide=false> <div ng-message=required translate>tb.rulenode.default-ttl-required</div> <div ng-message=min translate>tb.rulenode.min-default-ttl-message</div> </div> </md-input-container> </section> "},function(e,t){e.exports=" <section ng-form name=unAssignCustomerConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.customer-name-pattern</label> <input ng-required=true name=customerNamePattern ng-model=configuration.customerNamePattern> <div ng-messages=unAssignCustomerConfigForm.customerNamePattern.$error> <div ng-message=required translate>tb.rulenode.customer-name-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.customer-name-pattern-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.customer-cache-expiration</label> <input type=number step=1 min=0 ng-required=true name=customerCacheExpiration ng-model=configuration.customerCacheExpiration> <div ng-messages=unAssignCustomerConfigForm.customerCacheExpiration.$error> <div translate ng-message=required>tb.rulenode.customer-cache-expiration-required</div> <div translate ng-message=min>tb.rulenode.customer-cache-expiration-range</div> </div> <div class=tb-hint translate>tb.rulenode.customer-cache-expiration-hint</div> </md-input-container> </section> "},function(e,t){e.exports=" <section layout=column> <md-checkbox ng-model=query.fetchLastLevelOnly aria-label=\"{{ 'alias.last-level-relation' | translate}}\"> {{ 'alias.last-level-relation' | translate}} </md-checkbox> <div layout=row> <md-input-container class=md-block style=min-width:100px> <label translate>relation.direction</label> <md-select required ng-model=query.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.max-relation-level</label> <input name=maxRelationLevel type=number min=1 step=1 placeholder=\"{{ 'tb.rulenode.unlimited-level' | translate }}\" ng-model=query.maxLevel aria-label=\"{{ 'tb.rulenode.max-relation-level' | translate }}\"> </md-input-container> </div> <div class=md-caption style=color:rgba(0,0,0,.57) translate>relation.relation-type</div> <tb-relation-type-autocomplete flex hide-label ng-model=query.relationType tb-required=false> </tb-relation-type-autocomplete> <div class=\"md-caption tb-required\" style=color:rgba(0,0,0,.57) translate>device.device-types</div> <tb-entity-subtype-list tb-required=true entity-type=types.entityType.device ng-model=query.deviceTypes> </tb-entity-subtype-list> </section> "},function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title tb-required\">tb.rulenode.attr-mapping</label> <md-checkbox aria-label=\"{{ 'tb.rulenode.latest-telemetry' | translate }}\" ng-model=configuration.telemetry>{{ 'tb.rulenode.latest-telemetry' | translate }} </md-checkbox> <tb-kv-map-config ng-model=configuration.attrMapping ng-required=true required-text=\"'tb.rulenode.attr-mapping-required'\" key-text=\"configuration.telemetry ? 'tb.rulenode.source-telemetry' : 'tb.rulenode.source-attribute'\" key-required-text=\"configuration.telemetry ? 'tb.rulenode.source-telemetry-required' : 'tb.rulenode.source-attribute-required'\" val-text=\"'tb.rulenode.target-attribute'\" val-required-text=\"'tb.rulenode.target-attribute-required'\"> </tb-kv-map-config> </section> "},function(e,t){e.exports=' <section layout=column> <label translate class="tb-title tb-required">tb.rulenode.device-relations-query</label> <tb-device-relations-query-config style=padding-bottom:15px ng-model=configuration.deviceRelationsQuery> </tb-device-relations-query-config> <md-checkbox aria-label="{{ \'tb.rulenode.tell-failure-if-absent\' | translate }}" ng-model=configuration.tellFailureIfAbsent> {{ \'tb.rulenode.tell-failure-if-absent\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.tell-failure-if-absent-hint</div> <label translate class="tb-title no-padding">tb.rulenode.client-attributes</label> <md-chips style=padding-bottom:15px ng-required=false readonly=readonly ng-model=configuration.clientAttributeNames placeholder="{{\'tb.rulenode.client-attributes\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <label translate class="tb-title no-padding">tb.rulenode.shared-attributes</label> <md-chips style=padding-bottom:15px ng-required=false readonly=readonly ng-model=configuration.sharedAttributeNames placeholder="{{\'tb.rulenode.shared-attributes\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <label translate class="tb-title no-padding">tb.rulenode.server-attributes</label> <md-chips style=padding-bottom:15px ng-required=false readonly=readonly ng-model=configuration.serverAttributeNames placeholder="{{\'tb.rulenode.server-attributes\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <label translate class="tb-title no-padding">tb.rulenode.latest-timeseries</label> <md-chips ng-required=false readonly=readonly ng-model=configuration.latestTsKeyNames placeholder="{{\'tb.rulenode.latest-timeseries\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <div style=margin-top:20px> <md-checkbox aria-label="{{ \'tb.rulenode.get-latest-value-with-ts\' | translate }}" ng-model=configuration.getLatestValueWithTs> {{ \'tb.rulenode.get-latest-value-with-ts\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.get-latest-value-with-ts-hint</div> </div> </section> '},function(e,t){e.exports=' <section layout=column> <label translate class="tb-title no-padding" class=required>tb.rulenode.entity-details</label> <md-chips readonly=disabled style=margin-bottom:28px id=entityDetailsListChips ng-required=tbRequired ng-model=configuration.detailsList placeholder={{placeholder}} secondary-placeholder={{secondaryPlaceholder}} md-autocomplete-snap md-require-match=true> <md-autocomplete md-no-cache=true id=entityDetails md-selected-item=selectedEntityDetail md-selected-item-change=selectedItemChange(item) md-search-text=entityDetailsSearchText md-items="item in entityDetailsList" md-item-text=item md-min-length=0 placeholder="{{ (!ruleNodeTypes.entityDetails || !ruleNodeTypes.entityDetails.length) ? placeholder : secondaryPlaceholder }}"> <md-item-template> <span md-highlight-text=entityDetailsSearchText md-highlight-flags=^i> {{\'tb.rulenode.entity-details-\'+item.toLowerCase() | translate}} </span> </md-item-template> <md-not-found> <span translate translate-values="{ entityDetails: entityDetailsSearchText }">tb.rulenode.no-entity-details-matching</span> </md-not-found> </md-autocomplete> <md-chip-template> <span> <strong>{{\'tb.rulenode.entity-details-\'+$chip.toLowerCase() | translate}}</strong> </span> </md-chip-template> </md-chips> <div class=tb-error-messages ng-messages=ngModelCtrl.$error ng-if="inputTouched && tbRequired" role=alert> <div translate ng-message=configuration.detailsList class=tb-error-message>tb.rulenode.entity-details-list-empty</div> </div> <md-checkbox aria-label="{{ \'tb.rulenode.add-to-metadata\' | translate }}" ng-model=configuration.addToMetadata> {{ \'tb.rulenode.add-to-metadata\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.add-to-metadata-hint</div> </section> '},function(e,t){e.exports=' <section class=tb-telemetry-from-database-config ng-form name=getTelemetryConfigForm layout=column> <label translate class="tb-title no-padding">tb.rulenode.latest-timeseries</label> <md-chips ng-required=false readonly=readonly ng-model=configuration.latestTsKeyNames placeholder="{{\'tb.rulenode.latest-timeseries\' | translate}}" md-separator-keys=separatorKeys> </md-chips> <md-input-container style=margin-bottom:18px;margin-top:58px> <label translate class="tb-title no-padding">tb.rulenode.fetch-mode</label> <md-select required ng-model=configuration.fetchMode> <md-option ng-repeat="type in ruleNodeTypes.fetchModeType" ng-value=type> {{ type }} </md-option> </md-select> </md-input-container> <div class=tb-hint translate>tb.rulenode.fetch-mode-hint</div> <md-input-container flex ng-if="configuration.fetchMode === \'ALL\' "> <label translate class="tb-title no-padding">tb.rulenode.order-by</label> <md-select required ng-model=configuration.orderBy> <md-option ng-repeat="type in ruleNodeTypes.samplingOrder" ng-value=type> {{ type }} </md-option> </md-select> </md-input-container> <div class=tb-hint translate flex ng-if="configuration.fetchMode === \'ALL\' ">tb.rulenode.order-by-hint</div> <md-input-container style=margin-bottom:0 flex ng-if="configuration.fetchMode === \'ALL\' "> <label translate class="tb-title no-padding">tb.rulenode.limit</label> <input required type=number step=1 ng-model=configuration.limit min=2 max=1000> </md-input-container> <div class=tb-hint translate flex ng-if="configuration.fetchMode === \'ALL\' ">tb.rulenode.limit-hint</div> <md-checkbox aria-label="{{ \'tb.rulenode.use-metadata-interval-patterns\' | translate }}" ng-model=configuration.useMetadataIntervalPatterns>{{ \'tb.rulenode.use-metadata-interval-patterns\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.use-metadata-interval-patterns-hint</div> <div layout=column layout-gt-sm=row> <md-input-container flex class="md-block tb-time-value" flex ng-if="configuration.useMetadataIntervalPatterns == false"> <label translate class="tb-title no-padding">tb.rulenode.start-interval</label> <input required type=number step=1 min=1 max=2147483647 name=startInterval ng-model=configuration.startInterval> <div ng-messages=getTelemetryConfigForm.startInterval.$error> <div translate ng-message=required>tb.rulenode.start-interval-value-required</div> <div ng-message=min translate>tb.rulenode.time-value-range</div> <div ng-message=max translate>tb.rulenode.time-value-range</div> </div> </md-input-container> <md-input-container flex class="md-block tb-time-unit" flex ng-if="configuration.useMetadataIntervalPatterns == false "> <label translate class="tb-title no-padding">tb.rulenode.start-interval-time-unit</label> <md-select required name=startIntervalTimeUnit aria-label="{{ \'tb.rulenode.start-interval-time-unit\' | translate }}" ng-model=configuration.startIntervalTimeUnit> <md-option ng-repeat="timeUnit in ruleNodeTypes.timeUnit" ng-value=timeUnit.value> {{timeUnit.name | translate}} </md-option> </md-select> </md-input-container> </div> <div layout=column layout-gt-sm=row> <md-input-container flex class="md-block tb-time-value" flex ng-if="configuration.useMetadataIntervalPatterns == false"> <label translate class="tb-title no-padding">tb.rulenode.end-interval</label> <input required type=number step=1 min=1 max=2147483647 name=endInterval ng-model=configuration.endInterval> <div ng-messages=getTelemetryConfigForm.endInterval.$error> <div translate ng-message=required>tb.rulenode.end-interval-value-required</div> <div ng-message=min translate>tb.rulenode.time-value-range</div> <div ng-message=max translate>tb.rulenode.time-value-range</div> </div> </md-input-container> <md-input-container flex class="md-block tb-time-unit" flex ng-if="configuration.useMetadataIntervalPatterns === false"> <label translate class="tb-title no-padding">tb.rulenode.end-interval-time-unit</label> <md-select required name=endIntervalTimeUnit aria-label="{{ \'tb.rulenode.end-interval-time-unit\' | translate }}" ng-model=configuration.endIntervalTimeUnit> <md-option ng-repeat="timeUnit in ruleNodeTypes.timeUnit" ng-value=timeUnit.value> {{timeUnit.name | translate}} </md-option> </md-select> </md-input-container> </div> <md-input-container class=md-block flex ng-if="configuration.useMetadataIntervalPatterns === true" style=margin-top:38px> <label translate>tb.rulenode.start-interval-pattern</label> <input ng-required=true name=startIntervalPattern ng-model=configuration.startIntervalPattern> <div ng-messages=getTelemetryConfigForm.startIntervalPattern.$error> <div ng-message=required translate>tb.rulenode.start-interval-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.start-interval-pattern-hint</div> </md-input-container> <md-input-container class=md-block flex ng-if="configuration.useMetadataIntervalPatterns === true"> <label translate>tb.rulenode.end-interval-pattern</label> <input ng-required=true name=endIntervalPattern ng-model=configuration.endIntervalPattern> <div ng-messages=getTelemetryConfigForm.endIntervalPattern.$error> <div ng-message=required translate>tb.rulenode.end-interval-pattern-required</div> </div> <div class=tb-hint translate>tb.rulenode.end-interval-pattern-hint</div> </md-input-container> </section>'},function(e,t){e.exports=' <section layout=column> <md-checkbox aria-label="{{ \'tb.rulenode.tell-failure-if-absent\' | translate }}" ng-model=configuration.tellFailureIfAbsent> {{ \'tb.rulenode.tell-failure-if-absent\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.tell-failure-if-absent-hint</div> <label translate class="tb-title no-padding">tb.rulenode.client-attributes</label> <md-chips style=padding-bottom:15px ng-required=false readonly=readonly ng-model=configuration.clientAttributeNames placeholder="{{\'tb.rulenode.client-attributes\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <label translate class="tb-title no-padding">tb.rulenode.shared-attributes</label> <md-chips style=padding-bottom:15px ng-required=false readonly=readonly ng-model=configuration.sharedAttributeNames placeholder="{{\'tb.rulenode.shared-attributes\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <label translate class="tb-title no-padding">tb.rulenode.server-attributes</label> <md-chips style=padding-bottom:15px ng-required=false readonly=readonly ng-model=configuration.serverAttributeNames placeholder="{{\'tb.rulenode.server-attributes\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <label translate class="tb-title no-padding">tb.rulenode.latest-timeseries</label> <md-chips ng-required=false readonly=readonly ng-model=configuration.latestTsKeyNames placeholder="{{\'tb.rulenode.latest-timeseries\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <div style=margin-top:20px> <md-checkbox aria-label="{{ \'tb.rulenode.get-latest-value-with-ts\' | translate }}" ng-model=configuration.getLatestValueWithTs> {{ \'tb.rulenode.get-latest-value-with-ts\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.get-latest-value-with-ts-hint</div> </div> </section> '},function(e,t){e.exports=' <section layout=column> <label translate class="tb-title tb-required">tb.rulenode.fields-mapping</label> <tb-kv-map-config ng-model=configuration.fieldsMapping ng-required=true required-text="\'tb.rulenode.fields-mapping-required\'" key-text="\'tb.rulenode.source-field\'" key-required-text="\'tb.rulenode.source-field-required\'" val-text="\'tb.rulenode.target-attribute\'" val-required-text="\'tb.rulenode.target-attribute-required\'"> </tb-kv-map-config> </section> '},function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title tb-required\">tb.rulenode.relations-query</label> <tb-relations-query-config style=padding-bottom:15px ng-model=configuration.relationsQuery> </tb-relations-query-config> <label translate class=\"tb-title tb-required\">tb.rulenode.attr-mapping</label> <md-checkbox aria-label=\"{{ 'tb.rulenode.latest-telemetry' | translate }}\" ng-model=configuration.telemetry>{{ 'tb.rulenode.latest-telemetry' | translate }} </md-checkbox> <tb-kv-map-config ng-model=configuration.attrMapping ng-required=true required-text=\"'tb.rulenode.attr-mapping-required'\" key-text=\"configuration.telemetry ? 'tb.rulenode.source-telemetry' : 'tb.rulenode.source-attribute'\" key-required-text=\"configuration.telemetry ? 'tb.rulenode.source-telemetry-required' : 'tb.rulenode.source-attribute-required'\" val-text=\"'tb.rulenode.target-attribute'\" val-required-text=\"'tb.rulenode.target-attribute-required'\"> </tb-kv-map-config> </section> "},33,function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title no-padding\" class=\"{'tb-required': required}\">tb.rulenode.alarm-statuses-filter</label> <md-chips readonly=readonly id=alarmStatusListChips ng-required=required ng-model=configuration.alarmStatusList md-autocomplete-snap md-require-match=true> <md-autocomplete md-no-cache=true id=alarmStatus md-selected-item=selectedAlarmStatus md-selected-item-change=selectedItemChange(item) md-search-text=alarmStatusSearchText md-items=\"item in getAlarmStatusList()\" md-item-text=item md-min-length=0 placeholder=\"{{'alarm.alarm-status' | translate }}\"> <span>{{'alarm.display-status.' + item | translate}}</span> </md-autocomplete> <md-chip-template> <span>{{'alarm.display-status.' + $chip | translate}}</span> </md-chip-template> </md-chips> <div class=tb-error-messages ng-messages=ngModelCtrl.$error role=alert> <div translate ng-message=configuration.alarmStatusList class=tb-error-message> tb.rulenode.alarm-statuses-required </div> </div> </section> "},function(e,t){e.exports=' <section layout=column> <label translate class="tb-title no-padding tb-required">tb.rulenode.data-keys</label> <md-chips style=padding-bottom:15px ng-required=!(configuration.metadataNames).length readonly=readonly ng-model=configuration.messageNames placeholder="{{\'tb.rulenode.data-keys\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <div class=tb-hint translate>tb.rulenode.separator-hint</div> <label translate class="tb-title no-padding tb-required">tb.rulenode.metadata-keys</label> <md-chips style=padding-bottom:15px ng-required=!(configuration.messageNames).length readonly=readonly ng-model=configuration.metadataNames placeholder="{{\'tb.rulenode.metadata-keys\' | translate}}" md-separator-keys=separatorKeys md-add-on-blur=true> </md-chips> <div class=tb-hint translate>tb.rulenode.separator-hint</div> <md-checkbox aria-label="{{ \'tb.rulenode.check-all-keys\' | translate }}" ng-model=configuration.checkAllKeys>{{ \'tb.rulenode.check-all-keys\' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.check-all-keys-hint</div> </section> '},function(e,t){e.exports=" <section ng-form name=checkRelationConfigForm> <md-checkbox aria-label=\"{{ 'tb.rulenode.check-relation-to-specific-entity' | translate }}\" ng-model=configuration.checkForSingleEntity> {{ 'tb.rulenode.check-relation-to-specific-entity' | translate }} </md-checkbox> <div class=tb-hint translate>tb.rulenode.check-relation-hint</div> <md-input-container class=md-block style=min-width:100px> <label translate>relation.direction</label> <md-select required ng-model=configuration.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <div layout=row class=tb-entity-select ng-if=configuration.checkForSingleEntity style=padding-top:20px> <tb-entity-type-select style=min-width:100px;padding-bottom:20px the-form=checkRelationConfigForm tb-required=true ng-model=configuration.entityType> </tb-entity-type-select> <tb-entity-autocomplete flex ng-if=configuration.entityType the-form=checkRelationConfigForm tb-required=true entity-type=configuration.entityType ng-model=configuration.entityId> </tb-entity-autocomplete> </div> <tb-relation-type-autocomplete hide-label ng-model=configuration.relationType tb-required=true> </tb-relation-type-autocomplete> </section> "},function(e,t){e.exports=' <section ng-form name=geoFilterConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.latitude-key-name</label> <input ng-required=true name=latitudeKeyName ng-model=configuration.latitudeKeyName> <div ng-messages=geoFilterConfigForm.latitudeKeyName.$error> <div ng-message=required translate>tb.rulenode.latitude-key-name-required</div> </div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.longitude-key-name</label> <input ng-required=true name=longitudeKeyName ng-model=configuration.longitudeKeyName> <div ng-messages=geoFilterConfigForm.longitudeKeyName.$error> <div ng-message=required translate>tb.rulenode.longitude-key-name-required</div> </div> </md-input-container> <md-checkbox flex aria-label="{{ \'tb.rulenode.fetch-perimeter-info-from-message-metadata\' | translate }}" ng-model=configuration.fetchPerimeterInfoFromMessageMetadata>{{ \'tb.rulenode.fetch-perimeter-info-from-message-metadata\' | translate }} </md-checkbox> <div layout=row class=tb-entity-select ng-if="configuration.fetchPerimeterInfoFromMessageMetadata === false"> <md-input-container class=md-block flex=100> <label translate>tb.rulenode.perimeter-type</label> <md-select required ng-model=configuration.perimeterType flex> <md-option ng-repeat="type in ruleNodeTypes.perimeterType" ng-value=type.value> {{ type.name | translate}} </md-option> </md-select> </md-input-container> </div> <div layout=row layout-wrap ng-if="configuration.perimeterType === ruleNodeTypes.perimeterType.CIRCLE.value && configuration.fetchPerimeterInfoFromMessageMetadata === false"> <div layout=column flex=50> <md-input-container class=md-block flex layout=column style=margin-top:44px> <label translate>tb.rulenode.circle-center-latitude</label> <input type=number min=-90 max=90 step=0.1 ng-required=true name=centerLatitude ng-model=configuration.centerLatitude> <div ng-messages=geoFilterConfigForm.centerLatitude.$error> <div ng-message=required translate>tb.rulenode.circle-center-latitude-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block flex style=margin-top:44px> <label translate>tb.rulenode.circle-center-longitude</label> <input type=number min=-180 max=180 ng-required=true name=centerLongitude ng-model=configuration.centerLongitude> <div ng-messages=geoFilterConfigForm.centerLongitude.$error> <div ng-message=required translate>tb.rulenode.circle-center-longitude-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block style=margin-top:28px> <label translate>tb.rulenode.range</label> <input type=number min=0 step=0.1 ng-required=true name=range ng-model=configuration.range> <div ng-messages=geoFilterConfigForm.range.$error> <div ng-message=required translate>tb.rulenode.range-required</div> </div> </md-input-container> </div> <div layout=column flex=50> <md-input-container class=md-block style=margin-top:28px> <label translate>tb.rulenode.range-units</label> <md-select required ng-model=configuration.rangeUnit> <md-option ng-repeat="type in ruleNodeTypes.rangeUnit" ng-value=type.value> {{ type.name | translate}} </md-option> </md-select> </md-input-container> </div> </div> <div layout=row layout-wrap ng-if="configuration.perimeterType === ruleNodeTypes.perimeterType.POLYGON.value && configuration.fetchPerimeterInfoFromMessageMetadata === false"> <div layout=column flex=100> <md-input-container class=md-block style=margin-top:44px> <label translate>tb.rulenode.polygon-definition</label> <input ng-required=true name=polygonsDefinition ng-model=configuration.polygonsDefinition> <div ng-messages=geoFilterConfigForm.polygonsDefinition.$error> <div ng-message=required translate>tb.rulenode.polygon-definition-required</div> </div> <div class=tb-hint style=margin-top:5px translate>tb.rulenode.polygon-definition-hint</div> </md-input-container> </div> </div> </section> '},function(e,t){e.exports=' <section layout=column> <label translate class="tb-title no-padding" ng-class="{\'tb-required\': required}">tb.rulenode.message-types-filter</label> <md-chips id=message_type_chips ng-required=required readonly=readonly ng-model=messageTypes md-autocomplete-snap md-transform-chip=transformMessageTypeChip($chip) md-require-match=false> <md-autocomplete id=message_type md-no-cache=true md-selected-item=selectedMessageType md-search-text=messageTypeSearchText md-items="item in messageTypesSearch(messageTypeSearchText)" md-item-text=item.name md-min-length=0 placeholder="{{\'tb.rulenode.message-type\' | translate }}" md-menu-class=tb-message-type-autocomplete> <span md-highlight-text=messageTypeSearchText md-highlight-flags=^i>{{item}}</span> <md-not-found> <div class=tb-not-found> <div class=tb-no-entries ng-if="!messageTypeSearchText || !messageTypeSearchText.length"> <span translate>tb.rulenode.no-message-types-found</span> </div> <div ng-if="messageTypeSearchText && messageTypeSearchText.length"> <span translate translate-values=\'{ messageType: "{{messageTypeSearchText | truncate:true:6:&apos;...&apos;}}" }\'>tb.rulenode.no-message-type-matching</span> <span> <a translate ng-click="createMessageType($event, \'#message_type_chips\')">tb.rulenode.create-new-message-type</a> </span> </div> </div> </md-not-found> </md-autocomplete> <md-chip-template> <span>{{$chip.name}}</span> </md-chip-template> </md-chips> <div class=tb-error-messages ng-messages=ngModelCtrl.$error role=alert> <div translate ng-message=messageTypes class=tb-error-message>tb.rulenode.message-types-required</div> </div> </section>'},function(e,t){e.exports=' <section layout=column> <label translate class="tb-title no-padding" class=required>tb.rulenode.originator-types-filter</label> <tb-entity-type-list flex ng-model=configuration.originatorTypes allowed-entity-types=allowedEntityTypes ignore-authority-filter=true tb-required=true> </tb-entity-type-list> </section> '},function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.filter</label> <tb-js-func ng-model=configuration.jsScript function-name=Filter function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row> <md-button ng-click=testScript($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-filter-function' | translate }} </md-button> </div> </section> "},function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.switch</label> <tb-js-func ng-model=configuration.jsScript function-name=Switch function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row> <md-button ng-click=testScript($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-switch-function' | translate }} </md-button> </div> </section> "},function(e,t){e.exports=' <section class=tb-kv-map-config layout=column> <div class=header flex layout=row> <span class=cell flex translate>{{ keyText }}</span> <span class=cell flex translate>{{ valText }}</span> <span ng-show=!disabled style=width:52px>&nbsp</span> </div> <div class=body> <div class=row ng-form name=kvForm flex layout=row layout-align="start center" ng-repeat="keyVal in kvList track by $index"> <md-input-container class="cell md-block" flex md-no-float> <input placeholder="{{ keyText | translate }}" ng-required=true name=key ng-model=keyVal.key> <div ng-messages=kvForm.key.$error> <div translate ng-message=required>{{keyRequiredText}}</div> </div> </md-input-container> <md-input-container class="cell md-block" flex md-no-float> <input placeholder="{{ valText | translate }}" ng-required=true name=value ng-model=keyVal.value> <div ng-messages=kvForm.value.$error> <div translate ng-message=required>{{valRequiredText}}</div> </div> </md-input-container> <md-button ng-show=!disabled ng-disabled=loading class="md-icon-button md-primary" ng-click=removeKeyVal($index) aria-label="{{ \'action.remove\' | translate }}"> <md-tooltip md-direction=top> {{ \'tb.key-val.remove-entry\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.delete\' | translate }}" class=material-icons> close </md-icon> </md-button> </div> </div> <div class=tb-error-messages ng-messages=ngModelCtrl.$error role=alert> <div translate ng-message=kvMap class=tb-error-message>{{requiredText}}</div> </div> <div> <md-button ng-show=!disabled ng-disabled=loading class="md-primary md-raised" ng-click=addKeyVal() aria-label="{{ \'action.add\' | translate }}"> <md-tooltip md-direction=top> {{ \'tb.key-val.add-entry\' | translate }} </md-tooltip> <md-icon aria-label="{{ \'action.add\' | translate }}" class=material-icons> add </md-icon> {{ \'action.add\' | translate }} </md-button> </div> </section> '},function(e,t){e.exports=" <section layout=column> <md-checkbox ng-model=query.fetchLastLevelOnly aria-label=\"{{ 'alias.last-level-relation' | translate}}\"> {{ 'alias.last-level-relation' | translate}} </md-checkbox> <div layout=row> <md-input-container class=md-block style=min-width:100px> <label translate>relation.direction</label> <md-select required ng-model=query.direction> <md-option ng-repeat=\"direction in types.entitySearchDirection\" ng-value=direction> {{ ('relation.search-direction.' + direction) | translate}} </md-option> </md-select> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.max-relation-level</label> <input name=maxRelationLevel type=number min=1 step=1 placeholder=\"{{ 'tb.rulenode.unlimited-level' | translate }}\" ng-model=query.maxLevel aria-label=\"{{ 'tb.rulenode.max-relation-level' | translate }}\"> </md-input-container> </div> <div class=md-caption style=padding-bottom:10px;color:rgba(0,0,0,.57) translate>relation.relation-filters</div> <tb-relation-filters ng-model=query.filters> </tb-relation-filters> </section> "},function(e,t){e.exports=' <section layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.originator-source</label> <md-select required ng-model=configuration.originatorSource> <md-option ng-repeat="source in ruleNodeTypes.originatorSource" ng-value=source.value> {{ source.name | translate}} </md-option> </md-select> </md-input-container> <section layout=column ng-if="configuration.originatorSource == ruleNodeTypes.originatorSource.RELATED.value"> <label translate class="tb-title tb-required">tb.rulenode.relations-query</label> <tb-relations-query-config style=padding-bottom:15px ng-model=configuration.relationsQuery> </tb-relations-query-config> </section> </section> '},function(e,t){e.exports=" <section layout=column> <label translate class=\"tb-title no-padding\">tb.rulenode.transform</label> <tb-js-func ng-model=configuration.jsScript function-name=Transform function-args=\"{{ ['msg', 'metadata', 'msgType'] }}\" no-validate=true> </tb-js-func> <div layout=row style=padding-bottom:15px> <md-button ng-click=testScript($event) class=\"md-primary md-raised\"> {{ 'tb.rulenode.test-transformer-function' | translate }} </md-button> </div> </section> "},function(e,t){e.exports=" <section ng-form name=toEmailConfigForm layout=column> <md-input-container class=md-block> <label translate>tb.rulenode.from-template</label> <textarea ng-required=true name=fromTemplate ng-model=configuration.fromTemplate rows=2></textarea> <div ng-messages=toEmailConfigForm.fromTemplate.$error> <div ng-message=required translate>tb.rulenode.from-template-required</div> </div> <div class=tb-hint translate>tb.rulenode.from-template-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.to-template</label> <textarea ng-required=true name=toTemplate ng-model=configuration.toTemplate rows=2></textarea> <div ng-messages=toEmailConfigForm.toTemplate.$error> <div ng-message=required translate>tb.rulenode.to-template-required</div> </div> <div class=tb-hint translate>tb.rulenode.mail-address-list-template-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.cc-template</label> <textarea name=ccTemplate ng-model=configuration.ccTemplate rows=2></textarea> <div class=tb-hint translate>tb.rulenode.mail-address-list-template-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.bcc-template</label> <textarea name=ccTemplate ng-model=configuration.bccTemplate rows=2></textarea> <div class=tb-hint translate>tb.rulenode.mail-address-list-template-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.subject-template</label> <textarea ng-required=true name=subjectTemplate ng-model=configuration.subjectTemplate rows=2></textarea> <div ng-messages=toEmailConfigForm.subjectTemplate.$error> <div ng-message=required translate>tb.rulenode.subject-template-required</div> </div> <div class=tb-hint translate>tb.rulenode.subject-template-hint</div> </md-input-container> <md-input-container class=md-block> <label translate>tb.rulenode.body-template</label> <textarea ng-required=true name=bodyTemplate ng-model=configuration.bodyTemplate rows=6></textarea> <div ng-messages=toEmailConfigForm.bodyTemplate.$error> <div ng-message=required translate>tb.rulenode.body-template-required</div> </div> <div class=tb-hint translate>tb.rulenode.body-template-hint</div> </md-input-container> </section> ";
4   -},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(6),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(7),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$mdExpansionPanel=t,a.ruleNodeTypes=n,a.credentialsTypeChanged=function(){var e=a.configuration.credentials.type;a.configuration.credentials={},a.configuration.credentials.type=e,a.updateValidity()},a.certFileAdded=function(e,t){var n=new FileReader;n.onload=function(n){a.$apply(function(){if(n.target.result){l.$setDirty();var i=n.target.result;i&&i.length>0&&("caCert"==t&&(a.configuration.credentials.caCertFileName=e.name,a.configuration.credentials.caCert=i),"privateKey"==t&&(a.configuration.credentials.privateKeyFileName=e.name,a.configuration.credentials.privateKey=i),"Cert"==t&&(a.configuration.credentials.certFileName=e.name,a.configuration.credentials.cert=i)),a.updateValidity()}})},n.readAsText(e.file)},a.clearCertFile=function(e){switch(l.$setDirty(),e){case"caCert":a.configuration.credentials.caCertFileName=null,a.configuration.credentials.caCert=null;break;case"privateKey":a.configuration.credentials.privateKeyFileName=null,a.configuration.credentials.privateKey=null;break;case"Cert":a.configuration.credentials.certFileName=null,a.configuration.credentials.cert=null}a.updateValidity()},a.updateValidity=function(){var e=!0,t=a.configuration.credentials;t.type==n.mqttCredentialTypes["cert.PEM"].value&&(t.cert&&t.privateKey||(e=!1)),l.$setValidity("Certs",e)},a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:a}}i.$inject=["$compile","$mdExpansionPanel","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(1);var r=n(8),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.serviceType="TB_RULE_ENGINE",n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(9),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n,a){var i=function(i,r,l,s){var d=o.default;r.html(d),i.types=n,i.$watch("configuration",function(e,t){angular.equals(e,t)||s.$setViewValue(i.configuration)}),s.$render=function(){i.configuration=s.$viewValue},i.testDetailsBuildJs=function(e){var n=angular.copy(i.configuration.alarmDetailsBuildJs);a.testNodeScript(e,n,"json",t.instant("tb.rulenode.details")+"","Details",["msg","metadata","msgType"],i.ruleNodeId).then(function(e){i.configuration.alarmDetailsBuildJs=e,s.$setDirty()})},e(r.contents())(i)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:i}}i.$inject=["$compile","$translate","types","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(10),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n,a){var i=function(i,r,l,s){var d=o.default;r.html(d),i.types=n,i.$watch("configuration",function(e,t){angular.equals(e,t)||s.$setViewValue(i.configuration)}),s.$render=function(){i.configuration=s.$viewValue,i.configuration.hasOwnProperty("relationTypes")||(i.configuration.relationTypes=[])},i.testDetailsBuildJs=function(e){var n=angular.copy(i.configuration.alarmDetailsBuildJs);a.testNodeScript(e,n,"json",t.instant("tb.rulenode.details")+"","Details",["msg","metadata","msgType"],i.ruleNodeId).then(function(e){i.configuration.alarmDetailsBuildJs=e,s.$setDirty()})},e(r.contents())(i)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:i}}i.$inject=["$compile","$translate","types","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(11),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(12),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(13),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n,a){var i=function(i,r,l,s){var d=o.default;r.html(d),i.types=n,i.originator=null,i.$watch("configuration",function(e,t){angular.equals(e,t)||s.$setViewValue(i.configuration)}),s.$render=function(){i.configuration=s.$viewValue,i.configuration.originatorId&&i.configuration.originatorType?i.originator={id:i.configuration.originatorId,entityType:i.configuration.originatorType}:i.originator=null,i.$watch("originator",function(e,t){angular.equals(e,t)||(i.originator?(s.$viewValue.originatorId=i.originator.id,s.$viewValue.originatorType=i.originator.entityType):(s.$viewValue.originatorId=null,s.$viewValue.originatorType=null))},!0)},i.testScript=function(e){var n=angular.copy(i.configuration.jsScript);a.testNodeScript(e,n,"generate",t.instant("tb.rulenode.generator")+"","Generate",["prevMsg","prevMetadata","prevMsgType"],i.ruleNodeId).then(function(e){i.configuration.jsScript=e,s.$setDirty()})},e(r.contents())(i)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:i}}i.$inject=["$compile","$translate","types","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(2);var r=n(14),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(15),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(79),r=a(i),o=n(55),l=a(o),s=n(62),d=a(s),u=n(59),c=a(u),m=n(58),g=a(m),p=n(66),f=a(p),b=n(73),v=a(b),y=n(74),h=a(y),q=n(72),x=a(q),k=n(65),$=a(k),T=n(77),C=a(T),w=n(78),M=a(w),N=n(71),S=a(N),F=n(67),P=a(F),_=n(76),E=a(_),A=n(69),V=a(A),I=n(68),j=a(I),O=n(54),K=a(O),D=n(80),L=a(D),R=n(61),U=a(R),z=n(60),H=a(z),B=n(75),G=a(B),Y=n(63),Q=a(Y),W=n(70),J=a(W),Z=n(57),X=a(Z),ee=n(56),te=a(ee);t.default=angular.module("thingsboard.ruleChain.config.action",[]).directive("tbActionNodeTimeseriesConfig",r.default).directive("tbActionNodeAttributesConfig",l.default).directive("tbActionNodeGeneratorConfig",d.default).directive("tbActionNodeCreateAlarmConfig",c.default).directive("tbActionNodeClearAlarmConfig",g.default).directive("tbActionNodeLogConfig",f.default).directive("tbActionNodeRpcReplyConfig",v.default).directive("tbActionNodeRpcRequestConfig",h.default).directive("tbActionNodeRestApiCallConfig",x.default).directive("tbActionNodeKafkaConfig",$.default).directive("tbActionNodeSnsConfig",C.default).directive("tbActionNodeSqsConfig",M.default).directive("tbActionNodeRabbitMqConfig",S.default).directive("tbActionNodeMqttConfig",P.default).directive("tbActionNodeSendEmailConfig",E.default).directive("tbActionNodeMsgDelayConfig",V.default).directive("tbActionNodeMsgCountConfig",j.default).directive("tbActionNodeAssignToCustomerConfig",K.default).directive("tbActionNodeUnAssignToCustomerConfig",L.default).directive("tbActionNodeDeleteRelationConfig",U.default).directive("tbActionNodeCreateRelationConfig",H.default).directive("tbActionNodeCustomTableConfig",G.default).directive("tbActionNodeGpsGeofencingConfig",Q.default).directive("tbActionNodePubSubConfig",J.default).directive("tbActionNodeCheckPointConfig",X.default).directive("tbActionNodeAzureIotHubConfig",te.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ackValues=["all","-1","0","1"],n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue,n.configuration.hasOwnProperty("kafkaHeadersCharset")||(n.configuration.kafkaHeadersCharset="UTF-8")},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(16),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"string",t.instant("tb.rulenode.to-string")+"","ToString",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(17),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$mdExpansionPanel=t,a.ruleNodeTypes=n,a.credentialsTypeChanged=function(){var e=a.configuration.credentials.type;a.configuration.credentials={},a.configuration.credentials.type=e,a.updateValidity()},a.certFileAdded=function(e,t){var n=new FileReader;n.onload=function(n){a.$apply(function(){if(n.target.result){l.$setDirty();var i=n.target.result;i&&i.length>0&&("caCert"==t&&(a.configuration.credentials.caCertFileName=e.name,a.configuration.credentials.caCert=i),"privateKey"==t&&(a.configuration.credentials.privateKeyFileName=e.name,a.configuration.credentials.privateKey=i),"Cert"==t&&(a.configuration.credentials.certFileName=e.name,a.configuration.credentials.cert=i)),a.updateValidity()}})},n.readAsText(e.file)},a.clearCertFile=function(e){l.$setDirty(),"caCert"==e&&(a.configuration.credentials.caCertFileName=null,a.configuration.credentials.caCert=null),"privateKey"==e&&(a.configuration.credentials.privateKeyFileName=null,a.configuration.credentials.privateKey=null),"Cert"==e&&(a.configuration.credentials.certFileName=null,a.configuration.credentials.cert=null),a.updateValidity()},a.updateValidity=function(){var e=!0,t=a.configuration.credentials;t.type==n.mqttCredentialTypes["cert.PEM"].value&&(t.caCert&&t.cert&&t.privateKey||(e=!1)),l.$setValidity("Certs",e)},a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:a}}i.$inject=["$compile","$mdExpansionPanel","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(1);var r=n(18),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(19),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(20),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.serviceAccountFileAdded=function(e){var t=new FileReader;t.onload=function(t){n.$apply(function(){if(t.target.result){r.$setDirty();var a=t.target.result;a&&a.length>0&&(n.configuration.serviceAccountKeyFileName=e.name,n.configuration.serviceAccountKey=a),n.updateValidity()}})},t.readAsText(e.file)},n.clearServiceAccountFile=function(){r.$setDirty(),n.configuration.serviceAccountKeyFileName=null,n.configuration.serviceAccountKey=null,n.updateValidity()},n.updateValidity=function(){var e=!0,t=n.configuration;t.serviceAccountKeyFileName&&t.serviceAccountKey||(e=!1),r.$setValidity("SAKey",e)},n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(21),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"],t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(22),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.proxySchemes=["http","https"],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(23),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(24),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(25),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(26),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.smtpProtocols=["smtp","smtps"],t.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"],t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(27),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(28),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(29),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(30),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(31),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("query",function(e,t){angular.equals(e,t)||r.$setViewValue(n.query)}),r.$render=function(){n.query=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(32),o=a(r)},function(e,t){"use strict";function n(e){var t=function(t,n,a,i){n.html("<div></div>"),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}n.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=n},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(33),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l);var s=186;n.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,s],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","$mdConstant"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(34),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),n.entityDetailsList=[];for(var s in t.entityDetails){var d=s;n.entityDetailsList.push(d)}r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(35),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s);var d=186;a.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,d],a.ruleNodeTypes=n,a.aggPeriodTimeUnits={},a.aggPeriodTimeUnits.MINUTES=n.timeUnit.MINUTES,a.aggPeriodTimeUnits.HOURS=n.timeUnit.HOURS,a.aggPeriodTimeUnits.DAYS=n.timeUnit.DAYS,a.aggPeriodTimeUnits.MILLISECONDS=n.timeUnit.MILLISECONDS,a.aggPeriodTimeUnits.SECONDS=n.timeUnit.SECONDS,a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{},link:a}}i.$inject=["$compile","$mdConstant","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(36),o=a(r);n(3)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(88),r=a(i),o=n(89),l=a(o),s=n(84),d=a(s),u=n(90),c=a(u),m=n(83),g=a(m),p=n(91),f=a(p),b=n(86),v=a(b),y=n(85),h=a(y);t.default=angular.module("thingsboard.ruleChain.config.enrichment",[]).directive("tbEnrichmentNodeOriginatorAttributesConfig",r.default).directive("tbEnrichmentNodeOriginatorFieldsConfig",l.default).directive("tbEnrichmentNodeDeviceAttributesConfig",d.default).directive("tbEnrichmentNodeRelatedAttributesConfig",c.default).directive("tbEnrichmentNodeCustomerAttributesConfig",g.default).directive("tbEnrichmentNodeTenantAttributesConfig",f.default).directive("tbEnrichmentNodeGetTelemetryFromDatabase",v.default).directive("tbEnrichmentNodeEntityDetailsConfig",h.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l);var s=186;n.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,s],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","$mdConstant"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(37),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(38),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(39),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(40),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),n.alarmStatusList=[];for(var s in t.alarmStatus)n.alarmStatusList.push(t.alarmStatus[s]);r.$render=function(){n.configuration=r.$viewValue},n.getAlarmStatusList=function(){return n.alarmStatusList.filter(function(e){return n.configuration.alarmStatusList.indexOf(e)===-1})},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{required:"=ngRequired",readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(41),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l);var s=186;n.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,s],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","$mdConstant"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(42),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(43),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(44),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(99),r=a(i),o=n(97),l=a(o),s=n(100),d=a(s),u=n(94),c=a(u),m=n(98),g=a(m),p=n(93),f=a(p),b=n(95),v=a(b),y=n(92),h=a(y);t.default=angular.module("thingsboard.ruleChain.config.filter",[]).directive("tbFilterNodeScriptConfig",r.default).directive("tbFilterNodeMessageTypeConfig",l.default).directive("tbFilterNodeSwitchConfig",d.default).directive("tbFilterNodeCheckRelationConfig",c.default).directive("tbFilterNodeOriginatorTypeConfig",g.default).directive("tbFilterNodeCheckMessageConfig",f.default).directive("tbFilterNodeGpsGeofencingConfig",v.default).directive("tbFilterNodeCheckAlarmStatusConfig",h.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){function s(){if(l.$viewValue){for(var e=[],t=0;t<a.messageTypes.length;t++)e.push(a.messageTypes[t].value);l.$viewValue.messageTypes=e,d()}}function d(){if(a.required){var e=!(!l.$viewValue.messageTypes||!l.$viewValue.messageTypes.length);l.$setValidity("messageTypes",e)}else l.$setValidity("messageTypes",!0)}var u=o.default;i.html(u),a.selectedMessageType=null,a.messageTypeSearchText=null,a.ngModelCtrl=l;var c=[];for(var m in n.messageType){var g={name:n.messageType[m].name,value:n.messageType[m].value};c.push(g)}a.transformMessageTypeChip=function(e){var n,a=t("filter")(c,{name:e},!0);return n=a&&a.length?angular.copy(a[0]):{name:e,value:e}},a.messageTypesSearch=function(e){var n=e?t("filter")(c,{name:e}):c;return n.map(function(e){return e.name})},a.createMessageType=function(e,t){var n=angular.element(t,i)[0].firstElementChild,a=angular.element(n),r=a.scope().$mdChipsCtrl.getChipBuffer();e.preventDefault(),e.stopPropagation(),a.scope().$mdChipsCtrl.appendChip(r.trim()),a.scope().$mdChipsCtrl.resetChipBuffer()},l.$render=function(){a.messageTypesWatch&&(a.messageTypesWatch(),a.messageTypesWatch=null);var e=l.$viewValue,t=[];if(e&&e.messageTypes)for(var i=0;i<e.messageTypes.length;i++){var r=e.messageTypes[i];n.messageType[r]?t.push(angular.copy(n.messageType[r])):t.push({name:r,value:r})}a.messageTypes=t,a.messageTypesWatch=a.$watch("messageTypes",function(e,t){angular.equals(e,t)||s()},!0)},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{required:"=ngRequired",readonly:"=ngReadonly"},link:a}}i.$inject=["$compile","$filter","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(4);var r=n(45),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.allowedEntityTypes=[t.entityType.device,t.entityType.asset,t.entityType.entityView,t.entityType.tenant,t.entityType.customer,t.entityType.user,t.entityType.dashboard,t.entityType.rulechain,t.entityType.rulenode],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(46),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){
5   -angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"filter",t.instant("tb.rulenode.filter")+"","Filter",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(47),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"switch",t.instant("tb.rulenode.switch")+"","Switch",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(48),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){function r(e){e>-1&&t.kvList.splice(e,1)}function l(){t.kvList||(t.kvList=[]),t.kvList.push({key:"",value:""})}function s(){var e={};t.kvList.forEach(function(t){t.key&&(e[t.key]=t.value)}),i.$setViewValue(e),d()}function d(){var e=!0;t.required&&!t.kvList.length&&(e=!1),i.$setValidity("kvMap",e)}var u=o.default;n.html(u),t.ngModelCtrl=i,t.removeKeyVal=r,t.addKeyVal=l,t.kvList=[],t.$watch("query",function(e,n){angular.equals(e,n)||i.$setViewValue(t.query)}),i.$render=function(){if(i.$viewValue){var e=i.$viewValue;t.kvList.length=0;for(var n in e)t.kvList.push({key:n,value:e[n]})}t.$watch("kvList",function(e,t){angular.equals(e,t)||s()},!0),d()},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{required:"=ngRequired",disabled:"=ngDisabled",requiredText:"=",keyText:"=",keyRequiredText:"=",valText:"=",valRequiredText:"="},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(49),o=a(r);n(5)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("query",function(e,t){angular.equals(e,t)||r.$setViewValue(n.query)}),r.$render=function(){n.query=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(50),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(51),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(103),r=a(i),o=n(105),l=a(o),s=n(106),d=a(s);t.default=angular.module("thingsboard.ruleChain.config.transform",[]).directive("tbTransformationNodeChangeOriginatorConfig",r.default).directive("tbTransformationNodeScriptConfig",l.default).directive("tbTransformationNodeToEmailConfig",d.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"update",t.instant("tb.rulenode.transformer")+"","Transform",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(52),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(53),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(110),r=a(i),o=n(96),l=a(o),s=n(87),d=a(s),u=n(104),c=a(u),m=n(64),g=a(m),p=n(82),f=a(p),b=n(102),v=a(b),y=n(81),h=a(y),q=n(101),x=a(q),k=n(109),$=a(k);t.default=angular.module("thingsboard.ruleChain.config",[r.default,l.default,d.default,c.default,g.default]).directive("tbNodeEmptyConfig",f.default).directive("tbRelationsQueryConfig",v.default).directive("tbDeviceRelationsQueryConfig",h.default).directive("tbKvMapConfig",x.default).config($.default).name},function(e,t){"use strict";function n(e){var t={tb:{rulenode:{"create-entity-if-not-exists":"Create new entity if not exists","create-entity-if-not-exists-hint":"Create a new entity set above if it does not exist.","entity-name-pattern":"Name pattern","entity-name-pattern-required":"Name pattern is required","entity-name-pattern-hint":"Name pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","entity-type-pattern-hint":"Type pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer name pattern","customer-name-pattern-required":"Customer name pattern is required","create-customer-if-not-exists":"Create new customer if not exists","customer-cache-expiration":"Customers cache expiration time (sec)","customer-name-pattern-hint":"Customer name pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","start-interval":"Start Interval","end-interval":"End Interval","start-interval-time-unit":"Start Interval Time Unit","end-interval-time-unit":"End Interval Time Unit","fetch-mode":"Fetch mode","fetch-mode-hint":"If selected fetch mode 'ALL' you able to choose telemetry sampling order.","order-by":"Order by","order-by-hint":"Select to choose telemetry sampling order.",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. In case you want to fetch a single entry, select fetch mode 'FIRST' or 'LAST'.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Time value should be in a range from 1 to 2147483647'.","start-interval-value-required":"Start interval value is required.","end-interval-value-required":"End interval value is required.",filter:"Filter",switch:"Switch","message-type":"Message type","message-type-required":"Message type is required.","message-types-filter":"Message types filter","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one!","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","latest-timeseries":"Latest timeseries","data-keys":"Message data","metadata-keys":"Message metadata","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","relation-type-pattern":"Relation type pattern","relation-type-pattern-hint":"Relation type pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","attr-mapping":"Attributes mapping","source-attribute":"Source attribute","source-attribute-required":"Source attribute is required.","source-telemetry":"Source telemetry","source-telemetry-required":"Source telemetry is required.","target-attribute":"Target attribute","target-attribute-required":"Target attribute is required.","attr-mapping-required":"At least one attribute mapping should be specified.","fields-mapping":"Fields mapping","fields-mapping-required":"At least one field mapping should be specified.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related","originator-alarm-originator":"Alarm Originator","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","message-count":"Message count (0 - unlimited)","message-count-required":"Message count is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","use-metadata-period-in-seconds-patterns":"Use metadata period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds metadata pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","period-in-seconds-pattern-hint":"Period in seconds pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-statuses-filter":"Alarm statuses filter","alarm-statuses-required":"Alarm statuses is required",propagate:"Propagate",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From Template","from-template-required":"From Template is required","from-template-hint":"From address template, use <code>${metaKeyName}</code> to substitute variables from metadata","to-template":"To Template","to-template-required":"To Template is required","mail-address-list-template-hint":"Comma separated address list, use <code>${metaKeyName}</code> to substitute variables from metadata","cc-template":"Cc Template","bcc-template":"Bcc Template","subject-template":"Subject Template","subject-template-required":"Subject Template is required","subject-template-hint":"Mail subject template, use <code>${metaKeyName}</code> to substitute variables from metadata","body-template":"Body Template","body-template-required":"Body Template is required","body-template-hint":"Mail body template, use <code>${metaKeyName}</code> to substitute variables from metadata","request-id-metadata-attribute":"Request Id Metadata attribute name","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","endpoint-url-pattern-hint":"HTTP URL address pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing",headers:"Headers","headers-hint":"Use <code>${metaKeyName}</code> in header/value fields to substitute variables from metadata",header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","topic-pattern-required":"Topic pattern is required",topic:"Topic","topic-required":"Topic is required","mqtt-topic-pattern-hint":"MQTT topic pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","topic-arn-pattern-hint":"Topic ARN pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","queue-url-pattern-hint":"Queue URL pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":"Use <code>${metaKeyName}</code> in name/value fields to substitute variables from metadata","connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","device-id":"Device ID","device-id-required":"Device ID is required.","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","credentials-sas":"Shared Access Signature","sas-key":"SAS Key","sas-key-required":"SAS Key is required.",hostname:"Hostname","hostname-required":"Hostname is required","azure-ca-cert":"CA certificate file","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"CA certificate file *","private-key":"Private key file *",cert:"Certificate file *","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-interval-patterns":"Use metadata interval patterns","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","check-all-keys":"Check that all selected keys are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-to-specific-entity":"Delete relation to specific entity","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval-pattern":"Start interval pattern","end-interval-pattern":"End interval pattern","start-interval-pattern-required":"Start interval pattern is required","end-interval-pattern-required":"End interval pattern is required","start-interval-pattern-hint":"Start interval pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","end-interval-pattern-hint":"End interval pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","enable-proxy":"Enable proxy","use-system-proxy-properties":"Use system proxy properties","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"You must supply a proxy port.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","proxy-scheme":"Proxy scheme","tls-version":"TLS version","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output timeseries key prefix","output-timeseries-key-prefix-required":"Output timeseries key prefix required.","separator-hint":'You should press "enter" to complete field input.',"entity-details":"Select entity details:","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","add-to-metadata":"Add selected details to message metadata","add-to-metadata-hint":"If selected, adds the selected details keys to the message metadata instead of message data.","entity-details-list-empty":"No entity details selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"You should enter the table name without prefix 'cs_tb_'.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-key-name":"Latitude key name","longitude-key-name":"Longitude key name","latitude-key-name-required":"Latitude key name is required.","longitude-key-name-required":"Longitude key name is required.","fetch-perimeter-info-from-message-metadata":"Fetch perimeter information from message metadata","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Please, use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch Latest telemetry with Timestamp","get-latest-value-with-ts-hint":'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{\\"ts\\":1574329385897,\\"value\\":42}"',"use-redis-queue":"Use redis queue for message persistence","trim-redis-queue":"Trim redis queue","redis-queue-max-size":"Redis queue max size","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name."},"key-val":{key:"Key",value:"Value","remove-entry":"Remove entry","add-entry":"Add entry"}}};e.translations("en_US",t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){(0,o.default)(e)}i.$inject=["$translateProvider"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(108),o=a(r)},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=angular.module("thingsboard.ruleChain.config.types",[]).constant("ruleNodeTypes",{originatorSource:{CUSTOMER:{name:"tb.rulenode.originator-customer",value:"CUSTOMER"},TENANT:{name:"tb.rulenode.originator-tenant",value:"TENANT"},RELATED:{name:"tb.rulenode.originator-related",value:"RELATED"},ALARM_ORIGINATOR:{name:"tb.rulenode.originator-alarm-originator",value:"ALARM_ORIGINATOR"}},fetchModeType:["FIRST","LAST","ALL"],samplingOrder:["ASC","DESC"],httpRequestType:["GET","POST","PUT","DELETE"],entityDetails:{TITLE:{name:"tb.rulenode.entity-details-title",value:"TITLE"},COUNTRY:{name:"tb.rulenode.entity-details-country",value:"COUNTRY"},STATE:{name:"tb.rulenode.entity-details-state",value:"STATE"},ZIP:{name:"tb.rulenode.entity-details-zip",value:"ZIP"},ADDRESS:{name:"tb.rulenode.entity-details-address",value:"ADDRESS"},ADDRESS2:{name:"tb.rulenode.entity-details-address2",value:"ADDRESS2"},PHONE:{name:"tb.rulenode.entity-details-phone",value:"PHONE"},EMAIL:{name:"tb.rulenode.entity-details-email",value:"EMAIL"},ADDITIONAL_INFO:{name:"tb.rulenode.entity-details-additional_info",value:"ADDITIONAL_INFO"}},sqsQueueType:{STANDARD:{name:"tb.rulenode.sqs-queue-standard",value:"STANDARD"},FIFO:{name:"tb.rulenode.sqs-queue-fifo",value:"FIFO"}},perimeterType:{CIRCLE:{name:"tb.rulenode.perimeter-circle",value:"CIRCLE"},POLYGON:{name:"tb.rulenode.perimeter-polygon",value:"POLYGON"}},timeUnit:{MILLISECONDS:{value:"MILLISECONDS",name:"tb.rulenode.time-unit-milliseconds"},SECONDS:{value:"SECONDS",name:"tb.rulenode.time-unit-seconds"},MINUTES:{value:"MINUTES",name:"tb.rulenode.time-unit-minutes"},HOURS:{value:"HOURS",name:"tb.rulenode.time-unit-hours"},DAYS:{value:"DAYS",name:"tb.rulenode.time-unit-days"}},rangeUnit:{METER:{value:"METER",name:"tb.rulenode.range-unit-meter"},KILOMETER:{value:"KILOMETER",name:"tb.rulenode.range-unit-kilometer"},FOOT:{value:"FOOT",name:"tb.rulenode.range-unit-foot"},MILE:{value:"MILE",name:"tb.rulenode.range-unit-mile"},NAUTICAL_MILE:{value:"NAUTICAL_MILE",name:"tb.rulenode.range-unit-nautical-mile"}},mqttCredentialTypes:{anonymous:{value:"anonymous",name:"tb.rulenode.credentials-anonymous"},basic:{value:"basic",name:"tb.rulenode.credentials-basic"},"cert.PEM":{value:"cert.PEM",name:"tb.rulenode.credentials-pem"}},azureIotHubCredentialTypes:{sas:{value:"sas",name:"tb.rulenode.credentials-sas"},"cert.PEM":{value:"cert.PEM",name:"tb.rulenode.credentials-pem"}},toBytesStandartCharsetTypes:{"US-ASCII":{value:"US-ASCII",name:"tb.rulenode.charset-us-ascii"},"ISO-8859-1":{value:"ISO-8859-1",name:"tb.rulenode.charset-iso-8859-1"},"UTF-8":{value:"UTF-8",name:"tb.rulenode.charset-utf-8"},"UTF-16BE":{value:"UTF-16BE",name:"tb.rulenode.charset-utf-16be"},"UTF-16LE":{value:"UTF-16LE",name:"tb.rulenode.charset-utf-16le"},"UTF-16":{value:"UTF-16",name:"tb.rulenode.charset-utf-16"}}}).name}]));
  4 +},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(6),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){e&&angular.isUndefined(e.notifyDevice)&&(n.configuration.notifyDevice=!0),angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(7),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$mdExpansionPanel=t,a.ruleNodeTypes=n,a.credentialsTypeChanged=function(){var e=a.configuration.credentials.type;a.configuration.credentials={},a.configuration.credentials.type=e,a.updateValidity()},a.certFileAdded=function(e,t){var n=new FileReader;n.onload=function(n){a.$apply(function(){if(n.target.result){l.$setDirty();var i=n.target.result;if(i&&i.length>0)switch(t){case"caCert":a.configuration.credentials.caCertFileName=e.name,a.configuration.credentials.caCert=i;break;case"privateKey":a.configuration.credentials.privateKeyFileName=e.name,a.configuration.credentials.privateKey=i;break;case"Cert":a.configuration.credentials.certFileName=e.name,a.configuration.credentials.cert=i}a.updateValidity()}})},n.readAsText(e.file)},a.clearCertFile=function(e){switch(l.$setDirty(),e){case"caCert":a.configuration.credentials.caCertFileName=null,a.configuration.credentials.caCert=null;break;case"privateKey":a.configuration.credentials.privateKeyFileName=null,a.configuration.credentials.privateKey=null;break;case"Cert":a.configuration.credentials.certFileName=null,a.configuration.credentials.cert=null}a.updateValidity()},a.updateValidity=function(){var e=!0,t=a.configuration.credentials;t.type==n.mqttCredentialTypes["cert.PEM"].value&&(t.cert&&t.privateKey||(e=!1)),l.$setValidity("Certs",e)},a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:a}}i.$inject=["$compile","$mdExpansionPanel","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(1);var r=n(8),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.serviceType="TB_RULE_ENGINE",n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(9),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n,a){var i=function(i,r,l,s){var d=o.default;r.html(d),i.types=n,i.$watch("configuration",function(e,t){angular.equals(e,t)||s.$setViewValue(i.configuration)}),s.$render=function(){i.configuration=s.$viewValue},i.testDetailsBuildJs=function(e){var n=angular.copy(i.configuration.alarmDetailsBuildJs);a.testNodeScript(e,n,"json",t.instant("tb.rulenode.details")+"","Details",["msg","metadata","msgType"],i.ruleNodeId).then(function(e){i.configuration.alarmDetailsBuildJs=e,s.$setDirty()})},e(r.contents())(i)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:i}}i.$inject=["$compile","$translate","types","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(10),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n,a){var i=function(i,r,l,s){var d=o.default;r.html(d),i.types=n,i.$watch("configuration",function(e,t){angular.equals(e,t)||s.$setViewValue(i.configuration)}),s.$render=function(){i.configuration=s.$viewValue,i.configuration.hasOwnProperty("relationTypes")||(i.configuration.relationTypes=[])},i.testDetailsBuildJs=function(e){var n=angular.copy(i.configuration.alarmDetailsBuildJs);a.testNodeScript(e,n,"json",t.instant("tb.rulenode.details")+"","Details",["msg","metadata","msgType"],i.ruleNodeId).then(function(e){i.configuration.alarmDetailsBuildJs=e,s.$setDirty()})},e(r.contents())(i)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:i}}i.$inject=["$compile","$translate","types","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(11),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(12),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(13),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n,a){var i=function(i,r,l,s){var d=o.default;r.html(d),i.types=n,i.originator=null,i.$watch("configuration",function(e,t){angular.equals(e,t)||s.$setViewValue(i.configuration)}),s.$render=function(){i.configuration=s.$viewValue,i.configuration.originatorId&&i.configuration.originatorType?i.originator={id:i.configuration.originatorId,entityType:i.configuration.originatorType}:i.originator=null,i.$watch("originator",function(e,t){angular.equals(e,t)||(i.originator?(s.$viewValue.originatorId=i.originator.id,s.$viewValue.originatorType=i.originator.entityType):(s.$viewValue.originatorId=null,s.$viewValue.originatorType=null))},!0)},i.testScript=function(e){var n=angular.copy(i.configuration.jsScript);a.testNodeScript(e,n,"generate",t.instant("tb.rulenode.generator")+"","Generate",["prevMsg","prevMetadata","prevMsgType"],i.ruleNodeId).then(function(e){i.configuration.jsScript=e,s.$setDirty()})},e(r.contents())(i)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:i}}i.$inject=["$compile","$translate","types","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(2);var r=n(14),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(15),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(79),r=a(i),o=n(55),l=a(o),s=n(62),d=a(s),u=n(59),c=a(u),m=n(58),g=a(m),p=n(66),f=a(p),b=n(73),v=a(b),y=n(74),h=a(y),q=n(72),x=a(q),k=n(65),$=a(k),T=n(77),C=a(T),w=n(78),M=a(w),N=n(71),S=a(N),F=n(67),P=a(F),_=n(76),E=a(_),A=n(69),V=a(A),I=n(68),j=a(I),O=n(54),D=a(O),K=n(80),L=a(K),R=n(61),U=a(R),z=n(60),H=a(z),B=n(75),G=a(B),Y=n(63),Q=a(Y),W=n(70),J=a(W),Z=n(57),X=a(Z),ee=n(56),te=a(ee);t.default=angular.module("thingsboard.ruleChain.config.action",[]).directive("tbActionNodeTimeseriesConfig",r.default).directive("tbActionNodeAttributesConfig",l.default).directive("tbActionNodeGeneratorConfig",d.default).directive("tbActionNodeCreateAlarmConfig",c.default).directive("tbActionNodeClearAlarmConfig",g.default).directive("tbActionNodeLogConfig",f.default).directive("tbActionNodeRpcReplyConfig",v.default).directive("tbActionNodeRpcRequestConfig",h.default).directive("tbActionNodeRestApiCallConfig",x.default).directive("tbActionNodeKafkaConfig",$.default).directive("tbActionNodeSnsConfig",C.default).directive("tbActionNodeSqsConfig",M.default).directive("tbActionNodeRabbitMqConfig",S.default).directive("tbActionNodeMqttConfig",P.default).directive("tbActionNodeSendEmailConfig",E.default).directive("tbActionNodeMsgDelayConfig",V.default).directive("tbActionNodeMsgCountConfig",j.default).directive("tbActionNodeAssignToCustomerConfig",D.default).directive("tbActionNodeUnAssignToCustomerConfig",L.default).directive("tbActionNodeDeleteRelationConfig",U.default).directive("tbActionNodeCreateRelationConfig",H.default).directive("tbActionNodeCustomTableConfig",G.default).directive("tbActionNodeGpsGeofencingConfig",Q.default).directive("tbActionNodePubSubConfig",J.default).directive("tbActionNodeCheckPointConfig",X.default).directive("tbActionNodeAzureIotHubConfig",te.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ackValues=["all","-1","0","1"],n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue,n.configuration.hasOwnProperty("kafkaHeadersCharset")||(n.configuration.kafkaHeadersCharset="UTF-8")},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(16),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"string",t.instant("tb.rulenode.to-string")+"","ToString",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(17),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$mdExpansionPanel=t,a.ruleNodeTypes=n,a.credentialsTypeChanged=function(){var e=a.configuration.credentials.type;a.configuration.credentials={},a.configuration.credentials.type=e,a.updateValidity()},a.certFileAdded=function(e,t){var n=new FileReader;n.onload=function(n){a.$apply(function(){if(n.target.result){l.$setDirty();var i=n.target.result;i&&i.length>0&&("caCert"==t&&(a.configuration.credentials.caCertFileName=e.name,a.configuration.credentials.caCert=i),"privateKey"==t&&(a.configuration.credentials.privateKeyFileName=e.name,a.configuration.credentials.privateKey=i),"Cert"==t&&(a.configuration.credentials.certFileName=e.name,a.configuration.credentials.cert=i)),a.updateValidity()}})},n.readAsText(e.file)},a.clearCertFile=function(e){l.$setDirty(),"caCert"==e&&(a.configuration.credentials.caCertFileName=null,a.configuration.credentials.caCert=null),"privateKey"==e&&(a.configuration.credentials.privateKeyFileName=null,a.configuration.credentials.privateKey=null),"Cert"==e&&(a.configuration.credentials.certFileName=null,a.configuration.credentials.cert=null),a.updateValidity()},a.updateValidity=function(){var e=!0,t=a.configuration.credentials;t.type==n.mqttCredentialTypes["cert.PEM"].value&&(t.caCert&&t.cert&&t.privateKey||(e=!1)),l.$setValidity("Certs",e)},a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:a}}i.$inject=["$compile","$mdExpansionPanel","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(1);var r=n(18),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(19),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(20),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.serviceAccountFileAdded=function(e){var t=new FileReader;t.onload=function(t){n.$apply(function(){if(t.target.result){r.$setDirty();var a=t.target.result;a&&a.length>0&&(n.configuration.serviceAccountKeyFileName=e.name,n.configuration.serviceAccountKey=a),n.updateValidity()}})},t.readAsText(e.file)},n.clearServiceAccountFile=function(){r.$setDirty(),n.configuration.serviceAccountKeyFileName=null,n.configuration.serviceAccountKey=null,n.updateValidity()},n.updateValidity=function(){var e=!0,t=n.configuration;t.serviceAccountKeyFileName&&t.serviceAccountKey||(e=!1),r.$setValidity("SAKey",e)},n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(21),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"],t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(22),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.proxySchemes=["http","https"],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(23),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(24),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(25),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(26),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.smtpProtocols=["smtp","smtps"],t.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"],t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(27),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(28),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(29),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(30),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(31),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("query",function(e,t){angular.equals(e,t)||r.$setViewValue(n.query)}),r.$render=function(){n.query=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(32),o=a(r)},function(e,t){"use strict";function n(e){var t=function(t,n,a,i){n.html("<div></div>"),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}n.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=n},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(33),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l);var s=186;n.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,s],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","$mdConstant"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(34),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),n.entityDetailsList=[];for(var s in t.entityDetails){var d=s;n.entityDetailsList.push(d)}r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(35),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s);var d=186;a.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,d],a.ruleNodeTypes=n,a.aggPeriodTimeUnits={},a.aggPeriodTimeUnits.MINUTES=n.timeUnit.MINUTES,a.aggPeriodTimeUnits.HOURS=n.timeUnit.HOURS,a.aggPeriodTimeUnits.DAYS=n.timeUnit.DAYS,a.aggPeriodTimeUnits.MILLISECONDS=n.timeUnit.MILLISECONDS,a.aggPeriodTimeUnits.SECONDS=n.timeUnit.SECONDS,a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{},link:a}}i.$inject=["$compile","$mdConstant","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(36),o=a(r);n(3)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(88),r=a(i),o=n(89),l=a(o),s=n(84),d=a(s),u=n(90),c=a(u),m=n(83),g=a(m),p=n(91),f=a(p),b=n(86),v=a(b),y=n(85),h=a(y);t.default=angular.module("thingsboard.ruleChain.config.enrichment",[]).directive("tbEnrichmentNodeOriginatorAttributesConfig",r.default).directive("tbEnrichmentNodeOriginatorFieldsConfig",l.default).directive("tbEnrichmentNodeDeviceAttributesConfig",d.default).directive("tbEnrichmentNodeRelatedAttributesConfig",c.default).directive("tbEnrichmentNodeCustomerAttributesConfig",g.default).directive("tbEnrichmentNodeTenantAttributesConfig",f.default).directive("tbEnrichmentNodeGetTelemetryFromDatabase",v.default).directive("tbEnrichmentNodeEntityDetailsConfig",h.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l);var s=186;n.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,s],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","$mdConstant"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(37),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(38),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(39),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(40),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),n.alarmStatusList=[];for(var s in t.alarmStatus)n.alarmStatusList.push(t.alarmStatus[s]);r.$render=function(){n.configuration=r.$viewValue},n.getAlarmStatusList=function(){return n.alarmStatusList.filter(function(e){return n.configuration.alarmStatusList.indexOf(e)===-1})},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{required:"=ngRequired",readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(41),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l);var s=186;n.separatorKeys=[t.KEY_CODE.ENTER,t.KEY_CODE.COMMA,s],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","$mdConstant"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(42),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(43),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{readonly:"=ngReadonly"},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(44),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(99),r=a(i),o=n(97),l=a(o),s=n(100),d=a(s),u=n(94),c=a(u),m=n(98),g=a(m),p=n(93),f=a(p),b=n(95),v=a(b),y=n(92),h=a(y);t.default=angular.module("thingsboard.ruleChain.config.filter",[]).directive("tbFilterNodeScriptConfig",r.default).directive("tbFilterNodeMessageTypeConfig",l.default).directive("tbFilterNodeSwitchConfig",d.default).directive("tbFilterNodeCheckRelationConfig",c.default).directive("tbFilterNodeOriginatorTypeConfig",g.default).directive("tbFilterNodeCheckMessageConfig",f.default).directive("tbFilterNodeGpsGeofencingConfig",v.default).directive("tbFilterNodeCheckAlarmStatusConfig",h.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){function s(){if(l.$viewValue){for(var e=[],t=0;t<a.messageTypes.length;t++)e.push(a.messageTypes[t].value);l.$viewValue.messageTypes=e,d()}}function d(){if(a.required){var e=!(!l.$viewValue.messageTypes||!l.$viewValue.messageTypes.length);l.$setValidity("messageTypes",e)}else l.$setValidity("messageTypes",!0)}var u=o.default;i.html(u),a.selectedMessageType=null,a.messageTypeSearchText=null,a.ngModelCtrl=l;var c=[];for(var m in n.messageType){var g={name:n.messageType[m].name,value:n.messageType[m].value};c.push(g)}a.transformMessageTypeChip=function(e){var n,a=t("filter")(c,{name:e},!0);return n=a&&a.length?angular.copy(a[0]):{name:e,value:e}},a.messageTypesSearch=function(e){var n=e?t("filter")(c,{name:e}):c;return n.map(function(e){return e.name})},a.createMessageType=function(e,t){var n=angular.element(t,i)[0].firstElementChild,a=angular.element(n),r=a.scope().$mdChipsCtrl.getChipBuffer();e.preventDefault(),e.stopPropagation(),a.scope().$mdChipsCtrl.appendChip(r.trim()),a.scope().$mdChipsCtrl.resetChipBuffer()},l.$render=function(){a.messageTypesWatch&&(a.messageTypesWatch(),a.messageTypesWatch=null);var e=l.$viewValue,t=[];if(e&&e.messageTypes)for(var i=0;i<e.messageTypes.length;i++){var r=e.messageTypes[i];n.messageType[r]?t.push(angular.copy(n.messageType[r])):t.push({name:r,value:r})}a.messageTypes=t,a.messageTypesWatch=a.$watch("messageTypes",function(e,t){angular.equals(e,t)||s()},!0)},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{required:"=ngRequired",readonly:"=ngReadonly"},link:a}}i.$inject=["$compile","$filter","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i,n(4);var r=n(45),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.allowedEntityTypes=[t.entityType.device,t.entityType.asset,t.entityType.entityView,t.entityType.tenant,t.entityType.customer,t.entityType.user,t.entityType.dashboard,t.entityType.rulechain,t.entityType.rulenode],n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(46),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{
  5 +default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"filter",t.instant("tb.rulenode.filter")+"","Filter",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(47),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"switch",t.instant("tb.rulenode.switch")+"","Switch",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(48),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){function r(e){e>-1&&t.kvList.splice(e,1)}function l(){t.kvList||(t.kvList=[]),t.kvList.push({key:"",value:""})}function s(){var e={};t.kvList.forEach(function(t){t.key&&(e[t.key]=t.value)}),i.$setViewValue(e),d()}function d(){var e=!0;t.required&&!t.kvList.length&&(e=!1),i.$setValidity("kvMap",e)}var u=o.default;n.html(u),t.ngModelCtrl=i,t.removeKeyVal=r,t.addKeyVal=l,t.kvList=[],t.$watch("query",function(e,n){angular.equals(e,n)||i.$setViewValue(t.query)}),i.$render=function(){if(i.$viewValue){var e=i.$viewValue;t.kvList.length=0;for(var n in e)t.kvList.push({key:n,value:e[n]})}t.$watch("kvList",function(e,t){angular.equals(e,t)||s()},!0),d()},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{required:"=ngRequired",disabled:"=ngDisabled",requiredText:"=",keyText:"=",keyRequiredText:"=",valText:"=",valRequiredText:"="},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(49),o=a(r);n(5)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.types=t,n.$watch("query",function(e,t){angular.equals(e,t)||r.$setViewValue(n.query)}),r.$render=function(){n.query=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","types"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(50),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=function(n,a,i,r){var l=o.default;a.html(l),n.ruleNodeTypes=t,n.$watch("configuration",function(e,t){angular.equals(e,t)||r.$setViewValue(n.configuration)}),r.$render=function(){n.configuration=r.$viewValue},e(a.contents())(n)};return{restrict:"E",require:"^ngModel",scope:{},link:n}}i.$inject=["$compile","ruleNodeTypes"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(51),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(103),r=a(i),o=n(105),l=a(o),s=n(106),d=a(s);t.default=angular.module("thingsboard.ruleChain.config.transform",[]).directive("tbTransformationNodeChangeOriginatorConfig",r.default).directive("tbTransformationNodeScriptConfig",l.default).directive("tbTransformationNodeToEmailConfig",d.default).name},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=function(a,i,r,l){var s=o.default;i.html(s),a.$watch("configuration",function(e,t){angular.equals(e,t)||l.$setViewValue(a.configuration)}),l.$render=function(){a.configuration=l.$viewValue},a.testScript=function(e){var i=angular.copy(a.configuration.jsScript);n.testNodeScript(e,i,"update",t.instant("tb.rulenode.transformer")+"","Transform",["msg","metadata","msgType"],a.ruleNodeId).then(function(e){a.configuration.jsScript=e,l.$setDirty()})},e(i.contents())(a)};return{restrict:"E",require:"^ngModel",scope:{ruleNodeId:"="},link:a}}i.$inject=["$compile","$translate","ruleNodeScriptTest"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(52),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=function(t,n,a,i){var r=o.default;n.html(r),t.$watch("configuration",function(e,n){angular.equals(e,n)||i.$setViewValue(t.configuration)}),i.$render=function(){t.configuration=i.$viewValue},e(n.contents())(t)};return{restrict:"E",require:"^ngModel",scope:{},link:t}}i.$inject=["$compile"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(53),o=a(r)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(110),r=a(i),o=n(96),l=a(o),s=n(87),d=a(s),u=n(104),c=a(u),m=n(64),g=a(m),p=n(82),f=a(p),b=n(102),v=a(b),y=n(81),h=a(y),q=n(101),x=a(q),k=n(109),$=a(k);t.default=angular.module("thingsboard.ruleChain.config",[r.default,l.default,d.default,c.default,g.default]).directive("tbNodeEmptyConfig",f.default).directive("tbRelationsQueryConfig",v.default).directive("tbDeviceRelationsQueryConfig",h.default).directive("tbKvMapConfig",x.default).config($.default).name},function(e,t){"use strict";function n(e){var t={tb:{rulenode:{"create-entity-if-not-exists":"Create new entity if not exists","create-entity-if-not-exists-hint":"Create a new entity set above if it does not exist.","entity-name-pattern":"Name pattern","entity-name-pattern-required":"Name pattern is required","entity-name-pattern-hint":"Name pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","entity-type-pattern-hint":"Type pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer name pattern","customer-name-pattern-required":"Customer name pattern is required","create-customer-if-not-exists":"Create new customer if not exists","customer-cache-expiration":"Customers cache expiration time (sec)","customer-name-pattern-hint":"Customer name pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","start-interval":"Start Interval","end-interval":"End Interval","start-interval-time-unit":"Start Interval Time Unit","end-interval-time-unit":"End Interval Time Unit","fetch-mode":"Fetch mode","fetch-mode-hint":"If selected fetch mode 'ALL' you able to choose telemetry sampling order.","order-by":"Order by","order-by-hint":"Select to choose telemetry sampling order.",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. In case you want to fetch a single entry, select fetch mode 'FIRST' or 'LAST'.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Time value should be in a range from 1 to 2147483647'.","start-interval-value-required":"Start interval value is required.","end-interval-value-required":"End interval value is required.",filter:"Filter",switch:"Switch","message-type":"Message type","message-type-required":"Message type is required.","message-types-filter":"Message types filter","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one!","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","notify-device":"Notify Device","notify-device-hint":"If the message arrives from the device, we will push it back to the device by default.","latest-timeseries":"Latest timeseries","data-keys":"Message data","metadata-keys":"Message metadata","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","relation-type-pattern":"Relation type pattern","relation-type-pattern-hint":"Relation type pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","attr-mapping":"Attributes mapping","source-attribute":"Source attribute","source-attribute-required":"Source attribute is required.","source-telemetry":"Source telemetry","source-telemetry-required":"Source telemetry is required.","target-attribute":"Target attribute","target-attribute-required":"Target attribute is required.","attr-mapping-required":"At least one attribute mapping should be specified.","fields-mapping":"Fields mapping","fields-mapping-required":"At least one field mapping should be specified.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related","originator-alarm-originator":"Alarm Originator","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","message-count":"Message count (0 - unlimited)","message-count-required":"Message count is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","use-metadata-period-in-seconds-patterns":"Use metadata period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds metadata pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","period-in-seconds-pattern-hint":"Period in seconds pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-statuses-filter":"Alarm statuses filter","alarm-statuses-required":"Alarm statuses is required",propagate:"Propagate",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From Template","from-template-required":"From Template is required","from-template-hint":"From address template, use <code>${metaKeyName}</code> to substitute variables from metadata","to-template":"To Template","to-template-required":"To Template is required","mail-address-list-template-hint":"Comma separated address list, use <code>${metaKeyName}</code> to substitute variables from metadata","cc-template":"Cc Template","bcc-template":"Bcc Template","subject-template":"Subject Template","subject-template-required":"Subject Template is required","subject-template-hint":"Mail subject template, use <code>${metaKeyName}</code> to substitute variables from metadata","body-template":"Body Template","body-template-required":"Body Template is required","body-template-hint":"Mail body template, use <code>${metaKeyName}</code> to substitute variables from metadata","request-id-metadata-attribute":"Request Id Metadata attribute name","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","endpoint-url-pattern-hint":"HTTP URL address pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing",headers:"Headers","headers-hint":"Use <code>${metaKeyName}</code> in header/value fields to substitute variables from metadata",header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","topic-pattern-required":"Topic pattern is required",topic:"Topic","topic-required":"Topic is required","mqtt-topic-pattern-hint":"MQTT topic pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","topic-arn-pattern-hint":"Topic ARN pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","queue-url-pattern-hint":"Queue URL pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":"Use <code>${metaKeyName}</code> in name/value fields to substitute variables from metadata","connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","device-id":"Device ID","device-id-required":"Device ID is required.","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","credentials-sas":"Shared Access Signature","sas-key":"SAS Key","sas-key-required":"SAS Key is required.",hostname:"Hostname","hostname-required":"Hostname is required","azure-ca-cert":"CA certificate file","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"CA certificate file *","private-key":"Private key file *",cert:"Certificate file *","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-interval-patterns":"Use metadata interval patterns","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","check-all-keys":"Check that all selected keys are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-to-specific-entity":"Delete relation to specific entity","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval-pattern":"Start interval pattern","end-interval-pattern":"End interval pattern","start-interval-pattern-required":"Start interval pattern is required","end-interval-pattern-required":"End interval pattern is required","start-interval-pattern-hint":"Start interval pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","end-interval-pattern-hint":"End interval pattern, use <code>${metaKeyName}</code> to substitute variables from metadata","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","enable-proxy":"Enable proxy","use-system-proxy-properties":"Use system proxy properties","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"You must supply a proxy port.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","proxy-scheme":"Proxy scheme","tls-version":"TLS version","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output timeseries key prefix","output-timeseries-key-prefix-required":"Output timeseries key prefix required.","separator-hint":'You should press "enter" to complete field input.',"entity-details":"Select entity details:","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","add-to-metadata":"Add selected details to message metadata","add-to-metadata-hint":"If selected, adds the selected details keys to the message metadata instead of message data.","entity-details-list-empty":"No entity details selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"You should enter the table name without prefix 'cs_tb_'.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-key-name":"Latitude key name","longitude-key-name":"Longitude key name","latitude-key-name-required":"Latitude key name is required.","longitude-key-name-required":"Longitude key name is required.","fetch-perimeter-info-from-message-metadata":"Fetch perimeter information from message metadata","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Please, use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch Latest telemetry with Timestamp","get-latest-value-with-ts-hint":'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{\\"ts\\":1574329385897,\\"value\\":42}"',"use-redis-queue":"Use redis queue for message persistence","trim-redis-queue":"Trim redis queue","redis-queue-max-size":"Redis queue max size","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name."},"key-val":{key:"Key",value:"Value","remove-entry":"Remove entry","add-entry":"Add entry"}}};e.translations("en_US",t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e){(0,o.default)(e)}i.$inject=["$translateProvider"],Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(108),o=a(r)},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=angular.module("thingsboard.ruleChain.config.types",[]).constant("ruleNodeTypes",{originatorSource:{CUSTOMER:{name:"tb.rulenode.originator-customer",value:"CUSTOMER"},TENANT:{name:"tb.rulenode.originator-tenant",value:"TENANT"},RELATED:{name:"tb.rulenode.originator-related",value:"RELATED"},ALARM_ORIGINATOR:{name:"tb.rulenode.originator-alarm-originator",value:"ALARM_ORIGINATOR"}},fetchModeType:["FIRST","LAST","ALL"],samplingOrder:["ASC","DESC"],httpRequestType:["GET","POST","PUT","DELETE"],entityDetails:{TITLE:{name:"tb.rulenode.entity-details-title",value:"TITLE"},COUNTRY:{name:"tb.rulenode.entity-details-country",value:"COUNTRY"},STATE:{name:"tb.rulenode.entity-details-state",value:"STATE"},ZIP:{name:"tb.rulenode.entity-details-zip",value:"ZIP"},ADDRESS:{name:"tb.rulenode.entity-details-address",value:"ADDRESS"},ADDRESS2:{name:"tb.rulenode.entity-details-address2",value:"ADDRESS2"},PHONE:{name:"tb.rulenode.entity-details-phone",value:"PHONE"},EMAIL:{name:"tb.rulenode.entity-details-email",value:"EMAIL"},ADDITIONAL_INFO:{name:"tb.rulenode.entity-details-additional_info",value:"ADDITIONAL_INFO"}},sqsQueueType:{STANDARD:{name:"tb.rulenode.sqs-queue-standard",value:"STANDARD"},FIFO:{name:"tb.rulenode.sqs-queue-fifo",value:"FIFO"}},perimeterType:{CIRCLE:{name:"tb.rulenode.perimeter-circle",value:"CIRCLE"},POLYGON:{name:"tb.rulenode.perimeter-polygon",value:"POLYGON"}},timeUnit:{MILLISECONDS:{value:"MILLISECONDS",name:"tb.rulenode.time-unit-milliseconds"},SECONDS:{value:"SECONDS",name:"tb.rulenode.time-unit-seconds"},MINUTES:{value:"MINUTES",name:"tb.rulenode.time-unit-minutes"},HOURS:{value:"HOURS",name:"tb.rulenode.time-unit-hours"},DAYS:{value:"DAYS",name:"tb.rulenode.time-unit-days"}},rangeUnit:{METER:{value:"METER",name:"tb.rulenode.range-unit-meter"},KILOMETER:{value:"KILOMETER",name:"tb.rulenode.range-unit-kilometer"},FOOT:{value:"FOOT",name:"tb.rulenode.range-unit-foot"},MILE:{value:"MILE",name:"tb.rulenode.range-unit-mile"},NAUTICAL_MILE:{value:"NAUTICAL_MILE",name:"tb.rulenode.range-unit-nautical-mile"}},mqttCredentialTypes:{anonymous:{value:"anonymous",name:"tb.rulenode.credentials-anonymous"},basic:{value:"basic",name:"tb.rulenode.credentials-basic"},"cert.PEM":{value:"cert.PEM",name:"tb.rulenode.credentials-pem"}},azureIotHubCredentialTypes:{sas:{value:"sas",name:"tb.rulenode.credentials-sas"},"cert.PEM":{value:"cert.PEM",name:"tb.rulenode.credentials-pem"}},toBytesStandartCharsetTypes:{"US-ASCII":{value:"US-ASCII",name:"tb.rulenode.charset-us-ascii"},"ISO-8859-1":{value:"ISO-8859-1",name:"tb.rulenode.charset-iso-8859-1"},"UTF-8":{value:"UTF-8",name:"tb.rulenode.charset-utf-8"},"UTF-16BE":{value:"UTF-16BE",name:"tb.rulenode.charset-utf-16be"},"UTF-16LE":{value:"UTF-16LE",name:"tb.rulenode.charset-utf-16le"},"UTF-16":{value:"UTF-16",name:"tb.rulenode.charset-utf-16"}}}).name}]));
6 6 //# sourceMappingURL=rulenode-core-config.js.map
\ No newline at end of file
... ...
... ... @@ -67,6 +67,8 @@ transport:
67 67 key_password: "${MQTT_SSL_KEY_PASSWORD:server_key_password}"
68 68 # Type of the key store
69 69 key_store_type: "${MQTT_SSL_KEY_STORE_TYPE:JKS}"
  70 + # Skip certificate validity check for client certificates.
  71 + skip_validity_check_for_client_cert: "${MQTT_SSL_SKIP_VALIDITY_CHECK_FOR_CLIENT_CERT:false}"
70 72 sessions:
71 73 inactivity_timeout: "${TB_TRANSPORT_SESSIONS_INACTIVITY_TIMEOUT:300000}"
72 74 report_timeout: "${TB_TRANSPORT_SESSIONS_REPORT_TIMEOUT:30000}"
... ...
... ... @@ -50,6 +50,7 @@ function KnobController($element, $scope, $document) {
50 50
51 51 vm.value = 0;
52 52 vm.error = '';
  53 + vm.newValue = 0;
53 54
54 55 var knob = angular.element('.knob', $element),
55 56 knobContainer = angular.element('#knob-container', $element),
... ... @@ -145,9 +146,11 @@ function KnobController($element, $scope, $document) {
145 146 turn(degreeToRatio(currentDeg));
146 147 rotation = currentDeg;
147 148 startDeg = -1;
  149 + rpcUpdateValue(vm.newValue);
148 150 });
149 151
150 152 knob.on('mousedown touchstart', (e) => {
  153 + moving = false;
151 154 e.preventDefault();
152 155 var offset = knob.offset();
153 156 var center = {
... ... @@ -158,7 +161,7 @@ function KnobController($element, $scope, $document) {
158 161 var a, b, deg, tmp,
159 162 rad2deg = 180/Math.PI;
160 163
161   - knob.on('mousemove.rem touchmove.rem', (e) => {
  164 + $document.on('mousemove.rem touchmove.rem', (e) => {
162 165 moving = true;
163 166 e = (e.originalEvent.touches) ? e.originalEvent.touches[0] : e;
164 167
... ... @@ -209,6 +212,9 @@ function KnobController($element, $scope, $document) {
209 212 });
210 213
211 214 $document.on('mouseup.rem touchend.rem',() => {
  215 + if(moving) {
  216 + rpcUpdateValue(vm.newValue);
  217 + }
212 218 knob.off('.rem');
213 219 $document.off('.rem');
214 220 rotation = currentDeg;
... ... @@ -269,12 +275,12 @@ function KnobController($element, $scope, $document) {
269 275 }
270 276
271 277 function turn(ratio) {
272   - var value = (vm.minValue + (vm.maxValue - vm.minValue)*ratio).toFixed(vm.ctx.decimals);
273   - if (canvasBar.value != value) {
274   - canvasBar.value = value;
  278 + vm.newValue = (vm.minValue + (vm.maxValue - vm.minValue)*ratio).toFixed(vm.ctx.decimals);
  279 + if (canvasBar.value != vm.newValue) {
  280 + canvasBar.value = vm.newValue;
275 281 }
276 282 updateColor(canvasBar.getValueColor());
277   - onValue(value);
  283 + onValue(vm.newValue);
278 284 }
279 285
280 286 function setValue(value) {
... ... @@ -303,7 +309,6 @@ function KnobController($element, $scope, $document) {
303 309 $scope.$applyAsync(() => {
304 310 vm.value = formatValue(value);
305 311 checkValueSize();
306   - rpcUpdateValue(value);
307 312 });
308 313 }
309 314
... ...