@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,398 @@
1
+ "use strict";
2
+ /**
3
+ * @file InkdClient.ts
4
+ * @description Main client class for interacting with the Inkd Protocol.
5
+ * Handles InkdToken minting, InkdVault inscriptions, and InkdRegistry operations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.InkdClient = void 0;
9
+ const abi_1 = require("./abi");
10
+ const arweave_1 = require("./arweave");
11
+ const encryption_1 = require("./encryption");
12
+ const errors_1 = require("./errors");
13
+ /**
14
+ * The main Inkd Protocol client.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { InkdClient } from "@inkd/sdk";
19
+ * import { createWalletClient, createPublicClient, http } from "viem";
20
+ * import { baseSepolia } from "viem/chains";
21
+ * import { privateKeyToAccount } from "viem/accounts";
22
+ *
23
+ * const inkd = new InkdClient({
24
+ * tokenAddress: "0x...",
25
+ * vaultAddress: "0x...",
26
+ * registryAddress: "0x...",
27
+ * chainId: 84532,
28
+ * });
29
+ *
30
+ * inkd.connect(walletClient, publicClient);
31
+ * await inkd.connectArweave("private-key");
32
+ *
33
+ * // Mint an InkdToken
34
+ * const { tokenId } = await inkd.mintToken();
35
+ *
36
+ * // Inscribe data on it
37
+ * const result = await inkd.inscribe(tokenId, Buffer.from("agent brain data"), {
38
+ * contentType: "application/json",
39
+ * name: "brain.json",
40
+ * });
41
+ * ```
42
+ */
43
+ class InkdClient {
44
+ config;
45
+ walletClient = null;
46
+ publicClient = null;
47
+ arweave = null;
48
+ encryption;
49
+ constructor(config) {
50
+ this.config = config;
51
+ this.encryption = new encryption_1.PassthroughEncryption();
52
+ }
53
+ // ─── Connection ───────────────────────────────────────────────────────
54
+ /** Connect wallet and public clients for on-chain interaction. */
55
+ connect(walletClient, publicClient) {
56
+ this.walletClient = walletClient;
57
+ this.publicClient = publicClient;
58
+ }
59
+ /** Connect Arweave storage client for file uploads. */
60
+ async connectArweave(privateKey, irysUrl, gateway) {
61
+ this.arweave = new arweave_1.ArweaveClient(irysUrl ?? "https://node2.irys.xyz", privateKey, gateway ?? "https://arweave.net");
62
+ await this.arweave.connect();
63
+ }
64
+ /** Set a custom encryption provider (for Lit Protocol integration). */
65
+ setEncryptionProvider(provider) {
66
+ this.encryption = provider;
67
+ }
68
+ // ─── InkdToken: Minting ───────────────────────────────────────────────
69
+ /** Mint a single InkdToken. Returns the new token ID. */
70
+ async mintToken(options) {
71
+ this.requireWallet();
72
+ const mintPrice = await this.publicClient.readContract({
73
+ address: this.config.tokenAddress,
74
+ abi: abi_1.INKD_TOKEN_ABI,
75
+ functionName: "mintPrice",
76
+ });
77
+ if (options?.quantity && options.quantity > 1) {
78
+ const result = await this.batchMintTokens(options.quantity);
79
+ return { hash: result.hash, tokenId: result.tokenIds[0] };
80
+ }
81
+ const hash = await this.walletClient.writeContract({
82
+ address: this.config.tokenAddress,
83
+ abi: abi_1.INKD_TOKEN_ABI,
84
+ functionName: "mint",
85
+ value: mintPrice,
86
+ });
87
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash });
88
+ const tokenId = this.extractTokenIdFromLogs(receipt.logs);
89
+ return { hash, tokenId };
90
+ }
91
+ /** Batch mint multiple InkdTokens (max 10). */
92
+ async batchMintTokens(quantity) {
93
+ this.requireWallet();
94
+ const mintPrice = (await this.publicClient.readContract({
95
+ address: this.config.tokenAddress,
96
+ abi: abi_1.INKD_TOKEN_ABI,
97
+ functionName: "mintPrice",
98
+ }));
99
+ const hash = await this.walletClient.writeContract({
100
+ address: this.config.tokenAddress,
101
+ abi: abi_1.INKD_TOKEN_ABI,
102
+ functionName: "batchMint",
103
+ args: [BigInt(quantity)],
104
+ value: mintPrice * BigInt(quantity),
105
+ });
106
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash });
107
+ const tokenIds = this.extractAllTokenIdsFromLogs(receipt.logs);
108
+ return { hash, tokenIds };
109
+ }
110
+ // ─── InkdVault: Inscriptions ──────────────────────────────────────────
111
+ /** Inscribe data onto your InkdToken. Uploads to Arweave first. */
112
+ async inscribe(tokenId, data, options) {
113
+ this.requireWallet();
114
+ this.requireArweave();
115
+ const rawData = typeof data === "string" ? Buffer.from(data) : data;
116
+ const contentType = options?.contentType ?? "application/octet-stream";
117
+ const name = options?.name ?? `inscription-${Date.now()}`;
118
+ // Encrypt (passthrough in V1)
119
+ const encrypted = await this.encryption.encrypt(rawData instanceof Buffer ? new Uint8Array(rawData) : rawData, tokenId, this.config.tokenAddress);
120
+ // Upload to Arweave
121
+ const upload = await this.arweave.uploadFile(encrypted.ciphertext, contentType, options?.tags);
122
+ // Inscribe on-chain
123
+ const hash = await this.walletClient.writeContract({
124
+ address: this.config.vaultAddress,
125
+ abi: abi_1.INKD_VAULT_ABI,
126
+ functionName: "inscribe",
127
+ args: [tokenId, upload.hash, contentType, BigInt(upload.size), name],
128
+ value: options?.value ?? 0n,
129
+ });
130
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash });
131
+ const inscriptionIndex = this.extractInscriptionIndexFromLogs(receipt.logs);
132
+ return { hash, inscriptionIndex, upload };
133
+ }
134
+ /** Get all inscriptions on a token. */
135
+ async getInscriptions(tokenId) {
136
+ this.requirePublic();
137
+ const result = await this.publicClient.readContract({
138
+ address: this.config.vaultAddress,
139
+ abi: abi_1.INKD_VAULT_ABI,
140
+ functionName: "getInscriptions",
141
+ args: [tokenId],
142
+ });
143
+ return result.map((i) => ({
144
+ arweaveHash: i.arweaveHash,
145
+ contentType: i.contentType,
146
+ size: i.size,
147
+ name: i.name,
148
+ createdAt: i.createdAt,
149
+ isRemoved: i.isRemoved,
150
+ version: i.version,
151
+ }));
152
+ }
153
+ /** Remove (soft-delete) an inscription. */
154
+ async removeInscription(tokenId, index) {
155
+ this.requireWallet();
156
+ const hash = await this.walletClient.writeContract({
157
+ address: this.config.vaultAddress,
158
+ abi: abi_1.INKD_VAULT_ABI,
159
+ functionName: "removeInscription",
160
+ args: [tokenId, BigInt(index)],
161
+ });
162
+ await this.publicClient.waitForTransactionReceipt({ hash });
163
+ return { hash, tokenId };
164
+ }
165
+ /** Update an inscription with new data (creates a new version). */
166
+ async updateInscription(tokenId, index, newData, contentType) {
167
+ this.requireWallet();
168
+ this.requireArweave();
169
+ const rawData = typeof newData === "string" ? Buffer.from(newData) : newData;
170
+ const ct = contentType ?? "application/octet-stream";
171
+ const encrypted = await this.encryption.encrypt(rawData instanceof Buffer ? new Uint8Array(rawData) : rawData, tokenId, this.config.tokenAddress);
172
+ const upload = await this.arweave.uploadFile(encrypted.ciphertext, ct);
173
+ const hash = await this.walletClient.writeContract({
174
+ address: this.config.vaultAddress,
175
+ abi: abi_1.INKD_VAULT_ABI,
176
+ functionName: "updateInscription",
177
+ args: [tokenId, BigInt(index), upload.hash],
178
+ });
179
+ await this.publicClient.waitForTransactionReceipt({ hash });
180
+ return { hash, tokenId };
181
+ }
182
+ // ─── InkdVault: Access ────────────────────────────────────────────────
183
+ /** Grant temporary read access to a wallet. */
184
+ async grantAccess(tokenId, wallet, durationSeconds) {
185
+ this.requireWallet();
186
+ const block = await this.publicClient.getBlock();
187
+ const expiresAt = block.timestamp + BigInt(durationSeconds);
188
+ const hash = await this.walletClient.writeContract({
189
+ address: this.config.vaultAddress,
190
+ abi: abi_1.INKD_VAULT_ABI,
191
+ functionName: "grantReadAccess",
192
+ args: [tokenId, wallet, expiresAt],
193
+ });
194
+ await this.publicClient.waitForTransactionReceipt({ hash });
195
+ return { hash, tokenId };
196
+ }
197
+ /** Revoke read access from a wallet. */
198
+ async revokeAccess(tokenId, wallet) {
199
+ this.requireWallet();
200
+ const hash = await this.walletClient.writeContract({
201
+ address: this.config.vaultAddress,
202
+ abi: abi_1.INKD_VAULT_ABI,
203
+ functionName: "revokeAccess",
204
+ args: [tokenId, wallet],
205
+ });
206
+ await this.publicClient.waitForTransactionReceipt({ hash });
207
+ return { hash, tokenId };
208
+ }
209
+ // ─── InkdRegistry: Marketplace ────────────────────────────────────────
210
+ /** List an InkdToken for sale on the marketplace. */
211
+ async listForSale(tokenId, price) {
212
+ this.requireWallet();
213
+ // Approve registry to transfer token
214
+ await this.walletClient.writeContract({
215
+ address: this.config.tokenAddress,
216
+ abi: abi_1.INKD_TOKEN_ABI,
217
+ functionName: "approve",
218
+ args: [this.config.registryAddress, tokenId],
219
+ });
220
+ const hash = await this.walletClient.writeContract({
221
+ address: this.config.registryAddress,
222
+ abi: abi_1.INKD_REGISTRY_ABI,
223
+ functionName: "listForSale",
224
+ args: [tokenId, price],
225
+ });
226
+ await this.publicClient.waitForTransactionReceipt({ hash });
227
+ return { hash, tokenId };
228
+ }
229
+ /** Buy an InkdToken from the marketplace. */
230
+ async buyToken(tokenId) {
231
+ this.requireWallet();
232
+ const listing = await this.publicClient.readContract({
233
+ address: this.config.registryAddress,
234
+ abi: abi_1.INKD_REGISTRY_ABI,
235
+ functionName: "listings",
236
+ args: [tokenId],
237
+ });
238
+ const price = listing[2];
239
+ const hash = await this.walletClient.writeContract({
240
+ address: this.config.registryAddress,
241
+ abi: abi_1.INKD_REGISTRY_ABI,
242
+ functionName: "buyToken",
243
+ args: [tokenId],
244
+ value: price,
245
+ });
246
+ await this.publicClient.waitForTransactionReceipt({ hash });
247
+ return { hash, tokenId };
248
+ }
249
+ // ─── Queries ──────────────────────────────────────────────────────────
250
+ /** Get token data for a specific InkdToken. */
251
+ async getToken(tokenId) {
252
+ this.requirePublic();
253
+ const [owner, mintedAtVal, inscCount, uri] = await Promise.all([
254
+ this.publicClient.readContract({
255
+ address: this.config.tokenAddress,
256
+ abi: abi_1.INKD_TOKEN_ABI,
257
+ functionName: "ownerOf",
258
+ args: [tokenId],
259
+ }),
260
+ this.publicClient.readContract({
261
+ address: this.config.tokenAddress,
262
+ abi: abi_1.INKD_TOKEN_ABI,
263
+ functionName: "mintedAt",
264
+ args: [tokenId],
265
+ }),
266
+ this.publicClient.readContract({
267
+ address: this.config.tokenAddress,
268
+ abi: abi_1.INKD_TOKEN_ABI,
269
+ functionName: "inscriptionCount",
270
+ args: [tokenId],
271
+ }),
272
+ this.publicClient.readContract({
273
+ address: this.config.tokenAddress,
274
+ abi: abi_1.INKD_TOKEN_ABI,
275
+ functionName: "tokenURI",
276
+ args: [tokenId],
277
+ }),
278
+ ]);
279
+ return {
280
+ tokenId,
281
+ owner: owner,
282
+ mintedAt: mintedAtVal,
283
+ inscriptionCount: Number(inscCount),
284
+ tokenURI: uri,
285
+ };
286
+ }
287
+ /** Get all InkdTokens owned by an address. */
288
+ async getTokensByOwner(address) {
289
+ this.requirePublic();
290
+ const tokenIds = (await this.publicClient.readContract({
291
+ address: this.config.tokenAddress,
292
+ abi: abi_1.INKD_TOKEN_ABI,
293
+ functionName: "getTokensByOwner",
294
+ args: [address],
295
+ }));
296
+ return Promise.all(tokenIds.map((id) => this.getToken(id)));
297
+ }
298
+ /** Check if an address holds at least one InkdToken. */
299
+ async hasInkdToken(address) {
300
+ this.requirePublic();
301
+ return (await this.publicClient.readContract({
302
+ address: this.config.tokenAddress,
303
+ abi: abi_1.INKD_TOKEN_ABI,
304
+ functionName: "isInkdHolder",
305
+ args: [address],
306
+ }));
307
+ }
308
+ /** Estimate the cost of inscribing data. */
309
+ async estimateInscribeCost(fileSize) {
310
+ this.requirePublic();
311
+ const feeBps = (await this.publicClient.readContract({
312
+ address: this.config.vaultAddress,
313
+ abi: abi_1.INKD_VAULT_ABI,
314
+ functionName: "protocolFeeBps",
315
+ }));
316
+ // Rough gas estimate for inscribe
317
+ const gasEstimate = 150000n;
318
+ const gasPrice = 1000000n; // ~1 gwei on Base
319
+ const gas = gasEstimate * gasPrice;
320
+ // Arweave cost estimate (rough: ~0.00001 ETH per KB)
321
+ const arweave = BigInt(Math.ceil(fileSize / 1024)) * 10000000000000n;
322
+ // Protocol fee on a typical 0.01 ETH value
323
+ const typicalValue = 10000000000000000n; // 0.01 ETH
324
+ const protocolFee = (typicalValue * feeBps) / 10000n;
325
+ const total = gas + arweave + protocolFee;
326
+ return { gas, arweave, protocolFee, total };
327
+ }
328
+ /** Get protocol-wide statistics from the registry. */
329
+ async getStats() {
330
+ this.requirePublic();
331
+ const [totalTokens, totalInscriptions, totalVolume, totalSales] = (await this.publicClient.readContract({
332
+ address: this.config.registryAddress,
333
+ abi: abi_1.INKD_REGISTRY_ABI,
334
+ functionName: "getStats",
335
+ }));
336
+ return { totalTokens, totalInscriptions, totalVolume, totalSales };
337
+ }
338
+ // ─── Internal ─────────────────────────────────────────────────────────
339
+ requireWallet() {
340
+ if (!this.walletClient || !this.publicClient)
341
+ throw new errors_1.ClientNotConnected();
342
+ }
343
+ requirePublic() {
344
+ if (!this.publicClient)
345
+ throw new errors_1.ClientNotConnected();
346
+ }
347
+ requireArweave() {
348
+ if (!this.arweave)
349
+ throw new errors_1.ArweaveNotConnected();
350
+ }
351
+ extractTokenIdFromLogs(logs) {
352
+ for (const log of logs) {
353
+ const l = log;
354
+ // Transfer event: topic[0]=Transfer, topic[1]=from, topic[2]=to, topic[3]=tokenId
355
+ if (l.topics && l.topics.length >= 4) {
356
+ try {
357
+ return BigInt(l.topics[3]);
358
+ }
359
+ catch {
360
+ continue;
361
+ }
362
+ }
363
+ }
364
+ return undefined;
365
+ }
366
+ extractAllTokenIdsFromLogs(logs) {
367
+ const tokenIds = [];
368
+ for (const log of logs) {
369
+ const l = log;
370
+ if (l.topics && l.topics.length >= 4) {
371
+ try {
372
+ tokenIds.push(BigInt(l.topics[3]));
373
+ }
374
+ catch {
375
+ continue;
376
+ }
377
+ }
378
+ }
379
+ return tokenIds;
380
+ }
381
+ extractInscriptionIndexFromLogs(logs) {
382
+ for (const log of logs) {
383
+ const l = log;
384
+ // Inscribed event: topic[0]=Inscribed, topic[1]=tokenId, topic[2]=inscriptionIndex
385
+ if (l.topics && l.topics.length >= 3) {
386
+ try {
387
+ return BigInt(l.topics[2]);
388
+ }
389
+ catch {
390
+ continue;
391
+ }
392
+ }
393
+ }
394
+ return 0n;
395
+ }
396
+ }
397
+ exports.InkdClient = InkdClient;
398
+ //# sourceMappingURL=InkdClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InkdClient.js","sourceRoot":"","sources":["../src/InkdClient.ts"],"names":[],"mappings":"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"}