@hypernetlabs/hypernet-id-corporate-integration
Version:
Corporate integration package for Hypernet.ID.
90 lines • 3.67 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HypernetCorporateIntegration = void 0;
const stream_1 = require("stream");
const utils_1 = require("@hypernetlabs/utils");
const jwt_decode_1 = __importDefault(require("jwt-decode"));
const neverthrow_1 = require("neverthrow");
const configuration_1 = require("./configuration");
class HypernetCorporateIntegration {
constructor(corporateId, corporateSecret, config) {
this.corporateId = corporateId;
this.corporateSecret = corporateSecret;
this.config = config;
this.apiBaseUrl = configuration_1.defaultApiBaseUrl;
this.token = null;
this.tokenExpiration = 0;
this.ajaxUtils = new utils_1.AxiosAjaxUtils();
if ((config === null || config === void 0 ? void 0 : config.apiBaseUrl) != null) {
this.apiBaseUrl = config.apiBaseUrl;
}
}
uploadFileToCollection(collectionId, fileContent, fileName) {
return this.setCorporateAuthenticationToken().andThen(() => {
return this.getUploadLink(collectionId, fileName)
.andThen((url) => {
return this.uploadFileToBucket(url, fileContent);
})
.map(() => { });
});
}
createNFTInCollection(collectionId, metadata, identityId, emailAddress, accountAddress, imageFileName, animationFileName) {
return this.setCorporateAuthenticationToken().andThen(() => {
const requestUrl = new URL(`${this.apiBaseUrl}/collections/${collectionId}/nfts`);
return this.ajaxUtils
.post(requestUrl, {
metadata,
identityId,
emailAddress,
accountAddress,
imageFileName,
animationFileName,
})
.map((result) => {
return result.nftId;
});
});
}
setCorporateAuthenticationToken() {
if (this.getTokenRequired()) {
const requestUrl = new URL(`${this.apiBaseUrl}/token`);
return this.ajaxUtils
.post(requestUrl, {
corporateId: this.corporateId,
corporateSecret: this.corporateSecret,
})
.map((token) => {
this.token = token;
const decoded = (0, jwt_decode_1.default)(this.token);
this.tokenExpiration = decoded.exp;
this.ajaxUtils.setDefaultToken(this.token);
});
}
return (0, neverthrow_1.okAsync)(undefined);
}
getUploadLink(collectionId, fileName) {
const requestUrl = new URL(`${this.apiBaseUrl}/collections/${collectionId}/files/upload?filename=${fileName}`);
return this.ajaxUtils.get(requestUrl);
}
uploadFileToBucket(uploadUrl, fileBuffer) {
const requestUrl = new URL(uploadUrl);
const stremReadable = stream_1.Readable.from(fileBuffer);
return this.ajaxUtils
.put(requestUrl, stremReadable, {
headers: {
"Content-Type": "application/octet-stream",
},
})
.map(() => { });
}
getTokenRequired() {
// tokenExpiration - 10 Minutes < Now
return (this.token == null ||
(this.token != null && this.tokenExpiration - 600000 < Date.now()));
}
}
exports.HypernetCorporateIntegration = HypernetCorporateIntegration;
//# sourceMappingURL=HypernetCorporateIntegration.js.map