Skip to content

Commit

Permalink
feat: 🎸 claim management
Browse files Browse the repository at this point in the history
  • Loading branch information
sansan committed Feb 4, 2025
1 parent d39ab41 commit 0d87890
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 4 deletions.
File renamed without changes.
4 changes: 4 additions & 0 deletions src/rest/claims/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ export class Claims {
public async removeClaim(params: CreateClaimParams): Promise<PostResult> {
return this.client.post('/claims/remove', params);
}

public async editClaim(params: CreateClaimParams): Promise<PostResult> {
return this.client.post('/claims/edit', params);
}
}
16 changes: 16 additions & 0 deletions src/rest/identities/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,20 @@ export class Identities {
accounts,
});
}

public async getIssuedClaims(did: string): Promise<ResultSet<unknown>> {
return this.client.get(`/identities/${did}/issued-claims`);
}

public async getAssociatedClaims(did: string): Promise<ResultSet<unknown>> {
return this.client.get(`/identities/${did}/associated-claims`);
}

public async getCddClaims(did: string): Promise<ResultSet<Record<string, unknown>>> {
return this.client.get(`/identities/${did}/cdd-claims`);
}

public async findClaimScopesByDid(did: string): Promise<ResultSet<Record<string, unknown>>> {
return this.client.get(`/identities/${did}/claim-scopes`);
}
}
56 changes: 52 additions & 4 deletions src/sdk/identities/claims.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Polymesh } from '@polymeshassociation/polymesh-sdk';
import { BigNumber, Polymesh } from '@polymeshassociation/polymesh-sdk';
import { ClaimType, ScopeType } from '@polymeshassociation/polymesh-sdk/types';
import assert from 'node:assert';

Expand All @@ -9,10 +9,14 @@ import { awaitMiddlewareSynced } from '~/util';
- Add a claim
- Waits for middleware to sync
- Revoke a claim
- Edit a claim
- Get CDD claims
- Get investor uniqueness claims
- Get claims targeting a given Identity
- Get claims issued by given Identity
- Get identities with claims
- Get claim scopes
- Get CDD claims
*/
export const manageClaims = async (
sdk: Polymesh,
Expand Down Expand Up @@ -55,6 +59,16 @@ export const manageClaims = async (
});
assert(issuedClaims.data.length, 'The default signer should have at least one issued claim');

const identitiesWithAccreditedClaim = await sdk.claims.getIdentitiesWithClaims({
targets: [targetDid],
claimTypes: [ClaimType.Accredited],
size: new BigNumber(1),
start: new BigNumber(0),
includeExpired: true,
});
assert(Array.isArray(identitiesWithAccreditedClaim.data));
expect(identitiesWithAccreditedClaim.data.length).toBe(1);

// select the first one to revoke
const claimToRevoke = issuedClaims.data[0];

Expand All @@ -69,7 +83,18 @@ export const manageClaims = async (
await revokeClaimTx.run();
assert(revokeClaimTx.isSuccess);

await awaitMiddlewareSynced(revokeClaimTx, sdk, 15, 2000);
// edit claims
const editClaimTx = await sdk.claims.editClaims(
{
claims: [claimToRevoke],
},
{ signingAccount }
);

await editClaimTx.run();
assert(editClaimTx.isSuccess);

await awaitMiddlewareSynced(editClaimTx, sdk, 15, 2000);

// This following portion demonstrates different ways to fetch claims

Expand All @@ -81,10 +106,33 @@ export const manageClaims = async (
);

// `target` can specify which Identity to fetch Claims for
const targetingClaims = await sdk.claims.getTargetingClaims({ target: targetDid });
const targetingClaims = await sdk.claims.getTargetingClaims({ target: identity.did });
assert(Array.isArray(targetingClaims.data), 'Data should be an Array for `getTargetingClaims`');

// `target` here refers to the issuer of the claim
const claimsIssuedByTarget = await sdk.claims.getIssuedClaims({ target: targetDid });
const claimsIssuedByTarget = await sdk.claims.getIssuedClaims({ target: identity.did });
assert(Array.isArray(claimsIssuedByTarget.data), 'Data should be an Array for `getIssuedClaims`');

// get identities with claims
const identitiesWithClaims = await sdk.claims.getIdentitiesWithClaims({
targets: [targetDid],
claimTypes: [ClaimType.Accredited],
size: new BigNumber(1),
start: new BigNumber(0),
includeExpired: true,
});

assert(Array.isArray(identitiesWithClaims.data));
expect(identitiesWithClaims.data.length).toBeGreaterThan(0);

// get claim scopes
const claimScopes = await sdk.claims.getClaimScopes({ target: targetDid });
assert(Array.isArray(claimScopes));
expect(claimScopes.length).toBeGreaterThan(0);
expect(claimScopes[0].scope).toBeDefined();

// get cdd claims
const cddClaims = await sdk.claims.getCddClaims({ target: targetDid });
assert(Array.isArray(cddClaims));
expect(cddClaims.length).toBe(1);
};

0 comments on commit 0d87890

Please sign in to comment.