Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating TS Connector Docs for v0.9 tag #60

Merged
merged 3 commits into from
Oct 12, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 83 additions & 25 deletions registry/typescript-deno/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@ The Typescript (Deno) Connector allows a running connector to be inferred from a

The connector runs in the following manner:

* The typescript sources are assembled
* Dependencies are fetched into a vendor directory
* Inference is performed and output to schema.json
* The functions are served via HTTP locally in the background
* The connector is started in the foreground responding to requests
* Dependencies are fetched
* Inference is performed
* The functions are served via the [connector protocol](https://github.com/hasura/ndc-spec/tree/main#ndc-specification)

It assumes that dependencies are specified in accordance with [Deno](https://deno.com) conventions.

Expand Down Expand Up @@ -40,15 +38,70 @@ export function make_password_hash(pw: string): string {
* Only exported functions are exposed
* Functions tagged with `@pure` annotations are exposed as functions
* Those without `@pure` annotations are exposed as procedures
* Optional parameters are supported
* Exceptions can be thrown and will be reported to the user

## Function Development

For the best user-experience you should develop your functions in the following manner:

* Have [Deno](https://deno.com) installed
* Have [VSCode](https://code.visualstudio.com) installed
* Have the [Deno VSCode extension](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno) installed

An example session:

```
> tree
.
├── config.json
├── functions
├── index.ts
└── schema.json

> cat config.json
{
"functions": "./functions/index.ts",
"vendor": "./vendor",
"preVendor": true,
"schemaMode": "INFER",
"schemaLocation": "./functions/schema.json"
}

> cat functions/index.ts

export function hello(): string {
return "hello world";
}

function foo() {
}

> deno run -A --watch --check https://deno.land/x/[email protected]/mod.ts serve --configuration ./config.json
Watcher Process started.
Check https://deno.land/x/[email protected]/mod.ts
Running Connector.start
Check file:///Users/me/hasura/ndc-typescript-deno/scratch/deno_land_test/functions/index.ts
Inferring schema with map location ./vendor
Vendoring dependencies: /Users/me/bin/binaries/deno vendor --output /Users/me/hasura/ndc-typescript-deno/scratch/deno_land_test/vendor --force /Users/me/hasura/ndc-typescript-deno/scratch/deno_land_test/functions/index.ts
Skipping non-exported function: foo
Writing schema to ./functions/schema.json
{"level":30,"time":1697018006809,"pid":89762,"hostname":"spaceship.local","msg":"Server listening at http://0.0.0.0:8100"}
```

Once your connector is running locally you can use the `hasura3 tunnel` commands to make it available to your cloud projects for testing.

If you are happy with its behaviour you can deploy your connector vis `hasura3 connector` commands.


## Deployment

You will need:

* [V3 CLI](https://github.com/hasura/v3-cli) (With Logged in Session)
* [V3 CLI](https://github.com/hasura/v3-cli) (with a logged in session)
* [Connector Plugin](https://hasura.io/docs/latest/hasura-cli/connector-plugin/)
* Secret service token
* A configuration file
* A connector configuration file
* Secret service token (optional)

Your functions directory should be added as a volume to `/functions`

Expand All @@ -60,9 +113,9 @@ Create the connector:

```
hasura3 connector create my-cool-connector:v1 \
--github-repo-url https://github.com/hasura/ndc-typescript-deno/tree/v0.8 \
--github-repo-url https://github.com/hasura/ndc-typescript-deno/tree/v0.9 \
--config-file config.json \
--volume ./my-functions:/functions \
--volume ./functions:/functions \
--env SERVICE_TOKEN_SECRET=MY-SERVICE-TOKEN
```

Expand All @@ -88,28 +141,33 @@ Include the connector URL in your Hasura V3 project metadata (hml format).
Hasura cloud projects must also set a matching bearer token:

```yaml
kind: DataSource
name: sendgrid
dataConnectorUrl:
url: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
auth:
type: Bearer
token: "SUPER_SECRET_TOKEN_XXX123"
kind: DataConnector
version: v1
definition:
name: sendgrid
url:
singleUrl: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
headers:
Authorization:
value: "Bearer SUPER_SECRET_TOKEN_XXX123"
```

While you can specify the token inline as above, it is recommended to use the Hasura secrets functionality for this purpose:

```yaml
kind: DataSource
name: sendgrid
dataConnectorUrl:
url: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
auth:
type: Bearer
token:
valueFromSecret: CONNECTOR_TOKEN
kind: DataConnector
version: v1
definition:
name: sendgrid
url:
singleUrl: 'https://connector-9XXX7-hyc5v23h6a-ue.a.run.app'
headers:
Authorization:
valueFromSecret: BEARER_TOKEN_SECRET
```

(NOTE: This will require that the secret includes the `Bearer ` prefix.)


## Troubleshooting

Expand Down