diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..44178701 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +*.png filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.ico filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text diff --git a/docs/specs/servers/relay/relay-server-api.md b/docs/specs/servers/relay/relay-server-api.md index 7d49063b..e6cb8c0f 100644 --- a/docs/specs/servers/relay/relay-server-api.md +++ b/docs/specs/servers/relay/relay-server-api.md @@ -6,27 +6,8 @@ WebSocket supports JSON-RPC methods. For more details, please visit [Relay RPC d ## HTTP -### Register Webhook +### JSON-RPC -Used to register a webhook that would return an incoming message to the webhook. +Used to request JSON-RPC methods. For more details, please visit [Relay RPC docs](./relay-server-rpc.md). -`POST /register-webhook` - -Body: - -```jsonc -{ - "clientId": string, - "webhook": string -} -``` - - - -### Message Id - -A Relay message is globally available and it's always an utf8 string. Therefore the message id is derived as the sha256 hash. - -```sh -message_id = sha256(message) -``` +`POST /rpc` diff --git a/docs/specs/servers/relay/relay-server-rpc.md b/docs/specs/servers/relay/relay-server-rpc.md index 5d4fb9ac..cd1dfd75 100644 --- a/docs/specs/servers/relay/relay-server-rpc.md +++ b/docs/specs/servers/relay/relay-server-rpc.md @@ -16,14 +16,14 @@ The following definitions are shared concepts across all JSON-RPC methods for th ## Methods -### Publish payload +### Publish Used when a client publishes a message to a server. ```jsonc // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_publish", "params" : { @@ -36,13 +36,13 @@ Used when a client publishes a message to a server. // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": true } ``` -### Batch Publish payload +### Batch Publish Used when a client publishes multiple messages to a server. @@ -67,20 +67,20 @@ Used when a client publishes multiple messages to a server. // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": true } ``` -### Subscribe payload +### Subscribe Used when a client subscribes a given topic. ```jsonc // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_subscribe", "params" : { @@ -90,20 +90,20 @@ Used when a client subscribes a given topic. // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": string // subscriptionId } ``` -### Batch Subscribe payload +### Batch Subscribe Used when a client subscribes multiple topics. ```jsonc // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_batchSubscribe", "params" : { @@ -113,20 +113,20 @@ Used when a client subscribes multiple topics. // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": string[] // array of subscriptionId's } ``` -### Unsubscribe payload +### Unsubscribe Used when a client unsubscribes a given topic. ```jsonc // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_unsubscribe", "params" : { @@ -137,13 +137,13 @@ Used when a client unsubscribes a given topic. // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": true } ``` -### Batch Unsubscribe payload +### Batch Unsubscribe Used when a client unsubscribes a given topic. @@ -156,7 +156,7 @@ Used when a client unsubscribes a given topic. // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_batchUnsubscribe", "params" : { @@ -166,29 +166,29 @@ Used when a client unsubscribes a given topic. // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": true } ``` -### Subscription payload +### Subscription Used when a server sends a subscription message to a client. ```jsonc // Request (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_subscription", "params" : { "id" : string, "data" : { - "topic" : string, + "topic": string, "message": string, - "publishedAt: number, + "publishedAt": number, "tag": number } } @@ -196,13 +196,13 @@ Used when a server sends a subscription message to a client. // Response (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": true } ``` -### Fetch Messsages payload +### Fetch Messsages Used when a client wants to fetch all undelivered messages matching a single topic before subscribing. @@ -219,7 +219,7 @@ Response will include a flag `hasMore`. If true, the consumer should fetch again // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_fetchMessages", "params" : { @@ -229,7 +229,7 @@ Response will include a flag `hasMore`. If true, the consumer should fetch again // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": { "messages": ReceivedMessage[], @@ -240,7 +240,7 @@ Response will include a flag `hasMore`. If true, the consumer should fetch again -### Batch Fetch Messsages payload +### Batch Fetch Used when a client wants to fetch all undelivered messages matching multiple topics before subscribing. @@ -257,7 +257,7 @@ Response will include a flag `hasMore`. If true, the consumer should fetch again // Request (client->server) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "method": "irn_batchFetchMessages", "params" : { @@ -267,7 +267,7 @@ Response will include a flag `hasMore`. If true, the consumer should fetch again // Response (server->client) { - "id" : 1687239522123456789, + "id" : "1", "jsonrpc": "2.0", "result": { "messages": ReceivedMessage[], @@ -276,6 +276,154 @@ Response will include a flag `hasMore`. If true, the consumer should fetch again } ``` +### Batch Receive + +Used to batch acknowledge receipt of messages from a subscribed client + +```jsonc +// Receipt +{ + "topic": string, + // Relay RPC message ID provided in the webhook event payload + "messageId": number +} + +// Request (service->relay) +{ + "id" : "1", + "jsonrpc": "2.0", + "method": "irn_batchReceive", + "params" : { + // Max 500 + "receipts": Receipt[] + } +} + +// Response (relay->service) +{ + "id" : "1", + "jsonrpc": "2.0", + "result": true +} +``` + + +### Register Watch (Webhook) + +Used to register a webhook to watch relay messages matching a given client. + +Watch events will be triggered for both incoming and outgoing messages but will not affect the delivery status of the messages in the mailbox. + +```jsonc +// RegisterAuth Payload +{ + "act": string, // action (must be "irn_watchRegister") + "typ": string, // either "subscriber" or "publisher" + "iss": string, // clientId of the watched client + "aud": string, // relayUrl + "sub": string, // serviceUrl - the URL of the service receiving the request (e.g. https://api.example.com) + "whu": string, // webhookUrl - the URL of the webhook (e.g. https://api.example.com/v1/relay-webhook) (max 256 characters) + "iat": number, // issued at + "exp": number, // expiry (max = 30 days) + "tag": [1000, 1001, 1010, 1011], // array of tags + "sts": ["accepted", "queued", "delivered"], // array of status +} + +// Request (service->relay) +{ + "id" : "1", + "jsonrpc": "2.0", + "method": "irn_watchRegister", + "params" : { + "registerAuth": string // JWT with RegisterAuth payload + } +} + +// Response (relay->service) +{ + "id" : "1", + "jsonrpc": "2.0", + "result": { + "relayId": string // relay public key (did:key) + } +} +``` + +#### Watch Events (Webhook) + +Future published message events will be triggered on the corresponding webhook url ("whu") with the following body payload. + +`POST ` + +Body: + +```jsonc +// EventAuth Payload +{ + "act": string, // action (must be "irn_watchEvent") + "iss": string, // relayId + "aud": string, // serviceUrl + "typ": string, // either "subscriber" or "publisher" + "sub": string, // clientId (matches "typ") + "whu": string, // webhook url + "iat": string, // issued at + "evt": { // published message event + "messageId": number, // Relay RPC message ID which can be used for calling irn_batchReceive + "status": string, // either "accepted", "queued" or "delivered" + "topic": string, + "message": string, + "publishedAt": number, + "tag": number + } +} + + +{ + // Max length 1 + "eventAuth": string[], // JWT with EventAuth payload +} +``` + +Response: + +Response payload is ignored by relay, but SHOULD be a 204 or other 2xx status code. + +5xx responses are retried by the relay with exponential backoff for at least 24 hours. 4xx responses are considered successful delivery and will not be retried. + +### Unregister Watch (Webhook) + +Used to unregister an active watch webhook corresponding to a webhookId. + +```jsonc +// UnregisterAuth Payload +{ + "act": string, // action ("irn_watchUnregister") + "iss": string, // clientId + "aud": string, // relayUrl + "sub": string, // serviceUrl + "typ": string, // either "subscriber" or "publisher" + "whu": string, // webhookUrl + "iat": string, // issued at +} + +// Request (service->relay) +{ + "id" : "1", + "jsonrpc": "2.0", + "method": "irn_watchUnregister", + "params" : { + "unregisterAuth": string // jwt with UnregisterAuth payload + } +} + +// Response (relay->service) +{ + "id" : "1", + "jsonrpc": "2.0", + "result": true +} +``` + ## FAQ - What is a client? - Any SDK instance (Sign, Chat, Auth, Push) diff --git a/docs/specs/servers/relay/relay-webhooks.md b/docs/specs/servers/relay/relay-webhooks.md new file mode 100644 index 00000000..b6008c2a --- /dev/null +++ b/docs/specs/servers/relay/relay-webhooks.md @@ -0,0 +1,26 @@ +# Relay Webhooks + +Webhooks is a mechanism to register HTTP watch webhooks that get triggered when a relay client ("the watched client") is involved with a published message. The conditions for these watch events can be filtered by various factors. The presence of a webhook registration does not affect the delivery of the message in any way and only observes the message flow. See the diagram below for an explanation on the specific types of watch events that can be triggered. + +The relay will guarantee delivery of these watch webhooks up to the TTL of the published message. However, because HTTP services are intended to be highly available, the retry period is capped at 259,200 seconds (3 days). The relay will use exponential backoff to retry delivering watch events in case the target service is unavailable. The delivery will be retried if there is an HTTP error, or 5xx status code. 4xx status codes are considered successful delivery and will not be retried. + +Watch events are signed by the relay's asymmetric keypair. The public key can be obtained with the `/public-key` endpoint, and is also returned in the response of the `irn_watchRegister` request. There is not currently a procedure to rotate this key and it can be assumed that it is relatively fixed. + +Any relay client can register a webhook on behalf of the watched client using the [`irn_watchRegister`](./relay-server-rpc.md#register-watch-webhook) RPC request using either of the HTTP or WebSocket transport methods. The payload is a JWT signed by the watched client and includes all of the parameters for the webhook. Any client can also unregister the webhook using the [`irn_watchUnregister`](./relay-server-rpc.md#unregister-watch-webhook) RPC request which also is a JWT payload signed by the watched client. The client registering the webhook may or may not be the same as the watched client, and this depends on the specific use case. + +The webhook registration is remembered by the relay for the `exp` of the registration JWT with a maximum of 30 days, and must be renewed periodically or else the registration will expire and watch events will no longer be delivered. If a watched client registers a webhook with the same service URL and webhook URL, then it will replace the existing webhook. This can be used to renew the webhook registration, or change the webhook parameters. A watched client can have a maximum of 64 webhooks registered at once. Attempting to register more than 64 webhooks will return an error. + +The diagram below shows the flow of a message from a publisher to subscriber, and the 4 potential watch events it could trigger. + +![Webhooks message flow](/assets/webhooks.png) + +`client_id` is the client ID of the watched client. Watch events are triggered when this client ID either publishes or is subscribed to receive a message. Webhook events cannot be filtered by topic, and can only be filtered by status, type, and tag. + +Webhooks can be setup to trigger on one or more of these events. Available statuses are `accepted`, `queued`, and `delivered`. Available types are `publisher` and `subscriber`. Valid combinations of these statuses and types are: + +- `accepted` & `publisher`: The client publishes a message, regardless if any subscribers are subscribed to the topic or will receive the message. +- `accepted` & `subscriber`: The client has received the message or the message has been stored in the mailbox. +- `queued` & `subscriber`: The client is subscribed to the message, but because it does not have a websocket connection open to receive the message immediately, the message has been stored in the mailbox instead. +- `delivered` & `subscriber`: The client received the message by being connected via websocket when the message was published, connected to the websocket and received the message from the mailbox, or called `irn_fetchMessages` or `irn_batchFetchMessages`. + +If a watched client never receives the message (such as with a websocket or `irn_fetchMessages`), then as usual, the message will persist in the mailbox for the TTL of the message. So if webhooks are exclusively used to deliver messages to the watched client then it is considered a best practice to pair the use of webhooks with the usage of the [`irn_batchReceive`](./relay-server-rpc.md#batch-receive) RPC method. This will ensure that the mailbox is cleared of all messages so it doesn't consume resources on the relay unnecessarily. diff --git a/static/assets-1.0/call-request.png b/static/assets-1.0/call-request.png index 4e0ab781..7daddb69 100644 Binary files a/static/assets-1.0/call-request.png and b/static/assets-1.0/call-request.png differ diff --git a/static/assets-1.0/establishing-connection-1.png b/static/assets-1.0/establishing-connection-1.png index eab6ec25..cccd3943 100644 Binary files a/static/assets-1.0/establishing-connection-1.png and b/static/assets-1.0/establishing-connection-1.png differ diff --git a/static/assets-1.0/establishing-connection-2.png b/static/assets-1.0/establishing-connection-2.png index 9f4fa93a..72d73b62 100644 Binary files a/static/assets-1.0/establishing-connection-2.png and b/static/assets-1.0/establishing-connection-2.png differ diff --git a/static/assets-1.0/establishing-connection.png b/static/assets-1.0/establishing-connection.png index 0f3b54e1..ba968c69 100644 Binary files a/static/assets-1.0/establishing-connection.png and b/static/assets-1.0/establishing-connection.png differ diff --git a/static/assets-1.0/img_3394.PNG b/static/assets-1.0/img_3394.PNG index ce167db4..2e43e1e9 100644 Binary files a/static/assets-1.0/img_3394.PNG and b/static/assets-1.0/img_3394.PNG differ diff --git a/static/assets-1.0/img_3394.jpg b/static/assets-1.0/img_3394.jpg index d1cf5940..549ce0f5 100644 Binary files a/static/assets-1.0/img_3394.jpg and b/static/assets-1.0/img_3394.jpg differ diff --git a/static/assets-1.0/mobile-linking-preview.png b/static/assets-1.0/mobile-linking-preview.png index d1470346..13705c27 100644 Binary files a/static/assets-1.0/mobile-linking-preview.png and b/static/assets-1.0/mobile-linking-preview.png differ diff --git a/static/assets-1.0/outofband-sequence-approve.png b/static/assets-1.0/outofband-sequence-approve.png index fb238b64..89c78eb5 100644 Binary files a/static/assets-1.0/outofband-sequence-approve.png and b/static/assets-1.0/outofband-sequence-approve.png differ diff --git a/static/assets-1.0/outofband-sequence-reject.png b/static/assets-1.0/outofband-sequence-reject.png index 750b324d..bf0ea6a9 100644 Binary files a/static/assets-1.0/outofband-sequence-reject.png and b/static/assets-1.0/outofband-sequence-reject.png differ diff --git a/static/assets-1.0/outofband-sequence-sync.png b/static/assets-1.0/outofband-sequence-sync.png index 7a6d7c8e..7726b524 100644 Binary files a/static/assets-1.0/outofband-sequence-sync.png and b/static/assets-1.0/outofband-sequence-sync.png differ diff --git a/static/assets-1.0/screenshot-2019-01-30-17.27.40.png b/static/assets-1.0/screenshot-2019-01-30-17.27.40.png index a720a247..dbfe9215 100644 Binary files a/static/assets-1.0/screenshot-2019-01-30-17.27.40.png and b/static/assets-1.0/screenshot-2019-01-30-17.27.40.png differ diff --git a/static/assets-1.0/screenshot-2019-01-31-16.52.57.png b/static/assets-1.0/screenshot-2019-01-31-16.52.57.png index 670e980b..cbea0e68 100644 Binary files a/static/assets-1.0/screenshot-2019-01-31-16.52.57.png and b/static/assets-1.0/screenshot-2019-01-31-16.52.57.png differ diff --git a/static/assets-1.0/walletconnect-accounts-diagram (1) (1).png b/static/assets-1.0/walletconnect-accounts-diagram (1) (1).png index 941c5e23..914b3f13 100644 Binary files a/static/assets-1.0/walletconnect-accounts-diagram (1) (1).png and b/static/assets-1.0/walletconnect-accounts-diagram (1) (1).png differ diff --git a/static/assets-1.0/walletconnect-accounts-diagram (1).png b/static/assets-1.0/walletconnect-accounts-diagram (1).png index 941c5e23..914b3f13 100644 Binary files a/static/assets-1.0/walletconnect-accounts-diagram (1).png and b/static/assets-1.0/walletconnect-accounts-diagram (1).png differ diff --git a/static/assets-1.0/walletconnect-protocol-simplified.png b/static/assets-1.0/walletconnect-protocol-simplified.png index 95c321d2..c66c6310 100644 Binary files a/static/assets-1.0/walletconnect-protocol-simplified.png and b/static/assets-1.0/walletconnect-protocol-simplified.png differ diff --git a/static/assets-1.0/walletconnect-transaction-diagram (1).png b/static/assets-1.0/walletconnect-transaction-diagram (1).png index 2cb38f94..8144184b 100644 Binary files a/static/assets-1.0/walletconnect-transaction-diagram (1).png and b/static/assets-1.0/walletconnect-transaction-diagram (1).png differ diff --git a/static/assets-1.0/walletconnect-transaction-diagram.png b/static/assets-1.0/walletconnect-transaction-diagram.png index 2cb38f94..8144184b 100644 Binary files a/static/assets-1.0/walletconnect-transaction-diagram.png and b/static/assets-1.0/walletconnect-transaction-diagram.png differ diff --git a/static/assets/SessionRequestExample.png b/static/assets/SessionRequestExample.png index 8f55f42c..82eeedf7 100644 Binary files a/static/assets/SessionRequestExample.png and b/static/assets/SessionRequestExample.png differ diff --git a/static/assets/Web3Wallet.png b/static/assets/Web3Wallet.png index 10bdef82..d2607b28 100644 Binary files a/static/assets/Web3Wallet.png and b/static/assets/Web3Wallet.png differ diff --git a/static/assets/account_switching.mov b/static/assets/account_switching.mov index 2c5bc358..8fcfacbc 100644 Binary files a/static/assets/account_switching.mov and b/static/assets/account_switching.mov differ diff --git a/static/assets/apns-fmc-details.png b/static/assets/apns-fmc-details.png index 349d7431..e2b1c8ec 100644 Binary files a/static/assets/apns-fmc-details.png and b/static/assets/apns-fmc-details.png differ diff --git a/static/assets/auth-android.mov b/static/assets/auth-android.mov index f6f8d99b..29ebbf23 100644 Binary files a/static/assets/auth-android.mov and b/static/assets/auth-android.mov differ diff --git a/static/assets/auth-ios.mov b/static/assets/auth-ios.mov index b84fe598..5bc4e325 100644 Binary files a/static/assets/auth-ios.mov and b/static/assets/auth-ios.mov differ diff --git a/static/assets/auto-redirect-android.mp4 b/static/assets/auto-redirect-android.mp4 index 9c044b28..7a5a89ae 100644 Binary files a/static/assets/auto-redirect-android.mp4 and b/static/assets/auto-redirect-android.mp4 differ diff --git a/static/assets/auto-redirect-ios.mov b/static/assets/auto-redirect-ios.mov index fa2ce960..3a05e0d5 100644 Binary files a/static/assets/auto-redirect-ios.mov and b/static/assets/auto-redirect-ios.mov differ diff --git a/static/assets/chain-switching-android.mp4 b/static/assets/chain-switching-android.mp4 index 3a5e18d0..1f1cd420 100644 Binary files a/static/assets/chain-switching-android.mp4 and b/static/assets/chain-switching-android.mp4 differ diff --git a/static/assets/chain-switching-ios.mov b/static/assets/chain-switching-ios.mov index 987547bf..6dbadd59 100644 Binary files a/static/assets/chain-switching-ios.mov and b/static/assets/chain-switching-ios.mov differ diff --git a/static/assets/create-push-url.png b/static/assets/create-push-url.png index 0d7831e6..b198fa3e 100644 Binary files a/static/assets/create-push-url.png and b/static/assets/create-push-url.png differ diff --git a/static/assets/legacy-fcm-cloud-messaging-api.png b/static/assets/legacy-fcm-cloud-messaging-api.png index 595a5be1..2b201675 100644 Binary files a/static/assets/legacy-fcm-cloud-messaging-api.png and b/static/assets/legacy-fcm-cloud-messaging-api.png differ diff --git a/static/assets/mobile-linking-preview.png b/static/assets/mobile-linking-preview.png index d1470346..13705c27 100644 Binary files a/static/assets/mobile-linking-preview.png and b/static/assets/mobile-linking-preview.png differ diff --git a/static/assets/outofband-sequence-approve-dark.png b/static/assets/outofband-sequence-approve-dark.png index a5881f06..de19e88d 100644 Binary files a/static/assets/outofband-sequence-approve-dark.png and b/static/assets/outofband-sequence-approve-dark.png differ diff --git a/static/assets/outofband-sequence-approve-light.png b/static/assets/outofband-sequence-approve-light.png index af483506..d10fdcc5 100644 Binary files a/static/assets/outofband-sequence-approve-light.png and b/static/assets/outofband-sequence-approve-light.png differ diff --git a/static/assets/outofband-sequence-reject-dark.png b/static/assets/outofband-sequence-reject-dark.png index 783e82fd..a7a88ff4 100644 Binary files a/static/assets/outofband-sequence-reject-dark.png and b/static/assets/outofband-sequence-reject-dark.png differ diff --git a/static/assets/outofband-sequence-reject-light.png b/static/assets/outofband-sequence-reject-light.png index e55fcdf9..49127505 100644 Binary files a/static/assets/outofband-sequence-reject-light.png and b/static/assets/outofband-sequence-reject-light.png differ diff --git a/static/assets/protocol-architecture-dark.png b/static/assets/protocol-architecture-dark.png index f2985cc4..af93b481 100644 Binary files a/static/assets/protocol-architecture-dark.png and b/static/assets/protocol-architecture-dark.png differ diff --git a/static/assets/protocol-architecture-light.png b/static/assets/protocol-architecture-light.png index 153c3515..2f1bc7e3 100644 Binary files a/static/assets/protocol-architecture-light.png and b/static/assets/protocol-architecture-light.png differ diff --git a/static/assets/sign-notifications-android.mov b/static/assets/sign-notifications-android.mov index 30da1f94..3ad6f0a8 100644 Binary files a/static/assets/sign-notifications-android.mov and b/static/assets/sign-notifications-android.mov differ diff --git a/static/assets/sign-notifications-ios.mov b/static/assets/sign-notifications-ios.mov index be38a945..bdbb409d 100644 Binary files a/static/assets/sign-notifications-ios.mov and b/static/assets/sign-notifications-ios.mov differ diff --git a/static/assets/wagmi.mp4 b/static/assets/wagmi.mp4 index cd08c578..6f767fce 100644 Binary files a/static/assets/wagmi.mp4 and b/static/assets/wagmi.mp4 differ diff --git a/static/assets/walletconnectmodal_rn_preview.mov b/static/assets/walletconnectmodal_rn_preview.mov index 15ebe5b4..a0f7661c 100644 Binary files a/static/assets/walletconnectmodal_rn_preview.mov and b/static/assets/walletconnectmodal_rn_preview.mov differ diff --git a/static/assets/web3modal_preview.jpeg b/static/assets/web3modal_preview.jpeg index c1e08802..21290661 100644 Binary files a/static/assets/web3modal_preview.jpeg and b/static/assets/web3modal_preview.jpeg differ diff --git a/static/assets/webhooks.png b/static/assets/webhooks.png new file mode 100644 index 00000000..bf20d08c --- /dev/null +++ b/static/assets/webhooks.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6580859d81fd57e4dee8c1515c58e4eccbfd8389917dfffca8497dcd0b3a26ab +size 52757 diff --git a/static/img/favicon.ico b/static/img/favicon.ico index 4e5e627d..34f26aec 100644 Binary files a/static/img/favicon.ico and b/static/img/favicon.ico differ