
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@while-and-for/stripe-graphql
Advanced tools
This package creates a Stripe GraphQL API.
query {
stripe {
customer(id: "cus_xxx" {
id
name
invoices {
data {
id
created
paid
hostedInvoiceUrl
}
}
}
}
}
You can also add the Stripe GraphQL API as a Hasura Remote Schema and connect data from your database and Stripe. This allows you to request data from your database and Stripe in a single GraphQL query:
query {
users {
# User in your database
id
displayName
userData {
stripeCustomerId # Customer's Stripe Customer Id
stripeCustomer {
# Data from Stripe
id
name
paymentMethods {
id
card {
brand
last4
}
}
}
}
}
}
npm install @nhost/stripe-graphql-js
Create a new Serverless Function functions/graphql/stripe.ts
:
import { createStripeGraphQLServer } from '@nhost/stripe-graphql-js'
const server = createStripeGraphQLServer()
export default server
You can run the Stripe GraphQL API in any JS environment because it's built using GraphQL Yoga.
Add STRIPE_SECRET_KEY
as an environment variable. If you're using Nhost, add STRIPE_SECRET_KEY
to .env.development
like this:
STRIPE_SECRET_KEY=sk_test_xxx
Learn more about Stripe API keys.
nhost up
Learn more about the Nhost CLI.
Test the Stripe GraphQL API in the browser:
http://localhost:1337/v1/functions/graphql/stripe
Add the Stripe GraphQL API as a Remote Schema in Hasura.
URL
{{NHOST_BACKEND_URL}}/v1/functions/graphql/stripe
Headers
x-nhost-webhook-secret: NHOST_WEBHOOK_SECRET (from env var)
Here's a minimal example without any custom permissions. Only requests using the x-hasura-admin-secret
header will work:
const server = createStripeGraphQLServer()
For more granular permissions, you can pass an isAllowed
function to the createStripeGraphQLServer
. The isAllowed
function takes a stripeCustomerId
and context
as parameters and runs every time the GraphQL server makes a request to Stripe to get or modify data for a specific Stripe customer.
Here is an example of an isAllowed
function:
const isAllowed = (stripeCustomerId: string, context: Context) => {
const { isAdmin, userClaims } = context
// allow requests if it has a valid `x-hasura-admin-secret`
if (isAdmin) {
return true
}
// get user id
const userId = userClaims['x-hasura-user-id']
// check if user is signed in
if (!userId) {
return false;
}
// get more user information from the database
const { user } = await gqlSDK.getUser({
id: userId,
});
if (!user) {
return false;
}
// check if the user is part of a workspace with the `stripeCustomerId`
return user.workspaceMembers
.some((workspaceMember) => {
return workspaceMember.workspace.stripeCustomerId === stripeCustomerId;
});
}
The context
object contains:
userClaims
- verified JWT claims from the user's access token.isAdmin
- true
if the request was made using a valid x-hasura-admin-secret
header.request
- Fetch API Request object that represents the incoming HTTP request in platform-independent way. It can be useful for accessing headers to authenticate a userquery
- the DocumentNode that was parsed from the GraphQL query stringoperationName
- the operation name selected from the incoming queryvariables
- the variables that were defined in the queryextensions
- the extensions that were received from the clientRead more about the default context from GraphQL Yoga.
Install dependencies:
pnpm install
Start the development server:
pnpm dev
Include the correct admin secret header for admin access
{
"x-hasura-admin-secret":"<secret value matching your NHOST_ADMIN_SECRET environment variable>"
}
The GraphQL Server will reload every time the code changes.
Open GraphiQL:
FAQs
Stripe GraphQL API
The npm package @while-and-for/stripe-graphql receives a total of 0 weekly downloads. As such, @while-and-for/stripe-graphql popularity was classified as not popular.
We found that @while-and-for/stripe-graphql demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.