@naugtur/classificationfs
v1.9.0-0
Published
Egnyte ClassificationFS specification and tooling
Readme
ClassificationFS API
API definition
https://storage.googleapis.com/pint-internal-static-hosting/classificationFS/docsCLFS.html
Use in your app along with other tools:
const APIdefinition = require("classificationfs/APIdefinition");Installation
npm install @naugtur/classificationfsClassificationFS SDK
Usage
const CLFSSDK = require("classificationfs/sdk");
CLFSSDK.use(options);options
|option|description| |---|---| |router|an express router to add the app to| |protocol|optional, defaults to "https"| |handlers|an object with handlers implementing operations on CLFS, see below for details| |fileStreamErrorHandler|a function to call when file content streaming errors out. signature: (err, req, res) | |authorization|an object related to Egnyte Protect oAuth process, see below for details| |flags|a map of boolean flags to be returned in discovery| |basePath|optional - if the router is mounted on a certain path, pass it here so that url generation tools work correctly|
handlers
You must implement at least getDiff or getFolder.
To generate URLs to subfolders in getFolder, use req.helpers.folderURL - it'll generate URLs pointing to the same folder endpoint with the id you choose to pass coming in as a param.
If getDiff or getFolder returns external file content URLs, that's all. Otherwise, getFile needs to be implemented to return the file stream and you can use req.helpers.fileURL to generate those URLs when listing folders.
report defaults to just console-logging the request body of the report. If you need something else, provide an implementation.cleanUp handles a request coming in from Egnyte when the source gets removed - it's optional and can be used to clean up any mappings or data.
getDiff,getFolder,cleanUp and report return:
{
body: JSON; //optional
headers: {
} //optional
}getFile returns:
{
stream: file content stream reference //required
headers: {} //optional
}helpers
req passed to the handler has an additional non-standard field helpers with the following:
folderUrl({ id }) => APPURL/fs/${id}
fileUrl({ id }) => APPURL/download/${id}
discoveryUrl({ storageId }) => APPURL/${storageId}
buildURL(anythingAtTheEnd) => APPURL/${anythingAtTheEnd}Scaffolding of an app
const CLFSSDK = require("classificationfs/sdk");
const express = require("express");
const app = express();
const { router, startAuth, getUrlHelpers } = CLFSSDK.use({
router: express.Router(),
authorization: {
oauthCredentials: {
clientId: "CLIENT_ID",
clientSecret: "CLIENT_SECRET",
},
onError: ({ error, res }) => {
},
tokenReceiver: ({ token, authProcessId, res, helpers }) => {
}
},
handlers: {
async getFolder(req) {
const id = req.params.folderId;
req.helpers.folderURL({id:"someother folder id"})
req.helpers.fileURL({id:"someother file id"})
return { body: JSONbody };
},
async getDiff(req) {
const cursor = req.query.cursor;
req.helpers.fileURL({id:"someother file id"})
return { body: JSONbody };
},
async getFile(req) {
const id = req.params.fileId;
return {
stream: storage.createReadStream(id),
headers: {
"content-type": "application/octet-stream",
"content-disposition": "attachment"
}
};
}
async report(req) {
console.log(req.body)
}
}
});
app.use(router);
app.listen(1337);
Mock server
npm install -g @naugtur/classificationfs
classificationfs-mock 8080OR
npx -p @naugtur/classificationfs classificationfs-mock 8080Port number is optional, defaults to 3000
I need it to be HTTPS
The best way to go is to expose the mock via ngrok. Install ngrok and run
ngrok http 3000it will proxy your http server over to a https URL.
Working with the repository
To run mockserver from repository, just do:
node mockserver/cli.jsEdit the API definitions in their respective folders
install node.js for tooling to work, then run npm install in the repo folder.
run npm start to generate html docs
run npm test to validate if the definition is syntactically correct.
