Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Groww Balances on Hold #58

Open
wants to merge 20 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions CRIP/CRIP-GrowwBalanceOnHold.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
| proposal | title | description | author | discussions-to | status | type | category | created | requires |
|----------|-----------------------------|-----------------------------------------------------------|---------------------------|----------------|--------|-------------|----------|------------|----------|
| CRIP-10 | Groww Balance On Hold | Integration with Groww to verify balance on hold | Ritik Bhatt <[email protected]> | | Draft | Integration | CRIP | 2024-07-07 | |

## Title

Groww Balance On Hold Integration

## Introduction

This proposal outlines the integration of Groww as a data provider for the Catoff-Reclaim integration project. The integration aims to retrieve and process the balance on hold data from Groww, allowing users to validate their financial status on the Catoff platform. This will enable users to use their Groww balance on hold data for various challenges and verifications on Catoff.

## External APIs Needed

- Groww API: Groww doesn't have a public API, so the integration will use data extraction methods from the Groww app/web.

## Use Cases

1. **User Verification**: Verify the balance on hold on a user's Groww account.
2. **Challenge Participation**: Allow users to participate in challenges that require proof of their balance on hold on Groww.
3. **Financial Status**: Validate users' financial status based on their Groww balance on hold.

## Data Provider

- **Name**: Groww Balance On Hold
- **Hash Value**: 0x8bbe041be479e12ef2efee703fced2f4b605c4a6d69e9957d955bebb92ad30ed

## Code Snippet

Below is a code snippet that demonstrates the key parts of the Groww integration. The full implementation should follow the service file template.

**`services/GrowwBalanceOnHoldService.js`**

```javascript
const { ReclaimServiceResponse } = require('../utils/reclaimServiceResponse');

exports.processGrowwAccountData = 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 balanceOnHold = extractedParameters.balanceOnHold;
const balanceOnHoldForStocks = extractedParameters.balanceOnHoldForStocks;

console.log("The Balance On Hold of your Groww account is:", balanceOnHold);
console.log("The Balance On Hold For Stocks of your Groww account is:", balanceOnHoldForStocks);

return new ReclaimServiceResponse(
providerName,
lastUpdateTimeStamp,
'ritikbhatt',
balanceOnHold,
proof[0]
);
};
2 changes: 2 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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())

Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
},
Expand Down
22 changes: 22 additions & 0 deletions src/services/GrowwBalanceOnHoldService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const { ReclaimServiceResponse } = require('../utils/reclaimServiceResponse');

exports.processGrowwAccountData = 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 balanceOnHold = extractedParameters.balanceOnHold;
const balanceOnHoldForStocks = extractedParameters.balanceOnHoldForStocks;

console.log("The Balance On Hold of your Groww account is:", balanceOnHold);
console.log("The Balance On Hold For Stocks of your Groww account is:", balanceOnHoldForStocks);

return new ReclaimServiceResponse(
providerName,
lastUpdateTimeStamp,
'ritikbhatt',
balanceOnHold,
proof[0]
);
};
16 changes: 11 additions & 5 deletions src/services/reclaimService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 { processGrowwAccountData } = require('./GrowwBalanceOnHoldService')

exports.signWithProviderID = async (userId, providerId) => {
const providerName = RECLAIM_PROVIDER_ID[providerId]
Expand All @@ -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('0x8DB7F57E462B89D5392A08dDFFa02cec430974B1')
await reclaimClient.buildProofRequest('3a73fdb0-7a52-4a3b-8df3-21e59bb5c481')
reclaimClient.setSignature(
await reclaimClient.generateSignature(reclaimAppSecret)
await reclaimClient.generateSignature('0x2028acf98d4529c300cbdc1b7cb52de6e5d45ef48216711a6c3c3a7fe1feec56')
)
const { requestUrl: signedUrl } =
await reclaimClient.createVerificationRequest()
Expand All @@ -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(
Expand All @@ -49,6 +51,9 @@ const handleReclaimSession = async (userId, reclaimClient, providerName) => {
case 'GITHUB_ACCOUNT_VERIFICATION':
processedData = await processGitHubData(proof, providerName)
break
case 'GROWW_ACCOUNT_VERIFICATION':
processedData = await processGrowwAccountData(proof, providerName);
break
default:
throw new Error(`No handler for provider: ${providerName}`)
}
Expand All @@ -65,4 +70,5 @@ const handleReclaimSession = async (userId, reclaimClient, providerName) => {
console.error(`Verification failed for userId: ${userId}`, error)
},
})
}
console.log('Ended session')
}
8 changes: 8 additions & 0 deletions src/utils/constants.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
exports.RECLAIM_PROVIDER_ID = {
twitter: 'TWITTER_ANALYTICS_VIEWS',
github: 'GITHUB_ACCOUNT_VERIFICATION',
groww: 'GROWW_ACCOUNT_VERIFICATION'
}

exports.RECLAIM_APP_ID = {
TWITTER_ANALYTICS_VIEWS: 'your-twitter-app-id',
GITHUB_ACCOUNT_VERIFICATION: 'your-github-app-id',
GROWW_ACCOUNT_VERIFICATION: 'your-groww-app-id'
}

exports.PROVIDER_ID = {
twitter: 'twitter-provider-id',
github: 'github-provider-id',
groww: 'groww-provider-id'
}