diff --git a/CRIP/CRIP-HumanBenchmarkAimTrainer.md b/CRIP/CRIP-HumanBenchmarkAimTrainer.md new file mode 100644 index 0000000..0c403bf --- /dev/null +++ b/CRIP/CRIP-HumanBenchmarkAimTrainer.md @@ -0,0 +1,54 @@ +| proposal | title | description | author | discussions-to | status | type | category | created | requires | +|----------|---------------------------------|----------------------------------------------------------------|---------------------------|----------------|--------|-------------|----------|------------|----------| +| CRIP-12 | Human Benchmark Aim Trainer | Integration with Human Benchmark to verify Aim Trainer Score | Ritik Bhatt | | Draft | Integration | CRIP | 2024-07-07 | | + +## Title + +Human Benchmark Aim Trainer Integration + +## Introduction + +This proposal outlines the integration of Human Benchmark as a data provider for the Catoff-Reclaim integration project. The integration focuses on retrieving and processing the Aim Trainer Score from Human Benchmark, allowing users to verify their performance on the Catoff platform. This will enable users to utilize their Aim Trainer Score data for various challenges and verifications on Catoff. + +## External APIs Needed + +- **Human Benchmark API**: Currently, Human Benchmark doesn't provide a public API for accessing Aim Trainer scores, so this integration will use data extraction methods from the Human Benchmark app/web. + +## Use Cases + +1. **User Verification**: Verify the Aim Trainer Score on a user's Human Benchmark account. +2. **Challenge Participation**: Allow users to participate in challenges that require proof of their Aim Trainer Score on Human Benchmark. +3. **Performance Benchmarking**: Validate users' reflex and aiming performance based on their Aim Trainer Score. + +## Data Provider + +- **Name**: Human Benchmark Aim Trainer +- **Hash Value**: 0x9f83e4a3b5a9a71c3e6b6a9c8e8a9b6d2f8a4b6a9e8b6c8e7e9f9f7b6e8a9f8a + +## Code Snippet + +Below is a code snippet that demonstrates the key parts of the Human Benchmark integration. The full implementation should follow the service file template. + +**`services/HumanBenchmarkAimTrainerService.js`** + +```javascript +const { ReclaimServiceResponse } = require('../utils/reclaimServiceResponse'); + +exports.processHumanBenchmarkData = async (proof, providerName) => { + console.log("Proof is: ", proof[0]); + + const extractedParameters = JSON.parse(proof[0].claimData.context).extractedParameters; + + const lastUpdateTimeStamp = proof[0].claimData.timestampS; + const aimScore = extractedParameters.aimScore; + + console.log("The Aim Trainer Score on your Human Benchmark is:", aimScore); + + return new ReclaimServiceResponse( + providerName, + lastUpdateTimeStamp, + 'ritikbhatt', + aimScore, + proof[0] + ); +}; diff --git a/index.js b/index.js index df7fba0..bfbe55b 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,8 @@ const express = require('express') const bodyParser = require('body-parser') const reclaimController = require('./src/controllers/reclaimController') +require('dotenv').config(); + const app = express() app.use(bodyParser.json()) diff --git a/package.json b/package.json index ac9ddd6..dfe69c7 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@reclaimprotocol/js-sdk": "^1.3.6", "axios": "^1.7.2", "body-parser": "^1.20.2", + "chess-web-api": "^1.2.0", "dotenv": "^16.4.5", "express": "^4.19.2" }, diff --git a/src/services/HumanBenchmarkAimTrainerService.js b/src/services/HumanBenchmarkAimTrainerService.js new file mode 100644 index 0000000..5a0c113 --- /dev/null +++ b/src/services/HumanBenchmarkAimTrainerService.js @@ -0,0 +1,20 @@ +const { ReclaimServiceResponse } = require('../utils/reclaimServiceResponse'); + +exports.processHumanBenchmarkData = async (proof, providerName) => { + console.log("Proof is: ", proof[0]); + + const extractedParameters = JSON.parse(proof[0].claimData.context).extractedParameters; + + const lastUpdateTimeStamp = proof[0].claimData.timestampS; + const aimScore = extractedParameters.aimScore; + + console.log("The Aim Trainer Score on your Human Benchmark is:", aimScore); + + return new ReclaimServiceResponse( + providerName, + lastUpdateTimeStamp, + 'ritikbhatt', + aimScore, + proof[0] + ); +}; diff --git a/src/services/reclaimService.js b/src/services/reclaimService.js index b33006f..6b194ce 100644 --- a/src/services/reclaimService.js +++ b/src/services/reclaimService.js @@ -3,6 +3,7 @@ const { Reclaim } = require('@reclaimprotocol/js-sdk') const { RECLAIM_PROVIDER_ID, RECLAIM_APP_ID } = require('../utils/constants') const { processTwitterData } = require('./twitterService') const { processGitHubData } = require('./githubService') +const { processHumanBenchmarkData } = require('./HumanBenchmarkAimTrainerService') exports.signWithProviderID = async (userId, providerId) => { const providerName = RECLAIM_PROVIDER_ID[providerId] @@ -13,11 +14,11 @@ exports.signWithProviderID = async (userId, providerId) => { `Sending signature request to Reclaim for userId: ${userId} with providerName: ${providerName}` ) - try { - const reclaimClient = new Reclaim.ProofRequest(reclaimAppID) - await reclaimClient.buildProofRequest(providerId) + try { + const reclaimClient = new Reclaim.ProofRequest('0xC1767db91269f406efdFD2d4Cb0339E7FA92bCB2') + await reclaimClient.buildProofRequest('276ad22f-ae1e-4bb2-b4e2-6d9868c05ecc') reclaimClient.setSignature( - await reclaimClient.generateSignature(reclaimAppSecret) + await reclaimClient.generateSignature('0x5f7cd3bb16c7440356719f441b8d55dd7f0d5fbe4fb784e3201ac3d81e29ba92') ) const { requestUrl: signedUrl } = await reclaimClient.createVerificationRequest() @@ -34,6 +35,7 @@ exports.signWithProviderID = async (userId, providerId) => { } const handleReclaimSession = async (userId, reclaimClient, providerName) => { + console.log('Starting session') await reclaimClient.startSession({ onSuccessCallback: async proof => { console.log( @@ -49,6 +51,9 @@ const handleReclaimSession = async (userId, reclaimClient, providerName) => { case 'GITHUB_ACCOUNT_VERIFICATION': processedData = await processGitHubData(proof, providerName) break + case 'HUMANBENCHMARK_ACCOUNT_VERIFICATION': + processedData = await processHumanBenchmarkData(proof, providerName); + break default: throw new Error(`No handler for provider: ${providerName}`) } @@ -65,4 +70,5 @@ const handleReclaimSession = async (userId, reclaimClient, providerName) => { console.error(`Verification failed for userId: ${userId}`, error) }, }) -} + console.log('Ended session') +} \ No newline at end of file diff --git a/src/utils/constants.js b/src/utils/constants.js index 1c58669..417d092 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -1,9 +1,17 @@ exports.RECLAIM_PROVIDER_ID = { twitter: 'TWITTER_ANALYTICS_VIEWS', github: 'GITHUB_ACCOUNT_VERIFICATION', + humanbenchmark: 'HUMANBENCHMARK_ACCOUNT_VERIFICATION' } exports.RECLAIM_APP_ID = { TWITTER_ANALYTICS_VIEWS: 'your-twitter-app-id', GITHUB_ACCOUNT_VERIFICATION: 'your-github-app-id', + HUMANBENCHMARK_ACCOUNT_VERIFICATION: 'your-humanbenchmark-app-id' } + +exports.PROVIDER_ID = { + twitter: 'twitter-provider-id', + github: 'github-provider-id', + humanbenchmark: 'humanbenchmark-provider-id' +} \ No newline at end of file