@molted/cli 0.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.
Files changed (101) hide show
  1. package/dist/commands/approve.d.ts +8 -0
  2. package/dist/commands/approve.d.ts.map +1 -0
  3. package/dist/commands/approve.js +106 -0
  4. package/dist/commands/approve.js.map +1 -0
  5. package/dist/commands/bids/create.d.ts +8 -0
  6. package/dist/commands/bids/create.d.ts.map +1 -0
  7. package/dist/commands/bids/create.js +70 -0
  8. package/dist/commands/bids/create.js.map +1 -0
  9. package/dist/commands/bids/index.d.ts +8 -0
  10. package/dist/commands/bids/index.d.ts.map +1 -0
  11. package/dist/commands/bids/index.js +11 -0
  12. package/dist/commands/bids/index.js.map +1 -0
  13. package/dist/commands/complete.d.ts +8 -0
  14. package/dist/commands/complete.d.ts.map +1 -0
  15. package/dist/commands/complete.js +82 -0
  16. package/dist/commands/complete.js.map +1 -0
  17. package/dist/commands/init.d.ts +8 -0
  18. package/dist/commands/init.d.ts.map +1 -0
  19. package/dist/commands/init.js +171 -0
  20. package/dist/commands/init.js.map +1 -0
  21. package/dist/commands/jobs/index.d.ts +8 -0
  22. package/dist/commands/jobs/index.d.ts.map +1 -0
  23. package/dist/commands/jobs/index.js +13 -0
  24. package/dist/commands/jobs/index.js.map +1 -0
  25. package/dist/commands/jobs/list.d.ts +8 -0
  26. package/dist/commands/jobs/list.d.ts.map +1 -0
  27. package/dist/commands/jobs/list.js +63 -0
  28. package/dist/commands/jobs/list.js.map +1 -0
  29. package/dist/commands/jobs/view.d.ts +8 -0
  30. package/dist/commands/jobs/view.d.ts.map +1 -0
  31. package/dist/commands/jobs/view.js +62 -0
  32. package/dist/commands/jobs/view.js.map +1 -0
  33. package/dist/commands/status.d.ts +8 -0
  34. package/dist/commands/status.d.ts.map +1 -0
  35. package/dist/commands/status.js +117 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/index.d.ts +8 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +28 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/lib/api-client.d.ts +140 -0
  42. package/dist/lib/api-client.d.ts.map +1 -0
  43. package/dist/lib/api-client.js +169 -0
  44. package/dist/lib/api-client.js.map +1 -0
  45. package/dist/lib/config.d.ts +96 -0
  46. package/dist/lib/config.d.ts.map +1 -0
  47. package/dist/lib/config.js +150 -0
  48. package/dist/lib/config.js.map +1 -0
  49. package/dist/lib/errors.d.ts +36 -0
  50. package/dist/lib/errors.d.ts.map +1 -0
  51. package/dist/lib/errors.js +71 -0
  52. package/dist/lib/errors.js.map +1 -0
  53. package/dist/lib/output.d.ts +79 -0
  54. package/dist/lib/output.d.ts.map +1 -0
  55. package/dist/lib/output.js +155 -0
  56. package/dist/lib/output.js.map +1 -0
  57. package/dist/lib/validation.d.ts +85 -0
  58. package/dist/lib/validation.d.ts.map +1 -0
  59. package/dist/lib/validation.js +60 -0
  60. package/dist/lib/validation.js.map +1 -0
  61. package/dist/lib/wallet/cdp-provider.d.ts +37 -0
  62. package/dist/lib/wallet/cdp-provider.d.ts.map +1 -0
  63. package/dist/lib/wallet/cdp-provider.js +126 -0
  64. package/dist/lib/wallet/cdp-provider.js.map +1 -0
  65. package/dist/lib/wallet/index.d.ts +26 -0
  66. package/dist/lib/wallet/index.d.ts.map +1 -0
  67. package/dist/lib/wallet/index.js +93 -0
  68. package/dist/lib/wallet/index.js.map +1 -0
  69. package/dist/lib/wallet/local-provider.d.ts +26 -0
  70. package/dist/lib/wallet/local-provider.d.ts.map +1 -0
  71. package/dist/lib/wallet/local-provider.js +84 -0
  72. package/dist/lib/wallet/local-provider.js.map +1 -0
  73. package/dist/lib/wallet/types.d.ts +58 -0
  74. package/dist/lib/wallet/types.d.ts.map +1 -0
  75. package/dist/lib/wallet/types.js +41 -0
  76. package/dist/lib/wallet/types.js.map +1 -0
  77. package/dist/lib/x402/client.d.ts +39 -0
  78. package/dist/lib/x402/client.d.ts.map +1 -0
  79. package/dist/lib/x402/client.js +83 -0
  80. package/dist/lib/x402/client.js.map +1 -0
  81. package/dist/test/config.test.d.ts +2 -0
  82. package/dist/test/config.test.d.ts.map +1 -0
  83. package/dist/test/config.test.js +79 -0
  84. package/dist/test/config.test.js.map +1 -0
  85. package/dist/test/errors.test.d.ts +2 -0
  86. package/dist/test/errors.test.d.ts.map +1 -0
  87. package/dist/test/errors.test.js +71 -0
  88. package/dist/test/errors.test.js.map +1 -0
  89. package/dist/test/validation.test.d.ts +2 -0
  90. package/dist/test/validation.test.d.ts.map +1 -0
  91. package/dist/test/validation.test.js +154 -0
  92. package/dist/test/validation.test.js.map +1 -0
  93. package/dist/test/wallet-types.test.d.ts +2 -0
  94. package/dist/test/wallet-types.test.d.ts.map +1 -0
  95. package/dist/test/wallet-types.test.js +36 -0
  96. package/dist/test/wallet-types.test.js.map +1 -0
  97. package/dist/test/x402.test.d.ts +2 -0
  98. package/dist/test/x402.test.d.ts.map +1 -0
  99. package/dist/test/x402.test.js +114 -0
  100. package/dist/test/x402.test.js.map +1 -0
  101. package/package.json +60 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Zod schemas for CLI input validation
3
+ */
4
+ import { z } from "zod";
5
+ export declare const evmAddressSchema: z.ZodString;
6
+ export declare const uuidSchema: z.ZodString;
7
+ export declare const jobStatusSchema: z.ZodEnum<["open", "in_progress", "completed", "rejected", "cancelled"]>;
8
+ export declare const jobSortSchema: z.ZodEnum<["newest", "oldest", "highest_reward", "lowest_reward"]>;
9
+ export declare const registerAgentSchema: z.ZodObject<{
10
+ name: z.ZodString;
11
+ description: z.ZodOptional<z.ZodString>;
12
+ wallet_address: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ name: string;
15
+ wallet_address?: string | undefined;
16
+ description?: string | undefined;
17
+ }, {
18
+ name: string;
19
+ wallet_address?: string | undefined;
20
+ description?: string | undefined;
21
+ }>;
22
+ export declare const createBidSchema: z.ZodObject<{
23
+ job_id: z.ZodString;
24
+ message: z.ZodOptional<z.ZodString>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ job_id: string;
27
+ message?: string | undefined;
28
+ }, {
29
+ job_id: string;
30
+ message?: string | undefined;
31
+ }>;
32
+ export declare const submitCompletionSchema: z.ZodObject<{
33
+ job_id: z.ZodString;
34
+ proof_text: z.ZodString;
35
+ }, "strip", z.ZodTypeAny, {
36
+ job_id: string;
37
+ proof_text: string;
38
+ }, {
39
+ job_id: string;
40
+ proof_text: string;
41
+ }>;
42
+ export declare const approveSchema: z.ZodObject<{
43
+ job_id: z.ZodString;
44
+ approved: z.ZodBoolean;
45
+ }, "strip", z.ZodTypeAny, {
46
+ job_id: string;
47
+ approved: boolean;
48
+ }, {
49
+ job_id: string;
50
+ approved: boolean;
51
+ }>;
52
+ export declare const listJobsQuerySchema: z.ZodObject<{
53
+ search: z.ZodOptional<z.ZodString>;
54
+ status: z.ZodOptional<z.ZodEnum<["open", "in_progress", "completed", "rejected", "cancelled"]>>;
55
+ min_reward: z.ZodOptional<z.ZodNumber>;
56
+ max_reward: z.ZodOptional<z.ZodNumber>;
57
+ sort: z.ZodDefault<z.ZodEnum<["newest", "oldest", "highest_reward", "lowest_reward"]>>;
58
+ limit: z.ZodDefault<z.ZodNumber>;
59
+ offset: z.ZodDefault<z.ZodNumber>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ sort: "newest" | "oldest" | "highest_reward" | "lowest_reward";
62
+ limit: number;
63
+ offset: number;
64
+ status?: "open" | "in_progress" | "completed" | "rejected" | "cancelled" | undefined;
65
+ search?: string | undefined;
66
+ min_reward?: number | undefined;
67
+ max_reward?: number | undefined;
68
+ }, {
69
+ status?: "open" | "in_progress" | "completed" | "rejected" | "cancelled" | undefined;
70
+ sort?: "newest" | "oldest" | "highest_reward" | "lowest_reward" | undefined;
71
+ search?: string | undefined;
72
+ min_reward?: number | undefined;
73
+ max_reward?: number | undefined;
74
+ limit?: number | undefined;
75
+ offset?: number | undefined;
76
+ }>;
77
+ export type EVMAddress = z.infer<typeof evmAddressSchema>;
78
+ export type JobStatus = z.infer<typeof jobStatusSchema>;
79
+ export type JobSort = z.infer<typeof jobSortSchema>;
80
+ export type RegisterAgentInput = z.infer<typeof registerAgentSchema>;
81
+ export type CreateBidInput = z.infer<typeof createBidSchema>;
82
+ export type SubmitCompletionInput = z.infer<typeof submitCompletionSchema>;
83
+ export type ApproveInput = z.infer<typeof approveSchema>;
84
+ export type ListJobsQuery = z.infer<typeof listJobsQuerySchema>;
85
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB,aAEgC,CAAC;AAG9D,eAAO,MAAM,UAAU,aAAyC,CAAC;AAGjE,eAAO,MAAM,eAAe,0EAM1B,CAAC;AAGH,eAAO,MAAM,aAAa,oEAKxB,CAAC;AAGH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAC;AAGH,eAAO,MAAM,sBAAsB;;;;;;;;;EAMjC,CAAC;AAGH,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAGH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;EAQ9B,CAAC;AAGH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC7D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC3E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACzD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Zod schemas for CLI input validation
3
+ */
4
+ import { z } from "zod";
5
+ // EVM address validation
6
+ export const evmAddressSchema = z
7
+ .string()
8
+ .regex(/^0x[a-fA-F0-9]{40}$/, "Invalid EVM address format");
9
+ // UUID validation
10
+ export const uuidSchema = z.string().uuid("Invalid UUID format");
11
+ // Job status enum
12
+ export const jobStatusSchema = z.enum([
13
+ "open",
14
+ "in_progress",
15
+ "completed",
16
+ "rejected",
17
+ "cancelled",
18
+ ]);
19
+ // Job sort options
20
+ export const jobSortSchema = z.enum([
21
+ "newest",
22
+ "oldest",
23
+ "highest_reward",
24
+ "lowest_reward",
25
+ ]);
26
+ // Agent registration schema
27
+ export const registerAgentSchema = z.object({
28
+ name: z.string().min(1, "Name is required").max(100, "Name too long"),
29
+ description: z.string().max(500, "Description too long").optional(),
30
+ wallet_address: evmAddressSchema.optional(),
31
+ });
32
+ // Bid creation schema
33
+ export const createBidSchema = z.object({
34
+ job_id: uuidSchema,
35
+ message: z.string().max(1000, "Message too long").optional(),
36
+ });
37
+ // Completion submission schema
38
+ export const submitCompletionSchema = z.object({
39
+ job_id: uuidSchema,
40
+ proof_text: z
41
+ .string()
42
+ .min(1, "Proof is required")
43
+ .max(10000, "Proof too long"),
44
+ });
45
+ // Approval schema
46
+ export const approveSchema = z.object({
47
+ job_id: uuidSchema,
48
+ approved: z.boolean(),
49
+ });
50
+ // Jobs list query schema
51
+ export const listJobsQuerySchema = z.object({
52
+ search: z.string().max(200).optional(),
53
+ status: jobStatusSchema.optional(),
54
+ min_reward: z.number().nonnegative().optional(),
55
+ max_reward: z.number().positive().optional(),
56
+ sort: jobSortSchema.default("newest"),
57
+ limit: z.number().int().positive().max(100).default(20),
58
+ offset: z.number().int().nonnegative().default(0),
59
+ });
60
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yBAAyB;AACzB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,4BAA4B,CAAC,CAAC;AAE9D,kBAAkB;AAClB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAEjE,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,MAAM;IACN,aAAa;IACb,WAAW;IACX,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,QAAQ;IACR,QAAQ;IACR,gBAAgB;IAChB,eAAe;CAChB,CAAC,CAAC;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC;IACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IACnE,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAEH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC;SAC3B,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC;CAChC,CAAC,CAAC;AAEH,kBAAkB;AAClB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;CACtB,CAAC,CAAC;AAEH,yBAAyB;AACzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAClD,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * CDP (Coinbase Developer Platform) Wallet Provider
3
+ *
4
+ * Uses @coinbase/coinbase-sdk to manage wallets and sign transactions.
5
+ */
6
+ import type { WalletProvider, SendUSDCParams } from "./types.js";
7
+ export interface CDPProviderOptions {
8
+ keyName: string;
9
+ privateKey: string;
10
+ walletId?: string;
11
+ network?: "base" | "base-sepolia";
12
+ }
13
+ export declare class CDPProvider implements WalletProvider {
14
+ private options;
15
+ readonly type: "cdp";
16
+ private wallet;
17
+ private walletId?;
18
+ private network;
19
+ private _address;
20
+ constructor(options: CDPProviderOptions);
21
+ get address(): `0x${string}`;
22
+ /**
23
+ * Initialize the CDP SDK and wallet
24
+ */
25
+ initialize(): Promise<void>;
26
+ /**
27
+ * Get the CDP wallet ID (for saving to config)
28
+ */
29
+ getWalletId(): string | undefined;
30
+ sendUSDC(params: SendUSDCParams): Promise<`0x${string}`>;
31
+ getUSDCBalance(): Promise<bigint>;
32
+ }
33
+ /**
34
+ * Create and initialize a CDP wallet provider
35
+ */
36
+ export declare function createCDPProvider(options: CDPProviderOptions): Promise<CDPProvider>;
37
+ //# sourceMappingURL=cdp-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-provider.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/cdp-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;CACnC;AAED,qBAAa,WAAY,YAAW,cAAc;IAOpC,OAAO,CAAC,OAAO;IAN3B,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAA8B;gBAE1B,OAAO,EAAE,kBAAkB;IAK/C,IAAI,OAAO,IAAI,KAAK,MAAM,EAAE,CAK3B;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCjC;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,SAAS;IAI3B,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;IAgCxD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAwBxC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAItB"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * CDP (Coinbase Developer Platform) Wallet Provider
3
+ *
4
+ * Uses @coinbase/coinbase-sdk to manage wallets and sign transactions.
5
+ */
6
+ import { Coinbase, Wallet } from "@coinbase/coinbase-sdk";
7
+ import { getUSDCAddress } from "./types.js";
8
+ import { PaymentError } from "../errors.js";
9
+ export class CDPProvider {
10
+ options;
11
+ type = "cdp";
12
+ wallet = null;
13
+ walletId;
14
+ network;
15
+ _address = null;
16
+ constructor(options) {
17
+ this.options = options;
18
+ this.walletId = options.walletId;
19
+ this.network = options.network || "base-sepolia";
20
+ }
21
+ get address() {
22
+ if (!this._address) {
23
+ throw new PaymentError("CDP wallet not initialized. Call initialize() first.");
24
+ }
25
+ return this._address;
26
+ }
27
+ /**
28
+ * Initialize the CDP SDK and wallet
29
+ */
30
+ async initialize() {
31
+ try {
32
+ // Configure CDP SDK
33
+ Coinbase.configure({
34
+ apiKeyName: this.options.keyName,
35
+ privateKey: this.options.privateKey,
36
+ });
37
+ // Get or create wallet
38
+ if (this.walletId) {
39
+ // Load existing wallet
40
+ this.wallet = await Wallet.fetch(this.walletId);
41
+ }
42
+ else {
43
+ // Create new wallet
44
+ const networkId = this.network === "base" ? Coinbase.networks.BaseMainnet : Coinbase.networks.BaseSepolia;
45
+ this.wallet = await Wallet.create({ networkId });
46
+ this.walletId = this.wallet.getId() ?? undefined;
47
+ }
48
+ // Get default address
49
+ const defaultAddress = await this.wallet.getDefaultAddress();
50
+ if (!defaultAddress) {
51
+ throw new PaymentError("Failed to get wallet address");
52
+ }
53
+ this._address = defaultAddress.getId();
54
+ }
55
+ catch (error) {
56
+ if (error instanceof PaymentError) {
57
+ throw error;
58
+ }
59
+ throw new PaymentError(`Failed to initialize CDP wallet: ${error.message}`);
60
+ }
61
+ }
62
+ /**
63
+ * Get the CDP wallet ID (for saving to config)
64
+ */
65
+ getWalletId() {
66
+ return this.walletId;
67
+ }
68
+ async sendUSDC(params) {
69
+ if (!this.wallet) {
70
+ throw new PaymentError("CDP wallet not initialized");
71
+ }
72
+ try {
73
+ const usdcAddress = getUSDCAddress(params.chainId);
74
+ // Create and send the transfer
75
+ const transfer = await this.wallet.createTransfer({
76
+ amount: params.amount,
77
+ assetId: usdcAddress,
78
+ destination: params.to,
79
+ });
80
+ // Wait for transfer to complete
81
+ await transfer.wait();
82
+ const txHash = transfer.getTransactionHash();
83
+ if (!txHash) {
84
+ throw new PaymentError("Transfer completed but no transaction hash returned");
85
+ }
86
+ return txHash;
87
+ }
88
+ catch (error) {
89
+ if (error instanceof PaymentError) {
90
+ throw error;
91
+ }
92
+ throw new PaymentError(`USDC transfer failed: ${error.message}`);
93
+ }
94
+ }
95
+ async getUSDCBalance() {
96
+ if (!this.wallet) {
97
+ throw new PaymentError("CDP wallet not initialized");
98
+ }
99
+ try {
100
+ // Get the balance using CDP SDK
101
+ const balances = await this.wallet.listBalances();
102
+ // Find USDC balance
103
+ // CDP SDK returns balance as a Decimal object
104
+ for (const [assetId, balance] of balances) {
105
+ if (assetId.toLowerCase() === "usdc") {
106
+ // Convert to base units (6 decimals)
107
+ const balanceNum = Number(balance);
108
+ return BigInt(Math.floor(balanceNum * 10 ** 6));
109
+ }
110
+ }
111
+ return BigInt(0);
112
+ }
113
+ catch (error) {
114
+ throw new PaymentError(`Failed to get USDC balance: ${error.message}`);
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Create and initialize a CDP wallet provider
120
+ */
121
+ export async function createCDPProvider(options) {
122
+ const provider = new CDPProvider(options);
123
+ await provider.initialize();
124
+ return provider;
125
+ }
126
+ //# sourceMappingURL=cdp-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp-provider.js","sourceRoot":"","sources":["../../../src/lib/wallet/cdp-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Wallet Provider Factory
3
+ *
4
+ * Creates the appropriate wallet provider based on configuration and environment.
5
+ */
6
+ import type { WalletProvider } from "./types.js";
7
+ import { type Config } from "../config.js";
8
+ export type { WalletProvider, SendUSDCParams } from "./types.js";
9
+ export { CDPProvider, createCDPProvider, type CDPProviderOptions } from "./cdp-provider.js";
10
+ export { LocalProvider, createLocalProvider, type LocalProviderOptions } from "./local-provider.js";
11
+ /**
12
+ * Create a wallet provider from config
13
+ */
14
+ export declare function createWalletFromConfig(config: Config): Promise<WalletProvider>;
15
+ /**
16
+ * Create a new wallet for initialization
17
+ */
18
+ export declare function createNewWallet(type: "cdp" | "local", network: "base" | "base-sepolia"): Promise<{
19
+ provider: WalletProvider;
20
+ walletId?: string;
21
+ }>;
22
+ /**
23
+ * Validate wallet provider can be created from config
24
+ */
25
+ export declare function validateWalletConfig(config: Config): void;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAyC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAGlF,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEpG;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkCpF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,KAAK,GAAG,OAAO,EACrB,OAAO,EAAE,MAAM,GAAG,cAAc,GAC/B,OAAO,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CAsCD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAkBzD"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Wallet Provider Factory
3
+ *
4
+ * Creates the appropriate wallet provider based on configuration and environment.
5
+ */
6
+ import { createCDPProvider } from "./cdp-provider.js";
7
+ import { createLocalProvider } from "./local-provider.js";
8
+ import { getCDPCredentials, getLocalPrivateKey } from "../config.js";
9
+ import { ConfigError } from "../errors.js";
10
+ export { CDPProvider, createCDPProvider } from "./cdp-provider.js";
11
+ export { LocalProvider, createLocalProvider } from "./local-provider.js";
12
+ /**
13
+ * Create a wallet provider from config
14
+ */
15
+ export async function createWalletFromConfig(config) {
16
+ const network = config.network;
17
+ if (config.wallet_type === "cdp") {
18
+ const credentials = getCDPCredentials();
19
+ if (!credentials) {
20
+ throw new ConfigError("CDP credentials not found. Set CDP_API_KEY_NAME and CDP_API_KEY_PRIVATE_KEY environment variables.");
21
+ }
22
+ return createCDPProvider({
23
+ keyName: credentials.keyName,
24
+ privateKey: credentials.privateKey,
25
+ walletId: config.wallet_id,
26
+ network,
27
+ });
28
+ }
29
+ if (config.wallet_type === "local") {
30
+ const privateKey = getLocalPrivateKey();
31
+ if (!privateKey) {
32
+ throw new ConfigError("Local wallet private key not found. Set MOLTED_PRIVATE_KEY environment variable.");
33
+ }
34
+ return createLocalProvider({
35
+ privateKey: privateKey,
36
+ network,
37
+ });
38
+ }
39
+ throw new ConfigError(`Unknown wallet type: ${config.wallet_type}`);
40
+ }
41
+ /**
42
+ * Create a new wallet for initialization
43
+ */
44
+ export async function createNewWallet(type, network) {
45
+ if (type === "cdp") {
46
+ const credentials = getCDPCredentials();
47
+ if (!credentials) {
48
+ throw new ConfigError("CDP credentials required. Set CDP_API_KEY_NAME and CDP_API_KEY_PRIVATE_KEY environment variables.");
49
+ }
50
+ const provider = await createCDPProvider({
51
+ keyName: credentials.keyName,
52
+ privateKey: credentials.privateKey,
53
+ network,
54
+ });
55
+ return {
56
+ provider,
57
+ walletId: provider.getWalletId(),
58
+ };
59
+ }
60
+ if (type === "local") {
61
+ const privateKey = getLocalPrivateKey();
62
+ if (!privateKey) {
63
+ throw new ConfigError("Local wallet private key required. Set MOLTED_PRIVATE_KEY environment variable.");
64
+ }
65
+ const provider = createLocalProvider({
66
+ privateKey: privateKey,
67
+ network,
68
+ });
69
+ return { provider };
70
+ }
71
+ throw new ConfigError(`Unknown wallet type: ${type}`);
72
+ }
73
+ /**
74
+ * Validate wallet provider can be created from config
75
+ */
76
+ export function validateWalletConfig(config) {
77
+ if (config.wallet_type === "cdp") {
78
+ const credentials = getCDPCredentials();
79
+ if (!credentials) {
80
+ throw new ConfigError("CDP credentials not found. Set CDP_API_KEY_NAME and CDP_API_KEY_PRIVATE_KEY environment variables.");
81
+ }
82
+ }
83
+ else if (config.wallet_type === "local") {
84
+ const privateKey = getLocalPrivateKey();
85
+ if (!privateKey) {
86
+ throw new ConfigError("Local wallet private key not found. Set MOLTED_PRIVATE_KEY environment variable.");
87
+ }
88
+ }
89
+ else {
90
+ throw new ConfigError(`Unknown wallet type: ${config.wallet_type}`);
91
+ }
92
+ }
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/wallet/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Local Wallet Provider
3
+ *
4
+ * Uses viem to manage a local private key wallet.
5
+ */
6
+ import type { WalletProvider, SendUSDCParams } from "./types.js";
7
+ export interface LocalProviderOptions {
8
+ privateKey: `0x${string}`;
9
+ network?: "base" | "base-sepolia";
10
+ rpcUrl?: string;
11
+ }
12
+ export declare class LocalProvider implements WalletProvider {
13
+ readonly type: "local";
14
+ readonly address: `0x${string}`;
15
+ private account;
16
+ private publicClient;
17
+ private chain;
18
+ constructor(options: LocalProviderOptions);
19
+ sendUSDC(params: SendUSDCParams): Promise<`0x${string}`>;
20
+ getUSDCBalance(): Promise<bigint>;
21
+ }
22
+ /**
23
+ * Create a local wallet provider
24
+ */
25
+ export declare function createLocalProvider(options: LocalProviderOptions): LocalProvider;
26
+ //# sourceMappingURL=local-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-provider.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/local-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjE,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAQ;gBAET,OAAO,EAAE,oBAAoB;IAgBnC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;IAsCxD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAgBxC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAEf"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Local Wallet Provider
3
+ *
4
+ * Uses viem to manage a local private key wallet.
5
+ */
6
+ import { createWalletClient, createPublicClient, http, } from "viem";
7
+ import { privateKeyToAccount } from "viem/accounts";
8
+ import { base, baseSepolia } from "viem/chains";
9
+ import { getUSDCAddress, ERC20_ABI } from "./types.js";
10
+ import { PaymentError } from "../errors.js";
11
+ export class LocalProvider {
12
+ type = "local";
13
+ address;
14
+ account;
15
+ publicClient;
16
+ chain;
17
+ constructor(options) {
18
+ const { privateKey, network = "base-sepolia", rpcUrl } = options;
19
+ // Get chain config
20
+ this.chain = network === "base" ? base : baseSepolia;
21
+ // Create account from private key
22
+ this.account = privateKeyToAccount(privateKey);
23
+ this.address = this.account.address;
24
+ this.publicClient = createPublicClient({
25
+ chain: this.chain,
26
+ transport: http(rpcUrl),
27
+ });
28
+ }
29
+ async sendUSDC(params) {
30
+ try {
31
+ const usdcAddress = getUSDCAddress(params.chainId);
32
+ // Create wallet client for this transaction
33
+ const walletClient = createWalletClient({
34
+ account: this.account,
35
+ chain: this.chain,
36
+ transport: http(),
37
+ });
38
+ // Send ERC20 transfer
39
+ const hash = await walletClient.writeContract({
40
+ address: usdcAddress,
41
+ abi: ERC20_ABI,
42
+ functionName: "transfer",
43
+ args: [params.to, params.amount],
44
+ });
45
+ // Wait for transaction to be mined
46
+ const receipt = await this.publicClient.waitForTransactionReceipt({
47
+ hash,
48
+ confirmations: 1,
49
+ });
50
+ if (receipt.status !== "success") {
51
+ throw new PaymentError("USDC transfer transaction failed");
52
+ }
53
+ return hash;
54
+ }
55
+ catch (error) {
56
+ if (error instanceof PaymentError) {
57
+ throw error;
58
+ }
59
+ throw new PaymentError(`USDC transfer failed: ${error.message}`);
60
+ }
61
+ }
62
+ async getUSDCBalance() {
63
+ try {
64
+ const usdcAddress = getUSDCAddress(this.chain.id);
65
+ const balance = await this.publicClient.readContract({
66
+ address: usdcAddress,
67
+ abi: ERC20_ABI,
68
+ functionName: "balanceOf",
69
+ args: [this.address],
70
+ });
71
+ return balance;
72
+ }
73
+ catch (error) {
74
+ throw new PaymentError(`Failed to get USDC balance: ${error.message}`);
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Create a local wallet provider
80
+ */
81
+ export function createLocalProvider(options) {
82
+ return new LocalProvider(options);
83
+ }
84
+ //# sourceMappingURL=local-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-provider.js","sourceRoot":"","sources":["../../../src/lib/wallet/local-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Wallet Provider Interface
3
+ *
4
+ * Defines the interface that wallet providers must implement.
5
+ */
6
+ export interface SendUSDCParams {
7
+ to: `0x${string}`;
8
+ amount: bigint;
9
+ chainId: number;
10
+ }
11
+ export interface WalletProvider {
12
+ readonly type: "cdp" | "local";
13
+ readonly address: `0x${string}`;
14
+ /**
15
+ * Send USDC to an address
16
+ * @returns Transaction hash
17
+ */
18
+ sendUSDC(params: SendUSDCParams): Promise<`0x${string}`>;
19
+ /**
20
+ * Get USDC balance of the wallet
21
+ * @returns Balance in base units (6 decimals)
22
+ */
23
+ getUSDCBalance(): Promise<bigint>;
24
+ }
25
+ export declare const USDC_ADDRESSES: Record<number, `0x${string}`>;
26
+ /**
27
+ * Get USDC contract address for a chain
28
+ */
29
+ export declare function getUSDCAddress(chainId: number): `0x${string}`;
30
+ export declare const ERC20_ABI: readonly [{
31
+ readonly name: "transfer";
32
+ readonly type: "function";
33
+ readonly stateMutability: "nonpayable";
34
+ readonly inputs: readonly [{
35
+ readonly name: "to";
36
+ readonly type: "address";
37
+ }, {
38
+ readonly name: "amount";
39
+ readonly type: "uint256";
40
+ }];
41
+ readonly outputs: readonly [{
42
+ readonly name: "";
43
+ readonly type: "bool";
44
+ }];
45
+ }, {
46
+ readonly name: "balanceOf";
47
+ readonly type: "function";
48
+ readonly stateMutability: "view";
49
+ readonly inputs: readonly [{
50
+ readonly name: "account";
51
+ readonly type: "address";
52
+ }];
53
+ readonly outputs: readonly [{
54
+ readonly name: "";
55
+ readonly type: "uint256";
56
+ }];
57
+ }];
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/wallet/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IAEhC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAEzD;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC;AAGD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAGxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAM7D;AAGD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBZ,CAAC"}