Client for communicating with the sv-orion
GraphQL system.
It is build in TypeScript and has one peer dependency of @simpleview/sv-graphql-client
.
The expectation is that this application will be installed in Linux using sv-kubernetes.
Using npm:
npm install @simpleview/sv-orion-client
Using yarn:
yarn install @simpleview/sv-orion-client
To update to the latest version, rerun the install command.
Interactions with sv-orion
require authentication as a Simpleview user.
Use a Google Service Account when interacting with the service on behalf of a product.
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.
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.
OrionPrefix
can be loaded into the sv-graphql-client
GraphServer
to use as a client library for accessing orion
in GraphQL.
JavaScript:
const { OrionPrefix } = require("@simpleview/sv-orion-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");
module.exports = new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [OrionPrefix] });
TypeScript:
import { OrionPrefix } from "@simpleview/sv-orion-client";
import { GraphServer } from "@simpleview/sv-graphql-client";
export default new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [OrionPrefix] });
Where you are making server requests:
JavaScript:
const { orion } = require("./orionGraphServer");
TypeScript:
import { orion } from "./orionGraphServer";
This method wraps the orion.tables
GraphQL query.
const result = await orion.tables({
fields: `
count
docs {
name
fields
}
`,
filter: {
name: "your_table_name"
},
context: {
acct_id: "sv-all",
token // from serviceAccountToken call
}
});
This method wraps the orion.tables_insert
GraphQL mutation.
const result = await orion.tables_insert({
input: {
name: "your_table_name",
fields: [
{
name: "name",
type: "string"
},
{
name: "locations",
type: "object",
mode: "repeated",
fields: [
{
name: "latitude",
type: "number"
},
{
name: "longitude",
type: "number"
}
]
}
],
additional_fields: ["timestamp", "user_agent", "referer"]
},
fields: "success message doc { name fields }"
context: {
acct_id: "sv-all",
token // from serviceAccountToken call
}
});
This method wraps the orion.remove
GraphQL mutation.
const result = await orion.tables_field_insert({
input: {
name: "your_table_name"
},
fields: "success message",
context: {
acct_id: "sv-all",
token // from serviceAccountToken call
}
});
This method wraps the orion.tables_field_insert
GraphQL mutation.
const result = await orion.tables_field_insert({
input: {
name: "your_table_name",
field: {
name: "new_field",
type: "string"
}
},
fields: "success message doc { name fields }"
context: {
acct_id: "sv-all",
token // from serviceAccountToken call
}
});
This method wraps the orion.tables_additional_field_insert
GraphQL mutation.
const result = await orion.tables_additional_field_insert({
input: {
name: "your_table_name",
additional_field: "timestamp"
},
fields: "success message doc { name fields }",
context: {
acct_id: "sv-all",
token // from serviceAccountToken call
}
});
This method wraps the orion.search
GraphQL query.
const = await orion.search({
filter: {
table: "test1",
fields: ["name", "locations", "timestamp"]
where: [
{
field: "name",
operator: "eq",
value: "required_value"
},
{
field: "timestamp",
operator: "gt",
value: "2023-01-01T09:00:00.000Z"
}
},
options: {
limit: 1,
sort: {
field: "timestamp",
dir: "asc"
}
},
fields: "docs count",
context: {
token // from serviceAccountToken call
}
})
This method wraps the orion.log
GraphQL mutation.
const result = await orion.log({
input: {
table: "your_table_name",
entries: [
{
name: "entry 1",
count: 23
},
{
name: "entry 2",
count: 34
}
]
},
fields: "success message results { success message entry } errors { success message entry }",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
For any assistance please reach out on the Microservices Support Teams channel.