@keypo/typescript-sdk
Version:
A TypeScript SDK for using Keypo
44 lines (43 loc) • 1.95 kB
JavaScript
import { baseSepolia } from "viem/chains";
import { getKernelClient } from './utils/getKernelClient.js';
import { PermissionsRegistryAbi } from './utils/contracts.js';
import { deployPermissionedData } from './utils/deployPermissionedData.js';
import { mintOwnerNFT } from './utils/mintOwnerNFT.js';
export async function encrypt(dataIn, walletClient, metadataIn, authorization, config, debug) {
const { apiUrl, validatorAddress, registryContractAddress, bundlerRpcUrl } = config;
if (debug) {
console.log("validatorAddress", validatorAddress);
console.log("contractAddress", registryContractAddress);
console.log("apiUrl", apiUrl);
}
// Always send Uint8Array as the payload
const response = await fetch(`${apiUrl}/encryption`, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/octet-stream',
'X-Metadata': JSON.stringify(metadataIn),
},
body: dataIn
});
const data = await response.json();
if (debug) {
console.log("data", data);
}
const metadata = {
...metadataIn, // Keep all the type information from preProcess
name: data.name,
encryptedData: data.encryptedData,
};
if (debug) {
console.log("metadata", metadata);
}
const dataIdentifier = metadata.encryptedData.dataIdentifier;
const kernelClient = await getKernelClient(walletClient, baseSepolia, bundlerRpcUrl, authorization, debug);
await deployPermissionedData(dataIdentifier, JSON.stringify(metadata), kernelClient, walletClient.account.address, registryContractAddress, validatorAddress, PermissionsRegistryAbi, debug);
await mintOwnerNFT(kernelClient, registryContractAddress, dataIdentifier, PermissionsRegistryAbi, debug);
return {
dataCID: data.encryptedData.ipfsHash,
dataIdentifier: data.encryptedData.dataIdentifier,
};
}