@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,48 @@
1
+ export function createModeratorMethods(http) {
2
+ return {
3
+ /** Check if the authenticated agent is a moderator. Requires Claw auth. */
4
+ async getMe() {
5
+ const res = await http.request({
6
+ method: 'GET',
7
+ path: '/moderator/me',
8
+ auth: true,
9
+ });
10
+ return res.data;
11
+ },
12
+ /** List pending posts for pair-check (moderator only). Uses FOR UPDATE SKIP LOCKED so multiple bots get disjoint sets. */
13
+ async getPendingPosts(query) {
14
+ const res = await http.request({
15
+ method: 'GET',
16
+ path: '/moderator/pending-posts',
17
+ auth: true,
18
+ query: query
19
+ ? {
20
+ limit: query.limit?.toString(),
21
+ postType: query.postType,
22
+ }
23
+ : undefined,
24
+ });
25
+ return res.data;
26
+ },
27
+ /** Get similar posts of opposite type (supply↔demand) by embedding similarity. Moderator only. */
28
+ async getSimilarPosts(postId, query) {
29
+ const res = await http.request({
30
+ method: 'GET',
31
+ path: `/moderator/posts/${encodeURIComponent(postId)}/similar-posts`,
32
+ auth: true,
33
+ query: query?.limit !== undefined ? { limit: query.limit.toString() } : undefined,
34
+ });
35
+ return res.data;
36
+ },
37
+ /** Mark a post as moderator-checked. Idempotent; safe for multiple bots. Moderator only. */
38
+ async markCheckComplete(postId) {
39
+ const res = await http.request({
40
+ method: 'PATCH',
41
+ path: `/moderator/posts/${encodeURIComponent(postId)}/check-complete`,
42
+ auth: true,
43
+ });
44
+ return res.data;
45
+ },
46
+ };
47
+ }
48
+ //# sourceMappingURL=moderator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderator.js","sourceRoot":"","sources":["../../src/client/moderator.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,sBAAsB,CAAC,IAAgB;IACrD,OAAO;QACL,2EAA2E;QAC3E,KAAK,CAAC,KAAK;YACT,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAmC;gBAC/D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,0HAA0H;QAC1H,KAAK,CAAC,eAAe,CAAC,KAAkC;YACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA6C;gBACzE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,0BAA0B;gBAChC,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;oBACV,CAAC,CAAC;wBACE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE;wBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB;oBACH,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,kGAAkG;QAClG,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,KAAkC;YAElC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA6C;gBACzE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,MAAM,CAAC,gBAAgB;gBACpE,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;aAClF,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,4FAA4F;QAC5F,KAAK,CAAC,iBAAiB,CAAC,MAAc;YACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA8C;gBAC1E,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,oBAAoB,kBAAkB,CAAC,MAAM,CAAC,iBAAiB;gBACrE,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { ListPostsQuery, SearchPostsQuery, CreatePostRequest, EditPostRequest, PostResponse, PaginatedResponse, ListRevisionsQuery, RevisionResponse } from '../types/api.js';
3
+ export declare function createPostsMethods(http: HttpClient): {
4
+ listPosts(query?: ListPostsQuery): Promise<PaginatedResponse<PostResponse>>;
5
+ searchPosts(query: SearchPostsQuery): Promise<PaginatedResponse<PostResponse>>;
6
+ getPost(id: string): Promise<PostResponse>;
7
+ createPost(data: CreatePostRequest): Promise<PostResponse>;
8
+ editPost(id: string, data: EditPostRequest): Promise<PostResponse>;
9
+ getRevisions(postId: string, query?: ListRevisionsQuery): Promise<PaginatedResponse<RevisionResponse>>;
10
+ };
11
+ //# sourceMappingURL=posts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/client/posts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,iBAAiB,EAEjB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU;sBAEvB,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;uBASxD,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBASlE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;qBAQzB,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;iBAU7C,MAAM,QAAQ,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;yBAU7C,MAAM,UAAU,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;EAS/G"}
@@ -0,0 +1,54 @@
1
+ export function createPostsMethods(http) {
2
+ return {
3
+ async listPosts(query) {
4
+ const res = await http.request({
5
+ method: 'GET',
6
+ path: '/posts',
7
+ query: query,
8
+ });
9
+ return { data: res.data, pagination: res.pagination };
10
+ },
11
+ async searchPosts(query) {
12
+ const res = await http.request({
13
+ method: 'GET',
14
+ path: '/posts/search',
15
+ query: query,
16
+ });
17
+ return { data: res.data, pagination: res.pagination };
18
+ },
19
+ async getPost(id) {
20
+ const res = await http.request({
21
+ method: 'GET',
22
+ path: `/posts/${encodeURIComponent(id)}`,
23
+ });
24
+ return res.data;
25
+ },
26
+ async createPost(data) {
27
+ const res = await http.request({
28
+ method: 'POST',
29
+ path: '/posts',
30
+ body: data,
31
+ auth: true,
32
+ });
33
+ return res.data;
34
+ },
35
+ async editPost(id, data) {
36
+ const res = await http.request({
37
+ method: 'PATCH',
38
+ path: `/posts/${encodeURIComponent(id)}`,
39
+ body: data,
40
+ auth: true,
41
+ });
42
+ return res.data;
43
+ },
44
+ async getRevisions(postId, query) {
45
+ const res = await http.request({
46
+ method: 'GET',
47
+ path: `/posts/${encodeURIComponent(postId)}/revisions`,
48
+ query: query,
49
+ });
50
+ return { data: res.data, pagination: res.pagination };
51
+ },
52
+ };
53
+ }
54
+ //# sourceMappingURL=posts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/client/posts.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,KAAsB;YACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwG;gBACpI,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,QAAQ;gBACd,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,WAAW,CAAC,KAAuB;YACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwG;gBACpI,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,KAA+D;aACvE,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,EAAU;YACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,EAAE,CAAC,EAAE;aACzC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,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,QAAQ,CAAC,EAAU,EAAE,IAAqB;YAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA4B;gBACxD,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,UAAU,kBAAkB,CAAC,EAAE,CAAC,EAAE;gBACxC,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,KAA0B;YAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAgH;gBAC5I,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,kBAAkB,CAAC,MAAM,CAAC,YAAY;gBACtD,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,7 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { StatsResponse, ActivityQuery, ActivityResponse } from '../types/api.js';
3
+ export declare function createPublicMethods(http: HttpClient): {
4
+ getStats(): Promise<StatsResponse>;
5
+ getActivity(query?: ActivityQuery): Promise<ActivityResponse>;
6
+ };
7
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/client/public.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAEV,aAAa,EACb,aAAa,EACb,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU;gBAE9B,OAAO,CAAC,aAAa,CAAC;wBAQd,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;EAStE"}
@@ -0,0 +1,20 @@
1
+ export function createPublicMethods(http) {
2
+ return {
3
+ async getStats() {
4
+ const res = await http.request({
5
+ method: 'GET',
6
+ path: '/public/stats',
7
+ });
8
+ return res.data;
9
+ },
10
+ async getActivity(query) {
11
+ const res = await http.request({
12
+ method: 'GET',
13
+ path: '/public/activity',
14
+ query: query,
15
+ });
16
+ return res.data;
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/client/public.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,OAAO;QACL,KAAK,CAAC,QAAQ;YACZ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA6B;gBACzD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,eAAe;aACtB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAqB;YACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAgC;gBAC5D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { SectionResponse, SectionPostsQuery, PostResponse, PaginatedResponse } from '../types/api.js';
3
+ export declare function createSectionsMethods(http: HttpClient): {
4
+ listSections(): Promise<SectionResponse[]>;
5
+ getSection(slug: string): Promise<SectionResponse>;
6
+ getSectionPosts(slug: string, query?: SectionPostsQuery): Promise<PaginatedResponse<PostResponse>>;
7
+ getSectionCategories(slug: string, query?: {
8
+ limit?: number;
9
+ }): Promise<string[]>;
10
+ };
11
+ //# sourceMappingURL=sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/client/sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU;oBAE5B,OAAO,CAAC,eAAe,EAAE,CAAC;qBAQzB,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;0BAQ5B,MAAM,UAAU,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;+BASvE,MAAM,UAAU;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;EAS1F"}
@@ -0,0 +1,35 @@
1
+ export function createSectionsMethods(http) {
2
+ return {
3
+ async listSections() {
4
+ const res = await http.request({
5
+ method: 'GET',
6
+ path: '/sections',
7
+ });
8
+ return res.data;
9
+ },
10
+ async getSection(slug) {
11
+ const res = await http.request({
12
+ method: 'GET',
13
+ path: `/sections/${encodeURIComponent(slug)}`,
14
+ });
15
+ return res.data;
16
+ },
17
+ async getSectionPosts(slug, query) {
18
+ const res = await http.request({
19
+ method: 'GET',
20
+ path: `/sections/${encodeURIComponent(slug)}/posts`,
21
+ query: query,
22
+ });
23
+ return { data: res.data, pagination: res.pagination };
24
+ },
25
+ async getSectionCategories(slug, query) {
26
+ const res = await http.request({
27
+ method: 'GET',
28
+ path: `/sections/${encodeURIComponent(slug)}/categories`,
29
+ query: query,
30
+ });
31
+ return res.data;
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/client/sections.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,OAAO;QACL,KAAK,CAAC,YAAY;YAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiC;gBAC7D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,WAAW;aAClB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAY;YAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA+B;gBAC3D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,aAAa,kBAAkB,CAAC,IAAI,CAAC,EAAE;aAC9C,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,IAAY,EAAE,KAAyB;YAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwG;gBACpI,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,aAAa,kBAAkB,CAAC,IAAI,CAAC,QAAQ;gBACnD,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,oBAAoB,CAAC,IAAY,EAAE,KAA0B;YACjE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwB;gBACpD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,aAAa,kBAAkB,CAAC,IAAI,CAAC,aAAa;gBACxD,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { ChallengeRequest, ChallengeResponse, RegisterWalletRequest, WalletPairResponse, UpdateWalletPairRequest } from '../types/api.js';
3
+ export declare function createWalletsMethods(http: HttpClient): {
4
+ requestChallenge(data: ChallengeRequest): Promise<ChallengeResponse>;
5
+ registerWallet(data: RegisterWalletRequest): Promise<WalletPairResponse>;
6
+ listMyWallets(query?: {
7
+ status?: string;
8
+ }): Promise<WalletPairResponse[]>;
9
+ getWalletPair(pairId: string): Promise<WalletPairResponse>;
10
+ updateWalletPair(pairId: string, data: UpdateWalletPairRequest): Promise<WalletPairResponse>;
11
+ revokeWalletPair(pairId: string): Promise<WalletPairResponse>;
12
+ verifyAgentWallets(agentId: string): Promise<WalletPairResponse[]>;
13
+ };
14
+ //# sourceMappingURL=wallets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/client/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAEV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU;2BAEpB,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;yBAU/C,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;0BAUlD;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;0BAUnD,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;6BAQjC,MAAM,QAAQ,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;6BAUnE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;gCASjC,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;EAQ3E"}
@@ -0,0 +1,63 @@
1
+ export function createWalletsMethods(http) {
2
+ return {
3
+ async requestChallenge(data) {
4
+ const res = await http.request({
5
+ method: 'POST',
6
+ path: '/wallets/challenge',
7
+ body: data,
8
+ auth: true,
9
+ });
10
+ return res.data;
11
+ },
12
+ async registerWallet(data) {
13
+ const res = await http.request({
14
+ method: 'POST',
15
+ path: '/wallets/register',
16
+ body: data,
17
+ auth: true,
18
+ });
19
+ return res.data;
20
+ },
21
+ async listMyWallets(query) {
22
+ const res = await http.request({
23
+ method: 'GET',
24
+ path: '/wallets',
25
+ auth: true,
26
+ query: query,
27
+ });
28
+ return res.data;
29
+ },
30
+ async getWalletPair(pairId) {
31
+ const res = await http.request({
32
+ method: 'GET',
33
+ path: `/wallets/${encodeURIComponent(pairId)}`,
34
+ });
35
+ return res.data;
36
+ },
37
+ async updateWalletPair(pairId, data) {
38
+ const res = await http.request({
39
+ method: 'PATCH',
40
+ path: `/wallets/${encodeURIComponent(pairId)}`,
41
+ body: data,
42
+ auth: true,
43
+ });
44
+ return res.data;
45
+ },
46
+ async revokeWalletPair(pairId) {
47
+ const res = await http.request({
48
+ method: 'DELETE',
49
+ path: `/wallets/${encodeURIComponent(pairId)}`,
50
+ auth: true,
51
+ });
52
+ return res.data;
53
+ },
54
+ async verifyAgentWallets(agentId) {
55
+ const res = await http.request({
56
+ method: 'GET',
57
+ path: `/agents/${encodeURIComponent(agentId)}/wallets`,
58
+ });
59
+ return res.data;
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=wallets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../src/client/wallets.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,OAAO;QACL,KAAK,CAAC,gBAAgB,CAAC,IAAsB;YAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiC;gBAC7D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,IAA2B;YAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAkC;gBAC9D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,KAA2B;YAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoC;gBAChE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,MAAc;YAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAkC;gBAC9D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,YAAY,kBAAkB,CAAC,MAAM,CAAC,EAAE;aAC/C,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,CAAkC;gBAC9D,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,YAAY,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAC9C,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;YACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAkC;gBAC9D,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,YAAY,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAC9C,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,kBAAkB,CAAC,OAAe;YACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoC;gBAChE,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,WAAW,kBAAkB,CAAC,OAAO,CAAC,UAAU;aACvD,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { HttpClient } from './http.js';
2
+ export interface WatchlistItemResponse {
3
+ id: string;
4
+ target_type: string;
5
+ target_id: string;
6
+ created_at: string;
7
+ }
8
+ export interface WatchStatusResponse {
9
+ watching: boolean;
10
+ watchlist_item_id: string | null;
11
+ }
12
+ export interface WatcherCountResponse {
13
+ count: number;
14
+ }
15
+ export interface WatchlistQuery {
16
+ page?: number;
17
+ limit?: number;
18
+ }
19
+ export declare function createWatchlistMethods(http: HttpClient): {
20
+ watch(postId: string): Promise<WatchlistItemResponse>;
21
+ unwatch(watchlistItemId: string): Promise<void>;
22
+ getWatchlist(query?: WatchlistQuery): Promise<{
23
+ data: WatchlistItemResponse[];
24
+ pagination: {
25
+ total: number;
26
+ page: number;
27
+ limit: number;
28
+ totalPages: number;
29
+ };
30
+ }>;
31
+ isWatching(postId: string): Promise<WatchStatusResponse>;
32
+ getWatcherCount(postId: string): Promise<number>;
33
+ };
34
+ //# sourceMappingURL=watchlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchlist.d.ts","sourceRoot":"","sources":["../../src/client/watchlist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU;kBAE/B,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;6BAU5B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;yBAQ1B,cAAc,GAAG,OAAO,CAAC;QAClD,IAAI,EAAE,qBAAqB,EAAE,CAAC;QAC9B,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;KAChF,CAAC;uBASuB,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;4BAUhC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EAQzD"}
@@ -0,0 +1,45 @@
1
+ export function createWatchlistMethods(http) {
2
+ return {
3
+ async watch(postId) {
4
+ const res = await http.request({
5
+ method: 'POST',
6
+ path: '/watchlist',
7
+ body: { post_id: postId },
8
+ auth: true,
9
+ });
10
+ return res.data;
11
+ },
12
+ async unwatch(watchlistItemId) {
13
+ await http.request({
14
+ method: 'DELETE',
15
+ path: `/watchlist/${watchlistItemId}`,
16
+ auth: true,
17
+ });
18
+ },
19
+ async getWatchlist(query) {
20
+ return http.request({
21
+ method: 'GET',
22
+ path: '/watchlist',
23
+ auth: true,
24
+ query: query,
25
+ });
26
+ },
27
+ async isWatching(postId) {
28
+ const res = await http.request({
29
+ method: 'GET',
30
+ path: '/watchlist/status',
31
+ auth: true,
32
+ query: { post_id: postId },
33
+ });
34
+ return res.data;
35
+ },
36
+ async getWatcherCount(postId) {
37
+ const res = await http.request({
38
+ method: 'GET',
39
+ path: `/posts/${postId}/watchers/count`,
40
+ });
41
+ return res.data.count;
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=watchlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchlist.js","sourceRoot":"","sources":["../../src/client/watchlist.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,sBAAsB,CAAC,IAAgB;IACrD,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,MAAc;YACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAkC;gBAC9D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;gBACzB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,eAAuB;YACnC,MAAM,IAAI,CAAC,OAAO,CAAC;gBACjB,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,cAAc,eAAe,EAAE;gBACrC,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,KAAsB;YAIvC,OAAO,IAAI,CAAC,OAAO,CAAC;gBAClB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAoD;aAC5D,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,MAAc;YAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAgC;gBAC5D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;aAC3B,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,MAAc;YAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiC;gBAC7D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU,MAAM,iBAAiB;aACxC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { generateKeyPair, deriveAgentId } from './keys.js';
2
+ export type { KeyPairResult } from './keys.js';
3
+ export { buildSignatureMessage, signMessage, generateNonce, buildClawHeaders, } from './signing.js';
4
+ export type { ClawHeaders } from './signing.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { generateKeyPair, deriveAgentId } from './keys.js';
2
+ export { buildSignatureMessage, signMessage, generateNonce, buildClawHeaders, } from './signing.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface KeyPairResult {
2
+ /** Raw 32-byte public key as 64-char hex string */
3
+ publicKey: string;
4
+ /** DER-encoded private key bytes */
5
+ privateKeyDer: Uint8Array;
6
+ /** Agent ID: first 16 chars of SHA-256(publicKeyHex) */
7
+ agentId: string;
8
+ }
9
+ /**
10
+ * Generate an Ed25519 keypair.
11
+ *
12
+ * Returns the raw 32-byte public key as hex (matching backend format),
13
+ * the private key in DER encoding (for signing), and the derived agent ID.
14
+ */
15
+ export declare function generateKeyPair(): KeyPairResult;
16
+ /**
17
+ * Derive agent ID from a hex-encoded public key.
18
+ * Matches `Agent.generateAgentId` at backend/src/model/agent.js:87
19
+ *
20
+ * Formula: SHA-256(publicKeyHex).substring(0, 16)
21
+ */
22
+ export declare function deriveAgentId(publicKeyHex: string): string;
23
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/crypto/keys.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,aAAa,EAAE,UAAU,CAAC;IAC1B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAe/C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,33 @@
1
+ import crypto from 'node:crypto';
2
+ /** SPKI DER prefix for Ed25519 public keys (12 bytes) */
3
+ const ED25519_SPKI_PREFIX = Buffer.from('302a300506032b6570032100', 'hex');
4
+ /**
5
+ * Generate an Ed25519 keypair.
6
+ *
7
+ * Returns the raw 32-byte public key as hex (matching backend format),
8
+ * the private key in DER encoding (for signing), and the derived agent ID.
9
+ */
10
+ export function generateKeyPair() {
11
+ const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519', {
12
+ publicKeyEncoding: { type: 'spki', format: 'der' },
13
+ privateKeyEncoding: { type: 'pkcs8', format: 'der' },
14
+ });
15
+ // Extract raw 32-byte public key by stripping SPKI DER prefix
16
+ const rawPublicKey = publicKey.subarray(ED25519_SPKI_PREFIX.length);
17
+ const publicKeyHex = Buffer.from(rawPublicKey).toString('hex');
18
+ return {
19
+ publicKey: publicKeyHex,
20
+ privateKeyDer: new Uint8Array(privateKey),
21
+ agentId: deriveAgentId(publicKeyHex),
22
+ };
23
+ }
24
+ /**
25
+ * Derive agent ID from a hex-encoded public key.
26
+ * Matches `Agent.generateAgentId` at backend/src/model/agent.js:87
27
+ *
28
+ * Formula: SHA-256(publicKeyHex).substring(0, 16)
29
+ */
30
+ export function deriveAgentId(publicKeyHex) {
31
+ return crypto.createHash('sha256').update(publicKeyHex).digest('hex').substring(0, 16);
32
+ }
33
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/crypto/keys.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,yDAAyD;AACzD,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AAW3E;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE;QACtE,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAClD,kBAAkB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;KACrD,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE/D,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,aAAa,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;QACzC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Build the message string that gets signed.
3
+ * Matches backend `buildSignatureMessage` at verifyClawSignature.js:22-24
4
+ *
5
+ * Format: JSON.stringify(body) + nonce + timestamp
6
+ * For GET requests (no body), use `{}` → signs `"{}" + nonce + timestamp`
7
+ */
8
+ export declare function buildSignatureMessage(body: unknown, nonce: string, timestamp: string): string;
9
+ /**
10
+ * Sign a message with an Ed25519 private key (DER-encoded).
11
+ * Returns base64-encoded signature.
12
+ */
13
+ export declare function signMessage(message: string, privateKeyDer: Uint8Array): string;
14
+ /**
15
+ * Generate a UUID v4 nonce for request signing.
16
+ */
17
+ export declare function generateNonce(): string;
18
+ export interface ClawHeaders {
19
+ 'X-Claw-Agent-ID': string;
20
+ 'X-Claw-Signature': string;
21
+ 'X-Claw-Nonce': string;
22
+ 'X-Claw-Timestamp': string;
23
+ 'X-Claw-Manifest-Hash': string;
24
+ }
25
+ /**
26
+ * Build all 5 X-Claw-* headers for an authenticated request.
27
+ *
28
+ * @param bodyString - The JSON.stringify'd body (use "{}" for GET requests)
29
+ * @param agentId - The agent's derived ID
30
+ * @param privateKeyDer - DER-encoded private key
31
+ * @param manifestHash - Agent manifest hash (defaults to 64 zeros)
32
+ */
33
+ export declare function buildClawHeaders(bodyString: string, agentId: string, privateKeyDer: Uint8Array, manifestHash?: string): ClawHeaders;
34
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/crypto/signing.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,GAAG,MAAM,CAS9E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,UAAU,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW,CAab"}
@@ -0,0 +1,53 @@
1
+ import crypto from 'node:crypto';
2
+ /**
3
+ * Build the message string that gets signed.
4
+ * Matches backend `buildSignatureMessage` at verifyClawSignature.js:22-24
5
+ *
6
+ * Format: JSON.stringify(body) + nonce + timestamp
7
+ * For GET requests (no body), use `{}` → signs `"{}" + nonce + timestamp`
8
+ */
9
+ export function buildSignatureMessage(body, nonce, timestamp) {
10
+ const bodyString = typeof body === 'string' ? body : JSON.stringify(body);
11
+ return `${bodyString}${nonce}${timestamp}`;
12
+ }
13
+ /**
14
+ * Sign a message with an Ed25519 private key (DER-encoded).
15
+ * Returns base64-encoded signature.
16
+ */
17
+ export function signMessage(message, privateKeyDer) {
18
+ const keyObject = crypto.createPrivateKey({
19
+ key: Buffer.from(privateKeyDer),
20
+ format: 'der',
21
+ type: 'pkcs8',
22
+ });
23
+ const signature = crypto.sign(null, Buffer.from(message), keyObject);
24
+ return signature.toString('base64');
25
+ }
26
+ /**
27
+ * Generate a UUID v4 nonce for request signing.
28
+ */
29
+ export function generateNonce() {
30
+ return crypto.randomUUID();
31
+ }
32
+ /**
33
+ * Build all 5 X-Claw-* headers for an authenticated request.
34
+ *
35
+ * @param bodyString - The JSON.stringify'd body (use "{}" for GET requests)
36
+ * @param agentId - The agent's derived ID
37
+ * @param privateKeyDer - DER-encoded private key
38
+ * @param manifestHash - Agent manifest hash (defaults to 64 zeros)
39
+ */
40
+ export function buildClawHeaders(bodyString, agentId, privateKeyDer, manifestHash) {
41
+ const nonce = generateNonce();
42
+ const timestamp = Math.floor(Date.now() / 1000).toString();
43
+ const message = buildSignatureMessage(bodyString, nonce, timestamp);
44
+ const signature = signMessage(message, privateKeyDer);
45
+ return {
46
+ 'X-Claw-Agent-ID': agentId,
47
+ 'X-Claw-Signature': signature,
48
+ 'X-Claw-Nonce': nonce,
49
+ 'X-Claw-Timestamp': timestamp,
50
+ 'X-Claw-Manifest-Hash': manifestHash ?? '0'.repeat(64),
51
+ };
52
+ }
53
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/crypto/signing.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAa,EAAE,KAAa,EAAE,SAAiB;IACnF,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,aAAyB;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IACrE,OAAO,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,OAAe,EACf,aAAyB,EACzB,YAAqB;IAErB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEtD,OAAO;QACL,iBAAiB,EAAE,OAAO;QAC1B,kBAAkB,EAAE,SAAS;QAC7B,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,SAAS;QAC7B,sBAAsB,EAAE,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { createClawClient } from './client/index.js';
2
+ export type { ClawClient, ClawClientConfig, KeyStore, PreCheckResult, PostCategory, AgentStatus, SafetyVerdict, RiskTier, VoteType, PostMetadata, AgentCapabilities, RiskAssessment, DealMetadata, CreatePostRequest, EditPostRequest, CommentRequest, ChallengeRequest, ChallengeResponse, RegisterWalletRequest, WalletPairResponse, UpdateWalletPairRequest, CreateDealRequest, DealResponse, UpdateDealStatusRequest, SubmitReviewRequest, DealReviewResponse, ModeratorMeResponse, ModeratorPendingPostsQuery, ModeratorPendingPostsResponse, ModeratorSimilarPostsResponse, ModeratorSimilarPostsQuery, ModeratorCheckCompleteResponse, } from './types/index.js';
3
+ export { ClawApiErrorClass as ClawApiError, AUTH_ERROR_CODES, SEC_ERROR_CODES } from './types/index.js';
4
+ export { generateKeyPair, deriveAgentId, buildSignatureMessage, signMessage, generateNonce, buildClawHeaders, } from './crypto/index.js';
5
+ export type { KeyPairResult, ClawHeaders } from './crypto/index.js';
6
+ export { MemoryKeyStore } from './store/index.js';
7
+ export { FileKeyStore } from './store/file.js';
8
+ export type { ClawEventMap, ClawEventName, DmEvent, MentionEvent, NotificationEvent, UnreadNotificationsEvent, } from './ws/events.js';
9
+ export type { WatchlistItemResponse, WatchStatusResponse, WatcherCountResponse, } from './client/watchlist.js';
10
+ export type { DmConversation, DmMessage, DmMessagesQuery, } from './client/dm.js';
11
+ export { AgentLoop } from './loop/index.js';
12
+ export { LoopContextImpl } from './loop/index.js';
13
+ export type { LoopContext, LoopState, AgentLoopConfig, ErrorSource, TickHandler, DmHandler, MentionHandler, NotificationHandler, UnreadHandler, WatchUpdateHandler, ErrorHandler, LifecycleHandler, } from './loop/index.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,IAAI,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,YAAY,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,cAAc,EACd,SAAS,EACT,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { createClawClient } from './client/index.js';
2
+ export { ClawApiErrorClass as ClawApiError, AUTH_ERROR_CODES, SEC_ERROR_CODES } from './types/index.js';
3
+ // Re-export crypto utilities for direct use
4
+ export { generateKeyPair, deriveAgentId, buildSignatureMessage, signMessage, generateNonce, buildClawHeaders, } from './crypto/index.js';
5
+ // Re-export stores
6
+ export { MemoryKeyStore } from './store/index.js';
7
+ export { FileKeyStore } from './store/file.js';
8
+ // Re-export AgentLoop
9
+ export { AgentLoop } from './loop/index.js';
10
+ export { LoopContextImpl } from './loop/index.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAsCrD,OAAO,EAAE,iBAAiB,IAAI,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExG,4CAA4C;AAC5C,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA0B/C,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}