{"_id":"@certless/reseller-sdk","_rev":"7-f9a51b8c0d5a17ea77d2a290f5d80411","name":"@certless/reseller-sdk","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@certless/reseller-sdk","version":"0.1.0","keywords":["certless","sdk","reseller","api-client","typescript","zod"],"author":{"name":"Ensombl Team","email":"team@ensombl.io"},"license":"SEE LICENSE IN LICENSE","_id":"@certless/reseller-sdk@0.1.0","maintainers":[{"name":"sosweetham","email":"sosweetham@gmail.com"}],"homepage":"https://github.com/ensombl/certless#readme","bugs":{"url":"https://github.com/ensombl/certless/issues"},"dist":{"shasum":"7076bed337a3eb86fb91d48968897435633c8fac","tarball":"https://registry.npmjs.org/@certless/reseller-sdk/-/reseller-sdk-0.1.0.tgz","fileCount":11,"integrity":"sha512-cmRNHs3dUmJYLP/V14dX374RQz94NNZuClSwO3VQoLpt1mVAFLmMnBDc4xh6Wt36HJA5Xho7VyU6hrxv6M33Tg==","signatures":[{"sig":"MEUCIQDL7fU+9mZHk3IPrpYwNXMwDemjtxDLQTC8Ug6PT2kytQIgT7HEXbwwqb3/2/V86EvjB2Jn26+xl/js6PX+vV1fYT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226588},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"<rootDir>/../tsconfig.json"}]},"testEnvironment":"node","moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["/node_modules/","/dist/"]},"main":"./dist/index.cjs","type":"module","_from":"file:certless-reseller-sdk-0.1.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsdown --watch","lint":"eslint --cache src --max-warnings 0","test":"jest","build":"tsdown","check":"tsc --noEmit","format":"prettier --write \"src/**/*.ts\"","format:check":"prettier --check \"src/**/*.ts\""},"_npmUser":{"name":"sosweetham","email":"sosweetham@gmail.com"},"_resolved":"/private/var/folders/zs/qb4cgb1d4bjcqg_p3hc61rcm0000gn/T/558f6c98c73648b499e128284cc98ccf/certless-reseller-sdk-0.1.0.tgz","_integrity":"sha512-cmRNHs3dUmJYLP/V14dX374RQz94NNZuClSwO3VQoLpt1mVAFLmMnBDc4xh6Wt36HJA5Xho7VyU6hrxv6M33Tg==","repository":{"url":"git+https://github.com/ensombl/certless.git","type":"git","directory":"packages/reseller-sdk"},"_npmVersion":"11.6.2","description":"Typed client for the Certless reseller + customer REST APIs. Distributed under a proprietary licence — see LICENSE.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","tsdown":"^0.21.10","ts-jest":"^29.2.5","prettier":"^3.6.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/jest":"^30.0.0","@types/node":"^22.10.0","@certless/types":"0.0.1-dev","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/reseller-sdk_0.1.0_1778003323652_0.06714194807678653","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@certless/reseller-sdk","version":"0.1.1","keywords":["certless","sdk","reseller","api-client","typescript","zod"],"author":{"name":"Ensombl Team","email":"team@ensombl.io"},"license":"SEE LICENSE IN LICENSE","_id":"@certless/reseller-sdk@0.1.1","maintainers":[{"name":"sosweetham","email":"sosweetham@gmail.com"}],"homepage":"https://github.com/ensombl/certless#readme","bugs":{"url":"https://github.com/ensombl/certless/issues"},"dist":{"shasum":"a7dc0bfb82c59cee98c1f8c5c9a20c913864be22","tarball":"https://registry.npmjs.org/@certless/reseller-sdk/-/reseller-sdk-0.1.1.tgz","fileCount":11,"integrity":"sha512-fhJPyDWeD1Wg+WZoCFKjbmXUbAOf47zaPT7yNw1Hpcp0gQzHlOJvFXImew2bFXosUqgDaMhMJC+dHUlUjxa5SQ==","signatures":[{"sig":"MEYCIQDBLRWl/+BNyq01/6/t6Ovl2uJ75drqXiI+NfRCXICfWgIhAKUIPvnx/WaMeMbzDWeC6qBlhw4QBHPqWWKm13HYdZ7u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226556},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"<rootDir>/../tsconfig.json"}]},"testEnvironment":"node","moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["/node_modules/","/dist/"]},"main":"./dist/index.cjs","type":"module","_from":"file:certless-reseller-sdk-0.1.1.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsdown --watch","lint":"eslint --cache src --max-warnings 0","test":"jest","build":"tsdown","check":"tsc --noEmit","format":"prettier --write \"src/**/*.ts\"","format:check":"prettier --check \"src/**/*.ts\""},"_npmUser":{"name":"sosweetham","email":"sosweetham@gmail.com"},"_resolved":"/private/var/folders/zs/qb4cgb1d4bjcqg_p3hc61rcm0000gn/T/45c644d90c6b2a72fe6187dc958fcf73/certless-reseller-sdk-0.1.1.tgz","_integrity":"sha512-fhJPyDWeD1Wg+WZoCFKjbmXUbAOf47zaPT7yNw1Hpcp0gQzHlOJvFXImew2bFXosUqgDaMhMJC+dHUlUjxa5SQ==","repository":{"url":"git+https://github.com/ensombl/certless.git","type":"git","directory":"packages/reseller-sdk"},"_npmVersion":"11.6.2","description":"Typed client for the Certless reseller + customer REST APIs. Distributed under a proprietary licence — see LICENSE.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","tsdown":"^0.21.10","ts-jest":"^29.2.5","prettier":"^3.6.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/jest":"^30.0.0","@types/node":"^22.10.0","@certless/types":"0.0.1-dev","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/reseller-sdk_0.1.1_1778004804072_0.8138361506073244","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@certless/reseller-sdk","version":"0.2.0","keywords":["certless","sdk","reseller","api-client","typescript","zod"],"author":{"name":"Ensombl Team","email":"team@ensombl.io"},"license":"SEE LICENSE IN LICENSE","_id":"@certless/reseller-sdk@0.2.0","maintainers":[{"name":"sosweetham","email":"sosweetham@gmail.com"}],"homepage":"https://github.com/ensombl/certless#readme","bugs":{"url":"https://github.com/ensombl/certless/issues"},"dist":{"shasum":"66c9f06af9fd716f6373e2abc9f8c42add7f7ecd","tarball":"https://registry.npmjs.org/@certless/reseller-sdk/-/reseller-sdk-0.2.0.tgz","fileCount":11,"integrity":"sha512-uVUpQrXthN7SE/YLwZxGdUlRF84tiPTYfxZNhHskKQ2OTX/FTZcLH+mQEEocZ5D4AY+FznI37MCps0e/aUuhdw==","signatures":[{"sig":"MEUCIC689WVjM3iB3K+An578lKiMhVTTL3nUk6nYHVq3O9ipAiEAtpCIgJjJSmgmViN1fw0EyFAtf4SUBqu4rYy9kro8O2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235802},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"<rootDir>/../tsconfig.json"}]},"testEnvironment":"node","moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["/node_modules/","/dist/"]},"main":"./dist/index.cjs","type":"module","_from":"file:certless-reseller-sdk-0.2.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsdown --watch","lint":"eslint --cache src --max-warnings 0","test":"jest","build":"tsdown","check":"tsc --noEmit","format":"prettier --write \"src/**/*.ts\"","format:check":"prettier --check \"src/**/*.ts\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6bb404b7-e124-490d-bf2c-75bd737945f6"}},"_resolved":"/tmp/17fef18adfc58059d397eb72d714bf40/certless-reseller-sdk-0.2.0.tgz","_integrity":"sha512-uVUpQrXthN7SE/YLwZxGdUlRF84tiPTYfxZNhHskKQ2OTX/FTZcLH+mQEEocZ5D4AY+FznI37MCps0e/aUuhdw==","repository":{"url":"git+https://github.com/ensombl/certless.git","type":"git","directory":"packages/reseller-sdk"},"_npmVersion":"11.11.0","description":"Typed client for the Certless reseller + customer REST APIs. Distributed under a proprietary licence — see LICENSE.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","tsdown":"^0.21.10","ts-jest":"^29.2.5","prettier":"^3.6.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/jest":"^30.0.0","@types/node":"^22.10.0","@certless/types":"0.0.1-dev","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/reseller-sdk_0.2.0_1778047006005_0.049176495217594596","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@certless/reseller-sdk","version":"0.3.0","keywords":["certless","sdk","reseller","api-client","typescript","zod"],"author":{"name":"Ensombl Team","email":"team@ensombl.io"},"license":"SEE LICENSE IN LICENSE","_id":"@certless/reseller-sdk@0.3.0","maintainers":[{"name":"sosweetham","email":"sosweetham@gmail.com"}],"homepage":"https://github.com/ensombl/certless#readme","bugs":{"url":"https://github.com/ensombl/certless/issues"},"dist":{"shasum":"7bc6e2d75ca3dd95865e49f704b328362be61ebc","tarball":"https://registry.npmjs.org/@certless/reseller-sdk/-/reseller-sdk-0.3.0.tgz","fileCount":11,"integrity":"sha512-LhUy5sKZAPMsnJo8QFG5FbPgTxtbYtsPn7jZts77znx1G4UpkMEkM7sj2W75RFKTaTHfqARmZK/1peET+YYfGg==","signatures":[{"sig":"MEUCIA6StYmYOQNxpoj9e+mZrNcBqn3mcX7hEXsxNxhnpnmPAiEAmFgUE6o1LmiSvXtzJgYHoXl6tYBbzXkERVVcqZs0C30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253966},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"<rootDir>/../tsconfig.json"}]},"testEnvironment":"node","coverageDirectory":"../coverage","coverageReporters":["json-summary","lcov"],"collectCoverageFrom":["**/*.ts"],"moduleFileExtensions":["js","json","ts"],"transformIgnorePatterns":["/node_modules/","/dist/"]},"main":"./dist/index.cjs","type":"module","_from":"file:certless-reseller-sdk-0.3.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"dev":"tsdown --watch","lint":"eslint --cache src --max-warnings 0","test":"jest","build":"tsdown","check":"tsc --noEmit","format":"prettier --write \"src/**/*.ts\"","test:cov":"jest --coverage","format:check":"prettier --check \"src/**/*.ts\""},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6bb404b7-e124-490d-bf2c-75bd737945f6"}},"_resolved":"/tmp/a95bd8de95c4c8404cf57b65f061f9ee/certless-reseller-sdk-0.3.0.tgz","_integrity":"sha512-LhUy5sKZAPMsnJo8QFG5FbPgTxtbYtsPn7jZts77znx1G4UpkMEkM7sj2W75RFKTaTHfqARmZK/1peET+YYfGg==","repository":{"url":"git+https://github.com/ensombl/certless.git","type":"git","directory":"packages/reseller-sdk"},"_npmVersion":"11.13.0","description":"Typed client for the Certless reseller + customer REST APIs. Distributed under a proprietary licence — see LICENSE.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"^4.1.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","tsdown":"^0.21.10","ts-jest":"^29.2.5","prettier":"^3.6.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@types/jest":"^30.0.0","@types/node":"^22.10.0","@certless/types":"0.0.1-dev","typescript-eslint":"^8.20.0"},"_npmOperationalInternal":{"tmp":"tmp/reseller-sdk_0.3.0_1782379591806_0.0796596484100498","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@certless/reseller-sdk","version":"0.4.0","description":"Typed client for the Certless reseller + customer REST APIs. Distributed under a proprietary licence — see LICENSE.","license":"SEE LICENSE IN LICENSE","author":{"name":"Ensombl Team","email":"team@ensombl.io"},"homepage":"https://github.com/ensombl/certless#readme","repository":{"type":"git","url":"git+https://github.com/ensombl/certless.git","directory":"packages/reseller-sdk"},"bugs":{"url":"https://github.com/ensombl/certless/issues"},"keywords":["certless","sdk","reseller","api-client","typescript","zod"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"publishConfig":{"access":"public"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"<rootDir>/../tsconfig.json"}]},"transformIgnorePatterns":["/node_modules/","/dist/"],"collectCoverageFrom":["**/*.ts"],"coverageReporters":["json-summary","lcov"],"coverageDirectory":"../coverage","testEnvironment":"node"},"dependencies":{"zod":"^4.1.13"},"devDependencies":{"@eslint/js":"^9.18.0","@types/jest":"^30.0.0","@types/node":"^22.10.0","eslint":"^9.18.0","jest":"^30.0.0","prettier":"^3.6.2","ts-jest":"^29.2.5","tsdown":"^0.21.10","typescript":"^5.7.3","typescript-eslint":"^8.20.0","@certless/types":"0.0.1-dev"},"scripts":{"build":"tsdown","dev":"tsdown --watch","lint":"eslint --cache src --max-warnings 0","format":"prettier --write \"src/**/*.ts\"","format:check":"prettier --check \"src/**/*.ts\"","check":"tsc --noEmit","test":"jest","test:cov":"jest --coverage"},"_id":"@certless/reseller-sdk@0.4.0","_integrity":"sha512-vbQZxP7wMIuqlVNtzz5VSi++kUuQmSd4PujzhUZ1MsQeZRz182O7oCZE5fXm2x8XWA1NZNs1rkorrivstZkT4g==","_resolved":"/tmp/2cb1bca4e9c05be95ade70688ac6d8a5/certless-reseller-sdk-0.4.0.tgz","_from":"file:certless-reseller-sdk-0.4.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-vbQZxP7wMIuqlVNtzz5VSi++kUuQmSd4PujzhUZ1MsQeZRz182O7oCZE5fXm2x8XWA1NZNs1rkorrivstZkT4g==","shasum":"86b2be011a19d6d0acb789817d18fb7e12fc3488","tarball":"https://registry.npmjs.org/@certless/reseller-sdk/-/reseller-sdk-0.4.0.tgz","fileCount":11,"unpackedSize":256337,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBo9gtQEPehNzQ/4Gp5aFVwK2UD4vL4JDCk9QVvLSPuvAiBFjGawApu4c+i33EJqdUa/3eZK1pypKyp1cSNaCMQeiQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6bb404b7-e124-490d-bf2c-75bd737945f6"}},"directories":{},"maintainers":[{"name":"merulsombl","email":"merul@ensombl.io"},{"name":"pathin","email":"mail@pathin.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/reseller-sdk_0.4.0_1784827448151_0.727694834332667"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-05T17:48:43.566Z","modified":"2026-07-23T17:24:08.481Z","0.1.0":"2026-05-05T17:48:43.864Z","0.1.1":"2026-05-05T18:13:24.263Z","0.2.0":"2026-05-06T05:56:46.163Z","0.3.0":"2026-06-25T09:26:31.955Z","0.4.0":"2026-07-23T17:24:08.301Z"},"bugs":{"url":"https://github.com/ensombl/certless/issues"},"author":{"name":"Ensombl Team","email":"team@ensombl.io"},"license":"SEE LICENSE IN LICENSE","homepage":"https://github.com/ensombl/certless#readme","keywords":["certless","sdk","reseller","api-client","typescript","zod"],"repository":{"type":"git","url":"git+https://github.com/ensombl/certless.git","directory":"packages/reseller-sdk"},"description":"Typed client for the Certless reseller + customer REST APIs. Distributed under a proprietary licence — see LICENSE.","maintainers":[{"name":"merulsombl","email":"merul@ensombl.io"},{"name":"pathin","email":"mail@pathin.me"}],"readme":"# @certless/reseller-sdk\n\nTyped Node client for the Certless reseller + customer-scoped REST APIs.\n\n```ts\nimport { CertlessClient } from '@certless/reseller-sdk';\n\nconst client = new CertlessClient({\n  apiUrl: 'https://api.certless.io',\n  apiKey: process.env.CERTLESS_RESELLER_API_KEY!,\n});\n\n// Reseller endpoints (X-API-KEY)\nconst customer = await client.reseller.createCustomer({\n  orgName: 'Acme Trucking',\n  orgType: 'carrier',\n  plan: 'standard',\n});\n\n// Customer-scoped endpoints (X-API-KEY + X-CUSTOMER-ID)\nconst engagement = await client.customer.createEngagement(customer.customer.id, {\n  name: 'Q1 onboarding',\n  asset_ids: [],\n  metadata: [{ label: 'reference', value: 'ACME-2026-001' }],\n});\n```\n\n## Why an SDK\n\nResellers were hand-writing fetch wrappers and maintaining their own\ncopies of the request/response shapes. Schema drift between Certless\nand the reseller manifested as 400s in the wild.\n\nThis package ships the request/response types alongside the client, so\nany breaking schema change forces a SDK version bump that the reseller\npicks up at install time — not in production.\n\n## Errors\n\nAll non-2xx responses throw `CertlessApiError` (or the specialised\n`CertlessPlanLimitError` subclass for quota exhaustion). The error\nexposes:\n\n- `status` — HTTP status code\n- `code` — structured `code` from the response body when present\n  (e.g. `plan_limit_reached`)\n- `message` — top-level message\n- `validationIssues` — when the upstream returns a 400 with an\n  `errors` array (typical for `nestjs-zod` validation failures), the\n  parsed field-level issues are surfaced here. Each issue has\n  `{ path, message, code? }`. Useful for painting per-field errors\n  back onto a form instead of showing a generic toast.\n\n```ts\nimport { CertlessApiError } from '@certless/reseller-sdk';\n\ntry {\n  await client.customer.createEngagement(customerId, input);\n} catch (e) {\n  if (e instanceof CertlessApiError && e.validationIssues) {\n    for (const issue of e.validationIssues) {\n      console.log(issue.path.join('.'), issue.message);\n    }\n  }\n}\n```\n\n## What's covered\n\n- Reseller namespace: customer CRUD, subscription lifecycle, org links,\n  usage stats.\n- Customer namespace: engagements, principals, engagement-principals\n  (assignments), assets (upload/confirm/download), KYC review, override\n  reveal.\n\nEndpoints not currently called by any reseller (admin-only, internal\nwebhooks, KYC provider hooks) are deliberately excluded; add them to the\nroute manifest when needed.\n\n## Contract tests\n\nThe `__tests__/contract.spec.ts` suite reads every `@Get/@Post/@Patch/\n@Delete` decorator from `apps/api/src/modules/**/*.controller.ts` and\nasserts every method-and-path tuple in the SDK manifest exists in the\ncontrollers. New controller routes don't fail (additive is fine);\nremoved or renamed routes do (drift is bad).\n\nThe `__tests__/sdk.spec.ts` suite exercises every SDK method against a\nmock `fetch`, asserting the URL, HTTP method, headers, and body shape\nmatch what the manifest declares.\n\nRun `pnpm --filter @certless/reseller-sdk test` from the repo root.\n","readmeFilename":"README.md"}