{"_id":"next-stripe-helper","_rev":"70-b17863672a480a6d0f7b8b063d738490","name":"next-stripe-helper","dist-tags":{"beta":"1.0.2-beta.0","latest":"1.2.8"},"versions":{"1.0.0-beta.0":{"name":"next-stripe-helper","version":"1.0.0-beta.0","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a think wrapper around the Stripe API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper"],"dependencies":{"micro":"^10.0.1","stripe":"^13.2.0"},"gitHead":"bb52caf7d6f14ee260e500d72875039a8c7d814a","_id":"next-stripe-helper@1.0.0-beta.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-Fl9W+X+JgEyh/p8MjA9LEmnsZr7RL6KRpRecV8eqnhAedBl0t/GXRp0rcmDAWAsY0qtlkSxcCA3Gw8ywpoyDUw==","shasum":"84a73f7708e397c71f1a3f307632dc0112f141f7","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.0-beta.0.tgz","fileCount":10,"unpackedSize":39900,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA62V5FRtpko3sv8q4LjbMwzYremFIJf4QRPhMrTKxWOAiBdiNCsAjQwtzzO+8rhp+NuePfcch2/qF+Q+Z+VYIDLeQ=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.0-beta.0_1692669524987_0.38300008344209235"},"_hasShrinkwrap":false},"1.0.1-beta.0":{"name":"next-stripe-helper","version":"1.0.1-beta.0","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a think wrapper around the Stripe API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper"],"dependencies":{"micro":"^10.0.1","stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"readme":"# next-stripe-helper\n\nA utility module to simplify Stripe checkout session interactions in a Next.js environment.\n\n## Introduction\n`next-stripe-helper` is a module designed to simplify the integration of Stripe's functionality into Next.js applications. Whether you're looking to process payments, manage customers, or handle subscriptions, this utility aims to streamline those interactions. This utility is perfect for developers building e-commerce platforms, subscription-based services, or any other application that requires payment functionalities within the Next.js ecosystem.\n\n## Installation\n\n```bash\nnpm install next-stripe-helper\n```\n\n## Prerequisites\n\nEnsure you've set up Stripe and have an error handler in your project, as this utility relies on those components. \n\nYou will likely want to start in TEST MODE!! Make sure you use the test mode switch to turn Test Mode on before proceeding. Once you are setup and ready to take live payments, turn off test mode, get your LIVE stripe keys, and setup your LIVE webhooks secret and endpoint.\n\nEnsure you have set the `STRIPE_SECRET_LIVE` or `STRIPE_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`.\n\nEnsure you have set the `STRIPE_WEBHOOK_SECRET_LIVE` or `STRIPE_WEBHOOK_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`.\n\n``` dotenv\n\n# Stripe configuration\nSTRIPE_SECRET=your_stripe_TEST_secret_key\nSTRIPE_WEBHOOK_SECRET=your_TEST_stripe_webhook_secret\n\nSTRIPE_SECRET_LIVE=your_LIVE_stripe_secret_key\nSTRIPE_WEBHOOK_SECRET_LIVE=your_LIVE_stripe_webhook_secret\n\n```\n\nMake sure you complete your checkout settings from within the Stripe dashboard before using any checkout functions. [Checkout Settings](https://dashboard.stripe.com/settings/checkout)\n\nMake sure you add your webhooks endpoint URL!! [Setup Webhook URL](https://dashboard.stripe.com/webhooks)\n\n## Usage\n\nFirst, ensure that you've imported the necessary functions from the package:\n\n```javascript\nimport { createCheckoutSession, createCheckoutSessionForSavingCard } from 'next-stripe-helper';\n```\n\n1. **Create Checkout Session**\n\n   Create a checkout session with Stripe.\n\n   ```javascript\n   const session = await createCheckoutSession(\n       'https://your-success-url.com',\n       'https://your-cancel-url.com',\n       itemsArray,  // Your array of line items\n       'subscription',\n       'customer_id',\n       {}  // Additional optional parameters\n   );\n   ```\n\n   Parameters:\n\n   - `successUrl` (required): The URL to redirect upon successful payment.\n   - `cancelUrl` (optional, default `\"\"`): The URL to redirect upon payment cancellation.\n   - `itemsArray` (required): An array of line items for the checkout.\n   - `mode` (optional, default `subscription`): The mode of the checkout session (`subscription` or `payment`).\n   - `customerId` (required): The Stripe customer ID.\n   - `additionalParams` (optional, default `{}`): Any other additional parameters.\n\n2. **Create Checkout Session for Saving Card**\n\n   Create a checkout session with Stripe for the purpose of saving a card.\n\n   ```javascript\n   const sessionId = await createCheckoutSessionForSavingCard(\n       'customer_id',\n       'https://your-success-url.com',\n       'https://your-cancel-url.com'\n   );\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n   - `successUrl` (required): The URL to redirect upon successful card saving.\n   - `cancelUrl` (required): The URL to redirect upon cancellation.\n\n## Customer Utilities\n\nImport the required functions:\n\n```javascript\nimport { createCustomer, getCustomer, updateCustomer } from 'next-stripe-helper';\n```\n\n1. **Create a New Stripe Customer**\n\n   Create a new customer in Stripe using their email address.\n\n   ```javascript\n   const newCustomer = await createCustomer('example@email.com');\n   ```\n\n   Parameters:\n\n   - `email` (required): The email address of the new customer.\n\n2. **Retrieve Customer Details**\n\n   Fetch the details of a specific customer using their Stripe customer ID.\n\n   ```javascript\n   const customerDetails = await getCustomer('customer_id');\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n\n3. **Update a Customer's Details**\n\n   Update the details of a customer in Stripe.\n\n   ```javascript\n   const updates = {\n       // Your update parameters here (e.g., email, name, etc.)\n   };\n   const updatedCustomer = await updateCustomer('customer_id', updates);\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n   - `updates` (required): An object containing key-value pairs of the properties to be updated.\n\n## Billing Portal Utilities\n\nThe `next-stripe-helper` also facilitates easy interaction with Stripe's billing portal.\n\n### Usage\n\nFirstly, remember to import the necessary function:\n\n```javascript\nimport { createPortalLink } from 'next-stripe-helper';\n```\n\n### Create Portal Session Link\n\nGenerate a link for your users to access Stripe's billing portal where they can manage their billing details.\n\n```javascript\nconst portalUrl = await createPortalLink('customer_id', 'https://your-return-url.com');\n```\n\nParameters:\n\n- `customer` (required): The Stripe customer ID.\n- `returnUrl` (required): The URL where the user will be redirected after exiting the billing portal.\n\n## Products and Prices Utilities\n\nThe `next-stripe-helper` provides utilities to help with the creation of products and their associated prices on Stripe.\n\n### Usage\n\nStart by importing the functions you need:\n\n```javascript\nimport { createProduct, createPrice } from 'next-stripe-helper';\n```\n\n### Create a Product\n\nTo create a new product in Stripe, use:\n\n```javascript\nconst newProduct = await createProduct('Product Name', 'Product Description');\n```\n\nParameters:\n\n- `name` (required): The name of the product.\n- `description` (required): A brief description of the product.\n\n### Create a Price for a Product\n\nOnce you have a product, you can set its price:\n\n```javascript\nconst newPrice = await createPrice('product_id', 1000, 'usd', { optionalMetadata: 'value' });\n```\n\nParameters:\n\n- `productID` (required): The ID of the product for which the price is being set.\n- `amount` (required): The amount to be charged for the product, in the smallest unit for the currency (e.g., cents for USD).\n- `currency` (required): The three-letter ISO currency code. (e.g., 'usd', 'eur', 'gbp').\n- `metadata` (optional): A key-value store for any additional information you want to store.\n\nNote: The price is set up as recurring, with a monthly interval. If you wish to modify the recurrence, you would need to adjust the utility function accordingly.\n\n\n## Subscription Utilities\n\nThe `next-stripe-helper` package offers a suite of utilities designed to streamline interactions with Stripe subscriptions.\n\n### Usage\n\nBefore you can use these utilities, you need to import them:\n\n```javascript\nimport {\n    getUserSubscription,\n    getUserSubscriptionDetails,\n    updateUserSubscriptionMetadata,\n    listUserSubscriptions,\n    cancelUserSubscription\n} from 'next-stripe-helper';\n```\n\n### Retrieve a User's Subscription\n\nFetch details of a specific subscription using its Stripe ID:\n\n```javascript\nconst subscriptionDetails = await getUserSubscription('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n### Get Detailed Information About a Subscription\n\nTo fetch comprehensive details about a subscription, including its associated price metadata:\n\n```javascript\nconst detailedInfo = await getUserSubscriptionDetails('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n### Update Metadata for a User's Subscription\n\nIf you wish to modify the metadata of a subscription:\n\n```javascript\nconst updatedSubscription = await updateUserSubscriptionMetadata('subscription_id', { key: 'newValue' });\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n- `metadata` (required): An object containing key-value pairs for metadata updates.\n\n### List All Active Subscriptions for a User\n\nRetrieve a list of all active subscriptions associated with a particular customer:\n\n```javascript\nconst activeSubscriptions = await listUserSubscriptions('customer_id');\n```\n\nParameters:\n\n- `customerID` (required): The Stripe ID of the customer.\n\n### Cancel a User's Subscription\n\nTo cancel a subscription:\n\n```javascript\nconst cancelledSubscription = await cancelUserSubscription('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n## Webhook Handler with Next.js\n\nIn the Next.js environment, API routes provide a solution to build your backend functionality. The `next-stripe-helper` comes equipped with a webhook handler specifically designed for easy integration with Next.js API routes.\n\n### Usage\n\nFirst, you'll need to import the webhook handler into your API route:\n\n```javascript\nimport { webhookHandler } from 'stripe-next-helper'; \n```\n\nThen, set up an API route in Next.js to handle the Stripe webhook:\n\n```javascript\n// pages/api/stripe/webhook/route.js\n\nimport { webhookHandler } from 'stripe-next-helper'; \n\n// Import or define upsertProduct, upsertPrice, and manageSubscriptionChange here. These are functions you create to handle the Database updates.\n\n// Ensure you have error handling and necessary functions.\nexport async function POST(req) {\n  try {\n    // Validate if the request is legitimate (e.g., you might want to check if there's a user session, but for a stripe webhook, it might not be necessary.)\n\n    const handleWebhook = webhookHandler(\n      async (product) => {\n        // upsertProduct logic here\n      },\n      async (price) => {\n        // upsertPrice logic here\n      },\n      async (subscriptionId, customerId, isNew) => {\n        // manageSubscriptionChange logic here\n      }\n    );\n\n    // Call the handler with the adapted request/response format\n    const response = await handleWebhook(req, {\n      status: (statusCode) => ({ statusCode }),\n      json: (body) => new Response(JSON.stringify(body)),\n      setHeader: (name, value) => {}, // You can extend this if needed\n      end: (text) => new Response(text)\n    });\n\n    return response;\n\n  } catch (error) {\n    // Handle your errors. If it's a validation error, return a 422 status. Otherwise, return a 500 status.\n    if (/* it's a validation error */) {\n      return new Response(JSON.stringify(/* error details */), { status: 422 });\n    }\n\n    return new Response(null, { status: 500 });\n  }\n}\n\n```\n\nHere's an example of Stripe Helper Functions for a MongoDB Database.\n\n``` javascript\nimport clientPromise from '@/lib/mongodb'\nimport { ObjectId } from 'mongodb'\n\nexport const getActiveProductsWithPrices = async () => {\n    try {\n        const data = await clientPromise\n            .collection('products')\n            .aggregate([\n                {\n                    $lookup: {\n                        from: 'prices',\n                        localField: '_id',\n                        foreignField: 'product_id',\n                        as: 'prices',\n                    },\n                },\n                { $match: { active: true, 'prices.active': true } },\n                { $sort: { 'metadata.index': 1, 'prices.unit_amount': 1 } },\n            ])\n            .toArray()\n\n        return data || []\n    } catch (error) {\n        console.log(error.message)\n        return []\n    }\n}\n\nexport const getActiveApiProductsWithPrices = async () => {\n    try {\n\n        const data = await clientPromise\n            .collection('products')\n            .aggregate([\n                {\n                    $lookup: {\n                        from: 'prices',\n                        localField: '_id',\n                        foreignField: 'product_id',\n                        as: 'prices',\n                    },\n                },\n                {\n                    $match: {\n                        active: true,\n                        'prices.active': true,\n                        'metadata.is_api_product': 'true',\n                    },\n                },\n                { $sort: { 'metadata.index': 1, 'prices.unit_amount': 1 } },\n            ])\n            .toArray()\n\n        return data || []\n    } catch (error) {\n        console.log(error.message)\n        return []\n    }\n}\n\n\nexport const upsertProductRecord = async (product) => {\n    const productData = {\n        _id: product.id,\n        active: product.active,\n        name: product.name,\n        description: product.description ?? undefined,\n        image: product.images?.[0] ?? null,\n        metadata: product.metadata,\n    }\n\n    const result = await clientPromise\n        .collection('products')\n        .updateOne(\n            { _id: productData._id },\n            { $set: productData },\n            { upsert: true }\n        )\n\n    if (result.upsertedCount || result.modifiedCount) {\n        console.log(`Product inserted/updated: ${product.id}`)\n    }\n}\n\nexport const upsertPriceRecord = async (price) => {\n    const priceData = {\n        _id: price.id,\n        product_id: typeof price.product === 'string' ? price.product : '',\n        active: price.active,\n        currency: price.currency,\n        description: price.nickname ?? undefined,\n        type: price.type,\n        unit_amount: price.unit_amount ?? undefined,\n        interval: price.recurring?.interval,\n        interval_count: price.recurring?.interval_count,\n        trial_period_days: price.recurring?.trial_period_days,\n        metadata: price.metadata,\n    }\n\n    const result = await clientPromise\n        .collection('prices')\n        .updateOne(\n            { _id: priceData._id },\n            { $set: priceData },\n            { upsert: true }\n        )\n\n    if (result.upsertedCount || result.modifiedCount) {\n        console.log(`Price inserted/updated: ${price.id}`)\n    }\n}\n\nconst copyBillingDetailsToCustomer = async (uuid, payment_method) => {\n    const customer = payment_method.customer\n    const { name, phone, address } = payment_method.billing_details\n    if (!name || !phone || !address) return\n\n    await stripe.customers.update(customer, { name, phone, address })\n    const { db } = await connectToDatabase()\n    const result = await db.collection('users').findOneAndUpdate(\n        { _id: uuid },\n        {\n            $set: {\n                billing_address: { ...address },\n                payment_method: { ...payment_method[payment_method.type] },\n            },\n        },\n        { returnOriginal: false }\n    )\n    if (!result.value) {\n        throw new Error('Error updating user billing details')\n    }\n}\n\nexport const manageSubscriptionStatusChange = async (\n    subscriptionId,\n    customerId,\n    createAction = false\n) => {\n    console.log('manageSubscriptionStatusChange: Started.')\n    console.log(customerId)\n\n\n    const customerData = await clientPromise\n        .collection('customers')\n        .findOne({ stripe_customer_id: customerId })\n\n    if (!customerData) {\n        console.log(\n            'manageSubscriptionStatusChange: Customer not found. id:',\n            customerId\n        )\n        throw new Error('Customer not found')\n    } else {\n        console.log(\n            'manageSubscriptionStatusChange: Customer found: ',\n            customerData\n        )\n    }\n\n    const uuid = customerData._id.toString()\n\n    let subscription\n    try {\n        subscription = await stripe.subscriptions.retrieve(subscriptionId, {\n            expand: ['default_payment_method'],\n        })\n    } catch (error) {\n        console.log('manageSubscriptionStatusChange: Stripe Error: ', error)\n        throw new Error(\n            'Stripe error retrieving subscription in manageSubscriptionStatusChange.'\n        )\n    }\n\n    if (!subscription) {\n        throw new Error(\n            'Stripe error retrieving subscription in manageSubscriptionStatusChange.',\n            subscription\n        )\n    } else {\n        console.log(\n            'manageSubscriptionStatusChange: Stripe subscription found.',\n            subscription.id\n        )\n    }\n    const subscriptionItems = subscription.items.data.map((item) => ({\n        price_id: item.price.id,\n        product_id: item.price.product,\n        quantity: item.quantity,\n    }))\n\n    // console.log('subscriptionItems',subscriptionItems)\n\n    const subscriptionData = {\n        _id: subscription.id,\n        user_id: new ObjectId(uuid),\n        team_id: new ObjectId(subscription.metadata.team_id),\n        metadata: subscription.metadata,\n        status: subscription.status,\n        price_id: subscription.items.data[0].price.id,\n        items: subscriptionItems,\n        cancel_at_period_end: subscription.cancel_at_period_end,\n        cancel_at: subscription.cancel_at\n            ? new Date(subscription.cancel_at * 1000)\n            : null,\n        canceled_at: subscription.canceled_at\n            ? new Date(subscription.canceled_at * 1000)\n            : null,\n        current_period_start: new Date(\n            subscription.current_period_start * 1000\n        ),\n        current_period_end: new Date(subscription.current_period_end * 1000),\n        created: new Date(subscription.created * 1000),\n        ended_at: subscription.ended_at\n            ? new Date(subscription.ended_at * 1000)\n            : null,\n        trial_start: subscription.trial_start\n            ? new Date(subscription.trial_start * 1000)\n            : null,\n        trial_end: subscription.trial_end\n            ? new Date(subscription.trial_end * 1000)\n            : null,\n    }\n\n    const result = await clientPromise\n        .collection('subscriptions')\n        .updateOne(\n            { user_id: new ObjectId(uuid), _id: subscription.id },\n            { $set: subscriptionData },\n            { upsert: true }\n        )\n\n    console.log('manageSubscriptionStatusChange: update: ', result)\n\n    if (result.upsertedCount || result.modifiedCount) {\n        console.log(\n            `Inserted/updated subscription [${subscription.id}] for user [${uuid}]`\n        )\n    } else {\n        console.log(\n            `manageSubscriptionStatusChange: Subscription for user [${uuid}] was not updated.`,\n            result\n        )\n    }\n\n    if (createAction && subscription.default_payment_method && uuid) {\n        await copyBillingDetailsToCustomer(\n            uuid,\n            subscription.default_payment_method\n        )\n    }\n}\n```\n\n## Sync with Stripe\n\n## Syncing Stripe Products with Your Local Database\n\nTo ensure that your local database reflects your current Stripe products, you can utilize the provided syncing utility. First create DB functions, then use them with the syncWithStripe function in an api endpoint. You can then create a simple button in your app that triggers the sync function.\n\n### Integration Steps:\n\n1. **Add the Syncing Endpoint**:\n\nSet up an API route in your Next.js project that uses the sync utility:\n\n```javascript\n// pages/api/syncStripe.js\nimport { syncWithStripe } from 'next-stripe-helper';\n\nconst dbOperations = {\n    getAllLocalProducts: async () => { /* fetch all products from the DB */ },\n    addProduct: async (product) => { /* add new product to the DB */ },\n    updateProduct: async (product) => { /* update existing product in the DB */ },\n};\n\nexport default async (req, res) => {\n    if (req.method === 'POST') {\n        const result = await syncWithStripe(dbOperations);\n\n        if (result.success) {\n            res.status(200).json({ message: result.message });\n        } else {\n            res.status(500).json({ error: result.error, details: result.details });\n        }\n    } else {\n        res.status(405).end(); // Method Not Allowed\n    }\n};\n```\n\n### Configuration\n\n1. **Environment Variables**: Ensure you have set the `STRIPE_WEBHOOK_SECRET_LIVE` or `STRIPE_WEBHOOK_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`.\n\n2. **Stripe Dashboard**: Configure your Stripe dashboard to send webhooks to `https://your-domain.com/api/stripe-webhook`.\n\n### Important Notes\n\n- As with the general use-case, you need to provide the `upsertProduct`, `upsertPrice`, and `manageSubscriptionChange` callback functions. These functions will handle the various events as they occur on Stripe.\n  \n- Always handle errors gracefully. The provided webhook handler has built-in error handling, but you may want to extend or customize this for your specific needs.\n\n### Deployment\n\nWhen deploying your Next.js application, make sure to include your Stripe webhook secret in your production environment variables or secrets management solution.\n\n## Error Handling\n\nAll utility functions incorporate internal error handling. You can catch these errors using try/catch. Ensure your project provides meaningful and appropriate error handling based on your application's needs.\n\n## Contributing\n\nFeel free to contribute to the project by submitting a pull request or raising an issue.\n\n## License\n\nMIT License","readmeFilename":"README.md","gitHead":"b98f7b46f9dca8714c7b139370260be2d309ab85","_id":"next-stripe-helper@1.0.1-beta.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-0FMJTCW1XrbPe5yK2a0dS9xVFvAZE0bYSvKjE8iwUkjlxC1UzruIeoe7tR21tE4SZJxmNDcHUdO9be1Booz1Ew==","shasum":"220221bd42095a34a2c993a48048a26e10cecd60","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.1-beta.0.tgz","fileCount":11,"unpackedSize":37718,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrhaIERdr/1+B9SJsSi6cACGGGuuyDlfzTcfjYnJQK3QIgcBC5zyej2YEUX4wPN5A+Drq7mhx2lI/EAP7QhuIWixg="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.1-beta.0_1692676416212_0.3075875139305744"},"_hasShrinkwrap":false},"1.0.2-beta.0":{"name":"next-stripe-helper","version":"1.0.2-beta.0","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a think wrapper around the Stripe API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"readme":"# next-stripe-helper\n\nA utility module to simplify Stripe checkout session interactions in a Next.js environment.\n\n## Introduction\n`next-stripe-helper` is a module designed to simplify the integration of Stripe's functionality into Next.js applications. Whether you're looking to process payments, manage customers, or handle subscriptions, this utility aims to streamline those interactions. This utility is perfect for developers building e-commerce platforms, subscription-based services, or any other application that requires payment functionalities within the Next.js ecosystem.\n\n## Installation\n\n```bash\nnpm install next-stripe-helper\n```\n\n## Prerequisites\n\nEnsure you've set up Stripe and have an error handler in your project, as this utility relies on those components. \n\nYou will likely want to start in TEST MODE!! Make sure you use the test mode switch to turn Test Mode on before proceeding. Once you are setup and ready to take live payments, turn off test mode, get your LIVE stripe keys, and setup your LIVE webhooks secret and endpoint.\n\nEnsure you have set the `STRIPE_SECRET_LIVE` or `STRIPE_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`.\n\nEnsure you have set the `STRIPE_WEBHOOK_SECRET_LIVE` or `STRIPE_WEBHOOK_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`.\n\n``` dotenv\n\n# Stripe configuration\nSTRIPE_SECRET=your_stripe_TEST_secret_key\nSTRIPE_WEBHOOK_SECRET=your_TEST_stripe_webhook_secret\n\nSTRIPE_SECRET_LIVE=your_LIVE_stripe_secret_key\nSTRIPE_WEBHOOK_SECRET_LIVE=your_LIVE_stripe_webhook_secret\n\n```\n\nMake sure you complete your checkout settings from within the Stripe dashboard before using any checkout functions. [Checkout Settings](https://dashboard.stripe.com/settings/checkout)\n\nMake sure you add your webhooks endpoint URL!! [Setup Webhook URL](https://dashboard.stripe.com/webhooks)\n\n## Usage\n\nFirst, ensure that you've imported the necessary functions from the package:\n\n```javascript\nimport { createCheckoutSession, createCheckoutSessionForSavingCard } from 'next-stripe-helper';\n```\n\n1. **Create Checkout Session**\n\n   Create a checkout session with Stripe.\n\n   ```javascript\n   const session = await createCheckoutSession(\n       'https://your-success-url.com',\n       'https://your-cancel-url.com',\n       itemsArray,  // Your array of line items\n       'subscription',\n       'customer_id',\n       {}  // Additional optional parameters\n   );\n   ```\n\n   Parameters:\n\n   - `successUrl` (required): The URL to redirect upon successful payment.\n   - `cancelUrl` (optional, default `\"\"`): The URL to redirect upon payment cancellation.\n   - `itemsArray` (required): An array of line items for the checkout.\n   - `mode` (optional, default `subscription`): The mode of the checkout session (`subscription` or `payment`).\n   - `customerId` (required): The Stripe customer ID.\n   - `additionalParams` (optional, default `{}`): Any other additional parameters.\n\n2. **Create Checkout Session for Saving Card**\n\n   Create a checkout session with Stripe for the purpose of saving a card.\n\n   ```javascript\n   const sessionId = await createCheckoutSessionForSavingCard(\n       'customer_id',\n       'https://your-success-url.com',\n       'https://your-cancel-url.com'\n   );\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n   - `successUrl` (required): The URL to redirect upon successful card saving.\n   - `cancelUrl` (required): The URL to redirect upon cancellation.\n\n## Customer Utilities\n\nImport the required functions:\n\n```javascript\nimport { createCustomer, getCustomer, updateCustomer } from 'next-stripe-helper';\n```\n\n1. **Create a New Stripe Customer**\n\n   Create a new customer in Stripe using their email address.\n\n   ```javascript\n   const newCustomer = await createCustomer('example@email.com');\n   ```\n\n   Parameters:\n\n   - `email` (required): The email address of the new customer.\n\n2. **Retrieve Customer Details**\n\n   Fetch the details of a specific customer using their Stripe customer ID.\n\n   ```javascript\n   const customerDetails = await getCustomer('customer_id');\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n\n3. **Update a Customer's Details**\n\n   Update the details of a customer in Stripe.\n\n   ```javascript\n   const updates = {\n       // Your update parameters here (e.g., email, name, etc.)\n   };\n   const updatedCustomer = await updateCustomer('customer_id', updates);\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n   - `updates` (required): An object containing key-value pairs of the properties to be updated.\n\n## Billing Portal Utilities\n\nThe `next-stripe-helper` also facilitates easy interaction with Stripe's billing portal.\n\n### Usage\n\nFirstly, remember to import the necessary function:\n\n```javascript\nimport { createPortalLink } from 'next-stripe-helper';\n```\n\n### Create Portal Session Link\n\nGenerate a link for your users to access Stripe's billing portal where they can manage their billing details.\n\n```javascript\nconst portalUrl = await createPortalLink('customer_id', 'https://your-return-url.com');\n```\n\nParameters:\n\n- `customer` (required): The Stripe customer ID.\n- `returnUrl` (required): The URL where the user will be redirected after exiting the billing portal.\n\n## Products and Prices Utilities\n\nThe `next-stripe-helper` provides utilities to help with the creation of products and their associated prices on Stripe.\n\n### Usage\n\nStart by importing the functions you need:\n\n```javascript\nimport { createProduct, createPrice } from 'next-stripe-helper';\n```\n\n### Create a Product\n\nTo create a new product in Stripe, use:\n\n```javascript\nconst newProduct = await createProduct('Product Name', 'Product Description');\n```\n\nParameters:\n\n- `name` (required): The name of the product.\n- `description` (required): A brief description of the product.\n\n### Create a Price for a Product\n\nOnce you have a product, you can set its price:\n\n```javascript\nconst newPrice = await createPrice('product_id', 1000, 'usd', { optionalMetadata: 'value' });\n```\n\nParameters:\n\n- `productID` (required): The ID of the product for which the price is being set.\n- `amount` (required): The amount to be charged for the product, in the smallest unit for the currency (e.g., cents for USD).\n- `currency` (required): The three-letter ISO currency code. (e.g., 'usd', 'eur', 'gbp').\n- `metadata` (optional): A key-value store for any additional information you want to store.\n\nNote: The price is set up as recurring, with a monthly interval. If you wish to modify the recurrence, you would need to adjust the utility function accordingly.\n\n\n## Subscription Utilities\n\nThe `next-stripe-helper` package offers a suite of utilities designed to streamline interactions with Stripe subscriptions.\n\n### Usage\n\nBefore you can use these utilities, you need to import them:\n\n```javascript\nimport {\n    getUserSubscription,\n    getUserSubscriptionDetails,\n    updateUserSubscriptionMetadata,\n    listUserSubscriptions,\n    cancelUserSubscription\n} from 'next-stripe-helper';\n```\n\n### Retrieve a User's Subscription\n\nFetch details of a specific subscription using its Stripe ID:\n\n```javascript\nconst subscriptionDetails = await getUserSubscription('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n### Get Detailed Information About a Subscription\n\nTo fetch comprehensive details about a subscription, including its associated price metadata:\n\n```javascript\nconst detailedInfo = await getUserSubscriptionDetails('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n### Update Metadata for a User's Subscription\n\nIf you wish to modify the metadata of a subscription:\n\n```javascript\nconst updatedSubscription = await updateUserSubscriptionMetadata('subscription_id', { key: 'newValue' });\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n- `metadata` (required): An object containing key-value pairs for metadata updates.\n\n### List All Active Subscriptions for a User\n\nRetrieve a list of all active subscriptions associated with a particular customer:\n\n```javascript\nconst activeSubscriptions = await listUserSubscriptions('customer_id');\n```\n\nParameters:\n\n- `customerID` (required): The Stripe ID of the customer.\n\n### Cancel a User's Subscription\n\nTo cancel a subscription:\n\n```javascript\nconst cancelledSubscription = await cancelUserSubscription('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n## Webhook Handler with Next.js\n\nIn the Next.js environment, API routes provide a solution to build your backend functionality. The `next-stripe-helper` comes equipped with a webhook handler specifically designed for easy integration with Next.js API routes.\n\n### Usage\n\nFirst, you'll need to import the webhook handler into your API route:\n\n```javascript\nimport { webhookHandler } from 'stripe-next-helper'; \n```\n\nThen, set up an API route in Next.js to handle the Stripe webhook:\n\n```javascript\n// pages/api/stripe/webhook/route.js\n\nimport { webhookHandler } from 'stripe-next-helper'; \n\n// Import or define upsertProduct, upsertPrice, and manageSubscriptionChange here. These are functions you create to handle the Database updates.\n\n// Ensure you have error handling and necessary functions.\nexport async function POST(req) {\n  try {\n    // Validate if the request is legitimate (e.g., you might want to check if there's a user session, but for a stripe webhook, it might not be necessary.)\n\n    const handleWebhook = webhookHandler(\n      async (product) => {\n        // upsertProduct logic here\n      },\n      async (price) => {\n        // upsertPrice logic here\n      },\n      async (subscriptionId, customerId, isNew) => {\n        // manageSubscriptionChange logic here\n      }\n    );\n\n    // Call the handler with the adapted request/response format\n    const response = await handleWebhook(req, {\n      status: (statusCode) => ({ statusCode }),\n      json: (body) => new Response(JSON.stringify(body)),\n      setHeader: (name, value) => {}, // You can extend this if needed\n      end: (text) => new Response(text)\n    });\n\n    return response;\n\n  } catch (error) {\n    // Handle your errors. If it's a validation error, return a 422 status. Otherwise, return a 500 status.\n    if (/* it's a validation error */) {\n      return new Response(JSON.stringify(/* error details */), { status: 422 });\n    }\n\n    return new Response(null, { status: 500 });\n  }\n}\n\n```\n\nHere's an example of Stripe Helper Functions for a MongoDB Database.\n\n``` javascript\nimport clientPromise from '@/lib/mongodb'\nimport { ObjectId } from 'mongodb'\n\nexport const getActiveProductsWithPrices = async () => {\n    try {\n        const data = await clientPromise\n            .collection('products')\n            .aggregate([\n                {\n                    $lookup: {\n                        from: 'prices',\n                        localField: '_id',\n                        foreignField: 'product_id',\n                        as: 'prices',\n                    },\n                },\n                { $match: { active: true, 'prices.active': true } },\n                { $sort: { 'metadata.index': 1, 'prices.unit_amount': 1 } },\n            ])\n            .toArray()\n\n        return data || []\n    } catch (error) {\n        console.log(error.message)\n        return []\n    }\n}\n\nexport const getActiveApiProductsWithPrices = async () => {\n    try {\n\n        const data = await clientPromise\n            .collection('products')\n            .aggregate([\n                {\n                    $lookup: {\n                        from: 'prices',\n                        localField: '_id',\n                        foreignField: 'product_id',\n                        as: 'prices',\n                    },\n                },\n                {\n                    $match: {\n                        active: true,\n                        'prices.active': true,\n                        'metadata.is_api_product': 'true',\n                    },\n                },\n                { $sort: { 'metadata.index': 1, 'prices.unit_amount': 1 } },\n            ])\n            .toArray()\n\n        return data || []\n    } catch (error) {\n        console.log(error.message)\n        return []\n    }\n}\n\n\nexport const upsertProductRecord = async (product) => {\n    const productData = {\n        _id: product.id,\n        active: product.active,\n        name: product.name,\n        description: product.description ?? undefined,\n        image: product.images?.[0] ?? null,\n        metadata: product.metadata,\n    }\n\n    const result = await clientPromise\n        .collection('products')\n        .updateOne(\n            { _id: productData._id },\n            { $set: productData },\n            { upsert: true }\n        )\n\n    if (result.upsertedCount || result.modifiedCount) {\n        console.log(`Product inserted/updated: ${product.id}`)\n    }\n}\n\nexport const upsertPriceRecord = async (price) => {\n    const priceData = {\n        _id: price.id,\n        product_id: typeof price.product === 'string' ? price.product : '',\n        active: price.active,\n        currency: price.currency,\n        description: price.nickname ?? undefined,\n        type: price.type,\n        unit_amount: price.unit_amount ?? undefined,\n        interval: price.recurring?.interval,\n        interval_count: price.recurring?.interval_count,\n        trial_period_days: price.recurring?.trial_period_days,\n        metadata: price.metadata,\n    }\n\n    const result = await clientPromise\n        .collection('prices')\n        .updateOne(\n            { _id: priceData._id },\n            { $set: priceData },\n            { upsert: true }\n        )\n\n    if (result.upsertedCount || result.modifiedCount) {\n        console.log(`Price inserted/updated: ${price.id}`)\n    }\n}\n\nconst copyBillingDetailsToCustomer = async (uuid, payment_method) => {\n    const customer = payment_method.customer\n    const { name, phone, address } = payment_method.billing_details\n    if (!name || !phone || !address) return\n\n    await stripe.customers.update(customer, { name, phone, address })\n    const { db } = await connectToDatabase()\n    const result = await db.collection('users').findOneAndUpdate(\n        { _id: uuid },\n        {\n            $set: {\n                billing_address: { ...address },\n                payment_method: { ...payment_method[payment_method.type] },\n            },\n        },\n        { returnOriginal: false }\n    )\n    if (!result.value) {\n        throw new Error('Error updating user billing details')\n    }\n}\n\nexport const manageSubscriptionStatusChange = async (\n    subscriptionId,\n    customerId,\n    createAction = false\n) => {\n    console.log('manageSubscriptionStatusChange: Started.')\n    console.log(customerId)\n\n\n    const customerData = await clientPromise\n        .collection('customers')\n        .findOne({ stripe_customer_id: customerId })\n\n    if (!customerData) {\n        console.log(\n            'manageSubscriptionStatusChange: Customer not found. id:',\n            customerId\n        )\n        throw new Error('Customer not found')\n    } else {\n        console.log(\n            'manageSubscriptionStatusChange: Customer found: ',\n            customerData\n        )\n    }\n\n    const uuid = customerData._id.toString()\n\n    let subscription\n    try {\n        subscription = await stripe.subscriptions.retrieve(subscriptionId, {\n            expand: ['default_payment_method'],\n        })\n    } catch (error) {\n        console.log('manageSubscriptionStatusChange: Stripe Error: ', error)\n        throw new Error(\n            'Stripe error retrieving subscription in manageSubscriptionStatusChange.'\n        )\n    }\n\n    if (!subscription) {\n        throw new Error(\n            'Stripe error retrieving subscription in manageSubscriptionStatusChange.',\n            subscription\n        )\n    } else {\n        console.log(\n            'manageSubscriptionStatusChange: Stripe subscription found.',\n            subscription.id\n        )\n    }\n    const subscriptionItems = subscription.items.data.map((item) => ({\n        price_id: item.price.id,\n        product_id: item.price.product,\n        quantity: item.quantity,\n    }))\n\n    // console.log('subscriptionItems',subscriptionItems)\n\n    const subscriptionData = {\n        _id: subscription.id,\n        user_id: new ObjectId(uuid),\n        team_id: new ObjectId(subscription.metadata.team_id),\n        metadata: subscription.metadata,\n        status: subscription.status,\n        price_id: subscription.items.data[0].price.id,\n        items: subscriptionItems,\n        cancel_at_period_end: subscription.cancel_at_period_end,\n        cancel_at: subscription.cancel_at\n            ? new Date(subscription.cancel_at * 1000)\n            : null,\n        canceled_at: subscription.canceled_at\n            ? new Date(subscription.canceled_at * 1000)\n            : null,\n        current_period_start: new Date(\n            subscription.current_period_start * 1000\n        ),\n        current_period_end: new Date(subscription.current_period_end * 1000),\n        created: new Date(subscription.created * 1000),\n        ended_at: subscription.ended_at\n            ? new Date(subscription.ended_at * 1000)\n            : null,\n        trial_start: subscription.trial_start\n            ? new Date(subscription.trial_start * 1000)\n            : null,\n        trial_end: subscription.trial_end\n            ? new Date(subscription.trial_end * 1000)\n            : null,\n    }\n\n    const result = await clientPromise\n        .collection('subscriptions')\n        .updateOne(\n            { user_id: new ObjectId(uuid), _id: subscription.id },\n            { $set: subscriptionData },\n            { upsert: true }\n        )\n\n    console.log('manageSubscriptionStatusChange: update: ', result)\n\n    if (result.upsertedCount || result.modifiedCount) {\n        console.log(\n            `Inserted/updated subscription [${subscription.id}] for user [${uuid}]`\n        )\n    } else {\n        console.log(\n            `manageSubscriptionStatusChange: Subscription for user [${uuid}] was not updated.`,\n            result\n        )\n    }\n\n    if (createAction && subscription.default_payment_method && uuid) {\n        await copyBillingDetailsToCustomer(\n            uuid,\n            subscription.default_payment_method\n        )\n    }\n}\n```\n\n## Sync with Stripe\n\n## Syncing Stripe Products with Your Local Database\n\nTo ensure that your local database reflects your current Stripe products, you can utilize the provided syncing utility. First create DB functions, then use them with the syncWithStripe function in an api endpoint. You can then create a simple button in your app that triggers the sync function.\n\n### Integration Steps:\n\n1. **Add the Syncing Endpoint**:\n\nSet up an API route in your Next.js project that uses the sync utility:\n\n```javascript\n// pages/api/syncStripe.js\nimport { syncWithStripe } from 'next-stripe-helper';\n\nconst dbOperations = {\n    getAllLocalProducts: async () => { /* fetch all products from the DB */ },\n    addProduct: async (product) => { /* add new product to the DB */ },\n    updateProduct: async (product) => { /* update existing product in the DB */ },\n};\n\nexport default async (req, res) => {\n    if (req.method === 'POST') {\n        const result = await syncWithStripe(dbOperations);\n\n        if (result.success) {\n            res.status(200).json({ message: result.message });\n        } else {\n            res.status(500).json({ error: result.error, details: result.details });\n        }\n    } else {\n        res.status(405).end(); // Method Not Allowed\n    }\n};\n```\n\n### Configuration\n\n1. **Environment Variables**: Ensure you have set the `STRIPE_WEBHOOK_SECRET_LIVE` or `STRIPE_WEBHOOK_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`.\n\n2. **Stripe Dashboard**: Configure your Stripe dashboard to send webhooks to `https://your-domain.com/api/stripe-webhook`.\n\n### Important Notes\n\n- As with the general use-case, you need to provide the `upsertProduct`, `upsertPrice`, and `manageSubscriptionChange` callback functions. These functions will handle the various events as they occur on Stripe.\n  \n- Always handle errors gracefully. The provided webhook handler has built-in error handling, but you may want to extend or customize this for your specific needs.\n\n### Deployment\n\nWhen deploying your Next.js application, make sure to include your Stripe webhook secret in your production environment variables or secrets management solution.\n\n## Error Handling\n\nAll utility functions incorporate internal error handling. You can catch these errors using try/catch. Ensure your project provides meaningful and appropriate error handling based on your application's needs.\n\n## Contributing\n\nFeel free to contribute to the project by submitting a pull request or raising an issue.\n\n## License\n\nMIT License","readmeFilename":"README.md","gitHead":"b98f7b46f9dca8714c7b139370260be2d309ab85","_id":"next-stripe-helper@1.0.2-beta.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-8vaPYleE0Tb/FznI3WYALJpW8m/hPp6EL6sGEJnFYA7q7B25ZW0oZeSsJTR7hgvddQWlxCEo4OWCPikA2LE04g==","shasum":"a3a2c6572ab8daf28b98ee7b7d744089b5b290d5","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.2-beta.0.tgz","fileCount":11,"unpackedSize":37652,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACwxJwN3OAG2e3e/hZ4Vj1l7v76n7+6FZWcps96W59RAiEA5R4SWu81RPVbnGBxuWfoAMCYG7SJB9G/KPz9GCdrmjM="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.2-beta.0_1692678174163_0.011363748988724831"},"_hasShrinkwrap":false},"1.0.3":{"name":"next-stripe-helper","version":"1.0.3","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a think wrapper around the Stripe API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"e36d0bb39d38900b7bdd1d155e1354ce21b29488","_id":"next-stripe-helper@1.0.3","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-+0BIIuI8CqiccFNKqUFFS6zpW/5R2i8yN2tObmbsRrmd6OKPREZuLtdsl5kJo19VPJz28Bd93gNN3YbT6KRcUA==","shasum":"4949e50c844c576725b9a4f1638ecf254f9b7776","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.3.tgz","fileCount":11,"unpackedSize":37379,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJocB7UDRa0a6PDPZR1XRHgIMYlOm/tXe21JjzFjid0AiEAp4u79U1n4Hh5Fnobee7ZgDufBQSW77p5oB5n5aqMXGE="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.3_1692679062525_0.12058159503902277"},"_hasShrinkwrap":false},"1.0.4":{"name":"next-stripe-helper","version":"1.0.4","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"e36d0bb39d38900b7bdd1d155e1354ce21b29488","_id":"next-stripe-helper@1.0.4","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-mqms/W1m2tfMn2nyoLft+zEEuBX4s/y63JyyfC2BET1/oqdsKCUtl5Z6Zl+MFI5UBzzI2Zm2QL/m6Avk8OrapA==","shasum":"c75fd7075a87713ea35f971393fe5dcef2f3a1d9","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.4.tgz","fileCount":11,"unpackedSize":37404,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAckBZqixfYWtasW1eCoLcG5DZHK2uXDUNmZmVpc0zJ4AiBwUIM6M40+8e0XNqZhLpFSDqEIRj+Cy1SBpKU3ZDze+Q=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.4_1692679150070_0.45236526793562226"},"_hasShrinkwrap":false},"1.0.5":{"name":"next-stripe-helper","version":"1.0.5","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API.","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"977fd81002ac6ba0820c6097aee92f2f3574c52f","_id":"next-stripe-helper@1.0.5","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-1JqF//GDPNRZBoxqtGHIp/tEKVUjoVUnyF++6+p1UqzGz3z3c9d18a6I2EIL+uexREmip1HViyBhgaj5HfGG2A==","shasum":"49d422515784b86115072f757b9673b841a763f3","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.5.tgz","fileCount":11,"unpackedSize":37224,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWAPS/qNR2WPxtDFmIS5jc5U3Vwi8TTjk7dsVs2GX+ZQIgL+hgtFkKYouSLxeNG4Qdl8Yn9hn3KxWEg4LdcVBb1pk="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.5_1692679354241_0.475103615027773"},"_hasShrinkwrap":false},"1.0.6":{"name":"next-stripe-helper","version":"1.0.6","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"22b7b40ee586fa8272c7661afa176641596ceb39","_id":"next-stripe-helper@1.0.6","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-JeiogjTTjg8uyf0hEDXY3/BHTKAGggLHPoVLc1ue0iXKmPPVVO1Hzq1b7bf1RwVWIMIWYVp0pFZNqcZpsiISIg==","shasum":"78644ad781497d0ba874ff435affbed48c29d13f","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.6.tgz","fileCount":11,"unpackedSize":37603,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjQJc6Ms2tWr8UYg3eJGAppsoOxW9JaqyyLOtyS1M3YQIhAJNMkkE5bsSg8aVcpwHmjQTe/amvY4VWyNF3rNIYtPu8"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.6_1692679840914_0.5374724947251628"},"_hasShrinkwrap":false},"1.0.7":{"name":"next-stripe-helper","version":"1.0.7","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"22b7b40ee586fa8272c7661afa176641596ceb39","_id":"next-stripe-helper@1.0.7","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-s1WSibnKH+F1PzFlYGNVim7RY6eh8rEmh58A09Js+vzv9KJtVqDAAFlwTHO60+AMkPz8e3wlxiyRxDFkM54Xew==","shasum":"61c720fd1fcab5ebaab17e68c53544f10f249588","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.7.tgz","fileCount":11,"unpackedSize":39281,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiwruV7QjlrhMnTV2saupcIeerCTpH6KcUlvfHs11/eAIgUloK77xo4AVtHQj6a9l8emdgirOBLkHN36VHJCp+84g="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.7_1692691388218_0.020275260923916294"},"_hasShrinkwrap":false},"1.0.8":{"name":"next-stripe-helper","version":"1.0.8","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"3640e07ae71dd35e5e1ca4edbdaf80a671b444ce","_id":"next-stripe-helper@1.0.8","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-UQJNdbH8jAhKja4Ow+W8nXp7R9tDPPmHKF4pVrrVrWdiGHlD7iDGwW0PXRttD2ob6sA7Vi6FKBFi5VMzJBk0Kw==","shasum":"f8cce7d133930a72c616cd5571a905b7178a8b6c","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.8.tgz","fileCount":11,"unpackedSize":41968,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID49EBAcD1akNN9FconNomqZhBxZHpmk5T9+wMqDU79/AiAQPkjTPPnRAcMNE44SNn/mOXbwOk6IxyfImC7lSQYdOQ=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.8_1692728296978_0.6247662184380063"},"_hasShrinkwrap":false},"1.0.9":{"name":"next-stripe-helper","version":"1.0.9","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"3640e07ae71dd35e5e1ca4edbdaf80a671b444ce","_id":"next-stripe-helper@1.0.9","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-Uqi9tY82JYOIQ5kWqumeMJf/yy5nHTj/ZDLH+RKU4V18VMFc517L7heplD/m/9CB98VA5DqCF2IoVgy0JvRceg==","shasum":"8aec82fe17fcb13d81482b359836a8f9ba829ce6","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.9.tgz","fileCount":11,"unpackedSize":42083,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGS8GM9G1CauOioBQ81o8Vd2sjUBU5l3pICjozibkLpPAiBZZ7LB1e+87/amRqC3qrwG+/n9pLJyi50jYwqiiiClCQ=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.9_1692728498544_0.9202417419542759"},"_hasShrinkwrap":false},"1.0.10":{"name":"next-stripe-helper","version":"1.0.10","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"3640e07ae71dd35e5e1ca4edbdaf80a671b444ce","_id":"next-stripe-helper@1.0.10","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-5z6sRZamgMuJMIZeeOdY/+xCpnbV9keORKGOVKXpa7c74ToBh2qViq5tbDxwZEuDf60ZYoCOokrrTveEmS6+0g==","shasum":"1868886e12e3e6a4506899bea5824bf6004d40ea","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.10.tgz","fileCount":11,"unpackedSize":43447,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAF3RtA/eNmN83pAIgMgsOErvQm44gYq12ROZ2skUpBLAiByDCeeGV0Q2cJE8RdXvuxL8NxMFKDU9J/Caux8EVFGVw=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.10_1692732023238_0.5302853503377698"},"_hasShrinkwrap":false},"1.0.11":{"name":"next-stripe-helper","version":"1.0.11","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"devDependencies":{"@types/stripe":"^8.0.417"},"gitHead":"9ee2ba00edd453610a74387306fef099dc38d00b","_id":"next-stripe-helper@1.0.11","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-0gcFV59AcsW0VIa4331c3ougnk04Ql6Ve68g3edZ03X2NnXcuQkZzY61hkqKymxBMyBDJTo5PctDfEMbR10R6A==","shasum":"e008478e8c03dd22b7ee144779a3a1304bfd68ba","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.0.11.tgz","fileCount":11,"unpackedSize":43640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF4TXaxr/EJU5BVeNJKf3S8OXAKXueww4Pq5l0Ppl5OXAiAjNIHcO43B8WHX6yCxhEvWUMexIdAW0TVsx3s+CU6cig=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.0.11_1692735389303_0.04763922198359216"},"_hasShrinkwrap":false},"1.1.0":{"name":"next-stripe-helper","version":"1.1.0","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0","@types/stripe":"^8.0.417"},"gitHead":"9ee2ba00edd453610a74387306fef099dc38d00b","_id":"next-stripe-helper@1.1.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-8oMfZazBSarIvvadCq1Bax3RBLhqYCShp1T80+wNi4P8Q+oT9kWPg+W2mkjqXoLLDgivUsim5wdueY7benRvuQ==","shasum":"77fdceb51e461e4924905db68a208cceada9ac61","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.0.tgz","fileCount":35,"unpackedSize":80668,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/iFq/VccHRJ+mayMqpvJQYNAObi5gg1jBbmfX2NfhMAiA0/80HT4anfOPbeMSttnisL1yHqMBLpG4ALLCFdA3haQ=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.0_1692736143255_0.7624176965203506"},"_hasShrinkwrap":false},"1.1.1":{"name":"next-stripe-helper","version":"1.1.1","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e1cccdc693151a366389651328935062eb79f9b8","_id":"next-stripe-helper@1.1.1","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-1ydrOxx95W2Dt+BGDztJ6Zbh4oYVpd4NVfYLyJs/dtPDeGY/NPsHNCGaH3n9TjntwxK6Iu9r/GQmbDLCgUWZ5g==","shasum":"d6f6cc6e662993a3507a1bc650e09912fa63d41c","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.1.tgz","fileCount":35,"unpackedSize":80635,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBdprmPnSUf4sb3ZmgmR7a8jAKwoiYr10HxSNLR+xxa6AiBhECPKUlgl1Tp0R7bO4ODIYWVD7NPSoWhL5elt40te4g=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.1_1692736287479_0.8783138827992087"},"_hasShrinkwrap":false},"1.1.2":{"name":"next-stripe-helper","version":"1.1.2","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"4e5d668ac5d14583eb499c1b009fe0cfcecd021a","_id":"next-stripe-helper@1.1.2","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-1ms4xr13jI9kdUwGv2hfT7apPTgzXLy7wJDbMX4D0adkY/8AGbisakGRDSyII4HhS4WSXa9HNEnDNIUZuCPTBQ==","shasum":"de566cbf9443f799fb15dae02254c55cb092d0cc","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.2.tgz","fileCount":35,"unpackedSize":80630,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOLd7eahut6xdeI9jMbPYngXjNv5rYZQcXCdQQdDizoAIhAJWxWXc4TqYSMPVySETzBPCdscNzyHMSFstLJFYiTGaU"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.2_1692737691662_0.9802595881528069"},"_hasShrinkwrap":false},"1.1.3":{"name":"next-stripe-helper","version":"1.1.3","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"56ffca15836d451094a037f3e8022505429041a9","_id":"next-stripe-helper@1.1.3","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-7lVRggEU+Uq7NeZ6rI6zmezc4rUfL/xpwCvbNg5Y/PDxmIIp7hKyDlG3q7RZOMBEPK7CcupHn9VWgN+zW25JoA==","shasum":"56e8feccff39fe672452b7e0e60debc0f32daf13","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.3.tgz","fileCount":35,"unpackedSize":82732,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjjU6nYHbYCENALM47FGRz+ElJkQEY5fn539npik1SXwIhALPX0OtiffkLpVnPKJy31XJELR8uPD704sbOfnXkZ/mD"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.3_1692738188438_0.20210529755928852"},"_hasShrinkwrap":false},"1.1.4":{"name":"next-stripe-helper","version":"1.1.4","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"0ab58460d1551c672dd14c069b0cb2dbaaf9c78b","_id":"next-stripe-helper@1.1.4","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-goWPQWi+8f0QjOsp1bVgVZu4g62nGx28uQQ5q29ynW/mdh29y4C38HnqEFTHUHvlbC1JUKg+s/7l5yocjSO3sw==","shasum":"9922550d98730448a0741b9f3cad70cd28643801","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.4.tgz","fileCount":35,"unpackedSize":86420,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCqLs7Y9vy9j91OKRaxGFHSwhAf8bphGkX/BG42MsguAiBohAfH0l8Mm3ZVbRATsNdNv0cREye7qonkcuhMpEw/Og=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.4_1692739299438_0.5440839937788147"},"_hasShrinkwrap":false},"1.1.5":{"name":"next-stripe-helper","version":"1.1.5","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"4b87802148584141537936de95f4c6ac66968b2e","_id":"next-stripe-helper@1.1.5","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-bYAXj9cNyXbPRRYgHfUlKz3MSKP1Z3uxnePsx2bNSADcrjn40EN7OwAuKt5rJZ/Y3b2njpFBu/V5y99KYLA7gA==","shasum":"24624a1e5f849f579a9676bb8fa7771596ea3cce","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.5.tgz","fileCount":35,"unpackedSize":87195,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHPbgULE5YVWC5pErLoTCMieZeql7aEhVQmI66EnhP6qAiBK5WUV/qP+oEhMGBn3ZbG4rCg6SklQqZ/vfzRSqsOirw=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.5_1692741235830_0.6364019964612622"},"_hasShrinkwrap":false},"1.1.6":{"name":"next-stripe-helper","version":"1.1.6","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e122a428b6c541a2d652aff8e000d025122ecb2d","_id":"next-stripe-helper@1.1.6","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-msS+31ZwNGhhYcl57n7pZF6vvWYHaAJpsfNXIRLPDBGs6JZ25GvedZ371p5J3Us8vZbjlRKiE6ZzWpbgGnZHiw==","shasum":"a5171621b472e1abf2d72a8e16e901e9c787a94c","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.6.tgz","fileCount":35,"unpackedSize":87222,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy4vWuF+qHXP85ZohXV7JMEHq6k/4ga07ApsRclwjAQgIgbkqBdd+mzXwkiMsC7AwYdmi6S0qzLoQag/cV1Sy5BIc="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.6_1692741459477_0.5530781086639176"},"_hasShrinkwrap":false},"1.1.7":{"name":"next-stripe-helper","version":"1.1.7","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"3ea047f4e1f7632aa48dccd01cb44bf7d673f2f2","_id":"next-stripe-helper@1.1.7","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-PxzrpmtwmuvyFmXWglw6/6Vc/UEAX+i7oy7Si5rcZ8VJCfci9tpepoUKGrItWPYFo8uIbiCEXJLGoZNB2NzFlg==","shasum":"0911a1d9f23e97d1ae876450e5502e2350826ae5","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.7.tgz","fileCount":35,"unpackedSize":89176,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw6Vs+Q6xmKtPaL2gxsXIi+oVuQnvIUco+/a0iRAm7EAIhAJ3oDIV5t9QugjzIBoNwbNTrxiue1ED8iR+idecyR961"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.7_1692743709471_0.3615186089685045"},"_hasShrinkwrap":false},"1.1.8":{"name":"next-stripe-helper","version":"1.1.8","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"ffade0cde6dcb2d03a0fe625e43d1d4163491e7c","_id":"next-stripe-helper@1.1.8","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-UnCVtje2JagxOnb72nrI7KsGCDHHzQzLWyYJui6N9nr+dSOWyfG3OZxgUnliBeVhRKjPshaXHmczCv9FDr46ZQ==","shasum":"4649590411ef1f96edcb5176b18012b44b118168","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.8.tgz","fileCount":35,"unpackedSize":86910,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgxBDvNZuUWb+9bMpqG1iouSiN6ux1sF+enOc74dJHTQIgKhJPq6gs9b96OcAW+0jeAec8IO3VO6FDacj9LSPwvjs="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.8_1692744683361_0.6117008052651447"},"_hasShrinkwrap":false},"1.1.9":{"name":"next-stripe-helper","version":"1.1.9","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"8de9b704ffdf545589bb8d449e21104d11e06d26","_id":"next-stripe-helper@1.1.9","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-/r/di/3jhw4P57Da3gtl+S+owOGFqMONjHmIiI9365MllNjhRMmx2USWYLstqkn3pUYG/EDS4sNXad6+e+zqsg==","shasum":"7e16d534b720338c546c2adf12610b4c4aec387e","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.9.tgz","fileCount":35,"unpackedSize":86657,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAKkYofThjHxUP7IRH+HY8TH4bwnY9Oa83Wu+N/ep9rAIgeHRN0oidFx0jOy6EePLOHgVWoQIAVP7/L/Nqhxa3bkU="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.9_1692746284376_0.6788630572322376"},"_hasShrinkwrap":false},"1.1.10":{"name":"next-stripe-helper","version":"1.1.10","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"8de9b704ffdf545589bb8d449e21104d11e06d26","_id":"next-stripe-helper@1.1.10","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-vs6CrL4tKCUCIKjuuVeoErNLHTWqa4GUBQ9XNfv7xj72JkSn4htk/alxYfucyGOUjTxdWPIJAYg4nG5O9HZMCg==","shasum":"5cf80065874b4fda087c6b488240c39c8bff9793","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.10.tgz","fileCount":35,"unpackedSize":86735,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEBk7Q/eHQasV5oJPUQEOcE3mtVSKhXFX1T+LSAu8FAgIgIHtJ9xKbFKTE1B+4jO31XDsePciAoFSYpEkJRWx+rDA="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.10_1692747068571_0.5522158327111044"},"_hasShrinkwrap":false},"1.1.11":{"name":"next-stripe-helper","version":"1.1.11","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"8de9b704ffdf545589bb8d449e21104d11e06d26","_id":"next-stripe-helper@1.1.11","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-GMEpm5m4Yq8mcvxTWr+S80xJSFDpwsHVpD6ObJnjiC2uaCuWPvu1hGGYynJPRhNWuWzlRCEkbru9XoUs9VkJaQ==","shasum":"cabb4296d90f3a083ee8a5ac67725c0032d528f2","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.11.tgz","fileCount":35,"unpackedSize":87184,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7Y+EqL0y8EK9AR7g8AWyAy6ySyao3gjdDnFWXBWU7mAiEAhOzEFYlC8T6HJkISIsnz87FHcHXk/5s03p4ZvgRKNrc="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.11_1692747626504_0.8048933748059104"},"_hasShrinkwrap":false},"1.1.12":{"name":"next-stripe-helper","version":"1.1.12","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"8de9b704ffdf545589bb8d449e21104d11e06d26","_id":"next-stripe-helper@1.1.12","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-2PKtH9E3mbI1stqrcBZueit5B7jTWgC8Zp8yof9nWeDV4/s9eQsaIxAsgGBJOZMxScZuZD5s17yeMr/qaxZylg==","shasum":"67400245dad7ae6118e5c4f92c3ba6bc363fd0f6","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.12.tgz","fileCount":35,"unpackedSize":87206,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4ildWowlP/O8IaVTBlULE1bh52rxI0TVBD0axiT+82QIgT7luaHOM2ire46bct9xlp3ry/uFgl5urfLh9xx7F4EU="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.12_1692748521596_0.3900381544010638"},"_hasShrinkwrap":false},"1.1.13":{"name":"next-stripe-helper","version":"1.1.13","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"8de9b704ffdf545589bb8d449e21104d11e06d26","_id":"next-stripe-helper@1.1.13","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-nnKF0wCDWwpIGOUegP1WUR8XBhyP9FTflBjkuFRTzTekawxmoPjGTO/mzvwyu4d2JUO/tkm21NWFe5VztvoVFQ==","shasum":"8e2a14494d11a96a10a23b69c17ecb47c0bbde75","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.13.tgz","fileCount":35,"unpackedSize":87434,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBI5//1PeZ134zZSClHuy2CZPO0WKpMo2xxAb2xiLdCmAiAiwaUej/OQLe/lzFs98MIToFEm97Y7K7PP6ajXIbBVvA=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.13_1692749188741_0.40771074236848937"},"_hasShrinkwrap":false},"1.1.14":{"name":"next-stripe-helper","version":"1.1.14","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"8de9b704ffdf545589bb8d449e21104d11e06d26","_id":"next-stripe-helper@1.1.14","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-CeNkmz6W7JVk3UTfFQ4Iq8q6+OitvSpbureZnyOOENSJzRS+pVz6mbeEyZL+ncXSMECEdcihV9wXzFPDZZlfFA==","shasum":"08e145c84258479f1f2c269377dfc1aa8343fb59","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.14.tgz","fileCount":35,"unpackedSize":87278,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDycVgu3UcLiqXJU1OwATrX3Mth2y/wz3cIk1F1bnGIwQIgHjuWp6ypQa19ez5i925nW661TOPNLBVVT+FM2Je6rXA="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.14_1692754177287_0.45540460695184826"},"_hasShrinkwrap":false},"1.1.15":{"name":"next-stripe-helper","version":"1.1.15","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"040ce3d40488db32f26de85c47cb8a1efea1e9ee","_id":"next-stripe-helper@1.1.15","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-Qy+IUUCrcEoF6GqnEPy4EKK0lVWyPorCRoeCxfoA5u5ZhGvG/+/wgshX+mefHZDBvgLPBzR+2oRU7d4m3Kahzg==","shasum":"59c53b2116d6e210eb7fc5aaf9252c36212c4ab2","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.15.tgz","fileCount":35,"unpackedSize":87734,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIALj2TCo/bTIAfDQhgpTB1JJA+DL1src/44S49lPsfeBAiEAlZHRVlsFXD9BK+vQXNjbDXk9UqvR71MaXr25QHc7kao="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.15_1692755060671_0.7410380408984594"},"_hasShrinkwrap":false},"1.1.16":{"name":"next-stripe-helper","version":"1.1.16","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"040ce3d40488db32f26de85c47cb8a1efea1e9ee","_id":"next-stripe-helper@1.1.16","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-1uPKBORf3Oj2751PXq+ymxHPVq4cVTIZPKxDv9PS8vKxeXRSAEhZpSOUnic20n7xEEKYubxz0n2Fnu0xv/57GQ==","shasum":"fb3e83ad18ce1ace2b30b54a53446991adf2b159","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.16.tgz","fileCount":35,"unpackedSize":86703,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQEyzHrgRpzDxO3hDR4jkLsf3DM6/+ft0cbvlReSwYzwIgXiZq6m5eU2MExhoVIuFXs5GJthOJ+wlbeGf5VWtRRHM="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.16_1692755821299_0.7230154605629138"},"_hasShrinkwrap":false},"1.1.17":{"name":"next-stripe-helper","version":"1.1.17","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"1ec22c4cc47050f0fd3ca0ecc3e1d2854d74beee","_id":"next-stripe-helper@1.1.17","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-nTrH9oWC3E1IOiGZ79lRY/Llcia+9xfZfIuDUyxuFGwS4B+a+CuQ2JHrNg+QK+1/8CypO5GdRgE1F27NZTxuaQ==","shasum":"ce0813a6a83fde646d8dee3536fe29641c1a3da6","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.17.tgz","fileCount":35,"unpackedSize":90899,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFcNiO059Av/OaJmCL/YVte6va3PG1zDZdv8Z7hw+QU9AiEAyw9pK2q2QOyTBUempbyP4cqoK21MpenunItvI5yP7dg="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.17_1692756433502_0.7931186070417464"},"_hasShrinkwrap":false},"1.1.18":{"name":"next-stripe-helper","version":"1.1.18","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"53f27c1ea1daaa2e7245fe84b905202af45642bc","_id":"next-stripe-helper@1.1.18","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-841loKcn16UbJ3IIjwprR7uxefoDuDHc/uRvts5pi4gHGrAHZAp+FMub4OqwrDcly783RGjx4fJyVx9rBjKw6Q==","shasum":"fd541a4f2640ce6376bd56373da53ac0d9c184f3","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.18.tgz","fileCount":35,"unpackedSize":94981,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCN6rbXPnk6DO7dmytzqdFjGoLUCV521YvYYzMX5KvGqgIhAJgpjmjD19JjzwUcZB8p2F3Xs3IvkL5qMxQ9q4T1nO12"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.18_1692758262289_0.1452739565500969"},"_hasShrinkwrap":false},"1.1.19":{"name":"next-stripe-helper","version":"1.1.19","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"b080fc89462884a176bb64a0dc43eb0682c327e7","_id":"next-stripe-helper@1.1.19","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-iPEHBoubI5URPCW2yxnzv4eLFsQagvWmTZj6mKBRKleUKmEzdL3aNo3/Otb31fmCGBvwsiYtpnxZjC1h9/xo6g==","shasum":"7d9291161386c5d1487002676f0b0b6819f66905","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.19.tgz","fileCount":39,"unpackedSize":105156,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+7H7zwB0SOeVO6qEnZedDb4NuRG9uGB3Xp+lzArcBtwIgZAGa4niPPd8c4vGKDTtgjYFl09TXI+zOUq6RHa9ohNo="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.19_1695461131609_0.3015269795614919"},"_hasShrinkwrap":false},"1.1.20":{"name":"next-stripe-helper","version":"1.1.20","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e8793626e215c05d388725efc7224ff9f8a71add","_id":"next-stripe-helper@1.1.20","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-i597ey8z0Jwk6DgRVkK88zPtQ+ZYiQdlOy9yFVxO4TkEXAH/R9b50b7gStKv/b4kOBPcwOnYhHjq+7DgI3yBwQ==","shasum":"95a30d197e6da2e9c3a975b1c79e8fb17de127bd","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.20.tgz","fileCount":39,"unpackedSize":104767,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICBPM5fSdj8a8zFCQYTJaE/hyLbH9I4g9uTh92WkzGC6AiEAruI88lAaflf7L6AhrFlt6UUk5kZF08jL2Go/CA+LnKc="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.20_1695462322312_0.4751288309614121"},"_hasShrinkwrap":false},"1.1.21":{"name":"next-stripe-helper","version":"1.1.21","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"7e1a38590361f8d434f053c0d4ab38331b8d0f8a","_id":"next-stripe-helper@1.1.21","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-5/q5T5rgUE8EDFDfHHZmGwkocUjzvrwhstOaP3ClqXkAA2p94qekLPWSC1S+OIsW6OdWVXxCFbg8HXH5pbZkiQ==","shasum":"9dba9d2572bef7ab58df5a6a00c66884fb96d2ce","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.21.tgz","fileCount":39,"unpackedSize":108502,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEPYuhnmjF8xiNnFQrxpM/qVqIa/PzYoH5wjsG7tDUEiAiEA4AtT4kgpVLfwiKmufxoCqpjdvDbMHSYORoW619NMnJI="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.21_1695463226706_0.9128812728524156"},"_hasShrinkwrap":false},"1.1.22":{"name":"next-stripe-helper","version":"1.1.22","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"939aa870e480c5b55a48a081a1e287b2f0be0880","_id":"next-stripe-helper@1.1.22","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-52/TqzjIQfDdzIa79gCw8KY8k0Txfx2EmEgKaOD3UG5TMWVOQGlhAHyxl7bAtEU7+iM1IIimScDrunGgqOTsWg==","shasum":"8d56fb0a35635698d97bf5c743066ba6c294c060","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.22.tgz","fileCount":39,"unpackedSize":108555,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeGJqrciLioHCcpD68gFMjNcngiGd195Q4PCduhVYyRwIgQxQZaoLVef3ESpuip1tnmYkfg0Gk9uwlChp4EHBshbU="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.22_1695463362793_0.5077185514481173"},"_hasShrinkwrap":false},"1.1.23":{"name":"next-stripe-helper","version":"1.1.23","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"873e7f1e99c50fed3088a121377b98eb555341c8","_id":"next-stripe-helper@1.1.23","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-8/inZnpDovzyfGpQKmhPEjt/WkkXxBmDWc55oDqTINAkfaM4Iv6VY9dxQC5aiPKVtWp+wIOSVqg/trAocm2kCw==","shasum":"5ac8c1fc3e801029588f07ad65191ddc4487e821","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.23.tgz","fileCount":39,"unpackedSize":110015,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEvtMGWfwRFDAbUfA3j0pbz+n97ARs+CQXYrMCkloykFAiBDr3N06cFoZ53B9brTc4KKN9arEQ/2C6sPigLXovvnzg=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.23_1695465358199_0.33704732917597546"},"_hasShrinkwrap":false},"1.1.24":{"name":"next-stripe-helper","version":"1.1.24","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"414b1be8749567a8d1db630c08a0941f4972f6f6","_id":"next-stripe-helper@1.1.24","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-wH3GrXIoa7bSQQQhCtMopJJniRX0pYQDtyQAHopIed1Adjxsa8IOkDDP9Clr9cCyRbYAvLky9SULG7eMFfcmDw==","shasum":"4f00a510eaa577afe07d161c18b0e412b032aebf","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.24.tgz","fileCount":39,"unpackedSize":110071,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFOmMBZVAX4bnzNrTay01SuIE6AIRoPhSl1GFcEa8c2BAiEAvCIG1oSMDJStO1DcqzmgjOJ0zUhgRgUIZ5vj6AiYcdc="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.24_1695466201032_0.10457436104860829"},"_hasShrinkwrap":false},"1.1.25":{"name":"next-stripe-helper","version":"1.1.25","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"116eeae35a4f263aa36abf5311520e3da0463273","_id":"next-stripe-helper@1.1.25","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-rJM5lKGDu3d8iSea6hAPw6vFszb+LcrlC0wcRwCB9C/dr5WB3WZnHulqn9s/G3GFdet3UOZhJHCU+Do+s116NA==","shasum":"7387f2392761cf4717107a76b072df539d1517a2","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.25.tgz","fileCount":39,"unpackedSize":112857,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE4kn+IFRNirWmFYVkvnFieyjtqivpo6o/pka4PLFywfAiEAqZgwnDchsd/ScwdRqDVBC9sgBnk5XctlwHeBoJDTqHE="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.25_1695534916383_0.45542339691103395"},"_hasShrinkwrap":false},"1.1.26":{"name":"next-stripe-helper","version":"1.1.26","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e665cc1808cd355386de69b60632b5855a2825dd","_id":"next-stripe-helper@1.1.26","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-ZQkBdz3+NmFbHtrrkEBjZat45EztWG51F/s75Dz+zkSN1Ket9q9m4Wm4J09M/i/WHwMFZ0u6m5SEdxDNBCMILw==","shasum":"b1c81016e53597d13bb30156ac44387afe28d381","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.26.tgz","fileCount":39,"unpackedSize":111945,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtHw/0Jo7zBg+t4NpObg9Ati5CwrbstdiZYovuJhrqjAIhAJTcGconIrd8c0teFe8BNrMgj43LkQtPot2DMMmoK4wg"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.26_1695537958535_0.3127911875630265"},"_hasShrinkwrap":false},"1.1.27":{"name":"next-stripe-helper","version":"1.1.27","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"2ab16bfaa82dd8aa2a27057825e66c87d3308b9b","_id":"next-stripe-helper@1.1.27","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-8WVADQlb/tEoUZZIeau6Ik+vMXX9eE+JLe8QXfgrjtAkchvfbDrE8M54m/ONSPxWzK5q0lBvnJ8MCf8YHdKJ/g==","shasum":"8a3b82e4b48e8f28c23ad72875c9a2d9aecdf7af","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.27.tgz","fileCount":30,"unpackedSize":82507,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDLaNjPgd8uFAewkMjBvIgDHFVCLzEuc/k7CBcnZNsCrAiAbMOm3Nos9BntfmLK7qh5hOzfGyG3lyEwLQm13JmSAvw=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.27_1695539985786_0.34768855195321113"},"_hasShrinkwrap":false},"1.1.28":{"name":"next-stripe-helper","version":"1.1.28","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"f78a09166a1676e48f0f8982c7c970b3288af4d6","_id":"next-stripe-helper@1.1.28","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-SQxm0FHKwUKxAVSNrJ3eRsZZIsnMzGIipM9mxMBZYhSHqV1VQIl7BCQiTdd+sCn6ftJsxaHFLA7fPeeJE64lrA==","shasum":"8c266b8da3bfdb2419519df558f29136a21849a4","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.28.tgz","fileCount":30,"unpackedSize":83229,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTPfN8P53HMxNg/6/Vn1mwrRBKkr7tfuIYxOXzv/s1zwIhAOw7zpyoufK1B6l+fTYJS/9JbUSeyDfOGd0CPGxB/yGM"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.28_1695540900205_0.337075430513321"},"_hasShrinkwrap":false},"1.1.29":{"name":"next-stripe-helper","version":"1.1.29","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"768929870dd82d54aa355f705628ea2bf4b7387c","_id":"next-stripe-helper@1.1.29","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-ZJOE0sUxeWWpFFMEbclezo99t33yp221TL3nXr3C/8ZvQe85UTIWrDqZ3dliLddUoO+dyEqRhb1kpdhOeqNYQg==","shasum":"dd55482df5bf9e32b033a583cc5de8679971a451","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.29.tgz","fileCount":30,"unpackedSize":83228,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+vsL5dLAthwvqvEqzKoIGoq847j0IXQe+lhIGRxiU2gIgR1yJ24Hy7USZGgX99xeAUHwFwuXAyxirNED87Llsl5c="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.29_1695540992486_0.8416243417418576"},"_hasShrinkwrap":false},"1.1.30":{"name":"next-stripe-helper","version":"1.1.30","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"f72c519690d5c1de028e989cc8cbfe5eb96ed86f","_id":"next-stripe-helper@1.1.30","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-4fvw1Z6HOqhdJ0bhcrgMC1l4Dk/U8kHk5fEKDNfE8fUxJC/HCx6V6p3GjMUbBnkpyU1G3llGzZwb/uHKYDIPEg==","shasum":"b932906584f5dfcf9c9779302185067cf602405f","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.30.tgz","fileCount":30,"unpackedSize":83839,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFWI9T6GPamcCZkgS8yy0KC6Yf0CQIH1M3r0bUkiXFhpAiAwOu1aLQkVqTE8ouJUAHNwdwnrATGgAQl4Z7tuflNpYQ=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.30_1695541547013_0.6168021797303447"},"_hasShrinkwrap":false},"1.1.31":{"name":"next-stripe-helper","version":"1.1.31","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"c382c4af5480896341d9b18f307f6ce9d5a9b178","_id":"next-stripe-helper@1.1.31","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-9Eimha28MOl0TP82l9TlaM7+0vBOaO3L9bdIBlExxz1q1PdgjghlL3qrmxgm/JWBWmsBfJrnyOY+tHUtJDHLnA==","shasum":"7edc7a296a2bdef6b59570aac0f86064a4202e54","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.31.tgz","fileCount":30,"unpackedSize":84570,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDDfYsEwcq8fIt3dEf+hKZZ3ECkCaB/sdCYTUhWGRlRmAiBsXeaqFgd/QS9L4TX1b4BnF9CGXSwdqnWfUy3hYWIVkA=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.31_1695542114844_0.6744694292791125"},"_hasShrinkwrap":false},"1.1.32":{"name":"next-stripe-helper","version":"1.1.32","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"036eec12dd054ce0ddb33262b3c38ee0df4bafbf","_id":"next-stripe-helper@1.1.32","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-++bzSQF9BAyZQnqzoCQsrzJVx7i8+nQT6d/NXQQ+thppZmTuNr9nWRKs0R6fuFTkIG2jvRH+Ba3Jiaci/zZBEw==","shasum":"612883a3e3125029b1d9779ad725d6fddb289cc4","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.32.tgz","fileCount":30,"unpackedSize":86242,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC58y1FDbRFtspF4CzHTcCX93IKsKLq/eb8B0j38B9yJAIgKMMKqLUCbyL8qTqIiJTH9WNGFxV2cyDVdgtcbRNEk2w="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.32_1695884644646_0.852695980572781"},"_hasShrinkwrap":false},"1.1.33":{"name":"next-stripe-helper","version":"1.1.33","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"4dd8089177b742ecd933183d269ce306c3e353a2","_id":"next-stripe-helper@1.1.33","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-F1KuTOkSp8N6BvTRLQIbqHrON2e5QEon/HGmYki+nAkTA/oq/X+Bp9nt0/42PqE3/bDB4wgH90KYI3lr35GIiA==","shasum":"398840ea67f2677ed1f6bde43b6077136b84b1e5","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.33.tgz","fileCount":30,"unpackedSize":86235,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcFMKL78R8yqhy5VcCv1vHUF+mqqRUH4kbn96lAxWg3AIhALAIKoNhCVsdqHt0frh3F9v3gXxWVyABkChZqusqU8iX"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.33_1695884848825_0.756186154788199"},"_hasShrinkwrap":false},"1.1.34":{"name":"next-stripe-helper","version":"1.1.34","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"be7b18fbde6c688d6251099f0832097a79b311b3","_id":"next-stripe-helper@1.1.34","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-VEDlRHuTA4XvdUrdjLdEhNvcaTs3P5jTHcz7Wcwi5xhO6RC28W1auO3Mow+S+yE71WaU6t7myqu2eOdqg7arSQ==","shasum":"6375faed60b13b5cfc8a85575e81f98ceb6544d5","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.34.tgz","fileCount":30,"unpackedSize":86743,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhEXNiFHPGEjwq2NjJ8PGvNB2U+1sS7noqIVH6vnsOCgIhAJPcl97O0iHCVgHGipKAVszUp7VXBP2TjexunydJESXC"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.34_1695886391149_0.3614767349867185"},"_hasShrinkwrap":false},"1.1.35":{"name":"next-stripe-helper","version":"1.1.35","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e6e3188a53f32c5483908bb1bd50eda7777201dd","_id":"next-stripe-helper@1.1.35","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-dLl1uIbcAh/57SYpKxUp92116genicecDKQA3Ub8SH4YkDLkjTGieioAmIESl1VpyMA06HPDcEJCN5wKuZjxlQ==","shasum":"703bd23b5a4a68cd3b5566cb880e105f3c95b2b4","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.35.tgz","fileCount":30,"unpackedSize":98784,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/NNm5n/fddYf1SRNHvLu3+uudOxsedkN2VyAEjSWL+gIhAJYEA2qKcxz+NufwA2fyp6wk0PGgiC+wAh3qbc4Q8IWq"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.35_1695949357832_0.28982711113023085"},"_hasShrinkwrap":false},"1.1.36":{"name":"next-stripe-helper","version":"1.1.36","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"0b0e42bfdc7ddb6b876364bb067d05a19a73fea9","_id":"next-stripe-helper@1.1.36","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-7OM0Lxnn78Te82bgktPNh5LSQGEcJ2dtrfssfcktgCYoOTw5mc0hAnUdkclPoVOXjq+7k2sZiO+d7Vkiof5asQ==","shasum":"44406d4f27ab62388bff16e03a528b19ae5e5a3d","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.36.tgz","fileCount":30,"unpackedSize":98954,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC0WPm9pyRuTYC3yav7blv6mfglIt4ki6ktR26IiZpMvgIhANw0JbeewE2Dod5C2fF6szDEVtdZIXvpq6nha5JY5PXT"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.36_1695950060074_0.5315948235776542"},"_hasShrinkwrap":false},"1.1.37":{"name":"next-stripe-helper","version":"1.1.37","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"0b0e42bfdc7ddb6b876364bb067d05a19a73fea9","_id":"next-stripe-helper@1.1.37","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-M7ZyZZKlfwu8Ai4HoRlQ1keyFZjgvnqZC1/Z0RaSoTx4sDIbcPtNxdqeGTQknqE4dfDkemkza5C/nxcKjbTi7Q==","shasum":"45eb55742d46ab28fa1bc20a293c3d5f465fc008","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.37.tgz","fileCount":30,"unpackedSize":98916,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZJQcDLQD1WEXYbG9SN7CdlYw6AZQK3UwVB7u8w872/QIhAMSACmQMBY0A32pP9hcc51E+msnX1CU9R/3sf4u4dnK6"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.37_1695950806375_0.3012643054270807"},"_hasShrinkwrap":false},"1.1.38":{"name":"next-stripe-helper","version":"1.1.38","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"1d3044ee0685176bcb12d15a8642567c4db8c77e","_id":"next-stripe-helper@1.1.38","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-vQDW9sxg5ia9pUDQAX9/PhuGbW33Gi5daII8AjGUl/yxd3FfYH+fQ/cWtAgESxMCaUmDI1nYm0zXEXoT2ElAjw==","shasum":"ef1372b3096c5c5bc8257fe2a0c6004bbeed7d02","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.38.tgz","fileCount":30,"unpackedSize":99180,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN3ZxM74tmU+PQ7+qeNw90m7Od+ny/Ns1KYgL4iogoCQIgIlPF1VJ58/ruc8INdEdpmvKt5pSGLEZPvJgdRhlRfso="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.38_1695951153694_0.2314586759519226"},"_hasShrinkwrap":false},"1.1.39":{"name":"next-stripe-helper","version":"1.1.39","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"c4aa06174b2cf09ffa5c058fabd3d8713e4f3093","_id":"next-stripe-helper@1.1.39","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-3hlMOIZZynbmUcAY4Tcs5aHt6aahh2ysO6t4vMt8+f5MF4uAEIpzg+ubW1e7fgUlgG4FvECzAIshP1Oe+aJ+Tg==","shasum":"483de9a76c59bff4cadcb09a8593505cb3d8c79e","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.39.tgz","fileCount":30,"unpackedSize":103433,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyCuRlkv7uKwn6PEeCuQJZTs12mIyhtpEUyAmtBSsQJwIhAIyOJUyUsoAkA3pl42QXnIHKOoKS3clNHEpeNlZpCqKr"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.39_1695958166390_0.924043936302066"},"_hasShrinkwrap":false},"1.1.40":{"name":"next-stripe-helper","version":"1.1.40","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"1f4d1f568e4f104800bc7ae90a20fed2e5d7f7aa","_id":"next-stripe-helper@1.1.40","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-efkV+sBdltQav5OvceEAOJfrg5eDT5fnzaqOFTgsbOTM+otVIhl3KYta2sr3o8iWqsS62XLi0L6v8iAEDS01Ug==","shasum":"aa30c81049f5f33ed9e3a5b00bb575b7461a455e","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.40.tgz","fileCount":30,"unpackedSize":106592,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsJMt8VG+hzlty3XwvQag8n54Wcr9XzZIC9EfYxDtPnwIhAKPNANnu8/fA2y4aXSFLhtsCKfMbZhbtsfS7P0uKe6ZB"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.40_1695970485423_0.5515695832516447"},"_hasShrinkwrap":false},"1.1.41":{"name":"next-stripe-helper","version":"1.1.41","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"03e611a280549ee25a0602e8d5422c5423037780","_id":"next-stripe-helper@1.1.41","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-yobUqFQrjNcY5dqn3WPXo7nXAFCIQZK0voiwN9kAl/hceQOH+rClClutoPrGlV2o5FUzRafQ3v2B2Z27ZU2V5g==","shasum":"2053b1b8c80bb575bdd4c2d1573c294e859f9db5","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.41.tgz","fileCount":30,"unpackedSize":107119,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsXtF1ILV/+7abZU6OtGe2ES8mvedIVPEos1+51xFTqQIge7GLuIaW6fmTCYWFEN/Lc2wNqUKMzSQ16OASb3H4EuE="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.41_1695972491899_0.036766296303644364"},"_hasShrinkwrap":false},"1.1.42":{"name":"next-stripe-helper","version":"1.1.42","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"95b2df24756575fb74fb7b37f05e44c7f93c1dc1","_id":"next-stripe-helper@1.1.42","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-mHS6kZl9WretSazEgCcTKblzrmvs8lkaZc0dno3NEXMkHS3qse5IH/vUgFmTAXZl82yeCBtx5ipBloxcENtKBg==","shasum":"414c050de3bed91c1c5c3ae614a670c078101255","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.42.tgz","fileCount":30,"unpackedSize":108216,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxnpn1LNUsRH6qavss9vHogprHLVRwjaEExUnNgcVD/gIged5mrUbiMHW7oiK7pbfAxudyr+K+QMCBEqdrOkr8TBk="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.42_1695973013179_0.9327933645882223"},"_hasShrinkwrap":false},"1.1.43":{"name":"next-stripe-helper","version":"1.1.43","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"ISC","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"27e9ff55f84697900f43486f0a8b6eec6f569956","_id":"next-stripe-helper@1.1.43","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-a4LNRr7s2HsFeRdoiIeQZ1nK5TLRIQBeohXGhZBn72khbbvVkU8/mRvrUlg1+z60iqR0z+yzcx20nA/oviFJKg==","shasum":"51c4d977f10ce6dcf42a1d29b64e090df14e37a9","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.43.tgz","fileCount":30,"unpackedSize":108132,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBlPrM4GUABzUemkyVh7HA1/Rt8ZO+v9FZZGsvZAAOz0AiEA1QSrK49yuYG9bZPFj2ARgvAoHEAfZHlkuA1V/TNGHx0="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.43_1695973784692_0.7570902777120461"},"_hasShrinkwrap":false},"1.1.44":{"name":"next-stripe-helper","version":"1.1.44","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"90276a1a64ae137238daeb1a92443a3454aa594e","_id":"next-stripe-helper@1.1.44","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-g4yEUiP1tdV4lMqLAlRhXrYHne6mK7lPebpzBsQYUxfmyQW44GLgxgRgLV4u9KGVe4JMU+ossbnamXvr8aE4ZQ==","shasum":"882cac8442fd0c7f2b17f6c31f87967f6f5fda0b","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.44.tgz","fileCount":30,"unpackedSize":108397,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+QpUYzIJpXrvgyPEuq1ZReZaVDrg+Qvd8jt8DGwmpoAIgIWfAYQBOdfedpyqI6sRL946oMDrk51r78j/9V/55vT8="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.44_1696024798069_0.17745275194169308"},"_hasShrinkwrap":false},"1.1.45":{"name":"next-stripe-helper","version":"1.1.45","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"68642476324c14b1bb290961202391421c57cccf","_id":"next-stripe-helper@1.1.45","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-6eRZgAJmkJ8bQ5Kk7njaGZfqhw/GSWF21NwfgTWqAbklH3nWCXdwE0gAP2Ivb40OPmTgBI8zTddMLEAYVzmZLw==","shasum":"fcd74df11931a4edc1ee620e71d822298bad0064","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.45.tgz","fileCount":33,"unpackedSize":114913,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC7yXXZZoa7dwHv9nRriDECXedcy0n6f1fec5C4nc6PnAiEA6vV7rEl4fIk9YDVOEWB697Boq1hFnTfFuPxJesuYo1g="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.45_1696277182518_0.3312219408653925"},"_hasShrinkwrap":false},"1.1.46":{"name":"next-stripe-helper","version":"1.1.46","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e1319c99309bd1f75937c23932d07fe59b2935ab","_id":"next-stripe-helper@1.1.46","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-S5PC+NMs4K4HXzdxO8Dir0x0h2/e52jr/lMOeuL2DzepwaJZV5vzhIVqzu8Z9JFet3mBAmjdsOwD/iR16IUGsg==","shasum":"c17dc3372d426f5927f99b975cd713fd01dc1b10","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.46.tgz","fileCount":33,"unpackedSize":122312,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGgJEmElIM9tLs6B6diAEA76C+bKqNSQ7i/mbohFx22AiAU5EVkU+VFJK3r7WuiHqzGyh53eefDdFiMtlOrbZWQ+w=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.46_1696288528932_0.08341391173347956"},"_hasShrinkwrap":false},"1.1.47":{"name":"next-stripe-helper","version":"1.1.47","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"4481aa4ca674624be789121812334e6364418607","_id":"next-stripe-helper@1.1.47","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-lF6UzSgBUUqrss0NYYDWLyYJ24Efwj9lDkJFvdSE/LYydiG607Qo5MirtaehlXl5EIwK2zSnrLyc+TP3LxlsEw==","shasum":"cdc452e97e57f51ac248693e047f03059a492ff7","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.47.tgz","fileCount":33,"unpackedSize":125004,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD10WUqYV50WK94Z69ftak9j0u/RaWVBnPGo5JElYYgRAIhAKJuq+Sk3b+qcerPmfMJJrMhssvHwDpf1rdKlEVUpS4Q"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.47_1696296219951_0.6987049851590719"},"_hasShrinkwrap":false},"1.1.48":{"name":"next-stripe-helper","version":"1.1.48","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"c4973c66d15f1c742d22cef385b884302c83dd12","_id":"next-stripe-helper@1.1.48","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-sTXhLEARvsGO/qNr3JHCxF9C13w1faxhIMJ+tb+SVzI0Tq2YVttmwFeCJ/E0zdRIttBqONgcbvkJrNWaSJYRJA==","shasum":"91e1477d8eab3b04725d8509541140eb4ad34739","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.48.tgz","fileCount":33,"unpackedSize":124962,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsgRBKXLFhqzjGBHmPsVb3CWb2kh8i3ThufgZPTTU8QQIhAP1kHvMdFxwcASkPQ96B2gvY17Bk4OxG467nC82K/yUc"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.48_1696297739254_0.9311802116470802"},"_hasShrinkwrap":false},"1.1.49":{"name":"next-stripe-helper","version":"1.1.49","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"2b150bb7caa5dcbbada9f4ae6a4321211ed8ea87","_id":"next-stripe-helper@1.1.49","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-6NV4O92A9xztD/5V7a+RDAYrgHtTVpgae3pcPcQjjsMc3MWZ1ST8zUQOEBxGKE2NsVJKbB7pxUrpCHB6e/MkSA==","shasum":"5f0d7d9e16126d2a8baa54a97b0266e5916e83d4","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.1.49.tgz","fileCount":33,"unpackedSize":124962,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrZRQZf8CEOgjHKB+OQLvvqjiSb37edIbINqai6BGk0wIgeZlQXlLYyx/ohwk5Dzm+S17uUnYRSlzkmi8nTjnMQuw="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.1.49_1696317071387_0.4443052603677453"},"_hasShrinkwrap":false},"1.2.0":{"name":"next-stripe-helper","version":"1.2.0","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"d6775fbcd9743c90f82b9a517c461d983c5c4569","_id":"next-stripe-helper@1.2.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-BgWgq6k6+piCdOZMAFz2M6/Jk88DU/Se1Vk1v28AAbRsY+klqfYxc01bDNsczGfRSPXWrP78FQWhdFv+XM6ONA==","shasum":"96ccf055b2233829762fd2dcac7ef196c5b83145","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.0.tgz","fileCount":33,"unpackedSize":125047,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICSP8UBX5nfs/RyZbscWfJXFGLN8lVeISySOWXMuP57vAiBADdlxRefPgm9m1lSCz+hDn0pjBVZ3+hNrrsTtxYvKkQ=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.0_1696317452830_0.6572528111055493"},"_hasShrinkwrap":false},"1.2.1":{"name":"next-stripe-helper","version":"1.2.1","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"532d369b36f383a6d2de005a23f0e45c54407e3f","_id":"next-stripe-helper@1.2.1","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-0Fe8xzRhQs45dP2qhOICsJlprKKNeQfafC1HvPLKdk6I5Jdt3oNaWYEjBWPRvDGMSkJBI4Ye/G5lvgCKoxz+CA==","shasum":"b4f8dfbc7270f0910b2da17bf6510700d4df11c6","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.1.tgz","fileCount":33,"unpackedSize":124320,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEk1cU+xja3z9WoXDyfDUfc5YCcbncXsx68BEEB8bWyVAiEAj8muAEg71bUgt4qjDL60D4PfoXg9rYRBq24Y6lzaOzE="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.1_1696320803204_0.5130976024178175"},"_hasShrinkwrap":false},"1.2.2":{"name":"next-stripe-helper","version":"1.2.2","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"a8d6878db174cc08cde3d4476a15d8fda0e370ac","_id":"next-stripe-helper@1.2.2","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-738Mr4gfKmRfIvPzO2ev7IcBh49BLFDtoy6zs853I39w9p6uBJk0XqleL1gyO+EQJNQS8xF2H9Wf7r7jjt4Abg==","shasum":"a3c33eb19abb9bff3a97235f32faf7060a8e95e3","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.2.tgz","fileCount":33,"unpackedSize":124203,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbdCkjKld9o4LUJDKC4NUd8TXMMDYFBQMXMwKw1w2JKAIhAKEc/UOWCiRjg/xp3TB1sTd9PdK80PbYcbxCmU62soj0"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.2_1696358702381_0.09272905194640324"},"_hasShrinkwrap":false},"1.2.3":{"name":"next-stripe-helper","version":"1.2.3","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"e6b593eee53549e3c6a0fa9aab41e36f27c35e76","_id":"next-stripe-helper@1.2.3","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-N7jucq/RtnSMKLSjLIMY+0OpERKJIJfFHfaaRrD0g6s2ar4mtovN6rPiSJjyyk1JXnX3Mp2KFP8zSdlD/OH2pQ==","shasum":"60223c3863c0c5c55bf75a846ae734a4cb1226dd","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.3.tgz","fileCount":33,"unpackedSize":125696,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBCSmr3ntusuMEdOgZBSHJu5IyjMOwAEibj1PnzXyqmBAiEAkBymhLqIc+z1yl3XLRyS1fY8XgcavN9gmJMssslZp2k="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.3_1696364772872_0.04685716153722286"},"_hasShrinkwrap":false},"1.2.4":{"name":"next-stripe-helper","version":"1.2.4","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"2f98ab369a31e700ea3b1bb2309ef4c01d855e05","_id":"next-stripe-helper@1.2.4","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-jH3cR7hN2JZI1mar0TCCe2wedOkrcpdrfP86u5avz8RSyWRVLtJWW5uH3eSFEGWwJF6+q2iqBd0WcKseB++org==","shasum":"100ab0eaadae9155ad5676324321e6ac028b90d6","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.4.tgz","fileCount":33,"unpackedSize":128632,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWgc5Y5SdItPQQ//oFukpwK1D5T9aIXfRKdniaCJQmbwIgFf+muRTmNDlMUwKvsao3GnZ9N0yFjfqh34v9EnC8oZI="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.4_1696566699831_0.47048542062220333"},"_hasShrinkwrap":false},"1.2.5":{"name":"next-stripe-helper","version":"1.2.5","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"57fbad0a7fac91de8ed9779dc9961e0f97cbded8","_id":"next-stripe-helper@1.2.5","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-4T/t4TwQ3Jb0wsFHKtux+oXeaYhhFvpSce0Fcs7xZMQ4m0Zl8FhyET6AWw2d2lfSr+A8+0frim0Eghu8QLQrug==","shasum":"75ebee1dd8b365770123016afea030eb2ddd73ff","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.5.tgz","fileCount":33,"unpackedSize":130474,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHv475xonIXlw+cXivzqCy4/IR+ByfdgYrQQ2YoR6JW7AiA9XQgDtuPDS8VoBZf/krBSwTf6VNHgwfysAyFrCMf4bg=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.5_1696623783458_0.667276949978385"},"_hasShrinkwrap":false},"1.2.6":{"name":"next-stripe-helper","version":"1.2.6","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"36dcf65e03e5c08e7a8b44585ebee4e636b32dae","_id":"next-stripe-helper@1.2.6","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-vs+zheYcGqJX+rxJyufFrKKTDBr0xTV5OXEc+EqYPAUCw/irDolJJN7wEjmQ3S6BIJqaTUZfhKwDJLYEAtuJhg==","shasum":"41da4d69b0c5728dec447cc2ca5bd6238160c3d1","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.6.tgz","fileCount":36,"unpackedSize":138193,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDUv85NA6Bvf3z0pjkUj1lz5flvRL6T6L2R0neHrD20AIhAPdaP1vHYyylxAEig952aUsccK+3qBYtxGDGNE7miZTR"}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.6_1696631310039_0.4263571513626099"},"_hasShrinkwrap":false},"1.2.7":{"name":"next-stripe-helper","version":"1.2.7","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"a8a6d88f6b5f13d7ea43ebec2e1565292be7d82f","_id":"next-stripe-helper@1.2.7","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-NkqQ7q6t1uOafFloo7TgdslIU/geKMJLbwmRswfOQuF78foygx6og1YUc2UKui6hQsR/EV0MICQQWqu32gBWXQ==","shasum":"c107a7d909aca4c3edd608c6d5b8a2a4fbba1122","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.7.tgz","fileCount":39,"unpackedSize":146146,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMLhqD8OxCEaBIQHmzCggQ4KtyZN6dbgKBCHo4LuDnBAiEAzsDOwIsisDY0N3YuMoDJ+B7LimglE+OXJgURIvQ7Kgo="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.7_1698437631991_0.36320443578156314"},"_hasShrinkwrap":false},"1.2.8":{"name":"next-stripe-helper","version":"1.2.8","description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"J Hanlon"},"license":"MIT","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"dependencies":{"stripe":"^13.2.0"},"gitHead":"345373c9fa959c798916faedb73366956eef91d1","_id":"next-stripe-helper@1.2.8","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-5eypNu900y00grLB+Uaj9bKYTYGmENytRr6KiMTeIHq940UU1gR6x539tRN5bZnOiGtuMAO8VGIH8yj9zsWNBg==","shasum":"e5b0d623b891f19abb1e160902561a98011a3f38","tarball":"https://registry.npmjs.org/next-stripe-helper/-/next-stripe-helper-1.2.8.tgz","fileCount":39,"unpackedSize":147341,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB+FZYoSI1Y3WvnrYbQkZsgJ2sUS+hqsQwogKUUwNx8MAiAWKRJqqqCGRxvHVE8RqFiVKHA8RaRwOIMsZHLb02Wmtg=="}]},"_npmUser":{"name":"j_hanlon","email":"kitchenbeats@gmail.com"},"directories":{},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/next-stripe-helper_1.2.8_1698453095331_0.15833963374260107"},"_hasShrinkwrap":false}},"time":{"created":"2023-08-22T01:58:44.986Z","1.0.0-beta.0":"2023-08-22T01:58:45.150Z","modified":"2023-10-28T00:31:35.770Z","1.0.1-beta.0":"2023-08-22T03:53:36.416Z","1.0.2-beta.0":"2023-08-22T04:22:54.319Z","1.0.3":"2023-08-22T04:37:42.793Z","1.0.4":"2023-08-22T04:39:10.285Z","1.0.5":"2023-08-22T04:42:34.460Z","1.0.6":"2023-08-22T04:50:41.071Z","1.0.7":"2023-08-22T08:03:08.426Z","1.0.8":"2023-08-22T18:18:17.163Z","1.0.9":"2023-08-22T18:21:38.763Z","1.0.10":"2023-08-22T19:20:23.539Z","1.0.11":"2023-08-22T20:16:29.527Z","1.1.0":"2023-08-22T20:29:03.494Z","1.1.1":"2023-08-22T20:31:27.706Z","1.1.2":"2023-08-22T20:54:51.964Z","1.1.3":"2023-08-22T21:03:08.619Z","1.1.4":"2023-08-22T21:21:39.652Z","1.1.5":"2023-08-22T21:53:56.085Z","1.1.6":"2023-08-22T21:57:39.712Z","1.1.7":"2023-08-22T22:35:09.628Z","1.1.8":"2023-08-22T22:51:23.646Z","1.1.9":"2023-08-22T23:18:04.583Z","1.1.10":"2023-08-22T23:31:08.785Z","1.1.11":"2023-08-22T23:40:26.755Z","1.1.12":"2023-08-22T23:55:21.781Z","1.1.13":"2023-08-23T00:06:28.929Z","1.1.14":"2023-08-23T01:29:37.535Z","1.1.15":"2023-08-23T01:44:20.933Z","1.1.16":"2023-08-23T01:57:01.506Z","1.1.17":"2023-08-23T02:07:13.688Z","1.1.18":"2023-08-23T02:37:42.487Z","1.1.19":"2023-09-23T09:25:31.793Z","1.1.20":"2023-09-23T09:45:22.484Z","1.1.21":"2023-09-23T10:00:26.929Z","1.1.22":"2023-09-23T10:02:43.000Z","1.1.23":"2023-09-23T10:35:58.464Z","1.1.24":"2023-09-23T10:50:01.280Z","1.1.25":"2023-09-24T05:55:16.569Z","1.1.26":"2023-09-24T06:45:58.803Z","1.1.27":"2023-09-24T07:19:46.011Z","1.1.28":"2023-09-24T07:35:00.396Z","1.1.29":"2023-09-24T07:36:32.680Z","1.1.30":"2023-09-24T07:45:47.249Z","1.1.31":"2023-09-24T07:55:15.027Z","1.1.32":"2023-09-28T07:04:04.933Z","1.1.33":"2023-09-28T07:07:29.091Z","1.1.34":"2023-09-28T07:33:11.323Z","1.1.35":"2023-09-29T01:02:38.006Z","1.1.36":"2023-09-29T01:14:20.290Z","1.1.37":"2023-09-29T01:26:46.580Z","1.1.38":"2023-09-29T01:32:33.969Z","1.1.39":"2023-09-29T03:29:26.628Z","1.1.40":"2023-09-29T06:54:45.686Z","1.1.41":"2023-09-29T07:28:12.074Z","1.1.42":"2023-09-29T07:36:53.408Z","1.1.43":"2023-09-29T07:49:44.866Z","1.1.44":"2023-09-29T21:59:58.244Z","1.1.45":"2023-10-02T20:06:22.814Z","1.1.46":"2023-10-02T23:15:29.123Z","1.1.47":"2023-10-03T01:23:40.151Z","1.1.48":"2023-10-03T01:48:59.606Z","1.1.49":"2023-10-03T07:11:11.612Z","1.2.0":"2023-10-03T07:17:33.090Z","1.2.1":"2023-10-03T08:13:23.357Z","1.2.2":"2023-10-03T18:45:02.597Z","1.2.3":"2023-10-03T20:26:13.098Z","1.2.4":"2023-10-06T04:31:40.095Z","1.2.5":"2023-10-06T20:23:03.750Z","1.2.6":"2023-10-06T22:28:30.267Z","1.2.7":"2023-10-27T20:13:52.284Z","1.2.8":"2023-10-28T00:31:35.589Z"},"maintainers":[{"name":"j_hanlon","email":"kitchenbeats@gmail.com"}],"description":"Easily add Stripe boilerplate code to Nextjs, like webhook handling, and subscription updates. This package provides a thin wrapper around the Stripe API, and makes integrating Stripe and NextJS a lot faster!","keywords":["stripe","next","nextjs","wrapper","vercel","node"],"author":{"name":"J Hanlon"},"license":"MIT","readme":"# next-stripe-helper\n\n`next-stripe-helper` is a module designed to simplify the integration of Stripe's functionality into Next.js applications. Whether you're looking to process payments, manage customers, or handle subscriptions, this utility aims to streamline those interactions. \n\nThis utility is perfect for developers building e-commerce platforms, subscription-based services, or any other application that requires payment functionalities within a JS or TS ecosystem.\n\nIncludes a smart webhook handler that will automatically keep your database up to date with current plans, pricing, and subscriptions. I also included a few helper function examples below.\n\nIf you would like to contribute or report an error, the github repo is [here](https://github.com/i-dream-of-ai/next-stripe-helper). Please star and follow if you find this tool helpful!!\n\n## Installation\n\n```bash\nnpm install next-stripe-helper\n```\n\n## Prerequisites\n\nEnsure you've set up Stripe and have an error handler in your project, as this utility relies on those components. \n\nYou will likely want to start in TEST MODE!! Make sure you use the test mode switch to turn Test Mode on before proceeding. Once you are setup and ready to take live payments, turn off test mode, get your LIVE stripe keys, and setup your LIVE webhooks secret and endpoint.\n\nEnsure you have set the `STRIPE_SECRET_LIVE` or `STRIPE_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files).\n\nEnsure you have set the `STRIPE_WEBHOOK_SECRET_LIVE` or `STRIPE_WEBHOOK_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). \n\nIf you would like to log Stripe Webhook Events for debugging purposes you can add `NEXT_STRIPE_HELPER_DEBUG` in your `.env.local` (or other environment-specific `.env` files). \n\n``` dotenv\n\n# Stripe configuration\nSTRIPE_SECRET=your_stripe_TEST_secret_key\nSTRIPE_WEBHOOK_SECRET=your_TEST_stripe_webhook_secret\n\nSTRIPE_SECRET_LIVE=your_LIVE_stripe_secret_key\nSTRIPE_WEBHOOK_SECRET_LIVE=your_LIVE_stripe_webhook_secret\n\n```\n\nMake sure you complete your checkout settings from within the Stripe dashboard before using any checkout functions. [Setup Checkout Settings](https://dashboard.stripe.com/settings/checkout)\n\nMake sure you add your webhooks endpoint URL!! [Setup Webhook URL](https://dashboard.stripe.com/webhooks)\n\n## Usage\n\n## Checkout Sessions\nFirst, ensure that you've imported the necessary functions from the package:\n\n```javascript\nimport { createCheckoutSession, createCheckoutSessionForSavingCard } from 'next-stripe-helper';\n```\n\n### Create Checkout Session\n\nCreate a checkout session with Stripe.\n\n```javascript\n   const session = await createCheckoutSession({\n        success_url: 'https://example.com/success',\n        cancel_url: 'https://example.com/canceled',\n        line_items: [\n            {price: 'price_idhere', quantity: 1},\n        ],\n        mode: 'subscription',\n        client_reference_id: 'your_user_id',\n        additionalParams: {}\n    });\n```\n\n   Parameters:\n\n   - `success_url` (required): The URL to redirect upon successful payment.\n   - `cancel_url` (optional, default `\"\"`): The URL to redirect upon payment cancellation.\n   - `line_items` (required unless setup mode): An array of line items for the checkout.\n   - `mode` (optional, default `subscription`): The mode of the checkout session (`subscription` or `payment`).\n   - `customer` (optional): The Stripe customer ID. A new Customer will be created if no ID is provided.\n   - `client_reference_id` (optional): Your User ID. This ID is from your own DB, and is returned via webhook so you can use it to track the session and user in your app.\n   - `additionalParams` (optional): Additional parameters can be found in the stripe api docs.\n\n### Create Checkout Session for Saving Card\n\n   Create a checkout session with Stripe for the purpose of saving a card.\n\n   ```javascript\n   const sessionId = await createCheckoutSessionForSavingCard(\n       'customer_id',\n       'https://your-success-url.com',\n       'https://your-cancel-url.com'\n   );\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n   - `successUrl` (required): The URL to redirect upon successful card saving.\n   - `cancelUrl` (required): The URL to redirect upon cancellation.\n\n## Customer Utilities\n\nImport the required functions:\n\n```javascript\nimport { createCustomer, getCustomer, updateCustomer } from 'next-stripe-helper';\n```\n\n### Create a New Stripe Customer\n\n   Create a new customer in Stripe using their email address.\n\n   ```javascript\n   const newCustomer = await createCustomer('example@email.com');\n   ```\n\n   Parameters:\n\n   - `email` (required): The email address of the new customer.\n\n### Get a Stripe Customer based on a specific email\n\n   Get a customer in Stripe using their email address.\n\n   ```javascript\n   const customerData = await getCustomerByEmail(email: string, limit: number = 1)\n   ```\n\n   Parameters:\n\n   - `email` (required): The email address of the new customer.\n   - `limit` (optional): Limit the number of returned customer data. If limit is higher than 1, then an array will be returned.\n\n### Retrieve Customer Details\n\n   Fetch the details of a specific customer using their Stripe customer ID.\n\n   ```javascript\n   const customerDetails = await getCustomer('customer_id');\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n\n### Update a Customer's Details\n\n   Update the details of a customer in Stripe.\n\n   ```javascript\n   const updates = {\n       // Your update parameters here (e.g., email, name, etc.)\n   };\n   const updatedCustomer = await updateCustomer('customer_id', updates);\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n   - `updates` (required): An object containing key-value pairs of the properties to be updated.\n\n### Get a Customer's Payment Details\n\n   Get the payment details of a customer in Stripe.\n\n   ```javascript\n   const paymentMethods = await getCustomerPaymentMethods('customer_id');\n   ```\n\n   Parameters:\n\n   - `customerId` (required): The Stripe customer ID.\n\n\n## Billing Portal Utilities\n\nThe `next-stripe-helper` also facilitates easy interaction with Stripe's billing portal.\n\n### Usage\n\nFirstly, remember to import the necessary function:\n\n```javascript\nimport { createPortalLink } from 'next-stripe-helper';\n```\n\n### Create Portal Session Link\n\nGenerate a link for your users to access Stripe's billing portal where they can manage their billing details.\n\n```javascript\nconst portalUrl = await createPortalLink({customer:'customerId', returnUrl:'https://your-return-url.com'});\n```\n\nParameters:\n\n- `customer` (required): The Stripe customer ID.\n- `configuration` (optional): The ID of an existing configuration to use for this session, describing its functionality and features. If not specified, the session uses the default configuration.\n- `flow_data` (optional): Information about a specific flow for the customer to go through. See the stripe docs to learn more about using customer portal deep links and flows.\n- `returnUrl` (required): The URL where the user will be redirected after exiting the billing portal.\n\nFor more params see the [stripe docs](https://stripe.com/docs/api/customer_portal/sessions/create).\n\n\n## Stripe Accounts\n\n### Create a Stripe Account\n\nCreate a new account on Stripe.\n\n```javascript\nimport { createAccount } from 'next-stripe-helper';\n\nconst params = {\n  type: 'custom', // or 'standard', 'express'\n  country: 'US',\n  email: 'user@example.com',\n  // Add other Stripe.AccountCreateParams properties as needed\n};\n\nconst account = await createAccount(params);\n```\n\n#### Parameters:\n\n- `params`: An object containing parameters for creating the account. Common properties include:\n  - `type`: The type of account to create (`custom`, `standard`, or `express`).\n  - `country`: The country in which the account holder resides.\n  - `email`: The email address of the account holder.\n  - Refer to the [Stripe API documentation](https://stripe.com/docs/api/accounts/create) for a full list of parameters.\n\n#### Returns:\n\n- A promise that resolves with the created account.\n\n### Get Account\n\nRetrieve details of a Stripe account.\n\n```javascript\nimport { getAccount } from 'next-stripe-helper';\n\nconst accountId = 'acct_1234567890';\n\ntry {\n  const account = await getAccount(accountId);\n  console.log(account);\n} catch (error) {\n  console.error(\"Error:\", error);\n}\n```\n\n#### Parameters:\n\n- `accountId`: The ID of the Stripe account you want to retrieve.\n\n#### Returns:\n\n- A promise that resolves with the details of the Stripe account.\n\n---\n\n### Update Account\n\nUpdate details of a Stripe account.\n\n```javascript\nimport { updateAccount } from 'next-stripe-helper';\n\nconst accountId = 'acct_1234567890';\nconst params = {\n  email: 'new-email@example.com',\n  // Add other Stripe.AccountUpdateParams properties as needed\n};\n\ntry {\n  const account = await updateAccount(accountId, params);\n  console.log(account);\n} catch (error) {\n  console.error(\"Error:\", error);\n}\n```\n\n#### Parameters:\n\n- `accountId`: The ID of the Stripe account you want to update.\n- `params`: An object containing the properties you want to update on the Stripe account.\n\n#### Returns:\n\n- A promise that resolves with the updated details of the Stripe account.\n\n---\n\n### Delete Account\n\nDelete a Stripe account.\n\n```javascript\nimport { deleteAccount } from 'next-stripe-helper';\n\nconst accountId = 'acct_1234567890';\n\ntry {\n  const account = await deleteAccount(accountId);\n  console.log(account);\n} catch (error) {\n  console.error(\"Error:\", error);\n}\n```\n\n#### Parameters:\n\n- `accountId`: The ID of the Stripe account you want to delete.\n\n#### Returns:\n\n- A promise that resolves with the details of the deleted Stripe account.\n\n\n\n## Products and Prices Utilities\n\nThe `next-stripe-helper` provides utilities to help with the creation of products and their associated prices on Stripe.\n\n### Usage\n\nStart by importing the functions you need:\n\n```javascript\nimport { createProduct, createPrice } from 'next-stripe-helper';\n```\n\n### Create a Product\n\nTo create a new product in Stripe, use:\n\n```javascript\nconst newProduct = await createProduct('Product Name', 'Product Description');\n```\n\nParameters:\n\n- `name` (required): The name of the product.\n- `description` (required): A brief description of the product.\n\n### Create a Price for a Product\n\nOnce you have a product, you can set its price:\n\n```javascript\nconst newPrice = await createPrice('product_id', 1000, 'usd', { optionalMetadata: 'value' });\n```\n\nParameters:\n\n- `productID` (required): The ID of the product for which the price is being set.\n- `amount` (required): The amount to be charged for the product, in the smallest unit for the currency (e.g., cents for USD).\n- `currency` (required): The three-letter ISO currency code. (e.g., 'usd', 'eur', 'gbp').\n- `metadata` (optional): A key-value store for any additional information you want to store.\n\nNote: The price is set up as recurring, with a monthly interval. If you wish to modify the recurrence, you would need to adjust the utility function accordingly.\n\n\n## Connect Utilities\n\n### Create Connected Account\n\nCreate a connected account with Stripe.\n\n```javascript\nconst account = await createConnectedAccount({\n    country: 'US',\n    email: 'affiliate@example.com',\n    type: 'express',  // Optional, defaults to 'express'\n    capabilities: {   // Optional, defaults to requesting 'transfers'\n        card_payments: { requested: true },\n        transfers: { requested: true },\n    },\n    // ...any other Stripe AccountCreateParams\n});\n```\n\nParameters:\n\n- `country` (required): The country of the connected account.\n- `email` (required): The email address of the connected account.\n- `type` (optional, default `'express'`): The type of the connected account (`'express'`, `'custom'`, or `'standard'`).\n- `capabilities` (optional, default `{ card_payments: { requested: true }, transfers: { requested: true } }`): The capabilities to request for the connected account.\n- ...any other parameters as per the [Stripe AccountCreateParams documentation](https://stripe.com/docs/api/accounts/create#create_account).\n\n\n### Start OAuth Flow\n\nInitiates the Stripe OAuth flow by constructing the OAuth URL.\n\n```javascript\nconst oauthURL = startOAuthFlow('your-stripe-client-id', 'https://your-redirect-uri.com/api/stripe/callback');\n```\n\nParameters:\n\n- `clientId` (required): Your Stripe client ID. The clientId in the context of the Stripe OAuth flow is not the Stripe customer ID. Instead, it refers to the \"Client ID\" of your Stripe Connect application.\n\nWhen you set up Stripe Connect in your Stripe Dashboard, you'll be provided with a set of API keys specific to your Connect application. One of these keys is the \"Client ID.\" This ID is used to initiate the OAuth flow for connecting other Stripe accounts to your platform.\n- `redirectUri` (required): The URL where Stripe should redirect the user after completing the OAuth flow. Our example shows using an api route that you would create.\n\nReturns:\n\n- A string representing the constructed OAuth URL.\n\n\n### Handle OAuth Callback\n\nProcess the OAuth callback by exchanging the authorization code for a connected account ID.\n\n```javascript\nconst connectedAccountId = await handleOAuthCallback(authorizationCode);\n```\n\nParameters:\n\n- `authorizationCode` (required): The authorization code returned by Stripe after the user completes the OAuth flow.\n\nReturns:\n\n- A Promise that resolves to a string containing the ID of the connected Stripe account.\n\n### Create Payout for Connected Account\n\nCreate a payout to a connected account.\n\n```javascript\nconst payout = await createPayout({\n    amount: 1000,  // amount in cents\n    currency: 'usd',\n    destination: 'acct_123456789',  // the ID of the connected account\n});\n```\n\nParameters:\n\n- `amount` (required): The amount to payout, in the smallest currency unit (e.g., cents for USD).\n- `currency` (required): The currency of the payout.\n- `destination` (required): The ID of the connected account to which the payout will be sent.\n\n### Create Account Link\n\nCreates an account link for onboarding or updating a connected account.\n\n```javascript\nconst accountLink = await createAccountLink({\n  account: 'acct_123456789',\n  refresh_url: 'https://example.com/reauth',\n  return_url: 'https://example.com/return',\n  type: 'account_onboarding'\n});\n```\n\nParameters:\n\n- `accountId` (required): The ID of the connected account.\n- `refreshUrl` (required): The URL to redirect to if the user's session expires.\n- `returnUrl` (required): The URL to redirect to upon completion.\n- `type` (optional, default `'account_onboarding'`): The type of account link. Possible values are:\n  - `account_onboarding`: Provides a form for inputting outstanding requirements.\n  - `account_update`: Displays the fields that are already populated on the account object and allows editing.\n\nReturns:\n\n- An object representing the created account link, which includes the URL to redirect the user to start the onboarding or update process.\n\n\n### Retrieve Connect Account\n\nRetrieves a Stripe Connect account.\n\n```javascript\nconst account = await retrieveAccount(\n  'acct_123456789'\n);\n```\n\nParameters:\n\n- `accountId` (required): The ID of the connected account.\n\nReturns:\n\n- An object representing the retrieved Stripe Connect account.\n\n\n### Create Connect Express Login Link\n\nCreates a Connect Express login link for a connected account.\n\n```javascript\nconst loginLinkUrl = await createConnectExpressLoginLink(\n  'acct_123456789',  // Replace with your users connected account ID\n);\n```\n\nParameters:\n\n- `accountId` (required): The ID of the connected account.\n\nReturns:\n\n- A string representing the created login link URL.\n\n\n### Delete a Stripe Express Account\n\nDelete a specific Stripe Express account using its account ID.\n\n```javascript\nimport { deleteExpressAccount } from 'your-package-name';\n\nconst accountId = 'acct_1234567890'; // Replace with the ID of the account you want to delete\n\nconst deletedAccount = await deleteExpressAccount(accountId);\n```\n\n#### Parameters:\n\n- `accountId`: The ID of the Stripe Express account you want to delete.\n\n#### Returns:\n\n- A promise that resolves with the deleted account object. If the deletion was successful, the object will have a `deleted` property set to `true`.\n\n> ⚠️ **Warning**: Deleting an account is irreversible. Ensure you've backed up any necessary data and are certain about the deletion before proceeding.\n\n\n### List All Transfers\n\nRetrieve a list of all transfers made on your Stripe Connect account.\n\n```javascript\nimport { listAllTransfers } from 'next-stripe-helper';\n\nconst params = {\n  destination: 'acc_1234567', //Optional:  Only return transfers to this account ID. \n  limit: 10, // Optional: Number of transfers to retrieve. Max value is 100.\n  // Add other Stripe.TransferListParams properties as needed\n};\n\nconst transfers = await listAllTransfers(params);\n```\n\n#### Parameters:\n\n- `params` (optional): An object containing parameters to filter the list of transfers. Some of the commonly used properties include:\n  - `limit`: A limit on the number of objects to be returned. Limit can range between 1 and 100 items.\n  - `status`: The status of the transfers to retrieve. Can be `pending`, `paid`, `failed`, or `reversed`.\n  - `created`: A filter on the list based on the object `created` field. The value can be a string with an integer Unix timestamp, or it can be a dictionary with the following options:\n    - `gt`: Return results with a `created` value greater than this timestamp.\n    - `gte`: Return results with a `created` value greater than or equal to this timestamp.\n    - `lt`: Return results with a `created` value less than this timestamp.\n    - `lte`: Return results with a `created` value less than or equal to this timestamp.\n  - Refer to the [Stripe API documentation](https://stripe.com/docs/api/transfers/list) for a full list of parameters.\n\n#### Returns:\n\n- A promise that resolves with a list of transfers. Each transfer object contains details about the transfer, such as the amount, currency, status, and more.\n\n\n## Subscription Utilities\n\nThe `next-stripe-helper` package offers a suite of utilities designed to streamline interactions with Stripe subscriptions.\n\n### Usage\n\nBefore you can use these utilities, you need to import them.\n\nHere is a list of available subscription functions:\n\n```javascript\nimport {\n    createSubscription,\n    getUserFirstActivePlan,\n    getUserSubscription,\n    getUserSubscriptions,\n    getUserSubscriptionDetails,\n    addItemToSubscription,\n    updateItemQuantity,\n    updateItemQuantityByPriceId,\n    removeItemsFromSubscription,\n    removeItemsByPriceId,\n    updateUserSubscriptionMetadata,\n    listUserSubscriptions,\n    changeSubscriptionPlan,\n    updateSubscriptionPlan,\n    cancelUserSubscription,\n    getSubscriptionPeriod,\n    getProductMetadataFromSubscription\n} from 'next-stripe-helper';\n```\n\n### Create a Subscription\n\nCreate a subscription for a customer using the Price ID:\n\n```javascript\nconst subscription = await createSubscription('customer_id', 'price_id');\n```\n\nParameters:\n\n- `customerID` (required): The Customer ID of the user.\n- `priceId` (required): The Price ID of the plan.\n\n### Retrieve a User's Current Plan (first subscription)\n\nFetch details of a users first plan using the Customer ID:\n\n```javascript\nconst plan = await getUserFirstActivePlan('customer__id');\n```\n\nParameters:\n\n- `customerId` (required): The Customer ID of the user.\n\nReturns: object {subscription, plan}\n- first subscription or null\n- first plan or null if no plan is found\n\n### Retrieve a User's Subscription\n\nFetch details of a specific subscription using its Stripe ID:\n\n```javascript\nconst subscriptionDetails = await getUserSubscription('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n\n### Update a User's Subscription\n\nUpdate a users existing subscription:\n\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst subscriptionDetails = await updateSubscriptionPlan('subscription_id', 'options object')\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the existing subscription.\n- `options` : The Stripe api subscription update parameters.\n\n### Change a User's Subscription\n\nChange a users existing subscription first item product/price using its Stripe ID:\n\nDeletes the old one plan/price and adds the new one to the subscription item.\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst subscriptionDetails = await changeSubscriptionPlan('subscription_id', 'item_id', 'new_price_id')\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe subscription ID of the existing subscription.\n- `item_id` (required): The Stripe Item ID of the plan.\n- `new_price_id` (required): The Stripe Price ID of the new plan (price_id).\n\n\n### Add a single price to a User's Subscription\n\nAdd a quantity of an item to a users existing subscription:\n\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst subscriptionItem = await addItemToSubscription(\"subscriptionId\", \"priceId\", \"quantity\", \"proration_behavior\")\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the existing subscription.\n- `priceId` (required): The Stripe Price ID of the item.\n- `quantity` (optional): The quantity of the item you are adding. Defaults to 1. Will add to existing quantity or add the item to the subsdcription if it doesnt exist.\n- `proration_behavior` (optional): Determines how to handle prorations when the billing cycle changes (e.g., when switching plans, resetting billing_cycle_anchor=now, or starting a trial), or if an item’s quantity changes. The default value is always_invoice. ('create_prorations', 'none', 'always_invoice')\n\n\n### Update an items quantity on a User's Subscription\n\nUpdate a subscription items quantity on a users existing subscription:\n\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst updatedSubscriptionItem = await updateItemQuantity(\"subscriptionItemId\", \"newQuantity\", \"proration_behavior\")\n```\n\nParameters:\n\n- `subscriptionItemId` (required): The ID of the existing ITEM in the subscription (not the subscription ID).\n- `newQuantity` (required): The new quanity of the item. Does not add or subtract, it updates the quantity to the new number.\n- `proration_behavior` (optional): Determines how to handle prorations when the billing cycle changes (e.g., when switching plans, resetting billing_cycle_anchor=now, or starting a trial), or if an item’s quantity changes. The default value is always_invoice. ('create_prorations', 'none', 'always_invoice')\n\n\n### Update an items quantity on a User's Subscription by Price ID\n\nUpdate a subscription items quantity on a users existing subscription:\n\nThis function will ADD an item to a subscription, or UPDATE the quantity if an item is already present on the subscription. \n\nIf the quantity is 0, the item will be DELETED from the subscription.\n\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst updatedSubscriptionItem = await updateItemQuantityByPriceId(\"subscriptionId\", \"priceId\", \"newQuantity\", \"proration_behavior\")\n```\n\nParameters:\n\n- `subscriptionItemId` (required): The ID of the existing ITEM in the subscription (not the subscription ID).\n- `priceId` (required): The Stripe Price ID of the item.\n- `newQuantity` (required): The new quanity of the item. Does not add or subtract, it updates the quantity to the new number.\n- `proration_behavior` (optional): Determines how to handle prorations when the billing cycle changes (e.g., when switching plans, resetting billing_cycle_anchor=now, or starting a trial), or if an item’s quantity changes. The default value is always_invoice. ('create_prorations', 'none', 'always_invoice')\n\n\n\n### Remove a quantity of an item on a User's Subscription\n\nUpdate a subscription items quantity on a users existing subscription by removing a certain number:\n\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst updatedSubscriptionItem = await removeItemsFromSubscription(\"subscriptionItemId\", \"removeQuantity\", \"proration_behavior\")\n```\n\nParameters:\n\n- `subscriptionItemId` (required): The ID of the existing ITEM in the subscription (not the subscription ID).\n- `removeQuantity` (required): The number you wish to remove of item. Subtracts the given quantity from the existing amount.\n- `proration_behavior` (optional): Determines how to handle prorations when the billing cycle changes (e.g., when switching plans, resetting billing_cycle_anchor=now, or starting a trial), or if an item’s quantity changes. The default value is always_invoice. ('create_prorations', 'none', 'always_invoice')\n\n\n### Remove a quantity of an item on a User's Subscription using the Price ID\n\nUpdate a subscription items quantity on a users existing subscription by removing a certain number:\n\nThis will use the current payment method by default.\nCustomer must have an existing subscription.\n\n```javascript\nconst updatedSubscriptionItem = await removeItemsByPriceId(\"subscriptionId\", \"priceId\", \"removeQuantity\", \"proration_behavior\")\n```\n\nParameters:\n\n- `subscriptionId` (required): The subscriptionID of the subscription.\n- `priceId` (required): The Stripe Price ID of the item.\n- `removeQuantity` (required): The number you wish to remove of item. Subtracts the given quantity from the existing amount.\n- `proration_behavior` (optional): Determines how to handle prorations when the billing cycle changes (e.g., when switching plans, resetting billing_cycle_anchor=now, or starting a trial), or if an item’s quantity changes. The default value is always_invoice. ('create_prorations', 'none', 'always_invoice')\n\n\n### Get a subscription Item by Price ID\n\nRetrieve a subscription item on a users existing subscription by using the price id:\n\nCustomer must have an existing subscription.\nNo item returns null.\n\n```javascript\nconst subscriptionItem = await getASubscriptionItemByPriceId(\"subscriptionId\", \"priceId\")\n```\n\nParameters:\n\n- `subscriptionId` (required): The subscriptionID of the subscription.\n- `priceId` (required): The Stripe Price ID of the item.\n\n\n\n### List all subscription Items in a subscription\n\nRetrieve a list of all the subscription items on a users existing subscription:\n\nCustomer must have an existing subscription.\n\n```javascript\nconst subscriptionItem = await getASubscriptionItemByPriceId(\"subscriptionID\")\n```\n\nParameters:\n\n- `subscriptionID` (required): The ID of the users subscription.\n\n\n### Get Detailed Information About a Subscription\n\nTo fetch comprehensive details about a subscription, including its associated price metadata:\n\n```javascript\nconst detailedInfo = await getUserSubscriptionDetails('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n### Update Metadata for a User's Subscription\n\nIf you wish to modify the metadata of a subscription:\n\n```javascript\nconst updatedSubscription = await updateUserSubscriptionMetadata('subscription_id', { key: 'newValue' });\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n- `metadata` (required): An object containing key-value pairs for metadata updates.\n\n### List All Active Subscriptions for a User\n\nRetrieve a list of all active subscriptions associated with a particular customer:\n\n```javascript\nconst activeSubscriptions = await listUserSubscriptions('customer_id');\n```\n\nParameters:\n\n- `customerID` (required): The Stripe ID of the customer.\n\n### Cancel a User's Subscription\n\nTo cancel a subscription:\n\n```javascript\nconst cancelledSubscription = await cancelUserSubscription('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\n### Retrieve User's Subscription Period\n\nTo cancel a subscription:\n\n```javascript\nconst periodData = await getSubscriptionPeriod('subscription_id');\n```\n\nParameters:\n\n- `subscriptionID` (required): The Stripe ID of the subscription.\n\nReturns: \n\n- `start` period start JS Date\n- `end` period end JS Date\n\n## Webhook Handler with Next.js\n\nIn the Next.js 13 environment, API routes provide a solution to build your backend functionality. The `next-stripe-helper` comes equipped with a webhook handler specifically designed for easy integration with Next.js API routes.\n\nIf you add the webhookHandler to an api route, your Database can automatically stay in sync with Stripe Products, Prices, and Subscriptions.\n\nFirst create your DB functions (upsertProductRecord, upsertPriceRecord, manageSubscriptionStatusChange, manageCustomerDetailsChange), then use them with the webhookHandler function in an api endpoint. \n\n```javascript\nasync function upsertProductRecord(product)\n```\nReturns: \n\n- `product` Stripe Product Data\n\n```javascript\nasync function upsertPriceRecord(price)\n```\nReturns: \n\n- `price` Stripe Price Data\n\n```javascript\nasync function manageSubscriptionStatusChange(subscriptionId, customerId, isCreated)\n```\nReturns: \n\n- `subscriptionId` string - Stripe Subcription ID\n- `customerId` string - Stripe Customer ID\n- `isCreated` string - is newly created\n\n```javascript\nasync function manageCustomerDetailsChange(stripeCustomer, eventType)\n```\nReturns: \n\n- `stripeCustomer` object - Stripe Customer data\n- `eventType` string - 'created', 'updated', 'deleted'\n\nYou can find example functions below that use MongoDb, but it can be used with any DB type.\n\n\n### Usage\n\nFirst, you'll need to import the webhook handler into your API route:\n\n```javascript\nimport { webhookHandler } from 'stripe-next-helper'; \n```\n\nThen, set up an API route in Next.js to handle the Stripe webhook:\n\n```javascript\n// pages/api/stripe/webhook/route.js\n\nimport { webhookHandler } from 'next-stripe-helper';\nimport { \n  manageSubscriptionStatusChange, \n  manageCustomerDetailsChange, \n  upsertPriceRecord, \n  upsertProductRecord \n} from '@/lib/stripe';\nimport { headers } from \"next/headers\"\n\nexport async function POST(req) {\n    try {\n        const body = await req.text();\n        const signature = headers().get(\"Stripe-Signature\");\n\n        if (!signature) {\n            throw new Error('Stripe signature missing from headers');\n        }\n\n        await webhookHandler(\n            upsertProductRecord, \n            upsertPriceRecord, \n            manageSubscriptionStatusChange, \n            manageCustomerDetailsChange,\n            { body, signature }\n        );\n\n        return new Response(null, { status: 200 });\n    } catch (error) {\n        console.error(error);\n        return new Response(JSON.stringify({ error: error.message }), { status: 500 });\n    }\n}\n\n\n```\n\nExamples of Webhook helper functions you could use with a MongoDB Database.\n\n``` javascript\nimport { ObjectId } from \"mongodb\";\nimport Stripe from \"stripe\";\n\nimport clientPromise from \"@/lib/mongodb\";\n\nimport { convertToNumberOrBoolean } from \"./utils\";\nimport { getCustomer } from \"next-stripe-helper\";\n\nconst stripeSecret = process.env.STRIPE_SECRET_LIVE || process.env.STRIPE_SECRET || \"\";\n\n/**\n * Initialize the Stripe SDK with the secret key.\n */\nconst stripe = new Stripe(stripeSecret, {\n  apiVersion: \"2023-08-16\",\n});\n\nconst dbName = process.env.MONGODB_DB;\n\nexport const getActiveProductsWithPrices = async () => {\n  try {\n    const client = await clientPromise;\n    const data = await client\n      .db(dbName)\n      .collection(\"products\")\n      .aggregate([\n        {\n          $lookup: {\n            from: \"prices\",\n            localField: \"_id\",\n            foreignField: \"product_id\",\n            as: \"prices\",\n          },\n        },\n        { $match: { active: true, \"prices.active\": true } },\n        { $sort: { \"metadata.index\": 1, \"prices.unit_amount\": 1 } },\n      ])\n      .toArray();\n\n    return data || [];\n  } catch (error) {\n    console.log(error.message);\n    return [];\n  }\n};\n\nexport const getActiveApiProductsWithPrices = async () => {\n  try {\n    const client = await clientPromise;\n    const data = await client\n      .db(dbName)\n      .collection(\"products\")\n      .aggregate([\n        {\n          $lookup: {\n            from: \"prices\",\n            localField: \"_id\",\n            foreignField: \"product_id\",\n            as: \"prices\",\n          },\n        },\n        {\n          $match: {\n            active: true,\n            \"prices.active\": true,\n            \"metadata.is_api_product\": \"true\",\n          },\n        },\n        { $sort: { \"metadata.index\": 1, \"prices.unit_amount\": 1 } },\n      ])\n      .toArray();\n\n    return data || [];\n  } catch (error) {\n    console.log(error.message);\n    return [];\n  }\n};\n\nexport const upsertProductRecord = async (product) => {\n  const productData = {\n    _id: product.id,\n    active: product.active,\n    name: product.name,\n    description: product.description ?? undefined,\n    image: product.images?.[0] ?? null,\n    metadata: product.metadata,\n  };\n  const client = await clientPromise;\n  const result = await client\n    .db(dbName)\n    .collection(\"products\")\n    .updateOne({ _id: productData._id }, { $set: productData }, { upsert: true });\n\n  if (result.upsertedCount || result.modifiedCount) {\n    console.log(`Product inserted/updated: ${product.id}`);\n  }\n};\n\nexport const upsertPriceRecord = async (price) => {\n  const priceData = {\n    _id: price.id,\n    product_id: typeof price.product === \"string\" ? price.product : \"\",\n    active: price.active,\n    currency: price.currency,\n    description: price.nickname ?? undefined,\n    type: price.type,\n    unit_amount: price.unit_amount ?? undefined,\n    interval: price.recurring?.interval,\n    interval_count: price.recurring?.interval_count,\n    trial_period_days: price.recurring?.trial_period_days,\n    metadata: price.metadata,\n  };\n  const client = await clientPromise;\n  const result = await client\n    .db(dbName)\n    .collection(\"prices\")\n    .updateOne({ _id: priceData._id }, { $set: priceData }, { upsert: true });\n\n  if (result.upsertedCount || result.modifiedCount) {\n    console.log(`Price inserted/updated: ${price.id}`);\n  }\n};\n\nconst copyBillingDetailsToCustomer = async (uuid, payment_method) => {\n  const customer = payment_method.customer;\n  const { name, phone, address } = payment_method.billing_details;\n  if (!name || !phone || !address) return;\n\n  //optionally you can add illing details to your stripe customer\n  await stripe.customers.update(customer, { name, phone, address });\n\n  const client = await clientPromise;\n  const result = await client\n    .db(dbName)\n    .collection(\"users\")\n    .findOneAndUpdate(\n      { _id: new ObjectId(uuid) },\n      {\n        $set: {\n          billing_address: { ...address },\n          payment_method: { ...payment_method[payment_method.type] },\n        },\n      },\n      { returnDocument: \"after\" }\n    );\n  if (!result) {\n    console.error(\"Error updating user billing details\");\n    throw new Error(\"Error updating user billing details\");\n  }\n};\n\nexport const checkSubscriptionLimit = async (collectionKey, metadataKey, userId) => {\n  if (!collectionKey || !metadataKey || !userId) return;\n\n  const client = await clientPromise;\n\n  const subscription = await client\n    .db(dbName)\n    .collection(\"subscriptions\")\n    .findOne({ user_id: new ObjectId(userId), status: \"active\" });\n\n  if (!subscription) {\n    return false;\n  }\n\n  const product = await client\n    .db(dbName)\n    .collection(\"products\")\n    .findOne({ _id: subscription.items[0].product_id });\n\n  if (!product) {\n    return false;\n  }\n\n  let limit = convertToNumberOrBoolean(product.metadata[metadataKey]);\n\n  let result;\n  let allowed = false;\n  if (typeof limit !== \"boolean\") {\n    const count = await client\n      .db(dbName)\n      .collection(collectionKey)\n      .countDocuments({ userId: new ObjectId(userId) });\n    allowed = count < limit;\n    result = count;\n  } else {\n    allowed = limit;\n    limit = 0;\n    result = 0;\n  }\n\n  return { allowed, result, limit };\n};\n\nexport const manageSubscriptionStatusChange = async (\n  subscriptionId,\n  customerId,\n  createAction = false\n) => {\n\n  const customer = await getCustomer(customerId);\n\n  const client = await clientPromise;\n  const user = await client.db(dbName).collection(\"users\").findOne({ email: customer.email });\n\n  if (!user) {\n    console.log(\"manageSubscriptionStatusChange: Customer not found. id:\", customerId);\n    throw new Error(\"Customer not found\");\n  } else {\n    console.log(\"manageSubscriptionStatusChange: Customer found: \", customerId);\n  }\n\n  const uuid = user._id.toString();\n\n  let subscription;\n  try {\n    subscription = await stripe.subscriptions.retrieve(subscriptionId, {\n      expand: [\"default_payment_method\"],\n    });\n  } catch (error) {\n    console.log(\"manageSubscriptionStatusChange: Stripe Error: \", error);\n    throw new Error(\"Stripe error retrieving subscription in manageSubscriptionStatusChange.\");\n  }\n\n  if (!subscription) {\n    throw new Error(\n      \"Stripe error retrieving subscription in manageSubscriptionStatusChange.\",\n      subscription\n    );\n  } else {\n    console.log(\"manageSubscriptionStatusChange: Stripe subscription found.\", subscription.id);\n  }\n\n  const subscriptionItems = subscription.items.data.map((item) => ({\n    price_id: item.price.id,\n    product_id: item.price.product,\n    quantity: item.quantity,\n  }));\n\n  const existingSubscription = await client\n    .db(dbName)\n    .collection(\"subscriptions\")\n    .findOne({ user_id: new ObjectId(uuid) });\n\n  let subscriptionData;\n  if (!existingSubscription) {\n    // If the subscription doesn't exist, include the _id field for the new document\n    subscriptionData = {\n      _id: subscription.id,\n      user_id: new ObjectId(uuid),\n      team_id: new ObjectId(subscription.metadata.team_id),\n      metadata: subscription.metadata,\n      status: subscription.status,\n      price_id: subscription.items.data[0].price.id,\n      items: subscriptionItems,\n      cancel_at_period_end: subscription.cancel_at_period_end,\n      cancel_at: subscription.cancel_at ? new Date(subscription.cancel_at * 1000) : null,\n      canceled_at: subscription.canceled_at ? new Date(subscription.canceled_at * 1000) : null,\n      current_period_start: new Date(subscription.current_period_start * 1000),\n      current_period_end: new Date(subscription.current_period_end * 1000),\n      created: new Date(subscription.created * 1000),\n      ended_at: subscription.ended_at ? new Date(subscription.ended_at * 1000) : null,\n      trial_start: subscription.trial_start ? new Date(subscription.trial_start * 1000) : null,\n      trial_end: subscription.trial_end ? new Date(subscription.trial_end * 1000) : null,\n    };\n  } else {\n    // If the subscription exists, omit the _id field to avoid the immutable field error\n    subscriptionData = {\n      user_id: new ObjectId(uuid),\n      team_id: new ObjectId(subscription.metadata.team_id),\n      metadata: subscription.metadata,\n      status: subscription.status,\n      price_id: subscription.items.data[0].price.id,\n      items: subscriptionItems,\n      cancel_at_period_end: subscription.cancel_at_period_end,\n      cancel_at: subscription.cancel_at ? new Date(subscription.cancel_at * 1000) : null,\n      canceled_at: subscription.canceled_at ? new Date(subscription.canceled_at * 1000) : null,\n      current_period_start: new Date(subscription.current_period_start * 1000),\n      current_period_end: new Date(subscription.current_period_end * 1000),\n      created: new Date(subscription.created * 1000),\n      ended_at: subscription.ended_at ? new Date(subscription.ended_at * 1000) : null,\n      trial_start: subscription.trial_start ? new Date(subscription.trial_start * 1000) : null,\n      trial_end: subscription.trial_end ? new Date(subscription.trial_end * 1000) : null,\n    };\n  }\n\n  const result = await client\n    .db(dbName)\n    .collection(\"subscriptions\")\n    .updateOne({ user_id: new ObjectId(uuid) }, { $set: subscriptionData }, { upsert: true });\n\n  if (result.upsertedCount || result.modifiedCount) {\n    console.log(`Inserted/updated subscription [${subscriptionId}] for user [${uuid}]`);\n  } else {\n    console.error(\n      `manageSubscriptionStatusChange: Subscription for user [${uuid}] was not updated.`,\n      result\n    );\n  }\n\n  if (createAction && subscription.default_payment_method && uuid) {\n    await copyBillingDetailsToCustomer(uuid, subscription.default_payment_method);\n  }\n};\n\nexport async function manageCustomerDetailsChange(stripeCustomer, eventType) {\n  if(eventType !== 'deleted'){\n    try {\n      const client = await clientPromise;\n      await client.db(dbName).collection(\"users\").findOneAndUpdate({ email: stripeCustomer.email },{\n        $set: {customerId: stripeCustomer.id}\n      });\n  \n    } catch (error) {\n      throw error\n    }\n  }\n}\n```\n\n### Configuration\n\n1. **Environment Variables**: Ensure you have set the `STRIPE_WEBHOOK_SECRET_LIVE` or `STRIPE_WEBHOOK_SECRET` environment variables in your `.env.local` (or other environment-specific `.env` files). With Next.js, you can access these environment variables using `process.env`. Remember best practice is giving the api key the least amount of access needed.\n\n2. **Stripe Dashboard**: Configure your Stripe dashboard to send webhooks to `https://your-domain.com/api/stripe-webhook`.\n\n### Important Notes\n\n- As with the general use-case, you need to provide the `upsertProduct`, `upsertPrice`, `manageSubscriptionChange`, and `manageCustomerDetailsChange` callback functions. These functions will handle the various events as they occur on Stripe.\n  \n- Always handle errors gracefully. The provided webhook handler has built-in error handling, but you may want to extend or customize this for your specific needs.\n\n### Deployment\n\nWhen deploying your Next.js application, make sure to include your Stripe webhook secret in your production environment variables or secrets management solution. Never expose the secret or api keys.\n\n## Error Handling\n\nAll utility functions incorporate internal error handling. You can catch these errors using try/catch. Ensure your project provides meaningful and appropriate error handling based on your application's needs.\n\n## Contributing\n\nFeel free to contribute to the project by submitting a pull request or raising an issue.\n[Next Stripe Helper Repo](https://github.com/i-dream-of-ai/next-stripe-helper)\n\n## License\n\nMIT License","readmeFilename":"README.md","homepage":"https://github.com/i-dream-of-ai/next-stripe-helper","repository":{"type":"git","url":"git+https://github.com/i-dream-of-ai/next-stripe-helper.git"},"bugs":{"url":"https://github.com/i-dream-of-ai/next-stripe-helper/issues"}}