Client for communicating with sv-filestorage
npm install @simpleview/sv-filestorage-clientClient 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:
``bash`
npm install @simpleview/sv-filestorage-client
Using yarn:
`bash`
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.
`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.
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:
`js
const { FileStoragePrefix } = require("@simpleview/sv-filestorage-client");
const { GraphServer } = require("@simpleview/sv-graphql-client");
module.exports = new GraphServer({ graphUrl: GRAPHQL_URL, prefixes: [FileStoragePrefix] });
`
TypeScript:
`ts
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:
`js`
const { filestorage } = require("./fileStorageGraphServer");
TypeScript:
`ts`
import { filestorage } from "./fileStorageGraphServer";
This method wraps the filestorage.buckets GraphQL query.
`js
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.
`js`
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.
`js`
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.
`js
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.
`js`
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.
`js`
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.
`js`
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.
`js`
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.
`js`
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.
`js`
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.
`js``
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
}
})
* sv-graphql-client
* sv-filestorage
For any assistance please reach out on the sv-filestorage Slack channel.