moltspay 0.9.5 → 0.9.7
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/README.md +68 -45
- package/dist/cdp/index.d.mts +1 -1
- package/dist/cdp/index.d.ts +1 -1
- package/dist/cdp/index.js +63 -0
- package/dist/cdp/index.js.map +1 -1
- package/dist/cdp/index.mjs +63 -0
- package/dist/cdp/index.mjs.map +1 -1
- package/dist/chains/index.d.mts +9 -5
- package/dist/chains/index.d.ts +9 -5
- package/dist/chains/index.js +85 -0
- package/dist/chains/index.js.map +1 -1
- package/dist/chains/index.mjs +83 -0
- package/dist/chains/index.mjs.map +1 -1
- package/dist/cli/index.js +201 -38
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +201 -38
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.d.mts +18 -3
- package/dist/client/index.d.ts +18 -3
- package/dist/client/index.js +112 -15
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +112 -15
- package/dist/client/index.mjs.map +1 -1
- package/dist/{index-Dg8n6wdW.d.mts → index-B3v8IWjM.d.mts} +11 -1
- package/dist/{index-Dg8n6wdW.d.ts → index-B3v8IWjM.d.ts} +11 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +203 -42
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +203 -42
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.d.mts +19 -1
- package/dist/server/index.d.ts +19 -1
- package/dist/server/index.js +71 -19
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +71 -19
- package/dist/server/index.mjs.map +1 -1
- package/dist/verify/index.d.mts +7 -0
- package/dist/verify/index.d.ts +7 -0
- package/dist/verify/index.js +83 -8
- package/dist/verify/index.js.map +1 -1
- package/dist/verify/index.mjs +83 -8
- package/dist/verify/index.mjs.map +1 -1
- package/dist/wallet/index.d.mts +16 -8
- package/dist/wallet/index.d.ts +16 -8
- package/dist/wallet/index.js +114 -18
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +114 -18
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +1 -1
- package/schemas/moltspay.services.schema.json +13 -3
package/dist/server/index.d.mts
CHANGED
|
@@ -3,12 +3,19 @@ import { d as FacilitatorSelection } from '../registry-OsEO2dOu.mjs';
|
|
|
3
3
|
/**
|
|
4
4
|
* MoltsPay Server Types
|
|
5
5
|
*/
|
|
6
|
+
type TokenSymbol = 'USDC' | 'USDT';
|
|
6
7
|
interface ServiceConfig {
|
|
7
8
|
id: string;
|
|
8
9
|
name: string;
|
|
9
10
|
description?: string;
|
|
10
11
|
price: number;
|
|
11
12
|
currency: string;
|
|
13
|
+
/**
|
|
14
|
+
* Tokens accepted for payment (optional).
|
|
15
|
+
* If not specified, defaults to [currency].
|
|
16
|
+
* Example: ["USDC", "USDT"]
|
|
17
|
+
*/
|
|
18
|
+
acceptedCurrencies?: TokenSymbol[];
|
|
12
19
|
input: Record<string, InputField>;
|
|
13
20
|
output: Record<string, OutputField>;
|
|
14
21
|
/** Shell command to execute for this service. Params passed as JSON to stdin. */
|
|
@@ -138,6 +145,7 @@ declare class MoltsPayServer {
|
|
|
138
145
|
private handleExecute;
|
|
139
146
|
/**
|
|
140
147
|
* Return 402 with x402 payment requirements (v2 format)
|
|
148
|
+
* Includes requirements for all accepted currencies
|
|
141
149
|
*/
|
|
142
150
|
private sendPaymentRequired;
|
|
143
151
|
/**
|
|
@@ -146,8 +154,18 @@ declare class MoltsPayServer {
|
|
|
146
154
|
private validatePayment;
|
|
147
155
|
/**
|
|
148
156
|
* Build payment requirements for facilitator
|
|
157
|
+
* Returns requirements for the primary currency (USDC by default)
|
|
158
|
+
* Server accepts any of the acceptedCurrencies
|
|
149
159
|
*/
|
|
150
160
|
private buildPaymentRequirements;
|
|
161
|
+
/**
|
|
162
|
+
* Detect which token is being used in the payment
|
|
163
|
+
*/
|
|
164
|
+
private detectPaymentToken;
|
|
165
|
+
/**
|
|
166
|
+
* Check if payment token is accepted for service
|
|
167
|
+
*/
|
|
168
|
+
private isTokenAccepted;
|
|
151
169
|
private readBody;
|
|
152
170
|
private sendJson;
|
|
153
171
|
/**
|
|
@@ -177,4 +195,4 @@ declare class MoltsPayServer {
|
|
|
177
195
|
private sendProxyPaymentRequired;
|
|
178
196
|
}
|
|
179
197
|
|
|
180
|
-
export { type Charge, type ChargeStatus, type InputField, MoltsPayServer, type MoltsPayServerOptions, type MoltsPayServerOptionsExtended, type OutputField, type PaymentRequest, type ProviderConfig, type RegisteredSkill, type ServiceConfig, type ServicesManifest, type SkillFunction, type VerifyRequest };
|
|
198
|
+
export { type Charge, type ChargeStatus, type InputField, MoltsPayServer, type MoltsPayServerOptions, type MoltsPayServerOptionsExtended, type OutputField, type PaymentRequest, type ProviderConfig, type RegisteredSkill, type ServiceConfig, type ServicesManifest, type SkillFunction, type TokenSymbol, type VerifyRequest };
|
package/dist/server/index.d.ts
CHANGED
|
@@ -3,12 +3,19 @@ import { d as FacilitatorSelection } from '../registry-OsEO2dOu.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* MoltsPay Server Types
|
|
5
5
|
*/
|
|
6
|
+
type TokenSymbol = 'USDC' | 'USDT';
|
|
6
7
|
interface ServiceConfig {
|
|
7
8
|
id: string;
|
|
8
9
|
name: string;
|
|
9
10
|
description?: string;
|
|
10
11
|
price: number;
|
|
11
12
|
currency: string;
|
|
13
|
+
/**
|
|
14
|
+
* Tokens accepted for payment (optional).
|
|
15
|
+
* If not specified, defaults to [currency].
|
|
16
|
+
* Example: ["USDC", "USDT"]
|
|
17
|
+
*/
|
|
18
|
+
acceptedCurrencies?: TokenSymbol[];
|
|
12
19
|
input: Record<string, InputField>;
|
|
13
20
|
output: Record<string, OutputField>;
|
|
14
21
|
/** Shell command to execute for this service. Params passed as JSON to stdin. */
|
|
@@ -138,6 +145,7 @@ declare class MoltsPayServer {
|
|
|
138
145
|
private handleExecute;
|
|
139
146
|
/**
|
|
140
147
|
* Return 402 with x402 payment requirements (v2 format)
|
|
148
|
+
* Includes requirements for all accepted currencies
|
|
141
149
|
*/
|
|
142
150
|
private sendPaymentRequired;
|
|
143
151
|
/**
|
|
@@ -146,8 +154,18 @@ declare class MoltsPayServer {
|
|
|
146
154
|
private validatePayment;
|
|
147
155
|
/**
|
|
148
156
|
* Build payment requirements for facilitator
|
|
157
|
+
* Returns requirements for the primary currency (USDC by default)
|
|
158
|
+
* Server accepts any of the acceptedCurrencies
|
|
149
159
|
*/
|
|
150
160
|
private buildPaymentRequirements;
|
|
161
|
+
/**
|
|
162
|
+
* Detect which token is being used in the payment
|
|
163
|
+
*/
|
|
164
|
+
private detectPaymentToken;
|
|
165
|
+
/**
|
|
166
|
+
* Check if payment token is accepted for service
|
|
167
|
+
*/
|
|
168
|
+
private isTokenAccepted;
|
|
151
169
|
private readBody;
|
|
152
170
|
private sendJson;
|
|
153
171
|
/**
|
|
@@ -177,4 +195,4 @@ declare class MoltsPayServer {
|
|
|
177
195
|
private sendProxyPaymentRequired;
|
|
178
196
|
}
|
|
179
197
|
|
|
180
|
-
export { type Charge, type ChargeStatus, type InputField, MoltsPayServer, type MoltsPayServerOptions, type MoltsPayServerOptionsExtended, type OutputField, type PaymentRequest, type ProviderConfig, type RegisteredSkill, type ServiceConfig, type ServicesManifest, type SkillFunction, type VerifyRequest };
|
|
198
|
+
export { type Charge, type ChargeStatus, type InputField, MoltsPayServer, type MoltsPayServerOptions, type MoltsPayServerOptionsExtended, type OutputField, type PaymentRequest, type ProviderConfig, type RegisteredSkill, type ServiceConfig, type ServicesManifest, type SkillFunction, type TokenSymbol, type VerifyRequest };
|
package/dist/server/index.js
CHANGED
|
@@ -486,16 +486,24 @@ var X402_VERSION2 = 2;
|
|
|
486
486
|
var PAYMENT_REQUIRED_HEADER = "x-payment-required";
|
|
487
487
|
var PAYMENT_HEADER = "x-payment";
|
|
488
488
|
var PAYMENT_RESPONSE_HEADER = "x-payment-response";
|
|
489
|
-
var
|
|
490
|
-
"eip155:8453":
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
489
|
+
var TOKEN_ADDRESSES = {
|
|
490
|
+
"eip155:8453": {
|
|
491
|
+
USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
492
|
+
USDT: "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2"
|
|
493
|
+
},
|
|
494
|
+
"eip155:84532": {
|
|
495
|
+
USDC: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
|
|
496
|
+
USDT: "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
|
|
497
|
+
// Same as USDC on testnet
|
|
498
|
+
}
|
|
494
499
|
};
|
|
495
|
-
var
|
|
496
|
-
name: "USD Coin",
|
|
497
|
-
version: "2"
|
|
500
|
+
var TOKEN_DOMAINS = {
|
|
501
|
+
USDC: { name: "USD Coin", version: "2" },
|
|
502
|
+
USDT: { name: "Tether USD", version: "2" }
|
|
498
503
|
};
|
|
504
|
+
function getAcceptedCurrencies(config) {
|
|
505
|
+
return config.acceptedCurrencies ?? [config.currency];
|
|
506
|
+
}
|
|
499
507
|
function loadEnvFile2() {
|
|
500
508
|
const envPaths = [
|
|
501
509
|
path2.join(process.cwd(), ".env"),
|
|
@@ -643,6 +651,7 @@ var MoltsPayServer = class {
|
|
|
643
651
|
description: s.description,
|
|
644
652
|
price: s.price,
|
|
645
653
|
currency: s.currency,
|
|
654
|
+
acceptedCurrencies: getAcceptedCurrencies(s),
|
|
646
655
|
input: s.input,
|
|
647
656
|
output: s.output,
|
|
648
657
|
available: this.skills.has(s.id)
|
|
@@ -680,6 +689,7 @@ var MoltsPayServer = class {
|
|
|
680
689
|
description: s.description,
|
|
681
690
|
price: s.price,
|
|
682
691
|
currency: s.currency,
|
|
692
|
+
acceptedCurrencies: getAcceptedCurrencies(s),
|
|
683
693
|
input: s.input,
|
|
684
694
|
output: s.output,
|
|
685
695
|
available: this.skills.has(s.id)
|
|
@@ -746,7 +756,14 @@ var MoltsPayServer = class {
|
|
|
746
756
|
if (!validation.valid) {
|
|
747
757
|
return this.sendJson(res, 402, { error: validation.error });
|
|
748
758
|
}
|
|
749
|
-
const
|
|
759
|
+
const paymentToken = this.detectPaymentToken(payment);
|
|
760
|
+
if (paymentToken && !this.isTokenAccepted(skill.config, paymentToken)) {
|
|
761
|
+
const accepted = getAcceptedCurrencies(skill.config);
|
|
762
|
+
return this.sendJson(res, 402, {
|
|
763
|
+
error: `Token ${paymentToken} not accepted. Accepted: ${accepted.join(", ")}`
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
const requirements = this.buildPaymentRequirements(skill.config, paymentToken);
|
|
750
767
|
console.log(`[MoltsPay] Verifying payment...`);
|
|
751
768
|
const verifyResult = await this.registry.verify(payment, requirements);
|
|
752
769
|
if (!verifyResult.valid) {
|
|
@@ -801,12 +818,15 @@ var MoltsPayServer = class {
|
|
|
801
818
|
}
|
|
802
819
|
/**
|
|
803
820
|
* Return 402 with x402 payment requirements (v2 format)
|
|
821
|
+
* Includes requirements for all accepted currencies
|
|
804
822
|
*/
|
|
805
823
|
sendPaymentRequired(config, res) {
|
|
806
|
-
const
|
|
824
|
+
const acceptedTokens = getAcceptedCurrencies(config);
|
|
825
|
+
const accepts = acceptedTokens.map((token) => this.buildPaymentRequirements(config, token));
|
|
807
826
|
const paymentRequired = {
|
|
808
827
|
x402Version: X402_VERSION2,
|
|
809
|
-
accepts
|
|
828
|
+
accepts,
|
|
829
|
+
acceptedCurrencies: acceptedTokens,
|
|
810
830
|
resource: {
|
|
811
831
|
url: `/execute?service=${config.id}`,
|
|
812
832
|
description: `${config.name} - $${config.price} ${config.currency}`,
|
|
@@ -821,6 +841,7 @@ var MoltsPayServer = class {
|
|
|
821
841
|
res.end(JSON.stringify({
|
|
822
842
|
error: "Payment required",
|
|
823
843
|
message: `Service requires $${config.price} ${config.currency}`,
|
|
844
|
+
acceptedCurrencies: acceptedTokens,
|
|
824
845
|
x402: paymentRequired
|
|
825
846
|
}, null, 2));
|
|
826
847
|
}
|
|
@@ -843,20 +864,47 @@ var MoltsPayServer = class {
|
|
|
843
864
|
}
|
|
844
865
|
/**
|
|
845
866
|
* Build payment requirements for facilitator
|
|
867
|
+
* Returns requirements for the primary currency (USDC by default)
|
|
868
|
+
* Server accepts any of the acceptedCurrencies
|
|
846
869
|
*/
|
|
847
|
-
buildPaymentRequirements(config) {
|
|
870
|
+
buildPaymentRequirements(config, token) {
|
|
848
871
|
const amountInUnits = Math.floor(config.price * 1e6).toString();
|
|
849
|
-
const
|
|
872
|
+
const acceptedTokens = getAcceptedCurrencies(config);
|
|
873
|
+
const selectedToken = token && acceptedTokens.includes(token) ? token : acceptedTokens[0];
|
|
874
|
+
const tokenAddresses = TOKEN_ADDRESSES[this.networkId] || {};
|
|
875
|
+
const tokenAddress = tokenAddresses[selectedToken];
|
|
876
|
+
const tokenDomain = TOKEN_DOMAINS[selectedToken] || TOKEN_DOMAINS.USDC;
|
|
850
877
|
return {
|
|
851
878
|
scheme: "exact",
|
|
852
879
|
network: this.networkId,
|
|
853
|
-
asset:
|
|
880
|
+
asset: tokenAddress,
|
|
854
881
|
amount: amountInUnits,
|
|
855
882
|
payTo: this.manifest.provider.wallet,
|
|
856
883
|
maxTimeoutSeconds: 300,
|
|
857
|
-
extra:
|
|
884
|
+
extra: tokenDomain
|
|
858
885
|
};
|
|
859
886
|
}
|
|
887
|
+
/**
|
|
888
|
+
* Detect which token is being used in the payment
|
|
889
|
+
*/
|
|
890
|
+
detectPaymentToken(payment) {
|
|
891
|
+
const asset = payment.accepted?.asset || payment.payload?.asset;
|
|
892
|
+
if (!asset) return void 0;
|
|
893
|
+
const tokenAddresses = TOKEN_ADDRESSES[this.networkId] || {};
|
|
894
|
+
for (const [symbol, address] of Object.entries(tokenAddresses)) {
|
|
895
|
+
if (address.toLowerCase() === asset.toLowerCase()) {
|
|
896
|
+
return symbol;
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
return void 0;
|
|
900
|
+
}
|
|
901
|
+
/**
|
|
902
|
+
* Check if payment token is accepted for service
|
|
903
|
+
*/
|
|
904
|
+
isTokenAccepted(config, token) {
|
|
905
|
+
const accepted = getAcceptedCurrencies(config);
|
|
906
|
+
return accepted.includes(token);
|
|
907
|
+
}
|
|
860
908
|
async readBody(req) {
|
|
861
909
|
return new Promise((resolve, reject) => {
|
|
862
910
|
let body = "";
|
|
@@ -1056,18 +1104,22 @@ var MoltsPayServer = class {
|
|
|
1056
1104
|
/**
|
|
1057
1105
|
* Build payment requirements for proxy endpoint (uses provided wallet)
|
|
1058
1106
|
*/
|
|
1059
|
-
buildProxyPaymentRequirements(config, wallet) {
|
|
1107
|
+
buildProxyPaymentRequirements(config, wallet, token) {
|
|
1060
1108
|
const amountInUnits = Math.floor(config.price * 1e6).toString();
|
|
1061
|
-
const
|
|
1109
|
+
const acceptedTokens = getAcceptedCurrencies(config);
|
|
1110
|
+
const selectedToken = token && acceptedTokens.includes(token) ? token : acceptedTokens[0];
|
|
1111
|
+
const tokenAddresses = TOKEN_ADDRESSES[this.networkId] || {};
|
|
1112
|
+
const tokenAddress = tokenAddresses[selectedToken];
|
|
1113
|
+
const tokenDomain = TOKEN_DOMAINS[selectedToken] || TOKEN_DOMAINS.USDC;
|
|
1062
1114
|
return {
|
|
1063
1115
|
scheme: "exact",
|
|
1064
1116
|
network: this.networkId,
|
|
1065
|
-
asset:
|
|
1117
|
+
asset: tokenAddress,
|
|
1066
1118
|
amount: amountInUnits,
|
|
1067
1119
|
payTo: wallet,
|
|
1068
1120
|
// Use provided wallet, not manifest
|
|
1069
1121
|
maxTimeoutSeconds: 300,
|
|
1070
|
-
extra:
|
|
1122
|
+
extra: tokenDomain
|
|
1071
1123
|
};
|
|
1072
1124
|
}
|
|
1073
1125
|
/**
|