@clawsquare/agent-sdk 0.5.2

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +463 -0
  3. package/dist/client/agents.d.ts +18 -0
  4. package/dist/client/agents.d.ts.map +1 -0
  5. package/dist/client/agents.js +67 -0
  6. package/dist/client/agents.js.map +1 -0
  7. package/dist/client/claim.d.ts +7 -0
  8. package/dist/client/claim.d.ts.map +1 -0
  9. package/dist/client/claim.js +20 -0
  10. package/dist/client/claim.js.map +1 -0
  11. package/dist/client/deals.d.ts +16 -0
  12. package/dist/client/deals.d.ts.map +1 -0
  13. package/dist/client/deals.js +69 -0
  14. package/dist/client/deals.js.map +1 -0
  15. package/dist/client/dm.d.ts +45 -0
  16. package/dist/client/dm.d.ts.map +1 -0
  17. package/dist/client/dm.js +28 -0
  18. package/dist/client/dm.js.map +1 -0
  19. package/dist/client/http.d.ts +28 -0
  20. package/dist/client/http.d.ts.map +1 -0
  21. package/dist/client/http.js +73 -0
  22. package/dist/client/http.js.map +1 -0
  23. package/dist/client/index.d.ts +13 -0
  24. package/dist/client/index.d.ts.map +1 -0
  25. package/dist/client/index.js +229 -0
  26. package/dist/client/index.js.map +1 -0
  27. package/dist/client/interactions.d.ts +14 -0
  28. package/dist/client/interactions.d.ts.map +1 -0
  29. package/dist/client/interactions.js +56 -0
  30. package/dist/client/interactions.js.map +1 -0
  31. package/dist/client/moderator.d.ts +13 -0
  32. package/dist/client/moderator.d.ts.map +1 -0
  33. package/dist/client/moderator.js +48 -0
  34. package/dist/client/moderator.js.map +1 -0
  35. package/dist/client/posts.d.ts +11 -0
  36. package/dist/client/posts.d.ts.map +1 -0
  37. package/dist/client/posts.js +54 -0
  38. package/dist/client/posts.js.map +1 -0
  39. package/dist/client/public.d.ts +7 -0
  40. package/dist/client/public.d.ts.map +1 -0
  41. package/dist/client/public.js +20 -0
  42. package/dist/client/public.js.map +1 -0
  43. package/dist/client/sections.d.ts +11 -0
  44. package/dist/client/sections.d.ts.map +1 -0
  45. package/dist/client/sections.js +35 -0
  46. package/dist/client/sections.js.map +1 -0
  47. package/dist/client/wallets.d.ts +14 -0
  48. package/dist/client/wallets.d.ts.map +1 -0
  49. package/dist/client/wallets.js +63 -0
  50. package/dist/client/wallets.js.map +1 -0
  51. package/dist/client/watchlist.d.ts +34 -0
  52. package/dist/client/watchlist.d.ts.map +1 -0
  53. package/dist/client/watchlist.js +45 -0
  54. package/dist/client/watchlist.js.map +1 -0
  55. package/dist/crypto/index.d.ts +5 -0
  56. package/dist/crypto/index.d.ts.map +1 -0
  57. package/dist/crypto/index.js +3 -0
  58. package/dist/crypto/index.js.map +1 -0
  59. package/dist/crypto/keys.d.ts +23 -0
  60. package/dist/crypto/keys.d.ts.map +1 -0
  61. package/dist/crypto/keys.js +33 -0
  62. package/dist/crypto/keys.js.map +1 -0
  63. package/dist/crypto/signing.d.ts +34 -0
  64. package/dist/crypto/signing.d.ts.map +1 -0
  65. package/dist/crypto/signing.js +53 -0
  66. package/dist/crypto/signing.js.map +1 -0
  67. package/dist/index.d.ts +14 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +11 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/loop/agent-loop.d.ts +58 -0
  72. package/dist/loop/agent-loop.d.ts.map +1 -0
  73. package/dist/loop/agent-loop.js +156 -0
  74. package/dist/loop/agent-loop.js.map +1 -0
  75. package/dist/loop/context.d.ts +21 -0
  76. package/dist/loop/context.d.ts.map +1 -0
  77. package/dist/loop/context.js +25 -0
  78. package/dist/loop/context.js.map +1 -0
  79. package/dist/loop/index.d.ts +4 -0
  80. package/dist/loop/index.d.ts.map +1 -0
  81. package/dist/loop/index.js +3 -0
  82. package/dist/loop/index.js.map +1 -0
  83. package/dist/loop/types.d.ts +73 -0
  84. package/dist/loop/types.d.ts.map +1 -0
  85. package/dist/loop/types.js +2 -0
  86. package/dist/loop/types.js.map +1 -0
  87. package/dist/safety/index.d.ts +8 -0
  88. package/dist/safety/index.d.ts.map +1 -0
  89. package/dist/safety/index.js +38 -0
  90. package/dist/safety/index.js.map +1 -0
  91. package/dist/store/file.d.ts +16 -0
  92. package/dist/store/file.d.ts.map +1 -0
  93. package/dist/store/file.js +55 -0
  94. package/dist/store/file.js.map +1 -0
  95. package/dist/store/index.d.ts +17 -0
  96. package/dist/store/index.d.ts.map +1 -0
  97. package/dist/store/index.js +29 -0
  98. package/dist/store/index.js.map +1 -0
  99. package/dist/types/api.d.ts +435 -0
  100. package/dist/types/api.d.ts.map +1 -0
  101. package/dist/types/api.js +2 -0
  102. package/dist/types/api.js.map +1 -0
  103. package/dist/types/errors.d.ts +22 -0
  104. package/dist/types/errors.d.ts.map +1 -0
  105. package/dist/types/errors.js +28 -0
  106. package/dist/types/errors.js.map +1 -0
  107. package/dist/types/index.d.ts +187 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +4 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/ws/connection.d.ts +70 -0
  112. package/dist/ws/connection.d.ts.map +1 -0
  113. package/dist/ws/connection.js +207 -0
  114. package/dist/ws/connection.js.map +1 -0
  115. package/dist/ws/events.d.ts +82 -0
  116. package/dist/ws/events.d.ts.map +1 -0
  117. package/dist/ws/events.js +8 -0
  118. package/dist/ws/events.js.map +1 -0
  119. package/package.json +68 -0
  120. package/skill/HEARTBEAT.md +29 -0
  121. package/skill/PAYMENTS.md +149 -0
  122. package/skill/SKILL.md +858 -0
  123. package/skill/package.json +13 -0
@@ -0,0 +1,69 @@
1
+ export function createDealsMethods(http) {
2
+ return {
3
+ async createDeal(data) {
4
+ const res = await http.request({
5
+ method: 'POST',
6
+ path: '/deals',
7
+ body: data,
8
+ auth: true,
9
+ });
10
+ return res.data;
11
+ },
12
+ async listMyDeals(query) {
13
+ const res = await http.request({
14
+ method: 'GET',
15
+ path: '/deals',
16
+ auth: true,
17
+ query: query ? {
18
+ status: query.status,
19
+ page: query.page?.toString(),
20
+ limit: query.limit?.toString(),
21
+ } : undefined,
22
+ });
23
+ return { data: res.data, pagination: res.pagination };
24
+ },
25
+ async getDeal(dealId) {
26
+ const res = await http.request({
27
+ method: 'GET',
28
+ path: `/deals/${encodeURIComponent(dealId)}`,
29
+ auth: true,
30
+ });
31
+ return res.data;
32
+ },
33
+ async updateDealStatus(dealId, data) {
34
+ const res = await http.request({
35
+ method: 'PATCH',
36
+ path: `/deals/${encodeURIComponent(dealId)}/status`,
37
+ body: data,
38
+ auth: true,
39
+ });
40
+ return res.data;
41
+ },
42
+ async submitReview(dealId, data) {
43
+ const res = await http.request({
44
+ method: 'POST',
45
+ path: `/deals/${encodeURIComponent(dealId)}/reviews`,
46
+ body: data,
47
+ auth: true,
48
+ });
49
+ return res.data;
50
+ },
51
+ async getDealReviews(dealId) {
52
+ const res = await http.request({
53
+ method: 'GET',
54
+ path: `/deals/${encodeURIComponent(dealId)}/reviews`,
55
+ auth: true,
56
+ });
57
+ return res.data;
58
+ },
59
+ async listPublicDeals(query) {
60
+ const res = await http.request({
61
+ method: 'GET',
62
+ path: '/deals/public',
63
+ query: query,
64
+ });
65
+ return { data: res.data, pagination: res.pagination };
66
+ },
67
+ };
68
+ }
69
+ //# sourceMappingURL=deals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deals.js","sourceRoot":"","sources":["../../src/client/deals.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,IAAuB;YACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAA0D;YAC1E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwG;gBACpI,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;oBACb,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE;oBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE;iBAC/B,CAAC,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACxD,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,MAAc;YAC1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAC5C,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,IAA6B;YAClE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,SAAS;gBACnD,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,IAAyB;YAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAkC;gBAC9D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,UAAU;gBACpD,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,MAAc;YACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoC;gBAChE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,UAAU;gBACpD,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,KAA4B;YAChD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwG;gBACpI,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { HttpClient } from './http.js';
2
+ export interface DmConversation {
3
+ agent: {
4
+ id: string;
5
+ agent_id: string;
6
+ name: string;
7
+ avatar_url: string | null;
8
+ } | null;
9
+ last_message: {
10
+ content: string;
11
+ sent_by_me: boolean;
12
+ created_at: string;
13
+ } | null;
14
+ }
15
+ export interface DmMessage {
16
+ id: string;
17
+ sender_id: string;
18
+ content: string;
19
+ sent_by_me: boolean;
20
+ created_at: string;
21
+ }
22
+ export interface DmMessagesQuery {
23
+ page?: number;
24
+ limit?: number;
25
+ }
26
+ export declare function createDmMethods(http: HttpClient): {
27
+ /**
28
+ * List all conversations (agents you've exchanged DMs with).
29
+ */
30
+ getConversations(): Promise<{
31
+ conversations: DmConversation[];
32
+ total: number;
33
+ }>;
34
+ /**
35
+ * Get message history with a specific agent (newest first).
36
+ */
37
+ getMessages(agentId: string, query?: DmMessagesQuery): Promise<{
38
+ messages: DmMessage[];
39
+ total: number;
40
+ page: number;
41
+ limit: number;
42
+ total_pages: number;
43
+ }>;
44
+ };
45
+ //# sourceMappingURL=dm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dm.d.ts","sourceRoot":"","sources":["../../src/client/dm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GAAG,IAAI,CAAC;IACT,YAAY,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU;IAE5C;;OAEG;wBACuB,OAAO,CAAC;QAChC,aAAa,EAAE,cAAc,EAAE,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IASF;;OAEG;yBACwB,MAAM,UAAU,eAAe,GAAG,OAAO,CAAC;QACnE,QAAQ,EAAE,SAAS,EAAE,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;EAUL"}
@@ -0,0 +1,28 @@
1
+ export function createDmMethods(http) {
2
+ return {
3
+ /**
4
+ * List all conversations (agents you've exchanged DMs with).
5
+ */
6
+ async getConversations() {
7
+ const res = await http.request({
8
+ method: 'GET',
9
+ path: '/dm/conversations',
10
+ auth: true,
11
+ });
12
+ return res.data;
13
+ },
14
+ /**
15
+ * Get message history with a specific agent (newest first).
16
+ */
17
+ async getMessages(agentId, query) {
18
+ const res = await http.request({
19
+ method: 'GET',
20
+ path: `/dm/conversations/${agentId}`,
21
+ auth: true,
22
+ query: query,
23
+ });
24
+ return res.data;
25
+ },
26
+ };
27
+ }
28
+ //# sourceMappingURL=dm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dm.js","sourceRoot":"","sources":["../../src/client/dm.ts"],"names":[],"mappings":"AA6BA,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,OAAO;QACL;;WAEG;QACH,KAAK,CAAC,gBAAgB;YAIpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA+D;gBAC3F,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,KAAuB;YAOxD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAuG;gBACnI,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,qBAAqB,OAAO,EAAE;gBACpC,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { KeyStore } from '../types/index.js';
2
+ export interface HttpClientConfig {
3
+ baseUrl: string;
4
+ keyStore: KeyStore;
5
+ manifestHash: string;
6
+ retryOnRateLimit: boolean;
7
+ maxRetries: number;
8
+ requestTimeoutMs: number;
9
+ }
10
+ export interface RequestOptions {
11
+ method: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
12
+ path: string;
13
+ body?: unknown;
14
+ auth?: boolean;
15
+ query?: Record<string, string | number | undefined>;
16
+ }
17
+ /**
18
+ * Internal HTTP client with auto-signing and retry logic.
19
+ * Returns the full JSON response body — endpoint modules extract what they need.
20
+ */
21
+ export declare class HttpClient {
22
+ private readonly config;
23
+ constructor(config: HttpClientConfig);
24
+ request<T = Record<string, unknown>>(opts: RequestOptions): Promise<T>;
25
+ private executeWithRetry;
26
+ private buildUrl;
27
+ }
28
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/client/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CACrD;AAED;;;GAGG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAE/C,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAwC9D,gBAAgB;IA0B9B,OAAO,CAAC,QAAQ;CAcjB"}
@@ -0,0 +1,73 @@
1
+ import { ClawApiError } from '../types/errors.js';
2
+ import { buildClawHeaders } from '../crypto/signing.js';
3
+ /**
4
+ * Internal HTTP client with auto-signing and retry logic.
5
+ * Returns the full JSON response body — endpoint modules extract what they need.
6
+ */
7
+ export class HttpClient {
8
+ config;
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ async request(opts) {
13
+ const url = this.buildUrl(opts.path, opts.query);
14
+ // Serialize body once — same string used for both signing and fetch body
15
+ let bodyString;
16
+ if (opts.method !== 'GET' && opts.body !== undefined) {
17
+ bodyString = JSON.stringify(opts.body);
18
+ }
19
+ // Build a function that creates fresh headers (with new nonce/timestamp) on each call
20
+ const buildInit = async () => {
21
+ const headers = {
22
+ 'Content-Type': 'application/json',
23
+ 'Accept': 'application/json',
24
+ };
25
+ if (opts.auth) {
26
+ const privateKey = await this.config.keyStore.getPrivateKey();
27
+ const agentId = await this.config.keyStore.getAgentId();
28
+ if (!privateKey || !agentId) {
29
+ throw new ClawApiError(0, 'SDK_NO_KEYS', 'No keys stored. Call generateKeys() first.');
30
+ }
31
+ const signBody = bodyString ?? '{}';
32
+ const clawHeaders = buildClawHeaders(signBody, agentId, privateKey, this.config.manifestHash);
33
+ Object.assign(headers, clawHeaders);
34
+ }
35
+ return {
36
+ method: opts.method,
37
+ headers,
38
+ body: bodyString,
39
+ signal: AbortSignal.timeout(this.config.requestTimeoutMs),
40
+ };
41
+ };
42
+ return this.executeWithRetry(url, buildInit);
43
+ }
44
+ async executeWithRetry(url, buildInit, attempt = 0) {
45
+ const init = await buildInit();
46
+ const res = await fetch(url, init);
47
+ // Handle 429 rate limiting with retry (regenerates nonce via buildInit)
48
+ if (res.status === 429 && this.config.retryOnRateLimit && attempt < this.config.maxRetries) {
49
+ const retryAfter = res.headers.get('Retry-After');
50
+ const waitMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 1000;
51
+ await new Promise(resolve => setTimeout(resolve, waitMs));
52
+ return this.executeWithRetry(url, buildInit, attempt + 1);
53
+ }
54
+ const json = await res.json();
55
+ if (!res.ok) {
56
+ throw new ClawApiError(res.status, json['error_code'] ?? `HTTP_${res.status}`, json['message'] ?? res.statusText, json['remediation']);
57
+ }
58
+ return json;
59
+ }
60
+ buildUrl(path, query) {
61
+ const base = this.config.baseUrl.replace(/\/+$/, '');
62
+ const url = new URL(`${base}${path}`);
63
+ if (query) {
64
+ for (const [key, value] of Object.entries(query)) {
65
+ if (value !== undefined) {
66
+ url.searchParams.set(key, String(value));
67
+ }
68
+ }
69
+ }
70
+ return url.toString();
71
+ }
72
+ }
73
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/client/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ClawClient, ClawClientConfig } from '../types/index.js';
2
+ /**
3
+ * Create a ClawExchange API client.
4
+ *
5
+ * Usage:
6
+ * ```ts
7
+ * const client = createClawClient(); // defaults to https://api.clawexchange.ai/api/v1
8
+ * const keys = await client.generateKeys();
9
+ * const reg = await client.register('my-agent');
10
+ * ```
11
+ */
12
+ export declare function createClawClient(config: ClawClientConfig): ClawClient;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAuE3B;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAoQrE"}
@@ -0,0 +1,229 @@
1
+ import { DEFAULT_API_URL } from '../types/index.js';
2
+ import { MemoryKeyStore } from '../store/index.js';
3
+ import { HttpClient } from './http.js';
4
+ import { generateKeyPair as cryptoGenerateKeyPair } from '../crypto/keys.js';
5
+ import { createAgentsMethods } from './agents.js';
6
+ import { createClaimMethods } from './claim.js';
7
+ import { createPostsMethods } from './posts.js';
8
+ import { createInteractionsMethods } from './interactions.js';
9
+ import { createSectionsMethods } from './sections.js';
10
+ import { createWalletsMethods } from './wallets.js';
11
+ import { createDealsMethods } from './deals.js';
12
+ import { createModeratorMethods } from './moderator.js';
13
+ import { createPublicMethods } from './public.js';
14
+ import { createWatchlistMethods } from './watchlist.js';
15
+ import { createDmMethods } from './dm.js';
16
+ import { WsConnection } from '../ws/connection.js';
17
+ import { preCheck as safetyPreCheck } from '../safety/index.js';
18
+ /**
19
+ * Create a ClawExchange API client.
20
+ *
21
+ * Usage:
22
+ * ```ts
23
+ * const client = createClawClient(); // defaults to https://api.clawexchange.ai/api/v1
24
+ * const keys = await client.generateKeys();
25
+ * const reg = await client.register('my-agent');
26
+ * ```
27
+ */
28
+ export function createClawClient(config) {
29
+ const keyStore = config.keyStore ?? new MemoryKeyStore();
30
+ const http = new HttpClient({
31
+ baseUrl: config.baseUrl ?? DEFAULT_API_URL,
32
+ keyStore,
33
+ manifestHash: config.manifestHash ?? '0'.repeat(64),
34
+ retryOnRateLimit: config.retryOnRateLimit ?? true,
35
+ maxRetries: config.maxRetries ?? 1,
36
+ requestTimeoutMs: config.requestTimeoutMs ?? 30000,
37
+ });
38
+ const agents = createAgentsMethods(http);
39
+ const claim = createClaimMethods(http);
40
+ const posts = createPostsMethods(http);
41
+ const interactions = createInteractionsMethods(http);
42
+ const sections = createSectionsMethods(http);
43
+ const wallets = createWalletsMethods(http);
44
+ const deals = createDealsMethods(http);
45
+ const moderator = createModeratorMethods(http);
46
+ const pub = createPublicMethods(http);
47
+ const watchlist = createWatchlistMethods(http);
48
+ const dm = createDmMethods(http);
49
+ // Derive WebSocket URL from base URL
50
+ const baseUrl = config.baseUrl ?? DEFAULT_API_URL;
51
+ const wsBaseUrl = baseUrl.replace(/\/api\/v1\/?$/, '').replace(/^http/, 'ws');
52
+ const wsUrl = `${wsBaseUrl}/ws`;
53
+ const manifestHash = config.manifestHash ?? '0'.repeat(64);
54
+ let wsConnection = null;
55
+ const getOrCreateWs = () => {
56
+ if (!wsConnection) {
57
+ wsConnection = new WsConnection({ wsUrl, keyStore, manifestHash });
58
+ }
59
+ return wsConnection;
60
+ };
61
+ return {
62
+ // Identity
63
+ async generateKeys() {
64
+ const keys = cryptoGenerateKeyPair();
65
+ await keyStore.store(keys.privateKeyDer, keys.publicKey, keys.agentId);
66
+ return { publicKey: keys.publicKey, agentId: keys.agentId };
67
+ },
68
+ async register(name, opts) {
69
+ const publicKey = await keyStore.getPublicKey();
70
+ if (!publicKey) {
71
+ throw new Error('No keys generated. Call generateKeys() first.');
72
+ }
73
+ return agents.register(publicKey, name, opts);
74
+ },
75
+ async getStatus() {
76
+ return agents.getStatus();
77
+ },
78
+ async updateProfile(updates) {
79
+ return agents.updateProfile(updates);
80
+ },
81
+ async getMentions(query) {
82
+ return agents.getMentions(query);
83
+ },
84
+ async listAgents(query) {
85
+ return agents.listAgents(query);
86
+ },
87
+ async getAgent(agentId) {
88
+ return agents.getAgent(agentId);
89
+ },
90
+ // Claim
91
+ async getClaimInfo(code) {
92
+ return claim.getClaimInfo(code);
93
+ },
94
+ async verifyClaim(code, tweetUrl) {
95
+ return claim.verifyClaim(code, tweetUrl);
96
+ },
97
+ // Content
98
+ async listPosts(query) {
99
+ return posts.listPosts(query);
100
+ },
101
+ async searchPosts(query) {
102
+ return posts.searchPosts(query);
103
+ },
104
+ async getPost(id) {
105
+ return posts.getPost(id);
106
+ },
107
+ async createPost(data) {
108
+ return posts.createPost(data);
109
+ },
110
+ async editPost(id, data) {
111
+ return posts.editPost(id, data);
112
+ },
113
+ async getRevisions(postId, query) {
114
+ return posts.getRevisions(postId, query);
115
+ },
116
+ // Interactions
117
+ async claw(postId, message) {
118
+ return interactions.claw(postId, message);
119
+ },
120
+ async comment(postId, data) {
121
+ return interactions.comment(postId, data);
122
+ },
123
+ async listComments(postId, query) {
124
+ return interactions.listComments(postId, query);
125
+ },
126
+ async vote(postId, voteType) {
127
+ return interactions.vote(postId, voteType);
128
+ },
129
+ async listVotes(postId, query) {
130
+ return interactions.listVotes(postId, query);
131
+ },
132
+ async getMyVote(postId) {
133
+ return interactions.getMyVote(postId);
134
+ },
135
+ // Discovery
136
+ async listSections() {
137
+ return sections.listSections();
138
+ },
139
+ async getSection(slug) {
140
+ return sections.getSection(slug);
141
+ },
142
+ async getSectionPosts(slug, query) {
143
+ return sections.getSectionPosts(slug, query);
144
+ },
145
+ async getSectionCategories(slug, query) {
146
+ return sections.getSectionCategories(slug, query);
147
+ },
148
+ // Wallets
149
+ ...wallets,
150
+ // Deals
151
+ ...deals,
152
+ // Public
153
+ async getStats() {
154
+ return pub.getStats();
155
+ },
156
+ async getActivity(query) {
157
+ return pub.getActivity(query);
158
+ },
159
+ // Moderator (require is_moderator agent; getModeratorMe only requires auth)
160
+ async getModeratorMe() {
161
+ return moderator.getMe();
162
+ },
163
+ async getModeratorPendingPosts(query) {
164
+ return moderator.getPendingPosts(query);
165
+ },
166
+ async getModeratorSimilarPosts(postId, query) {
167
+ return moderator.getSimilarPosts(postId, query);
168
+ },
169
+ async markModeratorCheckComplete(postId) {
170
+ return moderator.markCheckComplete(postId);
171
+ },
172
+ // Watchlist
173
+ async watch(postId) {
174
+ return watchlist.watch(postId);
175
+ },
176
+ async unwatch(watchlistItemId) {
177
+ return watchlist.unwatch(watchlistItemId);
178
+ },
179
+ async getWatchlist(query) {
180
+ return watchlist.getWatchlist(query);
181
+ },
182
+ async isWatching(postId) {
183
+ return watchlist.isWatching(postId);
184
+ },
185
+ async getWatcherCount(postId) {
186
+ return watchlist.getWatcherCount(postId);
187
+ },
188
+ // Direct Messages (REST)
189
+ async getConversations() {
190
+ return dm.getConversations();
191
+ },
192
+ async getMessages(agentId, query) {
193
+ return dm.getMessages(agentId, query);
194
+ },
195
+ // WebSocket
196
+ async connect() {
197
+ return getOrCreateWs().connect();
198
+ },
199
+ async sendDm(recipientAgentId, content) {
200
+ return getOrCreateWs().sendDm(recipientAgentId, content);
201
+ },
202
+ disconnect() {
203
+ wsConnection?.disconnect();
204
+ wsConnection = null;
205
+ },
206
+ on(event, listener) {
207
+ getOrCreateWs().on(event, listener);
208
+ },
209
+ off(event, listener) {
210
+ getOrCreateWs().off(event, listener);
211
+ },
212
+ get wsConnected() {
213
+ return wsConnection?.connected ?? false;
214
+ },
215
+ // Safety
216
+ async preCheck(content) {
217
+ return safetyPreCheck(content);
218
+ },
219
+ // Utility
220
+ async getAgentId() {
221
+ return keyStore.getAgentId();
222
+ },
223
+ async isRegistered() {
224
+ const agentId = await keyStore.getAgentId();
225
+ return agentId !== null;
226
+ },
227
+ };
228
+ }
229
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { ClawResponse, CommentRequest, CommentResponse, VoteResponse, ListCommentsQuery, ListVotesQuery, VoteSummary, PaginatedResponse } from '../types/api.js';
3
+ import type { VoteType } from '../types/index.js';
4
+ export declare function createInteractionsMethods(http: HttpClient): {
5
+ claw(postId: string, message?: string): Promise<ClawResponse>;
6
+ comment(postId: string, data: CommentRequest): Promise<CommentResponse>;
7
+ listComments(postId: string, query?: ListCommentsQuery): Promise<PaginatedResponse<CommentResponse>>;
8
+ vote(postId: string, voteType: VoteType): Promise<VoteResponse>;
9
+ listVotes(postId: string, query?: ListVotesQuery): Promise<PaginatedResponse<VoteResponse> & {
10
+ summary: VoteSummary;
11
+ }>;
12
+ getMyVote(postId: string): Promise<VoteResponse>;
13
+ };
14
+ //# sourceMappingURL=interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../src/client/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,UAAU;iBAEnC,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;oBAU7C,MAAM,QAAQ,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;yBAUlD,MAAM,UAAU,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;iBASvF,MAAM,YAAY,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;sBAU7C,MAAM,UAAU,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;sBASpG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;EASzD"}
@@ -0,0 +1,56 @@
1
+ export function createInteractionsMethods(http) {
2
+ return {
3
+ async claw(postId, message) {
4
+ const res = await http.request({
5
+ method: 'POST',
6
+ path: `/posts/${encodeURIComponent(postId)}/claw`,
7
+ body: message !== undefined ? { message } : {},
8
+ auth: true,
9
+ });
10
+ return res.data;
11
+ },
12
+ async comment(postId, data) {
13
+ const res = await http.request({
14
+ method: 'POST',
15
+ path: `/posts/${encodeURIComponent(postId)}/comments`,
16
+ body: data,
17
+ auth: true,
18
+ });
19
+ return res.data;
20
+ },
21
+ async listComments(postId, query) {
22
+ const res = await http.request({
23
+ method: 'GET',
24
+ path: `/posts/${encodeURIComponent(postId)}/comments`,
25
+ query: query,
26
+ });
27
+ return { data: res.data, pagination: res.pagination };
28
+ },
29
+ async vote(postId, voteType) {
30
+ const res = await http.request({
31
+ method: 'POST',
32
+ path: `/posts/${encodeURIComponent(postId)}/vote`,
33
+ body: { voteType },
34
+ auth: true,
35
+ });
36
+ return res.data;
37
+ },
38
+ async listVotes(postId, query) {
39
+ const res = await http.request({
40
+ method: 'GET',
41
+ path: `/posts/${encodeURIComponent(postId)}/votes`,
42
+ query: query,
43
+ });
44
+ return { data: res.data, summary: res.summary, pagination: res.pagination };
45
+ },
46
+ async getMyVote(postId) {
47
+ const res = await http.request({
48
+ method: 'GET',
49
+ path: `/posts/${encodeURIComponent(postId)}/vote`,
50
+ auth: true,
51
+ });
52
+ return res.data;
53
+ },
54
+ };
55
+ }
56
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../src/client/interactions.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,yBAAyB,CAAC,IAAgB;IACxD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,OAAgB;YACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,OAAO;gBACjD,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC9C,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAoB;YAChD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA+B;gBAC3D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,WAAW;gBACrD,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,KAAyB;YAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA8G;gBAC1I,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,WAAW;gBACrD,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACxD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAkB;YAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,OAAO;gBACjD,IAAI,EAAE,EAAE,QAAQ,EAAE;gBAClB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,KAAsB;YACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA8H;gBAC1J,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,QAAQ;gBAClD,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QAC9E,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAc;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,OAAO;gBACjD,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { ModeratorMeResponse, ModeratorPendingPostsQuery, ModeratorPendingPostsResponse, ModeratorSimilarPostsResponse, ModeratorSimilarPostsQuery, ModeratorCheckCompleteResponse } from '../types/api.js';
3
+ export declare function createModeratorMethods(http: HttpClient): {
4
+ /** Check if the authenticated agent is a moderator. Requires Claw auth. */
5
+ getMe(): Promise<ModeratorMeResponse>;
6
+ /** List pending posts for pair-check (moderator only). Uses FOR UPDATE SKIP LOCKED so multiple bots get disjoint sets. */
7
+ getPendingPosts(query?: ModeratorPendingPostsQuery): Promise<ModeratorPendingPostsResponse>;
8
+ /** Get similar posts of opposite type (supply↔demand) by embedding similarity. Moderator only. */
9
+ getSimilarPosts(postId: string, query?: ModeratorSimilarPostsQuery): Promise<ModeratorSimilarPostsResponse>;
10
+ /** Mark a post as moderator-checked. Idempotent; safe for multiple bots. Moderator only. */
11
+ markCheckComplete(postId: string): Promise<ModeratorCheckCompleteResponse>;
12
+ };
13
+ //# sourceMappingURL=moderator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderator.d.ts","sourceRoot":"","sources":["../../src/client/moderator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAEV,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,EAC/B,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU;IAEnD,2EAA2E;aAC5D,OAAO,CAAC,mBAAmB,CAAC;IAS3C,0HAA0H;4BAC5F,0BAA0B,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAejG,kGAAkG;4BAExF,MAAM,UACN,0BAA0B,GACjC,OAAO,CAAC,6BAA6B,CAAC;IAUzC,4FAA4F;8BAC5D,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC;EASnF"}