diff --git a/src/sign/index.ts b/src/sign/index.ts index 8350d7f08..2d0e898aa 100644 --- a/src/sign/index.ts +++ b/src/sign/index.ts @@ -11,6 +11,8 @@ import { Unfollow, Subscribe, Unsubscribe, + Webhook, + RemoveWebhook, Profile, Alias, spaceTypes, @@ -27,6 +29,8 @@ import { subscribeTypes, unfollowTypes, unsubscribeTypes, + webhookTypes, + removeWebhookTypes, profileTypes, aliasTypes, deleteSpaceType, @@ -64,7 +68,12 @@ export default class Client { } async send(envelop) { - const url = `${this.address}/api/msg`; + const webhookAction = Object.keys(envelop.data.types).filter((key) => + ['Webhook', 'RemoveWebhook'].includes(key) + ).length; + const url = webhookAction + ? `${this.address}/api/subscribers` + : `${this.address}/api/msg`; const init = { method: 'POST', headers: { @@ -159,6 +168,22 @@ export default class Client { return await this.sign(web3, address, message, unsubscribeTypes); } + async webhook( + web3: Web3Provider | Wallet, + address: string, + message: Webhook + ) { + return await this.sign(web3, address, message, webhookTypes); + } + + async removeWebhook( + web3: Web3Provider | Wallet, + address: string, + message: RemoveWebhook + ) { + return await this.sign(web3, address, message, removeWebhookTypes); + } + async profile( web3: Web3Provider | Wallet, address: string, diff --git a/src/sign/types.ts b/src/sign/types.ts index d11c09321..e01f0fa3f 100644 --- a/src/sign/types.ts +++ b/src/sign/types.ts @@ -73,6 +73,21 @@ export interface Unsubscribe { timestamp?: number; } +export interface Webhook { + from?: string; + space: string; + url: string; + active: number; + timestamp?: number; +} + +export interface RemoveWebhook { + from?: string; + id: number; + active: number; + timestamp?: number; +} + export interface Profile { from?: string; timestamp?: number; @@ -242,6 +257,23 @@ export const unsubscribeTypes = { ] }; +export const webhookTypes = { + Webhook: [ + { name: 'from', type: 'address' }, + { name: 'space', type: 'string' }, + { name: 'url', type: 'string' }, + { name: 'active', type: 'uint8' } + ] +}; + +export const removeWebhookTypes = { + RemoveWebhook: [ + { name: 'from', type: 'address' }, + { name: 'id', type: 'uint64' }, + { name: 'active', type: 'uint8' } + ] +}; + export const profileTypes = { Profile: [ { name: 'from', type: 'address' },