@peable.to/contracts 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ // What a signed-in person may do in Orbit — the ONE map from a dashboard
3
+ // action to the Oxy application permission it needs. Zod-free. The gateway
4
+ // gates every `/v1/dashboard/applications/:id/*` and contribution route on it
5
+ // (a refusal is `permission_required`, `param` naming the permission), and
6
+ // Orbit hides or disables what the person lacks with the SAME map, so the two
7
+ // can never disagree about who may do what.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.FILE_UPLOAD_ACTION = exports.DASHBOARD_PERMISSIONS = void 0;
10
+ exports.allowsDashboardAction = allowsDashboardAction;
11
+ /**
12
+ * The permissions are oxy-api's own APPLICATION vocabulary
13
+ * (`packages/api/src/utils/accountRoles.ts`, `APPLICATION_PERMISSIONS`): Oxy
14
+ * resolves the person's role, grants and revokes on the account that owns the
15
+ * application into `callerMembership.permissions`, and that list — from
16
+ * `apps.get` on the gateway, from `apps.list` in Orbit — is the whole answer.
17
+ * Peable never reads a role name and keeps no membership copy.
18
+ */
19
+ exports.DASHBOARD_PERMISSIONS = {
20
+ /**
21
+ * Every read, the searches and a report run (it materialises the same rows a
22
+ * download streams). oxy-api answers an application only to a holder of
23
+ * `app:read`, so this is membership itself.
24
+ */
25
+ read: 'app:read',
26
+ /**
27
+ * The integration's configuration: branding and customer emails, the
28
+ * catalog, checkout sessions and payment links, contribution links, payment
29
+ * methods and wallet domains, a business logo.
30
+ */
31
+ configure: 'app:update',
32
+ /** Webhook endpoints and their signing secrets, test events, redelivery. */
33
+ webhooks: 'webhooks:update',
34
+ /**
35
+ * Money and who receives it: the merchant registration (its watch-only key
36
+ * and confirmations), the provider account and its onboarding and identity
37
+ * documents, payouts, sellers and transfers, disputes and their evidence, the
38
+ * billing engine, and every Peable Tax change or decision.
39
+ */
40
+ money: 'billing:manage',
41
+ /** Peable Tax reads and previews (ADR 0011, ADR 0020). */
42
+ taxRead: 'billing:read',
43
+ };
44
+ /**
45
+ * A permission that CONTAINS another: whoever may manage billing may read it.
46
+ * Stated once so the gateway and Orbit apply the same containment.
47
+ */
48
+ const IMPLIED_BY = {
49
+ 'billing:read': 'billing:manage',
50
+ };
51
+ /** Whether `held` (Oxy's `callerMembership.permissions`) allows `action`. */
52
+ function allowsDashboardAction(held, action) {
53
+ const required = exports.DASHBOARD_PERMISSIONS[action];
54
+ const container = IMPLIED_BY[required];
55
+ return held.includes(required) || (container !== undefined && held.includes(container));
56
+ }
57
+ /**
58
+ * Uploading a file is the first half of USING it, so it needs what the use
59
+ * needs: a logo is configuration, everything else is evidence or identity for
60
+ * money (a dispute, the provider account, Peable Tax).
61
+ */
62
+ exports.FILE_UPLOAD_ACTION = {
63
+ business_logo: 'configure',
64
+ dispute_evidence: 'money',
65
+ identity_document: 'money',
66
+ additional_verification: 'money',
67
+ tax_document: 'money',
68
+ };
@@ -162,8 +162,9 @@ exports.ERROR_CODE_DESCRIPTIONS = {
162
162
  // The dashboard routes (`/v1/dashboard/*`, Orbit): the signed-in person, not a credential.
163
163
  merchant_missing: 'The application has no merchant in this environment yet; register one (Orbit shows "Set up payments").',
164
164
  application_membership_required: 'The signed-in Oxy account is not a member of the account that owns this application.',
165
- permission_required: 'The member lacks an Oxy permission this needs; `param` names it (`billing:read`, `billing:manage`). An owner grants it in Oxy Console.',
166
- membership_unavailable: 'Oxy could not be asked whether the signed-in person is a member of this application; retry.',
165
+ account_membership_required: "The signed-in Oxy account is not a member of the Oxy account the path names (a contribution route's organization).",
166
+ permission_required: 'The member lacks the Oxy permission this action needs; `param` names it (`app:update`, `webhooks:update`, `billing:read`, `billing:manage`). An owner grants it in Oxy Console.',
167
+ membership_unavailable: 'Oxy could not be asked what the signed-in person may do on this application or account; retry.',
167
168
  session_invalid: 'Oxy no longer accepts the signed-in session; sign in again.',
168
169
  };
169
170
  /** Every error code, sorted. */
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PEABLE_SERVICE_AUDIENCE = exports.PEABLE_OXY_APPLICATION_ID = void 0;
4
+ /**
5
+ * Peable's own Oxy application: the identity the gateway runs as (`OxyServer`'s
6
+ * `applicationId`) and the one an Oxy service addresses when it calls the
7
+ * gateway. One constant, so the gateway's accepted audience and the SDK's
8
+ * requested one cannot name two different applications.
9
+ */
10
+ exports.PEABLE_OXY_APPLICATION_ID = '6a2f851751b784a86fd0e958';
11
+ /** The service-token audience of Peable's gateway (`oxy-service:<application id>`). */
12
+ exports.PEABLE_SERVICE_AUDIENCE = `oxy-service:${exports.PEABLE_OXY_APPLICATION_ID}`;
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  // package root, which constructs every schema at load.
21
21
  __exportStar(require("./billingPortal"), exports);
22
22
  __exportStar(require("./connect"), exports);
23
+ __exportStar(require("./dashboard"), exports);
23
24
  __exportStar(require("./catalog"), exports);
24
25
  __exportStar(require("./errors"), exports);
25
26
  __exportStar(require("./invoices"), exports);
@@ -33,5 +34,6 @@ __exportStar(require("./payments"), exports);
33
34
  __exportStar(require("./version"), exports);
34
35
  __exportStar(require("./checkout"), exports);
35
36
  __exportStar(require("./files"), exports);
37
+ __exportStar(require("./identity"), exports);
36
38
  __exportStar(require("./merchants"), exports);
37
39
  __exportStar(require("./paymentMethodConfigurations"), exports);
@@ -16,7 +16,7 @@ exports.isBaseUnitString = isBaseUnitString;
16
16
  * chain rail, and on the card rail the fiat set the provider settles for the
17
17
  * payment methods Orbit offers (cards, wallets, SEPA Debit, iDEAL, Bancontact,
18
18
  * EPS). A local method narrows it further per payment
19
- * (`PAYMENT_METHOD_CURRENCIES` in `paymentMethodConfiguration.ts`).
19
+ * (`PAYMENT_METHOD_CURRENCIES` in `paymentMethodConfigurations.ts`).
20
20
  *
21
21
  * A closed set, and the database mirrors it as a CHECK
22
22
  * (`db/schema/valueSets.ts`). ADR 0001 D4: the scale of an amount is a property
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  // Payment method breadth on the card rail (`pmc_…`, `pmd_…`). Zod-free.
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.PAYMENT_METHOD_UNAVAILABLE_REASONS = exports.PAYMENT_METHOD_CONFIGURATION_TYPES = void 0;
4
+ exports.PAYMENT_METHOD_CURRENCIES = exports.PAYMENT_METHOD_UNAVAILABLE_REASONS = exports.PAYMENT_METHOD_CONFIGURATION_TYPES = void 0;
5
+ const money_1 = require("./money");
5
6
  /**
6
7
  * The methods a configuration can turn on.
7
8
  *
@@ -34,3 +35,18 @@ exports.PAYMENT_METHOD_UNAVAILABLE_REASONS = [
34
35
  'provider_unsupported',
35
36
  'requires_card',
36
37
  ];
38
+ /**
39
+ * The currencies each method can take a payment in. A method is offered on a
40
+ * payment only when its currency is listed — so iDEAL never appears on a USD
41
+ * payment, and a payer is never shown a method that would fail.
42
+ */
43
+ exports.PAYMENT_METHOD_CURRENCIES = Object.freeze({
44
+ card: money_1.FIAT_CURRENCY_CODES,
45
+ apple_pay: money_1.FIAT_CURRENCY_CODES,
46
+ google_pay: money_1.FIAT_CURRENCY_CODES,
47
+ sepa_debit: ['EUR'],
48
+ ideal: ['EUR'],
49
+ bancontact: ['EUR'],
50
+ eps: ['EUR'],
51
+ bizum: ['EUR'],
52
+ });
@@ -0,0 +1,64 @@
1
+ // What a signed-in person may do in Orbit — the ONE map from a dashboard
2
+ // action to the Oxy application permission it needs. Zod-free. The gateway
3
+ // gates every `/v1/dashboard/applications/:id/*` and contribution route on it
4
+ // (a refusal is `permission_required`, `param` naming the permission), and
5
+ // Orbit hides or disables what the person lacks with the SAME map, so the two
6
+ // can never disagree about who may do what.
7
+ /**
8
+ * The permissions are oxy-api's own APPLICATION vocabulary
9
+ * (`packages/api/src/utils/accountRoles.ts`, `APPLICATION_PERMISSIONS`): Oxy
10
+ * resolves the person's role, grants and revokes on the account that owns the
11
+ * application into `callerMembership.permissions`, and that list — from
12
+ * `apps.get` on the gateway, from `apps.list` in Orbit — is the whole answer.
13
+ * Peable never reads a role name and keeps no membership copy.
14
+ */
15
+ export const DASHBOARD_PERMISSIONS = {
16
+ /**
17
+ * Every read, the searches and a report run (it materialises the same rows a
18
+ * download streams). oxy-api answers an application only to a holder of
19
+ * `app:read`, so this is membership itself.
20
+ */
21
+ read: 'app:read',
22
+ /**
23
+ * The integration's configuration: branding and customer emails, the
24
+ * catalog, checkout sessions and payment links, contribution links, payment
25
+ * methods and wallet domains, a business logo.
26
+ */
27
+ configure: 'app:update',
28
+ /** Webhook endpoints and their signing secrets, test events, redelivery. */
29
+ webhooks: 'webhooks:update',
30
+ /**
31
+ * Money and who receives it: the merchant registration (its watch-only key
32
+ * and confirmations), the provider account and its onboarding and identity
33
+ * documents, payouts, sellers and transfers, disputes and their evidence, the
34
+ * billing engine, and every Peable Tax change or decision.
35
+ */
36
+ money: 'billing:manage',
37
+ /** Peable Tax reads and previews (ADR 0011, ADR 0020). */
38
+ taxRead: 'billing:read',
39
+ };
40
+ /**
41
+ * A permission that CONTAINS another: whoever may manage billing may read it.
42
+ * Stated once so the gateway and Orbit apply the same containment.
43
+ */
44
+ const IMPLIED_BY = {
45
+ 'billing:read': 'billing:manage',
46
+ };
47
+ /** Whether `held` (Oxy's `callerMembership.permissions`) allows `action`. */
48
+ export function allowsDashboardAction(held, action) {
49
+ const required = DASHBOARD_PERMISSIONS[action];
50
+ const container = IMPLIED_BY[required];
51
+ return held.includes(required) || (container !== undefined && held.includes(container));
52
+ }
53
+ /**
54
+ * Uploading a file is the first half of USING it, so it needs what the use
55
+ * needs: a logo is configuration, everything else is evidence or identity for
56
+ * money (a dispute, the provider account, Peable Tax).
57
+ */
58
+ export const FILE_UPLOAD_ACTION = {
59
+ business_logo: 'configure',
60
+ dispute_evidence: 'money',
61
+ identity_document: 'money',
62
+ additional_verification: 'money',
63
+ tax_document: 'money',
64
+ };
@@ -157,8 +157,9 @@ export const ERROR_CODE_DESCRIPTIONS = {
157
157
  // The dashboard routes (`/v1/dashboard/*`, Orbit): the signed-in person, not a credential.
158
158
  merchant_missing: 'The application has no merchant in this environment yet; register one (Orbit shows "Set up payments").',
159
159
  application_membership_required: 'The signed-in Oxy account is not a member of the account that owns this application.',
160
- permission_required: 'The member lacks an Oxy permission this needs; `param` names it (`billing:read`, `billing:manage`). An owner grants it in Oxy Console.',
161
- membership_unavailable: 'Oxy could not be asked whether the signed-in person is a member of this application; retry.',
160
+ account_membership_required: "The signed-in Oxy account is not a member of the Oxy account the path names (a contribution route's organization).",
161
+ permission_required: 'The member lacks the Oxy permission this action needs; `param` names it (`app:update`, `webhooks:update`, `billing:read`, `billing:manage`). An owner grants it in Oxy Console.',
162
+ membership_unavailable: 'Oxy could not be asked what the signed-in person may do on this application or account; retry.',
162
163
  session_invalid: 'Oxy no longer accepts the signed-in session; sign in again.',
163
164
  };
164
165
  /** Every error code, sorted. */
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Peable's own Oxy application: the identity the gateway runs as (`OxyServer`'s
3
+ * `applicationId`) and the one an Oxy service addresses when it calls the
4
+ * gateway. One constant, so the gateway's accepted audience and the SDK's
5
+ * requested one cannot name two different applications.
6
+ */
7
+ export const PEABLE_OXY_APPLICATION_ID = '6a2f851751b784a86fd0e958';
8
+ /** The service-token audience of Peable's gateway (`oxy-service:<application id>`). */
9
+ export const PEABLE_SERVICE_AUDIENCE = `oxy-service:${PEABLE_OXY_APPLICATION_ID}`;
@@ -4,6 +4,7 @@
4
4
  // package root, which constructs every schema at load.
5
5
  export * from './billingPortal.js';
6
6
  export * from './connect.js';
7
+ export * from './dashboard.js';
7
8
  export * from './catalog.js';
8
9
  export * from './errors.js';
9
10
  export * from './invoices.js';
@@ -17,5 +18,6 @@ export * from './payments.js';
17
18
  export * from './version.js';
18
19
  export * from './checkout.js';
19
20
  export * from './files.js';
21
+ export * from './identity.js';
20
22
  export * from './merchants.js';
21
23
  export * from './paymentMethodConfigurations.js';
@@ -10,7 +10,7 @@
10
10
  * chain rail, and on the card rail the fiat set the provider settles for the
11
11
  * payment methods Orbit offers (cards, wallets, SEPA Debit, iDEAL, Bancontact,
12
12
  * EPS). A local method narrows it further per payment
13
- * (`PAYMENT_METHOD_CURRENCIES` in `paymentMethodConfiguration.ts`).
13
+ * (`PAYMENT_METHOD_CURRENCIES` in `paymentMethodConfigurations.ts`).
14
14
  *
15
15
  * A closed set, and the database mirrors it as a CHECK
16
16
  * (`db/schema/valueSets.ts`). ADR 0001 D4: the scale of an amount is a property
@@ -1,4 +1,5 @@
1
1
  // Payment method breadth on the card rail (`pmc_…`, `pmd_…`). Zod-free.
2
+ import { FIAT_CURRENCY_CODES } from './money.js';
2
3
  /**
3
4
  * The methods a configuration can turn on.
4
5
  *
@@ -31,3 +32,18 @@ export const PAYMENT_METHOD_UNAVAILABLE_REASONS = [
31
32
  'provider_unsupported',
32
33
  'requires_card',
33
34
  ];
35
+ /**
36
+ * The currencies each method can take a payment in. A method is offered on a
37
+ * payment only when its currency is listed — so iDEAL never appears on a USD
38
+ * payment, and a payer is never shown a method that would fail.
39
+ */
40
+ export const PAYMENT_METHOD_CURRENCIES = Object.freeze({
41
+ card: FIAT_CURRENCY_CODES,
42
+ apple_pay: FIAT_CURRENCY_CODES,
43
+ google_pay: FIAT_CURRENCY_CODES,
44
+ sepa_debit: ['EUR'],
45
+ ideal: ['EUR'],
46
+ bancontact: ['EUR'],
47
+ eps: ['EUR'],
48
+ bizum: ['EUR'],
49
+ });
@@ -0,0 +1,44 @@
1
+ import type { FileUploadPurpose } from './files';
2
+ /**
3
+ * The permissions are oxy-api's own APPLICATION vocabulary
4
+ * (`packages/api/src/utils/accountRoles.ts`, `APPLICATION_PERMISSIONS`): Oxy
5
+ * resolves the person's role, grants and revokes on the account that owns the
6
+ * application into `callerMembership.permissions`, and that list — from
7
+ * `apps.get` on the gateway, from `apps.list` in Orbit — is the whole answer.
8
+ * Peable never reads a role name and keeps no membership copy.
9
+ */
10
+ export declare const DASHBOARD_PERMISSIONS: {
11
+ /**
12
+ * Every read, the searches and a report run (it materialises the same rows a
13
+ * download streams). oxy-api answers an application only to a holder of
14
+ * `app:read`, so this is membership itself.
15
+ */
16
+ readonly read: "app:read";
17
+ /**
18
+ * The integration's configuration: branding and customer emails, the
19
+ * catalog, checkout sessions and payment links, contribution links, payment
20
+ * methods and wallet domains, a business logo.
21
+ */
22
+ readonly configure: "app:update";
23
+ /** Webhook endpoints and their signing secrets, test events, redelivery. */
24
+ readonly webhooks: "webhooks:update";
25
+ /**
26
+ * Money and who receives it: the merchant registration (its watch-only key
27
+ * and confirmations), the provider account and its onboarding and identity
28
+ * documents, payouts, sellers and transfers, disputes and their evidence, the
29
+ * billing engine, and every Peable Tax change or decision.
30
+ */
31
+ readonly money: "billing:manage";
32
+ /** Peable Tax reads and previews (ADR 0011, ADR 0020). */
33
+ readonly taxRead: "billing:read";
34
+ };
35
+ export type DashboardAction = keyof typeof DASHBOARD_PERMISSIONS;
36
+ export type DashboardPermission = (typeof DASHBOARD_PERMISSIONS)[DashboardAction];
37
+ /** Whether `held` (Oxy's `callerMembership.permissions`) allows `action`. */
38
+ export declare function allowsDashboardAction(held: readonly string[], action: DashboardAction): boolean;
39
+ /**
40
+ * Uploading a file is the first half of USING it, so it needs what the use
41
+ * needs: a logo is configuration, everything else is evidence or identity for
42
+ * money (a dispute, the provider account, Peable Tax).
43
+ */
44
+ export declare const FILE_UPLOAD_ACTION: Readonly<Record<FileUploadPurpose, DashboardAction>>;
@@ -134,8 +134,9 @@ export declare const ERROR_CODE_DESCRIPTIONS: {
134
134
  readonly no_faircoin_half: "The connected account has no FairCoin half to register a key for.";
135
135
  readonly merchant_missing: "The application has no merchant in this environment yet; register one (Orbit shows \"Set up payments\").";
136
136
  readonly application_membership_required: "The signed-in Oxy account is not a member of the account that owns this application.";
137
- readonly permission_required: "The member lacks an Oxy permission this needs; `param` names it (`billing:read`, `billing:manage`). An owner grants it in Oxy Console.";
138
- readonly membership_unavailable: "Oxy could not be asked whether the signed-in person is a member of this application; retry.";
137
+ readonly account_membership_required: "The signed-in Oxy account is not a member of the Oxy account the path names (a contribution route's organization).";
138
+ readonly permission_required: "The member lacks the Oxy permission this action needs; `param` names it (`app:update`, `webhooks:update`, `billing:read`, `billing:manage`). An owner grants it in Oxy Console.";
139
+ readonly membership_unavailable: "Oxy could not be asked what the signed-in person may do on this application or account; retry.";
139
140
  readonly session_invalid: "Oxy no longer accepts the signed-in session; sign in again.";
140
141
  };
141
142
  export type ErrorCode = keyof typeof ERROR_CODE_DESCRIPTIONS;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Peable's own Oxy application: the identity the gateway runs as (`OxyServer`'s
3
+ * `applicationId`) and the one an Oxy service addresses when it calls the
4
+ * gateway. One constant, so the gateway's accepted audience and the SDK's
5
+ * requested one cannot name two different applications.
6
+ */
7
+ export declare const PEABLE_OXY_APPLICATION_ID = "6a2f851751b784a86fd0e958";
8
+ /** The service-token audience of Peable's gateway (`oxy-service:<application id>`). */
9
+ export declare const PEABLE_SERVICE_AUDIENCE = "oxy-service:6a2f851751b784a86fd0e958";
@@ -1,5 +1,6 @@
1
1
  export * from './billingPortal';
2
2
  export * from './connect';
3
+ export * from './dashboard';
3
4
  export * from './catalog';
4
5
  export * from './errors';
5
6
  export * from './invoices';
@@ -13,5 +14,6 @@ export * from './payments';
13
14
  export * from './version';
14
15
  export * from './checkout';
15
16
  export * from './files';
17
+ export * from './identity';
16
18
  export * from './merchants';
17
19
  export * from './paymentMethodConfigurations';
@@ -3,7 +3,7 @@
3
3
  * chain rail, and on the card rail the fiat set the provider settles for the
4
4
  * payment methods Orbit offers (cards, wallets, SEPA Debit, iDEAL, Bancontact,
5
5
  * EPS). A local method narrows it further per payment
6
- * (`PAYMENT_METHOD_CURRENCIES` in `paymentMethodConfiguration.ts`).
6
+ * (`PAYMENT_METHOD_CURRENCIES` in `paymentMethodConfigurations.ts`).
7
7
  *
8
8
  * A closed set, and the database mirrors it as a CHECK
9
9
  * (`db/schema/valueSets.ts`). ADR 0001 D4: the scale of an amount is a property
@@ -1,3 +1,4 @@
1
+ import { type FiatCurrencyCode } from './money';
1
2
  /**
2
3
  * The methods a configuration can turn on.
3
4
  *
@@ -20,3 +21,9 @@ export type PaymentMethodConfigurationType = (typeof PAYMENT_METHOD_CONFIGURATIO
20
21
  */
21
22
  export declare const PAYMENT_METHOD_UNAVAILABLE_REASONS: readonly ["provider_unsupported", "requires_card"];
22
23
  export type PaymentMethodUnavailableReason = (typeof PAYMENT_METHOD_UNAVAILABLE_REASONS)[number];
24
+ /**
25
+ * The currencies each method can take a payment in. A method is offered on a
26
+ * payment only when its currency is listed — so iDEAL never appears on a USD
27
+ * payment, and a payer is never shown a method that would fail.
28
+ */
29
+ export declare const PAYMENT_METHOD_CURRENCIES: Readonly<Record<PaymentMethodConfigurationType, readonly FiatCurrencyCode[]>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peable.to/contracts",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "The Peable wire, declared once: Zod contracts of every public route, the OpenAPI 3.1 generator and the closed value sets (ADR 0014 D5).",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -36,6 +36,18 @@
36
36
  },
37
37
  "default": "./dist/esm/vocabulary/index.js"
38
38
  },
39
+ "./vocabulary/*": {
40
+ "react-native": "./dist/esm/vocabulary/*.js",
41
+ "import": {
42
+ "types": "./dist/types/vocabulary/*.d.ts",
43
+ "default": "./dist/esm/vocabulary/*.js"
44
+ },
45
+ "require": {
46
+ "types": "./dist/types/vocabulary/*.d.ts",
47
+ "default": "./dist/cjs/vocabulary/*.js"
48
+ },
49
+ "default": "./dist/esm/vocabulary/*.js"
50
+ },
39
51
  "./contributions": {
40
52
  "react-native": "./dist/esm/contributions.js",
41
53
  "import": {
@@ -106,6 +118,9 @@
106
118
  "vocabulary": [
107
119
  "./dist/types/vocabulary/index.d.ts"
108
120
  ],
121
+ "vocabulary/*": [
122
+ "./dist/types/vocabulary/*.d.ts"
123
+ ],
109
124
  "contributions": [
110
125
  "./dist/types/contributions.d.ts"
111
126
  ],