@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.
- package/dist/cjs/vocabulary/dashboard.js +68 -0
- package/dist/cjs/vocabulary/errors.js +3 -2
- package/dist/cjs/vocabulary/identity.js +12 -0
- package/dist/cjs/vocabulary/index.js +2 -0
- package/dist/cjs/vocabulary/money.js +1 -1
- package/dist/cjs/vocabulary/paymentMethodConfigurations.js +17 -1
- package/dist/esm/vocabulary/dashboard.js +64 -0
- package/dist/esm/vocabulary/errors.js +3 -2
- package/dist/esm/vocabulary/identity.js +9 -0
- package/dist/esm/vocabulary/index.js +2 -0
- package/dist/esm/vocabulary/money.js +1 -1
- package/dist/esm/vocabulary/paymentMethodConfigurations.js +16 -0
- package/dist/types/vocabulary/dashboard.d.ts +44 -0
- package/dist/types/vocabulary/errors.d.ts +3 -2
- package/dist/types/vocabulary/identity.d.ts +9 -0
- package/dist/types/vocabulary/index.d.ts +2 -0
- package/dist/types/vocabulary/money.d.ts +1 -1
- package/dist/types/vocabulary/paymentMethodConfigurations.d.ts +7 -0
- package/package.json +16 -1
|
@@ -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
|
-
|
|
166
|
-
|
|
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 `
|
|
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
|
-
|
|
161
|
-
|
|
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 `
|
|
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
|
|
138
|
-
readonly
|
|
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 `
|
|
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.
|
|
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
|
],
|