@appliedblockchain/silentdata-node
v0.4.0
Published
Node.js library for Silent Data
Downloads
26
Maintainers
Keywords
Readme
Silent Data Node.js Library
Node.js library to interact with Silent Data.
Silent Data leverages hardware secure enclaves with attestation, in particular, Intel SGX in order to enable privacy-preserving retrieval and processing of off-chain data, and generation of cryptographic proofs that are verifiable in blockchain smart contracts.
Installation
npm install @appliedblockchain/silentdata-node
# or
yarn add @appliedblockchain/silentdata-nodeUsage
Supported check types: balance, income, instagram and kyc.
Supported blockchains: algorand, polkadot and solana.
Supported countries for balance and income checks: CA, DE, ES, FR, GB, IE, IT, NL and US.
Start
// with ECMAScript module format:
import { silentdata } from 'silentdata'
// with CommonJS module format:
const { silentdata } = require('silentdata')
const silentdataClient = silentdata(
{
baseUrl: process.env.SILENTDATA_BASE_URL,
clientId: process.env.SILENTDATA_CLIENT_ID,
clientSecret: process.env.SILENTDATA_CLIENT_SECRET,
}
);Using checks defaults:
import { silentdata } from 'silentdata'
const silentdataClient = silentdata(
{
baseUrl: process.env.SILENTDATA_BASE_URL,
clientId: process.env.SILENTDATA_CLIENT_ID,
clientSecret: process.env.SILENTDATA_CLIENT_SECRET,
},
{
checks: {
redirectUrl: "https://redirect-url.com",
webhookUrl: "https://webhook-url.com",
},
}
);Checks
To override redirectUrl and webhookUrl from defaults pass new values inside data object.
Create a balance check:
import { CheckType, CheckBlockchain, CheckCountry } from 'silentdata'
const response = await silentdataClient.checks.create({
type: CheckType.balance,
data: {
blockchain: CheckBlockchain.solana,
walletAddress: "55S3CXGZnQbU6a7SMzbPvyCWg4v8CCUpJMv8tUB5zvMP",
country: CheckCountry.gb,
minimumBalance: 500,
},
})
const { id, url } = response.dataCreate an income check:
import { CheckType, CheckBlockchain, CheckCountry } from 'silentdata'
const response = await silentdataClient.checks.create({
type: CheckType.income,
data: {
blockchain: CheckBlockchain.solana,
walletAddress: "55S3CXGZnQbU6a7SMzbPvyCWg4v8CCUpJMv8tUB5zvMP",
country: CheckCountry.gb,
minimumIncome: 500,
},
})
const { id, url } = response.dataCreate an instagram check:
import { CheckType, CheckBlockchain } from 'silentdata'
const response = await silentdataClient.checks.create({
type: CheckType.instagram,
data: {
blockchain: CheckBlockchain.solana,
walletAddress: "55S3CXGZnQbU6a7SMzbPvyCWg4v8CCUpJMv8tUB5zvMP",
},
})
const { id, url } = response.dataCreate a kyc check:
import { CheckType, CheckBlockchain } from 'silentdata'
const response = await silentdataClient.checks.create({
type: CheckType.kyc,
data: {
blockchain: CheckBlockchain.solana,
walletAddress: "55S3CXGZnQbU6a7SMzbPvyCWg4v8CCUpJMv8tUB5zvMP",
},
})
const { id, url } = response.dataRead a check by id:
import { CheckType } from 'silentdata'
const response = await silentdataClient.checks.readById({
type: CheckType.instagram,
id,
})
const check = response.data.checkRead checks:
import { CheckType } from 'silentdata'
const response = await silentdataClient.checks.read({
type: CheckType.instagram,
limit: 10,
offset: 1,
})
const checks = response.data.checksDelete a check by id:
import { CheckType } from 'silentdata'
const response = await silentdataClient.checks.delete({
type: CheckType.instagram,
id,
})
const isDeleted = response.dataCheck resource:
import { CheckType } from 'silentdata'
const response = await silentdataClient.checks.readById({
type: CheckType.instagram,
id,
})
const check = response.data.check
const {
id,
date,
signingKey,
signature,
rawData,
error: { code, message },
} = check.data
const isCancelled = check.isCancelled()
const isCompleted = check.isCompleted()
const isError = check.isError()
const isPending = check.isPending()
const isInProgress = check.isInProgress()
const isCertified = check.isCertified()Check verification:
import { VerifyCheckError, VerifyCheckErrorCode } from 'silentdata'
try {
await check.verify()
} catch (error: VerifyCheckError) {
if (error.code === VerifyCheckErrorCode.invalid_signature) {
// handle invalid signature error
}
// handle other errors
}Check balance certificate data:
const {
check_hash,
id,
timestamp,
initiator_pkey,
certificate_hash,
currency_code,
comparison_value,
server_timestamp,
server_common_name,
} = balanceCheck.getCertificateDataAsJSON()Check income certificate data:
const {
check_hash,
id,
timestamp,
initiator_pkey,
certificate_hash,
currency_code,
comparison_value,
server_timestamp,
server_common_name,
} = incomeCheck.getCertificateDataAsJSON()Check instagram certificate data:
const {
check_hash,
id,
timestamp,
initiator_pkey,
certificate_hash,
ig_username,
ig_account_type
} = instagramCheck.getCertificateDataAsJSON()Check kyc certificate data:
const {
check_hash,
id,
timestamp,
initiator_pkey,
certificate_hash,
check_timestamp,
subject_id
} = kycCheck.getCertificateDataAsJSON()Enclaves
Read an enclave by check signingKey:
import { CheckType } from 'silentdata'
const response = await silentdataClient.enclaves.read({
signingKey: check.data.signingKey
});
const enclave = response.data.enclave
const {
date,
mrenclave,
iasCertChain,
iasReport,
iasSignature,
publicKeys
} = enclave.data
const isActive = enclave.isActive()
const isRevoked = enclave.isRevoked()
const isRetired = enclave.isRetired()
for (const { publicKey, algorithm, usage } of publicKeys) {}Enclave verification:
import { VerifyEnclaveError, VerifyEnclaveErrorCode } from 'silentdata'
try {
await enclave.verify()
} catch (error: VerifyEnclaveError) {
if (error.code === VerifyEnclaveErrorCode.invalid_signature) {
// handle invalid signature error
}
// handle other errors
}