First
This commit is contained in:
commit
98e799b7df
21 changed files with 1936 additions and 0 deletions
100
services/aps.js
Normal file
100
services/aps.js
Normal file
|
@ -0,0 +1,100 @@
|
|||
const { SdkManagerBuilder } = require('@aps_sdk/autodesk-sdkmanager');
|
||||
const { AuthenticationClient, Scopes } = require('@aps_sdk/authentication');
|
||||
const { OssClient, CreateBucketsPayloadPolicyKeyEnum, CreateBucketXAdsRegionEnum } = require('@aps_sdk/oss');
|
||||
const { ModelDerivativeClient, View, Type } = require('@aps_sdk/model-derivative');
|
||||
const { APS_CLIENT_ID, APS_CLIENT_SECRET, APS_BUCKET } = require('../config.js');
|
||||
|
||||
const sdk = SdkManagerBuilder.create().build();
|
||||
const authenticationClient = new AuthenticationClient(sdk);
|
||||
const ossClient = new OssClient(sdk);
|
||||
const modelDerivativeClient = new ModelDerivativeClient(sdk);
|
||||
|
||||
const service = module.exports = {};
|
||||
|
||||
service.getInternalToken = async () => {
|
||||
const credentials = await authenticationClient.getTwoLeggedToken(APS_CLIENT_ID, APS_CLIENT_SECRET, [
|
||||
Scopes.DataRead,
|
||||
Scopes.DataCreate,
|
||||
Scopes.DataWrite,
|
||||
Scopes.BucketCreate,
|
||||
Scopes.BucketRead
|
||||
]);
|
||||
return credentials;
|
||||
};
|
||||
|
||||
service.getPublicToken = async () => {
|
||||
const credentials = await authenticationClient.getTwoLeggedToken(APS_CLIENT_ID, APS_CLIENT_SECRET, [
|
||||
Scopes.DataRead
|
||||
]);
|
||||
return credentials;
|
||||
};
|
||||
|
||||
service.ensureBucketExists = async (bucketKey) => {
|
||||
const { access_token } = await service.getInternalToken();
|
||||
try {
|
||||
await ossClient.getBucketDetails(access_token, bucketKey);
|
||||
} catch (err) {
|
||||
if (err.axiosError.response.status === 404) {
|
||||
await ossClient.createBucket(access_token, CreateBucketXAdsRegionEnum.Us, {
|
||||
bucketKey: bucketKey,
|
||||
policyKey: CreateBucketsPayloadPolicyKeyEnum.Persistent
|
||||
});
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
service.listObjects = async () => {
|
||||
await service.ensureBucketExists(APS_BUCKET);
|
||||
const { access_token } = await service.getInternalToken();
|
||||
let resp = await ossClient.getObjects(access_token, APS_BUCKET, { limit: 64 });
|
||||
let objects = resp.items;
|
||||
while (resp.next) {
|
||||
const startAt = new URL(resp.next).searchParams.get('startAt');
|
||||
resp = await ossClient.getObjects(access_token, APS_BUCKET, { limit: 64, startAt });
|
||||
objects = objects.concat(resp.items);
|
||||
}
|
||||
return objects;
|
||||
};
|
||||
|
||||
service.uploadObject = async (objectName, filePath) => {
|
||||
await service.ensureBucketExists(APS_BUCKET);
|
||||
const { access_token } = await service.getInternalToken();
|
||||
const obj = await ossClient.upload(APS_BUCKET, objectName, filePath, access_token);
|
||||
return obj;
|
||||
};
|
||||
|
||||
service.translateObject = async (urn, rootFilename) => {
|
||||
const { access_token } = await service.getInternalToken();
|
||||
const job = await modelDerivativeClient.startJob(access_token, {
|
||||
input: {
|
||||
urn,
|
||||
compressedUrn: !!rootFilename,
|
||||
rootFilename
|
||||
},
|
||||
output: {
|
||||
formats: [{
|
||||
views: [View._2d, View._3d],
|
||||
type: Type.Svf
|
||||
}]
|
||||
}
|
||||
});
|
||||
return job.result;
|
||||
};
|
||||
|
||||
service.getManifest = async (urn) => {
|
||||
const { access_token } = await service.getInternalToken();
|
||||
try {
|
||||
const manifest = await modelDerivativeClient.getManifest(access_token, urn);
|
||||
return manifest;
|
||||
} catch (err) {
|
||||
if (err.axiosError.response.status === 404) {
|
||||
return null;
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
service.urnify = (id) => Buffer.from(id).toString('base64').replace(/=/g, '');
|
Loading…
Add table
Add a link
Reference in a new issue