From 70784adda50aa1ef9f39fb510393afacd56919c6 Mon Sep 17 00:00:00 2001 From: Andras Toth <4157749+tothandras@users.noreply.github.com> Date: Wed, 6 Nov 2024 22:56:06 +0100 Subject: [PATCH] feat(client): update web client & add new linter to typespec --- Makefile | 2 +- api/client/go/client.gen.go | 488 +- api/client/web/.eslintignore | 1 - api/client/web/.eslintrc.json | 59 - api/client/web/eslint.config.mjs | 91 + api/client/web/package.json | 19 +- api/client/web/pnpm-lock.yaml | 1387 +- api/client/web/src/client/openapi.ts | 14858 +++++++++++++---- api/client/web/test/react.test.tsx | 6 +- api/openapi.cloud.yaml | 69 +- api/spec/lib/index.js | 8 +- api/spec/lib/rules/discriminatedUnions.js | 37 + api/spec/src/billing/customeroverride.tsp | 12 +- api/spec/src/billing/profile.tsp | 12 +- api/spec/src/notification/event.tsp | 6 +- api/spec/src/productcatalog/plan.tsp | 3 +- api/spec/src/productcatalog/ratecards.tsp | 3 +- api/spec/src/productcatalog/subscription.tsp | 2 +- 18 files changed, 13072 insertions(+), 3991 deletions(-) delete mode 100644 api/client/web/.eslintignore delete mode 100644 api/client/web/.eslintrc.json create mode 100644 api/client/web/eslint.config.mjs create mode 100644 api/spec/lib/rules/discriminatedUnions.js diff --git a/Makefile b/Makefile index bbca3f2fd..28aa3fdbc 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ gen-api: ## Generate API and SDKs $(call print-target) $(MAKE) update-openapi-cloud dagger call generate node-sdk -o api/client/node - # dagger call generate web-sdk -o api/client/web + dagger call generate web-sdk -o api/client/web # dagger call generate python-sdk -o api/client/python .PHONY: migrate-check diff --git a/api/client/go/client.gen.go b/api/client/go/client.gen.go index c9d814620..c6fe59080 100644 --- a/api/client/go/client.gen.go +++ b/api/client/go/client.gen.go @@ -3761,6 +3761,10 @@ type SubscriptionItem struct { // When null, the feature or service is free. Price SubscriptionItem_Price `json:"price"` + // TaxConfig The tax config of the Subscription Item. + // When undefined, the tax config of the feature or the default tax config of the plan is used. + TaxConfig *TaxConfig `json:"taxConfig,omitempty"` + // UpdatedAt Timestamp of when the resource was last updated. UpdatedAt *time.Time `json:"updatedAt,omitempty"` } @@ -27833,248 +27837,248 @@ var swaggerSpec = []string{ "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", - "ec762XCmNgi71Pr88fP/DwAA///h6xiEzAQHAA==", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/web/.eslintignore b/api/client/web/.eslintignore deleted file mode 100644 index 849ddff3b..000000000 --- a/api/client/web/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist/ diff --git a/api/client/web/.eslintrc.json b/api/client/web/.eslintrc.json deleted file mode 100644 index 03aa8f194..000000000 --- a/api/client/web/.eslintrc.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "root": true, - "parserOptions": { - "ecmaVersion": 2022, - "sourceType": "module" - }, - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint"], - "settings": { - "import/parsers": { - "@typescript-eslint/parser": ["", ".ts"] - }, - "import/resolver": { - "typescript": { - "alwaysTryTypes": true - } - } - }, - "extends": [ - "prettier", - "eslint:recommended", - "plugin:import/recommended", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "no-mixed-spaces-and-tabs": "warn", - "no-prototype-builtins": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_", - "caughtErrorsIgnorePattern": "^_" - } - ], - "import/order": [ - "error", - { - "groups": [ - "builtin", - "external", - "internal", - "parent", - "sibling", - "index", - "object", - "type" - ], - "newlines-between": "never", - "alphabetize": { - "order": "asc", - "caseInsensitive": true - } - } - ] - } -} diff --git a/api/client/web/eslint.config.mjs b/api/client/web/eslint.config.mjs new file mode 100644 index 000000000..994e0b5d0 --- /dev/null +++ b/api/client/web/eslint.config.mjs @@ -0,0 +1,91 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import { fixupConfigRules, fixupPluginRules } from '@eslint/compat' +import { FlatCompat } from '@eslint/eslintrc' +import js from '@eslint/js' +import typescriptEslint from '@typescript-eslint/eslint-plugin' +import tsParser from '@typescript-eslint/parser' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}) + +export default [ + { + ignores: ['**/dist/', '!**/*.ts'], + }, + ...fixupConfigRules( + compat.extends( + 'prettier', + 'eslint:recommended', + 'plugin:import/recommended', + 'plugin:@typescript-eslint/recommended' + ) + ), + { + plugins: { + '@typescript-eslint': fixupPluginRules(typescriptEslint), + }, + + languageOptions: { + parser: tsParser, + ecmaVersion: 2022, + sourceType: 'module', + }, + + settings: { + 'import/parsers': { + '@typescript-eslint/parser': ['', '.ts'], + }, + + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + }, + }, + }, + + rules: { + 'no-mixed-spaces-and-tabs': 'warn', + 'no-prototype-builtins': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-explicit-any': 'off', + + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + }, + ], + + 'import/order': [ + 'error', + { + groups: [ + 'builtin', + 'external', + 'internal', + 'parent', + 'sibling', + 'index', + 'object', + 'type', + ], + + 'newlines-between': 'never', + + alphabetize: { + order: 'asc', + caseInsensitive: true, + }, + }, + ], + }, + }, +] diff --git a/api/client/web/package.json b/api/client/web/package.json index 56b988198..ab089dc0b 100644 --- a/api/client/web/package.json +++ b/api/client/web/package.json @@ -33,36 +33,39 @@ "node": ">=18.16.1" }, "scripts": { - "lint": "eslint . --ext .ts", + "lint": "eslint .", "format": "prettier --list-different --find-config-path --write .", "build": "rimraf ./dist && tsc --build", - "generate": "openapi-typescript '../../openapi.yaml' --output src/client/openapi.ts && prettier --write src/client/openapi.ts", + "generate": "openapi-typescript '../../openapi.cloud.yaml' --output src/client/openapi.ts && prettier --write src/client/openapi.ts", "pretest": "pnpm run build", "test": "vitest --run", "test:watch": "vitest --watch", "prepublishOnly": "pnpm run generate && pnpm run build && pnpm run lint && pnpm run test" }, "devDependencies": { + "@eslint/compat": "^1.2.2", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.14.0", "@testing-library/react": "16.0.1", "@types/node": "22.9.0", "@types/react": "18.3.12", - "@typescript-eslint/eslint-plugin": "7.13.1", - "@typescript-eslint/parser": "7.13.1", - "eslint": "8.57.0", + "@typescript-eslint/eslint-plugin": "8.13.0", + "@typescript-eslint/parser": "8.13.0", + "eslint": "9.14.0", "eslint-config-prettier": "9.1.0", "eslint-import-resolver-typescript": "3.6.3", "eslint-plugin-import": "2.31.0", "eslint-plugin-unused-imports": "4.1.4", "eslint-plugin-vitest": "0.5.4", - "jsdom": "24.1.0", - "openapi-typescript": "6.7.6", + "jsdom": "25.0.1", + "openapi-typescript": "7.4.2", "prettier": "3.3.3", "react": "18.3.1", "rimraf": "6.0.1", "rollup": "^4.24.4", "typescript": "5.6.3", "undici": "6.20.1", - "vitest": "1.6.0" + "vitest": "2.1.4" }, "dependencies": { "openapi-typescript-fetch": "^2.0.0" diff --git a/api/client/web/pnpm-lock.yaml b/api/client/web/pnpm-lock.yaml index 865400173..e04c93b84 100644 --- a/api/client/web/pnpm-lock.yaml +++ b/api/client/web/pnpm-lock.yaml @@ -16,6 +16,15 @@ importers: specifier: ^2.0.0 version: 2.0.0 devDependencies: + '@eslint/compat': + specifier: ^1.2.2 + version: 1.2.2(eslint@9.14.0) + '@eslint/eslintrc': + specifier: ^3.1.0 + version: 3.1.0 + '@eslint/js': + specifier: ^9.14.0 + version: 9.14.0 '@testing-library/react': specifier: 16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -26,35 +35,35 @@ importers: specifier: 18.3.12 version: 18.3.12 '@typescript-eslint/eslint-plugin': - specifier: 7.13.1 - version: 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) + specifier: 8.13.0 + version: 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) '@typescript-eslint/parser': - specifier: 7.13.1 - version: 7.13.1(eslint@8.57.0)(typescript@5.6.3) + specifier: 8.13.0 + version: 8.13.0(eslint@9.14.0)(typescript@5.6.3) eslint: - specifier: 8.57.0 - version: 8.57.0 + specifier: 9.14.0 + version: 9.14.0 eslint-config-prettier: specifier: 9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@9.14.0) eslint-import-resolver-typescript: specifier: 3.6.3 - version: 3.6.3(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.0) + version: 3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.14.0) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + version: 2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0) eslint-plugin-unused-imports: specifier: 4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0) eslint-plugin-vitest: specifier: 0.5.4 - version: 0.5.4(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3)(vitest@1.6.0(@types/node@22.9.0)(jsdom@24.1.0)) + version: 0.5.4(@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)(vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1)) jsdom: - specifier: 24.1.0 - version: 24.1.0 + specifier: 25.0.1 + version: 25.0.1 openapi-typescript: - specifier: 6.7.6 - version: 6.7.6 + specifier: 7.4.2 + version: 7.4.2(typescript@5.6.3) prettier: specifier: 3.3.3 version: 3.3.3 @@ -74,8 +83,8 @@ importers: specifier: 6.20.1 version: 6.20.1 vitest: - specifier: 1.6.0 - version: 1.6.0(@types/node@22.9.0)(jsdom@24.1.0) + specifier: 2.1.4 + version: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) packages: @@ -239,45 +248,75 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.1': - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/compat@1.2.2': + resolution: {integrity: sha512-jhgiIrsw+tRfcBQ4BFl2C3vCrIUw2trCY0cnDvGZpwTtKCEDmZhAtMfrEUP/KpnwM6PrO0T+Ltm+ccW74olG3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} + '@eslint/core@0.7.0': + resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.14.0': + resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.2': + resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -295,6 +334,16 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.16.0': + resolution: {integrity: sha512-t9jnODbUcuANRSl/K4L9nb12V+U5acIHnVSl26NWrtSdDZVtoqUXk2yGFPZzohYf62cCfEQUT8ouJ3bhPfpnJg==} + + '@redocly/openapi-core@1.25.11': + resolution: {integrity: sha512-bH+a8izQz4fnKROKoX3bEU8sQ9rjvEIZOqU6qTmxlhOJ0NsKa5e+LmU18SV0oFeg5YhWQhhEDihXkvKJ1wMMNQ==} + engines: {node: '>=14.19.0', npm: '>=7.0.0'} + '@rollup/rollup-android-arm-eabi@4.24.4': resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==} cpu: [arm] @@ -388,9 +437,6 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -413,12 +459,12 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -431,55 +477,54 @@ packages: '@types/react@18.3.12': resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} - '@typescript-eslint/eslint-plugin@7.13.1': - resolution: {integrity: sha512-kZqi+WZQaZfPKnsflLJQCz6Ze9FFSMfXrrIOcyargekQxG37ES7DJNpJUE9Q/X5n3yTIP/WPutVNzgknQ7biLg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.13.0': + resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.13.1': - resolution: {integrity: sha512-1ELDPlnLvDQ5ybTSrMhRTFDfOQEOXNM+eP+3HT/Yq7ruWpciQw+Avi73pdEbA4SooCawEWo3dtYbF68gN7Ed1A==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.13.0': + resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@7.13.1': - resolution: {integrity: sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@7.18.0': resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.13.1': - resolution: {integrity: sha512-aWDbLu1s9bmgPGXSzNCxELu+0+HQOapV/y+60gPXafR8e2g1Bifxzevaa+4L2ytCWm+CHqpELq4CSoN9ELiwCg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.13.0': + resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.13.0': + resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/types@7.13.1': - resolution: {integrity: sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.18.0': resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.13.1': - resolution: {integrity: sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==} + '@typescript-eslint/types@8.13.0': + resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -487,64 +532,71 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.13.0': + resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.13.1': - resolution: {integrity: sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - '@typescript-eslint/utils@7.18.0': resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.13.1': - resolution: {integrity: sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.13.0': + resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 '@typescript-eslint/visitor-keys@7.18.0': resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@typescript-eslint/visitor-keys@8.13.0': + resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitest/expect@2.1.4': + resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} + + '@vitest/mocker@2.1.4': + resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} + peerDependencies: + msw: ^2.4.9 + vite: '>=5.2.14' + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - '@vitest/expect@1.6.0': - resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + '@vitest/pretty-format@2.1.4': + resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} - '@vitest/runner@1.6.0': - resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + '@vitest/runner@2.1.4': + resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} - '@vitest/snapshot@1.6.0': - resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + '@vitest/snapshot@2.1.4': + resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} - '@vitest/spy@1.6.0': - resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + '@vitest/spy@2.1.4': + resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} - '@vitest/utils@1.6.0': - resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + '@vitest/utils@2.1.4': + resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -613,8 +665,9 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -648,16 +701,20 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -666,6 +723,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -673,15 +733,12 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.7: - resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - cssstyle@4.0.1: - resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + cssstyle@4.1.0: + resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} engines: {node: '>=18'} csstype@3.1.3: @@ -711,15 +768,6 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -732,8 +780,8 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} deep-is@0.1.4: @@ -755,10 +803,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -767,10 +811,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -902,26 +942,34 @@ packages: vitest: optional: true - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.14.0: + resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -939,9 +987,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -959,9 +1007,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -971,9 +1019,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -985,13 +1033,10 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1007,17 +1052,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -1038,13 +1076,9 @@ packages: engines: {node: 20 || >=22} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -1097,14 +1131,10 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -1113,6 +1143,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -1121,12 +1155,9 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} @@ -1186,10 +1217,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -1201,10 +1228,6 @@ packages: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -1230,18 +1253,19 @@ packages: resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} engines: {node: 20 || >=22} + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdom@24.1.0: - resolution: {integrity: sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==} + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -1255,6 +1279,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1269,14 +1296,13 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -1284,8 +1310,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} lru-cache@11.0.2: resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} @@ -1295,11 +1321,8 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -1317,10 +1340,6 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} @@ -1328,9 +1347,9 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} @@ -1343,12 +1362,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1360,12 +1373,17 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true - nwsapi@2.2.10: - resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} object-inspect@1.13.2: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} @@ -1391,20 +1409,15 @@ packages: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - openapi-typescript-fetch@2.0.0: resolution: {integrity: sha512-9YkzVKIx9RVIET0lFjJOuf15VjI9AUsoNByBk5WYM66xVlAKDNy8anj08Ci3zZA+HgTwdDamYz5FCVYt2VoHkA==} engines: {node: '>= 12.0.0', npm: '>= 7.0.0'} - openapi-typescript@6.7.6: - resolution: {integrity: sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==} + openapi-typescript@7.4.2: + resolution: {integrity: sha512-SvhmSTItcEAdDUcz+wzrcg6OENpMRkHqqY2hZB01FT+NOfgLcZ1B1ML6vcQrnipONHtG9AQELiKHgGTjpNGjiQ==} hasBin: true + peerDependencies: + typescript: ^5.x optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -1414,10 +1427,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -1429,25 +1438,21 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -1462,11 +1467,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1475,8 +1478,9 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pkg-types@1.1.1: - resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} @@ -1499,20 +1503,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1524,9 +1518,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -1538,8 +1529,9 @@ packages: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -1556,11 +1548,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -1571,11 +1558,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rrweb-cssom@0.6.0: - resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} - - rrweb-cssom@0.7.0: - resolution: {integrity: sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g==} + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -1602,11 +1586,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -1684,17 +1663,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@2.1.0: - resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1717,24 +1689,41 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - tinybench@2.8.0: - resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tldts-core@6.1.58: + resolution: {integrity: sha512-dR936xmhBm7AeqHIhCWwK765gZ7dFyL+IqLSFAjJbFlUXGMLCb8i2PzlzaOuWBuplBTaBYseSb565nk/ZEM0Bg==} + + tldts@6.1.58: + resolution: {integrity: sha512-MQJrJhjHOYGYb8DobR6Y4AdDbd4TYkyQ+KBDVc5ODzs1cbrvPpfN1IemYi9jfipJ/vR1YWvrDli0hg1y19VRoA==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@5.0.0: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} @@ -1746,6 +1735,12 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -1753,13 +1748,9 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} @@ -1782,35 +1773,24 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - undici@6.20.1: resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} engines: {node: '>=18.17'} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - vite-node@1.6.0: - resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + vite-node@2.1.4: + resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -1845,15 +1825,15 @@ packages: terser: optional: true - vitest@1.6.0: - resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} + vitest@2.1.4: + resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.6.0 - '@vitest/ui': 1.6.0 + '@vitest/browser': 2.1.4 + '@vitest/ui': 2.1.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -1874,6 +1854,9 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -1890,6 +1873,9 @@ packages: resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} engines: {node: '>=18'} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -1902,8 +1888,8 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true @@ -1919,11 +1905,8 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1941,6 +1924,9 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -1949,10 +1935,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - snapshots: '@babel/code-frame@7.26.2': @@ -2040,20 +2022,39 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0)': + dependencies: + eslint: 9.14.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0)': dependencies: - eslint: 8.57.0 + eslint: 9.14.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.1': {} + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/compat@1.2.2(eslint@9.14.0)': + optionalDependencies: + eslint: 9.14.0 + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7(supports-color@9.4.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.7.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 + debug: 4.3.7(supports-color@9.4.0) + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2061,21 +2062,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.14.0': {} - '@fastify/busboy@2.1.1': {} + '@eslint/object-schema@2.1.4': {} - '@humanwhocodes/config-array@0.11.14': + '@eslint/plugin-kit@0.2.2': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} '@isaacs/cliui@8.0.2': dependencies: @@ -2086,11 +2092,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -2106,6 +2108,32 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.16.0': {} + + '@redocly/openapi-core@1.25.11(supports-color@9.4.0)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.16.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.5(supports-color@9.4.0) + js-levenshtein: 1.1.6 + js-yaml: 4.1.0 + lodash.isequal: 4.5.0 + minimatch: 5.1.6 + node-fetch: 2.7.0 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - encoding + - supports-color + '@rollup/rollup-android-arm-eabi@4.24.4': optional: true @@ -2162,8 +2190,6 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@sinclair/typebox@0.27.8': {} - '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 @@ -2186,10 +2212,10 @@ snapshots: '@types/aria-query@5.0.4': {} - '@types/estree@1.0.5': {} - '@types/estree@1.0.6': {} + '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': {} '@types/node@22.9.0': @@ -2203,83 +2229,68 @@ snapshots: '@types/prop-types': 15.7.13 csstype: 3.1.3 - '@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 7.13.1 - '@typescript-eslint/type-utils': 7.13.1(eslint@8.57.0)(typescript@5.6.3) - '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.13.1 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.13.0 + eslint: 9.14.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 7.13.1 - '@typescript-eslint/types': 7.13.1 - '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.13.1 - debug: 4.3.5 - eslint: 8.57.0 + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.13.0 + debug: 4.3.7(supports-color@9.4.0) + eslint: 9.14.0 optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.13.1': - dependencies: - '@typescript-eslint/types': 7.13.1 - '@typescript-eslint/visitor-keys': 7.13.1 - '@typescript-eslint/scope-manager@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.13.1(eslint@8.57.0)(typescript@5.6.3)': + '@typescript-eslint/scope-manager@8.13.0': dependencies: - '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.6.3) - '@typescript-eslint/utils': 7.13.1(eslint@8.57.0)(typescript@5.6.3) - debug: 4.3.5 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.6.3) + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 + + '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + debug: 4.3.7(supports-color@9.4.0) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: + - eslint - supports-color - '@typescript-eslint/types@7.13.1': {} - '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.13.1(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 7.13.1 - '@typescript-eslint/visitor-keys': 7.13.1 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.13.0': {} '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7 + debug: 4.3.7(supports-color@9.4.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -2290,80 +2301,102 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.13.1(eslint@8.57.0)(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.13.1 - '@typescript-eslint/types': 7.13.1 - '@typescript-eslint/typescript-estree': 7.13.1(typescript@5.6.3) - eslint: 8.57.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 + debug: 4.3.7(supports-color@9.4.0) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.6.3)': + '@typescript-eslint/utils@7.18.0(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - eslint: 8.57.0 + eslint: 9.14.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.13.1': + '@typescript-eslint/utils@8.13.0(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 7.13.1 - eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + eslint: 9.14.0 + transitivePeerDependencies: + - supports-color + - typescript '@typescript-eslint/visitor-keys@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@typescript-eslint/visitor-keys@8.13.0': + dependencies: + '@typescript-eslint/types': 8.13.0 + eslint-visitor-keys: 3.4.3 + + '@vitest/expect@2.1.4': + dependencies: + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 + tinyrainbow: 1.2.0 - '@vitest/expect@1.6.0': + '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.9.0))': dependencies: - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - chai: 4.4.1 + '@vitest/spy': 2.1.4 + estree-walker: 3.0.3 + magic-string: 0.30.12 + optionalDependencies: + vite: 5.4.10(@types/node@22.9.0) - '@vitest/runner@1.6.0': + '@vitest/pretty-format@2.1.4': dependencies: - '@vitest/utils': 1.6.0 - p-limit: 5.0.0 - pathe: 1.1.2 + tinyrainbow: 1.2.0 - '@vitest/snapshot@1.6.0': + '@vitest/runner@2.1.4': dependencies: - magic-string: 0.30.10 + '@vitest/utils': 2.1.4 pathe: 1.1.2 - pretty-format: 29.7.0 - '@vitest/spy@1.6.0': + '@vitest/snapshot@2.1.4': dependencies: - tinyspy: 2.2.1 + '@vitest/pretty-format': 2.1.4 + magic-string: 0.30.12 + pathe: 1.1.2 - '@vitest/utils@1.6.0': + '@vitest/spy@2.1.4': dependencies: - diff-sequences: 29.6.3 - estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + tinyspy: 3.0.2 - acorn-jsx@5.3.2(acorn@8.11.3): + '@vitest/utils@2.1.4': dependencies: - acorn: 8.11.3 + '@vitest/pretty-format': 2.1.4 + loupe: 3.1.2 + tinyrainbow: 1.2.0 - acorn-walk@8.3.2: {} + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 - acorn@8.11.3: {} + acorn@8.14.0: {} - agent-base@7.1.1: + agent-base@7.1.1(supports-color@9.4.0): dependencies: - debug: 4.3.5 + debug: 4.3.7(supports-color@9.4.0) transitivePeerDependencies: - supports-color @@ -2444,7 +2477,7 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} asynckit@0.4.0: {} @@ -2479,24 +2512,22 @@ snapshots: callsites@3.1.0: {} - chai@4.4.1: + chai@5.1.2: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 + change-case@5.4.4: {} + + check-error@2.1.1: {} color-convert@2.0.1: dependencies: @@ -2504,23 +2535,23 @@ snapshots: color-name@1.1.4: {} + colorette@1.4.0: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 concat-map@0.0.1: {} - confbox@0.1.7: {} - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - cssstyle@4.0.1: + cssstyle@4.1.0: dependencies: - rrweb-cssom: 0.6.0 + rrweb-cssom: 0.7.1 csstype@3.1.3: {} @@ -2551,19 +2582,15 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.5: - dependencies: - ms: 2.1.2 - - debug@4.3.7: + debug@4.3.7(supports-color@9.4.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 9.4.0 decimal.js@10.4.3: {} - deep-eql@4.1.4: - dependencies: - type-detect: 4.0.8 + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -2583,8 +2610,6 @@ snapshots: dequal@2.0.3: {} - diff-sequences@29.6.3: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -2593,10 +2618,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} eastasianwidth@0.2.0: {} @@ -2715,9 +2736,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@9.14.0): dependencies: - eslint: 8.57.0 + eslint: 9.14.0 eslint-import-resolver-node@0.3.9: dependencies: @@ -2727,37 +2748,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.14.0): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.3.7 + debug: 4.3.7(supports-color@9.4.0) enhanced-resolve: 5.17.1 - eslint: 8.57.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint: 9.14.0 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.14.0))(eslint@9.14.0) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.14.0))(eslint@9.14.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.6.3) - eslint: 8.57.0 + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + eslint: 9.14.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.14.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -2766,9 +2787,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.14.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.14.0))(eslint@9.14.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -2780,86 +2801,85 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.13.1(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0): dependencies: - eslint: 8.57.0 + eslint: 9.14.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3)(vitest@1.6.0(@types/node@22.9.0)(jsdom@24.1.0)): + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)(vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1)): dependencies: - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.6.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 7.18.0(eslint@9.14.0)(typescript@5.6.3) + eslint: 9.14.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.13.1(@typescript-eslint/parser@7.13.1(eslint@8.57.0)(typescript@5.6.3))(eslint@8.57.0)(typescript@5.6.3) - vitest: 1.6.0(@types/node@22.9.0)(jsdom@24.1.0) + '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) + vitest: 2.1.4(@types/node@22.9.0)(jsdom@25.0.1) transitivePeerDependencies: - supports-color - typescript - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint-visitor-keys@4.2.0: {} + + eslint@9.14.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.7.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.14.0 + '@eslint/plugin-kit': 0.2.2 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 - doctrine: 3.0.0 + debug: 4.3.7(supports-color@9.4.0) escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.3.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -2871,21 +2891,11 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 + expect-type@1.1.0: {} fast-deep-equal@3.1.3: {} @@ -2905,9 +2915,9 @@ snapshots: dependencies: reusify: 1.0.4 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -2918,11 +2928,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.1: {} @@ -2935,14 +2944,12 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - form-data@4.0.0: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true @@ -2957,8 +2964,6 @@ snapshots: functions-have-names@1.2.3: {} - get-func-name@2.0.2: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -2967,8 +2972,6 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 - get-stream@8.0.1: {} - get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -2996,18 +2999,7 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: dependencies: @@ -3057,26 +3049,26 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.1 - debug: 4.3.5 + agent-base: 7.1.1(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.4: + https-proxy-agent@7.0.5(supports-color@9.4.0): dependencies: - agent-base: 7.1.1 - debug: 4.3.5 + agent-base: 7.1.1(supports-color@9.4.0) + debug: 4.3.7(supports-color@9.4.0) transitivePeerDependencies: - supports-color - human-signals@5.0.0: {} - iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 ignore@5.3.1: {} + ignore@5.3.2: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -3084,12 +3076,7 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} + index-to-position@0.1.2: {} internal-slot@1.0.7: dependencies: @@ -3145,8 +3132,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-potential-custom-element-name@1.0.1: {} is-regex@1.1.4: @@ -3158,8 +3143,6 @@ snapshots: dependencies: call-bind: 1.0.7 - is-stream@3.0.0: {} - is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -3184,36 +3167,36 @@ snapshots: dependencies: '@isaacs/cliui': 8.0.2 - js-tokens@4.0.0: {} + js-levenshtein@1.1.6: {} - js-tokens@9.0.0: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: dependencies: argparse: 2.0.1 - jsdom@24.1.0: + jsdom@25.0.1: dependencies: - cssstyle: 4.0.1 + cssstyle: 4.1.0 data-urls: 5.0.0 decimal.js: 10.4.3 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 + https-proxy-agent: 7.0.5(supports-color@9.4.0) is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.10 - parse5: 7.1.2 - rrweb-cssom: 0.7.0 + nwsapi: 2.2.13 + parse5: 7.2.1 + rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.4 + tough-cookie: 5.0.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - ws: 8.17.1 + ws: 8.18.0 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -3224,6 +3207,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -3239,34 +3224,27 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - local-pkg@0.5.0: - dependencies: - mlly: 1.7.1 - pkg-types: 1.1.1 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 + lodash.isequal@4.5.0: {} + lodash.merge@4.6.2: {} loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - loupe@2.3.7: - dependencies: - get-func-name: 2.0.2 + loupe@3.1.2: {} lru-cache@11.0.2: {} lz-string@1.5.0: {} - magic-string@0.30.10: + magic-string@0.30.12: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - - merge-stream@2.0.0: {} + '@jridgewell/sourcemap-codec': 1.5.0 merge2@1.4.1: {} @@ -3281,8 +3259,6 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-fn@4.0.0: {} - minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 @@ -3291,7 +3267,7 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.4: + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 @@ -3303,26 +3279,17 @@ snapshots: minipass@7.1.2: {} - mlly@1.7.1: - dependencies: - acorn: 8.11.3 - pathe: 1.1.2 - pkg-types: 1.1.1 - ufo: 1.5.3 - - ms@2.1.2: {} - ms@2.1.3: {} nanoid@3.3.7: {} natural-compare@1.4.0: {} - npm-run-path@5.3.0: + node-fetch@2.7.0: dependencies: - path-key: 4.0.0 + whatwg-url: 5.0.0 - nwsapi@2.2.10: {} + nwsapi@2.2.13: {} object-inspect@1.13.2: {} @@ -3354,24 +3321,19 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - openapi-typescript-fetch@2.0.0: {} - openapi-typescript@6.7.6: + openapi-typescript@7.4.2(typescript@5.6.3): dependencies: + '@redocly/openapi-core': 1.25.11(supports-color@9.4.0) ansi-colors: 4.1.3 - fast-glob: 3.3.2 - js-yaml: 4.1.0 + change-case: 5.4.4 + parse-json: 8.1.0 supports-color: 9.4.0 - undici: 5.28.4 + typescript: 5.6.3 yargs-parser: 21.1.1 + transitivePeerDependencies: + - encoding optionator@0.9.4: dependencies: @@ -3386,10 +3348,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.0.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -3400,18 +3358,20 @@ snapshots: dependencies: callsites: 3.1.0 - parse5@7.1.2: + parse-json@8.1.0: + dependencies: + '@babel/code-frame': 7.26.2 + index-to-position: 0.1.2 + type-fest: 4.26.1 + + parse5@7.2.1: dependencies: entities: 4.5.0 path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-scurry@2.0.0: @@ -3423,19 +3383,13 @@ snapshots: pathe@1.1.2: {} - pathval@1.1.1: {} - - picocolors@1.0.1: {} + pathval@2.0.0: {} picocolors@1.1.1: {} picomatch@2.3.1: {} - pkg-types@1.1.1: - dependencies: - confbox: 0.1.7 - mlly: 1.7.1 - pathe: 1.1.2 + pluralize@8.0.0: {} possible-typed-array-names@1.0.0: {} @@ -3455,18 +3409,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - psl@1.9.0: {} - punycode@2.3.1: {} - querystringify@2.2.0: {} - queue-microtask@1.2.3: {} react-dom@18.3.1(react@18.3.1): @@ -3477,8 +3421,6 @@ snapshots: react-is@17.0.2: {} - react-is@18.3.1: {} - react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -3492,7 +3434,7 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - requires-port@1.0.0: {} + require-from-string@2.0.2: {} resolve-from@4.0.0: {} @@ -3506,10 +3448,6 @@ snapshots: reusify@1.0.4: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rimraf@6.0.1: dependencies: glob: 11.0.0 @@ -3539,9 +3477,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.24.4 fsevents: 2.3.3 - rrweb-cssom@0.6.0: {} - - rrweb-cssom@0.7.0: {} + rrweb-cssom@0.7.1: {} run-parallel@1.2.0: dependencies: @@ -3572,8 +3508,6 @@ snapshots: semver@6.3.1: {} - semver@7.6.2: {} - semver@7.6.3: {} set-function-length@1.2.2: @@ -3658,14 +3592,8 @@ snapshots: strip-bom@3.0.0: {} - strip-final-newline@3.0.0: {} - strip-json-comments@3.1.1: {} - strip-literal@2.1.0: - dependencies: - js-tokens: 9.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -3680,22 +3608,31 @@ snapshots: text-table@0.2.0: {} - tinybench@2.8.0: {} + tinybench@2.9.0: {} + + tinyexec@0.3.1: {} - tinypool@0.8.4: {} + tinypool@1.0.1: {} - tinyspy@2.2.1: {} + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + tldts-core@6.1.58: {} + + tldts@6.1.58: + dependencies: + tldts-core: 6.1.58 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tough-cookie@4.1.4: + tough-cookie@5.0.0: dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 + tldts: 6.1.58 + + tr46@0.0.3: {} tr46@5.0.0: dependencies: @@ -3705,6 +3642,10 @@ snapshots: dependencies: typescript: 5.6.3 + ts-api-utils@1.4.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -3716,9 +3657,7 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - type-fest@0.20.2: {} + type-fest@4.26.1: {} typed-array-buffer@1.0.2: dependencies: @@ -3754,8 +3693,6 @@ snapshots: typescript@5.6.3: {} - ufo@1.5.3: {} - unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -3765,29 +3702,19 @@ snapshots: undici-types@6.19.8: {} - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - undici@6.20.1: {} - universalify@0.2.0: {} + uri-js-replace@1.0.1: {} uri-js@4.4.1: dependencies: punycode: 2.3.1 - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - vite-node@1.6.0(@types/node@22.9.0): + vite-node@2.1.4(@types/node@22.9.0): dependencies: cac: 6.7.14 - debug: 4.3.5 + debug: 4.3.7(supports-color@9.4.0) pathe: 1.1.2 - picocolors: 1.0.1 vite: 5.4.10(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' @@ -3809,34 +3736,35 @@ snapshots: '@types/node': 22.9.0 fsevents: 2.3.3 - vitest@1.6.0(@types/node@22.9.0)(jsdom@24.1.0): - dependencies: - '@vitest/expect': 1.6.0 - '@vitest/runner': 1.6.0 - '@vitest/snapshot': 1.6.0 - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - acorn-walk: 8.3.2 - chai: 4.4.1 - debug: 4.3.5 - execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.10 + vitest@2.1.4(@types/node@22.9.0)(jsdom@25.0.1): + dependencies: + '@vitest/expect': 2.1.4 + '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.9.0)) + '@vitest/pretty-format': 2.1.4 + '@vitest/runner': 2.1.4 + '@vitest/snapshot': 2.1.4 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 + debug: 4.3.7(supports-color@9.4.0) + expect-type: 1.1.0 + magic-string: 0.30.12 pathe: 1.1.2 - picocolors: 1.0.1 std-env: 3.7.0 - strip-literal: 2.1.0 - tinybench: 2.8.0 - tinypool: 0.8.4 + tinybench: 2.9.0 + tinyexec: 0.3.1 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 vite: 5.4.10(@types/node@22.9.0) - vite-node: 1.6.0(@types/node@22.9.0) - why-is-node-running: 2.2.2 + vite-node: 2.1.4(@types/node@22.9.0) + why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.9.0 - jsdom: 24.1.0 + jsdom: 25.0.1 transitivePeerDependencies: - less - lightningcss + - msw - sass - sass-embedded - stylus @@ -3848,6 +3776,8 @@ snapshots: dependencies: xml-name-validator: 5.0.0 + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} whatwg-encoding@3.1.1: @@ -3861,6 +3791,11 @@ snapshots: tr46: 5.0.0 webidl-conversions: 7.0.0 + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -3881,7 +3816,7 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.2.2: + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 @@ -3900,16 +3835,14 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} - - ws@8.17.1: {} + ws@8.18.0: {} xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} + yaml-ast-parser@0.0.43: {} + yargs-parser@21.1.1: {} yocto-queue@0.1.0: {} - - yocto-queue@1.0.0: {} diff --git a/api/client/web/src/client/openapi.ts b/api/client/web/src/client/openapi.ts index 397a700ee..cf5d54220 100644 --- a/api/client/web/src/client/openapi.ts +++ b/api/client/web/src/client/openapi.ts @@ -3,171 +3,814 @@ * Do not make direct changes to the file. */ -/** WithRequired type helpers */ -type WithRequired = T & { [P in K]-?: T[P] } - export interface paths { '/api/v1/apps': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List apps. */ get: operations['listApps'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/apps/{id}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get the app. */ get: operations['getApp'] + put?: never + post?: never /** @description Uninstall an app. */ delete: operations['uninstallApp'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/apps/{id}/stripe/webhook': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never /** @description Stripe webhook. */ post: operations['appStripeWebhook'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/customer': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * List customer overrides + * @description List customer overrides + */ + get: operations['billingListCustomerOverrides'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/customer/{customerId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * Get a customer override + * @description Get a customer override by id. + */ + get: operations['billingGetCustomerOverrideById'] + put?: never + /** + * Create/update a customer override + * @description Create/update a new customer override. + */ + post: operations['billingUpsertCustomerOverride'] + /** + * Delete a customer override + * @description Delete a customer override by id. + */ + delete: operations['billingDeleteCustomerOverride'] + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * List invoices + * @description List invoices + */ + get: operations['billingListInvoices'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * List invoices + * @description List invoices for a specific customer + */ + get: operations['billingListInvoicesByCustomer'] + put?: never + /** + * Create an invoice + * @description Create a new invoice from the pending line items. + * + * This should be only called if for some reason we need to invoice a customer outside of the normal billing cycle. + * + * When creating an invoice, the pending line items will be marked as invoiced and the invoice will be created with the total amount of the pending items. + * + * New pending line items will be created for the period between now() and the next billing cycle's begining date for any metered item. + * + * The call can return multiple invoices if the pending line items are in different currencies. + */ + post: operations['billingCreateInvoice'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * Get an invoice + * @description Get an invoice by ID. + */ + get: operations['billingGetInvoiceByCustomerInvoiceId'] + put?: never + post?: never + /** + * Delete an invoice + * @description Delete an invoice + * + * Only invoices that are in the draft (or earlier) status can be deleted. + */ + delete: operations['billingDeleteInvoiceByCustomerInvoiceId'] + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}/advance': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Advance the invoice's state to the next status + * @description Advance the invoice's state to the next status. + * + * The call doesn't "approve the invoice", it only advances the invoice to the next status if the transition would be automatic. + * + * The action can be called when the invoice's statusDetails' actions field contain the "advance" action. + */ + post: operations['billingInvoiceAdvance'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}/approve': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Send the invoice to the customer + * @description Approve an invoice and start executing the payment workflow. + * + * This call instantly sends the invoice to the customer using the configured billing profile app. + * + * This call is valid in two invoice statuses: + * - `draft`: the invoice will be sent to the customer, the invluce state becomes issued + * - `manual_approval_needed`: the invoice will be sent to the customer, the invoice state becomes issued + */ + post: operations['billingApproveInvoice'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}/lines/{lineId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + /** + * Update an invoice line + * @description Update an invoice line + */ + put: operations['billingUpdateInvoiceLine'] + post?: never + /** + * Delete an invoice line + * @description Delete an invoice line + */ + delete: operations['billingDeleteInvoiceLine'] + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}/retry': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Retry advancing the invoice after a failed attempt. + * @description Retry advancing the invoice after a failed attempt. + * + * The action can be called when the invoice's statusDetails' actions field contain the "retry" action. + */ + post: operations['billingInvoiceRetry'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}/tax/recalculate': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Recalculate an invoice's tax amounts + * @description Recalculate an invoice's tax amounts (using the app set in the customer's billing profile) + * + * Note: charges might apply, depending on the tax provider. + */ + post: operations['billingRecalculateInvoiceTax'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/invoices/{invoiceId}/void': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Void an invoice + * @description Void an invoice + * + * Only invoices that have been alread issued can be voided. + * + * Voiding an invoice will mark it as voided, the user can specify how to handle the voided line items. + */ + post: operations['billingVoidInvoice'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/invoices/{customerId}/lines': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Create line items + * @description Create a new pending line item (charge). + * + * This call is used to create a new pending line item for the customer without explicitly + * assigning it to an invoice. + * + * The line item will be either allocated to an existing invoice in gathering state or a new invoice is + * created for the line item. + * + * A new invoice will be created if: + * - there is no invoice in gathering state + * - the currency of the line item doesn't match the currency of any invoices in gathering state + */ + post: operations['billingCreateLineByCustomer'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/profile': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all billing profiles */ + get: operations['billingListProfiles'] + put?: never + /** + * Create a new billing profile + * @description Create a new billing profile + * + * Billing profiles are representations of a customer's billing information. Customer overrides + * can be applied to a billing profile to customize the billing behavior for a specific customer. + */ + post: operations['billingCreateProfile'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/billing/profile/{id}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * Get a billing profile by ID + * @description Get a billing profile by ID + */ + get: operations['billingGetProfile'] + /** + * Update a billing profile + * @description Update a billing profile + */ + put: operations['billingUpdateProfile'] + post?: never + /** + * Archive a billing profile + * @description Archive a billing profile + */ + delete: operations['billingArchiveProfile'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/customers': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List customers. */ get: operations['listCustomers'] + put?: never /** @description Create a new customer. */ post: operations['createCustomer'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } - '/api/v1/customers/{customerIdOrKey}': { - /** @description Get a customer by ID or key. */ + '/api/v1/customers/{id}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get a customer by ID. */ get: operations['getCustomer'] - /** @description Update a customer by ID or key. */ + /** @description Update a customer by ID. */ put: operations['updateCustomer'] - /** @description Delete a customer by ID or key. */ + post?: never + /** @description Delete a customer by ID. */ delete: operations['deleteCustomer'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/debug/metrics': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * Get event metrics * @description Returns debug metrics (in OpenMetrics format) like the number of ingested events since mindnight UTC. * - * The OpenMetrics Counter(s) reset every day at midnight UTC. + * The OpenMetrics Counter(s) reset every day at midnight UTC. */ get: operations['getDebugMetrics'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/entitlements': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * List all entitlements * @description List all entitlements for all the subjects and features. This endpoint is intended for administrative purposes only. - * To fetch the entitlements of a specific subject please use the /api/v1/subjects/{subjectKeyOrID}/entitlements endpoint. - * If page is provided that takes precedence and the paginated response is returned. + * To fetch the entitlements of a specific subject please use the /api/v1/subjects/{subjectKeyOrID}/entitlements endpoint. + * If page is provided that takes precedence and the paginated response is returned. */ get: operations['listEntitlements'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/entitlements/{entitlementId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get entitlement by id. */ get: operations['getEntitlementById'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/events': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * List ingested events * @description List ingested events within a time range. * - * If the from query param is not provided it defaults to last 72 hours. + * If the from query param is not provided it defaults to last 72 hours. */ get: operations['listEvents'] + put?: never /** @description Ingests an event or batch of events following the CloudEvents specification. */ post: operations['ingestEvents'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/features': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List features. */ get: operations['listFeatures'] - /** - * @description Features are either metered or static. A feature is metered if meterSlug is provided at creation. - * For metered features you can pass additional filters that will be applied when calculating feature usage, based on the meter's groupBy fields. - * Only meters with SUM and COUNT aggregation are supported for features. - * Features cannot be updated later, only archived. - */ + put?: never + /** @description Features are either metered or static. A feature is metered if meterSlug is provided at creation. + * For metered features you can pass additional filters that will be applied when calculating feature usage, based on the meter's groupBy fields. + * Only meters with SUM and COUNT aggregation are supported for features. + * Features cannot be updated later, only archived. */ post: operations['createFeature'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/features/{featureId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get a feature by ID. */ get: operations['getFeature'] - /** - * @description Archive a feature by ID. + put?: never + post?: never + /** @description Archive a feature by ID. * - * Once a feature is archived it cannot be unarchived. If a feature is archived, new entitlements cannot be created for it, but archiving the feature does not affect existing entitlements. - * This means, if you want to create a new feature with the same key, and then create entitlements for it, the previous entitlements have to be deleted first on a per subject basis. - */ + * Once a feature is archived it cannot be unarchived. If a feature is archived, new entitlements cannot be created for it, but archiving the feature does not affect existing entitlements. + * This means, if you want to create a new feature with the same key, and then create entitlements for it, the previous entitlements have to be deleted first on a per subject basis. */ delete: operations['deleteFeature'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/grants': { - /** - * @description List all grants for all the subjects and entitlements. This endpoint is intended for administrative purposes only. - * To fetch the grants of a specific entitlement please use the /api/v1/subjects/{subjectKeyOrID}/entitlements/{entitlementOrFeatureID}/grants endpoint. - * If page is provided that takes precedence and the paginated response is returned. - */ + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all grants for all the subjects and entitlements. This endpoint is intended for administrative purposes only. + * To fetch the grants of a specific entitlement please use the /api/v1/subjects/{subjectKeyOrID}/entitlements/{entitlementOrFeatureID}/grants endpoint. + * If page is provided that takes precedence and the paginated response is returned. */ get: operations['listGrants'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/grants/{grantId}': { - /** - * @description Voiding a grant means it is no longer valid, it doesn't take part in further balance calculations. Voiding a grant does not retroactively take effect, meaning any usage that has already been attributed to the grant will remain, but future usage cannot be burnt down from the grant. - * For example, if you have a single grant for your metered entitlement with an initial amount of 100, and so far 60 usage has been metered, the grant (and the entitlement itself) would have a balance of 40. If you then void that grant, balance becomes 0, but the 60 previous usage will not be affected. - */ + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + post?: never + /** @description Voiding a grant means it is no longer valid, it doesn't take part in further balance calculations. Voiding a grant does not retroactively take effect, meaning any usage that has already been attributed to the grant will remain, but future usage cannot be burnt down from the grant. + * For example, if you have a single grant for your metered entitlement with an initial amount of 100, and so far 60 usage has been metered, the grant (and the entitlement itself) would have a balance of 40. If you then void that grant, balance becomes 0, but the 60 previous usage will not be affected. */ delete: operations['voidGrant'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/integration/stripe/checkout/sessions': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never /** @description Create checkout session. */ post: operations['createStripeCheckoutSession'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/marketplace/listings': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List available apps of the app marketplace. */ get: operations['listMarketplaceListings'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/marketplace/listings/{type}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get a marketplace listing by type. */ get: operations['getMarketplaceListing'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/marketplace/listings/{type}/install/apikey': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never /** @description Install an marketplace via API Key. */ post: operations['marketplaceAppAPIKeyInstall'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/marketplace/listings/{type}/install/oauth2': { - /** - * @description Install an app via OAuth. - * Returns a URL to start the OAuth 2.0 flow. - */ + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Install an app via OAuth. + * Returns a URL to start the OAuth 2.0 flow. */ get: operations['marketplaceOAuth2InstallGetURL'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/marketplace/listings/{type}/install/oauth2/authorize': { - /** - * @description Authorize OAuth2 code. - * Verifies the OAuth code and exchanges it for a token and refresh token - */ + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Authorize OAuth2 code. + * Verifies the OAuth code and exchanges it for a token and refresh token */ get: operations['marketplaceOAuth2InstallAuthorize'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/meters': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List meters. */ get: operations['listMeters'] + put?: never /** @description Create a meter. */ post: operations['createMeter'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/meters/{meterIdOrSlug}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get a meter by ID or slug. */ get: operations['getMeter'] + put?: never + post?: never /** @description Delete a meter. */ delete: operations['deleteMeter'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/meters/{meterIdOrSlug}/query': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Query meter for usage. Query meter for usage. */ get: operations['queryMeter'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/meters/{meterIdOrSlug}/subjects': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List subjects for a meter. */ get: operations['listMeterSubjects'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/channels': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * List notification channels * @description List all notification channels. */ get: operations['listNotificationChannels'] + put?: never /** * Create a notification channel * @description Create a new notification channel. */ post: operations['createNotificationChannel'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/channels/{channelId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * Get notification channel * @description Get a notification channel by id. @@ -178,41 +821,90 @@ export interface paths { * @description Update notification channel. */ put: operations['updateNotificationChannel'] + post?: never /** * Delete a notification channel * @description Soft delete notification channel by id. * - * Once a notification channel is deleted it cannot be undeleted. + * Once a notification channel is deleted it cannot be undeleted. */ delete: operations['deleteNotificationChannel'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/events': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * List notification events * @description List all notification events. */ get: operations['listNotificationEvents'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/events/{eventId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * Get notification event * @description Get a notification event by id. */ get: operations['getNotificationEvent'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/rules': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * List notification rules * @description List all notification rules. */ get: operations['listNotificationRules'] + put?: never /** * Create a notification rule * @description Create a new notification rule. */ post: operations['createNotificationRule'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/rules/{ruleId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** * Get notification rule * @description Get a notification rule by id. @@ -223,138 +915,563 @@ export interface paths { * @description Update notification rule. */ put: operations['updateNotificationRule'] + post?: never /** * Delete a notification rule * @description Soft delete notification rule by id. * - * Once a notification rule is deleted it cannot be undeleted. + * Once a notification rule is deleted it cannot be undeleted. */ delete: operations['deleteNotificationRule'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/rules/{ruleId}/test': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never /** @description Test a notification rule by sending a test event with random data. */ post: operations['testNotificationRule'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/notification/webhook/svix': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never /** * Receive Svix operational events * @description Callback endpoint used by Svix to notify about operational events. */ post: operations['receiveSvixOperationalEvent'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * List plans + * @description List all plans. + */ + get: operations['listPlans'] + put?: never + /** + * Create a plan + * @description Create a new plan. + */ + post: operations['createPlan'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans/{planIdOrKey}/next': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * New draft plan + * @description Create a new draft version from plan. + * It returns error if there is already a plan in draft or planId does not reference the latest published version. + */ + post: operations['newDraftPlan'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans/{planId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * Get plan + * @description Get a plan by id or key. The latest published version is returned if latter is used. + */ + get: operations['getPlan'] + /** + * Update a plan + * @description Update plan by id. + */ + put: operations['updatePlan'] + post?: never + /** + * Delete plan + * @description Soft delete plan by plan.id. + * + * Once a plan is deleted it cannot be undeleted. + */ + delete: operations['deletePlan'] + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans/{planId}/phases': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * List phases in plan + * @description List all phases in plan. + */ + get: operations['listPlanPhases'] + put?: never + /** + * Create new phase in plan + * @description Create new phase in plan. + */ + post: operations['createPlanPhases'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans/{planId}/phases/{planPhaseKey}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** + * Get phase for plan + * @description Get phase in plan. + */ + get: operations['getPlanPhases'] + /** + * Update phase in plan + * @description Update phase in plan. + */ + put: operations['updatePlanPhases'] + post?: never + /** + * Delete phase for plan + * @description Delete phase in plan. + * + * Once a phase is deleted it cannot be undeleted. + */ + delete: operations['deletePlanPhases'] + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans/{planId}/publish': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Publish plan + * @description Publish a new plan. + */ + post: operations['publishPlan'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/plans/{planId}/unpublish': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Unpublish plan + * @description Unpublish a new plan. + */ + post: operations['unpublishPlan'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/portal/meters/{meterSlug}/query': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Query meter for consumer portal. This endpoint is publicly exposable to consumers. Query meter for consumer portal. This endpoint is publicly exposable to consumers. */ get: operations['queryPortalMeter'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/portal/tokens': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List tokens. */ get: operations['listPortalTokens'] + put?: never /** @description Create a consumer portal token. */ post: operations['createPortalToken'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/portal/tokens/invalidate': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never /** @description Invalidates consumer portal tokens by ID or subject. */ post: operations['invalidatePortalTokens'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List subjects. */ get: operations['listSubjects'] - /** - * @description Upserts a subject. Creates or updates subject. + put?: never + /** @description Upserts a subject. Creates or updates subject. * - * If the subject doesn't exist, it will be created. - * If the subject exists, it will be partially updated with the provided fields. - */ + * If the subject doesn't exist, it will be created. + * If the subject exists, it will be partially updated with the provided fields. */ post: operations['upsertSubject'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get subject by ID or key. */ get: operations['getSubject'] + put?: never + post?: never /** @description Delete subject by ID or key. */ delete: operations['deleteSubject'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List all entitlements for a subject. For checking entitlement access, use the /value endpoint instead. */ get: operations['listSubjectEntitlements'] + put?: never /** * Create an entitlement * @description OpenMeter has three types of entitlements: metered, boolean, and static. The type property determines the type of entitlement. The underlying feature has to be compatible with the entitlement type specified in the request (e.g., a metered entitlement needs a feature associated with a meter). * - * - Boolean entitlements define static feature access, e.g. "Can use SSO authentication". - * - Static entitlements let you pass along a configuration while granting access, e.g. "Using this feature with X Y settings" (passed in the config). - * - Metered entitlements have many use cases, from setting up usage-based access to implementing complex credit systems. Example: The customer can use 10000 AI tokens during the usage period of the entitlement. + * - Boolean entitlements define static feature access, e.g. "Can use SSO authentication". + * - Static entitlements let you pass along a configuration while granting access, e.g. "Using this feature with X Y settings" (passed in the config). + * - Metered entitlements have many use cases, from setting up usage-based access to implementing complex credit systems. Example: The customer can use 10000 AI tokens during the usage period of the entitlement. * - * A given subject can only have one active (non-deleted) entitlement per featureKey. If you try to create a new entitlement for a featureKey that already has an active entitlement, the request will fail with a 409 error. + * A given subject can only have one active (non-deleted) entitlement per featureKey. If you try to create a new entitlement for a featureKey that already has an active entitlement, the request will fail with a 409 error. * - * Once an entitlement is created you cannot modify it, only delete it. + * Once an entitlement is created you cannot modify it, only delete it. */ post: operations['createEntitlement'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/grants': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description List all grants issued for an entitlement. The entitlement can be defined either by its id or featureKey. */ get: operations['listEntitlementGrants'] - /** - * @description Grants define a behavior of granting usage for a metered entitlement. They can have complicated recurrence and rollover rules, thanks to which you can define a wide range of access patterns with a single grant, in most cases you don't have to periodically create new grants. You can only issue grants for active metered entitlements. + put?: never + /** @description Grants define a behavior of granting usage for a metered entitlement. They can have complicated recurrence and rollover rules, thanks to which you can define a wide range of access patterns with a single grant, in most cases you don't have to periodically create new grants. You can only issue grants for active metered entitlements. * - * A grant defines a given amount of usage that can be consumed for the entitlement. The grant is in effect between its effective date and its expiration date. Specifying both is mandatory for new grants. + * A grant defines a given amount of usage that can be consumed for the entitlement. The grant is in effect between its effective date and its expiration date. Specifying both is mandatory for new grants. * - * Grants have a priority setting that determines their order of use. Lower numbers have higher priority, with 0 being the highest priority. + * Grants have a priority setting that determines their order of use. Lower numbers have higher priority, with 0 being the highest priority. * - * Grants can have a recurrence setting intended to automate the manual reissuing of grants. For example, a daily recurrence is equal to reissuing that same grant every day (ignoring rollover settings). + * Grants can have a recurrence setting intended to automate the manual reissuing of grants. For example, a daily recurrence is equal to reissuing that same grant every day (ignoring rollover settings). * - * Rollover settings define what happens to the remaining balance of a grant at a reset. Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + * Rollover settings define what happens to the remaining balance of a grant at a reset. Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) * - * Grants cannot be changed once created, only deleted. This is to ensure that balance is deterministic regardless of when it is queried. - */ + * Grants cannot be changed once created, only deleted. This is to ensure that balance is deterministic regardless of when it is queried. */ post: operations['createGrant'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/override': { - /** - * @description Overriding an entitlement creates a new entitlement from the provided inputs and soft deletes the previous entitlement for the provided subject-feature pair. If the previous entitlement is already deleted or otherwise doesnt exist, the override will fail. + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + /** @description Overriding an entitlement creates a new entitlement from the provided inputs and soft deletes the previous entitlement for the provided subject-feature pair. If the previous entitlement is already deleted or otherwise doesnt exist, the override will fail. * - * This endpoint is useful for upgrades, downgrades, or other changes to entitlements that require a new entitlement to be created with zero downtime. - */ + * This endpoint is useful for upgrades, downgrades, or other changes to entitlements that require a new entitlement to be created with zero downtime. */ put: operations['overrideEntitlement'] + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/value': { - /** - * @description This endpoint should be used for access checks and enforcement. All entitlement types share the hasAccess property in their value response, but multiple other properties are returned based on the entitlement type. + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description This endpoint should be used for access checks and enforcement. All entitlement types share the hasAccess property in their value response, but multiple other properties are returned based on the entitlement type. * - * For convenience reasons, /value works with both entitlementId and featureKey. - */ + * For convenience reasons, /value works with both entitlementId and featureKey. */ get: operations['getEntitlementValue'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } /** @description Get entitlement by id. For checking entitlement access, use the /value endpoint instead. */ get: operations['getEntitlement'] - /** - * @description Deleting an entitlement revokes access to the associated feature. As a single subject can only have one entitlement per featureKey, when "migrating" features you have to delete the old entitlements as well. - * As access and status checks can be historical queries, deleting an entitlement populates the deletedAt timestamp. When queried for a time before that, the entitlement is still considered active, you cannot have retroactive changes to access, which is important for, among other things, auditing. - */ + put?: never + post?: never + /** @description Deleting an entitlement revokes access to the associated feature. As a single subject can only have one entitlement per featureKey, when "migrating" features you have to delete the old entitlements as well. + * As access and status checks can be historical queries, deleting an entitlement populates the deletedAt timestamp. When queried for a time before that, the entitlement is still considered active, you cannot have retroactive changes to access, which is important for, among other things, auditing. */ delete: operations['deleteEntitlement'] + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementId}/history': { - /** - * @description Returns historical balance and usage data for the entitlement. The queried history can span accross multiple reset events. + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Returns historical balance and usage data for the entitlement. The queried history can span accross multiple reset events. * - * BurndownHistory returns a continous history of segments, where the segments are seperated by events that changed either the grant burndown priority or the usage period. + * BurndownHistory returns a continous history of segments, where the segments are seperated by events that changed either the grant burndown priority or the usage period. * - * WindowedHistory returns windowed usage data for the period enriched with balance information and the list of grants that were being burnt down in that window. - */ + * WindowedHistory returns windowed usage data for the period enriched with balance information and the list of grants that were being burnt down in that window. */ get: operations['getEntitlementHistory'] + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never } '/api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementId}/reset': { - /** - * @description Reset marks the start of a new usage period for the entitlement and initiates grant rollover. At the start of a period usage is zerod out and grants are rolled over based on their rollover settings. It would typically be synced with the subjects billing period to enforce usage based on their subscription. + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Reset marks the start of a new usage period for the entitlement and initiates grant rollover. At the start of a period usage is zerod out and grants are rolled over based on their rollover settings. It would typically be synced with the subjects billing period to enforce usage based on their subscription. * - * Usage is automatically reset for metered entitlements based on their usage period, but this endpoint allows to manually reset it at any time. When doing so the period anchor of the entitlement can be changed if needed. - */ + * Usage is automatically reset for metered entitlements based on their usage period, but this endpoint allows to manually reset it at any time. When doing so the period anchor of the entitlement can be changed if needed. */ post: operations['resetEntitlementUsage'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/subscriptions': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + post: operations['Subscriptions_create'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/subscriptions/{subscriptionId}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get: operations['getSubscription_getSubscription'] + put?: never + post?: never + delete?: never + options?: never + head?: never + /** @description Batch processing commands for manipulating running subscriptions. + * The key format is `/phases/{phaseKey}` or `/phases/{phaseKey}/items/{itemKey}`. + * + * Add operations insert a new member based on the creation input without altering the existing members. + * + * Remove operations remove the member from the collection / document. + * + * The extend operation extends the specific phase if possible, while delaying all subsequent phases by the same amount. */ + patch: operations['editSubscription'] + trace?: never + } + '/api/v1/subscriptions/{subscriptionId}/cancel': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Cancels the subscription. */ + post: operations['cancelSubscription'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/subscriptions/{subscriptionId}/migrate': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Migrates the subscripiton to the procided version of the plan. */ + post: operations['migrateSubscription'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api/v1/subscriptions/{subscriptionId}/unschedule-cancelation': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Cancels the scheduled cancelation. */ + post: operations['unscheduleCancelation'] + delete?: never + options?: never + head?: never + patch?: never + trace?: never } } - export type webhooks = Record - export interface components { schemas: { /** @description Address */ @@ -370,30 +1487,28 @@ export interface components { /** * @description Set of key-value pairs managed by the system. Cannot be modified by user. * @example { - * "externalId": "019142cc-a016-796a-8113-1a942fecd26d" - * } + * "externalId": "019142cc-a016-796a-8113-1a942fecd26d" + * } */ Annotations: { [key: string]: unknown } - /** - * @description App. - * One of: stripe - */ - App: components['schemas']['StripeApp'] - /** - * @description Abstract base model for installed apps. + /** @description App. + * One of: stripe */ + App: + | components['schemas']['StripeApp'] + | components['schemas']['SandboxApp'] + /** @description Abstract base model for installed apps. * - * Represent an app installed to the organization. - * This is an actual instance, with its own configuration and credentials. - */ + * Represent an app installed to the organization. + * This is an actual instance, with its own configuration and credentials. */ AppBase: { /** * ID * @description A unique identifier for the resource. * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - id: string + readonly id: string /** * Display name * @description Human-readable name for the resource. Between 1 and 256 characters. @@ -413,38 +1528,38 @@ export interface components { * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - deletedAt?: string + readonly deletedAt?: string /** @description The marketplace listing that this installed app is based on. */ - listing: components['schemas']['MarketplaceListing'] + readonly listing: components['schemas']['MarketplaceListing'] /** @description Status of the app connection. */ - status: components['schemas']['OpenMeter.App.AppStatus'] + readonly status: components['schemas']['AppStatus'] } /** * @description App capability. * - * Capabilities only exist in config so they don't extend the Resource model. + * Capabilities only exist in config so they don't extend the Resource model. * @example { - * "type": "collectPayments", - * "key": "stripe_collect_payment", - * "name": "Collect Payments", - * "description": "Stripe payments collects outstanding revenue with Stripe customer's default payment method." - * } + * "type": "collectPayments", + * "key": "stripe_collect_payment", + * "name": "Collect Payments", + * "description": "Stripe payments collects outstanding revenue with Stripe customer's default payment method." + * } */ AppCapability: { /** @description The capability type. */ @@ -477,6 +1592,64 @@ export interface components { /** @description The items in the page. */ items: components['schemas']['App'][] } + /** @description App reference + * + * Can be used as a short reference to an app if the full app object is not needed. */ + AppReference: { + /** + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + id: string + } + /** + * @description App installed status. + * @enum {string} + */ + AppStatus: 'ready' | 'unauthorized' + /** + * @description Type of the app. + * @enum {string} + */ + AppType: 'stripe' | 'sandbox' + /** @description A discount on plan. One of: percentage or amount. */ + AppliedDiscount: components['schemas']['AppliedDiscountPercentage'] + /** @description Percentage discount on plan. */ + AppliedDiscountPercentage: { + /** + * Type + * @description The type of the discount. + * @enum {string} + */ + type: 'percentage' + /** + * Percentage + * @description The percentage of the discount. + */ + percentage: number + /** + * Applies To + * @description The rate cards that the discount applies to. + * When not specified, the discount applies to all rate cards. + */ + appliesTo?: string[] + } + /** @description Percentage discount on plan. */ + AppliedDiscountPercentageUpdateItem: { + /** + * Percentage + * @description The percentage of the discount. + */ + percentage: number + /** + * Applies To + * @description The rate cards that the discount applies to. + * When not specified, the discount applies to all rate cards. + */ + appliesTo?: string[] + } + /** @description A discount on plan. One of: percentage or amount. */ + AppliedDiscountUpdateItem: components['schemas']['AppliedDiscountPercentageUpdateItem'] /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ BadRequestProblemResponse: components['schemas']['UnexpectedProblemResponse'] /** @description The balance history window. */ @@ -487,141 +1660,153 @@ export interface components { * @description The total usage of the feature in the period. * @example 100 */ - usage: number + readonly usage: number /** * Format: double * @description The entitlement balance at the start of the period. * @example 100 */ - balanceAtStart: number + readonly balanceAtStart: number } - /** @description Stripe CheckoutSession.custom_text */ - CheckoutSessionCustomTextAfterSubmitParams: { - afterSubmit?: { - message?: string - } - shippingAddress?: { - message?: string - } - submit?: { - message?: string - } - termsOfServiceAcceptance?: { - message?: string - } + /** @description Response for creating a pending charge */ + BillingCreateLineResult: { + /** The created line items */ + lines: components['schemas']['BillingInvoiceLine'][] } - /** - * @description Stripe CheckoutSession.ui_mode - * @enum {string} - */ - CheckoutSessionUIMode: 'embedded' | 'hosted' - /** @description Response from the client app (OpenMeter backend) to start the OAuth2 flow. */ - ClientAppStartResponse: { - /** @description The URL to start the OAuth2 authorization code grant flow. */ - url: string + /** @description CreateLinesRequest is the request for creating manual line items. */ + BillingCreateLinesRequest: { + /** The line to create */ + lines: components['schemas']['BillingInvoiceLineCreateItem'][] } - /** @description The request could not be completed due to a conflict with the current state of the target resource. */ - ConflictProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** - * @description [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country code. - * Custom two-letter country codes are also supported for convenience. - * @example US - */ - CountryCode: string - /** @description Create Stripe checkout session request. */ - CreateStripeCheckoutSessionRequest: { + BillingCreditNoteOriginalInvoiceRef: { + /** @enum {string} */ + type: 'credit_node_original_invoice' /** - * @description If not provided, the default Stripe app is used if any. - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * IssueAt reflects the time the document was issued. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z */ - appId?: string + issuedAt?: string + /** (Serial) Number of the referenced document. */ + number?: components['schemas']['BillingInvoiceNumber'] /** - * @description Provide a customer ID to use an existing OpenMeter customer. - * or provide a customer object to create a new customer. + * Link to the source document. + * Format: uri */ - customer: - | components['schemas']['CustomerId'] - | components['schemas']['Customer'] + url: string + } & WithRequired + /** @description Customer specific workflow overrides. */ + BillingCustomerOverride: { /** - * @description Stripe customer ID. - * If not provided OpenMeter creates a new Stripe customer or - * uses the OpenMeter customer's default Stripe customer ID. + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z */ - stripeCustomerId?: string - /** @description Options passed to Stripe when creating the checkout session. */ - options: components['schemas']['CreateStripeCheckoutSessionRequestOptions'] - } - /** @description Create Stripe checkout session options */ - CreateStripeCheckoutSessionRequestOptions: { - currency?: components['schemas']['CurrencyCode'] - cancelURL?: string - clientReferenceID?: string - customText?: components['schemas']['CheckoutSessionCustomTextAfterSubmitParams'] - metadata?: { - [key: string]: string - } - returnURL?: string - successURL?: string - uiMode?: components['schemas']['CheckoutSessionUIMode'] - paymentMethodTypes?: string[] - } - /** @description Create Stripe Checkout Session response. */ - CreateStripeCheckoutSessionResponse: { + readonly createdAt: string /** - * @description The OpenMeter customer ID. - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z */ - customerId: string - /** @description The Stripe customer ID. */ - stripeCustomerId: string - /** @description The checkout session ID. */ - sessionId: string - /** @description The checkout session setup intent ID. */ - setupIntentId: string - /** @description URL to show the checkout session. */ - url: string + readonly updatedAt: string /** - * @description Mode - * Always `setup` for now. + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z */ - mode: components['schemas']['StripeCheckoutSessionMode'] - /** @description Cancel URL. */ - cancelURL?: string - /** @description Success URL. */ - successURL?: string - /** @description Return URL. */ - returnURL?: string + readonly deletedAt?: string + workflow: components['schemas']['BillingCustomerWorkflowOverride'] + /** + * @description The billing profile this override is associated with. + * + * If not provided, the default billing profile is chosen if available. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + billingProfile?: string } /** - * @description Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. - * Custom three-letter currency codes are also supported for convenience. - * @example USD - */ - CurrencyCode: string - /** - * @description A customer object. - * @example { - * "id": "01G65Z755AFWAKHE12NY0CQ9FH", - * "name": "ACME Inc.", - * "usageAttribution": { - * "subjectKeys": [ - * "my_subject_key" - * ] - * }, - * "external": { - * "stripeCustomerId": "cus_xxxxxxxxxxxxxx" - * }, - * "createdAt": "2024-01-01T01:01:01.001Z", - * "updatedAt": "2024-01-01T01:01:01.001Z" - * } + * @description Order by options for customers. + * @enum {string} */ - Customer: { + BillingCustomerOverrideOrderBy: 'id' + /** @description Customer specific workflow overrides. */ + BillingCustomerWorkflowOverride: { + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** The collection settings for this workflow */ + collection?: components['schemas']['BillingWorkflowCollectionSettings'] + /** The invoicing settings for this workflow */ + invoicing?: components['schemas']['BillingWorkflowInvoicingSettings'] + /** The payment settings for this workflow */ + payment?: components['schemas']['BillingWorkflowPaymentSettings'] /** * ID * @description A unique identifier for the resource. * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - id: string + readonly id: string + taxApp: components['schemas']['App'] + invoicingApp: components['schemas']['App'] + paymentApp: components['schemas']['App'] + } + /** @description Customer specific workflow overrides. */ + BillingCustomerWorkflowOverrideCreate: { + /** The collection settings for this workflow */ + collection?: components['schemas']['BillingWorkflowCollectionSettings'] + /** The invoicing settings for this workflow */ + invoicing?: components['schemas']['BillingWorkflowInvoicingSettings'] + /** The payment settings for this workflow */ + payment?: components['schemas']['BillingWorkflowPaymentSettings'] + } + /** DocumentRef is used to describe a reference to an existing document (invoice). */ + BillingDocumentRef: components['schemas']['BillingCreditNoteOriginalInvoiceRef'] + /** @enum {string} */ + BillingDocumentRefType: 'credit_node_original_invoice' + /** DueDate contains an amount that should be paid by the given date. */ + BillingDueDate: { + /** + * When the payment is due. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + dueAt: string + /** Other details to take into account for the due date. */ + notes?: string + /** How much needs to be paid by the date. */ + amount: components['schemas']['Numeric'] + /** Percentage of the total that should be paid by the date. */ + percent?: components['schemas']['Percentage'] + /** If different from the parent document's base currency. */ + currency?: components['schemas']['CurrencyCode'] + } + /** @description BillingFlatFeeLine represents a line item that is sold to the customer as a flat fee. + * + * This object represents an item added via subscriptions. */ + BillingFlatFeeLine: { /** * Display name * @description Human-readable name for the resource. Between 1 and 256 characters. @@ -641,1564 +1826,1823 @@ export interface components { * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - deletedAt?: string + readonly deletedAt?: string /** - * Timezone - * @description Timezone of the customer. + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - timezone?: string + id: string + status: components['schemas']['BillingLineStatus'] + /** Discounts applied to this line. */ + discounts?: components['schemas']['BillingLineDiscount'][] + /** Charges applied to this line. */ + charges?: components['schemas']['BillingLineCharge'][] + /** The invoice this item belongs to. */ + invoice?: components['schemas']['BillingInvoiceReference'] + /** The currency of this line */ + currency: components['schemas']['CurrencyCode'] + /** Map of taxes to be applied and used in the invoice totals. */ + taxes?: components['schemas']['BillingTaxItem'][] + /** Tax overrides specify the tax configuration for this line. */ + taxOverrides?: components['schemas']['TaxConfig'] | null + /** Total sum of the line, including discounts and charges. */ + readonly total: components['schemas']['Numeric'] + /** Period of the line item applies to for revenue recognition pruposes. */ + period: components['schemas']['BillingPeriod'] + /** + * The time this line item should be invoiced. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + invoiceAt: string + /** @enum {string} */ + type: 'flat_fee' + /** Details about what is being sold. */ + item: components['schemas']['RateCardFlatFee'] + } + /** @description BillingFlatFeeLine represents a line item that is sold to the customer as a flat fee. + * + * This object represents an item added via subscriptions. */ + BillingFlatFeeLineCreateItem: { /** - * Usage Attribution - * @description Mapping to attribute metered usage to the customer + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - usageAttribution: components['schemas']['CustomerUsageAttribution'] + name: string /** - * Primary Email - * @description The primary email address of the customer. + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - primaryEmail?: string + description?: string /** - * Currency - * @description Currency of the customer. - * Used for billing, tax and invoicing. + * Metadata + * @description Additional metadata for the resource. */ - currency?: components['schemas']['CurrencyCode'] + metadata?: components['schemas']['Metadata'] + /** Discounts applied to this line. */ + discounts?: components['schemas']['BillingLineDiscount'][] + /** Charges applied to this line. */ + charges?: components['schemas']['BillingLineCharge'][] + /** The invoice this item belongs to. */ + invoice?: components['schemas']['BillingInvoiceReference'] + /** The currency of this line */ + currency: components['schemas']['CurrencyCode'] + /** Tax overrides specify the tax configuration for this line. */ + taxOverrides?: components['schemas']['TaxConfig'] | null + /** Period of the line item applies to for revenue recognition pruposes. */ + period: components['schemas']['BillingPeriod'] + /** + * The time this line item should be invoiced. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + invoiceAt: string + /** @enum {string} */ + type: 'flat_fee' + /** Details about what is being sold. */ + item: components['schemas']['RateCardFlatFee'] + } + /** @description BillingFlatFeeLine represents a line item that is sold to the customer as a flat fee. + * + * This object represents an item added via subscriptions. */ + BillingFlatFeeLineCreateOrUpdate: { /** - * Billing Address - * @description The billing address of the customer. - * Used for tax and invoicing. + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - billingAddress?: components['schemas']['Address'] + name: string /** - * External Mappings - * @description External mappings for the customer. + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - external?: components['schemas']['CustomerExternalMapping'] - } - /** @description External mappings for the customer. */ - CustomerExternalMapping: { + description?: string /** - * Stripe Customer - * @description The Stripe customer ID. - * Mapping to a Stripe Customer object. - * Required to use Stripe as an invocing provider. + * Metadata + * @description Additional metadata for the resource. */ - stripeCustomerId?: string - } - /** @description Create Stripe checkout session customer ID. */ - CustomerId: { + metadata?: components['schemas']['Metadata'] /** * @description ULID (Universally Unique Lexicographically Sortable Identifier). * @example 01G65Z755AFWAKHE12NY0CQ9FH */ id: string - } - /** @description A unique customer identifier. */ - CustomerIdentifier: string - /** @description A page of results. */ - CustomerList: { - /** @description The page number. */ - page: number - /** @description The number of items in the page. */ - pageSize: number - /** @description The total number of items. */ - totalCount: number - /** @description The items in the page. */ - items: components['schemas']['Customer'][] + /** Discounts applied to this line. */ + discounts?: components['schemas']['BillingLineDiscount'][] + /** Charges applied to this line. */ + charges?: components['schemas']['BillingLineCharge'][] + /** The invoice this item belongs to. */ + invoice?: components['schemas']['BillingInvoiceReference'] + /** The currency of this line */ + currency: components['schemas']['CurrencyCode'] + /** Tax overrides specify the tax configuration for this line. */ + taxOverrides?: components['schemas']['TaxConfig'] | null + /** Period of the line item applies to for revenue recognition pruposes. */ + period: components['schemas']['BillingPeriod'] + /** + * The time this line item should be invoiced. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + invoiceAt: string + /** @enum {string} */ + type: 'flat_fee' + /** Details about what is being sold. */ + item: components['schemas']['RateCardFlatFee'] } /** - * @description Mapping to attribute metered usage to the customer. - * One customer can have multiple subjects, - * but one subject can only belong to one customer. + * DocumentRef is used to describe an existing document or a specific part of it's contents. + * @description Omitted fields: + * period: Tax period in which the referred document had an effect required by some tax regimes and formats. + * stamps: Seals of approval from other organisations that may need to be listed. + * ext: Extensions for additional codes that may be required. */ - CustomerUsageAttribution: { + BillingGenericDocumentRef: { + /** Type of the document referenced. */ + type: components['schemas']['BillingDocumentRefType'] + /** Human readable description on why this reference is here or needs to be used. */ + reason?: string + /** Additional details about the document. */ + description?: string + } + /** Invoice represents an invoice in the system. */ + BillingInvoice: { /** - * SubjectKeys - * @description The subjects that are attributed to the customer. + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - subjectKeys: string[] - } - /** - * @description Entitlement templates are used to define the entitlements of a plan. - * Features are omitted from the entitlement template, as they are defined in the rate card. - */ - Entitlement: - | components['schemas']['EntitlementMetered'] - | components['schemas']['EntitlementStatic'] - | components['schemas']['EntitlementBoolean'] - /** @description Shared fields of the entitlement templates. */ - EntitlementBaseTemplate: { + readonly id: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly deletedAt?: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * + * For updates the updatedAt field is used to detect conflicts. + * @example 2024-01-01T01:01:01.001Z */ updatedAt: string + type: components['schemas']['BillingInvoiceType'] + /** The taxable entity supplying the goods or services. */ + supplier: components['schemas']['BillingParty'] + /** Legal entity receiving the goods or services. */ + customer: components['schemas']['BillingParty'] + /** + * (Serial) Number of the invoice + * @description Number specifies the human readable key used to reference this Invoice. + * + * The number only gets populated after the invoice had been issued. + * + * Please note that the number is (depending on the upstream settings) either unique for the + * whole organization or unique for the customer, or in multi (stripe) account setups unique for the + * account. + */ + number?: components['schemas']['BillingInvoiceNumber'] + /** Currency for all invoice totals. */ + currency: components['schemas']['CurrencyCode'] + /** Key information regarding previous invoices and potentially details as to why they were corrected. */ + preceding?: components['schemas']['BillingDocumentRef'][] + /** Summary of all the invoice totals, including taxes (calculated). */ + totals: components['schemas']['BillingInvoiceTotals'] + /** The status of the invoice. */ + status: components['schemas']['BillingInvoiceStatus'] + /** The details of the current invoice status */ + statusDetails: components['schemas']['BillingInvoiceStatusDetails'] + /** + * The time the invoice was issued. + * Format: date-time + * @description The time the invoice was issued. + * + * Depending on the status of the invoice this can mean multiple things: + * - draft, gathering: The time the invoice will be issued based on the workflow settings. + * - issued: The time the invoice was issued. + * @example 2023-01-01T01:01:01.001Z + */ + issuedAt?: string /** - * Deletion Time + * The time until the invoice is in draft status. * Format: date-time - * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @description The time until the invoice is in draft status. + * + * On draft invoice creation it is calculated from the workflow settings. + * + * If manual approval is required, the draftUntil time is set. + * @example 2023-01-01T01:01:01.001Z */ - deletedAt?: string - /** @description Additional metadata for the feature. */ - metadata?: components['schemas']['Metadata'] + draftUntil?: string /** - * @description Readonly unique ULID identifier. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * Due time of the fulfillment of the invoice. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + dueAt?: string + /** The period the invoice covers. If the invoice has no line items, it's not set. */ + period?: components['schemas']['BillingPeriod'] + /** + * The time the invoice was voided. + * Format: date-time + * @description The time the invoice was voided. + * + * If the invoice was voided, this field will be set to the time the invoice was voided. + * @example 2023-01-01T01:01:01.001Z + */ + voidedAt?: string + /** + * The workflow settings associated with this invoice + * @description The workflow associated with the invoice. + * + * It is always a snapshot of the workflow settings at the time of invoice creation. The + * field is optional as it should be explicitly requested with expand options. + */ + workflow?: components['schemas']['BillingInvoiceWorkflowSettings'] + /** List of invoice lines representing each of the items sold to the customer. */ + lines?: components['schemas']['BillingInvoiceLine'][] + /** Discounts or allowances applied to the complete invoice. */ + discounts?: components['schemas']['BillingInvoiceDiscount'][] + /** Information on when, how, and to whom the invoice should be paid. */ + payment?: components['schemas']['BillingInvoicePayment'] + /** Validation issues reported by the invoice workflow. */ + validationIssues?: components['schemas']['BillingValidationIssue'][] + } + /** @enum {string} */ + BillingInvoiceAction: 'advance' | 'approve' | 'delete' | 'retry' | 'void' + BillingInvoiceCreateInput: { + /** @description The pending line items to include in the invoice, if not provided: + * - all line items that have invoice_at < asOf will be included + * - all usage based line items will be included up to asOf, new usage-based line items will be staged for the rest + * of the billing cycle */ + IncludePendingLines?: string[] + /** + * Format: date-time + * @description The time as of which the invoice is created. + * + * If not provided, the current time is used. + * @example 2023-01-01T01:01:01.001Z + */ + AsOf?: string + } + /** Discount represents an allowance applied to the complete document independent from the individual lines. */ + BillingInvoiceDiscount: { + /** Base represents the value used as a base for percent calculations instead of the invoice's sum of lines. */ + base?: components['schemas']['Numeric'] + /** Percentage to apply to the base or invoice's sum. */ + percent?: components['schemas']['Percentage'] + /** Amount to apply (calculated if percent present). */ + amount: components['schemas']['Numeric'] + /** Text description as to why the discount was applied */ + reason?: string + } + /** + * @description InvoiceExpand specifies the parts of the invoice to expand in the list output. + * @enum {string} + */ + BillingInvoiceExpand: + | '*' + | 'lines' + | 'preceding' + | 'workflow' + | 'workflow.apps' + /** + * @description InvoiceExtendedStatus describes the extended status of an invoice. + * + * This is used to provide more detailed information about the status of the invoice. Useful for + * troubelshooting invoice workflow issues. + * @enum {string} + */ + BillingInvoiceExtendedStatus: + | 'gathering' + | 'draft' + | 'issuing' + | 'issued' + | 'draft_created' + | 'draft_manual_approval_needed' + | 'draft_validating' + | 'draft_invalid' + | 'draft_syncing' + | 'draft_sync_failed' + | 'draft_waiting_auto_approval' + | 'draft_ready_to_issue' + | 'issuing_syncing' + | 'issuing_sync_failed' + /** UnitPriceLine represents a line item that is sold to the customer based on a specific (unit) price. */ + BillingInvoiceLine: + | components['schemas']['BillingFlatFeeLine'] + | components['schemas']['BillingManualFeeLine'] + /** UnitPriceLine represents a line item that is sold to the customer based on a specific (unit) price. */ + BillingInvoiceLineCreateItem: + | components['schemas']['BillingFlatFeeLineCreateItem'] + | components['schemas']['BillingManualFeeLineCreateItem'] + /** UnitPriceLine represents a line item that is sold to the customer based on a specific (unit) price. */ + BillingInvoiceLineCreateOrUpdate: + | components['schemas']['BillingFlatFeeLineCreateOrUpdate'] + | components['schemas']['BillingManualFeeLineCreateOrUpdate'] + /** + * @description InvoiceNumber is a unique identifier for the invoice, generated by the + * invoicing app. + * + * The uniqueness depends on a lot of factors: + * - app setting (unique per app or unique per customer) + * - multiple app scenarios (multiple apps generating invoices with the same prefix) + * @example INV-2024-01-01-01 + */ + BillingInvoiceNumber: string + /** + * @description InvoiceOrderBy specifies the ordering options for invoice listing. + * @enum {string} + */ + BillingInvoiceOrderBy: + | 'customer.name' + | 'issuedAt' + | 'status' + | 'createdAt' + | 'updatedAt' + /** Payment contains details as to how the invoice should be paid. */ + BillingInvoicePayment: { + terms?: components['schemas']['BillingPaymentTerms'] + } + /** Reference to an invoice. */ + BillingInvoiceReference: { + /** + * The ID of the invoice. + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ id: string + /** The number of the invoice. */ + number?: components['schemas']['BillingInvoiceNumber'] + } + /** + * @description InvoiceStatus describes the status of an invoice. + * @enum {string} + */ + BillingInvoiceStatus: 'gathering' | 'draft' | 'issuing' | 'issued' + BillingInvoiceStatusDetails: { + /** Is the invoice editable? */ + immutable: boolean + /** Is the invoice in a failed state? */ + failed: boolean + /** Extended status information for the invoice. */ + extendedStatus: components['schemas']['BillingInvoiceExtendedStatus'] + /** The actions that can be performed on the invoice. */ + availableActions: components['schemas']['BillingInvoiceAction'][] + } + /** Totals contains the summaries of all calculations for the invoice. */ + BillingInvoiceTotals: { + /** Sum of all line item sums */ + sum: components['schemas']['Numeric'] + /** Sum of all document level discounts */ + discount?: components['schemas']['Numeric'] + /** Sum of all document level charges */ + charge?: components['schemas']['Numeric'] + /** If prices include tax, this is the total tax included in the price. */ + taxIncluded?: components['schemas']['Numeric'] + /** Sum of all line sums minus the discounts, plus the charges, without tax. */ + total: components['schemas']['Numeric'] + /** Total amount of tax to apply to the invoice. */ + tax?: components['schemas']['Numeric'] + /** Grand total after all taxes have been applied. */ + totalWithTax: components['schemas']['Numeric'] + /** Rounding amount to apply to the invoice in case the total and payable amounts don't quite match. */ + rounding?: components['schemas']['Numeric'] + /** Total amount to be paid after applying taxes and outlays. */ + payable: components['schemas']['Numeric'] + /** Total amount already paid in advance. */ + advance?: components['schemas']['Numeric'] + /** How much actually needs to be paid now. */ + due?: components['schemas']['Numeric'] + } + /** @enum {string} */ + BillingInvoiceType: 'standard' | 'credit_note' + BillingInvoiceWorkflowSettings: { + /** The apps that will be used to orchestrate the invoice's workflow. */ + apps?: components['schemas']['BillingProfileAppsOrReference'] + /** + * The billing profile on which the workflow was based on. + * @description sourceBillingProfileID is the billing profile on which the workflow was based on. + * + * The profile is snapshotted on invoice creation, after which it can be altered independently + * of the profile itself. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + sourceBillingProfileID: string + /** The workflow details used by this invoice. */ + workflow: components['schemas']['BillingWorkflowSettings'] + /** Timezone of the invoice's date fields. */ + timezone: string + } + /** LineCharge represents an amount added to the line, and will be applied before taxes. */ + BillingLineCharge: { /** - * Type - * @description The type of the entitlement. + * Percent + * @description Percentage if fixed amount not applied */ - type: components['schemas']['EntitlementType'] + percent?: components['schemas']['Percentage'] /** - * @description The identifier key unique to the subject - * @example customer-1 + * Amount + * @description Fixed discount amount to apply (calculated if percent present). */ - subjectKey: string + amount: components['schemas']['Numeric'] + /** Reason code. */ + code?: string + /** Text description as to why the discount was applied. */ + reason?: string + } + /** LineDiscount represents an amount deducted from the line, and will be applied before taxes. */ + BillingLineDiscount: { /** - * @description The feature the subject is entitled to use. - * @example example-feature-key + * Percent + * @description Percentage if fixed amount not applied */ - featureKey: string + percent?: components['schemas']['Percentage'] /** - * @description The feature the subject is entitled to use. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * Amount + * @description Fixed discount amount to apply (calculated if percent present). */ - featureId: string - /** @description The current usage period. */ - currentUsagePeriod?: components['schemas']['Period'] - /** @description The defined usage period of the entitlement */ - usagePeriod?: components['schemas']['RecurringPeriod'] + amount: components['schemas']['Numeric'] + /** Reason code. */ + code?: string + /** Text description as to why the discount was applied. */ + reason?: string } - /** @description Entitlement template of a boolean entitlement. */ - EntitlementBoolean: WithRequired< - { - /** @enum {string} */ - type: 'boolean' - /** - * Creation Time - * Format: date-time - * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" - */ - createdAt: string - /** - * Last Update Time - * Format: date-time - * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" - */ - updatedAt: string - /** - * Deletion Time - * Format: date-time - * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" - */ - deletedAt?: string - /** @description Additional metadata for the feature. */ - metadata?: components['schemas']['Metadata'] - /** - * @description Readonly unique ULID identifier. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV - */ - id: string - /** - * @description The identifier key unique to the subject - * @example customer-1 - */ - subjectKey: string - /** - * @description The feature the subject is entitled to use. - * @example example-feature-key - */ - featureKey: string - /** - * @description The feature the subject is entitled to use. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV - */ - featureId: string - /** @description The current usage period. */ - currentUsagePeriod?: components['schemas']['Period'] - /** @description The defined usage period of the entitlement */ - usagePeriod?: components['schemas']['RecurringPeriod'] - } & components['schemas']['EntitlementBaseTemplate'], - | 'type' - | 'createdAt' - | 'updatedAt' - | 'id' - | 'subjectKey' - | 'featureKey' - | 'featureId' - > - /** @description Create inputs for boolean entitlement */ - EntitlementBooleanCreateInputs: { + /** + * Line status specifies the status of the line. + * @enum {string} + */ + BillingLineStatus: 'valid' | 'deleted' | 'split' + /** @description BillingManualFeeLine represents a line item that is sold to the customer as a manually added fee. */ + BillingManualFeeLine: { /** - * @description The feature the subject is entitled to use. - * Either featureKey or featureId is required. - * @example example-feature-key + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - featureKey?: string + name: string /** - * @description The feature the subject is entitled to use. - * Either featureKey or featureId is required. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. */ - featureId?: string - /** @description Additional metadata for the feature. */ metadata?: components['schemas']['Metadata'] - /** @description The usage period associated with the entitlement. */ - usagePeriod?: components['schemas']['RecurringPeriodCreateInput'] - /** @enum {string} */ - type: 'boolean' - } - /** @description Create inputs for entitlement */ - EntitlementCreateInputs: - | components['schemas']['EntitlementMeteredCreateInputs'] - | components['schemas']['EntitlementStaticCreateInputs'] - | components['schemas']['EntitlementBooleanCreateInputs'] - /** @description The grant. */ - EntitlementGrant: { /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - deletedAt?: string + readonly deletedAt?: string /** - * Format: double - * @description The amount to grant. Should be a positive number. - * @example 100 + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - amount: number + id: string + status: components['schemas']['BillingLineStatus'] + /** Discounts applied to this line. */ + discounts?: components['schemas']['BillingLineDiscount'][] + /** Charges applied to this line. */ + charges?: components['schemas']['BillingLineCharge'][] + /** The invoice this item belongs to. */ + invoice?: components['schemas']['BillingInvoiceReference'] + /** The currency of this line */ + currency: components['schemas']['CurrencyCode'] + /** Map of taxes to be applied and used in the invoice totals. */ + taxes?: components['schemas']['BillingTaxItem'][] + /** Tax overrides specify the tax configuration for this line. */ + taxOverrides?: components['schemas']['TaxConfig'] | null + /** Total sum of the line, including discounts and charges. */ + readonly total: components['schemas']['Numeric'] + /** Period of the line item applies to for revenue recognition pruposes. */ + period: components['schemas']['BillingPeriod'] + /** + * The time this line item should be invoiced. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + invoiceAt: string + /** @enum {string} */ + type: 'manual_fee' + /** Price of the item being sold. */ + price: components['schemas']['Numeric'] + /** Quantity of the item being sold. */ + quantity: components['schemas']['Numeric'] + } + /** @description BillingManualFeeLine represents a line item that is sold to the customer as a manually added fee. */ + BillingManualFeeLineCreateItem: { /** - * Format: int8 - * @description The priority of the grant. Grants with higher priority are applied first. - * Priority is a positive decimal numbers. With lower numbers indicating higher importance. - * For example, a priority of 1 is more urgent than a priority of 2. - * When there are several grants available for the same subject, the system selects the grant with the highest priority. - * In cases where grants share the same priority level, the grant closest to its expiration will be used first. - * In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. - * @example 1 + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - priority?: number + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** Discounts applied to this line. */ + discounts?: components['schemas']['BillingLineDiscount'][] + /** Charges applied to this line. */ + charges?: components['schemas']['BillingLineCharge'][] + /** The invoice this item belongs to. */ + invoice?: components['schemas']['BillingInvoiceReference'] + /** The currency of this line */ + currency: components['schemas']['CurrencyCode'] + /** Tax overrides specify the tax configuration for this line. */ + taxOverrides?: components['schemas']['TaxConfig'] | null + /** Period of the line item applies to for revenue recognition pruposes. */ + period: components['schemas']['BillingPeriod'] + /** + * The time this line item should be invoiced. * Format: date-time - * @description Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). - * @example "2023-01-01T01:01:01.001Z" + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z */ - effectiveAt: string - /** @description The grant expiration definition */ - expiration: components['schemas']['ExpirationPeriod'] + invoiceAt: string + /** @enum {string} */ + type: 'manual_fee' + /** Price of the item being sold. */ + price: components['schemas']['Numeric'] + /** Quantity of the item being sold. */ + quantity: components['schemas']['Numeric'] + } + /** @description BillingManualFeeLine represents a line item that is sold to the customer as a manually added fee. */ + BillingManualFeeLineCreateOrUpdate: { /** - * Format: double - * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. - * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) - * @default 0 - * @example 100 + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - maxRolloverAmount?: number + name: string /** - * Format: double - * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. - * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) - * @default 0 - * @example 100 + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - minRolloverAmount?: number + description?: string /** - * @description The grant metadata. - * @example { - * "stripePaymentId": "pi_4OrAkhLvyihio9p51h9iiFnB" - * } + * Metadata + * @description Additional metadata for the resource. */ metadata?: components['schemas']['Metadata'] /** - * @description Readonly unique ULID identifier. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ id: string + /** Discounts applied to this line. */ + discounts?: components['schemas']['BillingLineDiscount'][] + /** Charges applied to this line. */ + charges?: components['schemas']['BillingLineCharge'][] + /** The invoice this item belongs to. */ + invoice?: components['schemas']['BillingInvoiceReference'] + /** The currency of this line */ + currency: components['schemas']['CurrencyCode'] + /** Tax overrides specify the tax configuration for this line. */ + taxOverrides?: components['schemas']['TaxConfig'] | null + /** Period of the line item applies to for revenue recognition pruposes. */ + period: components['schemas']['BillingPeriod'] + /** + * The time this line item should be invoiced. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + invoiceAt: string + /** @enum {string} */ + type: 'manual_fee' + /** Price of the item being sold. */ + price: components['schemas']['Numeric'] + /** Quantity of the item being sold. */ + quantity: components['schemas']['Numeric'] + } + /** Party represents a person or business entity. */ + BillingParty: { /** - * @description The unique entitlement ULID that the grant is associated with. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * ID of the party. + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + id?: string + /** Legal name or representation of the organization. */ + name?: string + /** The entity's legal ID code used for tax purposes. They may have other numbers, but we're only interested in those valid for tax purposes. */ + taxId?: components['schemas']['BillingTaxIdentity'] + /** Regular post addresses for where information should be sent if needed. */ + addresses?: components['schemas']['Address'][] + } + /** Party represents a person or business entity. */ + BillingPartyCreate: { + /** Legal name or representation of the organization. */ + name?: string + /** The entity's legal ID code used for tax purposes. They may have other numbers, but we're only interested in those valid for tax purposes. */ + taxId?: components['schemas']['BillingTaxIdentity'] + /** Regular post addresses for where information should be sent if needed. */ + addresses?: components['schemas']['Address'][] + } + /** PaymentTermDueDate defines the terms for payment on a specific date. */ + BillingPaymentTermDueDate: { + /** + * Type of terms to be applied. + * @enum {string} */ - entitlementId: string + type: 'due_date' + /** Text detail of the chosen payment terms. */ + detail?: string + /** Description of the conditions for payment. */ + notes?: string + /** When the payment is due. */ + dueAt: components['schemas']['BillingDueDate'][] + } + /** PaymentTermInstant defines the terms for payment on receipt of invoice. */ + BillingPaymentTermInstant: { /** - * Format: date-time - * @description The next time the grant will recurr. - * @example "2023-01-01T01:01:01.001Z" + * Type of terms to be applied. + * @enum {string} */ - nextRecurrence?: string + type: 'instant' + /** Text detail of the chosen payment terms. */ + detail?: string + /** Description of the conditions for payment. */ + notes?: string + } + /** PaymentTerms defines the terms for payment. */ + BillingPaymentTerms: + | components['schemas']['BillingPaymentTermInstant'] + | components['schemas']['BillingPaymentTermDueDate'] + /** Period represents a time range. */ + BillingPeriod: { /** + * Start of the period. * Format: date-time - * @description The time the grant expires. - * @example "2023-01-01T01:01:01.001Z" + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z */ - expiresAt?: string + start: string /** + * End of the period. * Format: date-time - * @description The time the grant was voided. - * @example "2023-01-01T01:01:01.001Z" + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z */ - voidedAt?: string - /** @description The recurrence period of the grant. */ - recurrence?: components['schemas']['RecurringPeriod'] + end: string } - /** @description The grant creation input. */ - EntitlementGrantCreateInput: { + /** @description Profile represents a billing profile */ + BillingProfile: { /** - * Format: double - * @description The amount to grant. Should be a positive number. - * @example 100 + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - amount: number + readonly id: string /** - * Format: int8 - * @description The priority of the grant. Grants with higher priority are applied first. - * Priority is a positive decimal numbers. With lower numbers indicating higher importance. - * For example, a priority of 1 is more urgent than a priority of 2. - * When there are several grants available for the same subject, the system selects the grant with the highest priority. - * In cases where grants share the same priority level, the grant closest to its expiration will be used first. - * In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. - * @example 1 + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - priority?: number + name: string /** - * Format: date-time - * @description Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). - * @example "2023-01-01T01:01:01.001Z" + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - effectiveAt: string - /** @description The grant expiration definition */ - expiration: components['schemas']['ExpirationPeriod'] - /** - * Format: double - * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. - * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) - * @default 0 - * @example 100 - */ - maxRolloverAmount?: number - /** - * Format: double - * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. - * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) - * @default 0 - * @example 100 - */ - minRolloverAmount?: number + description?: string /** - * @description The grant metadata. - * @example { - * "stripePaymentId": "pi_4OrAkhLvyihio9p51h9iiFnB" - * } + * Metadata + * @description Additional metadata for the resource. */ metadata?: components['schemas']['Metadata'] - /** @description The subject of the grant. */ - recurrence?: components['schemas']['RecurringPeriodCreateInput'] - } - /** - * @description Metered entitlements are useful for many different use cases, from setting up usage based access to implementing complex credit systems. - * Access is determined based on feature usage using a balance calculation (the "usage allowance" provided by the issued grants is "burnt down" by the usage). - */ - EntitlementMetered: { - /** @enum {string} */ - type: 'metered' - /** - * Soft limit - * @description If softLimit=true the subject can use the feature even if the entitlement is exhausted, hasAccess will always be true. - * @default false - */ - isSoftLimit?: boolean - /** - * @deprecated - * @description Deprecated, ignored by the backend. Please use isSoftLimit instead; this field will be removed in the future. - * @default false - */ - isUnlimited?: boolean - /** - * Initial grant amount - * Format: double - * @description You can grant usage automatically alongside the entitlement, the example scenario would be creating a starting balance. - * If an amount is specified here, a grant will be created alongside the entitlement with the specified amount. - * That grant will have it's rollover settings configured in a way that after each reset operation, the balance will return the original amount specified here. - * Manually creating such a grant would mean having the "amount", "minRolloverAmount", and "maxRolloverAmount" fields all be the same. - */ - issueAfterReset?: number - /** - * Issue grant after reset priority - * Format: uint8 - * @description Defines the grant priority for the default grant. - * @default 1 - */ - issueAfterResetPriority?: number - /** - * Preserve overage at reset - * @description If true, the overage is preserved at reset. If false, the usage is reset to 0. - * @default false - */ - preserveOverageAtReset?: boolean /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" - */ - createdAt: string - /** - * Last Update Time - * Format: date-time - * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly createdAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" - */ - deletedAt?: string - /** @description Additional metadata for the feature. */ - metadata?: components['schemas']['Metadata'] - /** - * @description Readonly unique ULID identifier. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * @example 2024-01-01T01:01:01.001Z */ - id: string - /** - * @description The identifier key unique to the subject - * @example customer-1 - */ - subjectKey: string - /** - * @description The feature the subject is entitled to use. - * @example example-feature-key - */ - featureKey: string - /** - * @description The feature the subject is entitled to use. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV - */ - featureId: string + readonly deletedAt?: string /** + * Last update time of the resource * Format: date-time - * @description The time the last reset happened. - * @example "2023-01-01T01:01:01.001Z" + * @description When the resource was last updated. + * + * For updates this field must be set to the last update time to detect conflicts. + * @example 2023-01-01T01:01:01.001Z */ - lastReset: string - /** @description The current usage period. */ - currentUsagePeriod: components['schemas']['Period'] + updatedAt: string + /** The name and contact information for the supplier this billing profile represents */ + supplier: components['schemas']['BillingParty'] + /** The billing workflow settings for this profile */ + workflow: components['schemas']['BillingWorkflow'] + /** The applications used by this billing profile */ + apps: components['schemas']['BillingProfileAppsOrReference'] + /** Is this the default profile? */ + default: boolean + } + /** @description ProfileAppsReference represents the references (id, type) to the apps used by a billing profile */ + BillingProfileAppReferences: { + /** The tax app used for this workflow */ + tax: components['schemas']['AppReference'] + /** The invoicing app used for this workflow */ + invoicing: components['schemas']['AppReference'] + /** The payment app used for this workflow */ + payment: components['schemas']['AppReference'] + } + /** @description ProfileApps represents the applications used by a billing profile */ + BillingProfileApps: { + tax: components['schemas']['App'] + invoicing: components['schemas']['App'] + payment: components['schemas']['App'] + } + BillingProfileAppsOrReference: + | components['schemas']['BillingProfileApps'] + | components['schemas']['BillingProfileAppReferences'] + /** @description ProfileCreateAppsInput represents the input for creating a billing profile's apps */ + BillingProfileCreateAppsInput: { + /** The tax app used for this workflow */ + tax: components['schemas']['BillingWorkflowAppIdOrType'] + /** The invoicing app used for this workflow */ + invoicing: components['schemas']['BillingWorkflowAppIdOrType'] + /** The payment app used for this workflow */ + payment: components['schemas']['BillingWorkflowAppIdOrType'] + } + /** @description ProfileCreateInput represents the input for creating a billing profile */ + BillingProfileCreateInput: { /** - * Format: date-time - * @description The time from which usage is measured. If not specified on creation, defaults to entitlement creation time. - * @example "2023-01-01T01:01:01.001Z" + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - measureUsageFrom: string - /** @description THe usage period of the entitlement. */ - usagePeriod: components['schemas']['RecurringPeriod'] - } - /** @description Create inpurs for metered entitlement */ - EntitlementMeteredCreateInputs: { + name: string /** - * @description The feature the subject is entitled to use. - * Either featureKey or featureId is required. - * @example example-feature-key + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - featureKey?: string + description?: string /** - * @description The feature the subject is entitled to use. - * Either featureKey or featureId is required. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * Metadata + * @description Additional metadata for the resource. */ - featureId?: string - /** @description Additional metadata for the feature. */ metadata?: components['schemas']['Metadata'] - /** @enum {string} */ - type: 'metered' - /** - * Soft limit - * @description If softLimit=true the subject can use the feature even if the entitlement is exhausted, hasAccess will always be true. - * @default false - */ - isSoftLimit?: boolean + /** The name and contact information for the supplier this billing profile represents */ + supplier: components['schemas']['BillingPartyCreate'] + /** The billing workflow settings for this profile */ + workflow: components['schemas']['BillingWorkflow'] + /** Is this the default profile? */ + default: boolean + apps: components['schemas']['BillingProfileCreateAppsInput'] + } + /** @description Profile represents a billing profile */ + BillingProfileCreateOrUpdate: { /** - * @deprecated - * @description Deprecated, ignored by the backend. Please use isSoftLimit instead; this field will be removed in the future. - * @default false + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - isUnlimited?: boolean - /** @description The usage period associated with the entitlement. */ - usagePeriod: components['schemas']['RecurringPeriodCreateInput'] - /** @description Defines the time from which usage is measured. If not specified on creation, defaults to entitlement creation time. */ - measureUsageFrom?: components['schemas']['MeasureUsageFrom'] + name: string /** - * Initial grant amount - * Format: double - * @description You can grant usage automatically alongside the entitlement, the example scenario would be creating a starting balance. - * If an amount is specified here, a grant will be created alongside the entitlement with the specified amount. - * That grant will have it's rollover settings configured in a way that after each reset operation, the balance will return the original amount specified here. - * Manually creating such a grant would mean having the "amount", "minRolloverAmount", and "maxRolloverAmount" fields all be the same. + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - issueAfterReset?: number + description?: string /** - * Issue grant after reset priority - * Format: uint8 - * @description Defines the grant priority for the default grant. - * @default 1 + * Metadata + * @description Additional metadata for the resource. */ - issueAfterResetPriority?: number + metadata?: components['schemas']['Metadata'] /** - * Preserve overage at reset - * @description If true, the overage is preserved at reset. If false, the usage is reset to 0. - * @default false + * Last update time of the resource + * Format: date-time + * @description When the resource was last updated. + * + * For updates this field must be set to the last update time to detect conflicts. + * @example 2023-01-01T01:01:01.001Z */ - preserveOverageAtReset?: boolean + updatedAt: string + /** The name and contact information for the supplier this billing profile represents */ + supplier: components['schemas']['BillingParty'] + /** The billing workflow settings for this profile */ + workflow: components['schemas']['BillingWorkflow'] + /** Is this the default profile? */ + default: boolean } /** - * @description Order by options for entitlements. + * @description ProfileExpand details what profile fields to expand * @enum {string} */ - EntitlementOrderBy: 'createdAt' | 'updatedAt' - /** @description Paginated response */ - EntitlementPaginatedResponse: { - /** - * @description The items in the current page. - * @example 500 - */ - totalCount: number + BillingProfileExpand: 'apps' | '*' + /** + * @description ProfileOrderBy specifies the ordering options for profiles + * @enum {string} + */ + BillingProfileOrderBy: 'createdAt' | 'updatedAt' | 'default' | 'name' + /** @enum {string} */ + BillingTaxBehavior: 'inclusive' | 'exclusive' + BillingTaxIdentificationCode: string + /** Identity stores the details required to identify an entity for tax purposes in a specific country. */ + BillingTaxIdentity: { + /** Normalized tax code shown on the original identity document. */ + code?: components['schemas']['BillingTaxIdentificationCode'] + } + BillingTaxItem: { + /** Tax provider configuration. */ + config?: components['schemas']['TaxConfig'] + /** Percent defines the percentage set manually or determined from the rate + * key (calculated if rate present). A nil percent implies that this tax combo + * is **exempt** from tax. */ + percent?: components['schemas']['Percentage'] + /** Some countries require an additional surcharge (calculated if rate present). */ + surcharge?: components['schemas']['Numeric'] + /** Is the tax item inclusive or exclusive of the base amount. */ + behavior?: components['schemas']['BillingTaxBehavior'] + } + /** @description ValidationIssue captures any validation issues related to the invoice. + * + * Issues with severity "critical" will prevent the invoice from being issued. */ + BillingValidationIssue: { + /** The severity of the issue. */ + severity: components['schemas']['BillingValidationIssueSeverity'] + /** The field that the issue is related to, if available in JSON path format. */ + field?: string + /** Machine indentifiable code for the issue, if available. */ + code?: string + /** Component reporting the issue. */ + component: string + /** A human-readable description of the issue. */ + message: string + /** Metadata */ + metadata?: components['schemas']['Metadata'] + } + /** + * @description ValidationIssueSeverity describes the severity of a validation issue. + * + * Issues with severity "critical" will prevent the invoice from being issued. + * @enum {string} + */ + BillingValidationIssueSeverity: 'critical' | 'warning' + /** @description InvoiceVoidAction describes how to handle the voided line items. */ + BillingVoidInvoiceAction: { + /** How much of the total line items to be voided? (e.g. 100% means all charges are voided) */ + percentage: components['schemas']['Percentage'] + /** How to handle the voided line items, default: pending */ + action: components['schemas']['BillingVoidInvoiceLineAction'] + } + /** @description Request to void an invoice */ + BillingVoidInvoiceInput: { /** - * @description The items in the current page. - * @example 1 + * The action to take on the voided lines. + * @description The action to take on the voided line items. */ - page: number + action: components['schemas']['BillingVoidInvoiceAction'] /** - * @description The items in the current page. - * @example 100 + * The reason for voiding the invoice + * @description The reason for voiding the invoice. */ - pageSize: number - /** @description The items in the current page. */ - items: components['schemas']['Entitlement'][] + reason: string + /** @description Per line item overrides for the action. + * + * If not specified, the `action` will be applied to all line items. */ + overrides: + | components['schemas']['BillingVoidInvoiceLineOverride'][] + | null } - /** @description A static entitlement. */ - EntitlementStatic: { - /** @enum {string} */ - type: 'static' + /** + * VoidInvoiceLineAction describes how to handle the voidied line item in the invoice. + * @enum {string} + */ + BillingVoidInvoiceLineAction: 'discard' | 'pending' | 'pending_next_cycle' + /** @description VoidInvoiceLineOverride describes how to handle a specific line item in the invoice when voiding. */ + BillingVoidInvoiceLineOverride: { /** - * Format: json - * @description The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. - * @example { "integrations": ["github"] } + * The line item ID to override + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - config: string + lineId: string + /** The action to take on the line item */ + action: components['schemas']['BillingVoidInvoiceAction'] + } + /** @description Workflow represents a billing workflow */ + BillingWorkflow: { /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" - */ - deletedAt?: string - /** @description Additional metadata for the feature. */ - metadata?: components['schemas']['Metadata'] - /** - * @description Readonly unique ULID identifier. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV - */ - id: string - /** - * @description The identifier key unique to the subject - * @example customer-1 - */ - subjectKey: string - /** - * @description The feature the subject is entitled to use. - * @example example-feature-key + * @example 2024-01-01T01:01:01.001Z */ - featureKey: string + readonly deletedAt?: string + /** The collection settings for this workflow */ + collection?: components['schemas']['BillingWorkflowCollectionSettings'] + /** The invoicing settings for this workflow */ + invoicing?: components['schemas']['BillingWorkflowInvoicingSettings'] + /** The payment settings for this workflow */ + payment?: components['schemas']['BillingWorkflowPaymentSettings'] /** - * @description The feature the subject is entitled to use. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - featureId: string - /** @description The current usage period. */ - currentUsagePeriod?: components['schemas']['Period'] - /** @description The defined usage period of the entitlement */ - usagePeriod?: components['schemas']['RecurringPeriod'] + readonly id: string } - /** @description Create inputs for static entitlement */ - EntitlementStaticCreateInputs: { - /** - * @description The feature the subject is entitled to use. - * Either featureKey or featureId is required. - * @example example-feature-key - */ - featureKey?: string + /** @description AppIdOrType can be used to reference an app during creation only. + * + * This can be either an AppType or the ULID of an app. */ + BillingWorkflowAppIdOrType: string + /** + * Collection alignment + * @description CollectionAlignment specifies when the pending line items should be collected into + * an invoice. + * @enum {string} + */ + BillingWorkflowCollectionAlignment: 'subscription' + /** + * Collection method + * @description CollectionMethod specifies how the invoice should be collected (automatic vs manual) + * @enum {string} + */ + BillingWorkflowCollectionMethod: 'charge_automatically' | 'send_invoice' + /** Workflow collection specifies how to collect the pending line items for an invoice */ + BillingWorkflowCollectionSettings: { /** - * @description The feature the subject is entitled to use. - * Either featureKey or featureId is required. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * @description When to collect the pending line items into an invoice. + * @default subscription */ - featureId?: string - /** @description Additional metadata for the feature. */ - metadata?: components['schemas']['Metadata'] - /** @description The usage period associated with the entitlement. */ - usagePeriod?: components['schemas']['RecurringPeriodCreateInput'] - /** @enum {string} */ - type: 'static' + alignment: components['schemas']['BillingWorkflowCollectionAlignment'] /** - * Format: json - * @description The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. - * @example { "integrations": ["github"] } + * Format: ISO8601 + * @description The interval for collecting the pending line items into an invoice. + * @default PT1H + * @example P1D */ - config: string + interval: string } /** - * @description Type of the entitlement. - * @enum {string} + * Workflow invoice settings + * @description WorkflowInvoice represents the invoice settings for a billing workflow */ - EntitlementType: 'metered' | 'boolean' | 'static' - /** @description Entitlements are the core of OpenMeter access management. They define access to features for subjects. Entitlements can be metered, boolean, or static. */ - EntitlementValue: { + BillingWorkflowInvoicingSettings: { /** - * @description Whether the subject has access to the feature. Shared accross all entitlement types. - * @example true + * @description Whether to automatically issue the invoice after the draftPeriod has passed. + * @default true */ - hasAccess: boolean + autoAdvance: boolean /** - * Format: double - * @description Only available for metered entitlements. Metered entitlements are built around a balance calculation where feature usage is deducted from the issued grants. Balance represents the remaining balance of the entitlement, it's value never turns negative. - * @example 100 + * Format: ISO8601 + * @description The period for the invoice to be kept in draft status for manual reviews. + * @default P1D + * @example P1D */ - balance?: number + draftPeriod: string /** - * Format: double - * @description Only available for metered entitlements. Returns the total feature usage in the current period. - * @example 50 + * Format: ISO8601 + * @description The period after which the invoice is due. + * @default P7D + * @example P1D */ - usage?: number - /** - * Format: double - * @description Only available for metered entitlements. Overage represents the usage that wasn't covered by grants, e.g. if the subject had a total feature usage of 100 in the period but they were only granted 80, there would be 20 overage. - * @example 0 - */ - overage?: number - /** - * @description Only available for static entitlements. The JSON parsable config of the entitlement. - * @example { key: "value" } - */ - config?: string + dueAfter: string } /** - * @description CloudEvents Specification JSON Schema - * @example { - * "id": "5c10fade-1c9e-4d6c-8275-c52c36731d3c", - * "source": "service-name", - * "specversion": "1.0", - * "type": "prompt", - * "subject": "customer-id", - * "time": "2023-01-01T01:01:01.001Z" - * } + * Workflow payment settings + * @description WorkflowPaymentSettings represents the payment settings for a billing workflow */ - Event: { - /** - * @description Identifies the event. - * @example 5c10fade-1c9e-4d6c-8275-c52c36731d3c - */ - id: string + BillingWorkflowPaymentSettings: { + /** @default charge_automatically */ + collectionMethod: components['schemas']['BillingWorkflowCollectionMethod'] + } + BillingWorkflowSettings: { + /** The collection settings for this workflow */ + collection?: components['schemas']['BillingWorkflowCollectionSettings'] + /** The invoicing settings for this workflow */ + invoicing?: components['schemas']['BillingWorkflowInvoicingSettings'] + /** The payment settings for this workflow */ + payment?: components['schemas']['BillingWorkflowPaymentSettings'] + } + /** @description Stripe CheckoutSession.custom_text */ + CheckoutSessionCustomTextAfterSubmitParams: { + afterSubmit?: { + message?: string + } + shippingAddress?: { + message?: string + } + submit?: { + message?: string + } + termsOfServiceAcceptance?: { + message?: string + } + } + /** + * @description Stripe CheckoutSession.ui_mode + * @enum {string} + */ + CheckoutSessionUIMode: 'embedded' | 'hosted' + /** @description Response from the client app (OpenMeter backend) to start the OAuth2 flow. */ + ClientAppStartResponse: { + /** @description The URL to start the OAuth2 authorization code grant flow. */ + url: string + } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + ConflictProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** + * @description [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country code. + * Custom two-letter country codes are also supported for convenience. + * @example US + */ + CountryCode: string + /** @description Create Stripe checkout session request. */ + CreateStripeCheckoutSessionRequest: { /** - * Format: uri-reference - * @description Identifies the context in which an event happened. - * @example service-name + * @description If not provided, the default Stripe app is used if any. + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - source: string + appId?: string + /** @description Provide a customer ID to use an existing OpenMeter customer. + * or provide a customer object to create a new customer. */ + customer: + | components['schemas']['CustomerId'] + | components['schemas']['Customer'] + /** @description Stripe customer ID. + * If not provided OpenMeter creates a new Stripe customer or + * uses the OpenMeter customer's default Stripe customer ID. */ + stripeCustomerId?: string + /** @description Options passed to Stripe when creating the checkout session. */ + options: components['schemas']['CreateStripeCheckoutSessionRequestOptions'] + } + /** @description Create Stripe checkout session options */ + CreateStripeCheckoutSessionRequestOptions: { + currency?: components['schemas']['CurrencyCode'] + cancelURL?: string + clientReferenceID?: string + customText?: components['schemas']['CheckoutSessionCustomTextAfterSubmitParams'] + metadata?: { + [key: string]: string + } + returnURL?: string + successURL?: string + uiMode?: components['schemas']['CheckoutSessionUIMode'] + paymentMethodTypes?: string[] + } + /** @description Create Stripe Checkout Session response. */ + CreateStripeCheckoutSessionResult: { /** - * @description The version of the CloudEvents specification which the event uses. - * @default 1.0 - * @example 1.0 + * @description The OpenMeter customer ID. + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - specversion: string + customerId: string + /** @description The Stripe customer ID. */ + stripeCustomerId: string + /** @description The checkout session ID. */ + sessionId: string + /** @description The checkout session setup intent ID. */ + setupIntentId: string + /** @description URL to show the checkout session. */ + url: string + /** @description Mode + * Always `setup` for now. */ + mode: components['schemas']['StripeCheckoutSessionMode'] + /** @description Cancel URL. */ + cancelURL?: string + /** @description Success URL. */ + successURL?: string + /** @description Return URL. */ + returnURL?: string + } + /** @description Create subscription request body. */ + CreateSubscriptionRequestBody: { /** - * @description Contains a value describing the type of event related to the originating occurrence. - * @example com.example.someevent + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - type: string + customerId: string + plan: { + /** @description A key is a unique string that is used to identify a resource. */ + key: string + version: number + } + currency: components['schemas']['CurrencyCode'] /** - * @description Content type of the data value. Must adhere to RFC 2046 format. - * @example application/json + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z */ - datacontenttype?: string | null + activeFrom: string + /** @description Batch processing commands for customizing the susbcription. + * The key format is `/phases/{phaseKey}/items/{itemKey}`. + * + * Add operations insert a new member based on the creation input without altering the existing members. + * + * Remove operations remove the member from the document. */ + customizations: ( + | components['schemas']['SubscriptionEditAddItem'] + | components['schemas']['SubscriptionEditRemoveItem'] + )[] + } + /** + * @description Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. + * Custom three-letter currency codes are also supported for convenience. + * @example USD + */ + CurrencyCode: string + /** + * @description A customer object. + * @example { + * "id": "01G65Z755AFWAKHE12NY0CQ9FH", + * "name": "ACME Inc.", + * "usageAttribution": { + * "subjectKeys": [ + * "my_subject_key" + * ] + * }, + * "external": { + * "stripeCustomerId": "cus_xxxxxxxxxxxxxx" + * }, + * "createdAt": "2024-01-01T01:01:01.001Z", + * "updatedAt": "2024-01-01T01:01:01.001Z" + * } + */ + Customer: { /** - * Format: uri - * @description Identifies the schema that data adheres to. + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - dataschema?: string | null + readonly id: string /** - * @description Describes the subject of the event in the context of the event producer (identified by source). - * @example customer-id + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. */ - subject?: string + name: string /** - * Format: date-time - * @description Timestamp of when the occurrence happened. Must adhere to RFC 3339. - * @example "2023-01-01T01:01:01.001Z" + * Description + * @description Optional description of the resource. Maximum 1024 characters. */ - time?: string | null - /** @description The event payload. */ - data?: Record | string | null - } - /** - * @description The expiration duration enum - * @enum {string} - */ - ExpirationDuration: 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR' - /** @description The grant expiration definition */ - ExpirationPeriod: { - /** @description The unit of time for the expiration period. */ - duration: components['schemas']['ExpirationDuration'] + description?: string /** - * @description The number of time units in the expiration period. - * @example 12 + * Metadata + * @description Additional metadata for the resource. */ - count: number - } - /** - * @description Represents a feature that can be enabled or disabled for a plan. - * Used both for product catalog and entitlements. - */ - Feature: { + metadata?: components['schemas']['Metadata'] /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - deletedAt?: string + readonly deletedAt?: string /** - * Archival Time - * Format: date-time - * @description Timestamp of when the resource was archived. - * @example "2023-01-01T01:01:01.001Z" + * Timezone + * @description Timezone of the customer. */ - archivedAt?: string + timezone?: string /** - * The unique key of the feature - * @description A key is a unique string that is used to identify a resource. + * Usage Attribution + * @description Mapping to attribute metered usage to the customer */ - key: string - /** The human-readable name of the feature */ - name: string + usageAttribution: components['schemas']['CustomerUsageAttribution'] /** - * Optional metadata - * @example { - * "key": "value" - * } + * Primary Email + * @description The primary email address of the customer. */ - metadata?: components['schemas']['Metadata'] + primaryEmail?: string /** - * Meter slug - * @description A key is a unique string that is used to identify a resource. - * @example tokens_total + * Currency + * @description Currency of the customer. + * Used for billing, tax and invoicing. */ - meterSlug?: string + currency?: components['schemas']['CurrencyCode'] /** - * Meter group by filters - * @description Optional meter group by filters. - * Useful if the meter scope is broader than what feature tracks. - * Example scenario would be a meter tracking all token use with groupBy fields for the model, - * then the feature could filter for model=gpt-4. - * @example { - * "model": "gpt-4", - * "type": "input" - * } + * Billing Address + * @description The billing address of the customer. + * Used for tax and invoicing. */ - meterGroupByFilters?: { - [key: string]: string - } + billingAddress?: components['schemas']['Address'] /** - * @description Readonly unique ULID identifier. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * External Mappings + * @description External mappings for the customer. + */ + external?: components['schemas']['CustomerExternalMapping'] + } + /** @description External mappings for the customer. */ + CustomerExternalMapping: { + /** + * Stripe Customer + * @description The Stripe customer ID. + * Mapping to a Stripe Customer object. + * Required to use Stripe as an invocing provider. + */ + stripeCustomerId?: string + } + /** @description Create Stripe checkout session customer ID. */ + CustomerId: { + /** + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ id: string } + /** @description A page of results. */ + CustomerList: { + /** @description The page number. */ + page: number + /** @description The number of items in the page. */ + pageSize: number + /** @description The total number of items. */ + totalCount: number + /** @description The items in the page. */ + items: components['schemas']['Customer'][] + } /** - * @description Represents a feature that can be enabled or disabled for a plan. - * Used both for product catalog and entitlements. + * @description Order by options for customers. + * @enum {string} */ - FeatureCreateInputs: { + CustomerOrderBy: 'id' | 'name' | 'createdAt' + /** @description Paginated response */ + CustomerOverridePaginatedResponse: { /** - * The unique key of the feature - * @description A key is a unique string that is used to identify a resource. + * @description The items in the current page. + * @example 500 */ - key: string - /** The human-readable name of the feature */ - name: string + totalCount: number /** - * Optional metadata - * @example { - * "key": "value" - * } + * @description The items in the current page. + * @example 1 */ - metadata?: components['schemas']['Metadata'] + page: number /** - * Meter slug - * @description A key is a unique string that is used to identify a resource. - * @example tokens_total + * @description The items in the current page. + * @example 100 */ - meterSlug?: string + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['BillingCustomerOverride'][] + } + /** @description Mapping to attribute metered usage to the customer. + * One customer can have multiple subjects, + * but one subject can only belong to one customer. */ + CustomerUsageAttribution: { /** - * Meter group by filters - * @description Optional meter group by filters. - * Useful if the meter scope is broader than what feature tracks. - * Example scenario would be a meter tracking all token use with groupBy fields for the model, - * then the feature could filter for model=gpt-4. - * @example { - * "model": "gpt-4", - * "type": "input" - * } + * SubjectKeys + * @description The subjects that are attributed to the customer. */ - meterGroupByFilters?: { - [key: string]: string - } + subjectKeys: string[] } - /** @description Limited representation of a feature resource which includes only its unique identifiers (id, key). */ - FeatureMeta: { + /** @description Entitlement templates are used to define the entitlements of a plan. + * Features are omitted from the entitlement template, as they are defined in the rate card. */ + Entitlement: + | components['schemas']['EntitlementMetered'] + | components['schemas']['EntitlementStatic'] + | components['schemas']['EntitlementBoolean'] + /** @description Shared fields of the entitlement templates. */ + EntitlementBaseTemplate: { /** - * Feature Unique Identifier - * @description Unique identifier of a feature. + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** + * @description Readonly unique ULID identifier. * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - id: string + readonly id: string /** - * Feature Key - * @description The key is an immutable unique identifier of the feature used throughout the API, - * for example when interacting with a subject's entitlements. - * @example gpt4_tokens + * Type + * @description The type of the entitlement. */ - key: string - } - /** - * @description Order by options for features. - * @enum {string} - */ - FeatureOrderBy: 'id' | 'createdAt' | 'updatedAt' - /** @description Paginated response */ - FeaturePaginatedResponse: { + type: components['schemas']['EntitlementType'] /** - * @description The items in the current page. - * @example 500 + * @description The identifier key unique to the subject + * @example customer-1 */ - totalCount: number + subjectKey: string /** - * @description The items in the current page. - * @example 1 + * @description The feature the subject is entitled to use. + * @example example-feature-key */ - page: number + featureKey: string /** - * @description The items in the current page. - * @example 100 + * @description The feature the subject is entitled to use. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - pageSize: number - /** @description The items in the current page. */ - items: components['schemas']['Feature'][] + featureId: string + /** @description The current usage period. */ + currentUsagePeriod?: components['schemas']['Period'] + /** @description The defined usage period of the entitlement */ + usagePeriod?: components['schemas']['RecurringPeriod'] } - /** @description The server understood the request but refuses to authorize it. */ - ForbiddenProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** @description The server, while acting as a gateway or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request. */ - GatewayTimeoutProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** - * @description A segment of the grant burn down history. - * - * A given segment represents the usage of a grant between events that changed either the grant burn down priority order or the usag period. - */ - GrantBurnDownHistorySegment: { - /** @description The period of the segment. */ - period: components['schemas']['Period'] + /** @description Entitlement template of a boolean entitlement. */ + EntitlementBoolean: { + /** @enum {string} */ + type: 'boolean' /** - * Format: double - * @description The total usage of the grant in the period. - * @example 100 + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z */ - usage: number + readonly createdAt: string /** - * Format: double - * @description Overuse that wasn't covered by grants. - * @example 100 + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z */ - overage: number + readonly updatedAt: string /** - * Format: double - * @description entitlement balance at the start of the period. - * @example 100 + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z */ - balanceAtStart: number + readonly deletedAt?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] /** - * @description The balance breakdown of each active grant at the start of the period: GrantID: Balance - * @example { - * "01G65Z755AFWAKHE12NY0CQ9FH": 100 - * } + * @description Readonly unique ULID identifier. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - grantBalancesAtStart: { - [key: string]: number - } + readonly id: string /** - * Format: double - * @description The entitlement balance at the end of the period. - * @example 100 + * @description The identifier key unique to the subject + * @example customer-1 */ - balanceAtEnd: number + subjectKey: string /** - * @description The balance breakdown of each active grant at the end of the period: GrantID: Balance - * @example { - * "01G65Z755AFWAKHE12NY0CQ9FH": 100 - * } + * @description The feature the subject is entitled to use. + * @example example-feature-key */ - grantBalancesAtEnd: { - [key: string]: number - } - /** @description Which grants were actually burnt down in the period and by what amount. */ - grantUsages: readonly components['schemas']['GrantUsageRecord'][] - } - /** - * @description Order by options for grants. - * @enum {string} - */ - GrantOrderBy: 'id' | 'createdAt' | 'updatedAt' - /** @description Paginated response */ - GrantPaginatedResponse: { + featureKey: string /** - * @description The items in the current page. - * @example 500 + * @description The feature the subject is entitled to use. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - totalCount: number + featureId: string + /** @description The current usage period. */ + currentUsagePeriod?: components['schemas']['Period'] + /** @description The defined usage period of the entitlement */ + usagePeriod?: components['schemas']['RecurringPeriod'] + } & WithRequired< + components['schemas']['EntitlementBaseTemplate'], + | 'type' + | 'createdAt' + | 'updatedAt' + | 'id' + | 'subjectKey' + | 'featureKey' + | 'featureId' + > + /** @description Create inputs for boolean entitlement */ + EntitlementBooleanCreateInputs: { /** - * @description The items in the current page. - * @example 1 + * @description The feature the subject is entitled to use. + * Either featureKey or featureId is required. + * @example example-feature-key */ - page: number + featureKey?: string /** - * @description The items in the current page. - * @example 100 + * @description The feature the subject is entitled to use. + * Either featureKey or featureId is required. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - pageSize: number - /** @description The items in the current page. */ - items: components['schemas']['EntitlementGrant'][] + featureId?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** @description The usage period associated with the entitlement. */ + usagePeriod?: components['schemas']['RecurringPeriodCreateInput'] + /** @enum {string} */ + type: 'boolean' } - /** @description Usage Record */ - GrantUsageRecord: { + /** @description Create inputs for entitlement */ + EntitlementCreateInputs: + | components['schemas']['EntitlementMeteredCreateInputs'] + | components['schemas']['EntitlementStaticCreateInputs'] + | components['schemas']['EntitlementBooleanCreateInputs'] + /** @description The grant. */ + EntitlementGrant: { /** - * @description The id of the grant - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z */ - grantId: string + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string /** * Format: double - * @description The usage in the period + * @description The amount to grant. Should be a positive number. * @example 100 */ - usage: number - } - /** - * @description An ingested event with optional validation error. - * @example { - * "event": { - * "id": "5c10fade-1c9e-4d6c-8275-c52c36731d3c", - * "source": "service-name", - * "specversion": "1.0", - * "type": "prompt", - * "subject": "customer-id", - * "time": "2023-01-01T01:01:01.001Z" - * }, - * "ingestedAt": "2023-01-01T01:01:01.001Z", - * "storedAt": "2023-01-01T01:01:02.001Z" - * } - */ - IngestedEvent: { - event: components['schemas']['Event'] - /** @description The validation error if the event failed validation. */ - validationError?: string + amount: number /** - * Format: date-time - * @description The date and time the event was ingested. - * @example "2023-01-01T01:01:01.001Z" + * Format: uint8 + * @description The priority of the grant. Grants with higher priority are applied first. + * Priority is a positive decimal numbers. With lower numbers indicating higher importance. + * For example, a priority of 1 is more urgent than a priority of 2. + * When there are several grants available for the same subject, the system selects the grant with the highest priority. + * In cases where grants share the same priority level, the grant closest to its expiration will be used first. + * In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. + * @example 1 */ - ingestedAt: string + priority?: number /** * Format: date-time - * @description The date and time the event was stored. - * @example "2023-01-01T01:01:01.001Z" + * @description Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). + * @example 2023-01-01T01:01:01.001Z */ - storedAt: string - } - /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ - InternalServerErrorProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** - * @description A marketplace listing. - * Represent an available app in the app marketplace that can be installed to the organization. - * - * Marketplace apps only exist in config so they don't extend the Resource model. - * @example { - * "type": "stripe", - * "name": "Stripe", - * "description": "Stripe interation allows you to collect payments with Stripe.", - * "iconUrl": "/images/stripe.png", - * "capabilities": [ - * { - * "type": "calculateTax", - * "key": "stripe_calculate_tax", - * "name": "Calculate Tax", - * "description": "Stripe Tax calculates tax portion of the invoices." - * }, - * { - * "type": "invoiceCustomers", - * "key": "stripe_invoice_customers", - * "name": "Invoice Customers", - * "description": "Stripe invoices customers with due amount." - * }, - * { - * "type": "collectPayments", - * "key": "stripe_collect_payments", - * "name": "Collect Payments", - * "description": "Stripe payments collects outstanding revenue with Stripe customer's default payment method." - * } - * ] - * } - */ - MarketplaceListing: { - /** @description The app's type */ - type: components['schemas']['OpenMeter.App.Type'] - /** @description The app's name. */ - name: string - /** @description The app's description. */ - description: string - /** @description The app's icon URL. */ - iconUrl: string - /** @description The app's capabilities. */ - capabilities: components['schemas']['AppCapability'][] - } - /** @description A page of results. */ - MarketplaceListingList: { - /** @description The page number. */ - page: number - /** @description The number of items in the page. */ - pageSize: number - /** @description The total number of items. */ - totalCount: number - /** @description The items in the page. */ - items: components['schemas']['MarketplaceListing'][] - } - /** @description Measure usage from */ - MeasureUsageFrom: - | components['schemas']['MeasureUsageFromEnum'] - | components['schemas']['MeasureUsageFromTime'] - /** - * @description Start of measurement options - * @enum {string} - */ - MeasureUsageFromEnum: 'CURRENT_PERIOD_START' | 'NOW' - /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" - */ - MeasureUsageFromTime: string - /** - * @description Set of key-value pairs. - * Metadata can be used to store additional information about a resource. - * @example { - * "externalId": "019142cc-a016-796a-8113-1a942fecd26d" - * } - */ - Metadata: { - [key: string]: string - } - /** - * @description A meter is a configuration that defines how to match and aggregate events. - * @example { - * "id": "01G65Z755AFWAKHE12NY0CQ9FH", - * "slug": "tokens_total", - * "description": "AI Token Usage", - * "aggregation": "SUM", - * "windowSize": "MINUTE", - * "eventType": "prompt", - * "valueProperty": "$.tokens", - * "groupBy": { - * "model": "$.model", - * "type": "$.type" - * } - * } - */ - Meter: { + effectiveAt: string + /** @description The grant expiration definition */ + expiration: components['schemas']['ExpirationPeriod'] /** - * @description A unique identifier for the meter. - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Format: double + * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. + * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + * @default 0 + * @example 100 */ - id: string + maxRolloverAmount: number /** - * @description A unique, human-readable identifier for the meter. - * Must consist only alphanumeric and underscore characters. - * @example tokens_total + * Format: double + * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. + * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + * @default 0 + * @example 100 */ - slug: string + minRolloverAmount: number /** - * @description A description of the meter. - * @example AI Token Usage + * @description The grant metadata. + * @example { + * "stripePaymentId": "pi_4OrAkhLvyihio9p51h9iiFnB" + * } */ - description?: string - /** @example SUM */ - aggregation: components['schemas']['MeterAggregation'] - /** @example MINUTE */ - windowSize: components['schemas']['WindowSize'] + metadata?: components['schemas']['Metadata'] /** - * @description The event type to aggregate. - * @example prompt + * @description Readonly unique ULID identifier. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - eventType: string + readonly id: string /** - * @description JSONPath expression to extract the value from the ingested event's data property. - * - * The ingested value for SUM, AVG, MIN, and MAX aggregations is a number or a string that can be parsed to a number. - * - * For UNIQUE_COUNT aggregation, the ingested value must be a string. For COUNT aggregation the valueProperty is ignored. - * @example $.tokens + * @description The unique entitlement ULID that the grant is associated with. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - valueProperty: string + readonly entitlementId: string /** - * @description Named JSONPath expressions to extract the group by values from the event data. - * - * Keys must be unique and consist only alphanumeric and underscore characters. - * - * TODO: add key format enforcement - * @example { - * "type": "$.type" - * } + * Format: date-time + * @description The next time the grant will recurr. + * @example 2023-01-01T01:01:01.001Z */ - groupBy?: { - [key: string]: string - } - } - /** - * @description The aggregation type to use for the meter. - * @enum {string} - */ - MeterAggregation: 'SUM' | 'COUNT' | 'UNIQUE_COUNT' | 'AVG' | 'MIN' | 'MAX' - /** - * @description The result of a meter query. - * @example { - * "from": "2023-01-01T00:00:00.000Z", - * "to": "2023-01-02T00:00:00.000Z", - * "windowSize": "DAY", - * "data": [ - * { - * "value": 12, - * "windowStart": "2023-01-01T00:00:00.000Z", - * "windowEnd": "2023-01-02T00:00:00.000Z", - * "subject": "customer-1", - * "groupBy": { - * "model": "gpt-4-turbo", - * "type": "prompt" - * } - * } - * ] - * } - */ - MeterQueryResult: { + nextRecurrence?: string /** * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" + * @description The time the grant expires. + * @example 2023-01-01T01:01:01.001Z */ - from?: string + readonly expiresAt?: string /** * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" + * @description The time the grant was voided. + * @example 2023-01-01T01:01:01.001Z */ - to?: string - windowSize?: components['schemas']['WindowSize'] - data: components['schemas']['MeterQueryRow'][] + voidedAt?: string + /** @description The recurrence period of the grant. */ + recurrence?: components['schemas']['RecurringPeriod'] } - /** - * @description A row in the result of a meter query. - * @example { - * "value": 12, - * "windowStart": "2023-01-01T00:00:00.000Z", - * "windowEnd": "2023-01-02T00:00:00.000Z", - * "subject": "customer-1", - * "groupBy": { - * "model": "gpt-4-turbo", - * "type": "prompt" - * } - * } - */ - MeterQueryRow: { - value: number + /** @description The grant creation input. */ + EntitlementGrantCreateInput: { /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" + * Format: double + * @description The amount to grant. Should be a positive number. + * @example 100 */ - windowStart: string + amount: number + /** + * Format: uint8 + * @description The priority of the grant. Grants with higher priority are applied first. + * Priority is a positive decimal numbers. With lower numbers indicating higher importance. + * For example, a priority of 1 is more urgent than a priority of 2. + * When there are several grants available for the same subject, the system selects the grant with the highest priority. + * In cases where grants share the same priority level, the grant closest to its expiration will be used first. + * In the case of two grants have identical priorities and expiration dates, the system will use the grant that was created first. + * @example 1 + */ + priority?: number /** * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" + * @description Effective date for grants and anchor for recurring grants. Provided value will be ceiled to metering windowSize (minute). + * @example 2023-01-01T01:01:01.001Z */ - windowEnd: string - subject?: string - groupBy?: { - [key: string]: string - } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - NotFoundProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** @description The server does not support the functionality required to fulfill the request. */ - NotImplementedProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** @description Notification channel. */ - NotificationChannel: components['schemas']['NotificationChannelWebhook'] - /** @description Union type for requests creating new notification channel with certain type. */ - NotificationChannelCreateRequest: components['schemas']['NotificationChannelWebhookCreateRequest'] - /** @description Metadata only fields of a notification channel. */ - NotificationChannelMeta: { + effectiveAt: string + /** @description The grant expiration definition */ + expiration: components['schemas']['ExpirationPeriod'] /** - * Channel Unique Identifier - * @description Identifies the notification channel. - * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + * Format: double + * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. + * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + * @default 0 + * @example 100 */ - id: string + maxRolloverAmount: number /** - * Channel Type - * @description Notification channel type. + * Format: double + * @description Grants are rolled over at reset, after which they can have a different balance compared to what they had before the reset. + * Balance after the reset is calculated as: Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + * @default 0 + * @example 100 + */ + minRolloverAmount: number + /** + * @description The grant metadata. + * @example { + * "stripePaymentId": "pi_4OrAkhLvyihio9p51h9iiFnB" + * } */ - type: components['schemas']['NotificationChannelType'] + metadata?: components['schemas']['Metadata'] + /** @description The subject of the grant. */ + recurrence?: components['schemas']['RecurringPeriodCreateInput'] } - /** - * @description Order by options for notification channels. - * @enum {string} - */ - NotificationChannelOrderBy: 'id' | 'type' | 'createdAt' | 'updatedAt' - /** @description Paginated response */ - NotificationChannelPaginatedResponse: { + /** @description Metered entitlements are useful for many different use cases, from setting up usage based access to implementing complex credit systems. + * Access is determined based on feature usage using a balance calculation (the "usage allowance" provided by the issued grants is "burnt down" by the usage). */ + EntitlementMetered: { + /** @enum {string} */ + type: 'metered' /** - * @description The items in the current page. - * @example 500 + * Soft limit + * @description If softLimit=true the subject can use the feature even if the entitlement is exhausted, hasAccess will always be true. + * @default false */ - totalCount: number + isSoftLimit: boolean /** - * @description The items in the current page. - * @example 1 + * @deprecated + * @description Deprecated, ignored by the backend. Please use isSoftLimit instead; this field will be removed in the future. + * @default false */ - page: number + isUnlimited: boolean /** - * @description The items in the current page. - * @example 100 + * Initial grant amount + * Format: double + * @description You can grant usage automatically alongside the entitlement, the example scenario would be creating a starting balance. + * If an amount is specified here, a grant will be created alongside the entitlement with the specified amount. + * That grant will have it's rollover settings configured in a way that after each reset operation, the balance will return the original amount specified here. + * Manually creating such a grant would mean having the "amount", "minRolloverAmount", and "maxRolloverAmount" fields all be the same. */ - pageSize: number - /** @description The items in the current page. */ - items: components['schemas']['NotificationChannel'][] - } - /** - * @description Type of the notification channel. - * @enum {string} - */ - NotificationChannelType: 'WEBHOOK' - /** @description Notification channel with webhook type. */ - NotificationChannelWebhook: { + issueAfterReset?: number + /** + * Issue grant after reset priority + * Format: uint8 + * @description Defines the grant priority for the default grant. + * @default 1 + */ + issueAfterResetPriority: number + /** + * Preserve overage at reset + * @description If true, the overage is preserved at reset. If false, the usage is reset to 0. + * @default false + */ + preserveOverageAtReset: boolean /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - deletedAt?: string + readonly deletedAt?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] /** - * Channel Unique Identifier - * @description Identifies the notification channel. + * @description Readonly unique ULID identifier. * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - id: string + readonly id: string /** - * Channel Type - * @description Notification channel type. - * @enum {string} + * @description The identifier key unique to the subject + * @example customer-1 */ - type: 'WEBHOOK' + subjectKey: string /** - * Channel Name - * @description User friendly name of the channel. - * @example customer-webhook + * @description The feature the subject is entitled to use. + * @example example-feature-key */ - name: string + featureKey: string /** - * Channel Disabled - * @description Whether the channel is disabled or not. - * @default false - * @example true + * @description The feature the subject is entitled to use. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - disabled?: boolean + featureId: string /** - * Webhook URL - * @description Webhook URL where the notification is sent. - * @example https://example.com/webhook - */ - url: string - /** - * Custom HTTP Headers - * @description Custom HTTP headers sent as part of the webhook request. - */ - customHeaders?: { - [key: string]: string - } - /** - * Signing Secret - * @description Signing secret used for webhook request validation on the receiving end. - * - * Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 - * @example whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 - */ - signingSecret?: string - } - /** @description Request with input parameters for creating new notification channel with webhook type. */ - NotificationChannelWebhookCreateRequest: { - /** - * Channel Type - * @description Notification channel type. - * @enum {string} - */ - type: 'WEBHOOK' - /** - * Channel Name - * @description User friendly name of the channel. - * @example customer-webhook - */ - name: string - /** - * Channel Disabled - * @description Whether the channel is disabled or not. - * @default false - * @example true - */ - disabled?: boolean - /** - * Webhook URL - * @description Webhook URL where the notification is sent. - * @example https://example.com/webhook - */ - url: string - /** - * Custom HTTP Headers - * @description Custom HTTP headers sent as part of the webhook request. - */ - customHeaders?: { - [key: string]: string - } - /** - * Signing Secret - * @description Signing secret used for webhook request validation on the receiving end. - * - * Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 - * @example whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 - */ - signingSecret?: string - } - /** @description Type of the notification event. */ - NotificationEvent: { - /** - * Event Identifier - * @description A unique identifier of the notification event. - * @example 01J2KNP1YTXQRXHTDJ4KPR7PZ0 - */ - id: string - /** - * Event Type - * @description Type of the notification event. - */ - type: components['schemas']['NotificationEventType'] - /** - * Creation Time * Format: date-time - * @description Timestamp when the notification event was created in RFC 3339 format. - * @example "2023-01-01T01:01:01.001Z" - */ - createdAt: string - /** - * Owner Rule - * @description The nnotification rule which generated this event. - */ - rule: components['schemas']['NotificationRule'] - /** - * Delivery Status - * @description The delivery status of the notification event. - */ - deliveryStatus: readonly components['schemas']['NotificationEventDeliveryStatus'][] - /** - * Event Payload - * @description Timestamp when the notification event was created in RFC 3339 format. + * @description The time the last reset happened. + * @example 2023-01-01T01:01:01.001Z */ - payload: components['schemas']['NotificationEventPayload'] + readonly lastReset: string + /** @description The current usage period. */ + readonly currentUsagePeriod: components['schemas']['Period'] /** - * Annotations - * @description Set of key-value pairs managed by the system. Cannot be modified by user. + * Format: date-time + * @description The time from which usage is measured. If not specified on creation, defaults to entitlement creation time. + * @example 2023-01-01T01:01:01.001Z */ - annotations?: components['schemas']['Annotations'] + readonly measureUsageFrom: string + /** @description THe usage period of the entitlement. */ + readonly usagePeriod: components['schemas']['RecurringPeriod'] } - /** @description Payload for notification event with `entitlements.balance.threshold` type. */ - NotificationEventBalanceThresholdPayload: { - /** - * Notification Event Identifier - * @description A unique identifier for the notification event the payload belongs to. - * @example 01J2KNP1YTXQRXHTDJ4KPR7PZ0 - */ - id: string + /** @description Create inpurs for metered entitlement */ + EntitlementMeteredCreateInputs: { /** - * Notification Event Type - * @description Type of the notification event. - * @enum {string} + * @description The feature the subject is entitled to use. + * Either featureKey or featureId is required. + * @example example-feature-key */ - type: 'entitlements.balance.threshold' + featureKey?: string /** - * Creation Time - * Format: date-time - * @description Timestamp when the notification event was created in RFC 3339 format. - * @example "2023-01-01T01:01:01.001Z" + * @description The feature the subject is entitled to use. + * Either featureKey or featureId is required. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - timestamp: string + featureId?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** @enum {string} */ + type: 'metered' /** - * Payload Data - * @description The data of the payload. + * Soft limit + * @description If softLimit=true the subject can use the feature even if the entitlement is exhausted, hasAccess will always be true. + * @default false */ - data: components['schemas']['NotificationEventBalanceThresholdPayloadData'] - } - /** @description Data of the payload for notification event with `entitlements.balance.threshold` type. */ - NotificationEventBalanceThresholdPayloadData: { - /** Entitlement */ - entitlement: components['schemas']['EntitlementMetered'] - /** Feature */ - feature: components['schemas']['Feature'] - /** Subject */ - subject: components['schemas']['Subject'] - /** Entitlement Value */ - value: components['schemas']['EntitlementValue'] - /** Threshold */ - threshold: components['schemas']['NotificationRuleBalanceThresholdValue'] - } - /** @description The delivery status of the notification event. */ - NotificationEventDeliveryStatus: { + isSoftLimit: boolean /** - * Delivery State - * @description Delivery state of the notification event to the channel. - * @example SUCCESS - * @enum {string} + * @deprecated + * @description Deprecated, ignored by the backend. Please use isSoftLimit instead; this field will be removed in the future. + * @default false */ - state: 'SUCCESS' | 'FAILED' | 'SENDING' | 'PENDING' + isUnlimited: boolean + /** @description The usage period associated with the entitlement. */ + usagePeriod: components['schemas']['RecurringPeriodCreateInput'] + /** @description Defines the time from which usage is measured. If not specified on creation, defaults to entitlement creation time. */ + measureUsageFrom?: components['schemas']['MeasureUsageFrom'] /** - * State Reason - * @description The reason of the last deliverry state update. - * @example Failed to dispatch event due to provider error. + * Initial grant amount + * Format: double + * @description You can grant usage automatically alongside the entitlement, the example scenario would be creating a starting balance. + * If an amount is specified here, a grant will be created alongside the entitlement with the specified amount. + * That grant will have it's rollover settings configured in a way that after each reset operation, the balance will return the original amount specified here. + * Manually creating such a grant would mean having the "amount", "minRolloverAmount", and "maxRolloverAmount" fields all be the same. */ - reason: string + issueAfterReset?: number /** - * Last Update Time - * Format: date-time - * @description Timestamp of when the status was last updated in RFC 3339 format. - * @example "2023-01-01T01:01:01.001Z" + * Issue grant after reset priority + * Format: uint8 + * @description Defines the grant priority for the default grant. + * @default 1 */ - updatedAt: string + issueAfterResetPriority: number /** - * Notification Channel - * @description Notification channel the delivery sattus associated with. + * Preserve overage at reset + * @description If true, the overage is preserved at reset. If false, the usage is reset to 0. + * @default false */ - channel: components['schemas']['NotificationChannelMeta'] + preserveOverageAtReset: boolean } /** - * @description Order by options for notification channels. + * @description Order by options for entitlements. * @enum {string} */ - NotificationEventOrderBy: 'id' | 'createdAt' + EntitlementOrderBy: 'createdAt' | 'updatedAt' /** @description Paginated response */ - NotificationEventPaginatedResponse: { + EntitlementPaginatedResponse: { /** * @description The items in the current page. * @example 500 @@ -2215,4694 +3659,12335 @@ export interface components { */ pageSize: number /** @description The items in the current page. */ - items: components['schemas']['NotificationEvent'][] + items: components['schemas']['Entitlement'][] } - /** @description The delivery status of the notification event. */ - NotificationEventPayload: components['schemas']['NotificationEventBalanceThresholdPayload'] - /** - * @description Type of the notification event. - * @enum {string} - */ - NotificationEventType: 'entitlements.balance.threshold' - /** @description Notification Rule. */ - NotificationRule: components['schemas']['NotificationRuleBalanceThreshold'] - /** @description Notification rule with entitlements.balance.threshold type. */ - NotificationRuleBalanceThreshold: { + /** @description A static entitlement. */ + EntitlementStatic: { + /** @enum {string} */ + type: 'static' + /** + * Format: json + * @description The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + * @example { "integrations": ["github"] } + */ + config: string /** * Creation Time * Format: date-time * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - createdAt: string + readonly createdAt: string /** * Last Update Time * Format: date-time * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - updatedAt: string + readonly updatedAt: string /** * Deletion Time * Format: date-time * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * @example 2024-01-01T01:01:01.001Z */ - deletedAt?: string + readonly deletedAt?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] /** - * Rule Unique Identifier - * @description Identifies the notification rule. + * @description Readonly unique ULID identifier. * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - id: string + readonly id: string /** - * Rule Type - * @description Notification rule type. - * @enum {string} + * @description The identifier key unique to the subject + * @example customer-1 */ - type: 'entitlements.balance.threshold' + subjectKey: string /** - * Rule Name - * @description The user friendly name of the notification rule. - * @example Balance threshold reached + * @description The feature the subject is entitled to use. + * @example example-feature-key */ - name: string + featureKey: string /** - * Rule Disabled - * @description Whether the rule is disabled or not. - * @default false - * @example true + * @description The feature the subject is entitled to use. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - disabled?: boolean + featureId: string + /** @description The current usage period. */ + currentUsagePeriod?: components['schemas']['Period'] + /** @description The defined usage period of the entitlement */ + usagePeriod?: components['schemas']['RecurringPeriod'] + } + /** @description Create inputs for static entitlement */ + EntitlementStaticCreateInputs: { /** - * Channels assigned to Rule - * @description List of notification channels the rule applies to. + * @description The feature the subject is entitled to use. + * Either featureKey or featureId is required. + * @example example-feature-key */ - channels: components['schemas']['NotificationChannelMeta'][] + featureKey?: string /** - * Entitlement Balance Thresholds - * @description List of thresholds the rule suppose to be triggered. + * @description The feature the subject is entitled to use. + * Either featureKey or featureId is required. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - thresholds: components['schemas']['NotificationRuleBalanceThresholdValue'][] + featureId?: string + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** @description The usage period associated with the entitlement. */ + usagePeriod?: components['schemas']['RecurringPeriodCreateInput'] + /** @enum {string} */ + type: 'static' /** - * Features - * @description Optional field containing list of features the rule applies to. + * Format: json + * @description The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + * @example { "integrations": ["github"] } */ - features?: components['schemas']['FeatureMeta'][] + config: string } - /** @description Request with input parameters for creating new notification rule with entitlements.balance.threashold type. */ - NotificationRuleBalanceThresholdCreateRequest: { - /** - * Rule Type - * @description Notification rule type. - * @enum {string} - */ - type: 'entitlements.balance.threshold' - /** - * Rule Name - * @description The user friendly name of the notification rule. - * @example Balance threshold reached - */ - name: string + /** + * @description Type of the entitlement. + * @enum {string} + */ + EntitlementType: 'metered' | 'boolean' | 'static' + /** @description Entitlements are the core of OpenMeter access management. They define access to features for subjects. Entitlements can be metered, boolean, or static. */ + EntitlementValue: { /** - * Rule Disabled - * @description Whether the rule is disabled or not. - * @default false + * @description Whether the subject has access to the feature. Shared accross all entitlement types. * @example true */ - disabled?: boolean + readonly hasAccess: boolean /** - * Entitlement Balance Thresholds - * @description List of thresholds the rule suppose to be triggered. - */ - thresholds: components['schemas']['NotificationRuleBalanceThresholdValue'][] - /** - * Channels - * @description List of notification channels the rule is applied to. + * Format: double + * @description Only available for metered entitlements. Metered entitlements are built around a balance calculation where feature usage is deducted from the issued grants. Balance represents the remaining balance of the entitlement, it's value never turns negative. + * @example 100 */ - channels: string[] + readonly balance?: number /** - * Features - * @description Optional field for defining the scope of notification by feature. It may contain features by id or key. + * Format: double + * @description Only available for metered entitlements. Returns the total feature usage in the current period. + * @example 50 */ - features?: string[] - } - /** @description Threshold value with multiple supported types. */ - NotificationRuleBalanceThresholdValue: { + readonly usage?: number /** - * Threshold Value * Format: double - * @description Value of the threshold. - * @example 100 + * @description Only available for metered entitlements. Overage represents the usage that wasn't covered by grants, e.g. if the subject had a total feature usage of 100 in the period but they were only granted 80, there would be 20 overage. + * @example 0 */ - value: number + readonly overage?: number /** - * Threshold Type - * @description Type of the threshold. - * @example NUMBER - * @enum {string} + * @description Only available for static entitlements. The JSON parsable config of the entitlement. + * @example { key: "value" } */ - type: 'PERCENT' | 'NUMBER' + readonly config?: string } - /** @description Union type for requests creating new notification rule with certain type. */ - NotificationRuleCreateRequest: components['schemas']['NotificationRuleBalanceThresholdCreateRequest'] /** - * @description Order by options for notification channels. - * @enum {string} + * @description CloudEvents Specification JSON Schema + * @example { + * "id": "5c10fade-1c9e-4d6c-8275-c52c36731d3c", + * "source": "service-name", + * "specversion": "1.0", + * "type": "prompt", + * "subject": "customer-id", + * "time": "2023-01-01T01:01:01.001Z" + * } */ - NotificationRuleOrderBy: 'id' | 'type' | 'createdAt' | 'updatedAt' - /** @description Paginated response */ - NotificationRulePaginatedResponse: { + Event: { /** - * @description The items in the current page. - * @example 500 + * @description Identifies the event. + * @example 5c10fade-1c9e-4d6c-8275-c52c36731d3c */ - totalCount: number + id: string /** - * @description The items in the current page. - * @example 1 + * Format: uri-reference + * @description Identifies the context in which an event happened. + * @example service-name */ - page: number + source: string /** - * @description The items in the current page. - * @example 100 + * @description The version of the CloudEvents specification which the event uses. + * @default 1.0 + * @example 1.0 */ - pageSize: number - /** @description The items in the current page. */ - items: components['schemas']['NotificationRule'][] - } - /** - * @description OAuth2 authorization code grant error types. - * @enum {string} - */ - OAuth2AuthorizationCodeGrantErrorType: - | 'invalid_request' - | 'unauthorized_client' - | 'access_denied' - | 'unsupported_response_type' - | 'invalid_scope' - | 'server_error' - | 'temporarily_unavailable' - /** - * @description App installed status. - * @enum {string} - */ - 'OpenMeter.App.AppStatus': 'ready' | 'unauthorized' - /** - * @description Stripe payment intent status. - * @enum {string} - */ - 'OpenMeter.App.StripePaymentIntentStatus': - | 'canceled' - | 'processing' - | 'requires_action' - | 'requires_confirmation' - | 'requires_payment_method' - | 'succeeded' - /** - * @description Type of the app. - * @enum {string} - */ - 'OpenMeter.App.Type': 'stripe' - /** - * @description The order direction. - * @enum {string} - */ - Order: 'ASC' | 'DESC' - /** @description A period with a start and end time. */ - Period: { + specversion: string /** - * Format: date-time - * @description Period start time. - * @example "2023-01-01T01:01:01.001Z" + * @description Contains a value describing the type of event related to the originating occurrence. + * @example com.example.someevent */ - from: string + type: string /** - * Format: date-time - * @description Period end time. - * @example "2023-02-01T01:01:01.001Z" + * @description Content type of the data value. Must adhere to RFC 2046 format. + * @example application/json */ - to: string - } - /** - * @description A consumer portal token. - * - * Validator doesn't obey required for readOnly properties - * See: https://github.com/stoplightio/spectral/issues/1274 - */ - PortalToken: { + datacontenttype?: string | null /** - * @description ULID (Universally Unique Lexicographically Sortable Identifier). - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Format: uri + * @description Identifies the schema that data adheres to. */ - id?: string - /** @example customer-1 */ - subject: string + dataschema?: string | null /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" + * @description Describes the subject of the event in the context of the event producer (identified by source). + * @example customer-id */ - expiresAt?: string - expired?: boolean + subject: string /** * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T01:01:01.001Z" - */ - createdAt?: string - /** - * @description The token is only returned at creation. - * @example om_portal_IAnD3PpWW2A2Wr8m9jfzeHlGX8xmCXwG.y5q4S-AWqFu6qjfaFz0zQq4Ez28RsnyVwJffX5qxMvo - */ - token?: string - /** - * @description Optional, if defined only the specified meters will be allowed. - * @example [ - * "tokens_total" - * ] + * @description Timestamp of when the occurrence happened. Must adhere to RFC 3339. + * @example 2023-01-01T01:01:01.001Z */ - allowedMeterSlugs?: string[] + time?: string | null + /** @description The event payload. */ + data?: (Record | string) | null } - /** @description One or more conditions given in the request header fields evaluated to false when tested on the server. */ - PreconditionFailedProblemResponse: components['schemas']['UnexpectedProblemResponse'] /** - * @description Recurring period with an interval and an anchor. - * @example { - * "interval": "DAY", - * "anchor": "2023-01-01T01:01:01.001Z" - * } + * @description The expiration duration enum + * @enum {string} */ - RecurringPeriod: { + ExpirationDuration: 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR' + /** @description The grant expiration definition */ + ExpirationPeriod: { + /** @description The unit of time for the expiration period. */ + duration: components['schemas']['ExpirationDuration'] /** - * Interval - * @description The unit of time for the interval. + * @description The number of time units in the expiration period. + * @example 12 */ - interval: components['schemas']['RecurringPeriodInterval'] + count: number + } + /** @description Represents a feature that can be enabled or disabled for a plan. + * Used both for product catalog and entitlements. */ + Feature: { /** - * Anchor time + * Creation Time * Format: date-time - * @description A date-time anchor to base the recurring period on. - * @example "2023-01-01T01:01:01.001Z" + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z */ - anchor: string - } - /** - * @description Recurring period with an interval and an anchor. - * @example { - * "interval": "DAY", - * "anchor": "2023-01-01T01:01:01.001Z" - * } - */ - RecurringPeriodCreateInput: { + readonly createdAt: string /** - * Interval - * @description The unit of time for the interval. + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z */ - interval: components['schemas']['RecurringPeriodInterval'] + readonly updatedAt: string /** - * Anchor time + * Deletion Time * Format: date-time - * @description A date-time anchor to base the recurring period on. - * @example "2023-01-01T01:01:01.001Z" + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z */ - anchor?: string - } - /** - * @description The unit of time for the interval. - * One of: `day`, `week`, `month`, or `year`. - * @enum {string} - */ - RecurringPeriodInterval: 'DAY' | 'WEEK' | 'MONTH' | 'YEAR' - /** @description Reset parameters */ - ResetEntitlementUsageInput: { + readonly deletedAt?: string /** + * Archival Time * Format: date-time - * @description The time at which the reset takes effect, defaults to now. The reset cannot be in the future. The provided value is truncated to the minute due to how historical meter data is stored. - * @example "2023-01-01T01:01:01.001Z" + * @description Timestamp of when the resource was archived. + * @example 2023-01-01T01:01:01.001Z */ - effectiveAt?: string + readonly archivedAt?: string /** - * @description Determines whether the usage period anchor is retained or reset to the effectiveAt time. - * - If true, the usage period anchor is retained. - * - If false, the usage period anchor is reset to the effectiveAt time. + * The unique key of the feature + * @description A key is a unique string that is used to identify a resource. */ - retainAnchor?: boolean + key: string + /** The human-readable name of the feature */ + name: string /** - * @description Determines whether the overage is preserved or forgiven, overriding the entitlement's default behavior. - * - If true, the overage is preserved. - * - If false, the overage is forgiven. + * Optional metadata + * @example { + * "key": "value" + * } */ - preserveOverage?: boolean - } - /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ - ServiceUnavailableProblemResponse: components['schemas']['UnexpectedProblemResponse'] - /** - * @description A installed Stripe app object. - * @example { - * "id": "01G65Z755AFWAKHE12NY0CQ9FH", - * "type": "stripe", - * "name": "Stripe", - * "status": "ready", - * "listing": { - * "type": "stripe", - * "name": "Stripe", - * "description": "Stripe interation allows you to collect payments with Stripe.", - * "iconUrl": "/images/stripe.png", - * "capabilities": [ - * { - * "type": "calculateTax", - * "key": "stripe_calculate_tax", - * "name": "Calculate Tax", - * "description": "Stripe Tax calculates tax portion of the invoices." - * }, - * { - * "type": "invoiceCustomers", - * "key": "stripe_invoice_customers", - * "name": "Invoice Customers", - * "description": "Stripe invoices customers with due amount." - * }, - * { - * "type": "collectPayments", - * "key": "stripe_collect_payments", - * "name": "Collect Payments", - * "description": "Stripe payments collects outstanding revenue with Stripe customer's default payment method." - * } - * ] - * }, - * "createdAt": "2024-01-01T01:01:01.001Z", - * "updatedAt": "2024-01-01T01:01:01.001Z", - * "stripeAccountId": "acct_123456789", - * "livemode": true - * } - */ - StripeApp: { + metadata?: components['schemas']['Metadata'] /** - * ID - * @description A unique identifier for the resource. - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Meter slug + * @description A key is a unique string that is used to identify a resource. + * @example tokens_total */ - id: string + meterSlug?: string /** - * Display name - * @description Human-readable name for the resource. Between 1 and 256 characters. + * Meter group by filters + * @description Optional meter group by filters. + * Useful if the meter scope is broader than what feature tracks. + * Example scenario would be a meter tracking all token use with groupBy fields for the model, + * then the feature could filter for model=gpt-4. + * @example { + * "model": "gpt-4", + * "type": "input" + * } */ - name: string - /** - * Description - * @description Optional description of the resource. Maximum 1024 characters. - */ - description?: string + meterGroupByFilters?: { + [key: string]: string + } /** - * Metadata - * @description Additional metadata for the resource. + * @description Readonly unique ULID identifier. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - metadata?: components['schemas']['Metadata'] + readonly id: string + } + /** @description Represents a feature that can be enabled or disabled for a plan. + * Used both for product catalog and entitlements. */ + FeatureCreateInputs: { /** - * Creation Time - * Format: date-time - * @description Timestamp of when the resource was created. - * @example "2024-01-01T01:01:01.001Z" + * The unique key of the feature + * @description A key is a unique string that is used to identify a resource. */ - createdAt: string + key: string + /** The human-readable name of the feature */ + name: string /** - * Last Update Time - * Format: date-time - * @description Timestamp of when the resource was last updated. - * @example "2024-01-01T01:01:01.001Z" + * Optional metadata + * @example { + * "key": "value" + * } */ - updatedAt: string + metadata?: components['schemas']['Metadata'] /** - * Deletion Time - * Format: date-time - * @description Timestamp of when the resource was permanently deleted. - * @example "2024-01-01T01:01:01.001Z" + * Meter slug + * @description A key is a unique string that is used to identify a resource. + * @example tokens_total */ - deletedAt?: string - /** @description The marketplace listing that this installed app is based on. */ - listing: components['schemas']['MarketplaceListing'] - /** @description Status of the app connection. */ - status: components['schemas']['OpenMeter.App.AppStatus'] + meterSlug?: string /** - * @description The app's type is Stripe. - * @enum {string} + * Meter group by filters + * @description Optional meter group by filters. + * Useful if the meter scope is broader than what feature tracks. + * Example scenario would be a meter tracking all token use with groupBy fields for the model, + * then the feature could filter for model=gpt-4. + * @example { + * "model": "gpt-4", + * "type": "input" + * } */ - type: 'stripe' - /** @description The Stripe account ID. */ - stripeAccountId: string - /** @description Livemode, true if the app is in production mode. */ - livemode: boolean - } - /** - * @description Stripe CheckoutSession.mode - * @enum {string} - */ - StripeCheckoutSessionMode: 'setup' - /** @description Stripe setup intent. */ - StripeSetupIntent: { - /** @description The setup intent id. */ - id: string - /** @description The setup intent status. */ - status: components['schemas']['OpenMeter.App.StripePaymentIntentStatus'] - /** @description The setup intent payment method. */ - payment_method?: string - /** @description The setup intent payment method types. */ - payment_method_types?: string[] - /** @description The setup intent customer. */ - customer: string - /** @description The setup intent metadata. */ - metadata: { + meterGroupByFilters?: { [key: string]: string } } - /** @description Stripe webhook event. */ - StripeWebhookEvent: { - /** @description The event ID. */ - id: string - /** @description The event type. */ - type: string - /** @description Live mode. */ - livemode: boolean - /** - * Format: int32 - * @description The event created timestamp. - */ - created: number - /** @description The event data. */ - data: { - object: components['schemas']['StripeSetupIntent'] - } - } - /** @description Stripe webhook response. */ - StripeWebhookResponse: { - /** - * @description ULID (Universally Unique Lexicographically Sortable Identifier). - * @example 01G65Z755AFWAKHE12NY0CQ9FH - */ - namespaceId: string + /** @description Limited representation of a feature resource which includes only its unique identifiers (id, key). */ + FeatureMeta: { /** - * @description ULID (Universally Unique Lexicographically Sortable Identifier). - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Feature Unique Identifier + * @description Unique identifier of a feature. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV */ - appId: string + id: string /** - * @description ULID (Universally Unique Lexicographically Sortable Identifier). - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * Feature Key + * @description The key is an immutable unique identifier of the feature used throughout the API, + * for example when interacting with a subject's entitlements. + * @example gpt4_tokens */ - customerId?: string + key: string } /** - * @description A subject is a unique identifier for a user or entity. - * @example { - * "id": "01G65Z755AFWAKHE12NY0CQ9FH", - * "key": "customer-id", - * "displayName": "Customer Name", - * "metadata": { - * "hubspotId": "123456" - * }, - * "currentPeriodStart": "2023-01-01T00:00:00.000Z", - * "currentPeriodEnd": "2023-02-01T00:00:00.000Z", - * "stripeCustomerId": "cus_JMOlctsKV8" - * } + * @description Order by options for features. + * @enum {string} */ - Subject: { + FeatureOrderBy: 'id' | 'createdAt' | 'updatedAt' + /** @description Paginated response */ + FeaturePaginatedResponse: { /** - * @description A unique identifier for the subject. - * @example 01G65Z755AFWAKHE12NY0CQ9FH + * @description The items in the current page. + * @example 500 */ - id: string + totalCount: number /** - * @description A unique, human-readable identifier for the subject. - * @example customer-id + * @description The items in the current page. + * @example 1 */ - key: string + page: number /** - * @description A human-readable display name for the subject. - * @example Customer Name + * @description The items in the current page. + * @example 100 */ - displayName?: string - /** @example {} */ - metadata?: { - [key: string]: unknown - } | null + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['Feature'][] + } + /** @description Flat price. */ + FlatPrice: { + /** @enum {string} */ + type: 'flat' + /** @description The amount of the flat price. */ + amount: components['schemas']['Numeric'] + } + /** @description Flat price. */ + FlatPriceUpdateItem: { + /** @description The amount of the flat price. */ + amount: components['schemas']['Numeric'] + } + /** @description Flat price with payment term. */ + FlatPriceWithPaymentTerm: { + /** @enum {string} */ + type: 'flat' + /** @description The amount of the flat price. */ + amount: components['schemas']['Numeric'] /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T00:00:00.000Z" + * @description The payment term of the flat price. + * Defaults to in advance. + * @default in_advance */ - currentPeriodStart?: string + paymentTerm: components['schemas']['PricePaymentTerm'] + } + /** @description Flat price with payment term. */ + FlatPriceWithPaymentTermUpdateItem: { + /** @description The amount of the flat price. */ + amount: components['schemas']['Numeric'] /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-02-01T00:00:00.000Z" + * @description The payment term of the flat price. + * Defaults to in advance. + * @default in_advance */ - currentPeriodEnd?: string - /** @example cus_JMOlctsKV8 */ - stripeCustomerId?: string | null + paymentTerm: components['schemas']['PricePaymentTerm'] } - /** - * @description A subject is a unique identifier for a user or entity. - * @example { - * "key": "customer-id", - * "displayName": "Customer Name", - * "metadata": { - * "hubspotId": "123456" - * }, - * "currentPeriodStart": "2023-01-01T00:00:00.000Z", - * "currentPeriodEnd": "2023-02-01T00:00:00.000Z", - * "stripeCustomerId": "cus_JMOlctsKV8" - * } - */ - SubjectUpsert: { + /** @description The server understood the request but refuses to authorize it. */ + ForbiddenProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** @description The server, while acting as a gateway or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request. */ + GatewayTimeoutProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** @description A segment of the grant burn down history. + * + * A given segment represents the usage of a grant between events that changed either the grant burn down priority order or the usag period. */ + GrantBurnDownHistorySegment: { + /** @description The period of the segment. */ + period: components['schemas']['Period'] /** - * @description A unique, human-readable identifier for the subject. - * @example customer-id + * Format: double + * @description The total usage of the grant in the period. + * @example 100 */ - key: string + readonly usage: number /** - * @description A human-readable display name for the subject. - * @example Customer Name + * Format: double + * @description Overuse that wasn't covered by grants. + * @example 100 */ - displayName?: string - /** @example {} */ - metadata?: { - [key: string]: unknown - } | null + readonly overage: number /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-01-01T00:00:00.000Z" + * Format: double + * @description entitlement balance at the start of the period. + * @example 100 */ - currentPeriodStart?: string + readonly balanceAtStart: number /** - * Format: date-time - * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - * @example "2023-02-01T00:00:00.000Z" + * @description The balance breakdown of each active grant at the start of the period: GrantID: Balance + * @example { + * "01G65Z755AFWAKHE12NY0CQ9FH": 100 + * } */ - currentPeriodEnd?: string - /** @example cus_JMOlctsKV8 */ - stripeCustomerId?: string | null - } - /** @description Operational webhook reqeuest sent by Svix. */ - SvixOperationalWebhookRequest: { + readonly grantBalancesAtStart: { + [key: string]: number + } /** - * Operational Webhook Type - * @description The type of the Svix operational webhook request. - * @enum {string} + * Format: double + * @description The entitlement balance at the end of the period. + * @example 100 */ - type: - | 'endpoint.created' - | 'endpoint.deleted' - | 'endpoint.disabled' - | 'endpoint.updated' - | 'message.attempt.exhausted' - | 'message.attempt.failing' - | 'message.attempt.recovered' + readonly balanceAtEnd: number /** - * Operational Webhook Payload - * @description The payload of the Svix operational webhook request. + * @description The balance breakdown of each active grant at the end of the period: GrantID: Balance + * @example { + * "01G65Z755AFWAKHE12NY0CQ9FH": 100 + * } */ - data: { - [key: string]: string + readonly grantBalancesAtEnd: { + [key: string]: number } + /** @description Which grants were actually burnt down in the period and by what amount. */ + readonly grantUsages: components['schemas']['GrantUsageRecord'][] } - /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ - UnauthorizedProblemResponse: components['schemas']['UnexpectedProblemResponse'] /** - * @description A Problem Details object (RFC 7807). - * Additional properties specific to the problem type may be present. + * @description Order by options for grants. + * @enum {string} */ - UnexpectedProblemResponse: { - /** - * Format: uri - * @description Type contains a URI that identifies the problem type. - * @default about:blank - * @example about:blank - */ - type: string + GrantOrderBy: 'id' | 'createdAt' | 'updatedAt' + /** @description Paginated response */ + GrantPaginatedResponse: { /** - * @description A a short, human-readable summary of the problem type. - * @example Bad Request + * @description The items in the current page. + * @example 500 */ - title: string + totalCount: number /** - * Format: int16 - * @description The HTTP status code generated by the origin server for this occurrence of the problem. - * @example 400 + * @description The items in the current page. + * @example 1 */ - status?: number + page: number /** - * @description A human-readable explanation specific to this occurrence of the problem. - * @example The request body must be a JSON object. + * @description The items in the current page. + * @example 100 */ - detail: string + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['EntitlementGrant'][] + } + /** @description Usage Record */ + GrantUsageRecord: { /** - * Format: uri - * @description A URI reference that identifies the specific occurrence of the problem. - * @example urn:request:local/JMOlctsKV8-000001 + * @description The id of the grant + * @example 01G65Z755AFWAKHE12NY0CQ9FH */ - instance: string - [key: string]: (string | number) | undefined + grantId: string + /** + * Format: double + * @description The usage in the period + * @example 100 + */ + usage: number } /** - * @description Aggregation window size. - * @enum {string} + * @description An ingested event with optional validation error. + * @example { + * "event": { + * "id": "5c10fade-1c9e-4d6c-8275-c52c36731d3c", + * "source": "service-name", + * "specversion": "1.0", + * "type": "prompt", + * "subject": "customer-id", + * "time": "2023-01-01T01:01:01.001Z" + * }, + * "ingestedAt": "2023-01-01T01:01:01.001Z", + * "storedAt": "2023-01-01T01:01:02.001Z" + * } */ - WindowSize: 'MINUTE' | 'HOUR' | 'DAY' - /** @description The windowed balance history. */ - WindowedBalanceHistory: { + IngestedEvent: { + event: components['schemas']['Event'] + /** @description The validation error if the event failed validation. */ + validationError?: string /** - * @description The windowed balance history. - * - It only returns rows for windows where there was usage. - * - The windows are inclusive at their start and exclusive at their end. - * - The last window may be smaller than the window size and is inclusive at both ends. + * Format: date-time + * @description The date and time the event was ingested. + * @example 2023-01-01T01:01:01.001Z */ - windowedHistory: components['schemas']['BalanceHistoryWindow'][] - /** @description Grant burndown history. */ - burndownHistory: components['schemas']['GrantBurnDownHistorySegment'][] + ingestedAt: string + /** + * Format: date-time + * @description The date and time the event was stored. + * @example 2023-01-01T01:01:01.001Z + */ + storedAt: string } - } - responses: never - parameters: { - /** @description The order direction. */ - 'EntitlementOrderByOrdering.order'?: components['schemas']['Order'] - /** @description The order by field. */ - 'EntitlementOrderByOrdering.orderBy'?: components['schemas']['EntitlementOrderBy'] - /** @description The order direction. */ - 'FeatureOrderByOrdering.order'?: components['schemas']['Order'] - /** @description The order by field. */ - 'FeatureOrderByOrdering.orderBy'?: components['schemas']['FeatureOrderBy'] - /** @description The order direction. */ - 'GrantOrderByOrdering.order'?: components['schemas']['Order'] - /** @description The order by field. */ - 'GrantOrderByOrdering.orderBy'?: components['schemas']['GrantOrderBy'] - /** - * @description Number of items to return. - * - * Default is 100. - */ - 'LimitOffset.limit'?: number + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + InternalServerErrorProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** @description Paginated response */ + InvoicePaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['BillingInvoice'][] + } + ListEntitlementsResult: + | components['schemas']['Entitlement'][] + | components['schemas']['EntitlementPaginatedResponse'] + ListFeaturesResult: + | components['schemas']['Feature'][] + | components['schemas']['FeaturePaginatedResponse'] /** - * @description Number of items to skip. + * @description A marketplace listing. + * Represent an available app in the app marketplace that can be installed to the organization. * - * Default is 0. + * Marketplace apps only exist in config so they don't extend the Resource model. + * @example { + * "type": "stripe", + * "name": "Stripe", + * "description": "Stripe interation allows you to collect payments with Stripe.", + * "iconUrl": "/images/stripe.png", + * "capabilities": [ + * { + * "type": "calculateTax", + * "key": "stripe_calculate_tax", + * "name": "Calculate Tax", + * "description": "Stripe Tax calculates tax portion of the invoices." + * }, + * { + * "type": "invoiceCustomers", + * "key": "stripe_invoice_customers", + * "name": "Invoice Customers", + * "description": "Stripe invoices customers with due amount." + * }, + * { + * "type": "collectPayments", + * "key": "stripe_collect_payments", + * "name": "Collect Payments", + * "description": "Stripe payments collects outstanding revenue with Stripe customer's default payment method." + * } + * ] + * } */ - 'LimitOffset.offset'?: number - /** @description The type of the app to install. */ - 'MarketplaceApiKeyInstallRequest.type': components['schemas']['OpenMeter.App.Type'] - /** @description The type of the app to install. */ - 'MarketplaceOAuth2InstallAuthorizeRequest.type': components['schemas']['OpenMeter.App.Type'] - /** @description Simple filter for group bys with exact match. */ - 'MeterQuery.filterGroupBy'?: { - [key: string]: string + MarketplaceListing: { + /** @description The app's type */ + type: components['schemas']['AppType'] + /** @description The app's name. */ + name: string + /** @description The app's description. */ + description: string + /** @description The app's icon URL. */ + iconUrl: string + /** @description The app's capabilities. */ + capabilities: components['schemas']['AppCapability'][] } + /** @description A page of results. */ + MarketplaceListingList: { + /** @description The page number. */ + page: number + /** @description The number of items in the page. */ + pageSize: number + /** @description The total number of items. */ + totalCount: number + /** @description The items in the page. */ + items: components['schemas']['MarketplaceListing'][] + } + /** @description Measure usage from */ + MeasureUsageFrom: + | components['schemas']['MeasureUsageFromPreset'] + | components['schemas']['MeasureUsageFromTime'] /** - * @description Start date-time in RFC 3339 format. - * - * Inclusive. - */ - 'MeterQuery.from'?: string - /** - * @description If not specified a single aggregate will be returned for each subject and time window. - * `subject` is a reserved group by value. - */ - 'MeterQuery.groupBy'?: string[] - /** @description Filtering by multiple subjects. */ - 'MeterQuery.subject'?: string[] - /** - * @description End date-time in RFC 3339 format. - * - * Inclusive. - */ - 'MeterQuery.to'?: string - /** @description If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. */ - 'MeterQuery.windowSize'?: components['schemas']['WindowSize'] - /** - * @description The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). - * If not specified, the UTC timezone will be used. + * @description Start of measurement options + * @enum {string} */ - 'MeterQuery.windowTimeZone'?: string - /** @description The order direction. */ - 'NotificationChannelOrderByOrdering.order'?: components['schemas']['Order'] - /** @description The order by field. */ - 'NotificationChannelOrderByOrdering.orderBy'?: components['schemas']['NotificationChannelOrderBy'] - /** @description The order direction. */ - 'NotificationEventOrderByOrdering.order'?: components['schemas']['Order'] - /** @description The order by field. */ - 'NotificationEventOrderByOrdering.orderBy'?: components['schemas']['NotificationEventOrderBy'] - /** @description The order direction. */ - 'NotificationRuleOrderByOrdering.order'?: components['schemas']['Order'] - /** @description The order by field. */ - 'NotificationRuleOrderByOrdering.orderBy'?: components['schemas']['NotificationRuleOrderBy'] + MeasureUsageFromPreset: 'CURRENT_PERIOD_START' | 'NOW' /** - * @description Error code. - * Required with the error response. + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z */ - 'OAuth2AuthorizationCodeGrantErrorParams.error'?: components['schemas']['OAuth2AuthorizationCodeGrantErrorType'] + MeasureUsageFromTime: string /** - * @description Optional human-readable text providing additional information, - * used to assist the client developer in understanding the error that occurred. + * @description Set of key-value pairs. + * Metadata can be used to store additional information about a resource. + * @example { + * "externalId": "019142cc-a016-796a-8113-1a942fecd26d" + * } */ - 'OAuth2AuthorizationCodeGrantErrorParams.error_description'?: string + Metadata: { + [key: string]: string + } /** - * @description Optional uri identifying a human-readable web page with - * information about the error, used to provide the client - * developer with additional information about the error + * @description A meter is a configuration that defines how to match and aggregate events. + * @example { + * "id": "01G65Z755AFWAKHE12NY0CQ9FH", + * "slug": "tokens_total", + * "description": "AI Token Usage", + * "aggregation": "SUM", + * "windowSize": "MINUTE", + * "eventType": "prompt", + * "valueProperty": "$.tokens", + * "groupBy": { + * "model": "$.model", + * "type": "$.type" + * } + * } */ - 'OAuth2AuthorizationCodeGrantErrorParams.error_uri'?: string + Meter: { + /** + * @description A unique identifier for the meter. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * @description A unique, human-readable identifier for the meter. + * Must consist only alphanumeric and underscore characters. + * @example tokens_total + */ + slug: string + /** + * @description A description of the meter. + * @example AI Token Usage + */ + description?: string + /** @example SUM */ + aggregation: components['schemas']['MeterAggregation'] + /** @example MINUTE */ + windowSize: components['schemas']['WindowSize'] + /** + * @description The event type to aggregate. + * @example prompt + */ + eventType: string + /** + * @description JSONPath expression to extract the value from the ingested event's data property. + * + * The ingested value for SUM, AVG, MIN, and MAX aggregations is a number or a string that can be parsed to a number. + * + * For UNIQUE_COUNT aggregation, the ingested value must be a string. For COUNT aggregation the valueProperty is ignored. + * @example $.tokens + */ + valueProperty?: string + /** + * @description Named JSONPath expressions to extract the group by values from the event data. + * + * Keys must be unique and consist only alphanumeric and underscore characters. + * + * TODO: add key format enforcement + * @example { + * "type": "$.type" + * } + */ + groupBy?: { + [key: string]: string + } + } /** - * @description Authorization code which the client will later exchange for an access token. - * Required with the success response. + * @description The aggregation type to use for the meter. + * @enum {string} */ - 'OAuth2AuthorizationCodeGrantSuccessParams.code'?: string + MeterAggregation: 'SUM' | 'COUNT' | 'UNIQUE_COUNT' | 'AVG' | 'MIN' | 'MAX' /** - * @description Required if the "state" parameter was present in the client authorization request. - * The exact value received from the client: - * - * Unique, randomly generated, opaque, and non-guessable string that is sent - * when starting an authentication request and validated when processing the response. + * @description A meter is a configuration that defines how to match and aggregate events. + * @example { + * "slug": "tokens_total", + * "description": "AI Token Usage", + * "aggregation": "SUM", + * "windowSize": "MINUTE", + * "eventType": "prompt", + * "valueProperty": "$.tokens", + * "groupBy": { + * "model": "$.model", + * "type": "$.type" + * } + * } */ - 'OAuth2AuthorizationCodeGrantSuccessParams.state'?: string - /** @description The page number. */ - 'PaginatedQuery.page'?: number - /** @description The number of items in the page. */ - 'PaginatedQuery.pageSize'?: number + MeterCreate: { + /** + * @description A unique, human-readable identifier for the meter. + * Must consist only alphanumeric and underscore characters. + * @example tokens_total + */ + slug: string + /** + * @description A description of the meter. + * @example AI Token Usage + */ + description?: string + /** @example SUM */ + aggregation: components['schemas']['MeterAggregation'] + /** @example MINUTE */ + windowSize: components['schemas']['WindowSize'] + /** + * @description The event type to aggregate. + * @example prompt + */ + eventType: string + /** + * @description JSONPath expression to extract the value from the ingested event's data property. + * + * The ingested value for SUM, AVG, MIN, and MAX aggregations is a number or a string that can be parsed to a number. + * + * For UNIQUE_COUNT aggregation, the ingested value must be a string. For COUNT aggregation the valueProperty is ignored. + * @example $.tokens + */ + valueProperty?: string + /** + * @description Named JSONPath expressions to extract the group by values from the event data. + * + * Keys must be unique and consist only alphanumeric and underscore characters. + * + * TODO: add key format enforcement + * @example { + * "type": "$.type" + * } + */ + groupBy?: { + [key: string]: string + } + } /** - * @description Start date-time in RFC 3339 format. - * - * Inclusive. + * @description The result of a meter query. + * @example { + * "from": "2023-01-01T00:00:00Z", + * "to": "2023-01-02T00:00:00Z", + * "windowSize": "DAY", + * "data": [ + * { + * "value": 12, + * "windowStart": "2023-01-01T00:00:00Z", + * "windowEnd": "2023-01-02T00:00:00Z", + * "subject": "customer-1", + * "groupBy": { + * "model": "gpt-4-turbo", + * "type": "prompt" + * } + * } + * ] + * } */ - 'Pagination.page'?: number + MeterQueryResult: { + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + from?: string + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + to?: string + windowSize?: components['schemas']['WindowSize'] + data: components['schemas']['MeterQueryRow'][] + } /** - * @description Number of items per page. - * - * Default is 100. + * @description A row in the result of a meter query. + * @example { + * "value": 12, + * "windowStart": "2023-01-01T00:00:00Z", + * "windowEnd": "2023-01-02T00:00:00Z", + * "subject": "customer-1", + * "groupBy": { + * "model": "gpt-4-turbo", + * "type": "prompt" + * } + * } */ - 'Pagination.pageSize'?: number - /** @description Include deleted customers. */ - queryCustomerList?: boolean - } - requestBodies: never - headers: never + MeterQueryRow: { + value: number + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + windowStart: string + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + windowEnd: string + subject?: string + groupBy?: { + [key: string]: string + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + NotFoundProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** @description The server does not support the functionality required to fulfill the request. */ + NotImplementedProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** @description Notification channel. */ + NotificationChannel: components['schemas']['NotificationChannelWebhook'] + /** @description Union type for requests creating new notification channel with certain type. */ + NotificationChannelCreateRequest: components['schemas']['NotificationChannelWebhookCreateRequest'] + /** @description Metadata only fields of a notification channel. */ + NotificationChannelMeta: { + /** + * Channel Unique Identifier + * @description Identifies the notification channel. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + */ + readonly id: string + /** + * Channel Type + * @description Notification channel type. + */ + readonly type: components['schemas']['NotificationChannelType'] + } + /** + * @description Order by options for notification channels. + * @enum {string} + */ + NotificationChannelOrderBy: 'id' | 'type' | 'createdAt' | 'updatedAt' + /** @description Paginated response */ + NotificationChannelPaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['NotificationChannel'][] + } + /** + * @description Type of the notification channel. + * @enum {string} + */ + NotificationChannelType: 'WEBHOOK' + /** @description Notification channel with webhook type. */ + NotificationChannelWebhook: { + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * Channel Unique Identifier + * @description Identifies the notification channel. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + */ + readonly id: string + /** + * Channel Type + * @description Notification channel type. + * @enum {string} + */ + type: 'WEBHOOK' + /** + * Channel Name + * @description User friendly name of the channel. + * @example customer-webhook + */ + name: string + /** + * Channel Disabled + * @description Whether the channel is disabled or not. + * @default false + * @example true + */ + disabled: boolean + /** + * Webhook URL + * @description Webhook URL where the notification is sent. + * @example https://example.com/webhook + */ + url: string + /** + * Custom HTTP Headers + * @description Custom HTTP headers sent as part of the webhook request. + */ + customHeaders?: { + [key: string]: string + } + /** + * Signing Secret + * @description Signing secret used for webhook request validation on the receiving end. + * + * Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 + * @example whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 + */ + signingSecret?: string + } + /** @description Request with input parameters for creating new notification channel with webhook type. */ + NotificationChannelWebhookCreateRequest: { + /** + * Channel Type + * @description Notification channel type. + * @enum {string} + */ + type: 'WEBHOOK' + /** + * Channel Name + * @description User friendly name of the channel. + * @example customer-webhook + */ + name: string + /** + * Channel Disabled + * @description Whether the channel is disabled or not. + * @default false + * @example true + */ + disabled: boolean + /** + * Webhook URL + * @description Webhook URL where the notification is sent. + * @example https://example.com/webhook + */ + url: string + /** + * Custom HTTP Headers + * @description Custom HTTP headers sent as part of the webhook request. + */ + customHeaders?: { + [key: string]: string + } + /** + * Signing Secret + * @description Signing secret used for webhook request validation on the receiving end. + * + * Format: `base64` encoded random bytes optionally prefixed with `whsec_`. Recommended size: 24 + * @example whsec_S6g2HLnTwd9AhHwUIMFggVS9OfoPafN8 + */ + signingSecret?: string + } + /** @description Type of the notification event. */ + NotificationEvent: { + /** + * Event Identifier + * @description A unique identifier of the notification event. + * @example 01J2KNP1YTXQRXHTDJ4KPR7PZ0 + */ + readonly id: string + /** + * Event Type + * @description Type of the notification event. + */ + readonly type: components['schemas']['NotificationEventType'] + /** + * Creation Time + * Format: date-time + * @description Timestamp when the notification event was created in RFC 3339 format. + * @example 2023-01-01T01:01:01.001Z + */ + readonly createdAt: string + readonly rule: components['schemas']['NotificationRule'] + /** + * Delivery Status + * @description The delivery status of the notification event. + */ + readonly deliveryStatus: components['schemas']['NotificationEventDeliveryStatus'][] + readonly payload: components['schemas']['NotificationEventPayload'] + /** + * Annotations + * @description Set of key-value pairs managed by the system. Cannot be modified by user. + */ + readonly annotations?: components['schemas']['Annotations'] + } + /** @description Payload for notification event with `entitlements.balance.threshold` type. */ + NotificationEventBalanceThresholdPayload: { + /** + * Notification Event Identifier + * @description A unique identifier for the notification event the payload belongs to. + * @example 01J2KNP1YTXQRXHTDJ4KPR7PZ0 + */ + readonly id: string + /** + * Notification Event Type + * @description Type of the notification event. + * @enum {string} + */ + readonly type: 'entitlements.balance.threshold' + /** + * Creation Time + * Format: date-time + * @description Timestamp when the notification event was created in RFC 3339 format. + * @example 2023-01-01T01:01:01.001Z + */ + readonly timestamp: string + /** + * Payload Data + * @description The data of the payload. + */ + readonly data: components['schemas']['NotificationEventBalanceThresholdPayloadData'] + } + /** @description Data of the payload for notification event with `entitlements.balance.threshold` type. */ + NotificationEventBalanceThresholdPayloadData: { + /** Entitlement */ + readonly entitlement: components['schemas']['EntitlementMetered'] + /** Feature */ + readonly feature: components['schemas']['Feature'] + /** Subject */ + readonly subject: components['schemas']['Subject'] + /** Entitlement Value */ + readonly value: components['schemas']['EntitlementValue'] + /** Threshold */ + readonly threshold: components['schemas']['NotificationRuleBalanceThresholdValue'] + } + /** @description The delivery status of the notification event. */ + NotificationEventDeliveryStatus: { + /** + * @description Delivery state of the notification event to the channel. + * @example SUCCESS + */ + readonly state: components['schemas']['NotificationEventDeliveryStatusState'] + /** + * State Reason + * @description The reason of the last deliverry state update. + * @example Failed to dispatch event due to provider error. + */ + readonly reason: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the status was last updated in RFC 3339 format. + * @example 2023-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Notification Channel + * @description Notification channel the delivery sattus associated with. + */ + readonly channel: components['schemas']['NotificationChannelMeta'] + } + /** + * Delivery State + * @description The delivery state of the notification event to the channel. + * @enum {string} + */ + NotificationEventDeliveryStatusState: + | 'SUCCESS' + | 'FAILED' + | 'SENDING' + | 'PENDING' + /** + * @description Order by options for notification channels. + * @enum {string} + */ + NotificationEventOrderBy: 'id' | 'createdAt' + /** @description Paginated response */ + NotificationEventPaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['NotificationEvent'][] + } + /** @description The delivery status of the notification event. */ + NotificationEventPayload: components['schemas']['NotificationEventBalanceThresholdPayload'] + /** + * @description Type of the notification event. + * @enum {string} + */ + NotificationEventType: 'entitlements.balance.threshold' + /** @description Notification Rule. */ + NotificationRule: components['schemas']['NotificationRuleBalanceThreshold'] + /** @description Notification rule with entitlements.balance.threshold type. */ + NotificationRuleBalanceThreshold: { + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * Rule Unique Identifier + * @description Identifies the notification rule. + * @example 01ARZ3NDEKTSV4RRFFQ69G5FAV + */ + readonly id: string + /** + * Rule Type + * @description Notification rule type. + * @enum {string} + */ + type: 'entitlements.balance.threshold' + /** + * Rule Name + * @description The user friendly name of the notification rule. + * @example Balance threshold reached + */ + name: string + /** + * Rule Disabled + * @description Whether the rule is disabled or not. + * @default false + * @example true + */ + disabled: boolean + /** + * Channels assigned to Rule + * @description List of notification channels the rule applies to. + */ + channels: components['schemas']['NotificationChannelMeta'][] + /** + * Entitlement Balance Thresholds + * @description List of thresholds the rule suppose to be triggered. + */ + thresholds: components['schemas']['NotificationRuleBalanceThresholdValue'][] + /** + * Features + * @description Optional field containing list of features the rule applies to. + */ + features?: components['schemas']['FeatureMeta'][] + } + /** @description Request with input parameters for creating new notification rule with entitlements.balance.threashold type. */ + NotificationRuleBalanceThresholdCreateRequest: { + /** + * Rule Type + * @description Notification rule type. + * @enum {string} + */ + type: 'entitlements.balance.threshold' + /** + * Rule Name + * @description The user friendly name of the notification rule. + * @example Balance threshold reached + */ + name: string + /** + * Rule Disabled + * @description Whether the rule is disabled or not. + * @default false + * @example true + */ + disabled: boolean + /** + * Entitlement Balance Thresholds + * @description List of thresholds the rule suppose to be triggered. + */ + thresholds: components['schemas']['NotificationRuleBalanceThresholdValue'][] + /** + * Channels + * @description List of notification channels the rule is applied to. + */ + channels: string[] + /** + * Features + * @description Optional field for defining the scope of notification by feature. It may contain features by id or key. + */ + features?: string[] + } + /** @description Threshold value with multiple supported types. */ + NotificationRuleBalanceThresholdValue: { + /** + * Threshold Value + * Format: double + * @description Value of the threshold. + * @example 100 + */ + value: number + /** + * @description Type of the threshold. + * @example NUMBER + */ + type: components['schemas']['NotificationRuleBalanceThresholdValueType'] + } + /** + * Notification balance threshold type + * @description Type of the rule in the balance threshold specification. + * @enum {string} + */ + NotificationRuleBalanceThresholdValueType: 'PERCENT' | 'NUMBER' + /** @description Union type for requests creating new notification rule with certain type. */ + NotificationRuleCreateRequest: components['schemas']['NotificationRuleBalanceThresholdCreateRequest'] + /** + * @description Order by options for notification channels. + * @enum {string} + */ + NotificationRuleOrderBy: 'id' | 'type' | 'createdAt' | 'updatedAt' + /** @description Paginated response */ + NotificationRulePaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['NotificationRule'][] + } + /** @description Numeric represents an arbitrary precision number. */ + Numeric: string + /** + * @description OAuth2 authorization code grant error types. + * @enum {string} + */ + OAuth2AuthorizationCodeGrantErrorType: + | 'invalid_request' + | 'unauthorized_client' + | 'access_denied' + | 'unsupported_response_type' + | 'invalid_scope' + | 'server_error' + | 'temporarily_unavailable' + /** @description Numeric representation of a percentage */ + Percentage: string + /** @description A period with a start and end time. */ + Period: { + /** + * Format: date-time + * @description Period start time. + * @example 2023-01-01T01:01:01.001Z + */ + from: string + /** + * Format: date-time + * @description Period end time. + * @example 2023-02-01T01:01:01.001Z + */ + to: string + } + /** + * @description Order by options for plan phases. + * @enum {string} + */ + PhasesOrderBy: 'key' | 'start_after' + /** @description Plans provide a template for subscriptions. */ + Plan: { + /** + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * Key + * @description A semi-unique identifier for the resource. + */ + key: string + /** + * Version + * @description Version of the plan. Incremented when the plan is updated. + * @default 1 + */ + readonly version: number + /** + * Currency + * @description The currency code of the plan. + * @default USD + */ + currency: components['schemas']['CurrencyCode'] + /** + * Effective start date + * Format: date-time + * @description The date and time when the plan becomes effective. When not specified, the plan is a draft. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveFrom?: string + /** + * Effective end date + * Format: date-time + * @description The date and time when the plan is no longer effective. When not specified, the plan is effective indefinitely. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveTo?: string + /** + * Status + * @description The status of the plan. + * Computed based on the effective start and end dates: + * - draft = no effectiveFrom + * - active = effectiveFrom <= now < effectiveTo + * - archived / inactive = effectiveTo <= now + * - scheduled = now < effectiveFrom < effectiveTo + */ + readonly status: components['schemas']['PlanStatus'] + /** + * Plan phases + * @description The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. + * A phase switch occurs only at the end of a billing period, ensuring that a single subscription invoice will not include charges from different phase prices. + */ + phases: components['schemas']['PlanPhase'][] + } + /** @description Resource create operation model. */ + PlanCreate: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Key + * @description A semi-unique identifier for the resource. + */ + key: string + /** + * Currency + * @description The currency code of the plan. + * @default USD + */ + currency: components['schemas']['CurrencyCode'] + /** + * Effective start date + * Format: date-time + * @description The date and time when the plan becomes effective. When not specified, the plan is a draft. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveFrom?: string + /** + * Effective end date + * Format: date-time + * @description The date and time when the plan is no longer effective. When not specified, the plan is effective indefinitely. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveTo?: string + /** + * Plan phases + * @description The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. + * A phase switch occurs only at the end of a billing period, ensuring that a single subscription invoice will not include charges from different phase prices. + */ + phases: components['schemas']['PlanPhase'][] + } + /** + * @description Order by options for plans. + * @enum {string} + */ + PlanOrderBy: 'id' | 'key' | 'version' | 'create_at' | 'updated_at' + /** @description Paginated response */ + PlanPaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['Plan'][] + } + /** @description The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. */ + PlanPhase: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** @description Unique key among the plan phases. Used to reference the phase in the subscription & plan. */ + key: string + /** + * Rate cards + * @description The rate cards of the plan. + */ + rateCards: components['schemas']['RateCard'][] + /** + * Start after + * Format: duration + * @description The time after which the plan starts compared to subscription start + * @example P1Y1D + */ + startAfter: string | null + /** + * Discounts + * @description The discounts on the plan. + */ + discounts?: components['schemas']['AppliedDiscount'][] + } + /** @description Resource create operation model. */ + PlanPhaseCreate: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** @description Unique key among the plan phases. Used to reference the phase in the subscription & plan. */ + key: string + /** + * Rate cards + * @description The rate cards of the plan. + */ + rateCards: components['schemas']['RateCard'][] + /** + * Start after + * Format: duration + * @description The time after which the plan starts compared to subscription start + * @example P1Y1D + */ + startAfter: string | null + /** + * Discounts + * @description The discounts on the plan. + */ + discounts?: components['schemas']['AppliedDiscount'][] + } + /** @description Paginated response */ + PlanPhasePaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['PlanPhase'][] + } + /** @description Resource create or update operation model. */ + PlanPhaseUpdate: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name?: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** @description Unique key among the plan phases. Used to reference the phase in the subscription & plan. */ + key?: string + /** + * Rate cards + * @description The rate cards of the plan. + */ + rateCards?: components['schemas']['RateCard'][] + /** + * Start after + * Format: duration + * @description The time after which the plan starts compared to subscription start + * @example P1Y1D + */ + startAfter?: string | null + /** + * Discounts + * @description The discounts on the plan. + */ + discounts?: components['schemas']['AppliedDiscount'][] + } + /** @description References an exact plan. */ + PlanReference: { + /** @description The plan key. */ + key: string + /** @description The plan version. */ + version: number + } + /** + * @description The status of a plan. + * @enum {string} + */ + PlanStatus: 'draft' | 'active' | 'archived' | 'scheduled' + /** @description Resource create or update operation model. */ + PlanUpdate: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name?: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Currency + * @description The currency code of the plan. + * @default USD + */ + currency: components['schemas']['CurrencyCode'] + /** + * Effective start date + * Format: date-time + * @description The date and time when the plan becomes effective. When not specified, the plan is a draft. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveFrom?: string + /** + * Effective end date + * Format: date-time + * @description The date and time when the plan is no longer effective. When not specified, the plan is effective indefinitely. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveTo?: string + /** + * Plan phases + * @description The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. + * A phase switch occurs only at the end of a billing period, ensuring that a single subscription invoice will not include charges from different phase prices. + */ + phases?: components['schemas']['PlanPhase'][] + } + /** @description A consumer portal token. + * + * Validator doesn't obey required for readOnly properties + * See: https://github.com/stoplightio/spectral/issues/1274 */ + PortalToken: { + /** + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id?: string + /** @example customer-1 */ + subject: string + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + readonly expiresAt?: string + readonly expired?: boolean + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T01:01:01.001Z + */ + readonly createdAt?: string + /** + * @description The token is only returned at creation. + * @example om_portal_IAnD3PpWW2A2Wr8m9jfzeHlGX8xmCXwG.y5q4S-AWqFu6qjfaFz0zQq4Ez28RsnyVwJffX5qxMvo + */ + readonly token?: string + /** + * @description Optional, if defined only the specified meters will be allowed. + * @example [ + * "tokens_total" + * ] + */ + allowedMeterSlugs?: string[] + } + /** @description One or more conditions given in the request header fields evaluated to false when tested on the server. */ + PreconditionFailedProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** + * @description The payment term of a flat price. + * One of: in_advance or in_arrears. + * @enum {string} + */ + PricePaymentTerm: 'in_advance' | 'in_arrears' + /** @description A price tier. + * At least one price component is required in each tier. */ + PriceTier: { + /** + * Up to quantity + * Format: double + * @description Up to and including to this quantity will be contained in the tier. + * If null, the tier is open-ended. + */ + upToAmount: number | null + /** + * Flat price component + * @description The flat price component of the tier. + */ + flatPrice: components['schemas']['FlatPrice'] | null + /** + * Unit price component + * @description The unit price component of the tier. + */ + unitPrice: components['schemas']['UnitPrice'] | null + } + /** @description A price tier. + * At least one price component is required in each tier. */ + PriceTierUpdateItem: { + /** + * Up to quantity + * Format: double + * @description Up to and including to this quantity will be contained in the tier. + * If null, the tier is open-ended. + */ + upToAmount: number | null + /** + * Flat price component + * @description The flat price component of the tier. + */ + flatPrice: components['schemas']['FlatPriceUpdateItem'] | null + /** + * Unit price component + * @description The unit price component of the tier. + */ + unitPrice: components['schemas']['UnitPriceUpdateItem'] | null + } + /** @description Paginated response */ + ProfilePaginatedResponse: { + /** + * @description The items in the current page. + * @example 500 + */ + totalCount: number + /** + * @description The items in the current page. + * @example 1 + */ + page: number + /** + * @description The items in the current page. + * @example 100 + */ + pageSize: number + /** @description The items in the current page. */ + items: components['schemas']['BillingProfile'][] + } + /** @description A rate card defines the pricing and entitlement of a feature or service. */ + RateCard: + | components['schemas']['RateCardFlatFee'] + | components['schemas']['RateCardUsageBased'] + /** @description Entitlement template of a boolean entitlement. */ + RateCardBooleanEntitlement: { + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** @enum {string} */ + type: 'boolean' + } + /** @description Entitlement templates are used to define the entitlements of a plan. + * Features are omitted from the entitlement template, as they are defined in the rate card. */ + RateCardEntitlement: + | components['schemas']['RateCardMeteredEntitlement'] + | components['schemas']['RateCardStaticEntitlement'] + | components['schemas']['RateCardBooleanEntitlement'] + /** @description A flat fee rate card defines a one-time purchase or a recurring fee. */ + RateCardFlatFee: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * Key + * @description A semi-unique identifier for the resource. + */ + key: string + /** + * @description The type of the RateCard. (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'flat_fee' + /** + * Feature key + * @description The feature the customer is entitled to use. + */ + featureKey?: string + entitlementTemplate?: components['schemas']['RateCardEntitlement'] + /** + * Tax config + * @description The tax config of the rate card. + * When undefined, the tax config of the feature or the default tax config of the plan is used. + */ + taxConfig?: components['schemas']['TaxConfig'] + /** + * Billing cadence + * Format: duration + * @description The billing cadence of the rate card. + * When null it means it is a one time fee. + */ + billingCadence: string | null + /** + * Price + * @description The price of the rate card. + * When null, the feature or service is free. + * @example {} + */ + price: components['schemas']['FlatPriceWithPaymentTerm'] | null + } + /** @description A flat fee rate card defines a one-time purchase or a recurring fee. */ + RateCardFlatFeeUpdateItem: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * @description The type of the RateCard. (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'flat_fee' + /** + * Feature key + * @description The feature the customer is entitled to use. + */ + featureKey?: string + entitlementTemplate?: components['schemas']['RateCardEntitlement'] + /** + * Tax config + * @description The tax config of the rate card. + * When undefined, the tax config of the feature or the default tax config of the plan is used. + */ + taxConfig?: components['schemas']['TaxConfig'] + /** + * Billing cadence + * Format: duration + * @description The billing cadence of the rate card. + * When null it means it is a one time fee. + */ + billingCadence: string | null + /** + * Price + * @description The price of the rate card. + * When null, the feature or service is free. + * @example {} + */ + price: components['schemas']['FlatPriceWithPaymentTermUpdateItem'] | null + } + /** @description The entitlement template with a metered entitlement. */ + RateCardMeteredEntitlement: { + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** @enum {string} */ + type: 'metered' + /** + * Soft limit + * @description If softLimit=true the subject can use the feature even if the entitlement is exhausted, hasAccess will always be true. + * @default false + */ + isSoftLimit: boolean + /** + * Initial grant amount + * Format: double + * @description You can grant usage automatically alongside the entitlement, the example scenario would be creating a starting balance. + * If an amount is specified here, a grant will be created alongside the entitlement with the specified amount. + * That grant will have it's rollover settings configured in a way that after each reset operation, the balance will return the original amount specified here. + * Manually creating such a grant would mean having the "amount", "minRolloverAmount", and "maxRolloverAmount" fields all be the same. + */ + issueAfterReset?: number + /** + * Issue grant after reset priority + * Format: uint8 + * @description Defines the grant priority for the default grant. + * @default 1 + */ + issueAfterResetPriority: number + /** + * Preserve overage at reset + * @description If true, the overage is preserved at reset. If false, the usage is reset to 0. + * @default false + */ + preserveOverageAtReset: boolean + /** + * Usage Period + * Format: duration + * @description The interval of the metered entitlement. + * Defaults to the billing cadence of the rate card. + */ + usagePeriod?: string + } + /** @description Entitlement template of a static entitlement. */ + RateCardStaticEntitlement: { + /** @description Additional metadata for the feature. */ + metadata?: components['schemas']['Metadata'] + /** @enum {string} */ + type: 'static' + /** + * Format: json + * @description The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. + * @example { "integrations": ["github"] } + */ + config: string + } + /** @description A rate card defines the pricing and entitlement of a feature or service. */ + RateCardUpdateItem: + | components['schemas']['RateCardFlatFeeUpdateItem'] + | components['schemas']['RateCardUsageBasedUpdateItem'] + /** @description A usage-based rate card defines a price based on usage. */ + RateCardUsageBased: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * Key + * @description A semi-unique identifier for the resource. + */ + key: string + /** + * @description The type of the RateCard. (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'usage_based' + /** + * Feature key + * @description The feature the customer is entitled to use. + */ + featureKey?: string + entitlementTemplate?: components['schemas']['RateCardEntitlement'] + /** + * Tax config + * @description The tax config of the rate card. + * When undefined, the tax config of the feature or the default tax config of the plan is used. + */ + taxConfig?: components['schemas']['TaxConfig'] + /** + * Billing cadence + * Format: duration + * @description The billing cadence of the rate card. + */ + billingCadence: string + /** + * Price + * @description The price of the rate card. + * When null, the feature or service is free. + * @example {} + */ + price: + | (components['schemas']['UnitPriceWithCommitments'] | null) + | (components['schemas']['TieredPriceWithCommitments'] | null) + | (components['schemas']['FlatPriceWithPaymentTerm'] | null) + } + /** @description A usage-based rate card defines a price based on usage. */ + RateCardUsageBasedUpdateItem: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * @description The type of the RateCard. (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'usage_based' + /** + * Feature key + * @description The feature the customer is entitled to use. + */ + featureKey?: string + entitlementTemplate?: components['schemas']['RateCardEntitlement'] + /** + * Tax config + * @description The tax config of the rate card. + * When undefined, the tax config of the feature or the default tax config of the plan is used. + */ + taxConfig?: components['schemas']['TaxConfig'] + /** + * Billing cadence + * Format: duration + * @description The billing cadence of the rate card. + */ + billingCadence: string + /** + * Price + * @description The price of the rate card. + * When null, the feature or service is free. + * @example {} + */ + price: + | (components['schemas']['UnitPriceWithCommitmentsUpdateItem'] | null) + | (components['schemas']['TieredPriceWithCommitmentsUpdateItem'] | null) + | (components['schemas']['FlatPriceWithPaymentTermUpdateItem'] | null) + } + /** + * @description Recurring period with an interval and an anchor. + * @example { + * "interval": "DAY", + * "anchor": "2023-01-01T01:01:01.001Z" + * } + */ + RecurringPeriod: { + /** + * Interval + * @description The unit of time for the interval. + */ + interval: components['schemas']['RecurringPeriodInterval'] + /** + * Anchor time + * Format: date-time + * @description A date-time anchor to base the recurring period on. + * @example 2023-01-01T01:01:01.001Z + */ + anchor: string + } + /** + * @description Recurring period with an interval and an anchor. + * @example { + * "interval": "DAY", + * "anchor": "2023-01-01T01:01:01.001Z" + * } + */ + RecurringPeriodCreateInput: { + /** + * Interval + * @description The unit of time for the interval. + */ + interval: components['schemas']['RecurringPeriodInterval'] + /** + * Anchor time + * Format: date-time + * @description A date-time anchor to base the recurring period on. + * @example 2023-01-01T01:01:01.001Z + */ + anchor?: string + } + /** + * @description The unit of time for the interval. + * One of: `day`, `week`, `month`, or `year`. + * @enum {string} + */ + RecurringPeriodInterval: 'DAY' | 'WEEK' | 'MONTH' | 'YEAR' + /** + * @description The direction of the phase shift when a phase is removed. + * @enum {string} + */ + RemovePhaseShifting: 'Next' | 'Prev' + /** @description Reset parameters */ + ResetEntitlementUsageInput: { + /** + * Format: date-time + * @description The time at which the reset takes effect, defaults to now. The reset cannot be in the future. The provided value is truncated to the minute due to how historical meter data is stored. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveAt?: string + /** @description Determines whether the usage period anchor is retained or reset to the effectiveAt time. + * - If true, the usage period anchor is retained. + * - If false, the usage period anchor is reset to the effectiveAt time. */ + retainAnchor?: boolean + /** @description Determines whether the overage is preserved or forgiven, overriding the entitlement's default behavior. + * - If true, the overage is preserved. + * - If false, the overage is forgiven. */ + preserveOverage?: boolean + } + SandboxApp: { + /** + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** @description The marketplace listing that this installed app is based on. */ + readonly listing: components['schemas']['MarketplaceListing'] + /** @description Status of the app connection. */ + readonly status: components['schemas']['AppStatus'] + /** + * @description The app's type is Sandbox. + * @enum {string} + */ + type: 'sandbox' + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + ServiceUnavailableProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** + * @description The order direction. + * @enum {string} + */ + SortOrder: 'ASC' | 'DESC' + /** + * @description A installed Stripe app object. + * @example { + * "id": "01G65Z755AFWAKHE12NY0CQ9FH", + * "type": "stripe", + * "name": "Stripe", + * "status": "ready", + * "listing": { + * "type": "stripe", + * "name": "Stripe", + * "description": "Stripe interation allows you to collect payments with Stripe.", + * "iconUrl": "/images/stripe.png", + * "capabilities": [ + * { + * "type": "calculateTax", + * "key": "stripe_calculate_tax", + * "name": "Calculate Tax", + * "description": "Stripe Tax calculates tax portion of the invoices." + * }, + * { + * "type": "invoiceCustomers", + * "key": "stripe_invoice_customers", + * "name": "Invoice Customers", + * "description": "Stripe invoices customers with due amount." + * }, + * { + * "type": "collectPayments", + * "key": "stripe_collect_payments", + * "name": "Collect Payments", + * "description": "Stripe payments collects outstanding revenue with Stripe customer's default payment method." + * } + * ] + * }, + * "createdAt": "2024-01-01T01:01:01.001Z", + * "updatedAt": "2024-01-01T01:01:01.001Z", + * "stripeAccountId": "acct_123456789", + * "livemode": true + * } + */ + StripeApp: { + /** + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** @description The marketplace listing that this installed app is based on. */ + readonly listing: components['schemas']['MarketplaceListing'] + /** @description Status of the app connection. */ + readonly status: components['schemas']['AppStatus'] + /** + * @description The app's type is Stripe. + * @enum {string} + */ + type: 'stripe' + /** @description The Stripe account ID. */ + stripeAccountId: string + /** @description Livemode, true if the app is in production mode. */ + livemode: boolean + } + /** + * @description Stripe CheckoutSession.mode + * @enum {string} + */ + StripeCheckoutSessionMode: 'setup' + /** + * @description Stripe payment intent status. + * @enum {string} + */ + StripePaymentIntentStatus: + | 'canceled' + | 'processing' + | 'requires_action' + | 'requires_confirmation' + | 'requires_payment_method' + | 'succeeded' + /** @description Stripe setup intent. */ + StripeSetupIntent: { + /** @description The setup intent id. */ + id: string + /** @description The setup intent status. */ + status: components['schemas']['StripePaymentIntentStatus'] + /** @description The setup intent payment method. */ + payment_method?: string + /** @description The setup intent payment method types. */ + payment_method_types?: string[] + /** @description The setup intent customer. */ + customer: string + /** @description The setup intent metadata. */ + metadata: { + [key: string]: string + } + } + /** @description The tax config for Stripe. */ + StripeTaxConfig: { + /** + * Tax code + * @description Product tax code. + * + * See: https://docs.stripe.com/tax/tax-codes + * @example txcd_10000000 + */ + code: string + } + /** @description Stripe webhook event. */ + StripeWebhookEvent: { + /** @description The event ID. */ + id: string + /** @description The event type. */ + type: string + /** @description Live mode. */ + livemode: boolean + /** + * Format: int32 + * @description The event created timestamp. + */ + created: number + /** @description The event data. */ + data: { + object: components['schemas']['StripeSetupIntent'] + } + } + /** @description Stripe webhook response. */ + StripeWebhookResponse: { + /** + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + namespaceId: string + /** + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + appId: string + /** + * @description ULID (Universally Unique Lexicographically Sortable Identifier). + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + customerId?: string + } + /** + * @description A subject is a unique identifier for a user or entity. + * @example { + * "id": "01G65Z755AFWAKHE12NY0CQ9FH", + * "key": "customer-id", + * "displayName": "Customer Name", + * "metadata": { + * "hubspotId": "123456" + * }, + * "currentPeriodStart": "2023-01-01T00:00:00Z", + * "currentPeriodEnd": "2023-02-01T00:00:00Z", + * "stripeCustomerId": "cus_JMOlctsKV8" + * } + */ + Subject: { + /** + * @description A unique identifier for the subject. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * @description A unique, human-readable identifier for the subject. + * @example customer-id + */ + key: string + /** + * @description A human-readable display name for the subject. + * @example Customer Name + */ + displayName?: string | null + /** @example {} */ + metadata?: { + [key: string]: unknown + } | null + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T00:00:00Z + */ + currentPeriodStart?: string + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-02-01T00:00:00Z + */ + currentPeriodEnd?: string + /** @example cus_JMOlctsKV8 */ + stripeCustomerId?: string | null + } + /** + * @description A subject is a unique identifier for a user or entity. + * @example { + * "key": "customer-id", + * "displayName": "Customer Name", + * "metadata": { + * "hubspotId": "123456" + * }, + * "currentPeriodStart": "2023-01-01T00:00:00Z", + * "currentPeriodEnd": "2023-02-01T00:00:00Z", + * "stripeCustomerId": "cus_JMOlctsKV8" + * } + */ + SubjectUpsert: { + /** + * @description A unique, human-readable identifier for the subject. + * @example customer-id + */ + key: string + /** + * @description A human-readable display name for the subject. + * @example Customer Name + */ + displayName?: string | null + /** @example {} */ + metadata?: { + [key: string]: unknown + } | null + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-01-01T00:00:00Z + */ + currentPeriodStart?: string + /** + * Format: date-time + * @description [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * @example 2023-02-01T00:00:00Z + */ + currentPeriodEnd?: string + /** @example cus_JMOlctsKV8 */ + stripeCustomerId?: string | null + } + /** @description Subscription is an exact subscription instance. */ + Subscription: { + /** + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * @description The customer ID of the subscription. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + customerId: string + /** @description The base plan of the subscription. */ + plan: components['schemas']['PlanReference'] + /** + * Currency + * @description The currency code of the subscription. + * Will be revised once we add multi currency support. + * @default USD + */ + currency: components['schemas']['CurrencyCode'] + /** + * Format: date-time + * @description If the subscription is canceled or otherwise have to end activeTo denotes the end date. + * @example 2023-01-01T01:01:01.001Z + */ + activeTo?: string + } + /** @description Subscription item add operation. */ + SubscriptionEditAdd: { + /** @enum {string} */ + op: 'add' + path: string + value: components['schemas']['SubscriptionPhaseCreate'] + } + /** @description Subscription item add operation. */ + SubscriptionEditAddItem: { + /** @enum {string} */ + op: 'add' + path: string + value: components['schemas']['RateCard'] + } + /** @description Subscription item add operation. */ + SubscriptionEditAddUpdateItem: { + /** @enum {string} */ + op: 'add' + path: string + value: components['schemas']['RateCardUpdateItem'] + } + /** @description Subscription phase extend operation. */ + SubscriptionEditExtend: { + /** @enum {string} */ + op: 'extend' + path: string + value: { + /** Format: duration */ + extendBy: string + } + } + /** @description Subscription phase remove operation. */ + SubscriptionEditRemoveItem: { + /** @enum {string} */ + op: 'remove' + path: string + } + /** @description Subscription phase remove operation. */ + SubscriptionEditRemoveUpdateItem: { + /** @enum {string} */ + op: 'remove' + path: string + } + /** @description Subscription item remove operation with a value. */ + SubscriptionEditRemoveWithValue: { + /** @enum {string} */ + op: 'remove' + path: string + value: { + shift: components['schemas']['RemovePhaseShifting'] + } + } + /** @description Expanded subscription */ + SubscriptionExpanded: { + /** + * ID + * @description A unique identifier for the resource. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + readonly id: string + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** + * @description The customer ID of the subscription. + * @example 01G65Z755AFWAKHE12NY0CQ9FH + */ + customerId: string + /** @description The base plan of the subscription. */ + plan: components['schemas']['PlanReference'] + /** + * Currency + * @description The currency code of the subscription. + * Will be revised once we add multi currency support. + * @default USD + */ + currency: components['schemas']['CurrencyCode'] + /** + * Format: date-time + * @description If the subscription is canceled or otherwise have to end activeTo denotes the end date. + * @example 2023-01-01T01:01:01.001Z + */ + activeTo?: string + phases: components['schemas']['SubscriptionPhaseExpanded'][] + } + /** @description The actual contents of the Subscription, what the user gets, what they pay, etc... */ + SubscriptionItem: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** @description The identifier of the RateCard. + * SubscriptionItem/RateCard can be identified, it has a reference: + * + * 1. If a Feature is associated with the SubscriptionItem, it is identified by the Feature + * 1.1 It can be an ID reference, for an exact version of the Feature (Features can change across versions) + * 1.2 It can be a Key reference, which always refers to the latest (active or inactive) version of a Feature + * + * 2. If a Feature is not associated with the SubscriptionItem, it is referenced by the Price + * + * We say “referenced by the Price” regardless of how a price itself is referenced, it colloquially makes sense to say “paying the same price for the same thing”. In practice this should be derived from what's printed on the invoice line-item. */ + key: string + /** + * Billing cadence + * Format: duration + * @description The billing cadence of the rate card. + * When null, the rate card is a one-time purchase. + */ + billingCandence: string | null + /** + * Price + * @description The price of the rate card. + * When null, the feature or service is free. + * @example {} + */ + price: + | (components['schemas']['FlatPriceWithPaymentTerm'] | null) + | (components['schemas']['UnitPriceWithCommitments'] | null) + | (components['schemas']['TieredPriceWithCommitments'] | null) + | (components['schemas']['FlatPriceWithPaymentTerm'] | null) + /** @description Describes what access is gained via the SubscriptionItem */ + included?: { + /** @description The feature the customer is entitled to use. */ + feature: components['schemas']['Feature'] + entitlement?: components['schemas']['Entitlement'] + } + /** + * Tax config + * @description The tax config of the Subscription Item. + * When undefined, the tax config of the feature or the default tax config of the plan is used. + */ + taxConfig?: components['schemas']['TaxConfig'] + } + /** @description Subscription phase create input. */ + SubscriptionPhaseCreate: { + /** + * Start after + * Format: duration + * @description Interval after the subscription starts to transition to the phase. + * When null, the phase starts immediately after the subscription starts. + * @example P1Y1D + */ + startAfter: string | null + /** + * Duration + * Format: duration + * @description The intended duration of the new phase. + * @example P1M + */ + duration: string + /** + * Discount + * @description The discounts on the plan. + */ + discounts?: components['schemas']['AppliedDiscountUpdateItem'][] + } + /** @description Expanded subscription phase */ + SubscriptionPhaseExpanded: { + /** + * Display name + * @description Human-readable name for the resource. Between 1 and 256 characters. + */ + name: string + /** + * Description + * @description Optional description of the resource. Maximum 1024 characters. + */ + description?: string + /** + * Metadata + * @description Additional metadata for the resource. + */ + metadata?: components['schemas']['Metadata'] + /** + * Creation Time + * Format: date-time + * @description Timestamp of when the resource was created. + * @example 2024-01-01T01:01:01.001Z + */ + readonly createdAt: string + /** + * Last Update Time + * Format: date-time + * @description Timestamp of when the resource was last updated. + * @example 2024-01-01T01:01:01.001Z + */ + readonly updatedAt: string + /** + * Deletion Time + * Format: date-time + * @description Timestamp of when the resource was permanently deleted. + * @example 2024-01-01T01:01:01.001Z + */ + readonly deletedAt?: string + /** @description A locally unique identifier for the resource. */ + key: string + /** + * Duration + * Format: duration + * @description The intended duration of the new phase. + * @example P1M + */ + duration: string + /** + * Discount + * @description The discounts on the plan. + */ + discounts?: components['schemas']['AppliedDiscount'][] + /** + * Format: date-time + * @description The time from which the phase is active. + * @example 2023-01-01T01:01:01.001Z + */ + activeFrom: string + items: components['schemas']['SubscriptionItem'][] + } + /** @description Operational webhook reqeuest sent by Svix. */ + SvixOperationalWebhookRequest: { + /** + * Operational Webhook Type + * @description The type of the Svix operational webhook request. + * @enum {string} + */ + type: + | 'endpoint.created' + | 'endpoint.deleted' + | 'endpoint.disabled' + | 'endpoint.updated' + | 'message.attempt.exhausted' + | 'message.attempt.failing' + | 'message.attempt.recovered' + /** + * Operational Webhook Payload + * @description The payload of the Svix operational webhook request. + */ + data: { + [key: string]: string + } + } + /** @description Set of provider specific tax configs. */ + TaxConfig: { + /** + * Stripe tax config + * @description Stripe tax config. + */ + stripe?: components['schemas']['StripeTaxConfig'] + } + /** + * @description The mode of the tiered price. + * @enum {string} + */ + TieredPriceMode: 'volume' | 'graduated' + /** @description Tiered price with spend commitments. */ + TieredPriceWithCommitments: { + /** @enum {string} */ + type: 'tiered' + /** + * Mode + * @description Defines if the tiering mode is volume-based or graduated: + * - In `volume`-based tiering, the maximum quantity within a period determines the per unit price. + * - In `graduated` tiering, pricing can change as the quantity grows. + */ + mode: components['schemas']['TieredPriceMode'] + /** + * Tiers + * @description The tiers of the tiered price. + * At least one price component is required in each tier. + */ + tiers: components['schemas']['PriceTier'][] + /** + * Minimum amount + * @description The customer is committed to spend at least the amount. + */ + minimumAmount?: components['schemas']['Numeric'] + /** + * Maximum amount + * @description The customer is limited to spend at most the amount. + */ + maximumAmount?: components['schemas']['Numeric'] + } + /** @description Tiered price with spend commitments. */ + TieredPriceWithCommitmentsUpdateItem: { + /** + * Mode + * @description Defines if the tiering mode is volume-based or graduated: + * - In `volume`-based tiering, the maximum quantity within a period determines the per unit price. + * - In `graduated` tiering, pricing can change as the quantity grows. + */ + mode: components['schemas']['TieredPriceMode'] + /** + * Tiers + * @description The tiers of the tiered price. + * At least one price component is required in each tier. + */ + tiers: components['schemas']['PriceTierUpdateItem'][] + /** + * Minimum amount + * @description The customer is committed to spend at least the amount. + */ + minimumAmount?: components['schemas']['Numeric'] + /** + * Maximum amount + * @description The customer is limited to spend at most the amount. + */ + maximumAmount?: components['schemas']['Numeric'] + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + UnauthorizedProblemResponse: components['schemas']['UnexpectedProblemResponse'] + /** @description A Problem Details object (RFC 7807). + * Additional properties specific to the problem type may be present. */ + UnexpectedProblemResponse: { + /** + * Format: uri + * @description Type contains a URI that identifies the problem type. + * @default about:blank + * @example about:blank + */ + type: string + /** + * @description A a short, human-readable summary of the problem type. + * @example Bad Request + */ + title: string + /** + * Format: int16 + * @description The HTTP status code generated by the origin server for this occurrence of the problem. + * @example 400 + */ + status?: number + /** + * @description A human-readable explanation specific to this occurrence of the problem. + * @example The request body must be a JSON object. + */ + detail: string + /** + * Format: uri + * @description A URI reference that identifies the specific occurrence of the problem. + * @example urn:request:local/JMOlctsKV8-000001 + */ + instance: string + } & { + [key: string]: string | number + } + /** @description Unit price. */ + UnitPrice: { + /** @enum {string} */ + type: 'unit' + /** @description The amount of the unit price. */ + amount: components['schemas']['Numeric'] + } + /** @description Unit price. */ + UnitPriceUpdateItem: { + /** @description The amount of the unit price. */ + amount: components['schemas']['Numeric'] + } + /** @description Unit price with spend commitments. */ + UnitPriceWithCommitments: { + /** @enum {string} */ + type: 'unit' + /** @description The amount of the unit price. */ + amount: components['schemas']['Numeric'] + /** + * Minimum amount + * @description The customer is committed to spend at least the amount. + */ + minimumAmount?: components['schemas']['Numeric'] + /** + * Maximum amount + * @description The customer is limited to spend at most the amount. + */ + maximumAmount?: components['schemas']['Numeric'] + } + /** @description Unit price with spend commitments. */ + UnitPriceWithCommitmentsUpdateItem: { + /** @description The amount of the unit price. */ + amount: components['schemas']['Numeric'] + /** + * Minimum amount + * @description The customer is committed to spend at least the amount. + */ + minimumAmount?: components['schemas']['Numeric'] + /** + * Maximum amount + * @description The customer is limited to spend at most the amount. + */ + maximumAmount?: components['schemas']['Numeric'] + } + /** + * @description Aggregation window size. + * @enum {string} + */ + WindowSize: 'MINUTE' | 'HOUR' | 'DAY' + /** @description The windowed balance history. */ + WindowedBalanceHistory: { + /** @description The windowed balance history. + * - It only returns rows for windows where there was usage. + * - The windows are inclusive at their start and exclusive at their end. + * - The last window may be smaller than the window size and is inclusive at both ends. */ + windowedHistory: components['schemas']['BalanceHistoryWindow'][] + /** @description Grant burndown history. */ + burndownHistory: components['schemas']['GrantBurnDownHistorySegment'][] + } + } + responses: never + parameters: { + 'BillingInvoiceListParams.expand': components['schemas']['BillingInvoiceExpand'][] + 'BillingInvoiceListParams.extendedStatuses': components['schemas']['BillingInvoiceExtendedStatus'][] + 'BillingInvoiceListParams.issuedAfter': string + 'BillingInvoiceListParams.issuedBefore': string + 'BillingInvoiceListParams.statuses': components['schemas']['BillingInvoiceStatus'][] + /** @description The order direction. */ + 'CustomerOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'CustomerOrderByOrdering.orderBy': components['schemas']['CustomerOrderBy'] + /** @description The order direction. */ + 'CustomerOverrideOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'CustomerOverrideOrderByOrdering.orderBy': components['schemas']['BillingCustomerOverrideOrderBy'] + /** @description The order direction. */ + 'EntitlementOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'EntitlementOrderByOrdering.orderBy': components['schemas']['EntitlementOrderBy'] + /** @description The order direction. */ + 'FeatureOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'FeatureOrderByOrdering.orderBy': components['schemas']['FeatureOrderBy'] + /** @description The order direction. */ + 'GrantOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'GrantOrderByOrdering.orderBy': components['schemas']['GrantOrderBy'] + /** @description The order direction. */ + 'InvoiceOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'InvoiceOrderByOrdering.orderBy': components['schemas']['BillingInvoiceOrderBy'] + /** @description Number of items to return. + * + * Default is 100. */ + 'LimitOffset.limit': number + /** @description Number of items to skip. + * + * Default is 0. */ + 'LimitOffset.offset': number + /** @description The type of the app to install. */ + 'MarketplaceApiKeyInstallRequest.type': components['schemas']['AppType'] + /** @description The type of the app to install. */ + 'MarketplaceOAuth2InstallAuthorizeRequest.type': components['schemas']['AppType'] + /** @description Simple filter for group bys with exact match. */ + 'MeterQuery.filterGroupBy': { + [key: string]: string + } + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + 'MeterQuery.from': string + /** @description If not specified a single aggregate will be returned for each subject and time window. + * `subject` is a reserved group by value. */ + 'MeterQuery.groupBy': string[] + /** @description Filtering by multiple subjects. */ + 'MeterQuery.subject': string[] + /** @description End date-time in RFC 3339 format. + * + * Inclusive. */ + 'MeterQuery.to': string + /** @description If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. */ + 'MeterQuery.windowSize': components['schemas']['WindowSize'] + /** @description The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). + * If not specified, the UTC timezone will be used. */ + 'MeterQuery.windowTimeZone': string + /** @description The order direction. */ + 'NotificationChannelOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'NotificationChannelOrderByOrdering.orderBy': components['schemas']['NotificationChannelOrderBy'] + /** @description The order direction. */ + 'NotificationEventOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'NotificationEventOrderByOrdering.orderBy': components['schemas']['NotificationEventOrderBy'] + /** @description The order direction. */ + 'NotificationRuleOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'NotificationRuleOrderByOrdering.orderBy': components['schemas']['NotificationRuleOrderBy'] + /** @description Error code. + * Required with the error response. */ + 'OAuth2AuthorizationCodeGrantErrorParams.error': components['schemas']['OAuth2AuthorizationCodeGrantErrorType'] + /** @description Optional human-readable text providing additional information, + * used to assist the client developer in understanding the error that occurred. */ + 'OAuth2AuthorizationCodeGrantErrorParams.error_description': string + /** @description Optional uri identifying a human-readable web page with + * information about the error, used to provide the client + * developer with additional information about the error */ + 'OAuth2AuthorizationCodeGrantErrorParams.error_uri': string + /** @description Authorization code which the client will later exchange for an access token. + * Required with the success response. */ + 'OAuth2AuthorizationCodeGrantSuccessParams.code': string + /** @description Required if the "state" parameter was present in the client authorization request. + * The exact value received from the client: + * + * Unique, randomly generated, opaque, and non-guessable string that is sent + * when starting an authentication request and validated when processing the response. */ + 'OAuth2AuthorizationCodeGrantSuccessParams.state': string + /** @description The page number. */ + 'PaginatedQuery.page': number + /** @description The number of items in the page. */ + 'PaginatedQuery.pageSize': number + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + 'Pagination.page': number + /** @description Number of items per page. + * + * Default is 100. */ + 'Pagination.pageSize': number + /** @description The order direction. */ + 'PhasesOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'PhasesOrderByOrdering.orderBy': components['schemas']['PhasesOrderBy'] + /** @description The order direction. */ + 'PlanOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'PlanOrderByOrdering.orderBy': components['schemas']['PlanOrderBy'] + /** @description The order direction. */ + 'ProfileOrderByOrdering.order': components['schemas']['SortOrder'] + /** @description The order by field. */ + 'ProfileOrderByOrdering.orderBy': components['schemas']['BillingProfileOrderBy'] + /** @description Include deleted customers. */ + 'queryCustomerList.includeDeleted': boolean + /** @description Filter customers by name. + * Case-insensitive partial match. */ + 'queryCustomerList.name': string + /** @description Filter customers by primary email. + * Case-insensitive partial match. */ + 'queryCustomerList.primaryEmail': string + /** @description Filter customers by usage attribution subject. + * Case-insensitive partial match. */ + 'queryCustomerList.subject': string + } + requestBodies: never + headers: never pathItems: never } - export type $defs = Record - -export type external = Record - export interface operations { - /** @description List apps. */ listApps: { parameters: { - query?: { - page?: components['parameters']['PaginatedQuery.page'] - pageSize?: components['parameters']['PaginatedQuery.pageSize'] + query?: { + /** @description The page number. */ + page?: components['parameters']['PaginatedQuery.page'] + /** @description The number of items in the page. */ + pageSize?: components['parameters']['PaginatedQuery.pageSize'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['AppList'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + getApp: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['App'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + uninstallApp: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + appStripeWebhook: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['StripeWebhookEvent'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['StripeWebhookResponse'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingListCustomerOverrides: { + parameters: { + query?: { + billingProfile?: string[] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['CustomerOverrideOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['CustomerOverrideOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['CustomerOverridePaginatedResponse'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingGetCustomerOverrideById: { + parameters: { + query?: never + header?: never + path: { + customerId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingCustomerOverride'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingUpsertCustomerOverride: { + parameters: { + query?: never + header?: never + path: { + customerId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingCustomerWorkflowOverrideCreate'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingCustomerOverride'] + } + } + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingCustomerOverride'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingDeleteCustomerOverride: { + parameters: { + query?: never + header?: never + path: { + customerId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingListInvoices: { + parameters: { + query?: { + customers?: string[] + statuses?: components['parameters']['BillingInvoiceListParams.statuses'] + extendedStatuses?: components['parameters']['BillingInvoiceListParams.extendedStatuses'] + issuedAfter?: components['parameters']['BillingInvoiceListParams.issuedAfter'] + issuedBefore?: components['parameters']['BillingInvoiceListParams.issuedBefore'] + expand?: components['parameters']['BillingInvoiceListParams.expand'] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['InvoiceOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['InvoiceOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['InvoicePaginatedResponse'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingListInvoicesByCustomer: { + parameters: { + query?: { + statuses?: components['parameters']['BillingInvoiceListParams.statuses'] + extendedStatuses?: components['parameters']['BillingInvoiceListParams.extendedStatuses'] + issuedAfter?: components['parameters']['BillingInvoiceListParams.issuedAfter'] + issuedBefore?: components['parameters']['BillingInvoiceListParams.issuedBefore'] + expand?: components['parameters']['BillingInvoiceListParams.expand'] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['InvoiceOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['InvoiceOrderByOrdering.orderBy'] + } + header?: never + path: { + customerId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['InvoicePaginatedResponse'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingCreateInvoice: { + parameters: { + query?: never + header?: never + path: { + customerId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingInvoiceCreateInput'] + } + } + responses: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'][] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingGetInvoiceByCustomerInvoiceId: { + parameters: { + query: { + expand: components['schemas']['BillingInvoiceExpand'][] + } + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingDeleteInvoiceByCustomerInvoiceId: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingInvoiceAdvance: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingApproveInvoice: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingUpdateInvoiceLine: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + lineId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingInvoiceLineCreateOrUpdate'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoiceLine'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingDeleteInvoiceLine: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + lineId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingInvoiceRetry: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingRecalculateInvoiceTax: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingVoidInvoice: { + parameters: { + query?: never + header?: never + path: { + customerId: string + invoiceId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingVoidInvoiceInput'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingInvoice'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingCreateLineByCustomer: { + parameters: { + query?: never + header?: never + path: { + customerId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingCreateLinesRequest'] + } + } + responses: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingCreateLineResult'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingListProfiles: { + parameters: { + query?: { + includeArchived?: boolean + expand?: components['schemas']['BillingProfileExpand'][] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['ProfileOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['ProfileOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['ProfilePaginatedResponse'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingCreateProfile: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingProfileCreateInput'] + } + } + responses: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingProfile'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingGetProfile: { + parameters: { + query?: { + expand?: components['schemas']['BillingProfileExpand'][] + } + header?: never + path: { + id: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingProfile'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingUpdateProfile: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['BillingProfileCreateOrUpdate'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['BillingProfile'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + billingArchiveProfile: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + listCustomers: { + parameters: { + query?: { + /** @description The order direction. */ + order?: components['parameters']['CustomerOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['CustomerOrderByOrdering.orderBy'] + /** @description Include deleted customers. */ + includeDeleted?: components['parameters']['queryCustomerList.includeDeleted'] + /** @description Filter customers by name. + * Case-insensitive partial match. */ + name?: components['parameters']['queryCustomerList.name'] + /** @description Filter customers by primary email. + * Case-insensitive partial match. */ + primaryEmail?: components['parameters']['queryCustomerList.primaryEmail'] + /** @description Filter customers by usage attribution subject. + * Case-insensitive partial match. */ + subject?: components['parameters']['queryCustomerList.subject'] + /** @description The page number. */ + page?: components['parameters']['PaginatedQuery.page'] + /** @description The number of items in the page. */ + pageSize?: components['parameters']['PaginatedQuery.pageSize'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['CustomerList'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + createCustomer: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['Customer'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Customer'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + getCustomer: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Customer'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + updateCustomer: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['Customer'] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Customer'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + deleteCustomer: { + parameters: { + query?: never + header?: never + path: { + id: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Customer'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + getDebugMetrics: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'text/plain': string + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + listEntitlements: { + parameters: { + query?: { + /** @description Filtering by multiple features. + * + * Usage: `?feature=feature-1&feature=feature-2` */ + feature?: string[] + /** @description Filtering by multiple subjects. + * + * Usage: `?subject=customer-1&subject=customer-2` */ + subject?: string[] + /** @description Filtering by multiple entitlement types. + * + * Usage: `?entitlementType=metered&entitlementType=boolean` */ + entitlementType?: components['schemas']['EntitlementType'][] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['EntitlementOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['EntitlementOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['ListEntitlementsResult'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + getEntitlementById: { + parameters: { + query?: never + header?: never + path: { + entitlementId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Entitlement'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + listEvents: { + parameters: { + query?: { + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + ingestedAtFrom?: string + /** @description End date-time in RFC 3339 format. + * + * Inclusive. */ + ingestedAtTo?: string + /** @description If not provided lists all events. + * + * If provided with true, only list events with processing error. + * + * If provided with false, only list events without processing error. */ + hasError?: boolean + /** @description The event ID. + * + * Accepts partial ID. */ + id?: string + /** @description The event subject. + * + * Accepts partial subject. */ + subject?: string + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + from?: string + /** @description End date-time in RFC 3339 format. + * + * Inclusive. */ + to?: string + /** @description Number of events to return. */ + limit?: number + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['IngestedEvent'][] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + ingestEvents: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/cloudevents+json': components['schemas']['Event'] + 'application/cloudevents-batch+json': components['schemas']['Event'][] + } + } + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/cloudevents+json': components['schemas']['Event'] + 'application/cloudevents-batch+json': components['schemas']['Event'][] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + listFeatures: { + parameters: { + query?: { + /** @description Filter by meterSlug */ + meterSlug?: string[] + /** @description Filter by meterGroupByFilters */ + includeArchived?: boolean + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['FeatureOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['FeatureOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['ListFeaturesResult'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + createFeature: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['FeatureCreateInputs'] + } + } + responses: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Feature'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + getFeature: { + parameters: { + query?: never + header?: never + path: { + featureId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Feature'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + deleteFeature: { + parameters: { + query?: never + header?: never + path: { + featureId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + listGrants: { + parameters: { + query?: { + /** @description Filtering by multiple features. + * + * Usage: `?feature=feature-1&feature=feature-2` */ + feature?: string[] + /** @description Filtering by multiple subjects. + * + * Usage: `?subject=customer-1&subject=customer-2` */ + subject?: string[] + /** @description Include deleted */ + includeDeleted?: boolean + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description Number of items to skip. + * + * Default is 0. */ + offset?: components['parameters']['LimitOffset.offset'] + /** @description Number of items to return. + * + * Default is 100. */ + limit?: components['parameters']['LimitOffset.limit'] + /** @description The order direction. */ + order?: components['parameters']['GrantOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['GrantOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': + | components['schemas']['EntitlementGrant'][] + | components['schemas']['GrantPaginatedResponse'] + } + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + voidGrant: { + parameters: { + query?: never + header?: never + path: { + grantId: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + } + } + /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + } + } + /** @description The server understood the request but refuses to authorize it. */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } + /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] + } + } + /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ + 503: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] + } + } + /** @description An unexpected error response. */ + default: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] + } + } + } + } + createStripeCheckoutSession: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['CreateStripeCheckoutSessionRequest'] } } responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['AppList'][] + 'application/json': components['schemas']['CreateStripeCheckoutSessionResult'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get the app. */ - getApp: { + listMarketplaceListings: { parameters: { - path: { - id: string + query?: { + /** @description The page number. */ + page?: components['parameters']['PaginatedQuery.page'] + /** @description The number of items in the page. */ + pageSize?: components['parameters']['PaginatedQuery.pageSize'] } + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['App'] + 'application/json': components['schemas']['MarketplaceListingList'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Uninstall an app. */ - uninstallApp: { + getMarketplaceListing: { parameters: { + query?: never + header?: never path: { - id: string + type: components['schemas']['AppType'] } + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['MarketplaceListing'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Stripe webhook. */ - appStripeWebhook: { + marketplaceAppAPIKeyInstall: { parameters: { + query?: never + header?: never path: { - id: string + /** @description The type of the app to install. */ + type: components['parameters']['MarketplaceApiKeyInstallRequest.type'] } + cookie?: never } requestBody: { content: { - 'application/json': components['schemas']['StripeWebhookEvent'] + 'application/json': { + /** @description The API key for the provider. + * For example, the Stripe API key. */ + apiKey: string + /** @description Name of the application to install. + * + * If not set defaults to the marketplace item's description. */ + name?: string + } } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['StripeWebhookResponse'] + 'application/json': components['schemas']['AppBase'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List customers. */ - listCustomers: { + marketplaceOAuth2InstallGetURL: { parameters: { - query?: { - includeDeleted?: components['parameters']['queryCustomerList'] - page?: components['parameters']['PaginatedQuery.page'] - pageSize?: components['parameters']['PaginatedQuery.pageSize'] + query?: never + header?: never + path: { + type: components['schemas']['AppType'] } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['CustomerList'][] + 'application/json': components['schemas']['ClientAppStartResponse'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Create a new customer. */ - createCustomer: { - requestBody: { - content: { - 'application/json': components['schemas']['Customer'] + marketplaceOAuth2InstallAuthorize: { + parameters: { + query?: { + /** @description Required if the "state" parameter was present in the client authorization request. + * The exact value received from the client: + * + * Unique, randomly generated, opaque, and non-guessable string that is sent + * when starting an authentication request and validated when processing the response. */ + state?: components['parameters']['OAuth2AuthorizationCodeGrantSuccessParams.state'] + /** @description Authorization code which the client will later exchange for an access token. + * Required with the success response. */ + code?: components['parameters']['OAuth2AuthorizationCodeGrantSuccessParams.code'] + /** @description Error code. + * Required with the error response. */ + error?: components['parameters']['OAuth2AuthorizationCodeGrantErrorParams.error'] + /** @description Optional human-readable text providing additional information, + * used to assist the client developer in understanding the error that occurred. */ + error_description?: components['parameters']['OAuth2AuthorizationCodeGrantErrorParams.error_description'] + /** @description Optional uri identifying a human-readable web page with + * information about the error, used to provide the client + * developer with additional information about the error */ + error_uri?: components['parameters']['OAuth2AuthorizationCodeGrantErrorParams.error_uri'] } + header?: never + path: { + /** @description The type of the app to install. */ + type: components['parameters']['MarketplaceOAuth2InstallAuthorizeRequest.type'] + } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': components['schemas']['Customer'] + /** @description Redirection */ + 303: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get a customer by ID or key. */ - getCustomer: { + listMeters: { parameters: { - path: { - customerIdOrKey: components['schemas']['CustomerIdentifier'] - } + query?: never + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Customer'] + 'application/json': components['schemas']['Meter'][] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Update a customer by ID or key. */ - updateCustomer: { + createMeter: { parameters: { - path: { - customerIdOrKey: components['schemas']['CustomerIdentifier'] - } + query?: never + header?: never + path?: never + cookie?: never } requestBody: { content: { - 'application/json': components['schemas']['Customer'] + 'application/json': components['schemas']['MeterCreate'] } } responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Customer'] + 'application/json': components['schemas']['Meter'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Delete a customer by ID or key. */ - deleteCustomer: { + getMeter: { parameters: { + query?: never + header?: never path: { - customerIdOrKey: components['schemas']['CustomerIdentifier'] + meterIdOrSlug: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Customer'] + 'application/json': components['schemas']['Meter'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Get event metrics - * @description Returns debug metrics (in OpenMetrics format) like the number of ingested events since mindnight UTC. - * - * The OpenMetrics Counter(s) reset every day at midnight UTC. - */ - getDebugMetrics: { + deleteMeter: { + parameters: { + query?: never + header?: never + path: { + meterIdOrSlug: string + } + cookie?: never + } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'text/plain': string + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * List all entitlements - * @description List all entitlements for all the subjects and features. This endpoint is intended for administrative purposes only. - * To fetch the entitlements of a specific subject please use the /api/v1/subjects/{subjectKeyOrID}/entitlements endpoint. - * If page is provided that takes precedence and the paginated response is returned. - */ - listEntitlements: { + queryMeter: { parameters: { query?: { - /** - * @description Filtering by multiple features. - * - * Usage: `?feature=feature-1&feature=feature-2` - */ - feature?: string[] - /** - * @description Filtering by multiple subjects. + /** @description Start date-time in RFC 3339 format. * - * Usage: `?subject=customer-1&subject=customer-2` - */ - subject?: string[] - /** - * @description Filtering by multiple entitlement types. + * Inclusive. */ + from?: components['parameters']['MeterQuery.from'] + /** @description End date-time in RFC 3339 format. * - * Usage: `?entitlementType=metered&entitlementType=boolean` - */ - entitlementType?: components['schemas']['EntitlementType'][] - page?: components['parameters']['Pagination.page'] - pageSize?: components['parameters']['Pagination.pageSize'] - offset?: components['parameters']['LimitOffset.offset'] - limit?: components['parameters']['LimitOffset.limit'] - order?: components['parameters']['EntitlementOrderByOrdering.order'] - orderBy?: components['parameters']['EntitlementOrderByOrdering.orderBy'] + * Inclusive. */ + to?: components['parameters']['MeterQuery.to'] + /** @description If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. */ + windowSize?: components['parameters']['MeterQuery.windowSize'] + /** @description The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). + * If not specified, the UTC timezone will be used. */ + windowTimeZone?: components['parameters']['MeterQuery.windowTimeZone'] + /** @description Filtering by multiple subjects. */ + subject?: components['parameters']['MeterQuery.subject'] + /** @description Simple filter for group bys with exact match. */ + filterGroupBy?: components['parameters']['MeterQuery.filterGroupBy'] + /** @description If not specified a single aggregate will be returned for each subject and time window. + * `subject` is a reserved group by value. */ + groupBy?: components['parameters']['MeterQuery.groupBy'] } + header?: never + path: { + meterIdOrSlug: string + } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': - | components['schemas']['Entitlement'][] - | components['schemas']['EntitlementPaginatedResponse'] + 'application/json': components['schemas']['MeterQueryResult'] + 'text/csv': string } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get entitlement by id. */ - getEntitlementById: { + listMeterSubjects: { parameters: { + query?: never + header?: never path: { - entitlementId: string + meterIdOrSlug: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Entitlement'] + 'application/json': string[] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * List ingested events - * @description List ingested events within a time range. - * - * If the from query param is not provided it defaults to last 72 hours. - */ - listEvents: { + listNotificationChannels: { parameters: { query?: { - /** - * @description Start date-time in RFC 3339 format. - * - * Inclusive. - */ - ingestedAtFrom?: string - /** - * @description End date-time in RFC 3339 format. - * - * Inclusive. - */ - ingestedAtTo?: string - /** - * @description If not provided lists all events. - * - * If provided with true, only list events with processing error. - * - * If provided with false, only list events without processing error. - */ - hasError?: boolean - /** - * @description The event ID. + /** @description Include deleted notification channels in response. * - * Accepts partial ID. - */ - id?: string - /** - * @description The event subject. + * Usage: `?includeDeleted=true` */ + includeDeleted?: boolean + /** @description Include disabled notification channels in response. * - * Accepts partial subject. - */ - subject?: string - /** - * @description Start date-time in RFC 3339 format. + * Usage: `?includeDisabled=false` */ + includeDisabled?: boolean + /** @description Start date-time in RFC 3339 format. * - * Inclusive. - */ - from?: string - /** - * @description End date-time in RFC 3339 format. + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. * - * Inclusive. - */ - to?: string - /** @description Number of events to return. */ - limit?: number + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description The order direction. */ + order?: components['parameters']['NotificationChannelOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['NotificationChannelOrderByOrdering.orderBy'] } + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['IngestedEvent'][] + 'application/json': components['schemas']['NotificationChannelPaginatedResponse'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Ingests an event or batch of events following the CloudEvents specification. */ - ingestEvents: { + createNotificationChannel: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } requestBody: { content: { - 'application/cloudevents+json': components['schemas']['Event'] - 'application/cloudevents-batch+json': components['schemas']['Event'][] + 'application/json': components['schemas']['NotificationChannelCreateRequest'] } } responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/cloudevents+json': components['schemas']['Event'] - 'application/cloudevents-batch+json': components['schemas']['Event'][] + 'application/json': components['schemas']['NotificationChannel'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List features. */ - listFeatures: { + getNotificationChannel: { parameters: { - query?: { - /** @description Filter by meterSlug */ - meterSlug?: string[] - /** @description Filter by meterGroupByFilters */ - includeArchived?: boolean - page?: components['parameters']['Pagination.page'] - pageSize?: components['parameters']['Pagination.pageSize'] - offset?: components['parameters']['LimitOffset.offset'] - limit?: components['parameters']['LimitOffset.limit'] - order?: components['parameters']['FeatureOrderByOrdering.order'] - orderBy?: components['parameters']['FeatureOrderByOrdering.orderBy'] + query?: never + header?: never + path: { + channelId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': - | components['schemas']['Feature'][] - | components['schemas']['FeaturePaginatedResponse'] + 'application/json': components['schemas']['NotificationChannel'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Features are either metered or static. A feature is metered if meterSlug is provided at creation. - * For metered features you can pass additional filters that will be applied when calculating feature usage, based on the meter's groupBy fields. - * Only meters with SUM and COUNT aggregation are supported for features. - * Features cannot be updated later, only archived. - */ - createFeature: { + updateNotificationChannel: { + parameters: { + query?: never + header?: never + path: { + channelId: string + } + cookie?: never + } requestBody: { content: { - 'application/json': components['schemas']['FeatureCreateInputs'] + 'application/json': components['schemas']['NotificationChannelCreateRequest'] } } responses: { - /** @description The request has succeeded and a new resource has been created as a result. */ - 201: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Feature'] + 'application/json': components['schemas']['NotificationChannel'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get a feature by ID. */ - getFeature: { + deleteNotificationChannel: { parameters: { + query?: never + header?: never path: { - featureId: string + channelId: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': components['schemas']['Feature'] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Archive a feature by ID. - * - * Once a feature is archived it cannot be unarchived. If a feature is archived, new entitlements cannot be created for it, but archiving the feature does not affect existing entitlements. - * This means, if you want to create a new feature with the same key, and then create entitlements for it, the previous entitlements have to be deleted first on a per subject basis. - */ - deleteFeature: { + listNotificationEvents: { parameters: { - path: { - featureId: string + query?: { + /** @description Start date-time in RFC 3339 format. + * Inclusive. */ + from?: string + /** @description End date-time in RFC 3339 format. + * Inclusive. */ + to?: string + /** @description Filtering by multiple feature ids or keys. + * + * Usage: `?feature=feature-1&feature=feature-2` */ + feature?: string[] + /** @description Filtering by multiple subject ids or keys. + * + * Usage: `?subject=subject-1&subject=subject-2` */ + subject?: string[] + /** @description Filtering by multiple rule ids. + * + * Usage: `?rule=01J8J2XYZ2N5WBYK09EDZFBSZM&rule=01J8J4R4VZH180KRKQ63NB2VA5` */ + rule?: string[] + /** @description Filtering by multiple channel ids. + * + * Usage: `?channel=01J8J4RXH778XB056JS088PCYT&channel=01J8J4S1R1G9EVN62RG23A9M6J` */ + channel?: string[] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description The order direction. */ + order?: components['parameters']['NotificationEventOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['NotificationEventOrderByOrdering.orderBy'] } + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['NotificationEventPaginatedResponse'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description List all grants for all the subjects and entitlements. This endpoint is intended for administrative purposes only. - * To fetch the grants of a specific entitlement please use the /api/v1/subjects/{subjectKeyOrID}/entitlements/{entitlementOrFeatureID}/grants endpoint. - * If page is provided that takes precedence and the paginated response is returned. - */ - listGrants: { + getNotificationEvent: { parameters: { - query?: { - /** - * @description Filtering by multiple features. - * - * Usage: `?feature=feature-1&feature=feature-2` - */ - feature?: string[] - /** - * @description Filtering by multiple subjects. - * - * Usage: `?subject=customer-1&subject=customer-2` - */ - subject?: string[] - /** @description Include deleted */ - includeDeleted?: boolean - page?: components['parameters']['Pagination.page'] - pageSize?: components['parameters']['Pagination.pageSize'] - offset?: components['parameters']['LimitOffset.offset'] - limit?: components['parameters']['LimitOffset.limit'] - order?: components['parameters']['GrantOrderByOrdering.order'] - orderBy?: components['parameters']['GrantOrderByOrdering.orderBy'] + query?: never + header?: never + path: { + eventId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': - | components['schemas']['EntitlementGrant'][] - | components['schemas']['GrantPaginatedResponse'] + 'application/json': components['schemas']['NotificationEvent'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Voiding a grant means it is no longer valid, it doesn't take part in further balance calculations. Voiding a grant does not retroactively take effect, meaning any usage that has already been attributed to the grant will remain, but future usage cannot be burnt down from the grant. - * For example, if you have a single grant for your metered entitlement with an initial amount of 100, and so far 60 usage has been metered, the grant (and the entitlement itself) would have a balance of 40. If you then void that grant, balance becomes 0, but the 60 previous usage will not be affected. - */ - voidGrant: { + listNotificationRules: { parameters: { - path: { - grantId: string + query?: { + /** @description Include deleted notification rules in response. + * + * Usage: `?includeDeleted=true` */ + includeDeleted?: boolean + /** @description Include disabled notification rules in response. + * + * Usage: `?includeDisabled=false` */ + includeDisabled?: boolean + /** @description Filtering by multiple feature ids/keys. + * + * Usage: `?feature=feature-1&feature=feature-2` */ + feature?: string[] + /** @description Filtering by multiple notifiaction channel ids. + * + * Usage: `?channel=01ARZ3NDEKTSV4RRFFQ69G5FAV&channel=01J8J2Y5X4NNGQS32CF81W95E3` */ + channel?: string[] + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description The order direction. */ + order?: components['parameters']['NotificationRuleOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['NotificationRuleOrderByOrdering.orderBy'] } + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['NotificationRulePaginatedResponse'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] - } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { - content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The request could not be completed due to a conflict with the current state of the target resource. */ - 409: { content: { - 'application/problem+json': components['schemas']['ConflictProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Create checkout session. */ - createStripeCheckoutSession: { + createNotificationRule: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } requestBody: { content: { - 'application/json': components['schemas']['CreateStripeCheckoutSessionRequest'] + 'application/json': components['schemas']['NotificationRuleCreateRequest'] } } responses: { /** @description The request has succeeded and a new resource has been created as a result. */ 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['CreateStripeCheckoutSessionResponse'] + 'application/json': components['schemas']['NotificationRule'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List available apps of the app marketplace. */ - listMarketplaceListings: { + getNotificationRule: { parameters: { - query?: { - page?: components['parameters']['PaginatedQuery.page'] - pageSize?: components['parameters']['PaginatedQuery.pageSize'] + query?: never + header?: never + path: { + ruleId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['MarketplaceListingList'] + 'application/json': components['schemas']['NotificationRule'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get a marketplace listing by type. */ - getMarketplaceListing: { + updateNotificationRule: { parameters: { + query?: never + header?: never path: { - type: components['schemas']['OpenMeter.App.Type'] + ruleId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['NotificationRuleCreateRequest'] } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['MarketplaceListing'] + 'application/json': components['schemas']['NotificationRule'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Install an marketplace via API Key. */ - marketplaceAppAPIKeyInstall: { + deleteNotificationRule: { parameters: { + query?: never + header?: never path: { - type: components['parameters']['MarketplaceApiKeyInstallRequest.type'] - } - } - requestBody: { - content: { - 'application/json': { - /** - * @description The API key for the provider. - * For example, the Stripe API key. - */ - apiKey: string - } + ruleId: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': components['schemas']['AppBase'] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Install an app via OAuth. - * Returns a URL to start the OAuth 2.0 flow. - */ - marketplaceOAuth2InstallGetURL: { + testNotificationRule: { parameters: { + query?: never + header?: never path: { - type: components['schemas']['OpenMeter.App.Type'] + ruleId: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['ClientAppStartResponse'] + 'application/json': components['schemas']['NotificationEvent'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Authorize OAuth2 code. - * Verifies the OAuth code and exchanges it for a token and refresh token - */ - marketplaceOAuth2InstallAuthorize: { + receiveSvixOperationalEvent: { parameters: { - query?: { - state?: components['parameters']['OAuth2AuthorizationCodeGrantSuccessParams.state'] - code?: components['parameters']['OAuth2AuthorizationCodeGrantSuccessParams.code'] - error?: components['parameters']['OAuth2AuthorizationCodeGrantErrorParams.error'] - error_description?: components['parameters']['OAuth2AuthorizationCodeGrantErrorParams.error_description'] - error_uri?: components['parameters']['OAuth2AuthorizationCodeGrantErrorParams.error_uri'] - } - path: { - type: components['parameters']['MarketplaceOAuth2InstallAuthorizeRequest.type'] + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['SvixOperationalWebhookRequest'] } } responses: { - /** @description Redirection */ - 303: { - content: never + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown + } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List meters. */ - listMeters: { + listPlans: { + parameters: { + query?: { + /** @description Include deleted plans in response. + * + * Usage: `?includeDeleted=true` */ + includeDeleted?: boolean + /** @description Filter by plan.id attribute */ + id?: string[] + /** @description Filter by plan.key attribute */ + key?: string[] + /** @description Filter by plan.key and plan.version attributes */ + keyVersion?: { + [key: string]: number + } + /** @description Start date-time in RFC 3339 format. + * + * Inclusive. */ + page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ + pageSize?: components['parameters']['Pagination.pageSize'] + /** @description The order direction. */ + order?: components['parameters']['PlanOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['PlanOrderByOrdering.orderBy'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Meter'][] + 'application/json': components['schemas']['PlanPaginatedResponse'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Create a meter. */ - createMeter: { + createPlan: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } requestBody: { content: { - 'application/json': components['schemas']['Meter'] + 'application/json': components['schemas']['PlanCreate'] } } responses: { /** @description The request has succeeded and a new resource has been created as a result. */ 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Meter'] + 'application/json': components['schemas']['Plan'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get a meter by ID or slug. */ - getMeter: { + newDraftPlan: { parameters: { + query?: never + header?: never path: { - meterIdOrSlug: string + planIdOrKey: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Meter'] + 'application/json': components['schemas']['Plan'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Delete a meter. */ - deleteMeter: { + getPlan: { parameters: { + query?: never + header?: never path: { - meterIdOrSlug: string + planId: string } + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Plan'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Query meter for usage. Query meter for usage. */ - queryMeter: { + updatePlan: { parameters: { - query?: { - from?: components['parameters']['MeterQuery.from'] - to?: components['parameters']['MeterQuery.to'] - windowSize?: components['parameters']['MeterQuery.windowSize'] - windowTimeZone?: components['parameters']['MeterQuery.windowTimeZone'] - subject?: components['parameters']['MeterQuery.subject'] - filterGroupBy?: components['parameters']['MeterQuery.filterGroupBy'] - groupBy?: components['parameters']['MeterQuery.groupBy'] - } + query?: never + header?: never path: { - meterIdOrSlug: string + planId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['PlanUpdate'] } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['MeterQueryResult'] - 'text/csv': string + 'application/json': components['schemas']['Plan'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List subjects for a meter. */ - listMeterSubjects: { + deletePlan: { parameters: { + query?: never + header?: never path: { - meterIdOrSlug: string + planId: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': string[] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + } + } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * List notification channels - * @description List all notification channels. - */ - listNotificationChannels: { + listPlanPhases: { parameters: { query?: { - /** - * @description Include deleted notification channels in response. - * - * Usage: `?includeDeleted=true` - */ - includeDeleted?: boolean - /** - * @description Include disabled notification channels in response. + /** @description Filter by phase.key attribute */ + key?: string[] + /** @description Start date-time in RFC 3339 format. * - * Usage: `?includeDisabled=false` - */ - includeDisabled?: boolean + * Inclusive. */ page?: components['parameters']['Pagination.page'] + /** @description Number of items per page. + * + * Default is 100. */ pageSize?: components['parameters']['Pagination.pageSize'] - order?: components['parameters']['NotificationChannelOrderByOrdering.order'] - orderBy?: components['parameters']['NotificationChannelOrderByOrdering.orderBy'] + /** @description The order direction. */ + order?: components['parameters']['PhasesOrderByOrdering.order'] + /** @description The order by field. */ + orderBy?: components['parameters']['PhasesOrderByOrdering.orderBy'] + } + header?: never + path: { + planId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationChannelPaginatedResponse'] + 'application/json': components['schemas']['PlanPhasePaginatedResponse'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Create a notification channel - * @description Create a new notification channel. - */ - createNotificationChannel: { + createPlanPhases: { + parameters: { + query?: never + header?: never + path: { + planId: string + } + cookie?: never + } requestBody: { content: { - 'application/json': components['schemas']['NotificationChannelCreateRequest'] + 'application/json': components['schemas']['PlanPhaseCreate'] } } responses: { /** @description The request has succeeded and a new resource has been created as a result. */ 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationChannel'] + 'application/json': components['schemas']['PlanPhase'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Get notification channel - * @description Get a notification channel by id. - */ - getNotificationChannel: { + getPlanPhases: { parameters: { + query?: never + header?: never path: { - channelId: string + planId: string + planPhaseKey: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationChannel'] + 'application/json': components['schemas']['PlanPhase'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Update a notification channel - * @description Update notification channel. - */ - updateNotificationChannel: { + updatePlanPhases: { parameters: { + query?: never + header?: never path: { - channelId: string + planId: string + planPhaseKey: string } + cookie?: never } requestBody: { content: { - 'application/json': components['schemas']['NotificationChannelCreateRequest'] + 'application/json': components['schemas']['PlanPhaseUpdate'] } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationChannel'] + 'application/json': components['schemas']['PlanPhase'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Delete a notification channel - * @description Soft delete notification channel by id. - * - * Once a notification channel is deleted it cannot be undeleted. - */ - deleteNotificationChannel: { + deletePlanPhases: { parameters: { + query?: never + header?: never path: { - channelId: string + planId: string + planPhaseKey: string } + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ + /** @description There is no content to send for this request, but the headers may be useful. */ 204: { - content: never + headers: { + [name: string]: unknown + } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * List notification events - * @description List all notification events. - */ - listNotificationEvents: { + publishPlan: { parameters: { - query?: { - /** - * @description Start date-time in RFC 3339 format. - * Inclusive. - */ - from?: string - /** - * @description End date-time in RFC 3339 format. - * Inclusive. - */ - to?: string - /** - * @description Filtering by multiple feature ids or keys. - * - * Usage: `?feature=feature-1&feature=feature-2` - */ - feature?: string[] - /** - * @description Filtering by multiple subject ids or keys. - * - * Usage: `?subject=subject-1&subject=subject-2` - */ - subject?: string[] - /** - * @description Filtering by multiple rule ids. - * - * Usage: `?rule=01J8J2XYZ2N5WBYK09EDZFBSZM&rule=01J8J4R4VZH180KRKQ63NB2VA5` - */ - rule?: string[] - /** - * @description Filtering by multiple channel ids. - * - * Usage: `?channel=01J8J4RXH778XB056JS088PCYT&channel=01J8J4S1R1G9EVN62RG23A9M6J` - */ - channel?: string[] - page?: components['parameters']['Pagination.page'] - pageSize?: components['parameters']['Pagination.pageSize'] - order?: components['parameters']['NotificationEventOrderByOrdering.order'] - orderBy?: components['parameters']['NotificationEventOrderByOrdering.orderBy'] + query?: never + header?: never + path: { + planId: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': components['schemas']['NotificationEventPaginatedResponse'] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Get notification event - * @description Get a notification event by id. - */ - getNotificationEvent: { + unpublishPlan: { parameters: { + query?: never + header?: never path: { - eventId: string + planId: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': components['schemas']['Event'] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * List notification rules - * @description List all notification rules. - */ - listNotificationRules: { + queryPortalMeter: { parameters: { query?: { - /** - * @description Include deleted notification rules in response. + /** @description Start date-time in RFC 3339 format. * - * Usage: `?includeDeleted=true` - */ - includeDeleted?: boolean - /** - * @description Include disabled notification rules in response. - * - * Usage: `?includeDisabled=false` - */ - includeDisabled?: boolean - /** - * @description Filtering by multiple feature ids/keys. - * - * Usage: `?feature=feature-1&feature=feature-2` - */ - feature?: string[] - /** - * @description Filtering by multiple notifiaction channel ids. + * Inclusive. */ + from?: components['parameters']['MeterQuery.from'] + /** @description End date-time in RFC 3339 format. * - * Usage: `?channel=01ARZ3NDEKTSV4RRFFQ69G5FAV&channel=01J8J2Y5X4NNGQS32CF81W95E3` - */ - channel?: string[] - page?: components['parameters']['Pagination.page'] - pageSize?: components['parameters']['Pagination.pageSize'] - order?: components['parameters']['NotificationRuleOrderByOrdering.order'] - orderBy?: components['parameters']['NotificationRuleOrderByOrdering.orderBy'] + * Inclusive. */ + to?: components['parameters']['MeterQuery.to'] + /** @description If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. */ + windowSize?: components['parameters']['MeterQuery.windowSize'] + /** @description The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). + * If not specified, the UTC timezone will be used. */ + windowTimeZone?: components['parameters']['MeterQuery.windowTimeZone'] + /** @description Simple filter for group bys with exact match. */ + filterGroupBy?: components['parameters']['MeterQuery.filterGroupBy'] + /** @description If not specified a single aggregate will be returned for each subject and time window. + * `subject` is a reserved group by value. */ + groupBy?: components['parameters']['MeterQuery.groupBy'] } + header?: never + path: { + meterSlug: string + } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationRulePaginatedResponse'] + 'application/json': components['schemas']['MeterQueryResult'] + 'text/csv': string } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] - } - } - /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ - 500: { - content: { - 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] - } - } - /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ - 503: { - content: { - 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] - } - } - /** @description An unexpected error response. */ - default: { - content: { - 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] - } - } - } - } - /** - * Create a notification rule - * @description Create a new notification rule. - */ - createNotificationRule: { - requestBody: { - content: { - 'application/json': components['schemas']['NotificationRuleCreateRequest'] - } - } - responses: { - /** @description The request has succeeded and a new resource has been created as a result. */ - 201: { - content: { - 'application/json': components['schemas']['NotificationRule'] + headers: { + [name: string]: unknown } - } - /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ - 400: { content: { - 'application/problem+json': components['schemas']['BadRequestProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } - /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ - 401: { - content: { - 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown } - } - /** @description The server understood the request but refuses to authorize it. */ - 403: { content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Get notification rule - * @description Get a notification rule by id. - */ - getNotificationRule: { + listPortalTokens: { parameters: { - path: { - ruleId: string + query?: { + limit?: number } + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationRule'] + 'application/json': components['schemas']['PortalToken'][] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Update a notification rule - * @description Update notification rule. - */ - updateNotificationRule: { + createPortalToken: { parameters: { - path: { - ruleId: string - } + query?: never + header?: never + path?: never + cookie?: never } requestBody: { content: { - 'application/json': components['schemas']['NotificationRuleCreateRequest'] + 'application/json': components['schemas']['PortalToken'] } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['NotificationRule'] + 'application/json': components['schemas']['PortalToken'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Delete a notification rule - * @description Soft delete notification rule by id. - * - * Once a notification rule is deleted it cannot be undeleted. - */ - deleteNotificationRule: { + invalidatePortalTokens: { parameters: { - path: { - ruleId: string + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': { + /** @description Invalidate a portal token by ID. */ + id?: string + /** @description Invalidate all portal tokens for a subject. */ + subject?: string + } } } responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ + /** @description There is no content to send for this request, but the headers may be useful. */ 204: { - content: never + headers: { + [name: string]: unknown + } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Test a notification rule by sending a test event with random data. */ - testNotificationRule: { + listSubjects: { parameters: { - path: { - ruleId: string - } + query?: never + header?: never + path?: never + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded and a new resource has been created as a result. */ - 201: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Event'] + 'application/json': components['schemas']['Subject'][] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Receive Svix operational events - * @description Callback endpoint used by Svix to notify about operational events. - */ - receiveSvixOperationalEvent: { + upsertSubject: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } requestBody: { content: { - 'application/json': components['schemas']['SvixOperationalWebhookRequest'] + 'application/json': components['schemas']['SubjectUpsert'][] } } responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Subject'][] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Query meter for consumer portal. This endpoint is publicly exposable to consumers. Query meter for consumer portal. This endpoint is publicly exposable to consumers. */ - queryPortalMeter: { + getSubject: { parameters: { - query?: { - from?: components['parameters']['MeterQuery.from'] - to?: components['parameters']['MeterQuery.to'] - windowSize?: components['parameters']['MeterQuery.windowSize'] - windowTimeZone?: components['parameters']['MeterQuery.windowTimeZone'] - filterGroupBy?: components['parameters']['MeterQuery.filterGroupBy'] - groupBy?: components['parameters']['MeterQuery.groupBy'] - } + query?: never + header?: never path: { - meterSlug: string + subjectIdOrKey: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['MeterQueryResult'] - 'text/csv': string + 'application/json': components['schemas']['Subject'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List tokens. */ - listPortalTokens: { + deleteSubject: { parameters: { - query?: { - limit?: number + query?: never + header?: never + path: { + subjectIdOrKey: string } + cookie?: never } + requestBody?: never responses: { - /** @description The request has succeeded. */ - 200: { - content: { - 'application/json': components['schemas']['PortalToken'][] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Create a consumer portal token. */ - createPortalToken: { - requestBody: { - content: { - 'application/json': components['schemas']['PortalToken'] + listSubjectEntitlements: { + parameters: { + query?: { + includeDeleted?: boolean + } + header?: never + path: { + subjectIdOrKey: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['PortalToken'] + 'application/json': components['schemas']['Entitlement'][] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Invalidates consumer portal tokens by ID or subject. */ - invalidatePortalTokens: { + createEntitlement: { + parameters: { + query?: never + header?: never + path: { + subjectIdOrKey: string + } + cookie?: never + } requestBody: { content: { - 'application/json': { - /** @description Invalidate a portal token by ID. */ - id?: string - /** @description Invalidate all portal tokens for a subject. */ - subject?: string - } + 'application/json': components['schemas']['EntitlementCreateInputs'] } } responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Entitlement'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List subjects. */ - listSubjects: { + listEntitlementGrants: { + parameters: { + query?: { + includeDeleted?: boolean + orderBy?: components['schemas']['GrantOrderBy'] + } + header?: never + path: { + subjectIdOrKey: string + entitlementIdOrFeatureKey: string + } + cookie?: never + } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Subject'][] + 'application/json': components['schemas']['EntitlementGrant'][] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Upserts a subject. Creates or updates subject. - * - * If the subject doesn't exist, it will be created. - * If the subject exists, it will be partially updated with the provided fields. - */ - upsertSubject: { + createGrant: { + parameters: { + query?: never + header?: never + path: { + subjectIdOrKey: string + entitlementIdOrFeatureKey: string + } + cookie?: never + } requestBody: { content: { - 'application/json': components['schemas']['SubjectUpsert'][] + 'application/json': components['schemas']['EntitlementGrantCreateInput'] } } responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Subject'][] + 'application/json': components['schemas']['EntitlementGrant'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get subject by ID or key. */ - getSubject: { + overrideEntitlement: { parameters: { + query?: never + header?: never path: { subjectIdOrKey: string + entitlementIdOrFeatureKey: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['EntitlementCreateInputs'] } } responses: { - /** @description The request has succeeded. */ - 200: { + /** @description The request has succeeded and a new resource has been created as a result. */ + 201: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Subject'] + 'application/json': components['schemas']['Entitlement'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Delete subject by ID or key. */ - deleteSubject: { + getEntitlementValue: { parameters: { + query?: { + time?: string + } + header?: never path: { subjectIdOrKey: string + entitlementIdOrFeatureKey: string } + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['EntitlementValue'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List all entitlements for a subject. For checking entitlement access, use the /value endpoint instead. */ - listSubjectEntitlements: { + getEntitlement: { parameters: { - query?: { - includeDeleted?: boolean - } + query?: never + header?: never path: { subjectIdOrKey: string + entitlementId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Entitlement'][] + 'application/json': components['schemas']['Entitlement'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * Create an entitlement - * @description OpenMeter has three types of entitlements: metered, boolean, and static. The type property determines the type of entitlement. The underlying feature has to be compatible with the entitlement type specified in the request (e.g., a metered entitlement needs a feature associated with a meter). - * - * - Boolean entitlements define static feature access, e.g. "Can use SSO authentication". - * - Static entitlements let you pass along a configuration while granting access, e.g. "Using this feature with X Y settings" (passed in the config). - * - Metered entitlements have many use cases, from setting up usage-based access to implementing complex credit systems. Example: The customer can use 10000 AI tokens during the usage period of the entitlement. - * - * A given subject can only have one active (non-deleted) entitlement per featureKey. If you try to create a new entitlement for a featureKey that already has an active entitlement, the request will fail with a 409 error. - * - * Once an entitlement is created you cannot modify it, only delete it. - */ - createEntitlement: { + deleteEntitlement: { parameters: { + query?: never + header?: never path: { subjectIdOrKey: string + entitlementId: string } + cookie?: never } - requestBody: { - content: { - 'application/json': components['schemas']['EntitlementCreateInputs'] - } - } + requestBody?: never responses: { - /** @description The request has succeeded and a new resource has been created as a result. */ - 201: { - content: { - 'application/json': components['schemas']['EntitlementCreateInputs'] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } - /** @description The request could not be completed due to a conflict with the current state of the target resource. */ - 409: { + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } content: { - 'application/problem+json': components['schemas']['ConflictProblemResponse'] + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description List all grants issued for an entitlement. The entitlement can be defined either by its id or featureKey. */ - listEntitlementGrants: { + getEntitlementHistory: { parameters: { - query?: { - includeDeleted?: boolean - orderBy?: components['schemas']['GrantOrderBy'] + query: { + /** @description Start of time range to query entitlement: date-time in RFC 3339 format. Defaults to the last reset. Gets truncated to the granularity of the underlying meter. */ + from?: string + /** @description End of time range to query entitlement: date-time in RFC 3339 format. Defaults to now. + * If not now then gets truncated to the granularity of the underlying meter. */ + to?: string + /** @description Windowsize */ + windowSize: components['schemas']['WindowSize'] + /** @description The timezone used when calculating the windows. */ + windowTimeZone?: string } + header?: never path: { subjectIdOrKey: string - entitlementIdOrFeatureKey: string + entitlementId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['EntitlementGrant'][] + 'application/json': components['schemas']['WindowedBalanceHistory'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Grants define a behavior of granting usage for a metered entitlement. They can have complicated recurrence and rollover rules, thanks to which you can define a wide range of access patterns with a single grant, in most cases you don't have to periodically create new grants. You can only issue grants for active metered entitlements. - * - * A grant defines a given amount of usage that can be consumed for the entitlement. The grant is in effect between its effective date and its expiration date. Specifying both is mandatory for new grants. - * - * Grants have a priority setting that determines their order of use. Lower numbers have higher priority, with 0 being the highest priority. - * - * Grants can have a recurrence setting intended to automate the manual reissuing of grants. For example, a daily recurrence is equal to reissuing that same grant every day (ignoring rollover settings). - * - * Rollover settings define what happens to the remaining balance of a grant at a reset. Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) - * - * Grants cannot be changed once created, only deleted. This is to ensure that balance is deterministic regardless of when it is queried. - */ - createGrant: { + resetEntitlementUsage: { parameters: { + query?: never + header?: never path: { subjectIdOrKey: string - entitlementIdOrFeatureKey: string + entitlementId: string } + cookie?: never } requestBody: { content: { - 'application/json': components['schemas']['EntitlementGrantCreateInput'] + 'application/json': components['schemas']['ResetEntitlementUsageInput'] } } responses: { - /** @description The request has succeeded and a new resource has been created as a result. */ - 201: { - content: { - 'application/json': components['schemas']['EntitlementGrant'] + /** @description There is no content to send for this request, but the headers may be useful. */ + 204: { + headers: { + [name: string]: unknown } + content?: never } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } - /** @description The request could not be completed due to a conflict with the current state of the target resource. */ - 409: { + /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ + 404: { + headers: { + [name: string]: unknown + } content: { - 'application/problem+json': components['schemas']['ConflictProblemResponse'] + 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Overriding an entitlement creates a new entitlement from the provided inputs and soft deletes the previous entitlement for the provided subject-feature pair. If the previous entitlement is already deleted or otherwise doesnt exist, the override will fail. - * - * This endpoint is useful for upgrades, downgrades, or other changes to entitlements that require a new entitlement to be created with zero downtime. - */ - overrideEntitlement: { + Subscriptions_create: { parameters: { - path: { - subjectIdOrKey: string - entitlementIdOrFeatureKey: string - } + query?: never + header?: never + path?: never + cookie?: never } requestBody: { content: { - 'application/json': components['schemas']['EntitlementCreateInputs'] + 'application/json': components['schemas']['CreateSubscriptionRequestBody'] } } responses: { - /** @description The request has succeeded and a new resource has been created as a result. */ - 201: { + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Entitlement'] + 'application/json': components['schemas']['Subscription'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { - content: { - 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] + headers: { + [name: string]: unknown } - } - /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ - 404: { content: { - 'application/problem+json': components['schemas']['NotFoundProblemResponse'] + 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The request could not be completed due to a conflict with the current state of the target resource. */ 409: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ConflictProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description This endpoint should be used for access checks and enforcement. All entitlement types share the hasAccess property in their value response, but multiple other properties are returned based on the entitlement type. - * - * For convenience reasons, /value works with both entitlementId and featureKey. - */ - getEntitlementValue: { + getSubscription_getSubscription: { parameters: { query?: { - time?: string + expand?: false | true + /** @description The time at which the subscription should be queried. If not provided the current time is used. */ + at?: string } + header?: never path: { - subjectIdOrKey: string - entitlementIdOrFeatureKey: string + subscriptionId: string } + cookie?: never } + requestBody?: never responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['EntitlementValue'] + 'application/json': + | components['schemas']['Subscription'] + | components['schemas']['SubscriptionExpanded'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** @description Get entitlement by id. For checking entitlement access, use the /value endpoint instead. */ - getEntitlement: { + editSubscription: { parameters: { + query?: never + header?: never path: { - subjectIdOrKey: string - entitlementId: string + subscriptionId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': ( + | components['schemas']['SubscriptionEditAddUpdateItem'] + | components['schemas']['SubscriptionEditRemoveUpdateItem'] + | components['schemas']['SubscriptionEditAdd'] + | components['schemas']['SubscriptionEditExtend'] + | components['schemas']['SubscriptionEditRemoveWithValue'] + )[] } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['Entitlement'] + 'application/json': components['schemas']['Subscription'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Deleting an entitlement revokes access to the associated feature. As a single subject can only have one entitlement per featureKey, when "migrating" features you have to delete the old entitlements as well. - * As access and status checks can be historical queries, deleting an entitlement populates the deletedAt timestamp. When queried for a time before that, the entitlement is still considered active, you cannot have retroactive changes to access, which is important for, among other things, auditing. - */ - deleteEntitlement: { + cancelSubscription: { parameters: { + query?: never + header?: never path: { - subjectIdOrKey: string - entitlementId: string + subscriptionId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': { + /** + * Format: date-time + * @description If not provided the subscription is canceled immediately. + * @example 2023-01-01T01:01:01.001Z + */ + effectiveDate?: string + } } } responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Subscription'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Returns historical balance and usage data for the entitlement. The queried history can span accross multiple reset events. - * - * BurndownHistory returns a continous history of segments, where the segments are seperated by events that changed either the grant burndown priority or the usage period. - * - * WindowedHistory returns windowed usage data for the period enriched with balance information and the list of grants that were being burnt down in that window. - */ - getEntitlementHistory: { + migrateSubscription: { parameters: { - query: { - /** @description Start of time range to query entitlement: date-time in RFC 3339 format. Defaults to the last reset. Gets truncated to the granularity of the underlying meter. */ - from?: string - /** - * @description End of time range to query entitlement: date-time in RFC 3339 format. Defaults to now. - * If not now then gets truncated to the granularity of the underlying meter. - */ - to?: string - /** @description Windowsize */ - windowSize: components['schemas']['WindowSize'] - /** @description The timezone used when calculating the windows. */ - windowTimeZone?: string - } + query?: never + header?: never path: { - subjectIdOrKey: string - entitlementId: string + subscriptionId: string + } + cookie?: never + } + requestBody: { + content: { + 'application/json': { + targetVersion: number + } } } responses: { /** @description The request has succeeded. */ 200: { + headers: { + [name: string]: unknown + } content: { - 'application/json': components['schemas']['WindowedBalanceHistory'] + 'application/json': components['schemas']['Subscription'] } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } } } } - /** - * @description Reset marks the start of a new usage period for the entitlement and initiates grant rollover. At the start of a period usage is zerod out and grants are rolled over based on their rollover settings. It would typically be synced with the subjects billing period to enforce usage based on their subscription. - * - * Usage is automatically reset for metered entitlements based on their usage period, but this endpoint allows to manually reset it at any time. When doing so the period anchor of the entitlement can be changed if needed. - */ - resetEntitlementUsage: { + unscheduleCancelation: { parameters: { + query?: never + header?: never path: { - subjectIdOrKey: string - entitlementId: string - } - } - requestBody: { - content: { - 'application/json': components['schemas']['ResetEntitlementUsageInput'] + subscriptionId: string } + cookie?: never } + requestBody?: never responses: { - /** @description There is no content to send for this request, but the headers may be useful. */ - 204: { - content: never + /** @description The request has succeeded. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Subscription'] + } } /** @description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). */ 400: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['BadRequestProblemResponse'] } } /** @description The request has not been applied because it lacks valid authentication credentials for the target resource. */ 401: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnauthorizedProblemResponse'] } } /** @description The server understood the request but refuses to authorize it. */ 403: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ForbiddenProblemResponse'] } } /** @description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. */ 404: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['NotFoundProblemResponse'] } } + /** @description The request could not be completed due to a conflict with the current state of the target resource. */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/problem+json': components['schemas']['ConflictProblemResponse'] + } + } /** @description The server encountered an unexpected condition that prevented it from fulfilling the request. */ 500: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['InternalServerErrorProblemResponse'] } } /** @description The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. */ 503: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['ServiceUnavailableProblemResponse'] } } /** @description An unexpected error response. */ default: { + headers: { + [name: string]: unknown + } content: { 'application/problem+json': components['schemas']['UnexpectedProblemResponse'] } @@ -6910,3 +15995,6 @@ export interface operations { } } } +type WithRequired = T & { + [P in K]-?: T[P] +} diff --git a/api/client/web/test/react.test.tsx b/api/client/web/test/react.test.tsx index b44b6492a..f58664cc9 100644 --- a/api/client/web/test/react.test.tsx +++ b/api/client/web/test/react.test.tsx @@ -1,4 +1,6 @@ import { renderHook } from '@testing-library/react' +import React from 'react' +import { MockAgent, setGlobalDispatcher } from 'undici' import { afterAll, afterEach, @@ -9,10 +11,8 @@ import { it, vi, } from 'vitest' -import { useOpenMeter, OpenMeterProvider } from '../dist/react' -import React from 'react' import { OpenMeterClient } from '../dist' -import { MockAgent, setGlobalDispatcher } from 'undici' +import { useOpenMeter, OpenMeterProvider } from '../dist/react' describe('react', () => { beforeAll(() => { diff --git a/api/openapi.cloud.yaml b/api/openapi.cloud.yaml index f9154465a..a05283637 100644 --- a/api/openapi.cloud.yaml +++ b/api/openapi.cloud.yaml @@ -8210,17 +8210,12 @@ components: title: ID readOnly: true taxApp: - allOf: - - $ref: '#/components/schemas/App' - title: The tax app used for this workflow + $ref: '#/components/schemas/App' invoicingApp: - allOf: - - $ref: '#/components/schemas/App' - title: The invoicing app used for this workflow + $ref: '#/components/schemas/App' paymentApp: - allOf: - - $ref: '#/components/schemas/App' - title: The payment app used for this workflow + $ref: '#/components/schemas/App' + description: Customer specific workflow overrides. BillingCustomerWorkflowOverrideCreate: type: object properties: @@ -8236,6 +8231,7 @@ components: allOf: - $ref: '#/components/schemas/BillingWorkflowPaymentSettings' title: The payment settings for this workflow + description: Customer specific workflow overrides. BillingDocumentRef: type: object allOf: @@ -9534,17 +9530,11 @@ components: - payment properties: tax: - allOf: - - $ref: '#/components/schemas/App' - title: The tax app used for this workflow + $ref: '#/components/schemas/App' invoicing: - allOf: - - $ref: '#/components/schemas/App' - title: The invoicing app used for this workflow + $ref: '#/components/schemas/App' payment: - allOf: - - $ref: '#/components/schemas/App' - title: The payment app used for this workflow + $ref: '#/components/schemas/App' description: ProfileApps represents the applications used by a billing profile BillingProfileAppsOrReference: anyOf: @@ -12249,8 +12239,6 @@ components: rule: allOf: - $ref: '#/components/schemas/NotificationRule' - description: The nnotification rule which generated this event. - title: Owner Rule readOnly: true deliveryStatus: type: array @@ -12262,8 +12250,6 @@ components: payload: allOf: - $ref: '#/components/schemas/NotificationEventPayload' - description: Timestamp when the notification event was created in RFC 3339 format. - title: Event Payload readOnly: true annotations: allOf: @@ -13410,12 +13396,7 @@ components: description: The feature the customer is entitled to use. title: Feature key entitlementTemplate: - allOf: - - $ref: '#/components/schemas/RateCardEntitlement' - description: |- - The entitlement of the rate card. - Only available when featureKey is set. - title: Entitlement template + $ref: '#/components/schemas/RateCardEntitlement' taxConfig: allOf: - $ref: '#/components/schemas/TaxConfig' @@ -13480,12 +13461,7 @@ components: description: The feature the customer is entitled to use. title: Feature key entitlementTemplate: - allOf: - - $ref: '#/components/schemas/RateCardEntitlement' - description: |- - The entitlement of the rate card. - Only available when featureKey is set. - title: Entitlement template + $ref: '#/components/schemas/RateCardEntitlement' taxConfig: allOf: - $ref: '#/components/schemas/TaxConfig' @@ -13660,12 +13636,7 @@ components: description: The feature the customer is entitled to use. title: Feature key entitlementTemplate: - allOf: - - $ref: '#/components/schemas/RateCardEntitlement' - description: |- - The entitlement of the rate card. - Only available when featureKey is set. - title: Entitlement template + $ref: '#/components/schemas/RateCardEntitlement' taxConfig: allOf: - $ref: '#/components/schemas/TaxConfig' @@ -13736,12 +13707,7 @@ components: description: The feature the customer is entitled to use. title: Feature key entitlementTemplate: - allOf: - - $ref: '#/components/schemas/RateCardEntitlement' - description: |- - The entitlement of the rate card. - Only available when featureKey is set. - title: Entitlement template + $ref: '#/components/schemas/RateCardEntitlement' taxConfig: allOf: - $ref: '#/components/schemas/TaxConfig' @@ -14633,12 +14599,17 @@ components: - $ref: '#/components/schemas/Feature' description: The feature the customer is entitled to use. entitlement: - allOf: - - $ref: '#/components/schemas/Entitlement' - description: The entitlement of the Subscription Item. + $ref: '#/components/schemas/Entitlement' required: - feature description: Describes what access is gained via the SubscriptionItem + taxConfig: + allOf: + - $ref: '#/components/schemas/TaxConfig' + description: |- + The tax config of the Subscription Item. + When undefined, the tax config of the feature or the default tax config of the plan is used. + title: Tax config description: The actual contents of the Subscription, what the user gets, what they pay, etc... SubscriptionPhaseCreate: type: object diff --git a/api/spec/lib/index.js b/api/spec/lib/index.js index dd1feef74..8b2607c75 100644 --- a/api/spec/lib/index.js +++ b/api/spec/lib/index.js @@ -2,8 +2,14 @@ import { defineLinter } from '@typespec/compiler' import { casingRule } from './rules/casing.js' import { docDecoratorRule } from './rules/docs.js' import { friendlyNameRule } from './rules/friendlyName.js' +import { discriminatedUnionsRule } from './rules/discriminatedUnions.js' -const rules = [casingRule, docDecoratorRule, friendlyNameRule] +const rules = [ + casingRule, + docDecoratorRule, + friendlyNameRule, + discriminatedUnionsRule, +] // Linter experimentation // See: https://github.com/Azure/typespec-azure/tree/main/packages/typespec-azure-core/src/rules diff --git a/api/spec/lib/rules/discriminatedUnions.js b/api/spec/lib/rules/discriminatedUnions.js new file mode 100644 index 000000000..893bbb3fd --- /dev/null +++ b/api/spec/lib/rules/discriminatedUnions.js @@ -0,0 +1,37 @@ +import { createRule, paramMessage } from '@typespec/compiler' +import { isPascalCaseNoAcronyms } from './utils.js' + +export const discriminatedUnionsRule = createRule({ + name: 'discriminated-unions', + severity: 'error', + description: + 'Ensure discriminated unions on model properties does not have any additional decorators or description.', + messages: { + decorators: paramMessage`Discriminated union properties must not have additional decorators: ${'decorators'}`, + }, + create: (context) => ({ + model: (model) => { + for (const [name, field] of model.properties) { + if ( + field.type.kind === 'Union' && + field.type.decorators.some( + (d) => d.decorator.name === '$discriminator', + ) && + field.decorators.filter( + (d) => !['$body', '$visibility'].includes(d.decorator.name), + ).length > 0 + ) { + context.reportDiagnostic({ + format: { + decorators: field.decorators + .map((d) => d.decorator.name) + .join(', '), + }, + target: field, + messageId: 'decorators', + }) + } + } + }, + }), +}) diff --git a/api/spec/src/billing/customeroverride.tsp b/api/spec/src/billing/customeroverride.tsp index ae805ab99..e935c60dd 100644 --- a/api/spec/src/billing/customeroverride.tsp +++ b/api/spec/src/billing/customeroverride.tsp @@ -101,6 +101,9 @@ model CustomerOverride { billingProfile?: ULID; } +/** + * Customer specific workflow overrides. + */ @friendlyName("BillingCustomerWorkflowOverride") model CustomerWorkflowOverride { ...OmitProperties; @@ -108,15 +111,18 @@ model CustomerWorkflowOverride { // Note: these are only available for read, as provider override is not supported via the customer override. // to do that the customer should be assocatied with a new billing profile instead. - @summary("The tax app used for this workflow") @visibility("read", "query") taxApp: OpenMeter.App.App; - @summary("The invoicing app used for this workflow") + /* + * The invoicing app used for this workflow + */ @visibility("read", "query") invoicingApp: OpenMeter.App.App; - @summary("The payment app used for this workflow") + /* + * The payment app used for this workflow + */ @visibility("read", "query") paymentApp: OpenMeter.App.App; } diff --git a/api/spec/src/billing/profile.tsp b/api/spec/src/billing/profile.tsp index 6d5630b5a..85a33bc3f 100644 --- a/api/spec/src/billing/profile.tsp +++ b/api/spec/src/billing/profile.tsp @@ -131,13 +131,19 @@ model Profile { */ @friendlyName("BillingProfileApps") model ProfileApps { - @summary("The tax app used for this workflow") + /* + * The tax app used for this workflow + */ tax: OpenMeter.App.App; - @summary("The invoicing app used for this workflow") + /* + * The invoicing app used for this workflow + */ invoicing: OpenMeter.App.App; - @summary("The payment app used for this workflow") + /* + * The payment app used for this workflow + */ payment: OpenMeter.App.App; } diff --git a/api/spec/src/notification/event.tsp b/api/spec/src/notification/event.tsp index 0594b3d72..f9f9b7e7f 100644 --- a/api/spec/src/notification/event.tsp +++ b/api/spec/src/notification/event.tsp @@ -166,11 +166,10 @@ model NotificationEvent { @example(DateTime.fromISO("2023-01-01T01:01:01.001Z")) createdAt: DateTime; - /** + /* * The nnotification rule which generated this event. */ @visibility("read") - @summary("Owner Rule") rule: NotificationRule; /** @@ -180,11 +179,10 @@ model NotificationEvent { @summary("Delivery Status") deliveryStatus: Array; - /** + /* * Timestamp when the notification event was created in RFC 3339 format. */ @visibility("read") - @summary("Event Payload") payload: NotificationEventPayload; /** diff --git a/api/spec/src/productcatalog/plan.tsp b/api/spec/src/productcatalog/plan.tsp index 75e73fd24..c49f3995a 100644 --- a/api/spec/src/productcatalog/plan.tsp +++ b/api/spec/src/productcatalog/plan.tsp @@ -181,10 +181,9 @@ model PlanVariantOverridePreset { // update?: Record; }; - /** + /* * The discount on the plan. */ - @summary("Discount") discount?: AppliedDiscount; } diff --git a/api/spec/src/productcatalog/ratecards.tsp b/api/spec/src/productcatalog/ratecards.tsp index 56a48a65c..5a2f1ae00 100644 --- a/api/spec/src/productcatalog/ratecards.tsp +++ b/api/spec/src/productcatalog/ratecards.tsp @@ -33,12 +33,11 @@ model RateCardBase { @summary("Feature key") featureKey?: Key; - /** + /* * The entitlement of the rate card. * Only available when featureKey is set. */ @visibility("read", "create", "update") - @summary("Entitlement template") entitlementTemplate?: RateCardEntitlement; /** diff --git a/api/spec/src/productcatalog/subscription.tsp b/api/spec/src/productcatalog/subscription.tsp index 747f6ad8d..c7482cd3b 100644 --- a/api/spec/src/productcatalog/subscription.tsp +++ b/api/spec/src/productcatalog/subscription.tsp @@ -161,7 +161,7 @@ model SubscriptionItem { */ feature: Entitlements.Feature; - /** + /* * The entitlement of the Subscription Item. */ entitlement?: Entitlements.Entitlement;