Skip to content

Commit

Permalink
feat: 🎸 Add support for latest SQ
Browse files Browse the repository at this point in the history
This adds support for upcoming v16 SQ containing asset ID changes
without breaking existing functionality
  • Loading branch information
prashantasdeveloper committed Sep 11, 2024
1 parent daafaa6 commit cf65c1d
Show file tree
Hide file tree
Showing 32 changed files with 123,917 additions and 261 deletions.
9 changes: 7 additions & 2 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

{
"parser": "@typescript-eslint/parser",
"env": {
Expand Down Expand Up @@ -101,5 +100,11 @@
"project": "./tsconfig.json"
},
"extends": ["standard", "semistandard", "plugin:@typescript-eslint/recommended", "prettier"],
"ignorePatterns": ["src/polkadot/", "src/middleware/types.ts", "docs/*", "src/sandbox.ts"]
"ignorePatterns": [
"src/polkadot/",
"src/middleware/types.ts",
"src/middleware/typesLatest.ts",
"docs/*",
"src/sandbox.ts"
]
}
4 changes: 2 additions & 2 deletions src/api/client/Claims.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export class Claims {
let targetIssuers;

const filters = {
scope: scope ? scopeToMiddlewareScope(scope, false) : undefined,
scope: scope ? await scopeToMiddlewareScope(scope, context) : undefined,
trustedClaimIssuers: trustedClaimIssuers?.map(trustedClaimIssuer =>
signerToString(trustedClaimIssuer)
),
Expand Down Expand Up @@ -437,7 +437,7 @@ export class Claims {
if (isMiddlewareAvailable) {
const filters = {
dids: [did],
scope: scope ? scopeToMiddlewareScope(scope, false) : undefined,
scope: scope ? await scopeToMiddlewareScope(scope, context) : undefined,
includeExpired,
};

Expand Down
3 changes: 3 additions & 0 deletions src/api/client/__tests__/Claims.ts
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,9 @@ describe('Claims Class', () => {
const targetDid = 'someTargetDid';
const issuerDid = 'someIssuerDid';
const scope: Scope = { type: ScopeType.Ticker, value: 'someValue' };
jest
.spyOn(utilsConversionModule, 'scopeToMiddlewareScope')
.mockResolvedValue({ type: 'Ticker', value: 'someValue' });
const date = 1589816265000;
const accreditedType = ClaimTypeEnum.Accredited;
const claimData = {
Expand Down
54 changes: 36 additions & 18 deletions src/api/entities/Asset/Fungible/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,17 @@ import {
bytesToString,
middlewareEventDetailsToEventIdentifier,
middlewarePortfolioToPortfolio,
portfolioIdStringToPortfolio,
stringToTicker,
tickerToDid,
} from '~/utils/conversion';
import { calculateNextKey, createProcedureMethod, optionize } from '~/utils/internal';
import {
calculateNextKey,
createProcedureMethod,
getAssetIdForMiddleware,
getAssetIdFromMiddleware,
optionize,
} from '~/utils/internal';

import { FungibleSettlements } from '../Base/Settlements';
import { UniqueIdentifiers } from '../types';
Expand Down Expand Up @@ -217,13 +224,15 @@ export class FungibleAsset extends BaseAsset {
public async getOperationHistory(): Promise<HistoricAgentOperation[]> {
const { context, ticker: assetId } = this;

const middlewareAssetId = await getAssetIdForMiddleware(assetId, context);

const {
data: {
tickerExternalAgentHistories: { nodes },
},
} = await context.queryMiddleware<Ensured<Query, 'tickerExternalAgentHistories'>>(
tickerExternalAgentHistoryQuery({
assetId,
assetId: middlewareAssetId,
})
);

Expand All @@ -250,41 +259,50 @@ export class FungibleAsset extends BaseAsset {
const { context, ticker } = this;
const { size, start } = opts;

const middlewareAssetId = await getAssetIdForMiddleware(ticker, context);

const {
data: {
assetTransactions: { nodes, totalCount },
},
} = await context.queryMiddleware<Ensured<Query, 'assetTransactions'>>(
assetTransactionQuery(
{
assetId: ticker,
assetId: middlewareAssetId,
},
size,
start
)
);

const data = nodes.map(
const data: HistoricAssetTransaction[] = nodes.map(
({
assetId,
asset,
amount,
fromPortfolio,
toPortfolio,
fromPortfolioId,
toPortfolioId,
createdBlock,
eventId,
eventIdx,
extrinsicIdx,
}) => ({
asset: new FungibleAsset({ ticker: assetId }, context),
amount: new BigNumber(amount).shiftedBy(-6),
event: eventId,
from: optionize(middlewarePortfolioToPortfolio)(fromPortfolio, context),
to: optionize(middlewarePortfolioToPortfolio)(toPortfolio, context),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
extrinsicIndex: new BigNumber(extrinsicIdx!),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...middlewareEventDetailsToEventIdentifier(createdBlock!, eventIdx),
})
}) => {
const fromPortfolio = optionize(portfolioIdStringToPortfolio)(fromPortfolioId);
const toPortfolio = optionize(portfolioIdStringToPortfolio)(toPortfolioId);

const assetId = getAssetIdFromMiddleware(asset);

return {
asset: new FungibleAsset({ ticker: assetId }, context),
amount: new BigNumber(amount).shiftedBy(-6),
event: eventId,
from: optionize(middlewarePortfolioToPortfolio)(fromPortfolio, context),
to: optionize(middlewarePortfolioToPortfolio)(toPortfolio, context),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
extrinsicIndex: new BigNumber(extrinsicIdx!),
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...middlewareEventDetailsToEventIdentifier(createdBlock!, eventIdx),
};
}
);

const count = new BigNumber(totalCount);
Expand Down
47 changes: 25 additions & 22 deletions src/api/entities/Asset/__tests__/Fungible/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { dsMockUtils, entityMockUtils, procedureMockUtils } from '~/testUtils/mo
import { ErrorCode, SecurityIdentifier, SecurityIdentifierType } from '~/types';
import { tuple } from '~/types/utils';
import * as utilsConversionModule from '~/utils/conversion';
import * as utilsInternalModule from '~/utils/internal';

jest.mock(
'~/api/entities/Identity',
Expand All @@ -37,7 +38,7 @@ jest.mock(
require('~/testUtils/mocks/procedure').mockProcedureModule('~/base/Procedure')
);

describe('Asset class', () => {
describe('Fungible class', () => {
let bytesToStringSpy: jest.SpyInstance;
beforeAll(() => {
dsMockUtils.initMocks();
Expand Down Expand Up @@ -668,6 +669,7 @@ describe('Asset class', () => {
describe('method: getOperationHistory', () => {
it('should return a list of agent operations', async () => {
const ticker = 'TICKER';
jest.spyOn(utilsInternalModule, 'getAssetIdForMiddleware').mockResolvedValue(ticker);
const context = dsMockUtils.getContextInstance();
const asset = new FungibleAsset({ ticker }, context);

Expand Down Expand Up @@ -730,20 +732,22 @@ describe('Asset class', () => {
describe('method: getTransactionHistory', () => {
it('should return the list of asset transactions', async () => {
const ticker = 'TICKER';
const assetId = '0x1234';
const context = dsMockUtils.getContextInstance();
jest.spyOn(utilsInternalModule, 'getAssetIdForMiddleware').mockResolvedValue(ticker);
const asset = new FungibleAsset({ ticker }, context);
const transactionResponse = {
totalCount: new BigNumber(5),
nodes: [
{
assetId: ticker,
asset: {
id: assetId,
ticker,
},
amount: new BigNumber(100).shiftedBy(6),
eventId: EventIdEnum.Issued,
toPortfolio: {
identityId: 'SOME_DID',
number: 0,
},
fromPortfolio: null,
toPortfolioId: 'SOME_DID/0',
fromPortfolioId: null,
eventIdx: 1,
extrinsicIdx: 1,
createdBlock: {
Expand All @@ -753,14 +757,14 @@ describe('Asset class', () => {
},
},
{
assetId: ticker,
asset: {
id: assetId,
ticker,
},
amount: new BigNumber(1).shiftedBy(6),
eventId: EventIdEnum.Redeemed,
fromPortfolio: {
identityId: 'SOME_DID',
number: 0,
},
toPortfolio: null,
fromPortfolioId: 'SOME_DID/0',
toPortfolioId: null,
eventIdx: 1,
extrinsicIdx: 1,
createdBlock: {
Expand All @@ -770,17 +774,16 @@ describe('Asset class', () => {
},
},
{
assetId: ticker,
asset: {
id: assetId,
ticker,
},
amount: new BigNumber(10).shiftedBy(6),
eventId: EventIdEnum.Transfer,
fromPortfolio: {
identityId: 'SOME_DID',
number: 0,
},
toPortfolio: {
identityId: 'SOME_OTHER_DID',
number: 1,
},
fromPortfolioId: 'SOME_DID/0',
toPortfolioId: 'SOME_OTHER_DID/1',
instructionId: '2',
instructionMemo: 'Some memo',
eventIdx: 1,
extrinsicIdx: 1,
createdBlock: {
Expand Down
5 changes: 3 additions & 2 deletions src/api/entities/DefaultTrustedClaimIssuer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
stringToTicker,
trustedIssuerToTrustedClaimIssuer,
} from '~/utils/conversion';
import { optionize } from '~/utils/internal';
import { getAssetIdForMiddleware, optionize } from '~/utils/internal';

export interface UniqueIdentifiers {
did: string;
Expand Down Expand Up @@ -58,6 +58,7 @@ export class DefaultTrustedClaimIssuer extends Identity {
context,
} = this;

const middlewareAssetId = await getAssetIdForMiddleware(assetId, context);
const {
data: {
trustedClaimIssuers: {
Expand All @@ -66,7 +67,7 @@ export class DefaultTrustedClaimIssuer extends Identity {
},
} = await context.queryMiddleware<Ensured<Query, 'trustedClaimIssuers'>>(
trustedClaimIssuerQuery({
assetId,
assetId: middlewareAssetId,
issuer,
})
);
Expand Down
9 changes: 9 additions & 0 deletions src/api/entities/DividendDistribution/__tests__/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
} from '~/types';
import { MAX_DECIMALS } from '~/utils/constants';
import * as utilsConversionModule from '~/utils/conversion';
import * as utilsInternalModule from '~/utils/internal';

jest.mock(
'~/api/entities/Identity',
Expand Down Expand Up @@ -276,6 +277,10 @@ describe('DividendDistribution class', () => {
});

describe('method: getWithheldTax', () => {
beforeEach(() => {
jest.spyOn(utilsInternalModule, 'getAssetIdForMiddleware').mockResolvedValue(ticker);
});

it('should return the amount of the withheld tax', async () => {
const fakeTax = new BigNumber(1000000);

Expand Down Expand Up @@ -547,6 +552,10 @@ describe('DividendDistribution class', () => {
});

describe('method: getPaymentHistory', () => {
beforeEach(() => {
jest.spyOn(utilsInternalModule, 'getAssetIdForMiddleware').mockResolvedValue(ticker);
});

it('should return the amount of the withheld tax', async () => {
const blockId = new BigNumber(1);
const blockHash = 'someHash';
Expand Down
9 changes: 7 additions & 2 deletions src/api/entities/DividendDistribution/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import {
import {
calculateNextKey,
createProcedureMethod,
getAssetIdForMiddleware,
getIdentity,
toHumanReadable,
xor,
Expand Down Expand Up @@ -449,9 +450,11 @@ export class DividendDistribution extends CorporateActionBase {
context,
} = this;

const middlewareAssetId = await getAssetIdForMiddleware(ticker, context);

const taxPromise = context.queryMiddleware<Ensured<Query, 'distributions'>>(
distributionQuery({
assetId: ticker,
assetId: middlewareAssetId,
localId: id.toNumber(),
})
);
Expand Down Expand Up @@ -491,10 +494,12 @@ export class DividendDistribution extends CorporateActionBase {
} = this;
const { size, start } = opts;

const middlewareAssetId = await getAssetIdForMiddleware(ticker, context);

const paymentsPromise = context.queryMiddleware<Ensured<Query, 'distributionPayments'>>(
distributionPaymentsQuery(
{
distributionId: `${ticker}/${id.toString()}`,
distributionId: `${middlewareAssetId}/${id.toString()}`,
},
size,
start
Expand Down
10 changes: 6 additions & 4 deletions src/api/entities/Identity/AssetPermissions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import {
asTicker,
calculateNextKey,
createProcedureMethod,
getAssetIdForMiddleware,
isModuleOrTagMatch,
optionize,
} from '~/utils/internal';
Expand Down Expand Up @@ -321,7 +322,8 @@ export class AssetPermissions extends Namespace<Identity> {
asset: string | FungibleAsset | NftCollection;
}): Promise<EventIdentifier | null> {
const { context } = this;
const ticker = asTicker(asset);

const middlewareAssetId = await getAssetIdForMiddleware(asset, context);

const {
data: {
Expand All @@ -331,7 +333,7 @@ export class AssetPermissions extends Namespace<Identity> {
},
} = await context.queryMiddleware<Ensured<Query, 'tickerExternalAgents'>>(
tickerExternalAgentsQuery({
assetId: ticker,
assetId: middlewareAssetId,
})
);

Expand Down Expand Up @@ -376,7 +378,7 @@ export class AssetPermissions extends Namespace<Identity> {

const { asset, moduleId: palletName, eventId, size, start } = opts;

const ticker = asTicker(asset);
const middlewareAssetId = await getAssetIdForMiddleware(asset, context);

const {
data: {
Expand All @@ -385,7 +387,7 @@ export class AssetPermissions extends Namespace<Identity> {
} = await context.queryMiddleware<Ensured<Query, 'tickerExternalAgentActions'>>(
tickerExternalAgentActionsQuery(
{
assetId: ticker,
assetId: middlewareAssetId,
callerId: did,
palletName,
eventId,
Expand Down
Loading

0 comments on commit cf65c1d

Please sign in to comment.