Skip to content

Commit b912ba6

Browse files
committed
fix payload
1 parent 928489b commit b912ba6

3 files changed

Lines changed: 40 additions & 24 deletions

File tree

src/commands/listen.ts

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Args, Command } from "@effect/cli";
22
import { Effect, Either, Redacted, Schema } from "effect";
33
import { EventSource } from "eventsource";
44
import { organizationLoginPrompt } from "../prompts/organizations";
5-
import { ListenAck } from "../schemas/Events";
5+
import { ListenAck, ListenWebhookEvent } from "../schemas/Events";
66
import * as OAuth from "../services/oauth";
77

88
const LISTEN_BASE_URL = "https://api.polar.sh/v1/cli/listen";
@@ -31,21 +31,8 @@ export const listen = Command.make("listen", { url }, ({ url }) =>
3131
});
3232

3333
eventSource.onmessage = (event) => {
34-
let parsed: {
35-
payload: {
36-
payload: unknown;
37-
};
38-
headers: Record<string, string>;
39-
};
40-
41-
try {
42-
parsed = JSON.parse(event.data);
43-
} catch {
44-
console.error("Failed to parse event:", event.data);
45-
return;
46-
}
47-
48-
const ack = Schema.decodeUnknownEither(ListenAck)(parsed);
34+
const json = JSON.parse(event.data);
35+
const ack = Schema.decodeUnknownEither(ListenAck)(json);
4936

5037
if (Either.isRight(ack)) {
5138
const { secret } = ack.right;
@@ -63,18 +50,27 @@ export const listen = Command.make("listen", { url }, ({ url }) =>
6350
console.log("");
6451
console.log(` ${dim}Waiting for events...${reset}`);
6552
console.log("");
53+
6654
return;
6755
}
6856

69-
console.log(parsed);
57+
const webhookEvent =
58+
Schema.decodeUnknownEither(ListenWebhookEvent)(json);
59+
60+
if (Either.isLeft(webhookEvent)) {
61+
console.error(">> Failed to decode event");
62+
return;
63+
}
7064

7165
fetch(url, {
7266
method: "POST",
73-
headers: parsed.headers,
74-
body: JSON.stringify(parsed.payload?.payload),
67+
headers: webhookEvent.right.headers,
68+
body: JSON.stringify(webhookEvent.right.payload.payload),
7569
})
7670
.then((res) => {
77-
console.log(`>> ${res.status} ${res.statusText}`);
71+
console.log(
72+
`>> '${webhookEvent.right.payload.payload.type}' >> ${res.status} ${res.statusText}`,
73+
);
7874
})
7975
.catch((err) => {
8076
console.error(`>> Failed to forward event: ${err}`);

src/schemas/Events.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,25 @@ export const ListenAck = Schema.Struct({
55
ts: Schema.DateFromString,
66
secret: Schema.String,
77
});
8+
9+
export const ListenWebhookEvent = Schema.Struct({
10+
id: Schema.String,
11+
key: Schema.String,
12+
payload: Schema.Struct({
13+
webhook_event_id: Schema.String,
14+
payload: Schema.Struct({
15+
type: Schema.String,
16+
timestamp: Schema.String,
17+
data: Schema.Struct({}),
18+
}),
19+
}),
20+
headers: Schema.Struct({
21+
"user-agent": Schema.Literal("polar.sh webhooks"),
22+
"content-type": Schema.Literal("application/json"),
23+
"webhook-id": Schema.String,
24+
"webhook-timestamp": Schema.String,
25+
"webhook-signature": Schema.String,
26+
}),
27+
});
28+
29+
export const ListenEvent = Schema.Union(ListenAck, ListenWebhookEvent);

src/services/oauth.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ const captureAccessTokenFromHTTPServer = (server: "production" | "sandbox") =>
9595
export class OAuthError extends Data.TaggedError("OAuthError")<{
9696
message: string;
9797
cause?: unknown;
98-
}> { }
98+
}> {}
9999

100-
export class OAuth extends Context.Tag("OAuth")<OAuth, OAuthImpl>() { }
100+
export class OAuth extends Context.Tag("OAuth")<OAuth, OAuthImpl>() {}
101101

102102
interface OAuthImpl {
103103
login: (
@@ -485,8 +485,6 @@ const redeemCodeForAccessToken = (
485485
}),
486486
});
487487

488-
console.log(data);
489-
490488
return yield* Schema.decodeUnknown(Token)({
491489
token: data.access_token,
492490
refreshToken: data.refresh_token,

0 commit comments

Comments
 (0)