From ef293ea1aaaf496cc7930424be62ff0c08dc720d Mon Sep 17 00:00:00 2001 From: Melisa Anabella Rossi Date: Mon, 5 Aug 2024 10:28:36 -0300 Subject: [PATCH] feat: change bid receive notification (#289) --- report/schemas.api.md | 41 ++++++++++++++++------ src/platform/events/base.ts | 16 ++++++--- src/platform/events/blockchain.ts | 43 ++---------------------- src/platform/events/index.ts | 1 + src/platform/events/marketplace.ts | 42 +++++++++++++++++++++++ test/platform/events/blockchain.spec.ts | 27 --------------- test/platform/events/marketplace.spec.ts | 30 +++++++++++++++++ 7 files changed, 118 insertions(+), 82 deletions(-) create mode 100644 src/platform/events/marketplace.ts create mode 100644 test/platform/events/marketplace.spec.ts diff --git a/report/schemas.api.md b/report/schemas.api.md index 63d9037..580aa2b 100644 --- a/report/schemas.api.md +++ b/report/schemas.api.md @@ -261,7 +261,7 @@ export type BaseBid = { // @public (undocumented) export type BaseEvent = { type: Events.Type; - subType: Events.SubType.Blockchain | Events.SubType.CatalystDeployment | Events.SubType.Client; + subType: Events.SubType.Blockchain | Events.SubType.CatalystDeployment | Events.SubType.Client | Events.SubType.Marketplace; key: string; timestamp: number; }; @@ -296,7 +296,7 @@ export namespace Bid { export type BidAcceptedEvent = BaseEvent & { type: Events.Type.BLOCKCHAIN; subType: Events.SubType.Blockchain.BID_ACCEPTED; - metadata: BidMetadata; + metadata: BidEventMetadata; }; // @public (undocumented) @@ -307,6 +307,23 @@ export namespace BidAcceptedEvent { validate: ValidateFunction; } +// Warning: (ae-missing-release-tag) "BidEventMetadata" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type BidEventMetadata = { + address: string; + image: string; + seller: string; + category: string; + rarity?: string; + link: string; + nftName?: string; + price: string; + title: string; + description: string; + network: string; +}; + // Warning: (ae-missing-release-tag) "BidFilters" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -328,9 +345,9 @@ export type BidFilters = { // // @public (undocumented) export type BidReceivedEvent = BaseEvent & { - type: Events.Type.BLOCKCHAIN; - subType: Events.SubType.Blockchain.BID_RECEIVED; - metadata: BidMetadata; + type: Events.Type.MARKETPLACE; + subType: Events.SubType.Marketplace.BID_RECEIVED; + metadata: BidEventMetadata; }; // @public (undocumented) @@ -953,8 +970,6 @@ export namespace Events { // (undocumented) BID_ACCEPTED = "bid-accepted", // (undocumented) - BID_RECEIVED = "bid-received", - // (undocumented) COLLECTION_CREATED = "collection-created", // (undocumented) ITEM_SOLD = "item-sold", @@ -985,6 +1000,11 @@ export namespace Events { // (undocumented) MOVE_TO_PARCEL = "move-to-parcel" } + // (undocumented) + export enum Marketplace { + // (undocumented) + BID_RECEIVED = "bid-received" + } } // (undocumented) export enum Type { @@ -993,7 +1013,9 @@ export namespace Events { // (undocumented) CATALYST_DEPLOYMENT = "catalyst-deployment", // (undocumented) - CLIENT = "client" + CLIENT = "client", + // (undocumented) + MARKETPLACE = "marketplace" } } @@ -3379,8 +3401,7 @@ export namespace WorldConfiguration { // src/dapps/trade.ts:79:3 - (ae-incompatible-release-tags) The symbol "chainId" is marked as @public, but its signature references "ChainId" which is marked as @alpha // src/dapps/trade.ts:90:3 - (ae-incompatible-release-tags) The symbol "network" is marked as @public, but its signature references "Network" which is marked as @alpha // src/dapps/trade.ts:91:3 - (ae-incompatible-release-tags) The symbol "chainId" is marked as @public, but its signature references "ChainId" which is marked as @alpha -// src/platform/events/blockchain.ts:21:3 - (ae-forgotten-export) The symbol "BidMetadata" needs to be exported by the entry point index.d.ts -// src/platform/events/blockchain.ts:163:3 - (ae-forgotten-export) The symbol "RentalMetadata" needs to be exported by the entry point index.d.ts +// src/platform/events/blockchain.ts:124:3 - (ae-forgotten-export) The symbol "RentalMetadata" needs to be exported by the entry point index.d.ts // src/platform/item/emote/adr74/emote-data-adr74.ts:7:3 - (ae-incompatible-release-tags) The symbol "representations" is marked as @public, but its signature references "EmoteRepresentationADR74" which is marked as @alpha // src/platform/item/linked-wearable-mappings.ts:251:3 - (ae-incompatible-release-tags) The symbol "getMappings" is marked as @public, but its signature references "Mappings" which is marked as @alpha // src/platform/item/linked-wearable-mappings.ts:252:3 - (ae-incompatible-release-tags) The symbol "addMapping" is marked as @public, but its signature references "ContractNetwork" which is marked as @alpha diff --git a/src/platform/events/base.ts b/src/platform/events/base.ts index 17511cc..7703c49 100644 --- a/src/platform/events/base.ts +++ b/src/platform/events/base.ts @@ -1,6 +1,5 @@ import { BidAcceptedEvent, - BidReceivedEvent, CollectionCreatedEvent, ItemSoldEvent, RentalEndedEvent, @@ -9,18 +8,19 @@ import { } from './blockchain' import { CatalystDeploymentEvent } from './catalyst' import { MoveToParcelEvent } from './client' +import { BidReceivedEvent } from './marketplace' export namespace Events { export enum Type { BLOCKCHAIN = 'blockchain', CATALYST_DEPLOYMENT = 'catalyst-deployment', - CLIENT = 'client' + CLIENT = 'client', + MARKETPLACE = 'marketplace' } export namespace SubType { export enum Blockchain { BID_ACCEPTED = 'bid-accepted', - BID_RECEIVED = 'bid-received', ITEM_SOLD = 'item-sold', RENTAL_ENDED = 'land-rental-ended', RENTAL_STARTED = 'land-rental-started', @@ -28,6 +28,10 @@ export namespace Events { COLLECTION_CREATED = 'collection-created' } + export enum Marketplace { + BID_RECEIVED = 'bid-received' + } + export enum CatalystDeployment { SCENE = 'scene', PROFILE = 'profile', @@ -45,7 +49,11 @@ export namespace Events { export type BaseEvent = { type: Events.Type - subType: Events.SubType.Blockchain | Events.SubType.CatalystDeployment | Events.SubType.Client + subType: + | Events.SubType.Blockchain + | Events.SubType.CatalystDeployment + | Events.SubType.Client + | Events.SubType.Marketplace key: string timestamp: number } diff --git a/src/platform/events/blockchain.ts b/src/platform/events/blockchain.ts index f51fc09..ff5b42a 100644 --- a/src/platform/events/blockchain.ts +++ b/src/platform/events/blockchain.ts @@ -1,7 +1,7 @@ import { generateLazyValidator, JSONSchema, ValidateFunction } from '../../validation' import { BaseEvent, Events } from './base' -type BidMetadata = { +export type BidEventMetadata = { address: string image: string seller: string @@ -18,7 +18,7 @@ type BidMetadata = { export type BidAcceptedEvent = BaseEvent & { type: Events.Type.BLOCKCHAIN subType: Events.SubType.Blockchain.BID_ACCEPTED - metadata: BidMetadata + metadata: BidEventMetadata } export namespace BidAcceptedEvent { @@ -54,45 +54,6 @@ export namespace BidAcceptedEvent { export const validate: ValidateFunction = generateLazyValidator(schema) } -export type BidReceivedEvent = BaseEvent & { - type: Events.Type.BLOCKCHAIN - subType: Events.SubType.Blockchain.BID_RECEIVED - metadata: BidMetadata -} - -export namespace BidReceivedEvent { - export const schema: JSONSchema = { - type: 'object', - properties: { - type: { type: 'string', const: Events.Type.BLOCKCHAIN }, - subType: { type: 'string', const: Events.SubType.Blockchain.BID_RECEIVED }, - key: { type: 'string' }, - timestamp: { type: 'number', minimum: 0 }, - metadata: { - type: 'object', - properties: { - address: { type: 'string' }, - image: { type: 'string' }, - seller: { type: 'string' }, - category: { type: 'string' }, - rarity: { type: 'string', nullable: true }, - link: { type: 'string' }, - nftName: { type: 'string', nullable: true }, - price: { type: 'string' }, - title: { type: 'string' }, - description: { type: 'string' }, - network: { type: 'string' } - }, - required: ['address', 'image', 'seller', 'category', 'link', 'price', 'title', 'network'] - } - }, - required: ['type', 'subType', 'key', 'timestamp', 'metadata'], - additionalProperties: false - } - - export const validate: ValidateFunction = generateLazyValidator(schema) -} - export type ItemSoldEvent = BaseEvent & { type: Events.Type.BLOCKCHAIN subType: Events.SubType.Blockchain.ITEM_SOLD diff --git a/src/platform/events/index.ts b/src/platform/events/index.ts index 54090c7..716f6c6 100644 --- a/src/platform/events/index.ts +++ b/src/platform/events/index.ts @@ -2,3 +2,4 @@ export * from './base' export * from './blockchain' export * from './catalyst' export * from './client' +export * from './marketplace' diff --git a/src/platform/events/marketplace.ts b/src/platform/events/marketplace.ts new file mode 100644 index 0000000..a8a9284 --- /dev/null +++ b/src/platform/events/marketplace.ts @@ -0,0 +1,42 @@ +import { generateLazyValidator, JSONSchema, ValidateFunction } from '../../validation' +import { BaseEvent, Events } from './base' +import { BidEventMetadata } from './blockchain' + +export type BidReceivedEvent = BaseEvent & { + type: Events.Type.MARKETPLACE + subType: Events.SubType.Marketplace.BID_RECEIVED + metadata: BidEventMetadata +} + +export namespace BidReceivedEvent { + export const schema: JSONSchema = { + type: 'object', + properties: { + type: { type: 'string', const: Events.Type.MARKETPLACE }, + subType: { type: 'string', const: Events.SubType.Marketplace.BID_RECEIVED }, + key: { type: 'string' }, + timestamp: { type: 'number', minimum: 0 }, + metadata: { + type: 'object', + properties: { + address: { type: 'string' }, + image: { type: 'string' }, + seller: { type: 'string' }, + category: { type: 'string' }, + rarity: { type: 'string', nullable: true }, + link: { type: 'string' }, + nftName: { type: 'string', nullable: true }, + price: { type: 'string' }, + title: { type: 'string' }, + description: { type: 'string' }, + network: { type: 'string' } + }, + required: ['address', 'image', 'seller', 'category', 'link', 'price', 'title', 'network'] + } + }, + required: ['type', 'subType', 'key', 'timestamp', 'metadata'], + additionalProperties: false + } + + export const validate: ValidateFunction = generateLazyValidator(schema) +} diff --git a/test/platform/events/blockchain.spec.ts b/test/platform/events/blockchain.spec.ts index 097c59f..ff1ccd2 100644 --- a/test/platform/events/blockchain.spec.ts +++ b/test/platform/events/blockchain.spec.ts @@ -1,7 +1,6 @@ import expect from 'expect' import { BidAcceptedEvent, - BidReceivedEvent, CollectionCreatedEvent, Events, ItemSoldEvent, @@ -37,32 +36,6 @@ describe('Blockchain Events tests', () => { expect(BidAcceptedEvent.validate({})).toEqual(false) }) - it('BidReceivedEvent static tests must pass', () => { - const event: BidReceivedEvent = { - type: Events.Type.BLOCKCHAIN, - subType: Events.SubType.Blockchain.BID_RECEIVED, - key: 'key', - timestamp: 1, - metadata: { - address: 'address', - image: 'image', - seller: 'seller', - category: 'category', - rarity: 'rarity', - link: 'link', - nftName: 'nftName', - price: '1', - title: 'title', - description: 'description', - network: 'network' - } - } - - expect(BidReceivedEvent.validate(event)).toEqual(true) - expect(BidReceivedEvent.validate(null)).toEqual(false) - expect(BidReceivedEvent.validate({})).toEqual(false) - }) - it('ItemSold static tests must pass', () => { const event: ItemSoldEvent = { type: Events.Type.BLOCKCHAIN, diff --git a/test/platform/events/marketplace.spec.ts b/test/platform/events/marketplace.spec.ts new file mode 100644 index 0000000..d09d288 --- /dev/null +++ b/test/platform/events/marketplace.spec.ts @@ -0,0 +1,30 @@ +import expect from 'expect' +import { BidReceivedEvent, Events } from '../../../src' + +describe('Marketplace Events tests', () => { + it('BidReceivedEvent static tests must pass', () => { + const event: BidReceivedEvent = { + type: Events.Type.MARKETPLACE, + subType: Events.SubType.Marketplace.BID_RECEIVED, + key: 'key', + timestamp: 1, + metadata: { + address: 'address', + image: 'image', + seller: 'seller', + category: 'category', + rarity: 'rarity', + link: 'link', + nftName: 'nftName', + price: '1', + title: 'title', + description: 'description', + network: 'network' + } + } + + expect(BidReceivedEvent.validate(event)).toEqual(true) + expect(BidReceivedEvent.validate(null)).toEqual(false) + expect(BidReceivedEvent.validate({})).toEqual(false) + }) +})