npm package: @simpleview/sv-godaddy-client
Description: Client for communicating with sv-godaddy
Author: david Lopez
Latest version: 1.3.0

# sv-godaddy-client

Client for communicating with the `sv-godaddy` GraphQL system.

It is build in TypeScript and has one peer dependency of `@simpleview/sv-graphql-client`.

## OS Support

The expectation is that this application will be installed in Linux using [sv-kubernetes](https://github.com/simpleviewinc/sv-kubernetes/).

## Prerequisites

* [sv-graphql-client](https://github.com/simpleviewinc/sv-graphql-client/)

## Install

Using npm:
```bash
npm install @simpleview/sv-godaddy-client
```

Using yarn:
```bash
yarn install @simpleview/sv-godaddy-client
```

## Update

To update to the latest version, rerun the install command.

## Authentication Requirements

Interactions with `sv-godaddy` require authentication as a Simpleview user. 

Use a Google Service Account when interacting with the service on behalf of a product.

```js
const { AuthPrefix } = require("@simpleview/sv-auth-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");

async function serviceAccountToken() {
	const service_account = JSON.parse(SERVICE_ACCOUNT_JSON);

	const { auth } = new GraphServer({
		graphUrl : AUTH_GRAPHQL_URL,
		prefixes : [AuthPrefix]
	});

	// authorize the service_account return the token
	const { token } = await auth.login_service_account({
		input: {
			email : service_account.client_email,
			private_key : service_account.private_key
		},
		fields : `
			success
			token
		`
	});
	
	return token;
}
```

The `token` should be added to the `context` for each function call.

## Implementation & Usage

To see the input parameters and output fields of an endpoint, view the Schema in the GraphQL Explorer at https://graphql.simpleviewinc.com/ for the corresponding GraphQL query.

## GodaddyPrefix

`GodaddyPrefix` can be loaded into the `sv-graphql-client` `GraphServer` to use as a client library for accessing `godaddy` in GraphQL.

JavaScript:
```js
const { GodaddyPrefix } = require("@simpleview/sv-godaddy-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");

module.exports = new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [GodaddyPrefix] });
```

TypeScript:
```ts
import { GodaddyPrefix } from "@simpleview/sv-godaddy-client";
import { GraphServer } from "@simpleview/sv-graphql-client";

export default new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [GodaddyPrefix] });
```

Where you are making server requests:

JavaScript:
```js
const { godaddy } = require("./godaddyGraphServer");
```

TypeScript:
```ts
import { godaddy } from "./godaddyGraphServer";
```

### GodaddyPrefix.list

This method wraps the `godaddy.list` GraphQL query.

```js
const result = await godaddy.list({
	fields: `
		count
		docs {
			type
			data
			ttl
			name
		}
	`,
	filter: {
		zone: "simpleviewinc.com"
	},
	context: {
		acct_id: "sv-all",
		token // from serviceAccountToken call
	}
});
```

For a request with invalid input such as an unknown zone, an error will be thrown such as `The given domain is not registered, or does not have a zone file`.

For a request with invalid input such as an invalid url, an error will be thrown such
`Variable "$input" got invalid value "http:/%www.google.com" at "input.urls"; Expected type "webrisk_url". Invalid URL`

### GodaddyPrefix.upsert

This method wraps the `godaddy.upsert` GraphQL mutation.

```js
const upsertion = await godaddy.upsert({
	fields: `
		success
		message
	`,
	input: {
		data: "your-data",
		name: "your-name",
		zone: "simpleviewinc.com",
		type: "CNAME",
		ttl: 1000
	},
	context: {
		acct_id: "sv-all",
		token // from serviceAccountToken call
	}
});
```

### GodaddyPrefix.remove

This method wraps the `godaddy.remove` GraphQL mutation.

```js
const result = await godaddy.remove({
	fields: "success message",
	input: {
		name: "your-name",
		zone: "simpleviewinc.com",
		type: "CNAME",
	},
	context: {
		acct_id: "sv-all",
		token // from serviceAccountToken call
	}
});
```

## Versions

* 1.0.0

## Related Documentation

* [sv-graphql-client](https://github.com/simpleviewinc/sv-graphql-client/)
* [sv-godaddy](https://github.com/simpleviewinc/sv-godaddy/)

## Troubleshooting

For any assistance please reach out on the [Microservices Support](https://teams.microsoft.com/l/channel/19%3A78cf02f015c543748f2488a4742290f1%40thread.tacv2/Microservices%20Support?groupId=42dd24e6-f6ae-4520-9092-cc21b3b3b730&tenantId=cc1eb3c2-fc0c-4a83-8e6a-8d886b4faeab) Teams channel.