# Connect demo apps service (gRPC)

Service for downloading demo Connect apps

## Endpoints

### Get demo app download URL

gRPC `/nominal.connect.demo_apps.v1.ConnectDemoAppsService/GetDemoAppDownloadUrl`

Get a pre-signed URL for downloading a demo Connect app Not workspace-scoped: any session may call it.

Request: `GetDemoAppDownloadUrlRequest`

`sha256_checksum` string
:   Matches `^[a-f0-9]{64}$`.

Response: `GetDemoAppDownloadUrlResponse`

`url` string
:   ​

Request

**Python**

```python
import grpc
from nominal.protos.connect.demo_apps.v1 import connect_demo_apps_pb2, connect_demo_apps_pb2_grpc

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

request = connect_demo_apps_pb2.GetDemoAppDownloadUrlRequest(
    sha256_checksum="<sha256 checksum>",
)
response = connect_demo_apps_service.GetDemoAppDownloadUrl(request, metadata=auth)
print(response)
```

**Go**

```go
package main

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

	demo_appsv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/demo_apps/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()
	connectDemoAppsService := demo_appsv1.NewConnectDemoAppsServiceClient(conn)
	ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")

	request := &demo_appsv1.GetDemoAppDownloadUrlRequest{
		Sha256Checksum: "<sha256 checksum>",
	}
	response, err := connectDemoAppsService.GetDemoAppDownloadUrl(ctx, request)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(response)
}
```

Response

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

## Errors

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

| Code | Reason | Message |
| --- | --- | --- |
| `INVALID_ARGUMENT` | `CONNECT_DEMO_APPS_SERVICE_ERROR_INVALID_CHECKSUM` | Provided checksum is not valid. |
| `NOT_FOUND` | `CONNECT_DEMO_APPS_SERVICE_ERROR_UNAVAILABLE_FOR_ENVIRONMENT` | Demo apps not available for specified environment. |

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