Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"useWorkspaces": true,
"version": "1.2.7",
"version": "1.2.8",
"packages": [
"packages/*"
],
Expand Down
16 changes: 8 additions & 8 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/auth/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-auth",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs auth package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/cache/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-cache",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs cache package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/common/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-common",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs common package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 2 additions & 0 deletions packages/common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ export * from './pipes/parse.record.pipe';
export * from './pipes/parse.token.pipe';
export * from './pipes/parse.token.or.nft.pipe';
export * from './pipes/parse.transaction.hash.pipe';
export * from './pipes/parse.nft.array.pipe';
export * from './pipes/parse.collection.array.pipe';
export * from './common/entities/amount';
export * from './common/config/erdnest.config.service';
export * from './common/swappable-settings';
Expand Down
23 changes: 23 additions & 0 deletions packages/common/src/pipes/parse.collection.array.pipe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { ArgumentMetadata, BadRequestException, PipeTransform } from "@nestjs/common";
import { TokenUtils } from "../utils/token.utils";

export class ParseCollectionArrayPipe implements PipeTransform<string | string[] | undefined, Promise<string | string[] | undefined>> {

transform(value: string | string[] | undefined, metadata: ArgumentMetadata): Promise<string | string[] | undefined> {
return new Promise((resolve) => {
if (value === undefined || value === '') {
return resolve(undefined);
}

const values = Array.isArray(value) ? value : value.split(',');

for (const value of values) {
if (!TokenUtils.isCollection(value)) {
throw new BadRequestException(`Validation failed for '${metadata.data}'. Value ${value} does not represent a valid collection identifier`);
}
}

return resolve(values);
});
}
}
23 changes: 23 additions & 0 deletions packages/common/src/pipes/parse.nft.array.pipe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { ArgumentMetadata, BadRequestException, PipeTransform } from "@nestjs/common";
import { TokenUtils } from "../utils/token.utils";

export class ParseNftArrayPipe implements PipeTransform<string | string[] | undefined, Promise<string | string[] | undefined>> {

transform(value: string | string[] | undefined, metadata: ArgumentMetadata): Promise<string | string[] | undefined> {
return new Promise((resolve) => {
if (value === undefined || value === '') {
return resolve(undefined);
}

const values = Array.isArray(value) ? value : value.split(',');

for (const value of values) {
if (!TokenUtils.isNft(value)) {
throw new BadRequestException(`Validation failed for '${metadata.data}'. Value ${value} does not represent a valid NFT identifier`);
}
}

return resolve(values);
});
}
}
39 changes: 39 additions & 0 deletions packages/common/test/pipes/parse.collection.array.pipe.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { ArgumentMetadata, BadRequestException } from "@nestjs/common";
import { ParseCollectionArrayPipe } from "../../../common/src/pipes/parse.collection.array.pipe";

describe('ParseCollectionArrayPipe', () => {
let target: ParseCollectionArrayPipe;

beforeEach(() => {
target = new ParseCollectionArrayPipe();
});

describe('transform', () => {
describe('when validation passes', () => {
it('should return array of collection identifiers', async () => {
const validCollectionIdentifier = 'ABCDE-efb116';
expect(await target.transform(validCollectionIdentifier, {} as ArgumentMetadata)).toStrictEqual([validCollectionIdentifier]);
});

it('should return undefined for an empty string', async () => {
expect(await target.transform('', {} as ArgumentMetadata)).toBeUndefined();
});

it('should return undefined for undefined value', async () => {
expect(await target.transform(undefined, {} as ArgumentMetadata)).toBeUndefined();
});
});

describe('when validation fails', () => {
it('should throw BadRequestException', async () => {
const invalidCollectionIdentifier = 'ABCDE-efb116-02';
await expect(target.transform(invalidCollectionIdentifier, {} as ArgumentMetadata)).rejects.toThrow(BadRequestException);
});

it('should throw BadRequestException even if array contains an valid collection identifier', async () => {
const invalidCollectionIdentifiers = ['ABCDE-efb116-02', 'ABCDE-efb116'];
await expect(target.transform(invalidCollectionIdentifiers, {} as ArgumentMetadata)).rejects.toThrow(BadRequestException);
});
});
});
});
44 changes: 44 additions & 0 deletions packages/common/test/pipes/parse.nft.array.pipe.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { ArgumentMetadata, BadRequestException } from "@nestjs/common";
import { ParseNftArrayPipe } from "../../../common/src/pipes/parse.nft.array.pipe";

describe('ParseNftArrayPipe', () => {
let target: ParseNftArrayPipe;

beforeEach(() => {
target = new ParseNftArrayPipe();
});

describe('transform', () => {
describe('when validation passes', () => {
it('should return array of NFT identifiers', async () => {
const validNftIdentifier = 'ABCDE-efb116-02';
expect(await target.transform(validNftIdentifier, {} as ArgumentMetadata)).toStrictEqual([validNftIdentifier]);
});

it('should thorw BadRequestException even if array contains and valid identifier', async () => {
const validNftIdentifier = 'ABCDE-efb116-02';
expect(await target.transform(validNftIdentifier, {} as ArgumentMetadata)).toStrictEqual([validNftIdentifier]);
});

it('should return undefined for an empty string', async () => {
expect(await target.transform('', {} as ArgumentMetadata)).toBeUndefined();
});

it('should return undefined for undefined value', async () => {
expect(await target.transform(undefined, {} as ArgumentMetadata)).toBeUndefined();
});
});

describe('when validation fails', () => {
it('should throw BadRequestException', async () => {
const invalidNftIdentifier = 'ABCDE-efb116';
await expect(target.transform(invalidNftIdentifier, {} as ArgumentMetadata)).rejects.toThrow(BadRequestException);
});

it('should throw BadRequestException even if array contains an valid identifier', async () => {
const invalidNftIdentifiers = ['ABCDE-efb116-02', 'ABCDE-efb116'];
await expect(target.transform(invalidNftIdentifiers, {} as ArgumentMetadata)).rejects.toThrow(BadRequestException);
});
});
});
});
2 changes: 1 addition & 1 deletion packages/elastic/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-elastic",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs elastic package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/http/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-http",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs http package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/monitoring/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-monitoring",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs monitoring package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/rabbitmq/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-rabbitmq",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs rabbitmq client package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/redis/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-nestjs-redis",
"version": "1.2.7",
"version": "1.2.8",
"description": "Multiversx SDK Nestjs redis client package",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down