{"_id":"@ambushsoftworks/nestjs-payments-graphql","_rev":"38-6723cff4a9adf84bbc826a42db63d6d0","name":"@ambushsoftworks/nestjs-payments-graphql","dist-tags":{"next":"0.12.0-rc.1","latest":"0.13.0"},"versions":{"0.1.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.1.0","author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.1.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/issues"},"dist":{"shasum":"4678e9e1cba296883cdf97dc1208e8e53082f7a9","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.1.0.tgz","fileCount":217,"integrity":"sha512-ABHug/Q3GjbreJa8H+jRDzszu/P7ziVV3iHhj63kTfi+rUlncol46sMZfLOUjL3obBpXQzAhiuwcrmLJfDI7lQ==","signatures":[{"sig":"MEUCIQDT1sdB9RcYPT/K0e21sUqxZkxtrI4YOeIucTYCFbgtSwIgYWsnGGq+aa+u+ZkzEQ2+0YXdGDOihi3tC3eqTLkHD84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":537328},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"d3c0a1ce8b9075fe10d9b5cd920164d622ae09bc","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ambushsoftworks","email":"lloyd@capson.ca"},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"10.9.4","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"22.22.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.1.0_1776532163280_0.24942468360237302","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.1.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.1.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"d415d80f7a1ba7a7562b32e44966b596fe01b32a","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.1.2.tgz","fileCount":221,"integrity":"sha512-StkRf5OYTZAjv1SZ1JQFTZJ097/zUnS4rbBsSy714q44oaALByjXmE5DfNtM62CzuEINd9Vo+moR9nKO/bGDTA==","signatures":[{"sig":"MEUCIAkaswbnehENw4kKmBkj61pfdwfoV+qS23F2hg4UFjUoAiEAyhL+FkPUvm61l6zG09ntLnB/rRvvlRicOWA2IVsDv8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":586222},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"223b8a44da3bd104a89a1f2e70d89ce86596f4b3","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.12.1","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.15.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.1.2_1776626090604_0.38089918255799415","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.1.3","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.1.3","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"078909b44278fbae64fcb92773743741e2df3646","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.1.3.tgz","fileCount":221,"integrity":"sha512-7Hjl2s1qSo2ZyQcBBReMS7El0RqhZHXFomXV9FtFMA7bqOSLzerxg3RR9HSRLiIUJI76Ueob2LlsL2W/vKD2ug==","signatures":[{"sig":"MEQCIGulacp4PeAWpULKTWTu3FZ/0Igin7eshk1hYUXBPRmgAiBRiBWCaUU9DFaJA6USKQrESi9v20gaHW3vseICDIBJEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":591467},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"3eab97c1e9a382c3a316003ed9acf5801b3973f0","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.12.1","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.15.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.1.3_1778851736379_0.7041354273252771","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.2.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.2.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"4c3a40b5d7d06ca093e0b6960baf906affea825e","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.2.0.tgz","fileCount":224,"integrity":"sha512-9Pz/DaR855F89Ccgy3n1pYl9QP/BJ/IdY7vswC6nqm4v9mJOvlZxF6vjz5f14Zj2HLNAbs4h/nFPgr/HGvGCTg==","signatures":[{"sig":"MEUCIQDbE5PNYZeYpRuk5RqHn70eJ8XhkdprPMiXJXbanIMjRAIgeq4gf8i6hHjPgjipZQNA+hbCpaTtK60aQmCXzAUis/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":606142},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"d833467d4fbf1b7987830d71499b9f21ec745df8","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.12.1","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.15.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.2.0_1778851763803_0.37712765575829166","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.3.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.3.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"69d316b814ac3212fd616f868557ff7e6728b8fc","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.3.0.tgz","fileCount":233,"integrity":"sha512-hwQG5ULsh4pJQPuoCHwfaSKu0JCREFpU52Fe9qd3bit3Zxm1G+cJ9NDuKCE89ZpHXQMDvcfF7/2A7JyA4iuWbA==","signatures":[{"sig":"MEUCIHCFiMWCWB/H//tUYOmj4nWyfRsmkpUnPdgJt3mBa3k/AiEA9iUJriKOB8tfcgQ94B7q9FdZDgHz9hdmFPkqWUU+vXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":660478},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"a1ffbfd450198af5ee5cbf17bbc6ae808930bb9b","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.13.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.16.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.3.0_1780002106330_0.09205320944231454","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.2.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.2.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"602230d8ade2d8527aff210231bf3221f390e21a","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.2.1.tgz","fileCount":224,"integrity":"sha512-t1u5x5ejwm9DA04EJryhxHWq4YMR0M+pvdjodLCt7C6SgbC3tukM3RD9Axa1eN9rsJ0AKFVcHwkEBhd7sfdpJQ==","signatures":[{"sig":"MEYCIQDKmzNB8yGC9BFE1s5oNhxnFH4sPncoYU/Uj9xFvoAKtgIhAP9w90MxScuDyIsqzcHhkeSCaOCz0Q/MDMetxetjj/H4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":610273},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"3d818ad47c46e6cb3125c8d2c385aa517c5adb3f","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.13.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.16.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.2.1_1780002111415_0.5763472901792239","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.4.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.4.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"38040a8f73892aa3a746f8ecc06d4f574fd520af","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.4.0-rc.1.tgz","fileCount":245,"integrity":"sha512-5tvrwOlVBzr3gQCOMRUZwlayQWm8UC4f650js+i1m8Jx0l5/NO76BLzGJ9UAB77bSGiGBkgGJH6RLkEYwgexqQ==","signatures":[{"sig":"MEQCIHqNVI7H2pnPCuTgYO/P+AJzAqsfgywXKPFmQAeaQVjTAiBsPVKaECJ48ahN7KYWaDlQvB6Ba9ihma5kIfo/k9dq0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.4.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":787795},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"1564d8d6cef350e3f055c1cd9285de2bdc4dd9b6","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.17.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.19.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.4.0-rc.1_1787285192853_0.5316465737913973","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.4.0-rc.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.4.0-rc.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"1600b6b3029cd69d81ea3f6fd4c1346190ac6c99","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.4.0-rc.2.tgz","fileCount":248,"integrity":"sha512-uYha4LWlA9uYFBOjy/nscBJDEkdu4Dua7YJFlpx2jY+aGRlyt5OpmIXOoFFaG+miGko5VJTz/fP/2rRoRaIoGA==","signatures":[{"sig":"MEQCIHqFCTm73vVzcrG/WnteGu5DCTNwUbsPTIu77Fwl/K2iAiBoZqxSRlc4zBEajIPwybHbIPtx4nk1iGznWR/cyGk15w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.4.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":799743},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"7d242cdd4c1582287969edb1d88429f6f0bd4d67","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.17.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.19.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.4.0-rc.2_1787318429775_0.396073939991163","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc.3":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.4.0-rc.3","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.4.0-rc.3","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"94b6deb709bfe90a90ef58cda47bb17461dd5483","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.4.0-rc.3.tgz","fileCount":248,"integrity":"sha512-oxe9GmdbUoXucI2q6W1yprJ0AcDOeH9uvrpmiRcquYxq4z5Wd7/ZZgDF3VShBISXoHYqT8XNfyl3TEuA7amHfg==","signatures":[{"sig":"MEUCIQDMttbZ57tYOk6AN/+3L/XiJYw4f8Kx+oVMGTFZo3ugqwIgXZIoVTFO7J86FnBm/43lmFDTovXApHRZpzO4kaeJBY4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.4.0-rc.3","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":815037},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"ddcc23af604b94f10b577da19804cd9354f9c2c1","scripts":{"lint":"eslint \"{src,tests}/**/*.ts\" --fix","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.17.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.19.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.4.0-rc.3_1787808341092_0.8268971553594042","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc.4":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.4.0-rc.4","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.4.0-rc.4","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"5e2e1170e18e7e87036015320bf2cda4ee211ccf","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.4.0-rc.4.tgz","fileCount":248,"integrity":"sha512-jtq6x8wdKfakTYlD9CYS6I8C7pA6gVklYzxw/2PSLyYAm98/68iTegLcLjUHsNatII780IaMVfILuOv+W+Ax1g==","signatures":[{"sig":"MEUCIAdVkTZrAQjOr5F1riuW/EYVm11DqlJs14+UoSE2/pTbAiEA0e8/5YqfQ+mVLd9t2KXF/h9gCh0tkNQ95Xtzi8j/K0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.4.0-rc.4","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":828655},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"0901666f17ba6c4ddbe12c5029f9071400b7277d","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.17.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.19.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.4.0-rc.4_1787842289658_0.5183230055817032","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc.5":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.4.0-rc.5","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.4.0-rc.5","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"fa5fb703ac477e89b195858c4e59bddc82b31087","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.4.0-rc.5.tgz","fileCount":248,"integrity":"sha512-EZGW9PPblU8yB29Vupb2wwn81HkntVFKAqhyTbBAZygRsjsXDw5BZaTTCc/yQ1PbMza0bkY/kwQEjwtdkXA6NQ==","signatures":[{"sig":"MEYCIQC750Um/Yb2oG1cNiQODubsPHhbsyzYWn9J7izHHuCTFgIhAK0NYfDhpPffSsr77jawFMgAwMVyQ+rLV6XgGBVZKEFS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDJ8gY8nd7rQOI/zBWovusV+R+weLDMIzgz0GIAtFiLTQIhAPoqmhegIl4/BZG6BOCnSe4x+TNFje2n2WeGCNLSCEYO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.4.0-rc.5","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":833212},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"e71930a1d6e85a1a1477a9fd2fe17a572df233e8","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.4.0-rc.5_1789474788238_0.6210649516702471","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.5.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.5.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"6b987a1f3d2f5958648fc1db1f9a7fc028e5d6d2","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.5.0-rc.1.tgz","fileCount":257,"integrity":"sha512-Cjy4zhfmcIhD7XE7JqNi36zroYVt6bnMgoTkbmIwq8ByF/DjjKd0MTCBIlo8/e8+dx3UD0jPUd9v/nSzOALnuA==","signatures":[{"sig":"MEQCIEc6EMtibA4ZlCzGILqrLocWbZEEiOt+nQuz8J9wdkZeAiBEoPBkwQF5+dcwk+EYZPARxBc8QBaa3zxy7WODzBE/RQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC862ypiu/ueYg0wl15gkyMLOqCSM6d6HmYYQkx0AhnYQIhAPuV6ox80QRSoY9Aq9T6R1Zx4zbg91+A1GNi/0YW4lMj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.5.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":875634},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"70caa5f4adc67d4b07796f400f960567641cb295","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.5.0-rc.1_1789479636702_0.9845962453267116","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-rc.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.5.0-rc.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.5.0-rc.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"eef1a8d229107994fdd6a0d2c99d4b42edd79b36","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.5.0-rc.2.tgz","fileCount":308,"integrity":"sha512-lTtVs1qKGtoyhoCKYfgxIhXDRCYLgUghhejY90RAYP79OfBFx2NuSjYKugWHh75Pn9mMGTRUEz5yucsQyLzKDA==","signatures":[{"sig":"MEUCICEEw1lsO4bgaH47jRXGCSZaiEIvUW+bYvdK4r/QphMqAiEA9q8PDA90X92f/NUUCen5tPUsFFcRK6bq0ZqkKekDvig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFDAUJKQt18AuIOmuGYhvcq3S8Va3RiGLnRiSUkKTCX1AiBCuhsWd2bHe/Aw3IDSfbCcTSoXQKR1wfFHrx/A42ewcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.5.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":991432},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"}},"gitHead":"f04b896fac248c89c97ba028fbdd07f78e00b619","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.5.0-rc.2_1789484244651_0.5693735483757674","host":"s3://npm-registry-packages-npm-production"}},"0.6.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.6.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.6.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"4300e8d80f94f46046172870640fdc58bdb6c0ba","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.6.0-rc.1.tgz","fileCount":332,"integrity":"sha512-u4Y9DMlBoy6iKtec/oB/G0h/vwhrYerEOycDxWZckKCSlYfr4W2xaaOybbtRxoC0xzX0cohjAGmf0WA0MIJUSA==","signatures":[{"sig":"MEUCIGm1CrnoKwiKsC+91ivcRiwHuwy5Kf97RexY9JfX05dMAiEAspOElIPnmBYq5Ng6O3Ni/YDOFXgAKlqZ7QucFGFZ+Yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDgrtzEF577Xm6ndjqVyhMJ/LdAr1b4FFz0dgL0q4xg+gIhALdK0Yx4VfXCQffYTEKTelQCkRvgKSbqyL7UQQHNunck","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.6.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1148359},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"09e197815ae3f76314e7d46c0f7526e44c9d0387","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.6.0-rc.1_1789826963227_0.6199661837845274","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.6.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.6.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"64feadcd5bbf5f364e45a342f5fc67af302ecd5c","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.6.0.tgz","fileCount":332,"integrity":"sha512-2i5yraxs5JXLf2O2gS3T6StadldgStKI7Lia1KUt54dOhn7qpZZYzsF84xfd/69hgHYp1gOpciCExQ5zvWBpMg==","signatures":[{"sig":"MEYCIQDwg/Ki+soY6VtyyUNHiOHyU9MO62Mmxo30j88EwWQS+QIhAL2WbVoUma8BoYsmP9h79QoDWu3uZ2W3TPq3NIhZHDLm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHY359Gm8phraqp6RSsTl/+UkolQYvx2XVzZmS91CWYcAiBPjJWrRp6zMmkx+lmBXsVR9FP5R8KjNKwxSigIfdVCBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1157765},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"db31ad2b891a079408892ac87656a097423a3990","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.6.0_1789831378625_0.19113328629072823","host":"s3://npm-registry-packages-npm-production"}},"0.7.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"731bc5829a1d8e0219d738250b5462c9932ffe8d","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.0-rc.1.tgz","fileCount":332,"integrity":"sha512-9fBXT1fPkqZ/RTc/2S2vz8cUpGyM2YkPCfldZLBdVjyTukw9ue5dSIS5fwW8MB5VtUtqOarWAjRw40lOJ7jG+Q==","signatures":[{"sig":"MEQCIHrZtN+uCeyHyX6onoqXF/zLkhPBsjxWUnjvgT8sGOsqAiBLrW63cK7Z/J0h3a4zSfCODaXAXNK2/VEDY5sOFRKzJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICZ9v1O0hkb5I61Wiym33BHVNOBFm6dWm9JjEj5dUmVYAiAhnG4gCsUGqbjaUhY4/3LmXpGl0d/1iGv4Lnir+OsA5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1180409},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"f21ddfae9a08a7569942760ee68ca25b3e5959fb","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.0-rc.1_1789844481441_0.16744106664580705","host":"s3://npm-registry-packages-npm-production"}},"0.7.0-rc.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.0-rc.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.0-rc.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"43668575982a24fac68305bdcc851e749a7324c1","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.0-rc.2.tgz","fileCount":335,"integrity":"sha512-BnFdrL1827ykTYql6pNNFMwTPN7NtrTnXMvYxi7XDzrwvmqjhaFcAKWV5c5nyea+tTAqFT2OJWikZOsmy9hy0Q==","signatures":[{"sig":"MEYCIQDB8utwUe7DmF8iVGdhOaAU9zkJUqFhEAsp0qLO0D1f8QIhAM5YUhHVmp9Zf/NI3HPxJqpYs87tYkbNOte490vXdvFF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDhlEao3KYVzO0Lu65T/V4QtT4kM967agvbo9D7lDf2wgIhAINYbY7yWG+69mPjOzjOr5MyZkVSuPtC17Ks4yNr+Hr/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1188788},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"534f817ba0fd1ff5a40d76938e6168afa9a0a543","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.0-rc.2_1789846387922_0.03894504187290493","host":"s3://npm-registry-packages-npm-production"}},"0.7.0-rc.3":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.0-rc.3","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.0-rc.3","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"53754342d00774e5d5c7ccab63c005e9154f9977","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.0-rc.3.tgz","fileCount":335,"integrity":"sha512-OpKHU1H68Ozeu6cZnpWd6ErUvISn5yn/uRmeVuDv36XqlrHrt607SretDE7t2RObIdyQVu/6wSZa7Eu6DoV8Eg==","signatures":[{"sig":"MEQCIFYdxFxMnsuQBiw62biTcTyiuZGCT8tQdkU/dcgsqKgdAiAGK0dSFbknaDvU43SRdWzE7qy9pOkYJWGvZMMLMAvDvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAMBLI7t9EHKY2WNBZVE39fCB1wXLjZ3hPFwJqqiNxy9AiBp64cmRSOWNpLE9F99Ty9quYdxxGMssz6lv2mc53Dqsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.0-rc.3","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1194459},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"92877bdf842bd417f6218ab20267c4928489fb56","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.0-rc.3_1789922393326_0.19229426748230338","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"4d0fe33fd08a2410c06e12c9051f76bc56d7d49e","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.0.tgz","fileCount":335,"integrity":"sha512-bL0fROZhL0z3skj3U1qA9F+r4pjkbaDMRPw9EtKuIshsAGa6T5hGlhLUVP3Q2+/HHqwCQV7muldaUT9Sh3trWw==","signatures":[{"sig":"MEUCIGUUu9hSxVQcmcoZvSNhELrMDuYhpcgSLoGvLX/FgSGNAiEAss2thaNpuyaO4HDk/51HwDbZFWFmKC6nITpsBiT4e0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCTIg/EkgDRqWke+KEraAysToP16bk1YAYRKM/hnvw8UwIhAL/zDHxFhJVxP71W+LEZz8GA9K14RCAcAaYWiYewZ+OM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1195339},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"bc9c1169aae681c4ae51a777e7f93f4c380cf0e0","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"deprecated":"Superseded by 0.7.1. 0.7.0 dropped gatewayOptions from the PaymentGateway interface and mis-classified detached cards.","repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.0_1789924081703_0.013798390136220196","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"c182f856e5574e1ed9908c5f01e016dfdebe1e73","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.1.tgz","fileCount":335,"integrity":"sha512-lGxfKFAhwkFiOkWEaTHSfCqqmxiPBHIn+t6CpbtEzH/7z3duY2XEV5k7fXvflKJCJASDGDp8cwF7wRI9I42RUw==","signatures":[{"sig":"MEQCIGVyqR+v253MUO+uJNsdYzBpBtMLQ2zs4i002zdYDj1pAiBbwRwWhgm3v8zDsFAOoGBQyvd73Jfjbh3xgO723fv7Gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCtyttCTbncNJFVsuLjcGJ1LKpDp6fXw7O9tGhvE0l5IwIhAOmBVkUCpfQhc1QG7c0xWouRrUaw3GqynddMOmuxyr3I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1199731},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"563111ac42f9fabcb1d88200f0a836a636b62166","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.1_1789924868633_0.8689289644075706","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"7c54a77da65548468487bec1795fdc4a3ea4f405","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.2.tgz","fileCount":335,"integrity":"sha512-ebamM2zQmRA/GmWzCoz+Ty8JE6y7lsbM9mKBBknMt7OBrLV7SNNKH8GIsulMixNIbXPcy/5+6hu3V6wi9LB97A==","signatures":[{"sig":"MEYCIQDrBmE6Z12WPadiM7mhL2wxKDCahegBZhLEqAwFrKJrtwIhAM1/vMDi45Ms2EhcGv4IT352O2Rbxnuk+dwcROYEUv8Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDeNrnb465wMgR8q1e9psErEbPRebKjtac486yLge05GgIhAMexC0TATwrzmOodv8PtOfDk3+HkhP82W4x/Yqy5l2I8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1204141},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"91028d4c360b3143117f87f8afe8869129a47f32","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.2_1789956312581_0.5739213049933669","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.3","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.3","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"dd2fc93c946c3c07af83ff8831260be45a1992ae","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.3.tgz","fileCount":335,"integrity":"sha512-Qhe0ClnWhgzplwUzjW6J7EWMAVqSzr1bCNlKM3b7C7DIVo8D905dFFYXZYGWfQxNOiJMGlj+Skm1AEtpw2Be2g==","signatures":[{"sig":"MEUCIFroYWfUxmdJZS9AYDP0zCto47bv0YOzgHvY23OMC3ZCAiEAv++/RWlzO48jah2ZLwUotu5pAoV+SxLJe/K7O7rUFXA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCOT8VUnxVoEBQY3BkINZ5fGmQ0VLCnMS1ZA740n0H0AwIgTCTnTDUImDnAoTRbUWFl7O3Ot9z9Bx1e9YA6I6mw/sE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1208828},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"e4f67b9845dc558d42e1520ac60a3c1f7ae463d2","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.3_1789956889648_0.6016391004362684","host":"s3://npm-registry-packages-npm-production"}},"0.7.4-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.4-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.4-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"1a793bbdc84ef189ee9bd41acec167bf8423d365","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.4-rc.1.tgz","fileCount":335,"integrity":"sha512-0YSLpC20jm2bFFUDCNMZmvi5juQ9Bup9rcmPi8M9hTooE46pX1n5N7hl0cpO0dzjPsSQvSGOnXLJyWiPNCAZeA==","signatures":[{"sig":"MEUCIBoTloRav58VIwxvqv3fn8Csa+J2nMoAbB6/Mn7l4ETOAiEA1oMw0QjEE8348KhJr6YXJDXDmxU/9q90hoxRGXeJyEc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDW3tF98BY4XLqoUoLxV9/zyIpLAQKObflMhkNZyM++4AIgYNYGj5fjCQ4UN//G0Os0blGL2f2wCfyt/nYWLiiehqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.4-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1213989},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"292a651461c49ea54d12ef8d3cbdbe85178a28ad","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.4-rc.1_1789959222513_0.40863615689093025","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.4","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.4","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"af34c399cd62e0db5bb71d005f000e83e890097b","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.4.tgz","fileCount":335,"integrity":"sha512-Rscx4SoBS9zmNyH3mMTxtdWEHe7l/sueWe7q0My9MU/4Y8aLlT6+FMi2/qgewHddoxW65BlJ0Gw392yx6jmVDg==","signatures":[{"sig":"MEUCIQDsnm9rPZ57t6XvyLbPeM9h7ZPpUH21B1oovqAn1IVhHAIgRXicrsPeFahCUkkh6xFuriYSVRIkm4JPyaLHwulaTzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDDrkENSPmvmkmhTcPlyBdrbBy8vg8HsbzQDeyZ1MA3TAIhAO9tw3hj4Vixx3kXw8Lezb4um1dFHWX16enduW6sUrBv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1219695},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"318dbff1aefd944b32b0c8ae1fc74579b88e8f8e","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.4_1789964791809_0.17765952414148312","host":"s3://npm-registry-packages-npm-production"}},"0.7.4-rc.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.7.4-rc.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.7.4-rc.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"82337a7f0df1c3f57893630ae5732c5e94d26bb0","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.7.4-rc.2.tgz","fileCount":335,"integrity":"sha512-GzyxNX8Nnf0Ep8rnlG9ZWg0DBznjtpbOkhh+5Ev+5cQH64Q92TIOMBI9z4FySo1bVS9U04h03sJn21GlYX6JpQ==","signatures":[{"sig":"MEQCIEH7BhUhIGbF0/sUXI+RvkTfDbDT24i8xDUiRHSKKtgAAiAO80+bQOkfdkBr5JnzHZRXxVfpKdFhjt0g/UWmRRayBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDvsBC1neyyHdrda+Olvrmd+OqG/zXab2JrBYtom641PAiEA5vRWGx9GG6T8axErYsThJyzdOlLD4+OpcBTwncS29nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.7.4-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1219700},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"a0581a36b32a981247eec858afe1ec19db8d68e1","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.7.4-rc.2_1789964828999_0.7435387260614534","host":"s3://npm-registry-packages-npm-production"}},"0.8.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.8.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.8.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"ca840fd2a0305b6d7e6e462710ae21a11a8e940e","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.8.0-rc.1.tgz","fileCount":338,"integrity":"sha512-S2xM58WpzbAKKWh9vU4KfwPMtbphTNZo4KYtqKjnUIdcjdB1KLOMRQUFVm0fVhWed0Yr+//hmc4r+Oi/v4YJPA==","signatures":[{"sig":"MEQCIHl7hwTA6idHZPtH9NKD2BL8eo7xyfCxofP7hLE1WIRLAiBYFdN+rIsHEepaFUbnRBCx9dzFJ+wwomPZm2CyzHYwBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEX/0c+72IPtR9GAI8Y2QlT/ZTiuoUjH8cCpA6KzE4I7AiEAp/uCsbfdNZfzv7240o3VOGyzzJzUk9HPmS3v5WZY9LE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.8.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1245730},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"f5b46e97bdde14054152f0a006868e32b7b1530a","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.8.0-rc.1_1790627325570_0.8050717276429247","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.8.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.8.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"2b14ff61b76a44a5a4117d9415f76343d5687271","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.8.0.tgz","fileCount":338,"integrity":"sha512-gv2OfQPCmrufi3D/GY04vI87Ab1WGC7BI5sLbDl8K8pcciIyPDcCTWYxnPUodNwsywBsLovNR4mi8Pt1RcO20Q==","signatures":[{"sig":"MEQCIGbmCTdqNuDs+ckCIWyPxUWYxl9pGdZD8fuPmEvaeW4RAiAf6sI0aNdDHFbGcoOkj6oihpjFV1vUAr0EPZf7mpIljQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBc6x4ff4jL3F9zI30q4os8gj3I3/0evkEZxli0wkWk/AiBvMGwC4qD7B9q+21D3rluYHTZzRu/p4liu2/KE6i0L/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1245725},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"ff403ad6a2c6095780b561528aa60c82f2a3c011","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.8.0_1790636335047_0.32787964978602413","host":"s3://npm-registry-packages-npm-production"}},"0.10.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.10.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.10.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"c56b90b132d3a4c4a84cf1920f266141a4c50720","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.10.0-rc.1.tgz","fileCount":341,"integrity":"sha512-SfiRC4qQFF6e4SrBOrb/Mvp/1JlEhGe+xOWetxtpRQ5KSSlTweBM5kqzJ3asoQNAEKMOLcHgutwLRzgHSWYmLg==","signatures":[{"sig":"MEUCIFx+VMcMlJsjkx/NBn6PkqVeyX0AXOWg+7xnXHUotP/rAiEA9wHS2UZkuCLkedk9kIBBHARW16xQ6Pct9OX1RusgWLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCo7NI8T9bs02rwFaTr69WOQpwnHQEkEmCS+ejFwThyrwIgXHiNJUj/qGYyuYuppoHzYK8cRcfEpLsx7mk3KfiZc5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.10.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1295621},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"a715c73fcf64386bb6245e1a074ed5e066ca9bbe","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.10.0-rc.1_1790708261167_0.2090563883987966","host":"s3://npm-registry-packages-npm-production"}},"0.10.0-rc.2":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.10.0-rc.2","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.10.0-rc.2","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"b6ab895b65ddef77903b8417625a87f737770574","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.10.0-rc.2.tgz","fileCount":341,"integrity":"sha512-GC9BKnPDWwBtH5qUa7CGVFKXfTOlzrini4/4cQNWsCj3UbFtbsmNpr7jrL6UMqxFnQslBooFjua3qPu7EkQu7w==","signatures":[{"sig":"MEUCICQ1LcjhFihHL0Tt7CCeL7+d9iPIlFEAX51vIamuTnr0AiEAqKi5gO0pShSwN4iUo9H/UfBnFzz+GmymhdY0Fk/YPMw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDJqvKgRmLEJDZNPs4o8eIHtJka87E4Yl/JrWIOoscfgwIgOObNDtIR2hF8CbN4Inx81B1BK162Hb0o3vcetKNcO7w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.10.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1298631},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"06431f65175b90d075c1ca5724b5d436f47e8fec","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.10.0-rc.2_1790720080739_0.9652191691809737","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.10.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.10.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"652883a2c8e92cc1ca01e9be06fc129467c3d680","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.10.0.tgz","fileCount":341,"integrity":"sha512-olcePz9Qc298+f1G3+g0l+biTlXomFkMl0Q3Kvp0Nxi96rCC80Cd17Px8AFZy+w+eG7fjQ21HrCv+Hf0gkwjgg==","signatures":[{"sig":"MEUCIQChbyhnylXR2uMAlBUKFE4OU/EqUHM5HKD0YGg8pJZCnwIgQvGbOFL3vfrLkWQK4S9q56EcfhaNRzjtc3Mp9Alpj0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHDLBEzkUZNkzc+pgZgyJ3sWqpoleKglzgrcFaKyK8e8AiEAu0bgmheypiNyeyj31I1sn2byz2JPa/R21mJP0Mhh68I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1298626},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"608684f205e2afd6fb25499ca7a9ef1538f90505","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.10.0_1790720181879_0.29146777592994755","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.11.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.11.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"39fa58e1dc8940526f627754d48b3586be4ca47e","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.11.0.tgz","fileCount":341,"integrity":"sha512-ygrWibLF8J5q27kAgHKCwO5y1U/hTxRdjtOsEC/xWhcznorByNWVZ5E0HgL10rVhRut+g7Mp/bfDtdwXuu6lXA==","signatures":[{"sig":"MEYCIQDu6iIurB/M+g+2uRnFVXOWvkLM3Sh3SmVyYru478SOzwIhAIbk8kLbatyH9OHi0MN0rD6eOUoL9Y0fhEsyCmCo+u/q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIADJJwIWXHXCdM1SfbADjsrWJcweY497DF71ov26YL0NAiBeFSCm9djWfcoOI7innCl+T6rGqVEJcTxFogPW2v7HJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1303887},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"bde67c45e84509c1f280fba596e914dccb1733ae","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.11.0_1790862631594_0.469882990482696","host":"s3://npm-registry-packages-npm-production"}},"0.12.0-rc.1":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.12.0-rc.1","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.12.0-rc.1","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"beed9e598b4b398b2694c22694caafedd0484366","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.12.0-rc.1.tgz","fileCount":341,"integrity":"sha512-MBu8oI1y9q3hZ4NJ8m8SyrpH5/o4GbTH0s1zeChs24AokYgpWJFulSSR+Yad6OFaW5YwLmx2+pGleLf0PH6McA==","signatures":[{"sig":"MEUCIQDh0xkZmt85DZzz7GvW/0tyJHmTxn/P7OY+lVBqpamcugIgBdBXSQ+E9akJ1bb3TP3IQDi8cauigqKZosBRqbHNVxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD9mEwYXsygEMZFfOBAHUh/HRAD9xmt1S3zIEfOMu5f0QIhAOA7TSUjWXiLkwDcUGOw9jDk8ZevtYTsRjvLrb3znn0q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.12.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1327146},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"ac4996700650aa5d725d18139501177816d155aa","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.12.0-rc.1_1790866693527_0.22780423369102554","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@ambushsoftworks/nestjs-payments-graphql","version":"0.12.0","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"author":{"name":"Ambush Softworks"},"license":"MIT","_id":"@ambushsoftworks/nestjs-payments-graphql@0.12.0","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"deb8769069e55240ff766d69e14caa1ef98a0b98","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.12.0.tgz","fileCount":341,"integrity":"sha512-L7nd7P1t6a3u2RXPu32PXao/cYQ5RrcYL+bud8VPW2NnyuGtIA7ir+kaxFU5GXChDS1s69aCzMPBGC1AW4Co7Q==","signatures":[{"sig":"MEUCIEyGkDkFD1hILnuUaELu4b5AvgGZN2EUWVRNtcRncIDGAiEAqUP09EnoicI9OZ28cYOMPn/ttSmudTvyZVuDwGA9VIY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCuvxerHNV6fm5D9rd2rLCF2DCy4vpevn933M8ezy2ltQIhAOHdbaTlaezrAlP46KYZfWJMi5vt2lA7GbSrhZ7npsZi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1327141},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"85da948f36483038bd9e5fd3e3bb0aca3e33f194","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-payments-graphql_0.12.0_1790871725491_0.7699051042514713","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"_id":"@ambushsoftworks/nestjs-payments-graphql@0.13.0","bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"dist":{"shasum":"4b18b7ed8ef9f53f5c94d3838b90c7f1a510478a","tarball":"https://registry.npmjs.org/@ambushsoftworks/nestjs-payments-graphql/-/nestjs-payments-graphql-0.13.0.tgz","fileCount":341,"integrity":"sha512-qheG8MG1IKsxJ80mICJFeVRaiX5qcAx+C2MU0sJP04CzVtRTMnXbGsWC3P2NPDsU23C/exn3dY/U7iol+8PjXA==","signatures":[{"sig":"MEUCIQC3cFxsuJvwguY2kn/q101me0dCEf1Yo/2RDazhWSUntwIgIm8g03T8CpOt4qLMaSRw6OkcuPcoyRu25Y3t/53Mkg0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFAb/k2xh+kYF/7s157Lj58WU4+vTciYlldRw/MUCxNBAiAlc1z6VQxwwb3mdsZYXWTI2ecvO5+qoATzOtz0LSBCbg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ambushsoftworks%2fnestjs-payments-graphql@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v0.2"}},"unpackedSize":1336603},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","name":"@ambushsoftworks/nestjs-payments-graphql","types":"dist/index.d.ts","author":{"name":"Ambush Softworks"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./prisma":{"types":"./dist/prisma/index.d.ts","require":"./dist/prisma/index.js"},"./graphql":{"types":"./dist/graphql/index.d.ts","require":"./dist/graphql/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","require":"./dist/testing/index.js"}},"gitHead":"1f2cdfc3470d779108f84596d6d803e787b60a6f","license":"MIT","scripts":{"lint":"eslint \"src/**/*.ts\"","test":"jest","build":"tsc -p tsconfig.build.json","format":"prettier --write \"src/**/*.ts\"","lint:fix":"eslint \"src/**/*.ts\" --fix","test:cov":"jest --coverage","build:watch":"tsc -p tsconfig.build.json --watch","lint:prisma":"eslint \"test/**/*.ts\"","test:prisma":"jest --config test/prisma/jest.config.json --runInBand","prepublishOnly":"npm run build","prisma:test-db":"node scripts/prisma-test-db.mjs"},"version":"0.13.0","_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"b6ff9b78-1de3-4324-a2fb-01892daca84b"}},"homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"_npmVersion":"11.19.0","description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","directories":{},"maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"_nodeVersion":"24.21.0","dependencies":{"stripe":"^17.0.0"},"typesVersions":{"*":{"prisma":["dist/prisma/index.d.ts"],"graphql":["dist/graphql/index.d.ts"],"testing":["dist/testing/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","rxjs":"^7.0.0","eslint":"^9.0.0","prisma":"~6.19.3","graphql":"^16.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^22.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@prisma/client":"~6.19.3","@types/express":"^5.0.6","@nestjs/graphql":"^13.0.0","@nestjs/testing":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"rxjs":"^7.0.0","graphql":"^16.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/graphql":"^12.0.0 || ^13.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","graphql-type-json":"^0.3.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-payments-graphql_0.13.0_1790887711958_0.04903143287588563"}}},"time":{"created":"2026-04-18T17:09:23.215Z","modified":"2026-10-01T20:48:32.440Z","0.1.0":"2026-04-18T17:09:23.436Z","0.1.2":"2026-04-19T19:14:50.761Z","0.1.3":"2026-05-15T13:28:56.528Z","0.2.0":"2026-05-15T13:29:23.946Z","0.3.0":"2026-05-28T21:01:46.502Z","0.2.1":"2026-05-28T21:01:51.549Z","0.4.0-rc.1":"2026-08-21T04:06:33.006Z","0.4.0-rc.2":"2026-08-21T13:20:29.929Z","0.4.0-rc.3":"2026-08-27T05:25:41.273Z","0.4.0-rc.4":"2026-08-27T14:51:29.789Z","0.4.0-rc.5":"2026-09-15T12:19:48.341Z","0.5.0-rc.1":"2026-09-15T13:40:36.795Z","0.5.0-rc.2":"2026-09-15T14:57:24.744Z","0.6.0-rc.1":"2026-09-19T14:09:23.351Z","0.6.0":"2026-09-19T15:22:58.720Z","0.7.0-rc.1":"2026-09-19T19:01:21.542Z","0.7.0-rc.2":"2026-09-19T19:33:08.012Z","0.7.0-rc.3":"2026-09-20T16:39:53.415Z","0.7.0":"2026-09-20T17:08:01.811Z","0.7.1":"2026-09-20T17:21:08.734Z","0.7.2":"2026-09-21T02:05:12.696Z","0.7.3":"2026-09-21T02:14:49.745Z","0.7.4-rc.1":"2026-09-21T02:53:42.605Z","0.7.4":"2026-09-21T04:26:31.908Z","0.7.4-rc.2":"2026-09-21T04:27:09.115Z","0.8.0-rc.1":"2026-09-28T20:28:45.709Z","0.8.0":"2026-09-28T22:58:55.154Z","0.10.0-rc.1":"2026-09-29T18:57:41.297Z","0.10.0-rc.2":"2026-09-29T22:14:40.832Z","0.10.0":"2026-09-29T22:16:21.986Z","0.11.0":"2026-10-01T13:50:31.706Z","0.12.0-rc.1":"2026-10-01T14:58:13.655Z","0.12.0":"2026-10-01T16:22:05.605Z","0.13.0":"2026-10-01T20:48:32.077Z"},"bugs":{"url":"https://gitlab.com/ambushworks/nestjs-payments-graphql/-/issues"},"author":{"name":"Ambush Softworks"},"license":"MIT","homepage":"https://gitlab.com/ambushworks/nestjs-payments-graphql#readme","keywords":["nestjs","graphql","payments","invoicing","stripe","stripe-webhook","refunds","payment-plans","recurring-invoices","recurring-billing","subscriptions","e-transfer","interac","billing","prisma"],"repository":{"url":"git+https://gitlab.com/ambushworks/nestjs-payments-graphql.git","type":"git"},"description":"NestJS payments module with GraphQL support — invoicing, payment processing, recurring billing, and email notifications","maintainers":[{"name":"ambushsoftworks","email":"lloyd@capson.ca"}],"readme":"# @ambushsoftworks/nestjs-payments-graphql\n\nProduction-grade payments module for NestJS with GraphQL support. Invoicing (including multi-component tax), Stripe payment processing, refunds, payment plans, recurring invoicing with auto-charge, e-transfer, and composable email notifications — with zero database coupling.\n\n## Table of Contents\n\n- [Design Principles](#design-principles)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Architecture](#architecture)\n- [Features](#features)\n  - [Invoicing](#invoicing)\n    - [Tax](#tax)\n  - [Stripe Gateway & Webhooks](#stripe-gateway--webhooks)\n    - [Stripe-specific session options](#stripe-specific-session-options-gatewayoptions)\n    - [Inline PaymentIntent (Stripe Elements)](#inline-paymentintent-stripe-elements)\n    - [Statement descriptors](#statement-descriptors)\n    - [Verifying your Stripe configuration](#verifying-your-stripe-configuration)\n    - [Reconciliation (webhook backstop)](#reconciliation-webhook-backstop)\n  - [Refunds](#refunds)\n  - [Disputes and chargebacks](#disputes-and-chargebacks)\n  - [Payment Plans](#payment-plans)\n  - [Recurring Invoices](#recurring-invoices)\n    - [Pinning a schedule to one card](#pinning-a-schedule-to-one-card)\n    - [Per-charge gateway options for renewals](#per-charge-gateway-options-for-renewals)\n  - [Saved Cards](#saved-cards)\n    - [What \"ownership\" means](#what-ownership-means)\n    - [Deciding which cards may become the default](#deciding-which-cards-may-become-the-default)\n    - [Saving a card while paying](#saving-a-card-while-paying)\n    - [Choosing whether a saved card becomes the default](#choosing-whether-a-saved-card-becomes-the-default)\n    - [Managing saved cards](#managing-saved-cards)\n    - [Stripe-specific off-session options](#stripe-specific-off-session-options-gatewayoptions)\n  - [E-Transfer](#e-transfer)\n  - [Email Notifications](#email-notifications)\n  - [Event Listeners](#event-listeners)\n  - [Transactions](#transactions)\n- [Entry points](#entry-points)\n  - [Testing your integration](#testing-your-integration)\n- [Services](#services)\n  - [Manual payments and confirmation](#manual-payments-and-confirmation)\n  - [Money and types](#money-and-types)\n- [Tenancy and scoping](#tenancy-and-scoping)\n  - [Provider customers and the scope key](#provider-customers-and-the-scope-key)\n- [Error handling](#error-handling)\n- [Operations](#operations)\n- [Upgrading](#upgrading)\n  - [Backfilling Checkout payments taken before 0.3.1](#backfilling-checkout-payments-taken-before-031)\n- [Configuration Reference](#configuration-reference)\n  - [Required Options](#required-options)\n  - [Optional Repositories](#optional-repositories)\n  - [Other Options](#other-options)\n  - [Stripe Options](#stripe-options)\n  - [Email Options](#email-options)\n  - [Defaults & Feature Flags](#defaults--feature-flags)\n- [DI Tokens](#di-tokens)\n- [Reserved GraphQL Type Names](#reserved-graphql-type-names)\n- [Exceptions](#exceptions)\n- [Critical Integration Requirements](#critical-integration-requirements)\n- [Local Development](#local-development)\n- [License](#license)\n\n---\n\n## Design Principles\n\n- **Interface-driven persistence** — All storage is behind interfaces (`IInvoiceRepository`, `IPaymentRepository`, `IRefundRepository`, etc.). Bring your own ORM, or use the bundled Prisma adapter at `@ambushsoftworks/nestjs-payments-graphql/prisma` if your schema uses the reference models.\n- **Instance-based DI** — Repositories and adapters are injected as instances via `useFactory`, not as classes.\n- **Framework-agnostic core** — Services are pure business logic. Resolvers and schedulers live in your application, and so do repository adapters unless you use the Prisma one.\n- **Consumer owns GraphQL decoration** — The package ships `@ObjectType`/`@InputType` classes. You build resolvers that call services and return these types.\n- **Composable email** — A sender (transport) plus a renderer (HTML) plus a branding resolver plus a client resolver. All but the first two are optional with sane defaults.\n- **Stripe is bundled, not required** — The Stripe gateway and webhook controller ship with the package, but are only activated when `stripe` config is provided.\n\n---\n\n## Installation\n\n```bash\nnpm install @ambushsoftworks/nestjs-payments-graphql\n# or\npnpm add @ambushsoftworks/nestjs-payments-graphql\n```\n\n### Peer Dependencies\n\n```bash\nnpm install @nestjs/common @nestjs/core @nestjs/graphql \\\n  class-transformer class-validator graphql graphql-type-json \\\n  reflect-metadata rxjs\n```\n\n`stripe` is bundled as a hard dependency of this package — you do not need to install it separately.\n\n---\n\n## Quick Start\n\nA minimal setup: invoices, manual payments, and a Stripe gateway.\n\n### 1. Implement the required repositories\n\nEach repository is a pure TypeScript interface backed by your ORM. Here is the sketch for Prisma. A ready-to-copy reference schema lives at [`prisma/payment-models.prisma`](./prisma/payment-models.prisma) and ships inside the npm tarball — it contains every model and enum you need, with consumer-owned relations marked `// CONSUMER:`.\n\n```typescript\n// prisma-invoice.repository.ts\nimport { Injectable } from '@nestjs/common';\nimport { PrismaService } from './prisma.service';\nimport {\n  IInvoiceRepository,\n  UniqueConstraintViolationException,\n} from '@ambushsoftworks/nestjs-payments-graphql';\n\n@Injectable()\nexport class PrismaInvoiceRepository implements IInvoiceRepository {\n  constructor(private readonly prisma: PrismaService) {}\n\n  async create(data) {\n    try {\n      return await this.prisma.invoice.create({ data });\n    } catch (e: any) {\n      if (e.code === 'P2002') throw new UniqueConstraintViolationException();\n      throw e;\n    }\n  }\n\n  async findById(id) { return this.prisma.invoice.findUnique({ where: { id } }); }\n  // ... implement the rest of IInvoiceRepository\n  async withTransaction(fn) {\n    return this.prisma.$transaction(async (tx) => {\n      const scoped = new PrismaInvoiceRepository({ ...this.prisma, invoice: tx.invoice } as any);\n      return fn(scoped);\n    });\n  }\n}\n```\n\nRepositories you must implement:\n\n| Interface | Purpose |\n|-----------|---------|\n| `IInvoiceRepository` | Invoice + line item persistence (plus optional tax components — see [Tax](#tax)) |\n| `IPaymentRepository` | Payment records |\n| `IRefundRepository` | Refund records |\n| `IPaymentConfigRepository` | Per-division payment config + providers |\n| `IWebhookIdempotencyRepository` | Dedupe Stripe webhook deliveries |\n| `ITransactionManager` | Multi-repo transaction coordinator |\n\nOpt-in interfaces:\n\n| Interface | Required when |\n|-----------|---------------|\n| `IPaymentPlanRepository` | `features.paymentPlans = true` |\n| `IRecurringInvoiceRepository` | `features.recurringInvoices = true` |\n| `IPaymentCustomerRepository` | `features.recurringInvoices = true` |\n\nSome interfaces also carry **optional methods** that unlock a capability without breaking existing adapters — implement them only if you need what they enable:\n\n| Optional method | On | Enables |\n|---|---|---|\n| `findReusablePendingByInvoiceId` | `IPaymentRepository` | Durable PaymentIntent reuse for inline flows (v0.3.0) |\n| `findTaxComponentsByInvoice` + `replaceTaxComponents` | `IInvoiceRepository` | Invoices carrying more than one tax (v0.4.0) |\n| `findTaxComponentsByRecurringInvoice` + `replaceTaxComponents` | `IRecurringInvoiceRepository` | The same, on recurring templates (v0.4.0) |\n| `findByPaymentMethodId` | `IRecurringInvoiceRepository` | Lists the schedules pinned to a card, so you can warn before removing it (v0.7.0) |\n| `findByIdForUpdate` | `IRecurringInvoiceRepository` | Locks the template so the auto-charge failure counter is a safe read-modify-write — without it a `resume()` landing mid-charge can be overwritten (v0.7.0) |\n| `setDefaultPaymentMethod` | `IPaymentCustomerRepository` | Mirrors the provider's default card so it can be shown without a provider call; required by `features.cardManagement` (v0.6.0) |\n| `findInstallmentByIdForUpdate` | `IPaymentPlanRepository` | Two concurrent `invoiceInstallment` calls for one installment cannot both link an invoice (v0.5.0) |\n\n#### Or use the bundled Prisma adapter\n\nIf your schema uses the reference models, `@ambushsoftworks/nestjs-payments-graphql/prisma` implements every repository above, optional methods included, and the transaction manager:\n\n```typescript\nimport { Prisma } from '@prisma/client';\nimport {\n  assertPaymentsSchema,\n  createPrismaPaymentRepositories,\n} from '@ambushsoftworks/nestjs-payments-graphql/prisma';\n\nPaymentsModule.forRootAsync({\n  inject: [PrismaService],\n  useFactory: (prisma: PrismaService) => {\n    // Fails at boot, naming what is missing, if your copy of the models has drifted.\n    assertPaymentsSchema(Prisma.dmmf, { paymentPlans: true, taxComponents: true });\n    return {\n      ...createPrismaPaymentRepositories(prisma, Prisma),\n      features: { paymentPlans: true },\n    };\n  },\n});\n```\n\n- **Any client of the right shape works**, including one built with `$extends`. Pass your generated `Prisma` namespace as well: the adapter needs its `DbNull`, and imports nothing from `@prisma/client` itself.\n- **Keep the reference model names.** Row locks, invoice numbering and the recurring claim use raw SQL, so `Invoice`, `Payment`, `PaymentPlanInstallment` and `RecurringInvoice` cannot be renamed with `@@map`. Adding columns is fine.\n- **Only the repositories your schema supports are created.** Without the payment plan or recurring models, those repositories are left out, and the module's boot validation says so if you enable the feature. Without the tax-component tables, the tax-component methods are withdrawn, so the package refuses tax components instead of failing mid-write.\n- **Subclass to add queries or columns.** Pass subclasses as `createPrismaPaymentRepositories(prisma, Prisma, { repositories: { invoices: MyInvoiceRepository } })`, and the transaction manager builds them inside transactions too. Override the protected `to…` mapping methods to read columns of your own.\n- **Tested against Prisma 6.19 on PostgreSQL 16.** It is written against the client's shape rather than its classes, so later Prisma versions should work, but they are not tested yet. The raw SQL is PostgreSQL-only.\n\n### 2. Register the module\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { ConfigModule, ConfigService } from '@nestjs/config';\nimport { PaymentsModule } from '@ambushsoftworks/nestjs-payments-graphql';\n\n@Module({\n  imports: [\n    ConfigModule.forRoot(),\n    PaymentsModule.forRootAsync({\n      imports: [ConfigModule, MyRepositoriesModule, MyAdaptersModule],\n      inject: [\n        PrismaInvoiceRepository,\n        PrismaPaymentRepository,\n        PrismaRefundRepository,\n        PrismaPaymentConfigRepository,\n        PrismaWebhookIdempotencyRepository,\n        PrismaTransactionManager,\n        ConfigService,\n      ],\n      useFactory: (invoices, payments, refunds, config, webhooks, tx, cfg) => ({\n        invoiceRepositoryInstance: invoices,\n        paymentRepositoryInstance: payments,\n        refundRepositoryInstance: refunds,\n        paymentConfigRepositoryInstance: config,\n        webhookIdempotencyRepositoryInstance: webhooks,\n        transactionManagerInstance: tx,\n\n        stripe: {\n          secretKey: cfg.get('STRIPE_SECRET_KEY'),\n          webhookSecret: cfg.get('STRIPE_WEBHOOK_SECRET'),\n        },\n\n        defaultCurrency: 'USD',\n      }),\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### 3. Enable `rawBody` for Stripe signature verification\n\nStripe's webhook signature check requires the unparsed request body.\n\n```typescript\n// main.ts\nconst app = await NestFactory.create(AppModule, { rawBody: true });\n```\n\n### 4. Exempt the webhook path from auth\n\nThe controller is registered at `POST /webhooks/stripe` and marked with `@PaymentsWebhook()`. Your auth/tenant guards must respect this metadata. Either:\n\n- Have guards check `Reflector.get(PAYMENTS_WEBHOOK, handler)` and bail out early, **or**\n- The controller sets `isPublic` and `skipTenant` metadata via the `@PaymentsWebhook()` decorator; read them with `Reflector` and let the request through. `PAYMENTS_WEBHOOK` is the **metadata key** those are set under — not a path, so comparing it to `request.url` never matches.\n\n`PaymentsWebhook` is exported, so you can apply the same three metadata keys to a route of your own if you proxy the webhook rather than exposing the package's controller directly. You do not need it otherwise — the controller already carries it.\n\nSee [Critical Integration Requirements](#critical-integration-requirements).\n\n### 5. Build a resolver\n\n```typescript\nimport { Resolver, Mutation, Args } from '@nestjs/graphql';\nimport {\n  InvoiceService,\n  InvoiceModel,\n} from '@ambushsoftworks/nestjs-payments-graphql';\n// The @InputType classes live on the /graphql subpath. The plain names on the\n// root are the *service* interfaces — what you pass to the service, which is a\n// different shape (it carries `createdBy`, for one). See Upgrading.\nimport { CreateInvoiceInput } from '@ambushsoftworks/nestjs-payments-graphql/graphql';\n\n@Resolver()\nexport class InvoiceResolver {\n  constructor(private readonly invoices: InvoiceService) {}\n\n  @Mutation(() => InvoiceModel)\n  async createInvoice(\n    @Args('input') input: CreateInvoiceInput,\n    // resolve divisionId + userId from your auth/tenant context\n  ) {\n    return this.invoices.createInvoice(divisionId, input, userId);\n  }\n}\n```\n\n---\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────────┐\n│  Consumer App (e.g. Ariadne API)                             │\n│  ──────────────────────────────                              │\n│  • Prisma repositories (implements IInvoiceRepository, ...)  │\n│  • Resolvers (GraphQL queries/mutations)                     │\n│  • Schedulers (@nestjs/schedule)                             │\n│  • Auth guards (respect @PaymentsWebhook metadata)           │\n│  • Event listener (implements IPaymentEventListener)         │\n│  • Email adapters (IPaymentEmailSender, IPaymentClient...)   │\n│                                                              │\n│  Wires together via PaymentsModule.forRootAsync({ ... })     │\n└──────────────────────────────────────────────────────────────┘\n                              ↓ imports\n┌──────────────────────────────────────────────────────────────┐\n│  @ambushsoftworks/nestjs-payments-graphql                    │\n│  ─────────────────────────────────────────                   │\n│  • Services (pure business logic)                            │\n│  • Interfaces (what consumer must implement)                 │\n│  • DI tokens (Symbols)                                       │\n│  • GraphQL models + input types                              │\n│  • StripeGateway + StripeWebhookController (opt-in)          │\n│  • Exceptions                                                │\n└──────────────────────────────────────────────────────────────┘\n```\n\nThe dynamic module is registered as `global: true` — any module in your app can inject services and tokens without re-importing.\n\n---\n\n## Features\n\n### Invoicing\n\n- Create DRAFT invoices with optional line items.\n- Line item edits allowed only in DRAFT; totals auto-recalculate on mutation.\n- `InvoiceNumberService` generates numbers in the format `INV-{YEAR}-{00001}` from a **single global sequence**. The `divisionId` argument is accepted and currently unused, so two divisions share one run of numbers and each division's own numbers have gaps. If your jurisdiction requires a gap-free sequence per legal entity, generate numbers yourself and pass them in, retrying on unique-constraint collisions up to 5 times.\n- Tax rate resolution: use the value passed on `createInvoice` if provided, otherwise `PaymentConfig.defaultTaxRate` for the division, otherwise `0`. Invoices attracting more than one tax pass `taxComponents` instead — see [Tax](#tax).\n- Status transitions: `DRAFT → SENT → {PARTIALLY_PAID, PAID, OVERDUE, VOID, REFUNDED}`.\n- Invoice `metadata` is a Stripe-style `Record<string, string>` for consumer-specific context.\n\n#### Tax\n\nMost sales attract exactly one tax, and `taxRate` on its own covers them:\n\n```typescript\nawait invoiceService.createInvoice(divisionId, {\n  clientDetailsId,\n  taxRate: 0.13,          // 13% HST\n  lineItems: [...],\n}, userId);\n```\n\nSome attract two. A Quebec sale carries **5% GST and 9.975% QST** — two taxes, levied by two governments, remitted separately. Blending them to 14.975% produces an invoice the client cannot claim input tax credits from and the supplier cannot reconcile two remittances against. US state + county + city sales tax stacks the same way. Pass `taxComponents` instead:\n\n```typescript\nawait invoiceService.createInvoice(divisionId, {\n  clientDetailsId,\n  taxComponents: [\n    { name: 'GST', rate: 0.05,    authority: 'CRA',           registrationNumber: '123456789 RT0001' },\n    { name: 'QST', rate: 0.09975, authority: 'Revenu Québec', registrationNumber: '1234567890 TQ0001' },\n  ],\n  lineItems: [...],\n}, userId);\n```\n\n**The consumer owns the rate table; the package owns the arithmetic.** Which taxes apply to a given sale, at what rate, and whether a supplier charges tax at all is tax law — it varies by jurisdiction and changes without notice, and the package does not model it. You decide the components; the package computes each `amount` from the invoice's taxable subtotal and re-prices them whenever line items change, so a component's amount can never go stale against the invoice it belongs to.\n\n**Components are authoritative.** `taxAmount` is their sum, not a blended rate applied to the subtotal — each component is remitted to a different authority. `taxRate` becomes the sum of the component rates, kept as a rollup for surfaces that read one number; re-deriving `taxAmount` from it can differ by a cent, and when it does the components are right.\n\n`taxRate` and `taxComponents` are **mutually exclusive** — supplying both throws `InvalidTaxConfigurationException`, as do an unnamed or duplicately-named component and a negative or non-finite rate. Each of those would otherwise put a silently wrong number on a financial document.\n\n**An empty list means untaxed.** `taxComponents: []` behaves exactly like `taxRate: 0`: no component rows, `taxAmount` 0. It is what a tax resolver returns for a sale that attracts no tax — a zero-rated export, a government fee collected and passed on — so callers can hand the resolver's answer straight through. Before v0.5.0 an empty list threw.\n\n**Omitting tax applies the division default.** With neither field supplied, the invoice takes `PaymentConfig.defaultTaxRate`, or 0 when none is set. A division-wide rate cannot know where a client lives, so if you bill clients in more than one tax jurisdiction, set `tax: { requireExplicit: true }` on the module. An invoice or recurring template that states no tax then throws, instead of looking right and being wrong. Pass `taxRate: 0` or `taxComponents: []` for untaxed work.\n\n**Payment plan installments** take tax through `invoiceInstallment`'s options:\n\n```typescript\nawait paymentPlanService.invoiceInstallment(divisionId, installmentId, userId, {\n  lineItems: [{ description: 'Stage 1', quantity: 1, unitPrice: 100_000, isTaxable: true }],\n  taxComponents: [\n    { name: 'GST', rate: 0.05 },\n    { name: 'QST', rate: 0.09975 },\n  ],\n});\n```\n\nThe lines must add up to the installment's amount before tax, because the plan tracks what has been paid by installment amount. Tax on lines that are all non-taxable throws. With no options, the installment is billed on one non-taxable line at `taxRate` 0, never the division default. Implement the optional `IPaymentPlanRepository.findInstallmentByIdForUpdate` so two concurrent calls for one installment cannot both link an invoice: the call that loses voids its own draft and returns the winner's invoice.\n\nTo store components, implement two OPTIONAL methods on your `IInvoiceRepository`:\n\n```typescript\nfindTaxComponentsByInvoice(invoiceId: string): Promise<InvoiceTaxComponent[]>;\nreplaceTaxComponents(invoiceId: string, components: CreateInvoiceTaxComponentData[]): Promise<InvoiceTaxComponent[]>;\n```\n\nImplement both or neither. `replaceTaxComponents` must be atomic — the package calls it immediately after writing `taxAmount`, and the two must agree. Supplying components to a repository without them throws rather than dropping them silently. Copy `InvoiceTaxComponent` from [`prisma/payment-models.prisma`](./prisma/payment-models.prisma); single-rate consumers need no new table.\n\n**Recurring templates** take `taxComponents` the same way — on `CreateRecurringInvoiceInput` and `UpdateRecurringTemplateInput` — stored without amounts (a template has no subtotal) and priced onto each generated invoice. `IRecurringInvoiceRepository` has the matching optional pair, and `RecurringInvoiceModel.templateTaxComponents` reads them back.\n\nUpdating a template replaces its components wholesale. Clearing them with an empty list requires supplying `taxRate` in the same call — otherwise the template would silently fall back to a rollup rate that was the sum of the components just removed, and keep billing on a schedule.\n\n**Supplier registration number.** Set `PaymentConfig.taxRegistrationNumber` for the number that appears on every invoice — a Canadian invoice without the supplier's GST/HST number is not fully usable by the recipient. Where two authorities are involved and the supplier has a different number for each, set `registrationNumber` per component; it takes precedence. The package stores and renders these verbatim and does not validate the format, which differs by jurisdiction.\n\n**Rendering.** The default invoice email prints a totals block: subtotal, each tax on its own line with its name and registration number, discount, total. Supply your own `IPaymentEmailTemplateRenderer` to change it — `params.invoice.taxComponents` carries the list. The package ships no PDF renderer; invoice PDFs stay with the consumer.\n\n**Refunds do not apportion tax across components.** A refund reduces the invoice's `amountPaid` and recalculates its status; it does not write back a reduced `taxAmount`, and it does not adjust component amounts. The components continue to state the tax that was charged on the original sale, which is what a credit note references. If your jurisdiction requires a tax-adjusted credit note, generate it in your own layer — deciding whether a partial refund releases tax pro-rata or tax-last is a tax-law question, and the package does not answer those.\n\n### Stripe Gateway & Webhooks\n\nWhen `stripe` config is provided the module registers `StripeGateway`. **The webhook controller mounts unconditionally**, so `POST /webhooks/stripe` exists — auth-exempt — even in a deployment with no Stripe config, where it answers 400. Worth knowing for a route inventory or a pen-test scope. Webhook security relies entirely on Stripe signature verification. Behaviour:\n\n- **Idempotency** — two levels, both required. *Event level*: each event ID is recorded via `IWebhookIdempotencyRepository` (inside the handler's transaction, so a failed attempt rolls the record back and Stripe's retry runs it again); replays no-op. Two deliveries of one event at the same moment are safe as well: the second one's `record` hits the unique constraint on the event ID, and the handler treats that as already processed and returns normally. For that, your adapter's `record` must translate the ORM's unique error into `UniqueConstraintViolationException`, as every other adapter method does, and never swallow it. *Payment level*: one payment emits more than one success event — a Checkout payment fires both `checkout.session.completed` and `payment_intent.succeeded`, under two different event IDs and two different provider payment IDs. `handlePaymentSucceeded` resolves both to a single `Payment` row by the PaymentIntent ID and applies the amount to the invoice only once, whichever event arrives first. Subscribing to both events is safe and expected. (Before v0.3.1 it was not: the second event re-applied the amount, inflating `amountPaid` on partially-paid invoices.)\n- **Retries** — `payment_intent.succeeded` events retry up to 3 times with a 2-second delay if the corresponding `Payment` row has not yet been created.\n- **Unrecognized event types** — Stripe fires many events per checkout (`payment_intent.created`, `charge.updated`, `charge.succeeded`, …) that the package does not route. These return 200 with a `debug`-level log and Stripe does not retry. The gateway surfaces them as an `IgnoredWebhookEvent` (`{ type: 'ignored', eventId, eventType }`) — if you implement a custom `PaymentGateway`, your `handleWebhook` must return this sentinel for unrouted events instead of throwing.\n- **Which provider's rows an event addresses** — `PaymentWebhookEvent.provider` (v0.7.0). Payment and refund rows are keyed by `(provider, providerPaymentId)`, and before v0.7.0 the handlers wrote `'stripe'` into that lookup literally, so a second registered gateway would have had its events resolved against Stripe's rows. `StripeGateway` stamps the field on every event it emits; an event without it still means Stripe, so nothing changes for anyone who does not act. **If you write your own gateway, set it.**\n- **The Checkout “shadow” event** (v0.7.2) — a Checkout payment emits *two* success events. If your endpoint subscribes to `payment_intent.succeeded` as well as `checkout.session.completed`, the intent event arrives carrying **no `invoiceId`**: Stripe does not copy Checkout Session metadata onto the PaymentIntent, and the pending `Payment` row is keyed by the *session* id, so nothing in that event can match it. It is logged at `log` and skipped; `checkout.session.completed` carries the invoiceId and settles the payment. Before v0.7.2 it was logged at **error**, once per successful payment, which made a genuinely failed webhook indistinguishable from a healthy one. Reported from production by the jobsites team.\n- **Events from another environment** (v0.7.0) — one provider account has one set of webhook endpoints, so **every environment's events reach every endpoint**. Staging and production on one Stripe account is the normal arrangement, and most of what a production endpoint receives may belong to somewhere else. Events naming an invoice this deployment does not have are acknowledged and skipped with a `warn`; setup sessions for a provider customer it has no record of are skipped without calling the provider. Before v0.7.0 the first of those violated the `Payment.invoice` foreign key and answered 500, and since the idempotency record is written inside the same transaction it rolled back too — so the event was redelivered for ever. **Stripe disables an endpoint that keeps failing**, and a disabled production endpoint stops recording real payments. Reported by the jobsites team, who had 25 of their last 25 `payment_intent.succeeded` events coming from another environment.\n- **Error reporting** — configure `webhook.errorReporter` to pipe exceptions into Sentry/GlitchTip/etc.\n\n**Stripe Dashboard webhook subscriptions.** Your Stripe Dashboard webhook endpoint MUST subscribe to (at minimum):\n\n- `checkout.session.completed` — closes the loop for the Checkout-redirect flow.\n- `payment_intent.processing` — observability for delayed bank-side methods, Checkout included as of v0.7.4.\n- `payment_intent.succeeded` — closes the loop for direct-PaymentIntent flows (chiefly the inline Stripe Elements surface in v0.3.0, plus any consumer calling `paymentIntents.create` directly). Required as of **v0.2.1** — without it, inline payments succeed at Stripe but the invoice never updates.\n- `payment_intent.payment_failed` — surfaces declines back into the payment record, Checkout included as of **v0.7.4**. Two limits worth knowing, both deliberate. **The rollout tail:** the fix works by putting `invoiceId` on the PaymentIntent at session-creation time, so a session created *before* you upgraded still has an intent that cannot be matched; those log a line and skip, exactly as they did in v0.7.3, until they age out. **Ambiguity:** if an invoice has more than one pending payment for the same provider — a client who abandoned one Checkout and started another — the package refuses to guess which attempt an event describes, warns, and leaves both rows alone. In both cases `PaymentJobsService.runReconciliation` is the backstop **if you created a pending row** — it can only settle rows that exist. See [The Checkout flow](#the-checkout-flow); a deployment that does not call `createPendingPayment` has nothing here to record a decline against, and nothing for the sweep to find.\n- `refund.created` and `refund.updated` — close the loop on refunds. Required as of **v0.4.0**, replacing `charge.refunded`. Subscribe to **both**: `refund.created` records a refund that succeeds immediately, `refund.updated` carries the ones that resolve later, including failures.\n- `charge.dispute.created`, `charge.dispute.closed` — Required as of **v0.6.0**. Without them a chargeback pulls funds with no local record at all: the payment stays `SUCCEEDED`, the invoice stays `PAID`, and nothing in your system knows the money has gone.\n\n> **Upgrading from `charge.refunded`.** It is no longer routed, and a deployment that subscribes only to it will stop recording refunds entirely. The package cannot use it: the handler needed a refund id from `charge.refunds`, a paginated sub-list Stripe does not expand in webhook payloads and that a webhook cannot request expansion for. The id was absent on every delivery, so a refund issued through `createRefund` could not be matched to its own confirmation and was written twice — doubling `amountDue` and sending the client two refund emails. Fixed in v0.4.0; see the CHANGELOG. `charge.refunded` may be left subscribed (it is ignored, and logs one warning per process) or removed.\n\n**Do not transcribe that list by hand.** As of v0.4.0 the package exports it, so your deployment can assert its live Stripe configuration against the events this version actually routes instead of against a README you read once:\n\n```typescript\nimport {\n  STRIPE_WEBHOOK_EVENTS,\n  ALL_STRIPE_WEBHOOK_EVENTS,\n} from '@ambushsoftworks/nestjs-payments-graphql';\n\n// Compute your own required set from your own configuration.\nconst required = [\n  ...STRIPE_WEBHOOK_EVENTS.always,\n  ...(usingInlinePaymentIntent ? STRIPE_WEBHOOK_EVENTS.inlinePaymentIntent : []),\n];\n\n// Fail a preflight / CI job / health check when the endpoint falls behind.\nconst endpoint = await stripe.webhookEndpoints.retrieve(endpointId);\nconst subscribed = new Set(endpoint.enabled_events);\nconst missing = subscribed.has('*')\n  ? []\n  : required.filter((e) => !subscribed.has(e));\n\nif (missing.length) {\n  throw new Error(\n    `Stripe endpoint ${endpointId} is missing ${missing.join(', ')}. ` +\n      `Payments will succeed at Stripe and invoices will not close.`,\n  );\n}\n```\n\nThe split is deliberate: `always` is what every Stripe deployment needs, and `inlinePaymentIntent` is required only if you call `createPaymentIntent`, because that flow's success signal is the PaymentIntent event rather than the Checkout Session one. A Checkout-only consumer that subscribes to `always` alone never *receives* `payment_intent.succeeded` — Stripe does emit one for every Checkout payment, it is simply not delivered to an endpoint that has not subscribed. Subscribe to it anyway if you use off-session auto-renew and want a backstop for a charge whose synchronous record write did not complete. `ALL_STRIPE_WEBHOOK_EVENTS` is both groups flattened, for consumers using both flows.\n\nHandle `enabled_events: ['*']` as shown — Stripe allows a wildcard subscription, and a naive superset check reports it as missing everything.\n\nSubscribing to more events than you need is safe for your money: a Checkout payment emits both `checkout.session.completed` and `payment_intent.succeeded`, and since v0.3.1 the package applies that payment to the invoice exactly once no matter how many success events describe it. It is not free of noise, though — the extra intent event produces one `log` line per payment, the “shadow” event described under **Stripe Gateway & Webhooks** above.\n\nA spec asserts this constant against the gateway's routing switch, so the exported list cannot drift from the events the code handles.\n\n> **Payable-status requirement.** `PaymentService.handlePaymentSucceeded` only applies an incoming payment if the invoice is in `SENT`, `PARTIALLY_PAID`, or `OVERDUE`. If a consumer creates a DRAFT invoice and starts checkout without first transitioning it to SENT, the SUCCEEDED payment lands in the `Payment` table but the invoice stays in DRAFT with `amountPaid=0`.\n>\n> As of v0.1.3 this fires a WARN log identifying the payment, provider, invoice, and status. As of v0.2.0, call `InvoiceService.ensureSent(invoiceId, eTransferEnabled, eTransferAutoDeposit, eTransferConfig?, options?)` from your checkout flow immediately before `gateway.createPaymentSession(...)`. `ensureSent` is idempotent: DRAFT → SENT (delegates to `sendInvoice`, which emails the invoice unless told not to — see [Issuing an invoice without emailing it](#issuing-an-invoice-without-emailing-it)), already-SENT/PARTIALLY_PAID/OVERDUE → returns the invoice unchanged with no re-emailed notification, PAID/VOID/REFUNDED → throws `InvalidInvoiceStateException`. `sendInvoice` itself remains strict (DRAFT-only) for callers that want the strictness.\n\n`GatewayRegistryService` keeps a runtime lookup of registered gateways so the package can work without `@Optional() @Inject()`.\n\n#### The Checkout flow\n\nThree calls, in this order. The third is the one integrations miss, because until v0.7.4 this section did not exist — and missing it is quiet rather than loud.\n\n```typescript\n// 1. The invoice must be payable before the customer can pay it.\nconst sent = await this.invoices.ensureSent(invoiceId, eTransferEnabled, autoDeposit);\n\n// 2. The session. Returns the session id (`cs_…`), which you need next.\nconst session = await gateway.createPaymentSession({\n  invoiceId,\n  amount: sent.amountDue,\n  currency: sent.currency,\n  successUrl, cancelUrl,\n  idempotencyKey: `checkout:${invoiceId}:${attemptId}`,\n});\n\n// 3. Record the attempt, keyed by the SESSION id.\nawait this.payments.createPendingPayment({\n  invoiceId,\n  amount: sent.amountDue,\n  currency: sent.currency,\n  method: 'CREDIT_CARD',\n  provider: 'stripe',\n  providerPaymentId: session.providerPaymentId, // the `cs_…` from step 2\n  createdBy: userId,\n});\n```\n\n**Why step 3 is not optional.** Without a `PENDING` row, four things you probably believe are true are not:\n\n1. **A webhook that never arrives loses the payment permanently.** [Reconciliation](#reconciliation-webhook-backstop) is the backstop for a webhook endpoint that is down, misconfigured or unsubscribed — and it can only reconcile rows that *exist*. With no pending row there is nothing to sweep: the invoice stays open, the money sits at Stripe, and nothing in your system knows. This is the reason that outweighs the rest.\n2. **Voiding the invoice leaves the Checkout session payable.** `voidInvoice` cancels a payment session through `cancelPendingPaymentsForInvoice`, which looks for pending rows. No row, no cancellation — a client can still pay an invoice you have written off.\n3. **A declined card is not recorded.** `payment_intent.payment_failed` marks an existing row `FAILED`; it never creates one. No row, no record of the attempt.\n4. **The payment is invisible until it settles.** Nothing on the invoice shows that a customer is mid-checkout.\n\n**Two mechanics worth knowing.** The webhook can beat step 3 — Stripe is fast and your write is not instant — which is why the webhook controller retries a `payment.succeeded` that finds no row (3 attempts, 2s apart) before giving up. And an abandoned checkout leaves a `PENDING` row behind, which the reconciliation sweep later resolves against the provider; it self-cleans rather than accumulating.\n\n**This is safe as of v0.7.4, and was not before.** Earlier versions could not match a Checkout `payment_intent.*` event to the session-keyed row, so if Stripe delivered the intent event first the package created a *second* row and cancelled yours — taking your `method` and `createdBy` with it. Do not back-port this advice.\n\n**Making a Checkout session idempotent.** `createPaymentSession` accepts an `idempotencyKey` (v0.7.0), which it passes to Stripe. Without one, a double-submitted \"Pay now\" creates two sessions for a single invoice and either can be paid.\n\nThe package does **not** invent a key here, though it does for `createRefund` and `createPaymentIntent`. Replaying either of those gives back the same refund or the same intent; replaying a Checkout Session hands the customer a URL that may already be dead or already paid. Only you know where your retry boundary is — a request id, an attempt number — so pass one.\n\n#### Stripe-specific session options (`gatewayOptions`)\n\n`PaymentGateway.createPaymentSession` accepts a gateway-agnostic `gatewayOptions?: Record<string, unknown>` for passthrough config. The Stripe gateway interprets it as follows:\n\n- `gatewayOptions.paymentIntentData` → merged into the SDK call's `payment_intent_data`. Where you put `statement_descriptor_suffix`, `application_fee_amount`, `on_behalf_of`, and `transfer_data` for Stripe Connect.\n- `gatewayOptions.session` → shallow-spread at the SDK call top level. Place for `locale`, `submit_type`, and consumer-supplied `metadata`.\n- `gatewayOptions.metadata` → shorthand for `session.metadata`. Shallow-merged with the call's metadata; the package's `metadata.invoiceId` is always appended last.\n- Any other top-level key in `gatewayOptions` is shallow-spread at the SDK call top level (package-owned keys still win on collision).\n\nFor typed autocomplete:\n\n```typescript\nimport type { StripeGatewayOptions } from '@ambushsoftworks/nestjs-payments-graphql';\n\nconst gatewayOptions: StripeGatewayOptions = {\n  paymentIntentData: {\n    statement_descriptor_suffix: 'TRADESMEN',  // shows on the customer's statement\n  },\n  session: {\n    locale: 'en',\n  },\n  metadata: {\n    tenantId: 'site-A',  // your own tracking — invoiceId is reserved\n  },\n};\n\nawait gateway.createPaymentSession({\n  invoiceId,\n  amount,\n  currency: 'USD',\n  successUrl,\n  cancelUrl,\n  gatewayOptions,\n});\n```\n\nThe gateway **throws `PaymentGatewayException`** at session-creation time if `gatewayOptions` overrides a reserved package-owned key — silent overwrite was the worst failure mode because the webhook handler keys off `metadata.invoiceId` and would otherwise produce an orphan payment with no clear cause. Reserved keys:\n\n- `metadata.invoiceId` (both at top level and under `session.metadata`)\n- `success_url`, `cancel_url`\n- `client_reference_id`\n- `mode`\n- `line_items`\n\n> **The package sets `paymentIntentData.metadata.invoiceId` itself, as of v0.7.4.** Stripe does not copy Checkout Session metadata onto the PaymentIntent, so without it every `payment_intent.*` event for a Checkout payment is unresolvable — the pending `Payment` row is keyed by the *session* id and the event only knows the *intent* id. Writing it is what lets `payment_intent.succeeded` settle the row your `createPendingPayment` call wrote, and what lets `payment_intent.payment_failed` mark that row `FAILED` — both of which presuppose you created one; see [The Checkout flow](#the-checkout-flow). You do not need to set it, and if you do it must match the invoice being paid — a differing value is refused at session-creation time rather than silently overwritten. Before v0.7.4 setting it yourself actively hurt: the intent event would create a *second* row and the session event would cancel yours. That is no longer true, and it is no longer necessary.\n\nThe same list is exported as `STRIPE_RESERVED_GATEWAY_KEYS: readonly string[]` for consumers that wrap the gateway and want to share the validation.\n\n#### Inline PaymentIntent (Stripe Elements)\n\n*Added in v0.3.0.*\n\nFor consumer-facing flows that want the payment form embedded in the page (Stripe Elements on web, `flutter_stripe` on mobile, etc.) rather than redirecting to Stripe Checkout, `StripeGateway` ships two methods on the base `PaymentGateway` interface:\n\n```typescript\ngateway.createPaymentIntent(params): Promise<CreatePaymentIntentResult>;\ngateway.cancelPaymentIntent(providerPaymentId): Promise<{ success; alreadyTerminal }>;\n```\n\nBoth are optional on `PaymentGateway` (custom adapters from before v0.3.0 do not need to implement them). To get a type-narrowed gateway where the methods are non-optional, call `GatewayRegistryService.getInlineCapable('stripe')`. On gateways that don't support inline, the helper throws `PaymentIntentOperationNotSupportedException`.\n\n**Set the publishable key.** Inline-PI needs the publishable key at module init:\n\n```typescript\nstripe: {\n  secretKey: cfg.get('STRIPE_SECRET_KEY'),\n  webhookSecret: cfg.get('STRIPE_WEBHOOK_SECRET'),\n  publishableKey: cfg.get('STRIPE_PUBLISHABLE_KEY'),  // NEW for inline\n},\n```\n\nIf you forget, the first call to `createPaymentIntent` throws `PublishableKeyNotConfiguredException` with a precise message.\n\n**Subscribe to `payment_intent.succeeded`.** Inline payments succeed at Stripe via a direct PaymentIntent confirmation (no Checkout session). The package handles `payment_intent.succeeded` as of v0.2.1 — your Stripe Dashboard webhook config must list this event or invoices will never close. See the bullet list at the top of \"Stripe Gateway & Webhooks\".\n\nDo not take that on trust: as of v0.4.0, [`verifyStripeConfiguration`](#verifying-your-stripe-configuration) checks the live subscription for you, and reports a missing `payment_intent.succeeded` as an `error` precisely when a publishable key is configured. This is the one requirement in this package that lives entirely outside your repository, where no diff, type error or review can catch it.\n\n**Reuse-via-pending-row.** `StripeGateway.createPaymentIntent` looks up an existing PENDING payment for the same invoice via `IPaymentRepository.findReusablePendingByInvoiceId(invoiceId, provider)` and, when one is found, retrieves the intent from Stripe. The retrieved intent is reused **only when all of the following hold**:\n\n- its status is still confirmable (`requires_payment_method`, `requires_confirmation`, or `requires_action`),\n- its `amount` matches the new request,\n- its `currency` matches the new request, and\n- its `client_secret` is non-null.\n\nWhen all four hold the existing intent's `client_secret` is returned with `reused: true` — no duplicate intent is created.\n\nOther outcomes:\n\n- **Already `processing` or `succeeded`:** throws `PaymentIntentNotReusableException` (the invoice is likely already paid; the consumer should refetch the invoice rather than create a new charge).\n- **Amount or currency drift** (e.g. an admin edited the invoice between attempts): the stale intent is logged at `warn` and discarded; the call proceeds to create a fresh intent. The old intent stays open at Stripe until either the consumer's cleanup CRON (calling `cancelPaymentIntent`) or Stripe's 24h auto-expiry clears it.\n- **Stored `providerPaymentId` no longer resolves at Stripe** (manual deletion, archived intent): logged at `warn` and discarded — the consumer is NOT surfaced a `PaymentGatewayException`; a fresh intent is created.\n- **Dead states** (`canceled`, `requires_capture`) or any future Stripe status the package doesn't recognize: fall through to fresh-create.\n\nThe repository method is **optional**; consumers who skip implementing it lose the reuse path entirely and rely on Stripe-level idempotency alone. For best behavior at scale, implement the method and index `(invoiceId, provider, status)`.\n\n**Idempotency / `attemptId`.** Pass a request-scoped UUID (`crypto.randomUUID()`) as `attemptId` for the most robust idempotency. The gateway builds `idempotencyKey = pi-create-{invoiceId}-{attemptId}`. Omitting `attemptId` falls back to invoice-only idempotency (`pi-create-{invoiceId}`), which protects against in-session double-clicks but introduces a 24-hour-window trap: if the invoice's amount/currency changes between attempts on the same day, the second call's `paymentIntents.create` collides with Stripe's cached idempotency key for a request with different params and throws `StripeIdempotencyError` (the gateway wraps it as `PaymentGatewayException` with a \"pass a fresh attemptId per attempt\" hint). The reuse-via-pending-row layer detects the drift earlier and falls through to fresh-create, but the fresh-create itself only succeeds when `attemptId` is supplied (otherwise it hits the same cached key). **Recommendation: always pass `attemptId`.**\n\n**Vendor-neutral status.** The result's `status` field is the `PaymentIntentStatus` GraphQL enum: `REQUIRES_PAYMENT_METHOD | REQUIRES_CONFIRMATION | REQUIRES_ACTION | PROCESSING | SUCCEEDED`. The raw Stripe string is exposed via the nullable `providerStatus` field for debug logging and provider-specific UX branching.\n\n**Reserved `gatewayOptions` keys for `createPaymentIntent`** (distinct from the Checkout-session list above):\n\n- `metadata.invoiceId` — package-owned (webhook keys off it)\n- `amount`, `currency` — first-class params; passing here is a dual source of truth\n- `automatic_payment_methods` — package-owned (set to `{ enabled: true }`)\n- `confirm` — `true` would server-side-confirm and defeat inline\n- `payment_method` — would pre-attach a method and skip Stripe Elements\n- `return_url` — irrelevant inline (no redirect)\n- `customer`, `off_session` — reserved for future save-card-for-future-use surface\n\nExported as `STRIPE_PAYMENT_INTENT_RESERVED_GATEWAY_KEYS: readonly string[]`. For typed autocomplete on the passthrough bag, import `StripePaymentIntentGatewayOptions` from the package root.\n\n**Cancellation.** `cancelPaymentIntent(providerPaymentId)` targets `pi_*` IDs only — contract-bound to inline. Use it for stale-booking cleanup (e.g., from a `@Cron`-scheduled job on the consumer side). Returns `{ success, alreadyTerminal }`; the `alreadyTerminal` flag distinguishes \"we cancelled it\" from \"Stripe had already cancelled / completed it\". Mid-3DS intents throw `PaymentIntentNotCancellableException` — retry after the challenge resolves. Distinct from `cancelPayment(...)`, which is the refund-adjacent variant used by `voidInvoice` cleanup.\n\n**Sample consumer wrapper resolver:**\n\n```typescript\n// CONSUMER-SIDE, illustrative. The package does not ship resolvers.\nimport { Resolver, Mutation, Query, Args } from '@nestjs/graphql';\nimport { Throttle } from '@nestjs/throttler';\nimport { ForbiddenException, BadRequestException } from '@nestjs/common';\nimport { randomUUID } from 'node:crypto';\nimport {\n  GatewayRegistryService,\n  InvoiceService,\n  PaymentService,\n  InlinePaymentIntentModel,\n  StripePublicConfigModel,\n  PaymentIntentNotReusableException,\n  PaymentIntentStatusEnum,\n  StripeGateway,\n} from '@ambushsoftworks/nestjs-payments-graphql';\n\n@Resolver()\nexport class ClientInvoicesResolver {\n  constructor(\n    private readonly registry: GatewayRegistryService,\n    private readonly invoiceService: InvoiceService,\n    private readonly paymentService: PaymentService,\n  ) {}\n\n  // Trivial 5-liner — return null when inline is not configured so the\n  // FE can fall back to Checkout-redirect cleanly.\n  @Query(() => StripePublicConfigModel, { nullable: true })\n  async stripePublicConfig(): Promise<StripePublicConfigModel | null> {\n    const gateway = this.registry.get('stripe') as StripeGateway;\n    if (!gateway.publishableKey) return null;\n    return { publishableKey: gateway.publishableKey };\n  }\n\n  @Mutation(() => InlinePaymentIntentModel)\n  @Throttle({ default: { limit: 5, ttl: 60_000 } })\n  async createInlinePaymentIntent(\n    @Args('invoiceId') invoiceId: string,\n    // Consumer's own @CurrentUser() context, ownership check, etc.\n  ): Promise<InlinePaymentIntentModel> {\n    const invoice = await this.invoiceService.findInvoiceById(invoiceId);\n    // ... consumer-side ownership + payable-status guards ...\n    const sent = await this.invoiceService.ensureSent(invoiceId, false, false);\n\n    const stripe = this.registry.getInlineCapable('stripe');\n    try {\n      const intent = await stripe.createPaymentIntent({\n        invoiceId,\n        amount: sent.amountDue,\n        currency: sent.currency,\n        attemptId: randomUUID(),\n        description: `Invoice ${sent.invoiceNumber}`,\n      });\n\n      await this.paymentService.createPendingPayment({\n        invoiceId,\n        amount: sent.amountDue,\n        currency: sent.currency,\n        method: 'CREDIT_CARD',\n        provider: 'stripe',\n        providerPaymentId: intent.providerPaymentId,\n        createdBy: 'user-id-here',\n      });\n\n      return {\n        provider: 'stripe',\n        // Safe non-null: createPaymentIntent already called\n        // requirePublishableKey() and threw if it was null.\n        publishableKey: stripe.publishableKey!,\n        providerPaymentId: intent.providerPaymentId,\n        clientSecret: intent.clientSecret,\n        // String union → enum cast — both share the same string values\n        // (REQUIRES_PAYMENT_METHOD, etc.) so the cast is structurally safe.\n        status: intent.status as PaymentIntentStatusEnum,\n        reused: intent.reused,\n        providerStatus: intent.providerStatus,\n      };\n    } catch (err) {\n      if (err instanceof PaymentIntentNotReusableException) {\n        throw new BadRequestException(\n          'This invoice is already being processed. Please refresh the page.',\n        );\n      }\n      throw err;\n    }\n  }\n}\n```\n\n#### Statement descriptors\n\n*Sanitisation added in v0.8.0; off-session support added in v0.8.0.*\n\nWhat prints on the customer's card statement. Stripe builds it from the account's shortened descriptor plus a per-charge suffix — `AMSFT* NEWCOMERS`. If you bill several brands from one Stripe account, the suffix is the only thing that tells a customer which one charged them, and an unrecognised statement line is how a legitimate charge becomes a dispute.\n\nEvery path that reaches Stripe can carry one, via that path's `gatewayOptions`:\n\n| Path | Where the suffix goes |\n|---|---|\n| Hosted Checkout — `createPaymentSession` | `gatewayOptions.paymentIntentData.statement_descriptor_suffix` |\n| Inline Elements — `createPaymentIntent` | `gatewayOptions.statement_descriptor_suffix` |\n| Saved card / renewal — `createOffSessionPayment` | `gatewayOptions.statement_descriptor_suffix` (v0.8.0) |\n\n**Renewals are charged by the package, not by you**, so there is no call for you to pass options to. Supply a `recurringChargeOptionsResolverInstance` instead — see [Per-charge gateway options for renewals](#per-charge-gateway-options-for-renewals).\n\n**Set it on every path or on none.** A customer whose first payment goes through Checkout and whose renewals go off-session will otherwise learn one name and then see another — the worst possible order, and the reason this was worth a release.\n\n**The package sanitises the value rather than letting it fail the charge.** Stripe rejects a descriptor containing `< > \\ ' \" *` outright, and rejects one with no Latin letter. Before sending, the gateway:\n\n- strips `< > \\ ' \" *`, collapses runs of whitespace, and trims;\n- **omits the field entirely** if nothing with a Latin letter survives, and logs a warning — the charge proceeds on the account's own descriptor;\n- logs a warning when it changed anything, quoting both values.\n\nIt does **not** truncate. Stripe cuts the combined descriptor to 22 characters itself, and duplicating a provider limit here would mean tracking a number we do not own.\n\nThis is the one place the package silently repairs a consumer's input rather than throwing, and the asymmetry with reserved keys is deliberate. A reserved key is *code*: it is wrong on every call and surfaces on the first test run. A descriptor is *data* out of a consumer's database — `O'Brien Contracting` is a perfectly reasonable company name — so it varies per row, and a hard failure would land at 02:00 as a failed renewal, a strike toward the three-strike auto-pause, and a failed-payment email to the customer, all over a cosmetic field. The package already holds that line: `PaymentEmailService` never throws, so a receipt that cannot be sent does not roll back the payment it describes.\n\nSanitising applies wherever a descriptor can reach Stripe, including the Checkout path's catch-all spreads (`gatewayOptions.session` and unrecognised top-level keys) — so the outcome does not depend on which of them you happened to use.\n\n> **The full `statement_descriptor` is not supported.** Stripe's own documentation says a card charge may set only the suffix, and yet the API currently accepts the full descriptor and prints it with no prefix. The package neither reserves it nor relies on it: it is passed through and sanitised on the same rules, so it cannot fail a charge, and it may stop working whenever Stripe enforces its documentation. Build on the suffix.\n\nSet the account descriptor itself in the Stripe Dashboard (**Settings → Business → Public details**); the package never touches it.\n#### Verifying your Stripe configuration\n\nThe subscription list above, the keys, and the account's ability to charge all live in the Stripe Dashboard — outside your repository, where no diff, type error, code review or CI job can see them. `verifyStripeConfiguration` checks them against what this version of the package actually needs and reports what's wrong.\n\n```typescript\nimport { verifyStripeConfiguration } from '@ambushsoftworks/nestjs-payments-graphql';\n\nconst findings = await verifyStripeConfiguration({\n  secretKey: process.env.STRIPE_SECRET_KEY!,\n  publishableKey: process.env.STRIPE_PUBLISHABLE_KEY, // omit for Checkout-only\n  webhookUrl: `${process.env.API_URL}/webhooks/stripe`,\n});\n\nfor (const f of findings) {\n  console.log(`[${f.severity}] ${f.code}: ${f.message}`);\n  if (f.remediation) console.log(`         → ${f.remediation}`);\n}\n\nif (findings.some((f) => f.severity === 'error')) process.exit(1);\n```\n\n**It returns findings and never throws**, including for bad keys, permission errors and network failures. That leaves the policy to you — fail a CI job, fail a boot, print a setup report, expose a health check. Throwing would impose one of those on everyone.\n\nWhat it checks:\n\n| Check | Severity when wrong |\n|---|---|\n| Secret key authenticates; reports account id and display name | `error` if it doesn't |\n| Account has `charges_enabled` | `error` — test payments still succeed, so a dead account looks healthy |\n| Publishable key is a `pk_` key | `error` — a secret key here gets served to browsers |\n| Publishable and secret keys are the same mode (test/live) | `error` — presents to customers as a card decline |\n| Publishable and secret keys are the same account | `error` — same misdiagnosis |\n| Webhook endpoint exists for `webhookUrl` and is enabled | `warning` / `error` |\n| Endpoint is subscribed to everything in `STRIPE_WEBHOOK_EVENTS.always` | `error` |\n| Endpoint is subscribed to `payment_intent.succeeded` | `error` when `publishableKey` is set, `info` otherwise |\n| Endpoint's `api_version` matches the version the package pins | `warning` |\n\nTwo behaviours worth knowing:\n\n- **Supplying `publishableKey` is a declaration of intent.** It means \"we use inline PaymentIntent flows\", which is what makes `payment_intent.succeeded` mandatory rather than optional. Omit it and a missing subscription for that event is reported at `info`, because a Checkout-only deployment genuinely never receives it.\n- **A check that couldn't run is reported, never passed.** A restricted key without webhook read permission yields `webhook_endpoints_unreadable`, not an empty result; an endpoint returned without its event list yields `webhook_events_unreadable` rather than \"subscribed to nothing\". Keys that don't embed an account id yield `publishable_key_account_undetermined` rather than a guess — a false mismatch would fail a correct deployment's CI. Similarly, `webhook_endpoint_not_found` is a `warning` rather than an `error`, because Stripe's v2 event destinations and CLI listeners aren't returned by the endpoints API and will look missing.\n\n  The same-account check calibrates rather than assuming a key layout: the secret key has just authenticated *as* the account, so if it embeds that account's id the property holds for your keys and the publishable key not embedding it is real evidence. If it doesn't, no conclusion is drawn.\n\nMatch on `code` (typed as `StripeConfigFindingCode`), not on `message` — messages are written for humans and may be reworded; codes are public API.\n\nFor tests, or to use a client configured your own way, pass `client`:\n\n```typescript\nawait verifyStripeConfiguration({\n  secretKey: 'sk_test_…',\n  client: myStubOrConfiguredStripeInstance,\n});\n```\n\n##### Checking at boot\n\nSet `stripe.verifyOnBoot` to run the same check at application bootstrap and log each finding at its severity:\n\n```typescript\nstripe: {\n  secretKey: cfg.get('STRIPE_SECRET_KEY'),\n  webhookSecret: cfg.get('STRIPE_WEBHOOK_SECRET'),\n  publishableKey: cfg.get('STRIPE_PUBLISHABLE_KEY'),\n  webhookUrl: `${cfg.get('API_URL')}/webhooks/stripe`,   // needed to check the subscription\n  verifyOnBoot: cfg.get('NODE_ENV') !== 'test',\n}\n```\n\nDefaults to `false`, so nobody pays a network call at boot without asking for it. `webhookUrl` is used *only* by this check — the controller still mounts at the fixed path `POST /webhooks/stripe`. Without it, boot verification checks the keys and the account but not the subscription, which is the setting most likely to be wrong.\n\n**It never throws and never blocks startup.** Findings are logged; a check that fails or times out is logged as `UNVERIFIED` — explicitly not as a pass — and abandoned after 10 seconds so an unreachable Stripe API cannot stall a deploy. If you want a hard gate, call `verifyStripeConfiguration` in a preflight or CI job instead, where failing costs nothing. Refusing to boot a running service because Stripe was briefly unreachable trades a configuration problem for an outage.\n\nSetting `publishableKey` raises the stakes: it declares the deployment uses inline PaymentIntent flows, so an endpoint not subscribed to `payment_intent.succeeded` logs at **error** naming the consequence, rather than as information.\n\n```\nERROR [StripeConfigVerifier] [webhook_inline_events_missing] A publishable key is\nconfigured, so this deployment uses inline PaymentIntent flows — but the endpoint is\nnot subscribed to payment_intent.succeeded. Inline payments will succeed at Stripe and\nthe invoice will never close, leaving a live \"Pay now\" button on an invoice the\ncustomer already paid. → Add payment_intent.succeeded to the endpoint's events in the\nStripe Dashboard.\nERROR [StripeConfigVerifier] Stripe configuration has 1 error(s) and 0 warning(s).\nPayments will not work correctly until these are resolved.\n```\n\n#### Scheduled jobs\n\n`PaymentJobsService` runs the package's recurring billing work, one method per job. It depends on no scheduling library: call each method from whatever schedules work in your application.\n\n| Method | Suggested schedule | What it does |\n|---|---|---|\n| `runOverdue(now)` | Daily | Marks `SENT` / `PARTIALLY_PAID` invoices past their due date `OVERDUE`, sends each one overdue reminder, and marks its payment-plan installment. Returns `{ marked, failures }`. |\n| `runReconciliation(now, { staleAfterMs? })` | Every 15 minutes | Checks payments still `PENDING` / `PROCESSING` after `staleAfterMs` (default 15 minutes) with the provider. See [Reconciliation](#reconciliation-webhook-backstop). Returns `{ checked, updated, failures }`. |\n| `runWebhookCleanup(now, { retainDays? })` | Daily | Deletes processed-webhook records older than `retainDays` (default 30). Keep them longer than Stripe's ~3-day retry window. Returns `{ deleted }`. |\n| `RecurringInvoiceService.processDueRecurringInvoices(now)` | Daily | Generates due recurring invoices. |\n\n```typescript\n@Injectable()\nexport class BillingSchedule {\n  constructor(private readonly jobs: PaymentJobsService) {}\n\n  @Cron('0 2 * * *')\n  overdue() {\n    return this.jobs.runOverdue(new Date());\n  }\n\n  @Cron(CronExpression.EVERY_15_MINUTES)\n  reconcile() {\n    return this.jobs.runReconciliation(new Date());\n  }\n\n  @Cron('0 3 * * *')\n  cleanUpWebhookRecords() {\n    return this.jobs.runWebhookCleanup(new Date());\n  }\n}\n```\n\n**Safe on several instances at once, without a lock.** A rolling deploy runs two instances briefly whether or not you run one replica. Every write these jobs make is decided under a row lock, and a reminder, email or event goes out only from the call that made the change, so an overlapping run changes nothing and announces nothing. A lock around a job can still save duplicate work, such as a second round of provider calls, but it is not what makes the jobs correct.\n\n**One bad row does not stop the batch.** An invoice or payment that fails is logged and returned in `failures`, and the rest of the batch still runs. Failing to load the batch at all throws, so your scheduler sees it. Forward `failures` to your error reporter from the wrapper.\n\n#### Reconciliation (webhook backstop)\n\nWebhooks are best-effort. An endpoint can be down, misconfigured, unsubscribed from a required event, or exhaust Stripe's ~3 days of retries — and in every one of those cases money moves at Stripe while the local invoice stays open. Reconciliation closes that gap after the fact, independent of the cause.\n\n**It can only recover payments that have a row.** The sweep visits `PENDING` and `PROCESSING` payments; a payment your application never recorded is invisible to it. For Checkout that means step 3 of [The Checkout flow](#the-checkout-flow) is what makes this backstop cover you at all.\n\n`PaymentJobsService.runReconciliation` is the whole job, and the schedule is yours (the package deliberately ships no schedulers). To drive it yourself instead, `PaymentService.findStalePayments` and `PaymentService.reconcilePayment` are public.\n\n`reconcilePayment` fetches the payment's current status from the gateway and, when the provider says `succeeded` and the local row is still `PENDING`, `PROCESSING` or `FAILED`, applies the amount to the invoice inside a transaction, fires `onInvoicePaid` if that closes the invoice, and sends the confirmation email — the same effects the webhook would have had.\n\nIt is safe to run alongside the webhooks and alongside itself, including a second instance during a rolling deploy. The provider is asked with no transaction open, and its answer is acted on only if the payment is still in the status it had when the provider was asked, re-checked under a row lock. Whichever writer settles a payment applies and announces it; every other writer changes nothing. A lease around your job can save duplicate provider calls, but it is not what makes this safe — the race that matters is with the webhook, not with another run. `SUCCEEDED`, `REFUNDED`, `PARTIALLY_REFUNDED` and `CANCELLED` payments are left alone, so running it against settled payments is a no-op.\n\nUses `IPaymentRepository.findStaleByStatuses`, already part of the repository interface. The reference schema indexes `Payment` on `(invoiceId, status)`; if your sweep interval is short or the table is large, consider adding `(status, createdAt)` to match the query shape.\n\n> Strongly recommended for any production deployment. Had this been running, the class of incident that motivated the v0.3.1 fixes — an endpoint not subscribed to `payment_intent.succeeded`, so inline payments succeeded at Stripe and invoices never closed — would have self-healed within one sweep interval instead of being found by hand.\n\n### Refunds\n\nFull and partial refunds through Stripe (when the originating payment went through Stripe) or manual refund records. All amounts in cents.\n\n**Refund records are keyed by `providerRefundId`.** For a Stripe refund, that is the `re_…` id, and it is what lets the package recognise the confirming webhook as describing a refund it already recorded rather than a new one. A `refund.succeeded` event arriving without an id is refused — logged at `error` and skipped — because such an event cannot be deduplicated, and creating a row from it would double the refund. Prefer a missing record, which surfaces at reconciliation, over a duplicate, which silently misstates what a client paid. Manual refunds (against payments with no provider) legitimately have no id and are unaffected.\n\n**One provider refund, one row — and it needs a database constraint.** Add\n`@@unique([paymentId, providerRefundId])` to your `Refund` model (see\n`prisma/payment-models.prisma`). Several writers converge on the same refund\nrow: the `createRefund` call that requested it, and the `refund.created` /\n`refund.updated` webhooks Stripe emits while that call is still in flight. The\npackage converges them onto one row and treats a unique violation as \"already\nrecorded\", but that recovery only works if the constraint exists — without it a\ntight race can still write duplicates. NULL never collides in a Postgres unique\nindex, so manual refunds, which have no provider id, are unaffected. Required as\nof v0.4.0; see the CHANGELOG for the de-duplication query if you ran rc.1–rc.3.\n\n**The provider is never called inside a transact","readmeFilename":"README.md"}