@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.
Files changed (146) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/LICENSE +21 -0
  3. package/README.md +439 -0
  4. package/dist/browser/index.js +7049 -0
  5. package/dist/browser/index.js.map +1 -0
  6. package/dist/browser/sardis.umd.js +7071 -0
  7. package/dist/browser/sardis.umd.js.map +1 -0
  8. package/dist/cjs/client.js +644 -0
  9. package/dist/cjs/client.js.map +1 -0
  10. package/dist/cjs/demo.js +699 -0
  11. package/dist/cjs/demo.js.map +1 -0
  12. package/dist/cjs/errors.js +630 -0
  13. package/dist/cjs/errors.js.map +1 -0
  14. package/dist/cjs/index.js +131 -0
  15. package/dist/cjs/index.js.map +1 -0
  16. package/dist/cjs/integrations/index.js +21 -0
  17. package/dist/cjs/integrations/index.js.map +1 -0
  18. package/dist/cjs/integrations/langchain.js +339 -0
  19. package/dist/cjs/integrations/langchain.js.map +1 -0
  20. package/dist/cjs/integrations/openai.js +505 -0
  21. package/dist/cjs/integrations/openai.js.map +1 -0
  22. package/dist/cjs/integrations/vercel-ai.js +198 -0
  23. package/dist/cjs/integrations/vercel-ai.js.map +1 -0
  24. package/dist/cjs/resources/a2a.js +158 -0
  25. package/dist/cjs/resources/a2a.js.map +1 -0
  26. package/dist/cjs/resources/agents.js +142 -0
  27. package/dist/cjs/resources/agents.js.map +1 -0
  28. package/dist/cjs/resources/base.js +124 -0
  29. package/dist/cjs/resources/base.js.map +1 -0
  30. package/dist/cjs/resources/cards.js +43 -0
  31. package/dist/cjs/resources/cards.js.map +1 -0
  32. package/dist/cjs/resources/holds.js +64 -0
  33. package/dist/cjs/resources/holds.js.map +1 -0
  34. package/dist/cjs/resources/index.js +31 -0
  35. package/dist/cjs/resources/index.js.map +1 -0
  36. package/dist/cjs/resources/ledger.js +43 -0
  37. package/dist/cjs/resources/ledger.js.map +1 -0
  38. package/dist/cjs/resources/marketplace.js +88 -0
  39. package/dist/cjs/resources/marketplace.js.map +1 -0
  40. package/dist/cjs/resources/payments.js +33 -0
  41. package/dist/cjs/resources/payments.js.map +1 -0
  42. package/dist/cjs/resources/policies.js +31 -0
  43. package/dist/cjs/resources/policies.js.map +1 -0
  44. package/dist/cjs/resources/transactions.js +37 -0
  45. package/dist/cjs/resources/transactions.js.map +1 -0
  46. package/dist/cjs/resources/ucp.js +133 -0
  47. package/dist/cjs/resources/ucp.js.map +1 -0
  48. package/dist/cjs/resources/wallets.js +109 -0
  49. package/dist/cjs/resources/wallets.js.map +1 -0
  50. package/dist/cjs/resources/webhooks.js +81 -0
  51. package/dist/cjs/resources/webhooks.js.map +1 -0
  52. package/dist/cjs/types.js +11 -0
  53. package/dist/cjs/types.js.map +1 -0
  54. package/dist/client.d.ts +419 -0
  55. package/dist/client.d.ts.map +1 -0
  56. package/dist/client.js +637 -0
  57. package/dist/client.js.map +1 -0
  58. package/dist/demo.d.ts +335 -0
  59. package/dist/demo.d.ts.map +1 -0
  60. package/dist/demo.js +694 -0
  61. package/dist/demo.js.map +1 -0
  62. package/dist/errors.d.ts +522 -0
  63. package/dist/errors.d.ts.map +1 -0
  64. package/dist/errors.js +612 -0
  65. package/dist/errors.js.map +1 -0
  66. package/dist/index.d.ts +83 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +85 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/integrations/index.d.ts +4 -0
  71. package/dist/integrations/index.d.ts.map +1 -0
  72. package/dist/integrations/index.js +5 -0
  73. package/dist/integrations/index.js.map +1 -0
  74. package/dist/integrations/langchain.d.ts +68 -0
  75. package/dist/integrations/langchain.d.ts.map +1 -0
  76. package/dist/integrations/langchain.js +335 -0
  77. package/dist/integrations/langchain.js.map +1 -0
  78. package/dist/integrations/openai.d.ts +97 -0
  79. package/dist/integrations/openai.d.ts.map +1 -0
  80. package/dist/integrations/openai.js +467 -0
  81. package/dist/integrations/openai.js.map +1 -0
  82. package/dist/integrations/vercel-ai.d.ts +180 -0
  83. package/dist/integrations/vercel-ai.d.ts.map +1 -0
  84. package/dist/integrations/vercel-ai.js +194 -0
  85. package/dist/integrations/vercel-ai.js.map +1 -0
  86. package/dist/resources/a2a.d.ts +254 -0
  87. package/dist/resources/a2a.d.ts.map +1 -0
  88. package/dist/resources/a2a.js +154 -0
  89. package/dist/resources/a2a.js.map +1 -0
  90. package/dist/resources/agents.d.ts +111 -0
  91. package/dist/resources/agents.d.ts.map +1 -0
  92. package/dist/resources/agents.js +138 -0
  93. package/dist/resources/agents.js.map +1 -0
  94. package/dist/resources/base.d.ts +115 -0
  95. package/dist/resources/base.d.ts.map +1 -0
  96. package/dist/resources/base.js +120 -0
  97. package/dist/resources/base.js.map +1 -0
  98. package/dist/resources/cards.d.ts +19 -0
  99. package/dist/resources/cards.d.ts.map +1 -0
  100. package/dist/resources/cards.js +39 -0
  101. package/dist/resources/cards.js.map +1 -0
  102. package/dist/resources/holds.d.ts +44 -0
  103. package/dist/resources/holds.d.ts.map +1 -0
  104. package/dist/resources/holds.js +60 -0
  105. package/dist/resources/holds.js.map +1 -0
  106. package/dist/resources/index.d.ts +16 -0
  107. package/dist/resources/index.d.ts.map +1 -0
  108. package/dist/resources/index.js +16 -0
  109. package/dist/resources/index.js.map +1 -0
  110. package/dist/resources/ledger.d.ts +38 -0
  111. package/dist/resources/ledger.d.ts.map +1 -0
  112. package/dist/resources/ledger.js +39 -0
  113. package/dist/resources/ledger.js.map +1 -0
  114. package/dist/resources/marketplace.d.ts +60 -0
  115. package/dist/resources/marketplace.d.ts.map +1 -0
  116. package/dist/resources/marketplace.js +84 -0
  117. package/dist/resources/marketplace.js.map +1 -0
  118. package/dist/resources/payments.d.ts +24 -0
  119. package/dist/resources/payments.d.ts.map +1 -0
  120. package/dist/resources/payments.js +29 -0
  121. package/dist/resources/payments.js.map +1 -0
  122. package/dist/resources/policies.d.ts +23 -0
  123. package/dist/resources/policies.d.ts.map +1 -0
  124. package/dist/resources/policies.js +27 -0
  125. package/dist/resources/policies.js.map +1 -0
  126. package/dist/resources/transactions.d.ts +32 -0
  127. package/dist/resources/transactions.d.ts.map +1 -0
  128. package/dist/resources/transactions.js +33 -0
  129. package/dist/resources/transactions.js.map +1 -0
  130. package/dist/resources/ucp.d.ts +218 -0
  131. package/dist/resources/ucp.d.ts.map +1 -0
  132. package/dist/resources/ucp.js +129 -0
  133. package/dist/resources/ucp.js.map +1 -0
  134. package/dist/resources/wallets.d.ts +71 -0
  135. package/dist/resources/wallets.d.ts.map +1 -0
  136. package/dist/resources/wallets.js +105 -0
  137. package/dist/resources/wallets.js.map +1 -0
  138. package/dist/resources/webhooks.d.ts +57 -0
  139. package/dist/resources/webhooks.d.ts.map +1 -0
  140. package/dist/resources/webhooks.js +77 -0
  141. package/dist/resources/webhooks.js.map +1 -0
  142. package/dist/types.d.ts +1045 -0
  143. package/dist/types.d.ts.map +1 -0
  144. package/dist/types.js +10 -0
  145. package/dist/types.js.map +1 -0
  146. package/package.json +114 -0
@@ -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,4 @@
1
+ export * from './vercel-ai.js';
2
+ export * from './langchain.js';
3
+ export * from './openai.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ // AI Framework Integrations for Sardis SDK
2
+ export * from './vercel-ai.js';
3
+ export * from './langchain.js';
4
+ export * from './openai.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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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"}