MessagePack working.

This commit is contained in:
Jared Goodwin 2019-03-06 22:34:03 -08:00
parent de65fa3f9b
commit 4de0dec917
32 changed files with 10599 additions and 115 deletions

View File

@ -49,7 +49,10 @@ namespace Remotely_Agent.Services
ConnectionInfo.ServerVerificationToken = Guid.NewGuid().ToString();
await HubConnection.InvokeAsync("SetServerVerificationToken", ConnectionInfo.ServerVerificationToken);
Utilities.SaveConnectionInfo(ConnectionInfo);
Updater.CheckForCoreUpdates();
if (!Program.IsDebug)
{
Updater.CheckForCoreUpdates();
}
}
else
{
@ -286,7 +289,10 @@ namespace Remotely_Agent.Services
if (verificationToken == Utilities.GetConnectionInfo().ServerVerificationToken)
{
IsServerVerified = true;
Updater.CheckForCoreUpdates();
if (!Program.IsDebug)
{
Updater.CheckForCoreUpdates();
}
}
else
{

View File

@ -28,11 +28,11 @@ namespace Remotely_Library.Services
string fileExt = "";
if (IsWindows)
{
fileExt = "Agent.exe";
fileExt = "Remotely_Agent.exe";
}
else if (IsLinux)
{
fileExt = "Agent";
fileExt = "Remotely_Agent";
}
return fileExt;
}

View File

@ -72,7 +72,7 @@ namespace Remotely_Library.Win32_Classes
UNICODE = 0x0004
}
public enum VirtualKeyShort : short
public enum VirtualKey : short
{
///<summary>
        ///Left mouse button
@ -763,8 +763,7 @@ namespace Remotely_Library.Win32_Classes
///<summary>
        ///Clear key
        ///</summary>
OEM_CLEAR = 0xFE,
SEMI_COLON = 0x3b
OEM_CLEAR = 0xFE
}
public enum ScanCodeShort : short
{
@ -1059,7 +1058,7 @@ namespace Remotely_Library.Win32_Classes
[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT
{
public VirtualKeyShort wVk;
public VirtualKey wVk;
public ScanCodeShort wScan;
public KEYEVENTF dwFlags;
public int time;

View File

@ -164,7 +164,7 @@ namespace Remotely_Library.Win32
return SendInput(1, new User32.INPUT[] { input }, INPUT.Size);
}
public static void SendKeyDown(VirtualKeyShort key)
public static void SendKeyDown(VirtualKey key)
{
var union = new InputUnion()
{
@ -179,7 +179,7 @@ namespace Remotely_Library.Win32
var input = new INPUT() { type = InputType.KEYBOARD, U = union };
SendInput(1, new INPUT[] { input }, INPUT.Size);
}
public static void SendKeyUp(VirtualKeyShort key)
public static void SendKeyUp(VirtualKey key)
{
var union = new InputUnion()
{

View File

@ -21,6 +21,10 @@
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.DependencyInjection;
using Remotely_ScreenCast;
using Remotely_ScreenCast.Capture;
using Remotely_ScreenCast.Enums;
@ -46,6 +47,7 @@ namespace Remotely_ScreenCast
Connection = new HubConnectionBuilder()
.WithUrl($"{Host}/RCDeviceHub")
.AddMessagePackProtocol()
.Build();
Connection.StartAsync().Wait();

View File

@ -39,6 +39,9 @@
<Reference Include="Costura, Version=3.3.2.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.3.3.2\lib\net40\Costura.dll</HintPath>
</Reference>
<Reference Include="MessagePack, Version=1.7.3.4, Culture=neutral, PublicKeyToken=b4a0369545f0a1be, processorArchitecture=MSIL">
<HintPath>..\packages\MessagePack.1.7.3.4\lib\net47\MessagePack.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AspNetCore.Connections.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNetCore.Connections.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll</HintPath>
</Reference>
@ -63,6 +66,9 @@
<Reference Include="Microsoft.AspNetCore.SignalR.Protocols.Json, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNetCore.SignalR.Protocols.Json.1.1.0\lib\netstandard2.0\Microsoft.AspNetCore.SignalR.Protocols.Json.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.1.1.0\lib\netstandard2.0\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Configuration, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll</HintPath>
</Reference>

View File

@ -52,7 +52,7 @@ namespace Remotely_ScreenCast.Sockets
//{
// Logger.Write($"Failed to convert key {keyCode}.");
//}
Win32Interop.SendKeyDown((User32.VirtualKeyShort)keyCode);
Win32Interop.SendKeyDown((User32.VirtualKey)keyCode);
}
});
@ -70,7 +70,7 @@ namespace Remotely_ScreenCast.Sockets
//{
// Logger.Write($"Failed to convert key {keyCode}.");
//}
Win32Interop.SendKeyUp((User32.VirtualKeyShort)keyCode);
Win32Interop.SendKeyUp((User32.VirtualKey)keyCode);
}
});
@ -89,8 +89,8 @@ namespace Remotely_ScreenCast.Sockets
//{
// Logger.Write($"Failed to convert key {keyCode}.");
//}
Win32Interop.SendKeyDown((User32.VirtualKeyShort)keyCode);
Win32Interop.SendKeyUp((User32.VirtualKeyShort)keyCode);
Win32Interop.SendKeyDown((User32.VirtualKey)keyCode);
Win32Interop.SendKeyUp((User32.VirtualKey)keyCode);
}
});

View File

@ -72,7 +72,7 @@ namespace Win32
UNICODE = 0x0004
}
public enum VirtualKeyShort : short
public enum VirtualKey : short
{
///<summary>
        ///Left mouse button
@ -763,8 +763,7 @@ namespace Win32
///<summary>
        ///Clear key
        ///</summary>
OEM_CLEAR = 0xFE,
SEMI_COLON = 0x3b
OEM_CLEAR = 0xFE
}
public enum ScanCodeShort : short
{
@ -1059,7 +1058,7 @@ namespace Win32
[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT
{
public VirtualKeyShort wVk;
public VirtualKey wVk;
public ScanCodeShort wScan;
public KEYEVENTF dwFlags;
public int time;

View File

@ -7,6 +7,7 @@ using System.Runtime.InteropServices;
using System.Text;
using static Win32.ADVAPI32;
using static Win32.User32;
using System.Windows.Forms;
namespace Win32
{
@ -184,7 +185,7 @@ namespace Win32
return SendInput(1, new User32.INPUT[] { input }, INPUT.Size);
}
public static void SendKeyDown(VirtualKeyShort key)
public static void SendKeyDown(VirtualKey key)
{
var union = new InputUnion()
{
@ -199,7 +200,7 @@ namespace Win32
var input = new INPUT() { type = InputType.KEYBOARD, U = union };
SendInput(1, new INPUT[] { input }, INPUT.Size);
}
public static void SendKeyUp(VirtualKeyShort key)
public static void SendKeyUp(VirtualKey key)
{
var union = new InputUnion()
{

View File

@ -2,6 +2,7 @@
<packages>
<package id="Costura.Fody" version="3.3.2" targetFramework="net472" />
<package id="Fody" version="4.0.2" targetFramework="net472" developmentDependency="true" />
<package id="MessagePack" version="1.7.3.4" targetFramework="net472" />
<package id="Microsoft.AspNetCore.Connections.Abstractions" version="2.2.0" targetFramework="net472" />
<package id="Microsoft.AspNetCore.Http.Connections.Client" version="1.1.0" targetFramework="net472" />
<package id="Microsoft.AspNetCore.Http.Connections.Common" version="1.1.0" targetFramework="net472" />
@ -10,6 +11,7 @@
<package id="Microsoft.AspNetCore.SignalR.Client.Core" version="1.1.0" targetFramework="net472" />
<package id="Microsoft.AspNetCore.SignalR.Common" version="1.1.0" targetFramework="net472" />
<package id="Microsoft.AspNetCore.SignalR.Protocols.Json" version="1.1.0" targetFramework="net472" />
<package id="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" version="1.1.0" targetFramework="net472" />
<package id="Microsoft.Extensions.Configuration" version="2.2.0" targetFramework="net472" />
<package id="Microsoft.Extensions.Configuration.Abstractions" version="2.2.0" targetFramework="net472" />
<package id="Microsoft.Extensions.Configuration.Binder" version="2.2.0" targetFramework="net472" />

View File

@ -23,12 +23,15 @@
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/signalr/signalr.js"></script>
<script src="~/lib/signalr/msgpack5.js"></script>
<script src="~/lib/signalr/signalr-protocol-msgpack.js"></script>
</environment>
<environment exclude="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/signalr/signalr.min.js"></script>
<script src="~/lib/signalr/msgpack5.min.js"></script>
<script src="~/lib/signalr/signalr-protocol-msgpack.min.js"></script>
</environment>
<script src="~/lib/adapter.js"></script>
</head>
<body>
<div class="remotely-header" title="Remotely">

View File

@ -4,71 +4,71 @@
<button id="closeOSKButton">X</button>
</div>
<div class="osk-row">
<div class="osk-key" alt-key="~">`</div>
<div class="osk-key" alt-key="!">1</div>
<div class="osk-key" alt-key="@@">2</div>
<div class="osk-key" alt-key="#">3</div>
<div class="osk-key" alt-key="$">4</div>
<div class="osk-key" alt-key="%">5</div>
<div class="osk-key" alt-key="^">6</div>
<div class="osk-key" alt-key="&amp;">7</div>
<div class="osk-key" alt-key="*">8</div>
<div class="osk-key" alt-key="(">9</div>
<div class="osk-key" alt-key=")">0</div>
<div class="osk-key" alt-key="_">-</div>
<div class="osk-key" alt-key="+">=</div>
<div class="osk-key" alt-key="~" keycode="192">`</div>
<div class="osk-key" alt-key="!" keycode="49">1</div>
<div class="osk-key" alt-key="@@" keycode="50">2</div>
<div class="osk-key" alt-key="#" keycode="51">3</div>
<div class="osk-key" alt-key="$" keycode="52">4</div>
<div class="osk-key" alt-key="%" keycode="53">5</div>
<div class="osk-key" alt-key="^" keycode="54">6</div>
<div class="osk-key" alt-key="&amp;" keycode="55">7</div>
<div class="osk-key" alt-key="*" keycode="56">8</div>
<div class="osk-key" alt-key="(" keycode="57">9</div>
<div class="osk-key" alt-key=")" keycode="48">0</div>
<div class="osk-key" alt-key="_" keycode="173">-</div>
<div class="osk-key" alt-key="+" keycode="61">=</div>
</div>
<div class="osk-row">
<div class="osk-key" alt-key="Q">q</div>
<div class="osk-key" alt-key="W">w</div>
<div class="osk-key" alt-key="E">e</div>
<div class="osk-key" alt-key="R">r</div>
<div class="osk-key" alt-key="T">t</div>
<div class="osk-key" alt-key="Y">y</div>
<div class="osk-key" alt-key="U">u</div>
<div class="osk-key" alt-key="I">i</div>
<div class="osk-key" alt-key="O">o</div>
<div class="osk-key" alt-key="P">p</div>
<div class="osk-key" alt-key="{">[</div>
<div class="osk-key" alt-key="}">]</div>
<div class="osk-key" alt-key="|">\</div>
<div class="osk-key" alt-key="Q" keycode="81">q</div>
<div class="osk-key" alt-key="W" keycode="87">w</div>
<div class="osk-key" alt-key="E" keycode="69">e</div>
<div class="osk-key" alt-key="R" keycode="82">r</div>
<div class="osk-key" alt-key="T" keycode="84">t</div>
<div class="osk-key" alt-key="Y" keycode="89">y</div>
<div class="osk-key" alt-key="U" keycode="85">u</div>
<div class="osk-key" alt-key="I" keycode="73">i</div>
<div class="osk-key" alt-key="O" keycode="79">o</div>
<div class="osk-key" alt-key="P" keycode="80">p</div>
<div class="osk-key" alt-key="{" keycode="219">[</div>
<div class="osk-key" alt-key="}" keycode="221">]</div>
<div class="osk-key" alt-key="|" keycode="220">\</div>
</div>
<div class="osk-row">
<div class="osk-key" alt-key="A">a</div>
<div class="osk-key" alt-key="S">s</div>
<div class="osk-key" alt-key="D">d</div>
<div class="osk-key" alt-key="F">f</div>
<div class="osk-key" alt-key="G">g</div>
<div class="osk-key" alt-key="H">h</div>
<div class="osk-key" alt-key="J">j</div>
<div class="osk-key" alt-key="K">k</div>
<div class="osk-key" alt-key="L">l</div>
<div class="osk-key" alt-key=":">;</div>
<div class="osk-key" alt-key="&quot;">'</div>
<div class="osk-key wide-key-sm">Enter</div>
<div class="osk-key" alt-key="A" keycode="65">a</div>
<div class="osk-key" alt-key="S" keycode="83">s</div>
<div class="osk-key" alt-key="D" keycode="68">d</div>
<div class="osk-key" alt-key="F" keycode="70">f</div>
<div class="osk-key" alt-key="G" keycode="71">g</div>
<div class="osk-key" alt-key="H" keycode="72">h</div>
<div class="osk-key" alt-key="J" keycode="74">j</div>
<div class="osk-key" alt-key="K" keycode="75">k</div>
<div class="osk-key" alt-key="L" keycode="76">l</div>
<div class="osk-key" alt-key=":" keycode="59">;</div>
<div class="osk-key" alt-key="&quot;" keycode="222">'</div>
<div class="osk-key wide-key-sm" keycode="13">Enter</div>
</div>
<div class="osk-row">
<div id="shiftKey" class="osk-key wide-key-sm">Shift</div>
<div class="osk-key" alt-key="Z">z</div>
<div class="osk-key" alt-key="X">x</div>
<div class="osk-key" alt-key="C">c</div>
<div class="osk-key" alt-key="V">v</div>
<div class="osk-key" alt-key="B">b</div>
<div class="osk-key" alt-key="N">n</div>
<div class="osk-key" alt-key="M">m</div>
<div class="osk-key" alt-key="<">,</div>
<div class="osk-key" alt-key=">">.</div>
<div class="osk-key" alt-key="?">/</div>
<div id="shiftKey" class="osk-key wide-key-sm" keycode="16">Shift</div>
<div class="osk-key" alt-key="Z" keycode="90">z</div>
<div class="osk-key" alt-key="X" keycode="88">x</div>
<div class="osk-key" alt-key="C" keycode="67">c</div>
<div class="osk-key" alt-key="V" keycode="86">v</div>
<div class="osk-key" alt-key="B" keycode="66">b</div>
<div class="osk-key" alt-key="N" keycode="78">n</div>
<div class="osk-key" alt-key="M" keycode="77">m</div>
<div class="osk-key" alt-key="<" keycode="188">,</div>
<div class="osk-key" alt-key=">" keycode="190">.</div>
<div class="osk-key" alt-key="?" keycode="191">/</div>
</div>
<div class="osk-row">
<div id="ctrlKey" class="osk-key">Ctrl</div>
<div id="altKey" class="osk-key">Alt</div>
<div class="osk-key wide-key-lg">Space</div>
<div class="osk-key">Left</div>
<div class="osk-key">Up</div>
<div class="osk-key">Down</div>
<div class="osk-key">Right</div>
<div class="osk-key">Backspace</div>
<div id="ctrlKey" class="osk-key" keycode="17">Ctrl</div>
<div id="altKey" class="osk-key" keycode="18">Alt</div>
<div class="osk-key wide-key-lg" keycode="32">Space</div>
<div class="osk-key" keycode="37">Left</div>
<div class="osk-key" keycode="38">Up</div>
<div class="osk-key" keycode="40">Down</div>
<div class="osk-key" keycode="39">Right</div>
<div class="osk-key" keycode="8">Backspace</div>
</div>
</div>
<script src="~/scripts/RemoteControl/OSK.js" type="module"></script>

View File

@ -54,6 +54,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="1.1.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="2.10.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.2" PrivateAssets="All" />

View File

@ -57,17 +57,17 @@ namespace Remotely_Server.Services
await DeviceHub.Clients.Client(serviceID).SendAsync("CtrlAltDel");
}
public async Task KeyDown(string key)
public async Task KeyDown(int key)
{
await RCDeviceHub.Clients.Client(ClientID).SendAsync("KeyDown", key, Context.ConnectionId);
}
public async Task KeyPress(string key)
public async Task KeyPress(int key)
{
await RCDeviceHub.Clients.Client(ClientID).SendAsync("KeyPress", key, Context.ConnectionId);
}
public async Task KeyUp(string key)
public async Task KeyUp(int key)
{
await RCDeviceHub.Clients.Client(ClientID).SendAsync("KeyUp", key, Context.ConnectionId);
}
@ -111,11 +111,11 @@ namespace Remotely_Server.Services
{
if (Context.User.Identity.IsAuthenticated)
{
await RCDeviceHub.Clients.Client(ClientID).SendAsync("ViewerDisconnected", Context.ConnectionId);
while (!OrganizationConnectionList.TryRemove(Context.ConnectionId, out var user))
{
await Task.Delay(1000);
}
await RCDeviceHub.Clients.Client(ClientID).SendAsync("ViewerDisconnected", Context.ConnectionId);
}
}
@ -124,9 +124,9 @@ namespace Remotely_Server.Services
await RCDeviceHub.Clients.Client(ClientID).SendAsync("SelectScreen", screenIndex, Context.ConnectionId);
}
public async Task SendScreenCastRequestToDevice(string clientID, string requesterName, RemoteControlMode remoteControlMode)
public async Task SendScreenCastRequestToDevice(string clientID, string requesterName, int remoteControlMode)
{
if (remoteControlMode == RemoteControlMode.Normal)
if ((RemoteControlMode)remoteControlMode == RemoteControlMode.Normal)
{
if (!RCDeviceSocketHub.AttendedSessionList.ContainsKey(clientID))
{

View File

@ -83,11 +83,13 @@ namespace Remotely_Server
services.AddSignalR(options =>
{
options.EnableDetailedErrors = IsDev;
}
).AddJsonProtocol(options =>
})
.AddJsonProtocol(options =>
{
options.PayloadSerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
});
})
.AddMessagePackProtocol();
services.AddLogging();
services.AddScoped<IEmailSender, EmailSender>();
services.AddScoped<EmailSender>();

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1438,7 +1438,7 @@ __webpack_require__.r(__webpack_exports__);
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Version token that will be replaced by the prepack command
/** The version of the SignalR client. */
var VERSION = "1.1.0";
var VERSION = "1.1.2";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,6 +7,7 @@ export class RCBrowserSockets {
Connect() {
this.Connection = new signalR.HubConnectionBuilder()
.withUrl("/RCBrowserHub")
.withHubProtocol(new signalR.protocols.msgpack.MessagePackHubProtocol())
.configureLogging(signalR.LogLevel.Information)
.build();
this.ApplyMessageHandlers(this.Connection);
@ -105,16 +106,23 @@ export class RCBrowserSockets {
UI.Screen2DContext.clearRect(0, 0, width, height);
});
hubConnection.on("ScreenCapture", (buffer, captureTime) => {
var img = new Image();
img.onload = () => {
lastFrameDelay = Date.now();
var frameDelay = Date.now() - new Date(captureTime).getTime();
if (frameDelay > 2000 && Date.now() - lastFrameDelay > 2000) {
this.SendFrameSkip(frameDelay * .25);
}
var url = window.URL.createObjectURL(new Blob([buffer]));
var img = document.createElement("img");
img.onload = function () {
UI.Screen2DContext.drawImage(img, 0, 0);
window.URL.revokeObjectURL(url);
};
img.src = "data:image/png;base64," + buffer;
img.src = url;
//var img = new Image();
//img.onload = () => {
// lastFrameDelay = Date.now();
// var frameDelay = Date.now() - new Date(captureTime).getTime();
// if (frameDelay > 2000 && Date.now() - lastFrameDelay > 2000) {
// this.SendFrameSkip(frameDelay * .25);
// }
// UI.Screen2DContext.drawImage(img, 0, 0);
//}
//img.src = "data:image/png;base64," + buffer;
});
hubConnection.on("ConnectionFailed", () => {
UI.ConnectButton.removeAttribute("disabled");

File diff suppressed because one or more lines are too long

View File

@ -13,6 +13,7 @@ export class RCBrowserSockets {
Connect() {
this.Connection = new signalR.HubConnectionBuilder()
.withUrl("/RCBrowserHub")
.withHubProtocol(new signalR.protocols.msgpack.MessagePackHubProtocol())
.configureLogging(signalR.LogLevel.Information)
.build();
@ -112,17 +113,24 @@ export class RCBrowserSockets {
UI.ScreenViewer.height = height;
UI.Screen2DContext.clearRect(0, 0, width, height);
});
hubConnection.on("ScreenCapture", (buffer: string, captureTime: string) => {
var img = new Image();
img.onload = () => {
lastFrameDelay = Date.now();
var frameDelay = Date.now() - new Date(captureTime).getTime();
if (frameDelay > 2000 && Date.now() - lastFrameDelay > 2000) {
this.SendFrameSkip(frameDelay * .25);
}
hubConnection.on("ScreenCapture", (buffer: Uint8Array, captureTime: Date) => {
var url = window.URL.createObjectURL(new Blob([buffer]));
var img = document.createElement("img");
img.onload = function () {
UI.Screen2DContext.drawImage(img, 0, 0);
}
img.src = "data:image/png;base64," + buffer;
window.URL.revokeObjectURL(url);
};
img.src = url;
//var img = new Image();
//img.onload = () => {
// lastFrameDelay = Date.now();
// var frameDelay = Date.now() - new Date(captureTime).getTime();
// if (frameDelay > 2000 && Date.now() - lastFrameDelay > 2000) {
// this.SendFrameSkip(frameDelay * .25);
// }
// UI.Screen2DContext.drawImage(img, 0, 0);
//}
//img.src = "data:image/png;base64," + buffer;
});
hubConnection.on("ConnectionFailed", () => {
UI.ConnectButton.removeAttribute("disabled");

View File

@ -7,8 +7,9 @@ var rcBrowserSockets = new RCBrowserSockets();
export const RemoteControl = new class {
constructor() {
this.RCBrowserSockets = rcBrowserSockets;
this.ClientID = queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : undefined;
this.ServiceID = queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : undefined;
this.ClientID = queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : "";
this.ServiceID = queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : "";
this.RequesterName = "";
}
};
export function ConnectToClient() {

View File

@ -1 +1 @@
{"version":3,"file":"RemoteControl.js","sourceRoot":"","sources":["RemoteControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;AAChD,IAAI,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI;IAAA;QAC7B,qBAAgB,GAAG,gBAAgB,CAAC;QACpC,aAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,cAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAGpG,CAAC;CAAA,CAAA;AAED,MAAM,UAAU,eAAe;IAC3B,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,aAAa,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC1D,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC9C,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,+BAA+B,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;IACjB,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAExC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;QACzB,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACrC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KAC5C;SACI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;QAC/B,EAAE,CAAC,cAAc,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE;YAC9B,EAAE,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/E,eAAe,EAAE,CAAC;SACrB;KACJ;AACL,CAAC,CAAA"}
{"version":3,"file":"RemoteControl.js","sourceRoot":"","sources":["RemoteControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,IAAI,WAAW,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;AAChD,IAAI,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI;IAAA;QAC7B,qBAAgB,GAAG,gBAAgB,CAAC;QACpC,aAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,cAAS,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzF,kBAAa,GAAW,EAAE,CAAC;IAC/B,CAAC;CAAA,CAAA;AAED,MAAM,UAAU,eAAe;IAC3B,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,aAAa,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC1D,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC9C,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,+BAA+B,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;IACjB,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAExC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;QACzB,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACrC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KAC5C;SACI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;QAC/B,EAAE,CAAC,cAAc,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,IAAI,WAAW,CAAC,eAAe,CAAC,EAAE;YAC9B,EAAE,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/E,eAAe,EAAE,CAAC;SACrB;KACJ;AACL,CAAC,CAAA"}

View File

@ -9,10 +9,10 @@ var rcBrowserSockets = new RCBrowserSockets();
export const RemoteControl = new class {
RCBrowserSockets = rcBrowserSockets;
ClientID = queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : undefined;
ServiceID = queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : undefined;
ClientID = queryString["clientID"] ? decodeURIComponent(queryString["clientID"]) : "";
ServiceID = queryString["serviceID"] ? decodeURIComponent(queryString["serviceID"]) : "";
Mode: RemoteControlMode;
RequesterName: string;
RequesterName: string = "";
}
export function ConnectToClient() {

472
package-lock.json generated Normal file
View File

@ -0,0 +1,472 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@aspnet/signalr": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.1.2.tgz",
"integrity": "sha512-Xu2ndFTWYhyE+TOCK3LkPWGmc5xGLezBKgGEchyOA++alJ6fdWJ8P/Wsb4Mmd1buzcxGLlIyjpLfUP20rrCHIg==",
"requires": {
"eventsource": "^1.0.7",
"request": "^2.88.0",
"ws": "^6.0.0"
}
},
"@aspnet/signalr-protocol-msgpack": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@aspnet/signalr-protocol-msgpack/-/signalr-protocol-msgpack-1.1.0.tgz",
"integrity": "sha512-AQv5AavWvoFz2iLSIDK1DAIXMNhQ1Jt1qRDouXxLKAKP13u8iFq7i3/MwJ30ShOBGBoL5/zn6pBlNjAzTmAsMA==",
"requires": {
"msgpack5": "^4.0.2"
}
},
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async-limiter": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz",
"integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"eventsource": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
"integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
"requires": {
"original": "^1.0.0"
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"requires": {
"ajv": "^6.5.5",
"har-schema": "^2.0.0"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"mime-db": {
"version": "1.38.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
"integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg=="
},
"mime-types": {
"version": "2.1.22",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
"integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
"requires": {
"mime-db": "~1.38.0"
}
},
"msgpack5": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/msgpack5/-/msgpack5-4.2.1.tgz",
"integrity": "sha512-Xo7nE9ZfBVonQi1rSopNAqPdts/QHyuSEUwIEzAkB+V2FtmkkLUbP6MyVqVVQxsZYI65FpvW3Bb8Z9ZWEjbgHQ==",
"requires": {
"bl": "^2.0.1",
"inherits": "^2.0.3",
"readable-stream": "^2.3.6",
"safe-buffer": "^5.1.2"
}
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
"integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
"requires": {
"url-parse": "^1.4.3"
}
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
},
"psl": {
"version": "1.1.31",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
"integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw=="
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
"querystringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz",
"integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg=="
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.0",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
}
},
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
},
"dependencies": {
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"requires": {
"punycode": "^2.1.0"
}
},
"url-parse": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz",
"integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==",
"requires": {
"querystringify": "^2.0.0",
"requires-port": "^1.0.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"ws": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz",
"integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==",
"requires": {
"async-limiter": "~1.0.0"
}
}
}
}