Skip to content

Commit 43f9852

Browse files
committed
fix JFS import error -- ERR_REQUIRE_ESM
1 parent 7850817 commit 43f9852

6 files changed

Lines changed: 20 additions & 17 deletions

File tree

.changeset/clever-moments-end.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@farcaster/snap": patch
3+
---
4+
5+
fix ESM loading bug

apps/emulator/src/app/api/snap/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { encodePayload } from "@farcaster/jfs";
1+
import * as jfs from "@farcaster/jfs";
22
import { NextRequest, NextResponse } from "next/server";
33
import type { SnapPayload } from "@farcaster/snap";
44
import {
@@ -165,7 +165,7 @@ export async function POST(request: NextRequest) {
165165

166166
const jfsEnvelope = {
167167
header: "dev",
168-
payload: encodePayload(payload),
168+
payload: jfs.encodePayload(payload),
169169
signature: "dev",
170170
};
171171
const postBody = JSON.stringify(jfsEnvelope);

pkgs/hono/tests/registerSnapHandler.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest";
22
import { Hono } from "hono";
33
import { registerSnapHandler } from "../src/index";
44
import { buildSnapAlternateLinkHeader } from "../src/payloadToResponse";
5-
import { encodePayload } from "@farcaster/jfs";
5+
import { encodePayload } from "@farcaster/snap/server";
66
import {
77
MEDIA_TYPE,
88
DEFAULT_THEME_ACCENT,

pkgs/snap/src/server/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export { verifyJFSRequestBody, decodePayload } from "./verify";
1+
export { verifyJFSRequestBody, decodePayload, encodePayload } from "./verify";
22
export {
33
DEFAULT_SNAP_HUB_HTTP_BASE_URL,
44
getActiveEd25519SignerKeysFromHubHttp,

pkgs/snap/src/server/verify.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
compact,
3-
decode,
4-
decodePayload as jfsDecodePayload,
5-
verify as jfsVerify,
6-
} from "@farcaster/jfs";
1+
import * as jfs from "@farcaster/jfs"; // must be imported like this to avoid ERR_REQUIRE_ESM error
72
import { hexToBytes, type Hex } from "viem";
83
import {
94
DEFAULT_SNAP_HUB_HTTP_BASE_URL,
@@ -31,7 +26,7 @@ export async function verifyJFSRequestBody<TPayload>(
3126
> {
3227
let compactJfs: string;
3328
try {
34-
compactJfs = compact({
29+
compactJfs = jfs.compact({
3530
header: requestBody.header,
3631
payload: requestBody.payload,
3732
signature: requestBody.signature,
@@ -43,9 +38,9 @@ export async function verifyJFSRequestBody<TPayload>(
4338
};
4439
}
4540

46-
let decoded: ReturnType<typeof decode<TPayload>>;
41+
let decoded: ReturnType<typeof jfs.decode<TPayload>>;
4742
try {
48-
decoded = decode<TPayload>(compactJfs);
43+
decoded = jfs.decode<TPayload>(compactJfs);
4944
} catch (error) {
5045
return {
5146
valid: false,
@@ -54,7 +49,7 @@ export async function verifyJFSRequestBody<TPayload>(
5449
}
5550

5651
try {
57-
await jfsVerify({ data: compactJfs, strict: true, keyTypes: ["app_key"] });
52+
await jfs.verify({ data: compactJfs, strict: true, keyTypes: ["app_key"] });
5853
} catch (error) {
5954
return {
6055
valid: false,
@@ -111,7 +106,11 @@ export async function verifyJFSRequestBody<TPayload>(
111106
}
112107

113108
export function decodePayload<TPayload>(payload: string): TPayload {
114-
return jfsDecodePayload<TPayload>(payload);
109+
return jfs.decodePayload<TPayload>(payload);
110+
}
111+
112+
export function encodePayload<TPayload>(payload: TPayload): string {
113+
return jfs.encodePayload(payload);
115114
}
116115

117116
function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {

pkgs/snap/tests/parseRequest.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { describe, expect, it } from "vitest";
2-
import { parseRequest } from "../src/server";
2+
import { parseRequest, encodePayload, decodePayload } from "../src/server";
33
import { type SnapPayload } from "../src/schemas";
4-
import { decodePayload, encodePayload } from "@farcaster/jfs";
54

65
describe("parseRequest", () => {
76
function postBody(overrides: Record<string, unknown> = {}) {

0 commit comments

Comments
 (0)