Client for communicating with the sv-filestorage
GraphQL system.
It is built 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-filestorage-client
Using yarn:
yarn install @simpleview/sv-filestorage-client
To update to the latest version, rerun the install command.
Interactions with sv-filestorage
require authentication as a Simpleview user or a user with appropriate filestorage permissions.
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.
FileStoragePrefix
can be loaded into the sv-graphql-client
GraphServer
to use as a client library for accessing filestorage
in GraphQL.
JavaScript:
const { FileStoragePrefix } = require("@simpleview/sv-filestorage-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");
module.exports = new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [FileStoragePrefix] });
TypeScript:
import { FileStoragePrefix } from "@simpleview/sv-filestorage-client";
import { GraphServer } from "@simpleview/sv-graphql-client";
export default new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [FileStoragePrefix] });
Where you are making server requests:
JavaScript:
const { filestorage } = require("./fileStorageGraphServer");
TypeScript:
import { filestorage } from "./fileStorageGraphServer";
This method wraps the filestorage.buckets
GraphQL query.
const result = await filestorage.buckets({
fields: `
count
docs {
acct_id
name
storage_class
versioning
maximum_size
}
`,
filter: {
name: "your_bucket_name"
},
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.buckets_upsert
GraphQL mutation.
const result = await filestorage.buckets_insert({
input: {
id: "5c8c37b5df622c0064491fca",
name: "your_bucket_name",
storage_class: autoclass,
versioning: false,
maximum_size: 10000
},
fields: "success message doc { id acct_id name storage_class versioning minimum_size }"
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.buckets_remove
GraphQL mutation.
const result = await filestorage.buckets_remove({
input: {
name: "your_bucket_name"
},
fields: "success message",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.clouds
GraphQL query.
const result = await filestorage.clouds({
fields: `
count
docs {
acct_id
usage
}
`,
filter: {
all_accounts: true
},
context: {
acct_id: "sv-all",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.file
Graphql query.
const result = await filestorage.file({
id: "gcp://bucket_name/61fdc7a5-573d-4e19-865a-500b0e94407a-your_file_name",
fields: "id acct_id ... on filestorage_file_gcp { content_type generation size created updated deleted last_accessed metadata }"
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.files
GraphQL query.
const result = await filestorage.files({
input: {
prefix: "gcp://bucket_name/images/landscape/"
},
options: {
versions: true
}
fields: "count docs { id acct_id ... on filestorage_file_gcp { content_type generation size created updated deleted last_accessed metadata } }"
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.files_upload_start
GraphQL mutation.
const result = await filestorage.files_upload_start({
input: {
name: "gcp://your_bucket_name/your_file_name",
metadata: {
property: "value"
}
},
fields: "success message id",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.files_upload_update_start
GraphQL mutation.
const result = await filestorage.files_upload_update_start({
input: {
id: "gcp://your_bucket_name/415b7682-8941-448a-bece-cca22eb10837-your_file_name",
metadata: {
property: "value"
}
},
fields: "success message",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.files_upload_chunk
GraphQL mutation.
const result = await filestorage.files_upload_chunk({
input: {
id: "gcp://your_bucket_name/61fdc7a5-573d-4e19-865a-500b0e94407a-your_file_name",
data: "base64EncodedData"
},
fields: "success message",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.files_upload_end
GraphQL mutation.
const result = await filestorage.files_upload_end({
input: {
id: "gcp://your_bucket_name/61fdc7a5-573d-4e19-865a-500b0e94407a-your_file_name"
},
fields: "success message doc { acct_id id metadata created updated }",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
});
This method wraps the filestorage.files_remove
GraphQL mutation.
const = await filestorage.files_remove({
input: {
id: "gcp://your_bucket_name/61fdc7a5-573d-4e19-865a-500b0e94407a-your_file_name"
},
fields: "success message",
context: {
acct_id: "your_acct_id",
token // from serviceAccountToken call
}
})
For any assistance please reach out on the sv-filestorage Slack channel.