easypost-node
easypost-node copied to clipboard
[Bug]: Cannot instantiate new EasyPostClient in Nextjs 13
Software Version
7.2.0
Language Version
20.10.0
Operating System
Mac OS 13.3.1
What happened?
- Imported easypost-node library
- Attempt to create new EasyPostClient via
const client = new EasyPostClient(process.env.EASYPOST_API_KEY!);
- Upon building, error is thrown that
.TypeError: a is not a function
- After commenting out the code, the app builds fine
What was expected?
To be able to build the app while using EasyPostClient
Sample Code
const client = new EasyPostClient(process.env.EASYPOST_API_KEY!);
Relevant logs
No response
Hello @oliviergabison , thanks for reaching out and reporting this! We are currently investigating the issue, and will keep you updated.
Hello @oliviergabison , just wanted to update you on our findings so far.
We've been able to recreate your issue trying to import the library into a Next.js 13 project, and have discovered the issue lies in the easypost-node > superagent > formidable > hexoid
dependency chain. Specifically, formidable
does not seem to be importing hexoid
properly.
In our research, we came across another library that seems to be facing a similar issue, if any of the conversation there might be able to help you get unblocked: https://github.com/pubnub/javascript/issues/352. In the meantime, we'll continue investigating if there's anything we need/can fix with our library specifically.
Thanks again for reporting this!
I'm running into this as well
Ok, I think I finally found the issue. It is definitely a common issue with formidable + webpack
- https://github.com/node-formidable/formidable/issues/960
- https://github.com/pubnub/javascript/issues/352
- https://github.com/amzn/selling-partner-api-samples/pull/45
That last pull request actually provides a solution though. In the diff, in the Next.js config, you can see they create a webpack override for it. I did that as well, and it fixed the issue for me.
- Install webpack,
npm i --save-dev webpack
- Change you
next.config.js
to include this:
import webpack from "webpack";
/** @type {import('next').NextConfig} */
const nextConfig = {
webpack: (config) => {
config.plugins.push(
new webpack.NormalModuleReplacementPlugin(
/^hexoid$/,
"hexoid/dist/index.js"
)
);
return config;
},
};
export default nextConfig;
@oliviergabison @jonknyc, did the override suggestion above help in your cases?
@oliviergabison @jonknyc, did the override suggestion above help in your cases?
I ended up just calling the API with fetch, instead of using the SDK.
e.g.
const response = await fetch("https://api.easypost.com/v2/trackers", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.EASYPOST_API_KEY}`,
},
body: JSON.stringify({
tracker: {
carrier,
tracking_code: trackingCode,
},
}),
})