stables-mcp-server 1.0.0 → 1.1.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/build/lib/stables-client.d.ts +151 -100
- package/build/lib/stables-client.d.ts.map +1 -1
- package/build/lib/stables-client.js +70 -19
- package/build/lib/stables-client.js.map +1 -1
- package/build/tools/api-keys.d.ts.map +1 -1
- package/build/tools/api-keys.js +6 -7
- package/build/tools/api-keys.js.map +1 -1
- package/build/tools/customers.d.ts +1 -1
- package/build/tools/customers.d.ts.map +1 -1
- package/build/tools/customers.js +106 -23
- package/build/tools/customers.js.map +1 -1
- package/build/tools/quotes.d.ts +1 -2
- package/build/tools/quotes.d.ts.map +1 -1
- package/build/tools/quotes.js +25 -13
- package/build/tools/quotes.js.map +1 -1
- package/build/tools/transfers.d.ts +1 -2
- package/build/tools/transfers.d.ts.map +1 -1
- package/build/tools/transfers.js +15 -10
- package/build/tools/transfers.js.map +1 -1
- package/build/tools/virtual-accounts.d.ts +1 -0
- package/build/tools/virtual-accounts.d.ts.map +1 -1
- package/build/tools/virtual-accounts.js +163 -13
- package/build/tools/virtual-accounts.js.map +1 -1
- package/build/tools/webhooks.d.ts +1 -2
- package/build/tools/webhooks.d.ts.map +1 -1
- package/build/tools/webhooks.js +15 -8
- package/build/tools/webhooks.js.map +1 -1
- package/package.json +1 -1
package/build/tools/api-keys.js
CHANGED
|
@@ -60,9 +60,8 @@ IMPORTANT: Save the secret key now! It will not be shown again.`,
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
const keyList = response.apiKeys.map((k) => {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
return `- ${id}: "${k.name}" (${k.prefix}...) - ${status} - Created: ${k.createdAt}`;
|
|
63
|
+
const status = k.active ? "Active" : "Revoked";
|
|
64
|
+
return `- ${k.apiKeyId}: "${k.name}" (${k.prefix}...) - ${status} - Created: ${k.createdAt}`;
|
|
66
65
|
}).join("\n");
|
|
67
66
|
return {
|
|
68
67
|
content: [
|
|
@@ -92,18 +91,18 @@ ${keyList}`,
|
|
|
92
91
|
apiKeyId: z.string().describe("The API key ID to look up"),
|
|
93
92
|
}, async ({ apiKeyId }) => {
|
|
94
93
|
try {
|
|
95
|
-
const
|
|
96
|
-
const
|
|
94
|
+
const response = await client.getApiKey(apiKeyId);
|
|
95
|
+
const key = response.apiKey;
|
|
97
96
|
return {
|
|
98
97
|
content: [
|
|
99
98
|
{
|
|
100
99
|
type: "text",
|
|
101
100
|
text: `API Key Details:
|
|
102
101
|
|
|
103
|
-
Key ID: ${
|
|
102
|
+
Key ID: ${key.apiKeyId}
|
|
104
103
|
Name: ${key.name}
|
|
105
104
|
Prefix: ${key.prefix}
|
|
106
|
-
Active: ${key.active
|
|
105
|
+
Active: ${key.active ? "Yes" : "No"}
|
|
107
106
|
Created: ${key.createdAt}
|
|
108
107
|
${key.updatedAt ? `Updated: ${key.updatedAt}` : ""}
|
|
109
108
|
${key.lastUsedAt ? `Last Used: ${key.lastUsedAt}` : "Never used"}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/tools/api-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAwB;IAC7E,iBAAiB;IACjB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0HAA0H,EAC1H;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;QACxG,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAC7F,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YAE1B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;UAEV,GAAG,CAAC,QAAQ;QACd,GAAG,CAAC,IAAI;UACN,GAAG,CAAC,MAAM;UACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;WACxB,GAAG,CAAC,SAAS;;cAEV,MAAM,CAAC,YAAY;;gEAE+B;qBACnD;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;qBAC9F;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2CAA2C,EAC3C;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAEnE,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,wDAAwD;yBAC/D;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzC,MAAM,
|
|
1
|
+
{"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/tools/api-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Customer Management Tools for Stables MCP Server
|
|
3
|
-
*
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
4
4
|
*/
|
|
5
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
6
|
import { StablesApiClient } from "../lib/stables-client.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QAoUhF"}
|
package/build/tools/customers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Customer Management Tools for Stables MCP Server
|
|
3
|
-
*
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
4
4
|
*/
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
export function registerCustomerTools(server, client) {
|
|
@@ -11,19 +11,19 @@ export function registerCustomerTools(server, client) {
|
|
|
11
11
|
firstName: z.string().optional().describe("First name (required for individuals)"),
|
|
12
12
|
lastName: z.string().optional().describe("Last name (required for individuals)"),
|
|
13
13
|
middleName: z.string().optional().describe("Middle name"),
|
|
14
|
-
|
|
14
|
+
companyName: z.string().optional().describe("Company name (required for businesses)"),
|
|
15
15
|
externalCustomerId: z.string().optional().describe("Your own reference ID for this customer"),
|
|
16
16
|
phone: z.string().optional().describe("Phone number with country code (e.g., '+14155552671')"),
|
|
17
17
|
dob: z.string().optional().describe("Date of birth in YYYY-MM-DD format (e.g., '1990-01-15')"),
|
|
18
18
|
nationality: z.string().optional().describe("Two-letter country code (e.g., 'US', 'GB')"),
|
|
19
|
-
entitlements: z.array(z.string()).optional().describe("List of entitlements to request (e.g., ['base_payout'])"),
|
|
19
|
+
entitlements: z.array(z.string()).optional().describe("List of entitlements to request (e.g., ['base_payout', 'virtual_account'])"),
|
|
20
20
|
addressLine1: z.string().optional().describe("Street address line 1"),
|
|
21
21
|
addressLine2: z.string().optional().describe("Street address line 2"),
|
|
22
22
|
addressCity: z.string().optional().describe("City"),
|
|
23
23
|
addressState: z.string().optional().describe("State or region"),
|
|
24
24
|
addressPostalCode: z.string().optional().describe("Postal/ZIP code"),
|
|
25
25
|
addressCountry: z.string().optional().describe("Two-letter country code (e.g., 'US')"),
|
|
26
|
-
}, async ({ email, customerType, firstName, lastName, middleName,
|
|
26
|
+
}, async ({ email, customerType, firstName, lastName, middleName, companyName, externalCustomerId, phone, dob, nationality, entitlements, addressLine1, addressLine2, addressCity, addressState, addressPostalCode, addressCountry }) => {
|
|
27
27
|
try {
|
|
28
28
|
const address = addressLine1 ? {
|
|
29
29
|
line1: addressLine1,
|
|
@@ -41,7 +41,7 @@ export function registerCustomerTools(server, client) {
|
|
|
41
41
|
firstName,
|
|
42
42
|
lastName,
|
|
43
43
|
middleName,
|
|
44
|
-
|
|
44
|
+
companyName,
|
|
45
45
|
externalCustomerId: externalCustomerId || crypto.randomUUID(),
|
|
46
46
|
phone,
|
|
47
47
|
dob,
|
|
@@ -50,6 +50,7 @@ export function registerCustomerTools(server, client) {
|
|
|
50
50
|
address,
|
|
51
51
|
});
|
|
52
52
|
const verificationStatus = customer.verificationLevels?.[0]?.status || "NOT_STARTED";
|
|
53
|
+
const entitlementsList = customer.entitlements?.map(e => `${e.name}: ${e.status}`).join(", ") || "None";
|
|
53
54
|
return {
|
|
54
55
|
content: [
|
|
55
56
|
{
|
|
@@ -60,10 +61,10 @@ Customer ID: ${customer.customerId}
|
|
|
60
61
|
Email: ${customer.email}
|
|
61
62
|
Type: ${customerType}
|
|
62
63
|
${firstName ? `Name: ${firstName}${middleName ? ` ${middleName}` : ""} ${lastName || ""}` : ""}
|
|
63
|
-
${
|
|
64
|
+
${companyName ? `Company: ${companyName}` : ""}
|
|
64
65
|
${phone ? `Phone: ${phone}` : ""}
|
|
65
66
|
${nationality ? `Nationality: ${nationality}` : ""}
|
|
66
|
-
|
|
67
|
+
Entitlements: ${entitlementsList}
|
|
67
68
|
Verification Status: ${verificationStatus}
|
|
68
69
|
Created: ${customer.createdAt}
|
|
69
70
|
|
|
@@ -92,6 +93,7 @@ Next step: Use 'get_verification_link' to get a KYC verification link for this c
|
|
|
92
93
|
const customer = await client.getCustomer(customerId);
|
|
93
94
|
const verificationStatus = customer.verificationLevels?.[0]?.status || "NOT_STARTED";
|
|
94
95
|
const isVerified = verificationStatus === "VERIFICATION_APPROVED";
|
|
96
|
+
const entitlementsList = customer.entitlements?.map(e => `${e.name}: ${e.status}`).join(", ") || "None";
|
|
95
97
|
return {
|
|
96
98
|
content: [
|
|
97
99
|
{
|
|
@@ -101,11 +103,10 @@ Next step: Use 'get_verification_link' to get a KYC verification link for this c
|
|
|
101
103
|
Customer ID: ${customer.customerId}
|
|
102
104
|
Email: ${customer.email || "Not set"}
|
|
103
105
|
Type: ${customer.customerType}
|
|
104
|
-
${customer.firstName ? `Name: ${customer.firstName}
|
|
105
|
-
${customer.
|
|
106
|
+
${customer.firstName ? `Name: ${customer.firstName} ${customer.lastName || ""}` : ""}
|
|
107
|
+
${customer.companyName ? `Company: ${customer.companyName}` : ""}
|
|
106
108
|
${customer.phone ? `Phone: ${customer.phone}` : ""}
|
|
107
|
-
|
|
108
|
-
${customer.dob ? `Date of Birth: ${customer.dob}` : ""}
|
|
109
|
+
Entitlements: ${entitlementsList}
|
|
109
110
|
Verification Status: ${verificationStatus}
|
|
110
111
|
Can Transfer: ${isVerified ? "Yes" : "No - needs KYC verification"}
|
|
111
112
|
Created: ${customer.createdAt}
|
|
@@ -127,12 +128,9 @@ Updated: ${customer.updatedAt}`,
|
|
|
127
128
|
}
|
|
128
129
|
});
|
|
129
130
|
// List Customers
|
|
130
|
-
server.tool("list_customers", "List all customers
|
|
131
|
-
pageSize: z.number().optional().describe("Number of customers per page (default: 20)"),
|
|
132
|
-
pageToken: z.string().optional().describe("Token for the next page of results"),
|
|
133
|
-
}, async ({ pageSize, pageToken }) => {
|
|
131
|
+
server.tool("list_customers", "List all customers for the authenticated tenant", {}, async () => {
|
|
134
132
|
try {
|
|
135
|
-
const response = await client.listCustomers(
|
|
133
|
+
const response = await client.listCustomers();
|
|
136
134
|
if (response.customers.length === 0) {
|
|
137
135
|
return {
|
|
138
136
|
content: [
|
|
@@ -151,10 +149,9 @@ Updated: ${customer.updatedAt}`,
|
|
|
151
149
|
content: [
|
|
152
150
|
{
|
|
153
151
|
type: "text",
|
|
154
|
-
text: `Customers (${response.customers.length}
|
|
152
|
+
text: `Customers (${response.customers.length}):
|
|
155
153
|
|
|
156
|
-
${customerList}
|
|
157
|
-
${response.page.nextPageToken ? `\nMore results available. Use pageToken: "${response.page.nextPageToken}"` : ""}`,
|
|
154
|
+
${customerList}`,
|
|
158
155
|
},
|
|
159
156
|
],
|
|
160
157
|
};
|
|
@@ -174,12 +171,20 @@ ${response.page.nextPageToken ? `\nMore results available. Use pageToken: "${res
|
|
|
174
171
|
// Get Verification Link
|
|
175
172
|
server.tool("get_verification_link", "Generate a KYC verification link for a customer. The customer must complete verification before they can make transfers.", {
|
|
176
173
|
customerId: z.string().describe("The customer ID to generate verification link for"),
|
|
177
|
-
|
|
178
|
-
|
|
174
|
+
ttlInSecs: z.number().optional().describe("Time-to-live for the KYC link in seconds (default: 1800)"),
|
|
175
|
+
successUrl: z.string().optional().describe("URL to redirect to after successful verification"),
|
|
176
|
+
rejectUrl: z.string().optional().describe("URL to redirect to after rejected verification"),
|
|
177
|
+
}, async ({ customerId, ttlInSecs, successUrl, rejectUrl }) => {
|
|
179
178
|
try {
|
|
179
|
+
const redirect = (successUrl || rejectUrl) ? {
|
|
180
|
+
successUrl,
|
|
181
|
+
rejectUrl,
|
|
182
|
+
} : undefined;
|
|
180
183
|
const result = await client.generateVerificationLink(customerId, {
|
|
181
|
-
|
|
184
|
+
ttlInSecs,
|
|
185
|
+
redirect,
|
|
182
186
|
});
|
|
187
|
+
const ttlDisplay = ttlInSecs ? `${Math.floor(ttlInSecs / 60)} minutes` : "30 minutes (default)";
|
|
183
188
|
return {
|
|
184
189
|
content: [
|
|
185
190
|
{
|
|
@@ -189,7 +194,8 @@ ${response.page.nextPageToken ? `\nMore results available. Use pageToken: "${res
|
|
|
189
194
|
Customer ID: ${result.customerId}
|
|
190
195
|
Verification Link: ${result.kycLink}
|
|
191
196
|
|
|
192
|
-
|
|
197
|
+
The link will expire in ${ttlDisplay}.
|
|
198
|
+
Share this link with the customer to complete their identity verification.`,
|
|
193
199
|
},
|
|
194
200
|
],
|
|
195
201
|
};
|
|
@@ -206,5 +212,82 @@ Share this link with the customer to complete their identity verification. The l
|
|
|
206
212
|
};
|
|
207
213
|
}
|
|
208
214
|
});
|
|
215
|
+
// Update Customer
|
|
216
|
+
server.tool("update_customer", "Update customer details, entitlements, or verification information", {
|
|
217
|
+
customerId: z.string().describe("The customer ID to update"),
|
|
218
|
+
email: z.string().optional().describe("Updated email address"),
|
|
219
|
+
phone: z.string().optional().describe("Updated phone number"),
|
|
220
|
+
firstName: z.string().optional().describe("Updated first name"),
|
|
221
|
+
lastName: z.string().optional().describe("Updated last name"),
|
|
222
|
+
entitlements: z.array(z.string()).optional().describe("Updated entitlements (e.g., ['base_payout', 'virtual_account'])"),
|
|
223
|
+
}, async ({ customerId, email, phone, firstName, lastName, entitlements }) => {
|
|
224
|
+
try {
|
|
225
|
+
const updates = {};
|
|
226
|
+
if (email)
|
|
227
|
+
updates.email = email;
|
|
228
|
+
if (phone)
|
|
229
|
+
updates.phone = phone;
|
|
230
|
+
if (firstName)
|
|
231
|
+
updates.firstName = firstName;
|
|
232
|
+
if (lastName)
|
|
233
|
+
updates.lastName = lastName;
|
|
234
|
+
if (entitlements)
|
|
235
|
+
updates.entitlements = entitlements;
|
|
236
|
+
const customer = await client.updateCustomer(customerId, updates);
|
|
237
|
+
return {
|
|
238
|
+
content: [
|
|
239
|
+
{
|
|
240
|
+
type: "text",
|
|
241
|
+
text: `Customer ${customer.customerId} updated successfully.
|
|
242
|
+
|
|
243
|
+
Email: ${customer.email}
|
|
244
|
+
${customer.firstName ? `Name: ${customer.firstName} ${customer.lastName || ""}` : ""}
|
|
245
|
+
Updated: ${customer.updatedAt}`,
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
return {
|
|
252
|
+
content: [
|
|
253
|
+
{
|
|
254
|
+
type: "text",
|
|
255
|
+
text: `Failed to update customer: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
isError: true,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
// Update Metadata
|
|
263
|
+
server.tool("update_customer_metadata", "Update customer metadata key-value pairs", {
|
|
264
|
+
customerId: z.string().describe("The customer ID to update metadata for"),
|
|
265
|
+
metadata: z.record(z.string()).describe("Metadata key-value pairs to set"),
|
|
266
|
+
}, async ({ customerId, metadata }) => {
|
|
267
|
+
try {
|
|
268
|
+
await client.updateMetadata(customerId, metadata);
|
|
269
|
+
return {
|
|
270
|
+
content: [
|
|
271
|
+
{
|
|
272
|
+
type: "text",
|
|
273
|
+
text: `Metadata updated for customer ${customerId}.
|
|
274
|
+
|
|
275
|
+
Keys set: ${Object.keys(metadata).join(", ")}`,
|
|
276
|
+
},
|
|
277
|
+
],
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
return {
|
|
282
|
+
content: [
|
|
283
|
+
{
|
|
284
|
+
type: "text",
|
|
285
|
+
text: `Failed to update metadata: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
isError: true,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
});
|
|
209
292
|
}
|
|
210
293
|
//# sourceMappingURL=customers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAwB;IAC/E,kBAAkB;IAClB,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,iNAAiN,EACjN;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC9D,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,wEAAwE,CAAC;QACnI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAClF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAChF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QACzD,
|
|
1
|
+
{"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"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"}
|
package/build/tools/quotes.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Quote Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Supports paymentMethodType (SWIFT, LOCAL) for fiat payouts
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
6
|
import { StablesApiClient } from "../lib/stables-client.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../../src/tools/quotes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../../src/tools/quotes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QA2I7E"}
|
package/build/tools/quotes.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Quote Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Supports paymentMethodType (SWIFT, LOCAL) for fiat payouts
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
export function registerQuoteTools(server, client) {
|
|
8
7
|
// Create Quote
|
|
9
8
|
server.tool("create_quote", "Get a quote for currency exchange. Quotes show the exchange rate, fees, and amount the customer will receive. Quotes expire after 30 seconds. Currently supports crypto → fiat (off-ramp) with more types coming soon.", {
|
|
10
|
-
|
|
11
|
-
fromCurrency: z.string().describe("Source currency code (e.g., 'USDC', 'USDT', 'USD', 'EUR')"),
|
|
9
|
+
fromCurrency: z.enum(["USDC", "USDT"]).describe("Source cryptocurrency (USDC or USDT)"),
|
|
12
10
|
fromAmount: z.string().describe("Amount to convert (e.g., '125.75')"),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
paymentMethodType: z.enum(["SWIFT", "LOCAL"]).
|
|
17
|
-
}, async ({
|
|
11
|
+
fromNetwork: z.enum(["ethereum", "polygon", "polygon-amoy"]).describe("Blockchain network for the source crypto"),
|
|
12
|
+
toCurrency: z.string().describe("Destination currency code (e.g., 'EUR', 'USD', 'GBP')"),
|
|
13
|
+
toCountry: z.string().describe("Destination country code (e.g., 'GR', 'US', 'GB')"),
|
|
14
|
+
paymentMethodType: z.enum(["SWIFT", "LOCAL"]).describe("Payment method for fiat payouts - 'SWIFT' for international, 'LOCAL' for domestic rails"),
|
|
15
|
+
}, async ({ fromCurrency, fromAmount, fromNetwork, toCurrency, toCountry, paymentMethodType }) => {
|
|
18
16
|
try {
|
|
19
17
|
const response = await client.createQuote({
|
|
20
|
-
customerId,
|
|
21
18
|
from: {
|
|
22
19
|
currency: fromCurrency,
|
|
23
20
|
amount: fromAmount,
|
|
@@ -31,6 +28,17 @@ export function registerQuoteTools(server, client) {
|
|
|
31
28
|
});
|
|
32
29
|
const quote = response.quote;
|
|
33
30
|
const expiresIn = Math.max(0, Math.floor((new Date(quote.expiresAt).getTime() - Date.now()) / 1000));
|
|
31
|
+
let feeDetails = `Total Fees: ${quote.fees.totalFee.amount} ${quote.fees.totalFee.currency}`;
|
|
32
|
+
if (quote.fees.fxFee)
|
|
33
|
+
feeDetails += `\n FX Fee: ${quote.fees.fxFee.amount} ${quote.fees.fxFee.currency}`;
|
|
34
|
+
if (quote.fees.platformFee)
|
|
35
|
+
feeDetails += `\n Platform Fee: ${quote.fees.platformFee.amount} ${quote.fees.platformFee.currency}`;
|
|
36
|
+
if (quote.fees.paymentMethodFee)
|
|
37
|
+
feeDetails += `\n Payment Method Fee: ${quote.fees.paymentMethodFee.amount} ${quote.fees.paymentMethodFee.currency}`;
|
|
38
|
+
if (quote.fees.networkFee)
|
|
39
|
+
feeDetails += `\n Network Fee: ${quote.fees.networkFee.amount} ${quote.fees.networkFee.currency}`;
|
|
40
|
+
if (quote.fees.integratorFee)
|
|
41
|
+
feeDetails += `\n Integrator Fee: ${quote.fees.integratorFee.amount} ${quote.fees.integratorFee.currency}`;
|
|
34
42
|
return {
|
|
35
43
|
content: [
|
|
36
44
|
{
|
|
@@ -42,10 +50,10 @@ Status: ${quote.status}
|
|
|
42
50
|
|
|
43
51
|
Converting:
|
|
44
52
|
From: ${quote.from.amount} ${quote.from.currency}${quote.from.network ? ` (${quote.from.network})` : ""}
|
|
45
|
-
To: ${quote.to.amount} ${quote.to.currency}
|
|
53
|
+
To: ${quote.to.amount} ${quote.to.currency} via ${quote.to.paymentMethodType}
|
|
46
54
|
|
|
47
55
|
Exchange Rate: ${quote.exchangeRate}
|
|
48
|
-
|
|
56
|
+
${feeDetails}
|
|
49
57
|
|
|
50
58
|
Expires in: ${expiresIn} seconds
|
|
51
59
|
Expires at: ${quote.expiresAt}
|
|
@@ -76,10 +84,14 @@ To execute this quote, use 'create_transfer' with this quoteId and include bank
|
|
|
76
84
|
const quote = response.quote;
|
|
77
85
|
const isExpired = quote.status === "QUOTE_STATUS_EXPIRED" || new Date(quote.expiresAt) < new Date();
|
|
78
86
|
const isUsed = quote.status === "QUOTE_STATUS_USED";
|
|
87
|
+
const isCancelled = quote.status === "QUOTE_STATUS_CANCELLED";
|
|
79
88
|
let statusMessage = "";
|
|
80
89
|
if (isUsed) {
|
|
81
90
|
statusMessage = "This quote has already been used to create a transfer.";
|
|
82
91
|
}
|
|
92
|
+
else if (isCancelled) {
|
|
93
|
+
statusMessage = "This quote has been cancelled.";
|
|
94
|
+
}
|
|
83
95
|
else if (isExpired) {
|
|
84
96
|
statusMessage = "This quote has expired. Create a new quote to proceed.";
|
|
85
97
|
}
|
|
@@ -98,7 +110,7 @@ Status: ${quote.status}
|
|
|
98
110
|
|
|
99
111
|
Converting:
|
|
100
112
|
From: ${quote.from.amount} ${quote.from.currency}${quote.from.network ? ` (${quote.from.network})` : ""}
|
|
101
|
-
To: ${quote.to.amount} ${quote.to.currency}
|
|
113
|
+
To: ${quote.to.amount} ${quote.to.currency} via ${quote.to.paymentMethodType}
|
|
102
114
|
|
|
103
115
|
Exchange Rate: ${quote.exchangeRate}
|
|
104
116
|
Total Fees: ${quote.fees.totalFee.amount} ${quote.fees.totalFee.currency}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/tools/quotes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/tools/quotes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAwB;IAC5E,eAAe;IACf,MAAM,CAAC,IAAI,CACT,cAAc,EACd,wNAAwN,EACxN;QACE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACvF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACjH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QACxF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QACnF,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yFAAyF,CAAC;KAClJ,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAC5F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;gBACxC,IAAI,EAAE;oBACJ,QAAQ,EAAE,YAAY;oBACtB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,WAAW;iBACrB;gBACD,EAAE,EAAE;oBACF,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,SAAS;oBAClB,iBAAiB;iBAClB;aACF,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAErG,IAAI,UAAU,GAAG,eAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7F,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,IAAI,eAAe,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1G,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW;gBAAE,UAAU,IAAI,qBAAqB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClI,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB;gBAAE,UAAU,IAAI,2BAA2B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YACvJ,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU;gBAAE,UAAU,IAAI,oBAAoB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC9H,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa;gBAAE,UAAU,IAAI,uBAAuB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAE1I,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;YAER,KAAK,CAAC,OAAO;UACf,KAAK,CAAC,MAAM;;;UAGZ,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;QACjG,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,QAAQ,KAAK,CAAC,EAAE,CAAC,iBAAiB;;iBAE7D,KAAK,CAAC,YAAY;EACjC,UAAU;;cAEE,SAAS;cACT,KAAK,CAAC,SAAS;;gHAEmF;qBACnG;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;qBAC5F;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,YAAY;IACZ,MAAM,CAAC,IAAI,CACT,WAAW,EACX,kEAAkE,EAClE;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAE7B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,KAAK,sBAAsB,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACpG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,mBAAmB,CAAC;YACpD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC;YAE9D,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,GAAG,wDAAwD,CAAC;YAC3E,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,aAAa,GAAG,gCAAgC,CAAC;YACnD,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,aAAa,GAAG,wDAAwD,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACrG,aAAa,GAAG,uCAAuC,SAAS,WAAW,CAAC;YAC9E,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;YAER,KAAK,CAAC,OAAO;UACf,KAAK,CAAC,MAAM;;;UAGZ,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;QACjG,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,QAAQ,KAAK,CAAC,EAAE,CAAC,iBAAiB;;iBAE7D,KAAK,CAAC,YAAY;cACrB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;;WAE7D,KAAK,CAAC,SAAS;WACf,KAAK,CAAC,SAAS;;EAExB,aAAa,EAAE;qBACJ;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;qBACzF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transfer Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Currently supports crypto → fiat (off-ramp) transfers
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
6
|
import { StablesApiClient } from "../lib/stables-client.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfers.d.ts","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transfers.d.ts","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QAkPhF"}
|
package/build/tools/transfers.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transfer Tools for Stables MCP Server
|
|
3
|
-
*
|
|
4
|
-
* Currently supports crypto → fiat (off-ramp) transfers
|
|
3
|
+
* Synced with OpenAPI spec from https://api.sandbox.stables.money/docs
|
|
5
4
|
*/
|
|
6
5
|
import { z } from "zod";
|
|
7
6
|
export function registerTransferTools(server, client) {
|
|
@@ -15,11 +14,14 @@ export function registerTransferTools(server, client) {
|
|
|
15
14
|
bankName: z.string().optional().describe("Name of the destination bank"),
|
|
16
15
|
bankCountry: z.string().optional().describe("Two-letter country code of the bank (e.g., 'GR', 'US')"),
|
|
17
16
|
bankCurrency: z.string().optional().describe("Currency for the bank payout (e.g., 'EUR', 'USD')"),
|
|
17
|
+
accountType: z.enum(["savings", "checking", "payment"]).optional().describe("Type of bank account"),
|
|
18
18
|
swiftCode: z.string().optional().describe("SWIFT/BIC code for international transfers"),
|
|
19
|
-
routingNumber: z.string().optional().describe("
|
|
20
|
-
sortCode: z.string().optional().describe("Sort code (
|
|
19
|
+
routingNumber: z.string().optional().describe("ABA routing number (US)"),
|
|
20
|
+
sortCode: z.string().optional().describe("Sort code (UK)"),
|
|
21
|
+
ifscCode: z.string().optional().describe("IFSC code (India)"),
|
|
22
|
+
bsbCode: z.string().optional().describe("BSB code (Australia)"),
|
|
21
23
|
metadata: z.record(z.string()).optional().describe("Optional metadata to attach to the transfer"),
|
|
22
|
-
}, async ({ customerId, quoteId, accountHolderName, iban, accountNumber, bankName, bankCountry, bankCurrency, swiftCode, routingNumber, sortCode, metadata }) => {
|
|
24
|
+
}, async ({ customerId, quoteId, accountHolderName, iban, accountNumber, bankName, bankCountry, bankCurrency, accountType, swiftCode, routingNumber, sortCode, ifscCode, bsbCode, metadata }) => {
|
|
23
25
|
try {
|
|
24
26
|
// Build payment method if bank details provided
|
|
25
27
|
const paymentMethod = accountHolderName ? {
|
|
@@ -27,13 +29,16 @@ export function registerTransferTools(server, client) {
|
|
|
27
29
|
accountHolderName,
|
|
28
30
|
iban,
|
|
29
31
|
accountNumber,
|
|
30
|
-
bankName,
|
|
31
|
-
bankCountry,
|
|
32
|
-
currency: bankCurrency,
|
|
33
|
-
|
|
32
|
+
bankName: bankName || "",
|
|
33
|
+
bankCountry: bankCountry || "",
|
|
34
|
+
currency: bankCurrency || "",
|
|
35
|
+
accountType,
|
|
36
|
+
bankCodes: (swiftCode || routingNumber || sortCode || ifscCode || bsbCode) ? {
|
|
34
37
|
swiftCode,
|
|
35
|
-
routingNumber,
|
|
38
|
+
abaCode: routingNumber,
|
|
36
39
|
sortCode,
|
|
40
|
+
ifscCode,
|
|
41
|
+
bsbCode,
|
|
37
42
|
} : undefined,
|
|
38
43
|
},
|
|
39
44
|
} : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfers.js","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transfers.js","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"virtual-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/virtual-accounts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,QA4TtF"}
|