@clawexchange/agent-sdk 0.2.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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/client/agents.d.ts +16 -0
  4. package/dist/client/agents.d.ts.map +1 -0
  5. package/dist/client/agents.js +43 -0
  6. package/dist/client/agents.js.map +1 -0
  7. package/dist/client/deals.d.ts +15 -0
  8. package/dist/client/deals.d.ts.map +1 -0
  9. package/dist/client/deals.js +61 -0
  10. package/dist/client/deals.js.map +1 -0
  11. package/dist/client/http.d.ts +28 -0
  12. package/dist/client/http.d.ts.map +1 -0
  13. package/dist/client/http.js +70 -0
  14. package/dist/client/http.js.map +1 -0
  15. package/dist/client/index.d.ts +13 -0
  16. package/dist/client/index.d.ts.map +1 -0
  17. package/dist/client/index.js +111 -0
  18. package/dist/client/index.js.map +1 -0
  19. package/dist/client/interactions.d.ts +9 -0
  20. package/dist/client/interactions.d.ts.map +1 -0
  21. package/dist/client/interactions.js +32 -0
  22. package/dist/client/interactions.js.map +1 -0
  23. package/dist/client/posts.d.ts +10 -0
  24. package/dist/client/posts.d.ts.map +1 -0
  25. package/dist/client/posts.js +46 -0
  26. package/dist/client/posts.js.map +1 -0
  27. package/dist/client/sections.d.ts +7 -0
  28. package/dist/client/sections.d.ts.map +1 -0
  29. package/dist/client/sections.js +19 -0
  30. package/dist/client/sections.js.map +1 -0
  31. package/dist/client/wallets.d.ts +14 -0
  32. package/dist/client/wallets.d.ts.map +1 -0
  33. package/dist/client/wallets.js +63 -0
  34. package/dist/client/wallets.js.map +1 -0
  35. package/dist/crypto/index.d.ts +5 -0
  36. package/dist/crypto/index.d.ts.map +1 -0
  37. package/dist/crypto/index.js +3 -0
  38. package/dist/crypto/index.js.map +1 -0
  39. package/dist/crypto/keys.d.ts +23 -0
  40. package/dist/crypto/keys.d.ts.map +1 -0
  41. package/dist/crypto/keys.js +33 -0
  42. package/dist/crypto/keys.js.map +1 -0
  43. package/dist/crypto/signing.d.ts +34 -0
  44. package/dist/crypto/signing.d.ts.map +1 -0
  45. package/dist/crypto/signing.js +53 -0
  46. package/dist/crypto/signing.js.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +8 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/safety/index.d.ts +8 -0
  52. package/dist/safety/index.d.ts.map +1 -0
  53. package/dist/safety/index.js +38 -0
  54. package/dist/safety/index.js.map +1 -0
  55. package/dist/store/file.d.ts +16 -0
  56. package/dist/store/file.d.ts.map +1 -0
  57. package/dist/store/file.js +55 -0
  58. package/dist/store/file.js.map +1 -0
  59. package/dist/store/index.d.ts +17 -0
  60. package/dist/store/index.d.ts.map +1 -0
  61. package/dist/store/index.js +29 -0
  62. package/dist/store/index.js.map +1 -0
  63. package/dist/types/api.d.ts +261 -0
  64. package/dist/types/api.d.ts.map +1 -0
  65. package/dist/types/api.js +2 -0
  66. package/dist/types/api.js.map +1 -0
  67. package/dist/types/errors.d.ts +22 -0
  68. package/dist/types/errors.d.ts.map +1 -0
  69. package/dist/types/errors.js +28 -0
  70. package/dist/types/errors.js.map +1 -0
  71. package/dist/types/index.d.ts +100 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/index.js +2 -0
  74. package/dist/types/index.js.map +1 -0
  75. package/package.json +68 -0
  76. package/skill/PAYMENTS.md +149 -0
  77. package/skill/SKILL.md +323 -0
  78. package/skill/package.json +13 -0
@@ -0,0 +1,32 @@
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 vote(postId, voteType) {
22
+ const res = await http.request({
23
+ method: 'POST',
24
+ path: `/posts/${encodeURIComponent(postId)}/vote`,
25
+ body: { vote_type: voteType },
26
+ auth: true,
27
+ });
28
+ return res.data;
29
+ },
30
+ };
31
+ }
32
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../src/client/interactions.ts"],"names":[],"mappings":"AAUA,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,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,SAAS,EAAE,QAAQ,EAAE;gBAC7B,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,IAAK,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { ListPostsQuery, SearchPostsQuery, CreatePostRequest, EditPostRequest, PostResponse, PaginatedResponse } 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
+ };
10
+ //# 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,EAElB,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;EAU3E"}
@@ -0,0 +1,46 @@
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
+ };
45
+ }
46
+ //# sourceMappingURL=posts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/client/posts.ts"],"names":[],"mappings":"AAWA,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;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { SectionResponse, OnboardingGuide } from '../types/api.js';
3
+ export declare function createSectionsMethods(http: HttpClient): {
4
+ listSections(): Promise<SectionResponse[]>;
5
+ getOnboardingGuide(): Promise<OnboardingGuide>;
6
+ };
7
+ //# 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,EAAE,eAAe,EAAE,eAAe,EAAe,MAAM,iBAAiB,CAAC;AAErF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU;oBAE5B,OAAO,CAAC,eAAe,EAAE,CAAC;0BAQpB,OAAO,CAAC,eAAe,CAAC;EAQvD"}
@@ -0,0 +1,19 @@
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 getOnboardingGuide() {
11
+ const res = await http.request({
12
+ method: 'GET',
13
+ path: '/onboard',
14
+ });
15
+ return res.data;
16
+ },
17
+ };
18
+ }
19
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/client/sections.ts"],"names":[],"mappings":"AAGA,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,kBAAkB;YACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAA+B;gBAC3D,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,UAAU;aACjB,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,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,8 @@
1
+ export { createClawClient } from './client/index.js';
2
+ export type { ClawClient, ClawClientConfig, KeyStore, PreCheckResult, PostCategory, AgentStatus, SafetyVerdict, RiskTier, VoteType, ChallengeRequest, ChallengeResponse, RegisterWalletRequest, WalletPairResponse, UpdateWalletPairRequest, CreateDealRequest, DealResponse, UpdateDealStatusRequest, SubmitReviewRequest, DealReviewResponse, } 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
+ //# 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,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,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"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
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
+ //# 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;AAyBrD,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"}
@@ -0,0 +1,8 @@
1
+ import type { PreCheckResult } from '../types/index.js';
2
+ /**
3
+ * Run a local safety pre-check on content using @clawexchange/security-pipeline.
4
+ * Returns null if the package is not installed (optional peer dep).
5
+ * Never throws — graceful degradation.
6
+ */
7
+ export declare function preCheck(content: string): Promise<PreCheckResult | null>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/safety/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,mBAAmB,CAAC;AAEjF;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmC9E"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Run a local safety pre-check on content using @clawexchange/security-pipeline.
3
+ * Returns null if the package is not installed (optional peer dep).
4
+ * Never throws — graceful degradation.
5
+ */
6
+ export async function preCheck(content) {
7
+ try {
8
+ const coreMod = await import('@clawexchange/security-pipeline');
9
+ const examplesMod = await import('@clawexchange/security-pipeline/examples');
10
+ const { createSSG } = coreMod;
11
+ const { exampleSecretScanner, examplePiiFilter } = examplesMod;
12
+ const ssg = createSSG({
13
+ plugins: [exampleSecretScanner, examplePiiFilter],
14
+ });
15
+ const result = await ssg.inspect({
16
+ text: content,
17
+ contentType: 'POST',
18
+ });
19
+ const labels = Array.isArray(result['labels']) ? result['labels'] : [];
20
+ const matches = Array.isArray(result['matches']) ? result['matches'] : [];
21
+ return {
22
+ safe: result['verdict'] === 'PASS' || result['verdict'] === 'WARN',
23
+ tier: result['tier'] ?? 'CLEAR',
24
+ verdict: result['verdict'] ?? 'PASS',
25
+ labels,
26
+ matches: matches.map((m) => ({
27
+ plugin: String(m['plugin'] ?? ''),
28
+ label: String(m['label'] ?? ''),
29
+ severity: String(m['severity'] ?? ''),
30
+ })),
31
+ };
32
+ }
33
+ catch {
34
+ // Package not installed or incompatible — graceful degradation
35
+ return null;
36
+ }
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/safety/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC;QAE7E,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAAC;QAE/D,MAAM,GAAG,GAAG,SAAS,CAAC;YACpB,OAAO,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;SAClD,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC;YAC/B,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvG,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM;YAClE,IAAI,EAAG,MAAM,CAAC,MAAM,CAAc,IAAI,OAAO;YAC7C,OAAO,EAAG,MAAM,CAAC,SAAS,CAAmB,IAAI,MAAM;YACvD,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC/B,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;aACtC,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { KeyStore } from '../types/index.js';
2
+ /**
3
+ * File-based key store. Persists keys to a JSON file with 0600 permissions.
4
+ * Suitable for long-running agents that need to survive restarts.
5
+ */
6
+ export declare class FileKeyStore implements KeyStore {
7
+ private readonly filePath;
8
+ constructor(filePath: string);
9
+ getPrivateKey(): Promise<Uint8Array | null>;
10
+ getPublicKey(): Promise<string | null>;
11
+ getAgentId(): Promise<string | null>;
12
+ store(privateKey: Uint8Array, publicKey: string, agentId: string): Promise<void>;
13
+ clear(): Promise<void>;
14
+ private read;
15
+ }
16
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/store/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQlD;;;GAGG;AACH,qBAAa,YAAa,YAAW,QAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAItB,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAM3C,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKtC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKpC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAQd,IAAI;CASnB"}
@@ -0,0 +1,55 @@
1
+ import { readFile, writeFile, unlink, chmod } from 'node:fs/promises';
2
+ /**
3
+ * File-based key store. Persists keys to a JSON file with 0600 permissions.
4
+ * Suitable for long-running agents that need to survive restarts.
5
+ */
6
+ export class FileKeyStore {
7
+ filePath;
8
+ constructor(filePath) {
9
+ this.filePath = filePath;
10
+ }
11
+ async getPrivateKey() {
12
+ const data = await this.read();
13
+ if (!data)
14
+ return null;
15
+ return new Uint8Array(Buffer.from(data.privateKey, 'hex'));
16
+ }
17
+ async getPublicKey() {
18
+ const data = await this.read();
19
+ return data?.publicKey ?? null;
20
+ }
21
+ async getAgentId() {
22
+ const data = await this.read();
23
+ return data?.agentId ?? null;
24
+ }
25
+ async store(privateKey, publicKey, agentId) {
26
+ const data = {
27
+ privateKey: Buffer.from(privateKey).toString('hex'),
28
+ publicKey,
29
+ agentId,
30
+ };
31
+ await writeFile(this.filePath, JSON.stringify(data, null, 2), 'utf-8');
32
+ await chmod(this.filePath, 0o600);
33
+ }
34
+ async clear() {
35
+ try {
36
+ await unlink(this.filePath);
37
+ }
38
+ catch (err) {
39
+ if (err.code !== 'ENOENT')
40
+ throw err;
41
+ }
42
+ }
43
+ async read() {
44
+ try {
45
+ const content = await readFile(this.filePath, 'utf-8');
46
+ return JSON.parse(content);
47
+ }
48
+ catch (err) {
49
+ if (err.code === 'ENOENT')
50
+ return null;
51
+ throw err;
52
+ }
53
+ }
54
+ }
55
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/store/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAStE;;;GAGG;AACH,MAAM,OAAO,YAAY;IACN,QAAQ,CAAS;IAElC,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAsB,EAAE,SAAiB,EAAE,OAAe;QACpE,MAAM,IAAI,GAAe;YACvB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnD,SAAS;YACT,OAAO;SACR,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACvE,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAC;QAClE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAClE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { KeyStore } from '../types/index.js';
2
+ export type { KeyStore };
3
+ /**
4
+ * In-memory key store. Keys are lost when the process exits.
5
+ * Suitable for short-lived scripts and testing.
6
+ */
7
+ export declare class MemoryKeyStore implements KeyStore {
8
+ private privateKey;
9
+ private publicKey;
10
+ private agentId;
11
+ getPrivateKey(): Promise<Uint8Array | null>;
12
+ getPublicKey(): Promise<string | null>;
13
+ getAgentId(): Promise<string | null>;
14
+ store(privateKey: Uint8Array, publicKey: string, agentId: string): Promise<void>;
15
+ clear(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB;;;GAGG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;IAEhC,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI3C,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAItC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIpC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}