<import src="/mojo/public/sky/core.sky" as="core" />
<import src="/mojo/public/sky/connection.sky" as="connection" />
<script>
function wrapHandle(handle, service, client) {
  var clientClass = client && service.client.delegatingStubClass;
  var serviceConnection = new connection.Connection(
      handle, clientClass, service.proxyClass);
  if (serviceConnection.local)
      serviceConnection.local.delegate$ = client;
  serviceConnection.remote.connection$ = serviceConnection;
  return serviceConnection.remote;
}

function connectToService(url, service, client) {
  var handle = internals.connectToService(url, service.name);
  return wrapHandle(handle, service, client);
}

module.exports = {
  connectToService: connectToService,
  wrapHandle: wrapHandle,
};
</script>
