@genesis-tech/genesispay-seller 0.8.0 → 0.11.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/CHANGELOG.md +96 -38
- package/README.md +142 -40
- package/dist/client.d.ts +23 -15
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +73 -39
- package/dist/client.js.map +1 -1
- package/dist/customers.d.ts +2 -2
- package/dist/customers.d.ts.map +1 -1
- package/dist/customers.js +5 -5
- package/dist/customers.js.map +1 -1
- package/dist/entitlements.d.ts +19 -0
- package/dist/entitlements.d.ts.map +1 -0
- package/dist/entitlements.js +30 -0
- package/dist/entitlements.js.map +1 -0
- package/dist/errors.d.ts +9 -9
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -18
- package/dist/errors.js.map +1 -1
- package/dist/genesispay-settlement.d.ts +30 -0
- package/dist/genesispay-settlement.d.ts.map +1 -0
- package/dist/genesispay-settlement.js +103 -0
- package/dist/genesispay-settlement.js.map +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/invoices.d.ts +2 -2
- package/dist/invoices.d.ts.map +1 -1
- package/dist/invoices.js +7 -7
- package/dist/invoices.js.map +1 -1
- package/dist/mandate-gate.d.ts +5 -5
- package/dist/mandate-gate.d.ts.map +1 -1
- package/dist/mandate-gate.js +4 -4
- package/dist/mandate-gate.js.map +1 -1
- package/dist/mandates.d.ts +4 -4
- package/dist/mandates.d.ts.map +1 -1
- package/dist/mandates.js +9 -9
- package/dist/mandates.js.map +1 -1
- package/dist/payment-gate.js +1 -1
- package/dist/payment-gate.js.map +1 -1
- package/dist/plans.d.ts +2 -2
- package/dist/plans.d.ts.map +1 -1
- package/dist/plans.js +6 -6
- package/dist/plans.js.map +1 -1
- package/dist/products.d.ts +128 -0
- package/dist/products.d.ts.map +1 -0
- package/dist/products.js +287 -0
- package/dist/products.js.map +1 -0
- package/dist/resource.d.ts +2 -2
- package/dist/resource.d.ts.map +1 -1
- package/dist/resource.js +1 -1
- package/dist/resource.js.map +1 -1
- package/dist/webhooks.d.ts +25 -25
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +30 -29
- package/dist/webhooks.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { GenesisPayConfigError } from "./errors.js";
|
|
2
|
+
import { asRecord, optionalString, requiredString } from "./resource.js";
|
|
3
|
+
export function createEntitlementsResource(request) {
|
|
4
|
+
return {
|
|
5
|
+
async verify(entitlementId) {
|
|
6
|
+
const id = entitlementId?.trim();
|
|
7
|
+
if (!id?.startsWith("ent_"))
|
|
8
|
+
throw new GenesisPayConfigError("entitlements.verify requires an ent_… id.");
|
|
9
|
+
const body = await request({
|
|
10
|
+
path: `/api/v1/entitlements/verify?entitlement=${encodeURIComponent(id)}`,
|
|
11
|
+
operation: "GET /api/v1/entitlements/verify",
|
|
12
|
+
action: `verify entitlement "${id}"`,
|
|
13
|
+
notFoundMessage: "The entitlement does not exist or does not belong to this seller.",
|
|
14
|
+
});
|
|
15
|
+
const root = asRecord(body);
|
|
16
|
+
const raw = asRecord(root?.entitlement);
|
|
17
|
+
if (!raw)
|
|
18
|
+
throw new GenesisPayConfigError("GenesisPay entitlement verification returned no entitlement.");
|
|
19
|
+
return {
|
|
20
|
+
valid: root?.valid === true,
|
|
21
|
+
entitlement: {
|
|
22
|
+
publicId: requiredString(raw.publicId), productId: requiredString(raw.productId), sku: optionalString(raw.sku),
|
|
23
|
+
paymentAttemptId: requiredString(raw.paymentAttemptId), simulated: raw.simulated === true,
|
|
24
|
+
expiresAt: requiredString(raw.expiresAt), redemptionCount: typeof raw.redemptionCount === "number" ? raw.redemptionCount : 0,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=entitlements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlements.js","sourceRoot":"","sources":["../src/entitlements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAA0B,MAAM,eAAe,CAAC;AAoBjG,MAAM,UAAU,0BAA0B,CAAC,OAA0B;IACnE,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,aAAa;YACxB,MAAM,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,qBAAqB,CAAC,2CAA2C,CAAC,CAAC;YAC1G,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;gBACzB,IAAI,EAAE,2CAA2C,kBAAkB,CAAC,EAAE,CAAC,EAAE;gBACzE,SAAS,EAAE,iCAAiC;gBAC5C,MAAM,EAAE,uBAAuB,EAAE,GAAG;gBACpC,eAAe,EAAE,mEAAmE;aACrF,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,qBAAqB,CAAC,8DAA8D,CAAC,CAAC;YAC1G,OAAO;gBACL,KAAK,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;gBAC3B,WAAW,EAAE;oBACX,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC9G,gBAAgB,EAAE,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,KAAK,IAAI;oBACzF,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;iBAC7H;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/** Missing/invalid key, unresolvable prod URL, or unreachable backend. */
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class GenesisPayConfigError extends Error {
|
|
3
3
|
constructor(message: string);
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
6
|
* The requested resource does not exist (HTTP 404). Kept separate from
|
|
7
|
-
* `
|
|
7
|
+
* `GenesisPayConfigError` on purpose: polling `checkout.retrieve()` for an unknown
|
|
8
8
|
* publicId is an ordinary application case and must stay distinguishable from
|
|
9
9
|
* "the key is broken / the backend is unreachable".
|
|
10
10
|
*/
|
|
11
|
-
export declare class
|
|
11
|
+
export declare class GenesisPayNotFoundError extends Error {
|
|
12
12
|
constructor(message: string);
|
|
13
13
|
}
|
|
14
14
|
/** Asset-integrity, mode↔network, or expectedPayTo-pin mismatch — a money-safety stop. */
|
|
15
|
-
export declare class
|
|
15
|
+
export declare class GenesisPayNetworkSafetyError extends Error {
|
|
16
16
|
constructor(message: string);
|
|
17
17
|
}
|
|
18
18
|
/** One rejected field, as the API reports it. `path` is dot-joined ("metadata.orderId"). */
|
|
19
|
-
export type
|
|
19
|
+
export type GenesisPayValidationIssue = {
|
|
20
20
|
path: string;
|
|
21
21
|
message: string;
|
|
22
22
|
};
|
|
@@ -28,9 +28,9 @@ export type PeerPayValidationIssue = {
|
|
|
28
28
|
* metadata keys and a malformed wallet must not look the same to a caller that
|
|
29
29
|
* wants to surface the offending field back to its own user.
|
|
30
30
|
*/
|
|
31
|
-
export declare class
|
|
32
|
-
readonly issues:
|
|
33
|
-
constructor(message: string, issues?:
|
|
31
|
+
export declare class GenesisPayValidationError extends Error {
|
|
32
|
+
readonly issues: GenesisPayValidationIssue[];
|
|
33
|
+
constructor(message: string, issues?: GenesisPayValidationIssue[]);
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* The API key exceeded its rate limit (HTTP 429).
|
|
@@ -40,7 +40,7 @@ export declare class PeerPayValidationError extends Error {
|
|
|
40
40
|
* a caller sleeping on a made-up number is worse than one that backs off with
|
|
41
41
|
* its own policy.
|
|
42
42
|
*/
|
|
43
|
-
export declare class
|
|
43
|
+
export declare class GenesisPayRateLimitError extends Error {
|
|
44
44
|
readonly retryAfterSeconds: number | null;
|
|
45
45
|
constructor(message: string, retryAfterSeconds: number | null);
|
|
46
46
|
}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AASA,0EAA0E;AAC1E,qBAAa,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AASA,0EAA0E;AAC1E,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED,0FAA0F;AAC1F,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED,4FAA4F;AAC5F,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC;gBAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,yBAAyB,EAAO;CAKtE;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE9B,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;CAK9D;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAUF;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,KAAK,CAAC,CA4ChB"}
|
package/dist/errors.js
CHANGED
|
@@ -3,33 +3,33 @@
|
|
|
3
3
|
// One rule, one place: `throwForErrorResponse` is the single mapper from a
|
|
4
4
|
// non-OK `Response` to an error class, so every method (checkout today, plans
|
|
5
5
|
// and mandates tomorrow) fails the same way. A method that hand-rolls its own
|
|
6
|
-
// `throw new
|
|
6
|
+
// `throw new GenesisPayConfigError(...)` for a non-OK status is a bug — 422 and
|
|
7
7
|
// 429 carry information (which field is wrong, how long to wait) that a generic
|
|
8
8
|
// config error throws away.
|
|
9
9
|
/** Missing/invalid key, unresolvable prod URL, or unreachable backend. */
|
|
10
|
-
export class
|
|
10
|
+
export class GenesisPayConfigError extends Error {
|
|
11
11
|
constructor(message) {
|
|
12
12
|
super(message);
|
|
13
|
-
this.name = "
|
|
13
|
+
this.name = "GenesisPayConfigError";
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* The requested resource does not exist (HTTP 404). Kept separate from
|
|
18
|
-
* `
|
|
18
|
+
* `GenesisPayConfigError` on purpose: polling `checkout.retrieve()` for an unknown
|
|
19
19
|
* publicId is an ordinary application case and must stay distinguishable from
|
|
20
20
|
* "the key is broken / the backend is unreachable".
|
|
21
21
|
*/
|
|
22
|
-
export class
|
|
22
|
+
export class GenesisPayNotFoundError extends Error {
|
|
23
23
|
constructor(message) {
|
|
24
24
|
super(message);
|
|
25
|
-
this.name = "
|
|
25
|
+
this.name = "GenesisPayNotFoundError";
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
/** Asset-integrity, mode↔network, or expectedPayTo-pin mismatch — a money-safety stop. */
|
|
29
|
-
export class
|
|
29
|
+
export class GenesisPayNetworkSafetyError extends Error {
|
|
30
30
|
constructor(message) {
|
|
31
31
|
super(message);
|
|
32
|
-
this.name = "
|
|
32
|
+
this.name = "GenesisPayNetworkSafetyError";
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
@@ -40,11 +40,11 @@ export class PeerPayNetworkSafetyError extends Error {
|
|
|
40
40
|
* metadata keys and a malformed wallet must not look the same to a caller that
|
|
41
41
|
* wants to surface the offending field back to its own user.
|
|
42
42
|
*/
|
|
43
|
-
export class
|
|
43
|
+
export class GenesisPayValidationError extends Error {
|
|
44
44
|
issues;
|
|
45
45
|
constructor(message, issues = []) {
|
|
46
46
|
super(message);
|
|
47
|
-
this.name = "
|
|
47
|
+
this.name = "GenesisPayValidationError";
|
|
48
48
|
this.issues = issues;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -56,11 +56,11 @@ export class PeerPayValidationError extends Error {
|
|
|
56
56
|
* a caller sleeping on a made-up number is worse than one that backs off with
|
|
57
57
|
* its own policy.
|
|
58
58
|
*/
|
|
59
|
-
export class
|
|
59
|
+
export class GenesisPayRateLimitError extends Error {
|
|
60
60
|
retryAfterSeconds;
|
|
61
61
|
constructor(message, retryAfterSeconds) {
|
|
62
62
|
super(message);
|
|
63
|
-
this.name = "
|
|
63
|
+
this.name = "GenesisPayRateLimitError";
|
|
64
64
|
this.retryAfterSeconds = retryAfterSeconds;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -77,27 +77,27 @@ export async function throwForErrorResponse(response, options) {
|
|
|
77
77
|
const suffix = detail ? `: ${detail}` : "";
|
|
78
78
|
const hint = options.hint ? ` ${options.hint}` : "";
|
|
79
79
|
if (response.status === 404) {
|
|
80
|
-
throw new
|
|
80
|
+
throw new GenesisPayNotFoundError(options.notFoundMessage ??
|
|
81
81
|
`GenesisPay ${options.operation} returned 404 (not found)${suffix}${hint}`);
|
|
82
82
|
}
|
|
83
83
|
// 422 is a rejected *body*; 400 with `issues[]` is a rejected *query string*
|
|
84
84
|
// (`GET /api/v1/mandates` answers that way). Both mean "your input was wrong,
|
|
85
|
-
// here are the fields", so both become
|
|
85
|
+
// here are the fields", so both become GenesisPayValidationError — a caller that
|
|
86
86
|
// wants to show the offending parameter must not have to branch on status.
|
|
87
87
|
//
|
|
88
88
|
// The `issues.length` gate is what keeps this narrow: a 400 without structured
|
|
89
89
|
// detail ("Request body must be JSON.", "startingAfter is not a mandate of this
|
|
90
|
-
// account.") stays a
|
|
90
|
+
// account.") stays a GenesisPayConfigError exactly as before, so nothing that was
|
|
91
91
|
// a config error yesterday changes class today.
|
|
92
92
|
if (response.status === 422 || (response.status === 400 && body.issues.length > 0)) {
|
|
93
|
-
throw new
|
|
93
|
+
throw new GenesisPayValidationError(`GenesisPay ${options.operation} rejected the input (${response.status})${suffix}`, body.issues);
|
|
94
94
|
}
|
|
95
95
|
if (response.status === 429) {
|
|
96
96
|
const retryAfterSeconds = parseRetryAfterSeconds(response.headers?.get("retry-after") ?? null);
|
|
97
97
|
const wait = retryAfterSeconds === null ? "" : ` Retry after ${retryAfterSeconds}s.`;
|
|
98
|
-
throw new
|
|
98
|
+
throw new GenesisPayRateLimitError(`GenesisPay ${options.operation} was rate limited (429)${suffix}${wait}`, retryAfterSeconds);
|
|
99
99
|
}
|
|
100
|
-
throw new
|
|
100
|
+
throw new GenesisPayConfigError(`GenesisPay ${options.operation} failed: ${response.status}${suffix}${hint}`.trim());
|
|
101
101
|
}
|
|
102
102
|
async function readErrorBody(response) {
|
|
103
103
|
const text = (await response.text().catch(() => "")).trim();
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,4BAA4B;AAE5B,0EAA0E;AAC1E,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,0FAA0F;AAC1F,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAQD;;;;;;;GAOG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,MAAM,CAA8B;IAE7C,YAAY,OAAe,EAAE,SAAsC,EAAE;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,iBAAiB,CAAgB;IAE1C,YAAY,OAAe,EAAE,iBAAgC;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;CACF;AAmBD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAkB,EAClB,OAAqC;IAErC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,uBAAuB,CAC/B,OAAO,CAAC,eAAe;YACrB,cAAc,OAAO,CAAC,SAAS,4BAA4B,MAAM,GAAG,IAAI,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,iFAAiF;IACjF,2EAA2E;IAC3E,EAAE;IACF,+EAA+E;IAC/E,gFAAgF;IAChF,kFAAkF;IAClF,gDAAgD;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,yBAAyB,CACjC,cAAc,OAAO,CAAC,SAAS,wBAAwB,QAAQ,CAAC,MAAM,IAAI,MAAM,EAAE,EAClF,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAC7C,CAAC;QACF,MAAM,IAAI,GACR,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,iBAAiB,IAAI,CAAC;QAC1E,MAAM,IAAI,wBAAwB,CAChC,cAAc,OAAO,CAAC,SAAS,0BAA0B,MAAM,GAAG,IAAI,EAAE,EACxE,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,qBAAqB,CAC7B,cAAc,OAAO,CAAC,SAAS,YAAY,QAAQ,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CACpF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAkB;IAC7C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAE1D,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,MAAkE,CAAC;IAClF,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK;QAC9C,CAAC,CAAC,MAAM,CAAC,KAAK;QACd,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO;YACpD,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,IAAI,CAAC;IAEb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,6FAA6F;AAC7F,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QAC1E,MAAM,KAAK,GAAG,KAA8C,CAAC;QAC7D,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,SAAS;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACtD,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,MAAqB;IACnD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { VerifySettlement } from "./payment-gate.js";
|
|
2
|
+
/**
|
|
3
|
+
* Default GenesisPay app base URL — the public "development" facilitator. Used
|
|
4
|
+
* when `facilitatorBaseUrl` is omitted so integrators don't have to configure a
|
|
5
|
+
* URL in dev. Set `facilitatorBaseUrl` explicitly for production.
|
|
6
|
+
*
|
|
7
|
+
* The custom domain rather than the Railway-generated hostname: the generated
|
|
8
|
+
* form encodes the service name and breaks when the service is renamed.
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_FACILITATOR_BASE_URL = "https://dev.genesispay.finance";
|
|
11
|
+
export type GenesisPaySettlementOptions = {
|
|
12
|
+
/**
|
|
13
|
+
* Base URL of the GenesisPay app, e.g. "https://genesispay.example". Defaults to
|
|
14
|
+
* the public development facilitator (DEFAULT_FACILITATOR_BASE_URL) when
|
|
15
|
+
* omitted; set it explicitly in production.
|
|
16
|
+
*/
|
|
17
|
+
facilitatorBaseUrl?: string;
|
|
18
|
+
/** GenesisPay seller API key ("gp_sk_..."). */
|
|
19
|
+
apiKey: string;
|
|
20
|
+
/** Override for testing; defaults to global fetch. */
|
|
21
|
+
fetchFn?: typeof fetch;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Built-in settlement hook that forwards the PAYMENT-SIGNATURE payload to the
|
|
25
|
+
* GenesisPay facilitator (`POST /api/v1/facilitator/settle`). GenesisPay broadcasts
|
|
26
|
+
* the EIP-3009 authorization on-chain (or verifies a payer-provided txHash)
|
|
27
|
+
* and verifies the USDC transfer before reporting success.
|
|
28
|
+
*/
|
|
29
|
+
export declare function genesisPaySettlement(options: GenesisPaySettlementOptions): VerifySettlement;
|
|
30
|
+
//# sourceMappingURL=genesispay-settlement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genesispay-settlement.d.ts","sourceRoot":"","sources":["../src/genesispay-settlement.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,mCAAmC,CAAC;AAE7E,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,gBAAgB,CA6DlB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { parseSettlementResponsePayload } from "@genesis-tech/genesispay-protocol";
|
|
2
|
+
/**
|
|
3
|
+
* Default GenesisPay app base URL — the public "development" facilitator. Used
|
|
4
|
+
* when `facilitatorBaseUrl` is omitted so integrators don't have to configure a
|
|
5
|
+
* URL in dev. Set `facilitatorBaseUrl` explicitly for production.
|
|
6
|
+
*
|
|
7
|
+
* The custom domain rather than the Railway-generated hostname: the generated
|
|
8
|
+
* form encodes the service name and breaks when the service is renamed.
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_FACILITATOR_BASE_URL = "https://dev.genesispay.finance";
|
|
11
|
+
/**
|
|
12
|
+
* Built-in settlement hook that forwards the PAYMENT-SIGNATURE payload to the
|
|
13
|
+
* GenesisPay facilitator (`POST /api/v1/facilitator/settle`). GenesisPay broadcasts
|
|
14
|
+
* the EIP-3009 authorization on-chain (or verifies a payer-provided txHash)
|
|
15
|
+
* and verifies the USDC transfer before reporting success.
|
|
16
|
+
*/
|
|
17
|
+
export function genesisPaySettlement(options) {
|
|
18
|
+
const settleUrl = buildSettleUrl(options.facilitatorBaseUrl?.trim() || DEFAULT_FACILITATOR_BASE_URL);
|
|
19
|
+
const apiKey = options.apiKey?.trim();
|
|
20
|
+
if (!apiKey) {
|
|
21
|
+
throw new Error("genesisPaySettlement requires a GenesisPay seller API key (gp_sk_...).");
|
|
22
|
+
}
|
|
23
|
+
const fetchFn = options.fetchFn ?? fetch;
|
|
24
|
+
return async (context) => {
|
|
25
|
+
const { requirement } = context;
|
|
26
|
+
let response;
|
|
27
|
+
try {
|
|
28
|
+
response = await fetchFn(settleUrl, {
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers: {
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
Authorization: `Bearer ${apiKey}`,
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({
|
|
35
|
+
paymentSignature: context.paymentSignatureHeader,
|
|
36
|
+
requirement: {
|
|
37
|
+
resource: requirement.resource,
|
|
38
|
+
network: requirement.network,
|
|
39
|
+
chainId: requirement.chainId,
|
|
40
|
+
assetAddress: requirement.assetAddress,
|
|
41
|
+
amountUsdcMinor: requirement.maxAmountRequired,
|
|
42
|
+
payTo: requirement.payTo,
|
|
43
|
+
description: requirement.description || undefined,
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return {
|
|
50
|
+
ok: false,
|
|
51
|
+
errorReason: `Failed to reach the GenesisPay facilitator: ${describeError(error)}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const body = await readJsonBody(response);
|
|
55
|
+
const settlement = tryParseSettlement(body);
|
|
56
|
+
if (response.ok && settlement?.success) {
|
|
57
|
+
return { ok: true, settlement };
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
errorReason: settlement?.errorReason ??
|
|
62
|
+
readErrorMessage(body) ??
|
|
63
|
+
`GenesisPay facilitator settlement failed with status ${response.status}.`,
|
|
64
|
+
...(settlement ? { settlement } : {}),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function buildSettleUrl(facilitatorBaseUrl) {
|
|
69
|
+
const trimmed = facilitatorBaseUrl?.trim().replace(/\/+$/, "");
|
|
70
|
+
if (!trimmed || !/^https?:\/\//.test(trimmed)) {
|
|
71
|
+
throw new Error(`Invalid facilitatorBaseUrl "${String(facilitatorBaseUrl)}": expected an http(s) URL like "https://genesispay.example".`);
|
|
72
|
+
}
|
|
73
|
+
return `${trimmed}/api/v1/facilitator/settle`;
|
|
74
|
+
}
|
|
75
|
+
async function readJsonBody(response) {
|
|
76
|
+
try {
|
|
77
|
+
return await response.json();
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function tryParseSettlement(body) {
|
|
84
|
+
try {
|
|
85
|
+
return parseSettlementResponsePayload(body);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function readErrorMessage(body) {
|
|
92
|
+
if (typeof body === "object" &&
|
|
93
|
+
body !== null &&
|
|
94
|
+
"error" in body &&
|
|
95
|
+
typeof body.error === "string") {
|
|
96
|
+
return body.error;
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
function describeError(error) {
|
|
101
|
+
return error instanceof Error ? error.message : "unknown error";
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=genesispay-settlement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genesispay-settlement.js","sourceRoot":"","sources":["../src/genesispay-settlement.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { GenesisPay, type GenesisPayKeyMode, type GenesisPayClientOptions, type SellerConfig, type CheckoutAmountInput, type CheckoutCreateInput, type CheckoutLink, type CheckoutSession, type CheckoutAttempt, type CheckoutAttemptStatus, type SimulatePaymentOptions, type GateConfig, type ResolvingGate, } from "./client.js";
|
|
2
2
|
export { type SubscriptionPlan, type SubscriptionPlanStatus, type PlanCreateInput, type PlansResource, } from "./plans.js";
|
|
3
|
+
export { type Product, type ProductCreateInput, type ProductPaymentLink, type ProductDelivery, type ProductGate, type ProductGatePurchase, type ProductsResource, } from "./products.js";
|
|
4
|
+
export { type EntitlementsResource, type VerifiedEntitlement } from "./entitlements.js";
|
|
3
5
|
export { type Customer, type CustomerCreateInput, type CustomerUpdateInput, type CustomersResource, } from "./customers.js";
|
|
4
6
|
export { type Invoice, type InvoiceStatus, type InvoiceLineInput, type InvoiceDraftInput, type InvoiceEmailDelivery, type InvoicesResource, } from "./invoices.js";
|
|
5
7
|
export { type Mandate, type MandateKind, type MandateStatus, type MandateCreateInput, type MandateCreateResult, type MandateCharge, type MandateChargeInput, type MandateChargeStatus, type MandateListOptions, type MandateListPage, type PermitTypedData, type MandatesResource, } from "./mandates.js";
|
|
6
|
-
export {
|
|
7
|
-
export { constructEvent,
|
|
8
|
+
export { GenesisPayConfigError, GenesisPayNetworkSafetyError, GenesisPayNotFoundError, GenesisPayValidationError, GenesisPayRateLimitError, type GenesisPayValidationIssue, } from "./errors.js";
|
|
9
|
+
export { constructEvent, isKnownGenesisPayEventType, GENESISPAY_EVENT_TYPES, GenesisPaySignatureVerificationError, type GenesisPayEvent, type GenesisPayAnyEvent, type GenesisPayUnknownEvent, type GenesisPayEventType, type GenesisPayPaymentEvent, type GenesisPayMandateEvent, type GenesisPayAgentPaymentEvent, type GenesisPayPaymentEventData, type GenesisPayMandateEventData, type ConstructEventOptions, } from "./webhooks.js";
|
|
8
10
|
export { createPaymentGate, type PaymentGate, type PaymentGateConfig, type SettlementContext, type SettlementVerification, type VerifySettlement, type WrapOptions, } from "./payment-gate.js";
|
|
9
|
-
export {
|
|
11
|
+
export { genesisPaySettlement, DEFAULT_FACILITATOR_BASE_URL, type GenesisPaySettlementOptions, } from "./genesispay-settlement.js";
|
|
10
12
|
export { resolvePaymentGateNetwork, type PaymentGateNetwork, type PaymentGateNetworkConfig, } from "./networks.js";
|
|
11
13
|
export { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
|
|
12
14
|
export { createMandateGate, MANDATE_HEADER, type MandateChargeOutcome, type MandateGate, type MandateGateOptions, } from "./mandate-gate.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExF,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,oCAAoC,EACpC,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// @genesis-tech/genesispay-seller — framework-agnostic x402 payment gate.
|
|
2
|
-
export {
|
|
2
|
+
export { GenesisPay, } from "./client.js";
|
|
3
3
|
// Every SDK method throws from this set: 404 → NotFound, 422 (and 400 when the
|
|
4
4
|
// body carries structured `issues`) → Validation, 429 → RateLimit (with
|
|
5
5
|
// `retryAfterSeconds`), anything else → Config.
|
|
6
|
-
export {
|
|
7
|
-
export { constructEvent,
|
|
6
|
+
export { GenesisPayConfigError, GenesisPayNetworkSafetyError, GenesisPayNotFoundError, GenesisPayValidationError, GenesisPayRateLimitError, } from "./errors.js";
|
|
7
|
+
export { constructEvent, isKnownGenesisPayEventType, GENESISPAY_EVENT_TYPES, GenesisPaySignatureVerificationError, } from "./webhooks.js";
|
|
8
8
|
export { createPaymentGate, } from "./payment-gate.js";
|
|
9
|
-
export {
|
|
9
|
+
export { genesisPaySettlement, DEFAULT_FACILITATOR_BASE_URL, } from "./genesispay-settlement.js";
|
|
10
10
|
export { resolvePaymentGateNetwork, } from "./networks.js";
|
|
11
11
|
export { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
|
|
12
12
|
export { createMandateGate, MANDATE_HEADER, } from "./mandate-gate.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EACL,UAAU,GAaX,MAAM,aAAa,CAAC;AA0DrB,+EAA+E;AAC/E,wEAAwE;AACxE,gDAAgD;AAChD,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,oCAAoC,GAWrC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAOlB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAE7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,GAG1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EACL,iBAAiB,EACjB,cAAc,GAIf,MAAM,mBAAmB,CAAC"}
|
package/dist/invoices.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Customer } from "./customers.js";
|
|
2
|
-
import { type
|
|
2
|
+
import { type GenesisPayRequest } from "./resource.js";
|
|
3
3
|
export type InvoiceStatus = "draft" | "open" | "past_due" | "paid" | "void" | "uncollectible";
|
|
4
4
|
export type InvoiceLineInput = {
|
|
5
5
|
description: string;
|
|
@@ -75,6 +75,6 @@ export interface InvoicesResource {
|
|
|
75
75
|
void(publicId: string): Promise<Invoice>;
|
|
76
76
|
markUncollectible(publicId: string): Promise<Invoice>;
|
|
77
77
|
}
|
|
78
|
-
export declare function createInvoicesResource(request:
|
|
78
|
+
export declare function createInvoicesResource(request: GenesisPayRequest): InvoicesResource;
|
|
79
79
|
export declare function toInvoice(raw: Record<string, unknown>): Invoice;
|
|
80
80
|
//# sourceMappingURL=invoices.d.ts.map
|
package/dist/invoices.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAOL,KAAK,
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"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"}
|
package/dist/invoices.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// `
|
|
2
|
-
import {
|
|
1
|
+
// `genesispay.invoices.*` — one-off invoice lifecycle over `/api/v1/invoices`.
|
|
2
|
+
import { GenesisPayConfigError } from "./errors.js";
|
|
3
3
|
import { toCustomer } from "./customers.js";
|
|
4
4
|
import { asRecord, oneOf, optionalString, requiredString, toAmountString, toCount, } from "./resource.js";
|
|
5
5
|
export function createInvoicesResource(request) {
|
|
@@ -13,7 +13,7 @@ export function createInvoicesResource(request) {
|
|
|
13
13
|
});
|
|
14
14
|
const rows = asRecord(body)?.invoices;
|
|
15
15
|
if (!Array.isArray(rows)) {
|
|
16
|
-
throw new
|
|
16
|
+
throw new GenesisPayConfigError(`GenesisPay GET /api/v1/invoices returned no invoices array: ${JSON.stringify(body)}`);
|
|
17
17
|
}
|
|
18
18
|
return rows
|
|
19
19
|
.map(asRecord)
|
|
@@ -35,7 +35,7 @@ export function createInvoicesResource(request) {
|
|
|
35
35
|
const id = requirePublicId(publicId, "invoices.send");
|
|
36
36
|
const idempotencyKey = options?.idempotencyKey?.trim();
|
|
37
37
|
if (!idempotencyKey) {
|
|
38
|
-
throw new
|
|
38
|
+
throw new GenesisPayConfigError("invoices.send requires a non-empty idempotencyKey.");
|
|
39
39
|
}
|
|
40
40
|
const path = `/api/v1/invoices/${encodeURIComponent(id)}/send`;
|
|
41
41
|
const response = await request({
|
|
@@ -47,7 +47,7 @@ export function createInvoicesResource(request) {
|
|
|
47
47
|
});
|
|
48
48
|
const delivery = asRecord(asRecord(response)?.delivery);
|
|
49
49
|
if (!delivery?.id) {
|
|
50
|
-
throw new
|
|
50
|
+
throw new GenesisPayConfigError(`GenesisPay POST ${path} returned no delivery: ${JSON.stringify(response)}`);
|
|
51
51
|
}
|
|
52
52
|
return {
|
|
53
53
|
id: requiredString(delivery.id),
|
|
@@ -72,14 +72,14 @@ async function invoiceRequest(request, method, path, body, action) {
|
|
|
72
72
|
});
|
|
73
73
|
const raw = asRecord(asRecord(response)?.invoice);
|
|
74
74
|
if (!raw?.publicId) {
|
|
75
|
-
throw new
|
|
75
|
+
throw new GenesisPayConfigError(`GenesisPay ${method} ${path} returned no invoice: ${JSON.stringify(response)}`);
|
|
76
76
|
}
|
|
77
77
|
return toInvoice(raw);
|
|
78
78
|
}
|
|
79
79
|
function requirePublicId(publicId, method) {
|
|
80
80
|
const id = publicId?.trim();
|
|
81
81
|
if (!id) {
|
|
82
|
-
throw new
|
|
82
|
+
throw new GenesisPayConfigError(`${method}(publicId) requires the publicId returned by invoices.create().`);
|
|
83
83
|
}
|
|
84
84
|
return id;
|
|
85
85
|
}
|
package/dist/invoices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"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"}
|
package/dist/mandate-gate.d.ts
CHANGED
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
* Mandate gate — the signature-free metered path for humans and subscriptions.
|
|
3
3
|
*
|
|
4
4
|
* Instead of demanding a fresh signed payment per request (the x402 gate), the
|
|
5
|
-
* caller presents a standing payment mandate id via the `
|
|
5
|
+
* caller presents a standing payment mandate id via the `GENESISPAY-MANDATE`
|
|
6
6
|
* header. The gate debits the mandate through GenesisPay
|
|
7
7
|
* (`POST /api/v1/mandates/:id/charge`) — a non-custodial on-chain pull from
|
|
8
8
|
* the payer's wallet directly to yours — and only runs your handler once the
|
|
9
9
|
* charge settled. Combine with `createPaymentGate` to accept both per-call
|
|
10
10
|
* x402 payments and mandate-metered calls on one endpoint.
|
|
11
11
|
*/
|
|
12
|
-
export declare const MANDATE_HEADER = "
|
|
12
|
+
export declare const MANDATE_HEADER = "GENESISPAY-MANDATE";
|
|
13
13
|
export type MandateGateOptions = {
|
|
14
14
|
/** Decimal charge per request, e.g. "0.08". */
|
|
15
15
|
amount: string;
|
|
16
|
-
/** Base URL of the GenesisPay app (your
|
|
16
|
+
/** Base URL of the GenesisPay app (your GENESISPAY_BASE_URL). */
|
|
17
17
|
baseUrl: string;
|
|
18
|
-
/** GenesisPay seller API key ("
|
|
18
|
+
/** GenesisPay seller API key ("gp_sk_..."). */
|
|
19
19
|
apiKey: string;
|
|
20
20
|
/** Description attached to each charge (shows up in activity/usage). */
|
|
21
21
|
description?: string;
|
|
@@ -39,7 +39,7 @@ export type MandateGate = {
|
|
|
39
39
|
/** Charges the mandate once. Exposed for custom flows. */
|
|
40
40
|
charge: (mandateId: string, resourceUrl?: string) => Promise<MandateChargeOutcome>;
|
|
41
41
|
/**
|
|
42
|
-
* Wraps a fetch-style handler: requests carrying a valid `
|
|
42
|
+
* Wraps a fetch-style handler: requests carrying a valid `GENESISPAY-MANDATE`
|
|
43
43
|
* header are charged and passed through; requests without one get a 402
|
|
44
44
|
* JSON body explaining how to attach a mandate.
|
|
45
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mandate-gate.d.ts","sourceRoot":"","sources":["../src/mandate-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"mandate-gate.d.ts","sourceRoot":"","sources":["../src/mandate-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,cAAc,uBAAuB,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IACE,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,WAAW,GAAG;IACxB,0DAA0D;IAC1D,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnF;;;;OAIG;IACH,IAAI,EAAE,CACJ,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KACxD,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAsH1E"}
|