@inkd/sdk 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +288 -0
  2. package/dist/InkdClient.d.ts +89 -0
  3. package/dist/InkdClient.d.ts.map +1 -0
  4. package/dist/InkdClient.js +398 -0
  5. package/dist/InkdClient.js.map +1 -0
  6. package/dist/ProjectRegistry.d.ts +655 -0
  7. package/dist/ProjectRegistry.d.ts.map +1 -0
  8. package/dist/ProjectRegistry.js +708 -0
  9. package/dist/ProjectRegistry.js.map +1 -0
  10. package/dist/__tests__/InkdClient.advanced.test.d.ts +10 -0
  11. package/dist/__tests__/InkdClient.advanced.test.d.ts.map +1 -0
  12. package/dist/__tests__/InkdClient.advanced.test.js +588 -0
  13. package/dist/__tests__/InkdClient.advanced.test.js.map +1 -0
  14. package/dist/__tests__/InkdClient.connectArweave.test.d.ts +10 -0
  15. package/dist/__tests__/InkdClient.connectArweave.test.d.ts.map +1 -0
  16. package/dist/__tests__/InkdClient.connectArweave.test.js +132 -0
  17. package/dist/__tests__/InkdClient.connectArweave.test.js.map +1 -0
  18. package/dist/__tests__/InkdClient.test.d.ts +2 -0
  19. package/dist/__tests__/InkdClient.test.d.ts.map +1 -0
  20. package/dist/__tests__/InkdClient.test.js +259 -0
  21. package/dist/__tests__/InkdClient.test.js.map +1 -0
  22. package/dist/__tests__/ProjectRegistry.test.d.ts +8 -0
  23. package/dist/__tests__/ProjectRegistry.test.d.ts.map +1 -0
  24. package/dist/__tests__/ProjectRegistry.test.js +689 -0
  25. package/dist/__tests__/ProjectRegistry.test.js.map +1 -0
  26. package/dist/__tests__/arweave.test.d.ts +9 -0
  27. package/dist/__tests__/arweave.test.d.ts.map +1 -0
  28. package/dist/__tests__/arweave.test.js +353 -0
  29. package/dist/__tests__/arweave.test.js.map +1 -0
  30. package/dist/__tests__/encryption.test.d.ts +2 -0
  31. package/dist/__tests__/encryption.test.d.ts.map +1 -0
  32. package/dist/__tests__/encryption.test.js +154 -0
  33. package/dist/__tests__/encryption.test.js.map +1 -0
  34. package/dist/__tests__/errors.test.d.ts +2 -0
  35. package/dist/__tests__/errors.test.d.ts.map +1 -0
  36. package/dist/__tests__/errors.test.js +136 -0
  37. package/dist/__tests__/errors.test.js.map +1 -0
  38. package/dist/__tests__/events.test.d.ts +10 -0
  39. package/dist/__tests__/events.test.d.ts.map +1 -0
  40. package/dist/__tests__/events.test.js +380 -0
  41. package/dist/__tests__/events.test.js.map +1 -0
  42. package/dist/__tests__/index.InkdClient.test.d.ts +8 -0
  43. package/dist/__tests__/index.InkdClient.test.d.ts.map +1 -0
  44. package/dist/__tests__/index.InkdClient.test.js +422 -0
  45. package/dist/__tests__/index.InkdClient.test.js.map +1 -0
  46. package/dist/__tests__/multicall.test.d.ts +9 -0
  47. package/dist/__tests__/multicall.test.d.ts.map +1 -0
  48. package/dist/__tests__/multicall.test.js +362 -0
  49. package/dist/__tests__/multicall.test.js.map +1 -0
  50. package/dist/__tests__/types.test.d.ts +2 -0
  51. package/dist/__tests__/types.test.d.ts.map +1 -0
  52. package/dist/__tests__/types.test.js +35 -0
  53. package/dist/__tests__/types.test.js.map +1 -0
  54. package/dist/abi.d.ts +2632 -0
  55. package/dist/abi.d.ts.map +1 -0
  56. package/dist/abi.js +3423 -0
  57. package/dist/abi.js.map +1 -0
  58. package/dist/arweave.d.ts +45 -0
  59. package/dist/arweave.d.ts.map +1 -0
  60. package/dist/arweave.js +154 -0
  61. package/dist/arweave.js.map +1 -0
  62. package/dist/encryption.d.ts +52 -0
  63. package/dist/encryption.d.ts.map +1 -0
  64. package/dist/encryption.js +80 -0
  65. package/dist/encryption.js.map +1 -0
  66. package/dist/errors.d.ts +63 -0
  67. package/dist/errors.d.ts.map +1 -0
  68. package/dist/errors.js +124 -0
  69. package/dist/errors.js.map +1 -0
  70. package/dist/events.d.ts +136 -0
  71. package/dist/events.d.ts.map +1 -0
  72. package/dist/events.js +131 -0
  73. package/dist/events.js.map +1 -0
  74. package/dist/hooks/index.d.ts +5 -0
  75. package/dist/hooks/index.d.ts.map +1 -0
  76. package/dist/hooks/index.js +12 -0
  77. package/dist/hooks/index.js.map +1 -0
  78. package/dist/hooks/useInkd.d.ts +24 -0
  79. package/dist/hooks/useInkd.d.ts.map +1 -0
  80. package/dist/hooks/useInkd.js +109 -0
  81. package/dist/hooks/useInkd.js.map +1 -0
  82. package/dist/hooks/useInkdHolder.d.ts +16 -0
  83. package/dist/hooks/useInkdHolder.d.ts.map +1 -0
  84. package/dist/hooks/useInkdHolder.js +45 -0
  85. package/dist/hooks/useInkdHolder.js.map +1 -0
  86. package/dist/hooks/useInscriptions.d.ts +17 -0
  87. package/dist/hooks/useInscriptions.d.ts.map +1 -0
  88. package/dist/hooks/useInscriptions.js +46 -0
  89. package/dist/hooks/useInscriptions.js.map +1 -0
  90. package/dist/hooks/useToken.d.ts +16 -0
  91. package/dist/hooks/useToken.d.ts.map +1 -0
  92. package/dist/hooks/useToken.js +45 -0
  93. package/dist/hooks/useToken.js.map +1 -0
  94. package/dist/index.d.ts +54 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +290 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/multicall.d.ts +134 -0
  99. package/dist/multicall.d.ts.map +1 -0
  100. package/dist/multicall.js +182 -0
  101. package/dist/multicall.js.map +1 -0
  102. package/dist/types.d.ts +187 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +32 -0
  105. package/dist/types.js.map +1 -0
  106. package/package.json +78 -0
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @file useInscriptions.ts
3
+ * @description React hook for fetching inscriptions on an InkdToken.
4
+ */
5
+ import type { InkdClient } from "../InkdClient";
6
+ import type { Inscription } from "../types";
7
+ interface UseInscriptionsReturn {
8
+ inscriptions: Inscription[];
9
+ loading: boolean;
10
+ error: Error | null;
11
+ refetch: () => void;
12
+ activeCount: number;
13
+ }
14
+ /** Fetch inscriptions on a specific InkdToken with loading states. */
15
+ export declare function useInscriptions(client: InkdClient, tokenId: bigint): UseInscriptionsReturn;
16
+ export {};
17
+ //# sourceMappingURL=useInscriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInscriptions.d.ts","sourceRoot":"","sources":["../../src/hooks/useInscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,UAAU,qBAAqB;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAuC1F"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * @file useInscriptions.ts
4
+ * @description React hook for fetching inscriptions on an InkdToken.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.useInscriptions = useInscriptions;
8
+ const react_1 = require("react");
9
+ /** Fetch inscriptions on a specific InkdToken with loading states. */
10
+ function useInscriptions(client, tokenId) {
11
+ const [inscriptions, setInscriptions] = (0, react_1.useState)([]);
12
+ const [loading, setLoading] = (0, react_1.useState)(true);
13
+ const [error, setError] = (0, react_1.useState)(null);
14
+ const [refetchKey, setRefetchKey] = (0, react_1.useState)(0);
15
+ (0, react_1.useEffect)(() => {
16
+ let cancelled = false;
17
+ async function fetchInscriptions() {
18
+ setLoading(true);
19
+ setError(null);
20
+ try {
21
+ const data = await client.getInscriptions(tokenId);
22
+ if (!cancelled) {
23
+ setInscriptions(data);
24
+ }
25
+ }
26
+ catch (err) {
27
+ if (!cancelled) {
28
+ setError(err instanceof Error ? err : new Error(String(err)));
29
+ }
30
+ }
31
+ finally {
32
+ if (!cancelled) {
33
+ setLoading(false);
34
+ }
35
+ }
36
+ }
37
+ void fetchInscriptions();
38
+ return () => {
39
+ cancelled = true;
40
+ };
41
+ }, [client, tokenId, refetchKey]);
42
+ const refetch = () => setRefetchKey((k) => k + 1);
43
+ const activeCount = inscriptions.filter((i) => !i.isRemoved).length;
44
+ return { inscriptions, loading, error, refetch, activeCount };
45
+ }
46
+ //# sourceMappingURL=useInscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInscriptions.js","sourceRoot":"","sources":["../../src/hooks/useInscriptions.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,0CAuCC;AApDD,iCAA4C;AAY5C,sEAAsE;AACtE,SAAgB,eAAe,CAAC,MAAkB,EAAE,OAAe;IACjE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAgB,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAEhD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,UAAU,iBAAiB;YAC9B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,eAAe,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,UAAU,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,iBAAiB,EAAE,CAAC;QAEzB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAEpE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @file useToken.ts
3
+ * @description React hook for fetching InkdToken data with loading states.
4
+ */
5
+ import type { InkdClient } from "../InkdClient";
6
+ import type { InkdTokenData } from "../types";
7
+ interface UseTokenReturn {
8
+ token: InkdTokenData | null;
9
+ loading: boolean;
10
+ error: Error | null;
11
+ refetch: () => void;
12
+ }
13
+ /** Fetch and watch a specific InkdToken's data. */
14
+ export declare function useToken(client: InkdClient, tokenId: bigint): UseTokenReturn;
15
+ export {};
16
+ //# sourceMappingURL=useToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToken.d.ts","sourceRoot":"","sources":["../../src/hooks/useToken.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAsC5E"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * @file useToken.ts
4
+ * @description React hook for fetching InkdToken data with loading states.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.useToken = useToken;
8
+ const react_1 = require("react");
9
+ /** Fetch and watch a specific InkdToken's data. */
10
+ function useToken(client, tokenId) {
11
+ const [token, setToken] = (0, react_1.useState)(null);
12
+ const [loading, setLoading] = (0, react_1.useState)(true);
13
+ const [error, setError] = (0, react_1.useState)(null);
14
+ const [refetchKey, setRefetchKey] = (0, react_1.useState)(0);
15
+ (0, react_1.useEffect)(() => {
16
+ let cancelled = false;
17
+ async function fetchToken() {
18
+ setLoading(true);
19
+ setError(null);
20
+ try {
21
+ const data = await client.getToken(tokenId);
22
+ if (!cancelled) {
23
+ setToken(data);
24
+ }
25
+ }
26
+ catch (err) {
27
+ if (!cancelled) {
28
+ setError(err instanceof Error ? err : new Error(String(err)));
29
+ }
30
+ }
31
+ finally {
32
+ if (!cancelled) {
33
+ setLoading(false);
34
+ }
35
+ }
36
+ }
37
+ void fetchToken();
38
+ return () => {
39
+ cancelled = true;
40
+ };
41
+ }, [client, tokenId, refetchKey]);
42
+ const refetch = () => setRefetchKey((k) => k + 1);
43
+ return { token, loading, error, refetch };
44
+ }
45
+ //# sourceMappingURL=useToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToken.js","sourceRoot":"","sources":["../../src/hooks/useToken.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAcH,4BAsCC;AAlDD,iCAA4C;AAW5C,mDAAmD;AACnD,SAAgB,QAAQ,CAAC,MAAkB,EAAE,OAAe;IAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAuB,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAEhD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,UAAU,UAAU;YACvB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,UAAU,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,UAAU,EAAE,CAAC;QAElB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAElD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @inkd/sdk — Inkd Protocol TypeScript SDK
3
+ * Permanent on-chain project registry on Base
4
+ */
5
+ export { watchProjectCreated, watchVersionPushed, watchRegistryEvents, } from "./events.js";
6
+ export type { ProjectCreatedEvent, VersionPushedEvent, Unwatch, ProjectCreatedFilter, VersionPushedFilter, } from "./events.js";
7
+ export { batchGetProjects, batchGetVersions, batchGetFees, batchGetProjectsWithVersions, } from "./multicall.js";
8
+ export type { ProjectData, VersionData, RegistryFees, BatchResult, } from "./multicall.js";
9
+ import { type WalletClient, type Address, type Hash } from 'viem';
10
+ export declare const ADDRESSES: {
11
+ mainnet: {
12
+ token: Address;
13
+ registry: Address;
14
+ treasury: Address;
15
+ };
16
+ testnet: {
17
+ token: Address;
18
+ registry: Address;
19
+ treasury: Address;
20
+ };
21
+ };
22
+ export interface InkdClientOptions {
23
+ walletClient: WalletClient;
24
+ network?: 'mainnet' | 'testnet';
25
+ rpcUrl?: string;
26
+ }
27
+ export declare class InkdClient {
28
+ private wallet;
29
+ private public;
30
+ private addrs;
31
+ constructor(opts: InkdClientOptions);
32
+ approveToken(amount?: bigint): Promise<Hash>;
33
+ tokenBalance(address?: Address): Promise<bigint>;
34
+ createProject(opts: {
35
+ name: string;
36
+ description: string;
37
+ license?: string;
38
+ readmeHash?: string;
39
+ isPublic?: boolean;
40
+ isAgent?: boolean;
41
+ agentEndpoint?: string;
42
+ }): Promise<Hash>;
43
+ pushVersion(projectId: bigint, opts: {
44
+ arweaveHash: string;
45
+ versionTag: string;
46
+ changelog?: string;
47
+ }): Promise<Hash>;
48
+ getProject(projectId: bigint): Promise<unknown>;
49
+ getVersions(projectId: bigint): Promise<unknown>;
50
+ getVersionFee(): Promise<bigint>;
51
+ transferProject(projectId: bigint, newOwner: Address): Promise<Hash>;
52
+ getAgentProjects(offset?: bigint, limit?: bigint): Promise<readonly bigint[]>;
53
+ }
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,OAAO,EACP,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAEc,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAC9D,MAAM,MAAM,CAAA;AAkJb,eAAO,MAAM,SAAS;;eAEL,OAAO;kBACJ,OAAO;kBACP,OAAO;;;eAGV,OAAO;kBACJ,OAAO;kBACP,OAAO;;CAE1B,CAAA;AAID,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAA0B;gBAE3B,IAAI,EAAE,iBAAiB;IAa7B,YAAY,CAAC,MAAM,SAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrD,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhD,aAAa,CAAC,IAAI,EAAE;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBX,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QACzC,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcX,UAAU,CAAC,SAAS,EAAE,MAAM;IAS5B,WAAW,CAAC,SAAS,EAAE,MAAM;IAS7B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAQhC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpE,gBAAgB,CAAC,MAAM,SAAK,EAAE,KAAK,SAAO,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;CAQ9E"}
package/dist/index.js ADDED
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ /**
3
+ * @inkd/sdk — Inkd Protocol TypeScript SDK
4
+ * Permanent on-chain project registry on Base
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.InkdClient = exports.ADDRESSES = exports.batchGetProjectsWithVersions = exports.batchGetFees = exports.batchGetVersions = exports.batchGetProjects = exports.watchRegistryEvents = exports.watchVersionPushed = exports.watchProjectCreated = void 0;
8
+ // ─── Event Subscriptions ─────────────────────────────────────────────────────
9
+ var events_js_1 = require("./events.js");
10
+ Object.defineProperty(exports, "watchProjectCreated", { enumerable: true, get: function () { return events_js_1.watchProjectCreated; } });
11
+ Object.defineProperty(exports, "watchVersionPushed", { enumerable: true, get: function () { return events_js_1.watchVersionPushed; } });
12
+ Object.defineProperty(exports, "watchRegistryEvents", { enumerable: true, get: function () { return events_js_1.watchRegistryEvents; } });
13
+ // ─── Batch Reads (Multicall3) ─────────────────────────────────────────────────
14
+ var multicall_js_1 = require("./multicall.js");
15
+ Object.defineProperty(exports, "batchGetProjects", { enumerable: true, get: function () { return multicall_js_1.batchGetProjects; } });
16
+ Object.defineProperty(exports, "batchGetVersions", { enumerable: true, get: function () { return multicall_js_1.batchGetVersions; } });
17
+ Object.defineProperty(exports, "batchGetFees", { enumerable: true, get: function () { return multicall_js_1.batchGetFees; } });
18
+ Object.defineProperty(exports, "batchGetProjectsWithVersions", { enumerable: true, get: function () { return multicall_js_1.batchGetProjectsWithVersions; } });
19
+ const viem_1 = require("viem");
20
+ const chains_1 = require("viem/chains");
21
+ // ─── ABIs (minimal) ──────────────────────────────────────────────────────────
22
+ const REGISTRY_ABI = [
23
+ {
24
+ name: 'createProject',
25
+ type: 'function',
26
+ inputs: [
27
+ { name: 'name', type: 'string' },
28
+ { name: 'description', type: 'string' },
29
+ { name: 'license', type: 'string' },
30
+ { name: 'readmeHash', type: 'string' },
31
+ { name: 'agentEndpoint', type: 'string' },
32
+ { name: 'isAgent', type: 'bool' },
33
+ { name: 'isPublic', type: 'bool' },
34
+ ],
35
+ outputs: [{ name: 'projectId', type: 'uint256' }],
36
+ },
37
+ {
38
+ name: 'pushVersion',
39
+ type: 'function',
40
+ inputs: [
41
+ { name: 'projectId', type: 'uint256' },
42
+ { name: 'arweaveHash', type: 'string' },
43
+ { name: 'versionTag', type: 'string' },
44
+ { name: 'changelog', type: 'string' },
45
+ ],
46
+ outputs: [],
47
+ },
48
+ {
49
+ name: 'transferProject',
50
+ type: 'function',
51
+ inputs: [
52
+ { name: 'projectId', type: 'uint256' },
53
+ { name: 'newOwner', type: 'address' },
54
+ ],
55
+ outputs: [],
56
+ },
57
+ {
58
+ name: 'addCollaborator',
59
+ type: 'function',
60
+ inputs: [
61
+ { name: 'projectId', type: 'uint256' },
62
+ { name: 'collaborator', type: 'address' },
63
+ ],
64
+ outputs: [],
65
+ },
66
+ {
67
+ name: 'getProject',
68
+ type: 'function',
69
+ stateMutability: 'view',
70
+ inputs: [{ name: 'projectId', type: 'uint256' }],
71
+ outputs: [{
72
+ type: 'tuple',
73
+ components: [
74
+ { name: 'id', type: 'uint256' },
75
+ { name: 'name', type: 'string' },
76
+ { name: 'description', type: 'string' },
77
+ { name: 'license', type: 'string' },
78
+ { name: 'readmeHash', type: 'string' },
79
+ { name: 'agentEndpoint', type: 'string' },
80
+ { name: 'owner', type: 'address' },
81
+ { name: 'isAgent', type: 'bool' },
82
+ { name: 'isPublic', type: 'bool' },
83
+ { name: 'createdAt', type: 'uint256' },
84
+ { name: 'versionCount', type: 'uint256' },
85
+ { name: 'exists', type: 'bool' },
86
+ ]
87
+ }],
88
+ },
89
+ {
90
+ name: 'getVersions',
91
+ type: 'function',
92
+ stateMutability: 'view',
93
+ inputs: [{ name: 'projectId', type: 'uint256' }],
94
+ outputs: [{
95
+ type: 'tuple[]',
96
+ components: [
97
+ { name: 'projectId', type: 'uint256' },
98
+ { name: 'arweaveHash', type: 'string' },
99
+ { name: 'versionTag', type: 'string' },
100
+ { name: 'changelog', type: 'string' },
101
+ { name: 'pushedBy', type: 'address' },
102
+ { name: 'pushedAt', type: 'uint256' },
103
+ ]
104
+ }],
105
+ },
106
+ {
107
+ name: 'versionFee',
108
+ type: 'function',
109
+ stateMutability: 'view',
110
+ inputs: [],
111
+ outputs: [{ type: 'uint256' }],
112
+ },
113
+ {
114
+ name: 'transferFee',
115
+ type: 'function',
116
+ stateMutability: 'view',
117
+ inputs: [],
118
+ outputs: [{ type: 'uint256' }],
119
+ },
120
+ {
121
+ name: 'getAgentProjects',
122
+ type: 'function',
123
+ stateMutability: 'view',
124
+ inputs: [
125
+ { name: 'offset', type: 'uint256' },
126
+ { name: 'limit', type: 'uint256' },
127
+ ],
128
+ outputs: [{ type: 'uint256[]' }],
129
+ },
130
+ ];
131
+ const TOKEN_ABI = [
132
+ {
133
+ name: 'approve',
134
+ type: 'function',
135
+ inputs: [
136
+ { name: 'spender', type: 'address' },
137
+ { name: 'amount', type: 'uint256' },
138
+ ],
139
+ outputs: [{ type: 'bool' }],
140
+ },
141
+ {
142
+ name: 'allowance',
143
+ type: 'function',
144
+ stateMutability: 'view',
145
+ inputs: [
146
+ { name: 'owner', type: 'address' },
147
+ { name: 'spender', type: 'address' },
148
+ ],
149
+ outputs: [{ type: 'uint256' }],
150
+ },
151
+ {
152
+ name: 'balanceOf',
153
+ type: 'function',
154
+ stateMutability: 'view',
155
+ inputs: [{ name: 'account', type: 'address' }],
156
+ outputs: [{ type: 'uint256' }],
157
+ },
158
+ ];
159
+ // ─── Contract Addresses ───────────────────────────────────────────────────────
160
+ exports.ADDRESSES = {
161
+ mainnet: {
162
+ token: '', // TBD post-launch
163
+ registry: '',
164
+ treasury: '',
165
+ },
166
+ testnet: {
167
+ token: '', // TBD post-testnet deploy
168
+ registry: '',
169
+ treasury: '',
170
+ },
171
+ };
172
+ class InkdClient {
173
+ wallet;
174
+ public;
175
+ addrs;
176
+ constructor(opts) {
177
+ this.wallet = opts.walletClient;
178
+ const network = opts.network ?? 'testnet';
179
+ const chain = network === 'mainnet' ? chains_1.base : chains_1.baseSepolia;
180
+ this.addrs = exports.ADDRESSES[network];
181
+ this.public = (0, viem_1.createPublicClient)({
182
+ chain,
183
+ transport: (0, viem_1.http)(opts.rpcUrl),
184
+ });
185
+ }
186
+ // ─── Token Helpers ──────────────────────────────────────────────────────────
187
+ async approveToken(amount = (0, viem_1.parseEther)('1')) {
188
+ const [account] = await this.wallet.getAddresses();
189
+ return this.wallet.writeContract({
190
+ address: this.addrs.token,
191
+ abi: TOKEN_ABI,
192
+ functionName: 'approve',
193
+ args: [this.addrs.registry, amount],
194
+ account,
195
+ chain: this.wallet.chain,
196
+ });
197
+ }
198
+ async tokenBalance(address) {
199
+ const [account] = await this.wallet.getAddresses();
200
+ return this.public.readContract({
201
+ address: this.addrs.token,
202
+ abi: TOKEN_ABI,
203
+ functionName: 'balanceOf',
204
+ args: [address ?? account],
205
+ });
206
+ }
207
+ // ─── Projects ───────────────────────────────────────────────────────────────
208
+ async createProject(opts) {
209
+ const [account] = await this.wallet.getAddresses();
210
+ return this.wallet.writeContract({
211
+ address: this.addrs.registry,
212
+ abi: REGISTRY_ABI,
213
+ functionName: 'createProject',
214
+ args: [
215
+ opts.name,
216
+ opts.description,
217
+ opts.license ?? 'MIT',
218
+ opts.readmeHash ?? '',
219
+ opts.agentEndpoint ?? '',
220
+ opts.isAgent ?? false,
221
+ opts.isPublic ?? true,
222
+ ],
223
+ account,
224
+ chain: this.wallet.chain,
225
+ });
226
+ }
227
+ async pushVersion(projectId, opts) {
228
+ const [account] = await this.wallet.getAddresses();
229
+ const fee = await this.getVersionFee();
230
+ return this.wallet.writeContract({
231
+ address: this.addrs.registry,
232
+ abi: REGISTRY_ABI,
233
+ functionName: 'pushVersion',
234
+ args: [projectId, opts.arweaveHash, opts.versionTag, opts.changelog ?? ''],
235
+ account,
236
+ chain: this.wallet.chain,
237
+ value: fee,
238
+ });
239
+ }
240
+ async getProject(projectId) {
241
+ return this.public.readContract({
242
+ address: this.addrs.registry,
243
+ abi: REGISTRY_ABI,
244
+ functionName: 'getProject',
245
+ args: [projectId],
246
+ });
247
+ }
248
+ async getVersions(projectId) {
249
+ return this.public.readContract({
250
+ address: this.addrs.registry,
251
+ abi: REGISTRY_ABI,
252
+ functionName: 'getVersions',
253
+ args: [projectId],
254
+ });
255
+ }
256
+ async getVersionFee() {
257
+ return this.public.readContract({
258
+ address: this.addrs.registry,
259
+ abi: REGISTRY_ABI,
260
+ functionName: 'versionFee',
261
+ });
262
+ }
263
+ async transferProject(projectId, newOwner) {
264
+ const [account] = await this.wallet.getAddresses();
265
+ const fee = await this.public.readContract({
266
+ address: this.addrs.registry,
267
+ abi: REGISTRY_ABI,
268
+ functionName: 'transferFee',
269
+ });
270
+ return this.wallet.writeContract({
271
+ address: this.addrs.registry,
272
+ abi: REGISTRY_ABI,
273
+ functionName: 'transferProject',
274
+ args: [projectId, newOwner],
275
+ account,
276
+ chain: this.wallet.chain,
277
+ value: fee,
278
+ });
279
+ }
280
+ async getAgentProjects(offset = 0n, limit = 100n) {
281
+ return this.public.readContract({
282
+ address: this.addrs.registry,
283
+ abi: REGISTRY_ABI,
284
+ functionName: 'getAgentProjects',
285
+ args: [offset, limit],
286
+ });
287
+ }
288
+ }
289
+ exports.InkdClient = InkdClient;
290
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * @file multicall.ts
3
+ * @description Multicall3-powered batch reads for InkdRegistry.
4
+ * Fetches multiple projects or versions in a single RPC round-trip,
5
+ * dramatically reducing latency when listing/paginating projects.
6
+ *
7
+ * Uses viem's built-in `multicall` helper, which targets Multicall3
8
+ * (0xcA11bde05977b3631167028862bE2a173976CA11 — deployed on Base and Base Sepolia).
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { batchGetProjects, batchGetFees } from "@inkd/sdk";
13
+ * import { createPublicClient, http } from "viem";
14
+ * import { baseSepolia } from "viem/chains";
15
+ *
16
+ * const publicClient = createPublicClient({ chain: baseSepolia, transport: http() });
17
+ *
18
+ * // Fetch 5 projects in one RPC call
19
+ * const projects = await batchGetProjects(publicClient, "0xRegistry...", [1n, 2n, 3n, 4n, 5n]);
20
+ *
21
+ * // Fetch both fees in one RPC call
22
+ * const fees = await batchGetFees(publicClient, "0xRegistry...");
23
+ * console.log("Version fee:", fees.versionFee);
24
+ * console.log("Transfer fee:", fees.transferFee);
25
+ * ```
26
+ */
27
+ import type { PublicClient } from "viem";
28
+ import type { Address } from "./ProjectRegistry.js";
29
+ /** Decoded on-chain project data. Mirrors the InkdRegistry.Project struct. */
30
+ export interface ProjectData {
31
+ id: bigint;
32
+ name: string;
33
+ description: string;
34
+ license: string;
35
+ readmeHash: string;
36
+ owner: Address;
37
+ isPublic: boolean;
38
+ isAgent: boolean;
39
+ agentEndpoint: string;
40
+ createdAt: bigint;
41
+ versionCount: bigint;
42
+ exists: boolean;
43
+ }
44
+ /** Decoded on-chain version data. Mirrors the InkdRegistry.Version struct. */
45
+ export interface VersionData {
46
+ projectId: bigint;
47
+ arweaveHash: string;
48
+ versionTag: string;
49
+ changelog: string;
50
+ pushedBy: Address;
51
+ pushedAt: bigint;
52
+ }
53
+ /** Protocol fee snapshot fetched in a single multicall. */
54
+ export interface RegistryFees {
55
+ /** Fee in wei required to push a new version. */
56
+ versionFee: bigint;
57
+ /** Fee in wei required to transfer project ownership. */
58
+ transferFee: bigint;
59
+ /** Amount of $INKD tokens locked per project on creation. */
60
+ tokenLockAmount: bigint;
61
+ }
62
+ /** Result wrapper for individual multicall calls that may fail. */
63
+ export interface BatchResult<T> {
64
+ /** The decoded value, or null if the call reverted/failed. */
65
+ data: T | null;
66
+ /** True if the call succeeded. */
67
+ success: boolean;
68
+ /** Revert reason or error message, if the call failed. */
69
+ error?: string;
70
+ }
71
+ /**
72
+ * Fetch multiple projects by their on-chain IDs in a **single RPC call**.
73
+ *
74
+ * Projects that don't exist (reverted getProject call) will have
75
+ * `success: false` and `data: null` in the returned array.
76
+ *
77
+ * @param publicClient A connected viem PublicClient (Base or Base Sepolia).
78
+ * @param registryAddress Address of the deployed InkdRegistry contract.
79
+ * @param projectIds Array of project IDs to fetch (bigint).
80
+ * @returns Promise resolving to a `BatchResult<ProjectData>[]` in the same order.
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * const results = await batchGetProjects(client, registry, [1n, 2n, 3n]);
85
+ * for (const r of results) {
86
+ * if (r.success && r.data) console.log(r.data.name);
87
+ * }
88
+ * ```
89
+ */
90
+ export declare function batchGetProjects(publicClient: PublicClient, registryAddress: Address, projectIds: bigint[]): Promise<BatchResult<ProjectData>[]>;
91
+ /**
92
+ * Fetch the latest versions for multiple projects in a **single RPC call**.
93
+ *
94
+ * Each element in the returned array corresponds to the project ID at the
95
+ * same index. Failed calls return `{ success: false, data: null }`.
96
+ *
97
+ * @param publicClient A connected viem PublicClient.
98
+ * @param registryAddress Address of the deployed InkdRegistry contract.
99
+ * @param projectIds Array of project IDs whose versions to fetch.
100
+ * @returns Promise resolving to `BatchResult<VersionData[]>[]` in the same order.
101
+ */
102
+ export declare function batchGetVersions(publicClient: PublicClient, registryAddress: Address, projectIds: bigint[]): Promise<BatchResult<VersionData[]>[]>;
103
+ /**
104
+ * Fetch versionFee, transferFee, and TOKEN_LOCK_AMOUNT in a **single RPC call**.
105
+ *
106
+ * Useful before any write operation (create project, push version, transfer)
107
+ * to confirm the required fee without extra round-trips.
108
+ *
109
+ * @param publicClient A connected viem PublicClient.
110
+ * @param registryAddress Address of the deployed InkdRegistry contract.
111
+ * @returns `RegistryFees` with all three fee values.
112
+ * @throws If any of the three calls reverts (should never happen on a valid registry).
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * const { versionFee, transferFee, tokenLockAmount } = await batchGetFees(client, registry);
117
+ * ```
118
+ */
119
+ export declare function batchGetFees(publicClient: PublicClient, registryAddress: Address): Promise<RegistryFees>;
120
+ /**
121
+ * Fetch projects AND their versions for multiple IDs in **two RPC calls** (projects batch, then versions batch).
122
+ *
123
+ * This is more efficient than fetching each project + versions individually (2N+N calls → 2 calls).
124
+ *
125
+ * @param publicClient A connected viem PublicClient.
126
+ * @param registryAddress Address of the deployed InkdRegistry contract.
127
+ * @param projectIds Array of project IDs to hydrate.
128
+ * @returns Array of `{ project, versions }` objects in the same order as input IDs.
129
+ */
130
+ export declare function batchGetProjectsWithVersions(publicClient: PublicClient, registryAddress: Address, projectIds: bigint[]): Promise<Array<{
131
+ project: BatchResult<ProjectData>;
132
+ versions: BatchResult<VersionData[]>;
133
+ }>>;
134
+ //# sourceMappingURL=multicall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,8DAA8D;IAC9D,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAqBrC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAqBvC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,YAAY,CAAC,CAqCvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAChD,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,CAY7F"}