# Connect download service (gRPC)

Service for downloading Connect binaries

## Endpoints

### Get latest connect uri

gRPC `/nominal.connect.download.v1.ConnectDownloadService/GetLatestConnectUri`

Get a pre-signed URL for downloading the latest version of Connect for a given platform Scoped to the caller’s org, which picks the release channel. Any session may call it.

Request: `GetLatestConnectUriRequest`

`platform` string, one of `macos`, `macos-pkg`, `windows`, `ubuntu`
:   One of `macos`, `macos-pkg`, `windows`, `ubuntu`.

Response: `GetLatestConnectUriResponse`

`uri` string
:   ​

Request

**Python**

```python
import grpc
from nominal.protos.connect.download.v1 import connect_download_pb2, connect_download_pb2_grpc

channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_download_service = connect_download_pb2_grpc.ConnectDownloadServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]

request = connect_download_pb2.GetLatestConnectUriRequest(platform="macos")
response = connect_download_service.GetLatestConnectUri(request, metadata=auth)
print(response)
```

**Go**

```go
package main

import (
	"context"
	"crypto/tls"
	"fmt"
	"log"

	downloadv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/download/v1"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
	"google.golang.org/grpc/metadata"
)

func main() {
	conn, err := grpc.NewClient("api.gov.nominal.io:443",
		grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()
	connectDownloadService := downloadv1.NewConnectDownloadServiceClient(conn)
	ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")

	request := &downloadv1.GetLatestConnectUriRequest{
		Platform: "macos",
	}
	response, err := connectDownloadService.GetLatestConnectUri(ctx, request)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(response)
}
```

Response

```json
{
  "uri": "<uri>"
}
```

### Get latest version

gRPC `/nominal.connect.download.v1.ConnectDownloadService/GetLatestVersion`

Get the latest version string of Connect for a given platform Scoped to the caller’s org, which picks the release channel. Any session may call it.

Request: `GetLatestVersionRequest`

`platform` string, one of `macos`, `macos-pkg`, `windows`, `ubuntu`
:   One of `macos`, `macos-pkg`, `windows`, `ubuntu`.

Response: `GetLatestVersionResponse`

`version` string
:   ​

Request

**Python**

```python
import grpc
from nominal.protos.connect.download.v1 import connect_download_pb2, connect_download_pb2_grpc

channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_download_service = connect_download_pb2_grpc.ConnectDownloadServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]

request = connect_download_pb2.GetLatestVersionRequest(platform="macos")
response = connect_download_service.GetLatestVersion(request, metadata=auth)
print(response)
```

**Go**

```go
package main

import (
	"context"
	"crypto/tls"
	"fmt"
	"log"

	downloadv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/download/v1"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"
	"google.golang.org/grpc/metadata"
)

func main() {
	conn, err := grpc.NewClient("api.gov.nominal.io:443",
		grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()
	connectDownloadService := downloadv1.NewConnectDownloadServiceClient(conn)
	ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")

	request := &downloadv1.GetLatestVersionRequest{
		Platform: "macos",
	}
	response, err := connectDownloadService.GetLatestVersion(ctx, request)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(response)
}
```

Response

```json
{
  "version": "<version>"
}
```

## Errors

[Errors](https://dev.nominal.io/api/grpc.md#errors) shows how these errors are sent.

| Code | Reason | Message |
| --- | --- | --- |
| `NOT_FOUND` | `CONNECT_DOWNLOAD_SERVICE_ERROR_CONNECT_NOT_AVAILABLE` | Connect not available for download on this stack. Please contact support. |

Page design based on [Scalar](https://scalar.com), MIT License.
