Skip to content

Commit 2ae2e90

Browse files
committed
feat: Add SIWE tracking test suite
1 parent 7668b65 commit 2ae2e90

File tree

2 files changed

+115
-6
lines changed

2 files changed

+115
-6
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import { describe, it, expect, beforeAll, afterAll, afterEach } from "vitest";
2+
import { setupServer } from "msw/node";
3+
import { http, HttpResponse } from "msw";
4+
import { trackLogin, trackLoginError } from "./siwe.js";
5+
import type { ThirdwebClient } from "../../client/client.js";
6+
7+
const server = setupServer(
8+
http.post("https://c.thirdweb.com/event", () => {
9+
return HttpResponse.json({});
10+
}),
11+
);
12+
13+
describe("SIWE tracking", () => {
14+
beforeAll(() => server.listen());
15+
afterEach(() => server.resetHandlers());
16+
afterAll(() => server.close());
17+
18+
const mockClient: ThirdwebClient = {
19+
clientId: "test-client-id",
20+
secretKey: undefined,
21+
};
22+
23+
it("should track successful logins", async () => {
24+
let requestBody: any;
25+
server.use(
26+
http.post("https://c.thirdweb.com/event", async (handler) => {
27+
requestBody = await handler.request.json();
28+
return HttpResponse.json({});
29+
}),
30+
);
31+
32+
await trackLogin({
33+
client: mockClient,
34+
walletAddress: "0x1234567890123456789012345678901234567890",
35+
walletType: "metamask",
36+
chainId: 1,
37+
});
38+
39+
expect(requestBody).toEqual({
40+
source: "sdk",
41+
action: "login:success",
42+
clientId: "test-client-id",
43+
walletAddress: "0x1234567890123456789012345678901234567890",
44+
walletType: "metamask",
45+
chainId: 1,
46+
errorCode: undefined,
47+
});
48+
});
49+
50+
it("should track login errors", async () => {
51+
let requestBody: any;
52+
server.use(
53+
http.post("https://c.thirdweb.com/event", async (handler) => {
54+
requestBody = await handler.request.json();
55+
return HttpResponse.json({});
56+
}),
57+
);
58+
59+
await trackLoginError({
60+
client: mockClient,
61+
walletAddress: "0x1234567890123456789012345678901234567890",
62+
walletType: "metamask",
63+
chainId: 1,
64+
error: {
65+
message: "Signature verification failed",
66+
code: "SIGNATURE_VERIFICATION_FAILED",
67+
},
68+
});
69+
70+
expect(requestBody).toEqual({
71+
source: "sdk",
72+
action: "login:error",
73+
clientId: "test-client-id",
74+
walletAddress: "0x1234567890123456789012345678901234567890",
75+
walletType: "metamask",
76+
chainId: 1,
77+
errorCode: '{"message":"Signature verification failed","code":"SIGNATURE_VERIFICATION_FAILED"}',
78+
});
79+
});
80+
81+
it("should send a POST request with correct headers", async () => {
82+
let requestHeaders: any;
83+
server.use(
84+
http.post("https://c.thirdweb.com/event", (handler) => {
85+
requestHeaders = handler.request.headers;
86+
return HttpResponse.json({});
87+
}),
88+
);
89+
90+
await trackLogin({
91+
client: mockClient,
92+
ecosystem: {
93+
id: "ecosystem.test-ecosystem-id",
94+
partnerId: "test-partner-id",
95+
},
96+
walletAddress: "0x1234567890123456789012345678901234567890",
97+
walletType: "metamask",
98+
chainId: 1,
99+
});
100+
101+
expect(requestHeaders.get("x-client-id")).toEqual("test-client-id");
102+
expect(requestHeaders.get("x-ecosystem-id")).toEqual(
103+
"ecosystem.test-ecosystem-id",
104+
);
105+
expect(requestHeaders.get("x-ecosystem-partner-id")).toEqual(
106+
"test-partner-id",
107+
);
108+
});
109+
});

packages/thirdweb/src/analytics/track/siwe.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ type SiweSuccessEvent = SiweEvent & {
2222
/**
2323
* @internal
2424
*/
25-
export function trackLogin(event: SiweSuccessEvent) {
26-
trackSiweEvent({
25+
export async function trackLogin(event: SiweSuccessEvent) {
26+
return trackSiweEvent({
2727
...event,
2828
type: "login:success",
2929
});
@@ -39,8 +39,8 @@ type SiweErrorEvent = SiweEvent & {
3939
/**
4040
* @internal
4141
*/
42-
export function trackLoginError(event: SiweErrorEvent) {
43-
trackSiweEvent({
42+
export async function trackLoginError(event: SiweErrorEvent) {
43+
return trackSiweEvent({
4444
...event,
4545
type: "login:error",
4646
});
@@ -49,12 +49,12 @@ export function trackLoginError(event: SiweErrorEvent) {
4949
/**
5050
* @internal
5151
*/
52-
function trackSiweEvent(
52+
async function trackSiweEvent(
5353
event: SiweEvent & {
5454
type: "login:success" | "login:error";
5555
},
5656
) {
57-
track({
57+
return track({
5858
client: event.client,
5959
ecosystem: event.ecosystem,
6060
data: {

0 commit comments

Comments
 (0)