102 lines
3.1 KiB
JavaScript
102 lines
3.1 KiB
JavaScript
import { AuthenticationClient, Scopes } from '@aps_sdk/authentication';
|
|
import { ModelDerivativeClient, View, OutputType } from '@aps_sdk/model-derivative';
|
|
import { OssClient, Region, PolicyKey } from '@aps_sdk/oss';
|
|
|
|
const apsClientId = 'PkqB8KlPGekLGKElPSjPhC9C2NGyXMN64QVhPSaqUhV46zEn';
|
|
const apsClientSecret = 'Jr70CpXFaV2PRd9lux3ZXBKpSMwFsyO6xq1Y7AJy1Q4xcK6nZMLq20KB8SlipC4Z';
|
|
const apsBucket = `${apsClientId.toLowerCase()}-basic-app`;
|
|
const authenticationClient = new AuthenticationClient();
|
|
const ossClient = new OssClient();
|
|
const modelDerivativeClient = new ModelDerivativeClient();
|
|
|
|
async function getInternalToken() {
|
|
const credentials = await authenticationClient.getTwoLeggedToken(
|
|
apsClientId,
|
|
apsClientSecret,
|
|
[Scopes.DataRead, Scopes.DataCreate, Scopes.DataWrite, Scopes.BucketCreate, Scopes.BucketRead],
|
|
);
|
|
return credentials.access_token;
|
|
}
|
|
|
|
export const getViewerToken = async () => {
|
|
return await authenticationClient.getTwoLeggedToken(apsClientId, apsClientSecret, [
|
|
Scopes.ViewablesRead,
|
|
]);
|
|
};
|
|
|
|
export const ensureBucketExists = async (bucketKey) => {
|
|
const accessToken = await getInternalToken();
|
|
try {
|
|
await ossClient.getBucketDetails(bucketKey, { accessToken });
|
|
} catch (err) {
|
|
if (err.axiosError.response.status === 404) {
|
|
await ossClient.createBucket(
|
|
Region.Us,
|
|
{ bucketKey: bucketKey, policyKey: PolicyKey.Persistent },
|
|
{ accessToken },
|
|
);
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
|
|
export const listObjects = async () => {
|
|
await ensureBucketExists(apsBucket);
|
|
const accessToken = await getInternalToken();
|
|
let resp = await ossClient.getObjects(apsBucket, { limit: 64, accessToken });
|
|
let objects = resp.items;
|
|
while (resp.next) {
|
|
const startAt = new URL(resp.next).searchParams.get('startAt');
|
|
resp = await ossClient.getObjects(apsBucket, { limit: 64, startAt, accessToken });
|
|
objects = objects.concat(resp.items);
|
|
}
|
|
return objects;
|
|
};
|
|
|
|
export const uploadObject = async (objectName, buffer) => {
|
|
await ensureBucketExists(apsBucket);
|
|
const accessToken = await getInternalToken();
|
|
const obj = await ossClient.uploadObject(apsBucket, objectName, buffer, { accessToken });
|
|
return obj;
|
|
};
|
|
|
|
export const translateObject = async (urn, rootFilename) => {
|
|
const accessToken = await getInternalToken();
|
|
const job = await modelDerivativeClient.startJob(
|
|
{
|
|
input: {
|
|
urn,
|
|
compressedUrn: !!rootFilename,
|
|
rootFilename,
|
|
},
|
|
output: {
|
|
formats: [
|
|
{
|
|
views: [View._2d, View._3d],
|
|
type: OutputType.Svf2,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{ accessToken },
|
|
);
|
|
return job.result;
|
|
};
|
|
|
|
export const getManifest = async (urn) => {
|
|
const accessToken = await getInternalToken();
|
|
try {
|
|
const manifest = await modelDerivativeClient.getManifest(urn, { accessToken });
|
|
return manifest;
|
|
} catch (err) {
|
|
if (err.axiosError.response.status === 404) {
|
|
return null;
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
|
|
export const urnify = (id) => Buffer.from(id).toString('base64').replace(/=/g, '');
|