@sardis/sdk 0.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/CHANGELOG.md +47 -0
- package/LICENSE +21 -0
- package/README.md +439 -0
- package/dist/browser/index.js +7049 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/sardis.umd.js +7071 -0
- package/dist/browser/sardis.umd.js.map +1 -0
- package/dist/cjs/client.js +644 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/demo.js +699 -0
- package/dist/cjs/demo.js.map +1 -0
- package/dist/cjs/errors.js +630 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +131 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integrations/index.js +21 -0
- package/dist/cjs/integrations/index.js.map +1 -0
- package/dist/cjs/integrations/langchain.js +339 -0
- package/dist/cjs/integrations/langchain.js.map +1 -0
- package/dist/cjs/integrations/openai.js +505 -0
- package/dist/cjs/integrations/openai.js.map +1 -0
- package/dist/cjs/integrations/vercel-ai.js +198 -0
- package/dist/cjs/integrations/vercel-ai.js.map +1 -0
- package/dist/cjs/resources/a2a.js +158 -0
- package/dist/cjs/resources/a2a.js.map +1 -0
- package/dist/cjs/resources/agents.js +142 -0
- package/dist/cjs/resources/agents.js.map +1 -0
- package/dist/cjs/resources/base.js +124 -0
- package/dist/cjs/resources/base.js.map +1 -0
- package/dist/cjs/resources/cards.js +43 -0
- package/dist/cjs/resources/cards.js.map +1 -0
- package/dist/cjs/resources/holds.js +64 -0
- package/dist/cjs/resources/holds.js.map +1 -0
- package/dist/cjs/resources/index.js +31 -0
- package/dist/cjs/resources/index.js.map +1 -0
- package/dist/cjs/resources/ledger.js +43 -0
- package/dist/cjs/resources/ledger.js.map +1 -0
- package/dist/cjs/resources/marketplace.js +88 -0
- package/dist/cjs/resources/marketplace.js.map +1 -0
- package/dist/cjs/resources/payments.js +33 -0
- package/dist/cjs/resources/payments.js.map +1 -0
- package/dist/cjs/resources/policies.js +31 -0
- package/dist/cjs/resources/policies.js.map +1 -0
- package/dist/cjs/resources/transactions.js +37 -0
- package/dist/cjs/resources/transactions.js.map +1 -0
- package/dist/cjs/resources/ucp.js +133 -0
- package/dist/cjs/resources/ucp.js.map +1 -0
- package/dist/cjs/resources/wallets.js +109 -0
- package/dist/cjs/resources/wallets.js.map +1 -0
- package/dist/cjs/resources/webhooks.js +81 -0
- package/dist/cjs/resources/webhooks.js.map +1 -0
- package/dist/cjs/types.js +11 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/client.d.ts +419 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +637 -0
- package/dist/client.js.map +1 -0
- package/dist/demo.d.ts +335 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +694 -0
- package/dist/demo.js.map +1 -0
- package/dist/errors.d.ts +522 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +612 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +5 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/langchain.d.ts +68 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +335 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/openai.d.ts +97 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +467 -0
- package/dist/integrations/openai.js.map +1 -0
- package/dist/integrations/vercel-ai.d.ts +180 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/integrations/vercel-ai.js +194 -0
- package/dist/integrations/vercel-ai.js.map +1 -0
- package/dist/resources/a2a.d.ts +254 -0
- package/dist/resources/a2a.d.ts.map +1 -0
- package/dist/resources/a2a.js +154 -0
- package/dist/resources/a2a.js.map +1 -0
- package/dist/resources/agents.d.ts +111 -0
- package/dist/resources/agents.d.ts.map +1 -0
- package/dist/resources/agents.js +138 -0
- package/dist/resources/agents.js.map +1 -0
- package/dist/resources/base.d.ts +115 -0
- package/dist/resources/base.d.ts.map +1 -0
- package/dist/resources/base.js +120 -0
- package/dist/resources/base.js.map +1 -0
- package/dist/resources/cards.d.ts +19 -0
- package/dist/resources/cards.d.ts.map +1 -0
- package/dist/resources/cards.js +39 -0
- package/dist/resources/cards.js.map +1 -0
- package/dist/resources/holds.d.ts +44 -0
- package/dist/resources/holds.d.ts.map +1 -0
- package/dist/resources/holds.js +60 -0
- package/dist/resources/holds.js.map +1 -0
- package/dist/resources/index.d.ts +16 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +16 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/ledger.d.ts +38 -0
- package/dist/resources/ledger.d.ts.map +1 -0
- package/dist/resources/ledger.js +39 -0
- package/dist/resources/ledger.js.map +1 -0
- package/dist/resources/marketplace.d.ts +60 -0
- package/dist/resources/marketplace.d.ts.map +1 -0
- package/dist/resources/marketplace.js +84 -0
- package/dist/resources/marketplace.js.map +1 -0
- package/dist/resources/payments.d.ts +24 -0
- package/dist/resources/payments.d.ts.map +1 -0
- package/dist/resources/payments.js +29 -0
- package/dist/resources/payments.js.map +1 -0
- package/dist/resources/policies.d.ts +23 -0
- package/dist/resources/policies.d.ts.map +1 -0
- package/dist/resources/policies.js +27 -0
- package/dist/resources/policies.js.map +1 -0
- package/dist/resources/transactions.d.ts +32 -0
- package/dist/resources/transactions.d.ts.map +1 -0
- package/dist/resources/transactions.js +33 -0
- package/dist/resources/transactions.js.map +1 -0
- package/dist/resources/ucp.d.ts +218 -0
- package/dist/resources/ucp.d.ts.map +1 -0
- package/dist/resources/ucp.js +129 -0
- package/dist/resources/ucp.js.map +1 -0
- package/dist/resources/wallets.d.ts +71 -0
- package/dist/resources/wallets.d.ts.map +1 -0
- package/dist/resources/wallets.js +105 -0
- package/dist/resources/wallets.js.map +1 -0
- package/dist/resources/webhooks.d.ts +57 -0
- package/dist/resources/webhooks.d.ts.map +1 -0
- package/dist/resources/webhooks.js +77 -0
- package/dist/resources/webhooks.js.map +1 -0
- package/dist/types.d.ts +1045 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +114 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sardis TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Official SDK for the Sardis stablecoin execution layer.
|
|
5
|
+
* Enables AI agents to execute programmable payments using stablecoins.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*
|
|
9
|
+
* @example Basic usage
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { SardisClient } from '@sardis/sdk';
|
|
12
|
+
*
|
|
13
|
+
* const client = new SardisClient({
|
|
14
|
+
* apiKey: 'your-api-key',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Execute a payment
|
|
18
|
+
* const result = await client.payments.executeMandate(mandate);
|
|
19
|
+
*
|
|
20
|
+
* // Create a hold
|
|
21
|
+
* const hold = await client.holds.create({
|
|
22
|
+
* wallet_id: 'wallet_123',
|
|
23
|
+
* amount: '100.00',
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example With request cancellation
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const controller = new AbortController();
|
|
30
|
+
*
|
|
31
|
+
* // Cancel after 5 seconds
|
|
32
|
+
* setTimeout(() => controller.abort(), 5000);
|
|
33
|
+
*
|
|
34
|
+
* try {
|
|
35
|
+
* const result = await client.payments.executeMandate(mandate, {
|
|
36
|
+
* signal: controller.signal,
|
|
37
|
+
* });
|
|
38
|
+
* } catch (error) {
|
|
39
|
+
* if (error instanceof AbortError) {
|
|
40
|
+
* console.log('Request was cancelled');
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @example With interceptors
|
|
46
|
+
* ```typescript
|
|
47
|
+
* client.addRequestInterceptor({
|
|
48
|
+
* onRequest: (config) => {
|
|
49
|
+
* console.log(`Requesting ${config.method} ${config.url}`);
|
|
50
|
+
* return config;
|
|
51
|
+
* },
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @example With pagination
|
|
56
|
+
* ```typescript
|
|
57
|
+
* for await (const agent of client.paginate(
|
|
58
|
+
* (params) => client.agents.list(params),
|
|
59
|
+
* { limit: 100 }
|
|
60
|
+
* )) {
|
|
61
|
+
* console.log(agent.name);
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export { SardisClient } from './client.js';
|
|
66
|
+
export { SardisError, APIError, AuthenticationError, RateLimitError, TimeoutError, AbortError, NetworkError, ValidationError, InsufficientBalanceError, NotFoundError, PolicyViolationError, SpendingLimitError, BlockchainError, SardisErrorCode, isSardisError, isRetryableError, } from './errors.js';
|
|
67
|
+
export type { SardisClientOptions, RequestOptions, RequestInterceptor, ResponseInterceptor, RetryConfig, TokenRefreshConfig, PaginationParams, PaginatedResponse, } from './types.js';
|
|
68
|
+
export type { Chain, Token, MPCProvider, } from './types.js';
|
|
69
|
+
export type { Wallet, WalletBalance, TokenLimit, CreateWalletInput, SetAddressInput, WalletTransferInput, WalletTransferResponse, } from './types.js';
|
|
70
|
+
export type { ParsedPolicy, PolicyPreviewResponse, ApplyPolicyFromNLResponse, PolicyCheckResponse, } from './types.js';
|
|
71
|
+
export type { Card, CardStatus, IssueCardInput, UpdateCardLimitsInput, SimulateCardPurchaseInput, SimulateCardPurchaseResponse, CardTransaction, } from './types.js';
|
|
72
|
+
export type { Payment, PaymentStatus, ExecutePaymentInput, ExecuteAP2Input, ExecutePaymentResponse, ExecuteAP2Response, } from './types.js';
|
|
73
|
+
export type { Hold, HoldStatus, CreateHoldInput, CaptureHoldInput, CreateHoldResponse, } from './types.js';
|
|
74
|
+
export type { Webhook, WebhookDelivery, WebhookEventType, CreateWebhookInput, UpdateWebhookInput, } from './types.js';
|
|
75
|
+
export type { Service, ServiceOffer, ServiceReview, ServiceCategory, ServiceStatus, OfferStatus, CreateServiceInput, CreateOfferInput, SearchServicesInput, } from './types.js';
|
|
76
|
+
export type { GasEstimate, TransactionStatus, ChainInfo, } from './types.js';
|
|
77
|
+
export type { LedgerEntry, } from './types.js';
|
|
78
|
+
export type { Agent, CreateAgentInput, UpdateAgentInput, ListAgentsOptions, SpendingLimits, AgentPolicy, KeyAlgorithm, } from './types.js';
|
|
79
|
+
export type { BulkOperation, BulkOperationResult, BulkOptions, } from './types.js';
|
|
80
|
+
export type { ErrorDetails, } from './errors.js';
|
|
81
|
+
export type { SardisErrorDetails, } from './types.js';
|
|
82
|
+
export * as integrations from './integrations/index.js';
|
|
83
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAEL,WAAW,EAEX,QAAQ,EACR,mBAAmB,EACnB,cAAc,EAEd,YAAY,EACZ,UAAU,EACV,YAAY,EAEZ,eAAe,EAEf,wBAAwB,EACxB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EAEf,eAAe,EAEf,aAAa,EACb,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,KAAK,EACL,KAAK,EACL,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,MAAM,EACN,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,IAAI,EACJ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,OAAO,EACP,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,IAAI,EACJ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,KAAK,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sardis TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Official SDK for the Sardis stablecoin execution layer.
|
|
5
|
+
* Enables AI agents to execute programmable payments using stablecoins.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*
|
|
9
|
+
* @example Basic usage
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { SardisClient } from '@sardis/sdk';
|
|
12
|
+
*
|
|
13
|
+
* const client = new SardisClient({
|
|
14
|
+
* apiKey: 'your-api-key',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Execute a payment
|
|
18
|
+
* const result = await client.payments.executeMandate(mandate);
|
|
19
|
+
*
|
|
20
|
+
* // Create a hold
|
|
21
|
+
* const hold = await client.holds.create({
|
|
22
|
+
* wallet_id: 'wallet_123',
|
|
23
|
+
* amount: '100.00',
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example With request cancellation
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const controller = new AbortController();
|
|
30
|
+
*
|
|
31
|
+
* // Cancel after 5 seconds
|
|
32
|
+
* setTimeout(() => controller.abort(), 5000);
|
|
33
|
+
*
|
|
34
|
+
* try {
|
|
35
|
+
* const result = await client.payments.executeMandate(mandate, {
|
|
36
|
+
* signal: controller.signal,
|
|
37
|
+
* });
|
|
38
|
+
* } catch (error) {
|
|
39
|
+
* if (error instanceof AbortError) {
|
|
40
|
+
* console.log('Request was cancelled');
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @example With interceptors
|
|
46
|
+
* ```typescript
|
|
47
|
+
* client.addRequestInterceptor({
|
|
48
|
+
* onRequest: (config) => {
|
|
49
|
+
* console.log(`Requesting ${config.method} ${config.url}`);
|
|
50
|
+
* return config;
|
|
51
|
+
* },
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @example With pagination
|
|
56
|
+
* ```typescript
|
|
57
|
+
* for await (const agent of client.paginate(
|
|
58
|
+
* (params) => client.agents.list(params),
|
|
59
|
+
* { limit: 100 }
|
|
60
|
+
* )) {
|
|
61
|
+
* console.log(agent.name);
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
// Main client
|
|
66
|
+
export { SardisClient } from './client.js';
|
|
67
|
+
// Errors
|
|
68
|
+
export {
|
|
69
|
+
// Error base class
|
|
70
|
+
SardisError,
|
|
71
|
+
// API errors
|
|
72
|
+
APIError, AuthenticationError, RateLimitError,
|
|
73
|
+
// Network errors
|
|
74
|
+
TimeoutError, AbortError, NetworkError,
|
|
75
|
+
// Validation errors
|
|
76
|
+
ValidationError,
|
|
77
|
+
// Business logic errors
|
|
78
|
+
InsufficientBalanceError, NotFoundError, PolicyViolationError, SpendingLimitError, BlockchainError,
|
|
79
|
+
// Error codes
|
|
80
|
+
SardisErrorCode,
|
|
81
|
+
// Type guards
|
|
82
|
+
isSardisError, isRetryableError, } from './errors.js';
|
|
83
|
+
// Integrations
|
|
84
|
+
export * as integrations from './integrations/index.js';
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,cAAc;AACd,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,SAAS;AACT,OAAO;AACL,mBAAmB;AACnB,WAAW;AACX,aAAa;AACb,QAAQ,EACR,mBAAmB,EACnB,cAAc;AACd,iBAAiB;AACjB,YAAY,EACZ,UAAU,EACV,YAAY;AACZ,oBAAoB;AACpB,eAAe;AACf,wBAAwB;AACxB,wBAAwB,EACxB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,eAAe;AACf,cAAc;AACd,eAAe;AACf,cAAc;AACd,aAAa,EACb,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAmIrB,eAAe;AACf,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain.js Integration for Sardis SDK
|
|
3
|
+
*
|
|
4
|
+
* Provides LangChain-compatible tools for AI agents to execute payments
|
|
5
|
+
* through Sardis MPC wallets with policy enforcement.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ChatOpenAI } from '@langchain/openai';
|
|
10
|
+
* import { AgentExecutor, createOpenAIFunctionsAgent } from 'langchain/agents';
|
|
11
|
+
* import { SardisClient } from '@sardis/sdk';
|
|
12
|
+
* import { createSardisLangChainTools } from '@sardis/sdk/integrations/langchain';
|
|
13
|
+
*
|
|
14
|
+
* const client = new SardisClient({ apiKey: 'your-api-key' });
|
|
15
|
+
* const tools = createSardisLangChainTools(client, { walletId: 'wallet_123' });
|
|
16
|
+
*
|
|
17
|
+
* const agent = await createOpenAIFunctionsAgent({
|
|
18
|
+
* llm: new ChatOpenAI(),
|
|
19
|
+
* tools,
|
|
20
|
+
* prompt: yourPrompt
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* const executor = new AgentExecutor({ agent, tools });
|
|
24
|
+
* const result = await executor.invoke({ input: 'Pay $50 to OpenAI' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import { SardisClient } from '../client.js';
|
|
28
|
+
/**
|
|
29
|
+
* Options for creating Sardis LangChain tools
|
|
30
|
+
*/
|
|
31
|
+
export interface SardisLangChainOptions {
|
|
32
|
+
/** Default wallet ID to use for payments */
|
|
33
|
+
walletId?: string;
|
|
34
|
+
/** Default agent ID */
|
|
35
|
+
agentId?: string;
|
|
36
|
+
/** Default chain for transactions */
|
|
37
|
+
chain?: 'base' | 'base_sepolia' | 'polygon' | 'polygon_amoy' | 'ethereum' | 'ethereum_sepolia';
|
|
38
|
+
/** Default token */
|
|
39
|
+
token?: 'USDC' | 'USDT' | 'PYUSD' | 'EURC';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* LangChain tool interface
|
|
43
|
+
*/
|
|
44
|
+
interface LangChainTool {
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
schema: {
|
|
48
|
+
type: 'object';
|
|
49
|
+
properties: Record<string, unknown>;
|
|
50
|
+
required?: string[];
|
|
51
|
+
};
|
|
52
|
+
func: (input: Record<string, unknown>) => Promise<string>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create LangChain-compatible tools for Sardis payments.
|
|
56
|
+
*
|
|
57
|
+
* @param client - Initialized SardisClient instance
|
|
58
|
+
* @param options - Configuration options
|
|
59
|
+
* @returns Array of LangChain-compatible tools
|
|
60
|
+
*/
|
|
61
|
+
export declare function createSardisLangChainTools(client: SardisClient, options?: SardisLangChainOptions): LangChainTool[];
|
|
62
|
+
/**
|
|
63
|
+
* Create a single LangChain tool for payments only.
|
|
64
|
+
* Use this if you only need the payment functionality.
|
|
65
|
+
*/
|
|
66
|
+
export declare function createSardisPaymentTool(client: SardisClient, options?: SardisLangChainOptions): LangChainTool;
|
|
67
|
+
export type { LangChainTool };
|
|
68
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,kBAAkB,CAAC;IAC/F,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC9C;AAED;;GAEG;AACH,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACJ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7D;AAyBD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,sBAA2B,GACrC,aAAa,EAAE,CAsSjB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,sBAA2B,GACrC,aAAa,CAGf;AAED,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain.js Integration for Sardis SDK
|
|
3
|
+
*
|
|
4
|
+
* Provides LangChain-compatible tools for AI agents to execute payments
|
|
5
|
+
* through Sardis MPC wallets with policy enforcement.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ChatOpenAI } from '@langchain/openai';
|
|
10
|
+
* import { AgentExecutor, createOpenAIFunctionsAgent } from 'langchain/agents';
|
|
11
|
+
* import { SardisClient } from '@sardis/sdk';
|
|
12
|
+
* import { createSardisLangChainTools } from '@sardis/sdk/integrations/langchain';
|
|
13
|
+
*
|
|
14
|
+
* const client = new SardisClient({ apiKey: 'your-api-key' });
|
|
15
|
+
* const tools = createSardisLangChainTools(client, { walletId: 'wallet_123' });
|
|
16
|
+
*
|
|
17
|
+
* const agent = await createOpenAIFunctionsAgent({
|
|
18
|
+
* llm: new ChatOpenAI(),
|
|
19
|
+
* tools,
|
|
20
|
+
* prompt: yourPrompt
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* const executor = new AgentExecutor({ agent, tools });
|
|
24
|
+
* const result = await executor.invoke({ input: 'Pay $50 to OpenAI' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Generate a unique mandate ID
|
|
29
|
+
*/
|
|
30
|
+
function generateMandateId() {
|
|
31
|
+
const timestamp = Date.now().toString(36);
|
|
32
|
+
const random = Math.random().toString(36).substring(2, 10);
|
|
33
|
+
return `mnd_${timestamp}${random}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a SHA-256 hash for audit purposes
|
|
37
|
+
*/
|
|
38
|
+
async function createAuditHash(data) {
|
|
39
|
+
if (typeof crypto !== 'undefined' && crypto.subtle) {
|
|
40
|
+
const encoder = new TextEncoder();
|
|
41
|
+
const dataBuffer = encoder.encode(data);
|
|
42
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
|
|
43
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
44
|
+
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
45
|
+
}
|
|
46
|
+
return `hash_${Date.now().toString(16)}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create LangChain-compatible tools for Sardis payments.
|
|
50
|
+
*
|
|
51
|
+
* @param client - Initialized SardisClient instance
|
|
52
|
+
* @param options - Configuration options
|
|
53
|
+
* @returns Array of LangChain-compatible tools
|
|
54
|
+
*/
|
|
55
|
+
export function createSardisLangChainTools(client, options = {}) {
|
|
56
|
+
const defaultWalletId = options.walletId || process.env.SARDIS_WALLET_ID || '';
|
|
57
|
+
const defaultAgentId = options.agentId || process.env.SARDIS_AGENT_ID || '';
|
|
58
|
+
const defaultChain = options.chain || 'base_sepolia';
|
|
59
|
+
const defaultToken = options.token || 'USDC';
|
|
60
|
+
const tools = [
|
|
61
|
+
{
|
|
62
|
+
name: 'sardis_pay',
|
|
63
|
+
description: 'Execute a secure payment using Sardis MPC wallet. Validates against spending policies. Use this when the user wants to pay a vendor or service.',
|
|
64
|
+
schema: {
|
|
65
|
+
type: 'object',
|
|
66
|
+
properties: {
|
|
67
|
+
amount: {
|
|
68
|
+
type: 'number',
|
|
69
|
+
description: 'The amount to pay in USD (or token units)'
|
|
70
|
+
},
|
|
71
|
+
vendor: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'The name of the merchant or service provider'
|
|
74
|
+
},
|
|
75
|
+
vendor_address: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'The wallet address of the vendor (0x...). Optional - will resolve if not provided.'
|
|
78
|
+
},
|
|
79
|
+
purpose: {
|
|
80
|
+
type: 'string',
|
|
81
|
+
description: 'The reason for the payment, used for policy validation'
|
|
82
|
+
},
|
|
83
|
+
token: {
|
|
84
|
+
type: 'string',
|
|
85
|
+
enum: ['USDC', 'USDT', 'PYUSD', 'EURC'],
|
|
86
|
+
description: 'The stablecoin to use. Defaults to USDC.'
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
required: ['amount', 'vendor']
|
|
90
|
+
},
|
|
91
|
+
func: async (input) => {
|
|
92
|
+
const amount = input.amount;
|
|
93
|
+
const vendor = input.vendor;
|
|
94
|
+
const vendorAddress = input.vendor_address;
|
|
95
|
+
const purpose = input.purpose;
|
|
96
|
+
const token = input.token || defaultToken;
|
|
97
|
+
if (!defaultWalletId) {
|
|
98
|
+
return JSON.stringify({
|
|
99
|
+
success: false,
|
|
100
|
+
error: 'No wallet ID configured. Set walletId in options or SARDIS_WALLET_ID env var.'
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const mandateId = generateMandateId();
|
|
105
|
+
const timestamp = new Date().toISOString();
|
|
106
|
+
const amountMinor = Math.round(amount * 1_000_000).toString();
|
|
107
|
+
const auditData = JSON.stringify({
|
|
108
|
+
mandate_id: mandateId,
|
|
109
|
+
subject: defaultWalletId,
|
|
110
|
+
destination: vendorAddress || `pending:${vendor}`,
|
|
111
|
+
amount_minor: amountMinor,
|
|
112
|
+
token,
|
|
113
|
+
purpose: purpose || `Payment to ${vendor}`,
|
|
114
|
+
timestamp
|
|
115
|
+
});
|
|
116
|
+
const auditHash = await createAuditHash(auditData);
|
|
117
|
+
const mandate = {
|
|
118
|
+
mandate_id: mandateId,
|
|
119
|
+
subject: defaultWalletId,
|
|
120
|
+
destination: vendorAddress || `pending:${vendor}`,
|
|
121
|
+
amount_minor: amountMinor,
|
|
122
|
+
token,
|
|
123
|
+
chain: defaultChain,
|
|
124
|
+
purpose: purpose || `Payment to ${vendor}`,
|
|
125
|
+
vendor_name: vendor,
|
|
126
|
+
agent_id: defaultAgentId,
|
|
127
|
+
timestamp,
|
|
128
|
+
audit_hash: auditHash,
|
|
129
|
+
metadata: {
|
|
130
|
+
vendor,
|
|
131
|
+
category: 'saas',
|
|
132
|
+
initiated_by: 'ai_agent',
|
|
133
|
+
tool: 'langchain_js'
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const result = await client.payments.executeMandate(mandate);
|
|
137
|
+
return JSON.stringify({
|
|
138
|
+
success: true,
|
|
139
|
+
status: result.status,
|
|
140
|
+
payment_id: result.payment_id,
|
|
141
|
+
transaction_hash: result.tx_hash,
|
|
142
|
+
chain: result.chain,
|
|
143
|
+
ledger_tx_id: result.ledger_tx_id,
|
|
144
|
+
message: `Payment of $${amount} ${token} to ${vendor} ${result.status === 'completed' ? 'completed' : 'initiated'}.`
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
const errorMessage = error instanceof Error ? error.message : 'Payment failed';
|
|
149
|
+
if (errorMessage.includes('policy') || errorMessage.includes('blocked') || errorMessage.includes('limit')) {
|
|
150
|
+
return JSON.stringify({
|
|
151
|
+
success: false,
|
|
152
|
+
blocked: true,
|
|
153
|
+
error: errorMessage,
|
|
154
|
+
message: `Payment to ${vendor} blocked by policy: ${errorMessage}`
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return JSON.stringify({
|
|
158
|
+
success: false,
|
|
159
|
+
error: errorMessage
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: 'sardis_check_balance',
|
|
166
|
+
description: 'Check the current balance of a Sardis wallet. Use this before making payments to ensure sufficient funds.',
|
|
167
|
+
schema: {
|
|
168
|
+
type: 'object',
|
|
169
|
+
properties: {
|
|
170
|
+
token: {
|
|
171
|
+
type: 'string',
|
|
172
|
+
enum: ['USDC', 'USDT', 'PYUSD', 'EURC'],
|
|
173
|
+
description: 'The token to check balance for. Defaults to USDC.'
|
|
174
|
+
},
|
|
175
|
+
chain: {
|
|
176
|
+
type: 'string',
|
|
177
|
+
description: 'The blockchain to check balance on. Defaults to base_sepolia.'
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
func: async (input) => {
|
|
182
|
+
const token = input.token || defaultToken;
|
|
183
|
+
const chain = input.chain || defaultChain;
|
|
184
|
+
if (!defaultWalletId) {
|
|
185
|
+
return JSON.stringify({
|
|
186
|
+
success: false,
|
|
187
|
+
error: 'No wallet ID configured'
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
const balance = await client.wallets.getBalance(defaultWalletId, chain, token);
|
|
192
|
+
return JSON.stringify({
|
|
193
|
+
success: true,
|
|
194
|
+
wallet_id: balance.wallet_id,
|
|
195
|
+
balance: balance.balance,
|
|
196
|
+
token: balance.token,
|
|
197
|
+
chain: balance.chain,
|
|
198
|
+
address: balance.address
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
return JSON.stringify({
|
|
203
|
+
success: false,
|
|
204
|
+
error: error instanceof Error ? error.message : 'Failed to get balance'
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'sardis_get_wallet',
|
|
211
|
+
description: 'Get information about the Sardis wallet including spending limits and policy settings.',
|
|
212
|
+
schema: {
|
|
213
|
+
type: 'object',
|
|
214
|
+
properties: {}
|
|
215
|
+
},
|
|
216
|
+
func: async () => {
|
|
217
|
+
if (!defaultWalletId) {
|
|
218
|
+
return JSON.stringify({
|
|
219
|
+
success: false,
|
|
220
|
+
error: 'No wallet ID configured'
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const wallet = await client.wallets.get(defaultWalletId);
|
|
225
|
+
return JSON.stringify({
|
|
226
|
+
success: true,
|
|
227
|
+
wallet: {
|
|
228
|
+
id: wallet.id,
|
|
229
|
+
agent_id: wallet.agent_id,
|
|
230
|
+
currency: wallet.currency,
|
|
231
|
+
limit_per_tx: wallet.limit_per_tx,
|
|
232
|
+
limit_total: wallet.limit_total,
|
|
233
|
+
is_active: wallet.is_active,
|
|
234
|
+
addresses: wallet.addresses
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
return JSON.stringify({
|
|
240
|
+
success: false,
|
|
241
|
+
error: error instanceof Error ? error.message : 'Failed to get wallet'
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: 'sardis_check_policy',
|
|
248
|
+
description: 'Check if a payment would be allowed by the spending policy without executing it. Use this to validate payments before execution.',
|
|
249
|
+
schema: {
|
|
250
|
+
type: 'object',
|
|
251
|
+
properties: {
|
|
252
|
+
amount: {
|
|
253
|
+
type: 'number',
|
|
254
|
+
description: 'The amount to pay in USD'
|
|
255
|
+
},
|
|
256
|
+
vendor: {
|
|
257
|
+
type: 'string',
|
|
258
|
+
description: 'The name of the merchant or service provider'
|
|
259
|
+
},
|
|
260
|
+
purpose: {
|
|
261
|
+
type: 'string',
|
|
262
|
+
description: 'The reason for the payment'
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
required: ['amount', 'vendor']
|
|
266
|
+
},
|
|
267
|
+
func: async (input) => {
|
|
268
|
+
const amount = input.amount;
|
|
269
|
+
const vendor = input.vendor;
|
|
270
|
+
const purpose = input.purpose;
|
|
271
|
+
if (!defaultWalletId) {
|
|
272
|
+
return JSON.stringify({
|
|
273
|
+
success: false,
|
|
274
|
+
error: 'No wallet ID configured'
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
// Get wallet to check limits
|
|
279
|
+
const wallet = await client.wallets.get(defaultWalletId);
|
|
280
|
+
const limitPerTx = parseFloat(wallet.limit_per_tx);
|
|
281
|
+
const limitTotal = parseFloat(wallet.limit_total);
|
|
282
|
+
// Basic policy checks
|
|
283
|
+
const checks = [];
|
|
284
|
+
// Per-transaction limit check
|
|
285
|
+
if (amount <= limitPerTx) {
|
|
286
|
+
checks.push({ name: 'per_transaction_limit', passed: true });
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
checks.push({
|
|
290
|
+
name: 'per_transaction_limit',
|
|
291
|
+
passed: false,
|
|
292
|
+
reason: `Amount $${amount} exceeds per-transaction limit of $${limitPerTx}`
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
// Wallet active check
|
|
296
|
+
if (wallet.is_active) {
|
|
297
|
+
checks.push({ name: 'wallet_active', passed: true });
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
checks.push({
|
|
301
|
+
name: 'wallet_active',
|
|
302
|
+
passed: false,
|
|
303
|
+
reason: 'Wallet is not active'
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
const allPassed = checks.every(c => c.passed);
|
|
307
|
+
return JSON.stringify({
|
|
308
|
+
success: true,
|
|
309
|
+
allowed: allPassed,
|
|
310
|
+
checks,
|
|
311
|
+
summary: allPassed
|
|
312
|
+
? `Payment of $${amount} to ${vendor} would be allowed`
|
|
313
|
+
: `Payment of $${amount} to ${vendor} would be blocked: ${checks.filter(c => !c.passed).map(c => c.reason).join('; ')}`
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
return JSON.stringify({
|
|
318
|
+
success: false,
|
|
319
|
+
error: error instanceof Error ? error.message : 'Failed to check policy'
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
];
|
|
325
|
+
return tools;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Create a single LangChain tool for payments only.
|
|
329
|
+
* Use this if you only need the payment functionality.
|
|
330
|
+
*/
|
|
331
|
+
export function createSardisPaymentTool(client, options = {}) {
|
|
332
|
+
const tools = createSardisLangChainTools(client, options);
|
|
333
|
+
return tools.find(t => t.name === 'sardis_pay');
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"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"}
|