@geoprotocol/geo-sdk 0.6.0 → 0.7.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 (38) hide show
  1. package/README.md +98 -27
  2. package/dist/contracts.d.ts +1 -0
  3. package/dist/contracts.d.ts.map +1 -1
  4. package/dist/contracts.js +1 -0
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/src/full-flow-test.test.js +43 -59
  11. package/dist/src/full-flow-test.test.js.map +1 -1
  12. package/dist/src/graph/index.d.ts +0 -1
  13. package/dist/src/graph/index.d.ts.map +1 -1
  14. package/dist/src/graph/index.js +0 -1
  15. package/dist/src/graph/index.js.map +1 -1
  16. package/dist/src/personal-space/has-space.d.ts +6 -0
  17. package/dist/src/personal-space/has-space.d.ts.map +1 -0
  18. package/dist/src/personal-space/has-space.js +15 -0
  19. package/dist/src/personal-space/has-space.js.map +1 -0
  20. package/dist/src/personal-space/index.d.ts +1 -0
  21. package/dist/src/personal-space/index.d.ts.map +1 -1
  22. package/dist/src/personal-space/index.js +1 -0
  23. package/dist/src/personal-space/index.js.map +1 -1
  24. package/dist/src/smart-account-flow-test.test.d.ts +2 -0
  25. package/dist/src/smart-account-flow-test.test.d.ts.map +1 -0
  26. package/dist/src/smart-account-flow-test.test.js +71 -0
  27. package/dist/src/smart-account-flow-test.test.js.map +1 -0
  28. package/dist/src/smart-wallet.d.ts +20 -0
  29. package/dist/src/smart-wallet.d.ts.map +1 -1
  30. package/dist/src/smart-wallet.js +28 -8
  31. package/dist/src/smart-wallet.js.map +1 -1
  32. package/dist/src/smart-wallet.test.js +4 -3
  33. package/dist/src/smart-wallet.test.js.map +1 -1
  34. package/package.json +2 -1
  35. package/dist/scripts/test-publish.d.ts +0 -6
  36. package/dist/scripts/test-publish.d.ts.map +0 -1
  37. package/dist/scripts/test-publish.js +0 -121
  38. package/dist/scripts/test-publish.js.map +0 -1
package/README.md CHANGED
@@ -283,10 +283,8 @@ import {
283
283
  toHex,
284
284
  } from "viem";
285
285
  import { SpaceRegistryAbi, getWalletClient } from "@geoprotocol/geo-sdk";
286
+ import { TESTNET } from "@geoprotocol/geo-sdk/contracts";
286
287
 
287
- // Contract addresses for testnet
288
- const SPACE_REGISTRY_ADDRESS =
289
- "0xB01683b2f0d38d43fcD4D9aAB980166988924132" as const;
290
288
  const EDITS_PUBLISHED = keccak256(toHex("GOVERNANCE.EDITS_PUBLISHED"));
291
289
 
292
290
  // You'll need your space ID in hex format (bytes16) and an IPFS CID
@@ -315,7 +313,7 @@ const calldata = encodeFunctionData({
315
313
 
316
314
  const txResult = await walletClient.sendTransaction({
317
315
  account: walletClient.account,
318
- to: SPACE_REGISTRY_ADDRESS,
316
+ to: TESTNET.SPACE_REGISTRY_ADDRESS,
319
317
  value: 0n,
320
318
  data: calldata,
321
319
  });
@@ -416,9 +414,88 @@ const txHash = await walletClient.sendTransaction({
416
414
  });
417
415
  ```
418
416
 
419
- ## Full Publishing Flow
417
+ ## Full Publishing Flow with Smart Account
420
418
 
421
- This example shows the complete flow for creating a personal space and publishing an edit on testnet using the `personalSpace` module.
419
+ This example shows the complete flow for publishing an edit using a Geo smart account (Safe with Pimlico paymaster) on testnet. Gas is sponsored, so no testnet ETH is required.
420
+
421
+ The smart account address must already have a personal space. You can create one via the [Geo Genesis browser](https://www.geobrowser.io).
422
+
423
+ ```ts
424
+ import { createPublicClient, type Hex, http } from "viem";
425
+ import {
426
+ Graph,
427
+ personalSpace,
428
+ getSmartAccountWalletClient,
429
+ SpaceRegistryAbi,
430
+ TESTNET_RPC_URL,
431
+ } from "@geoprotocol/geo-sdk";
432
+ import { TESTNET } from "@geoprotocol/geo-sdk/contracts";
433
+
434
+ // IMPORTANT: Be careful with your private key. Don't commit it to version control.
435
+ // You can get your private key using https://www.geobrowser.io/export-wallet
436
+ const privateKey = `0x${privateKeyFromGeoWallet}` as `0x${string}`;
437
+
438
+ // Get smart account wallet client (Safe + Pimlico paymaster)
439
+ const smartAccount = await getSmartAccountWalletClient({ privateKey });
440
+ const smartAccountAddress = smartAccount.account.address;
441
+
442
+ // Check if a personal space exists for this smart account address
443
+ const hasExistingSpace = await personalSpace.hasSpace({
444
+ address: smartAccountAddress,
445
+ });
446
+ if (!hasExistingSpace) {
447
+ throw new Error("No personal space found for this smart account address.");
448
+ }
449
+
450
+ const publicClient = createPublicClient({
451
+ transport: http(TESTNET_RPC_URL),
452
+ });
453
+
454
+ // Look up the space ID for this smart account address
455
+ const spaceIdHex = (await publicClient.readContract({
456
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
457
+ abi: SpaceRegistryAbi,
458
+ functionName: "addressToSpaceId",
459
+ args: [smartAccountAddress],
460
+ })) as Hex;
461
+
462
+ // Convert bytes16 hex to UUID string (without dashes)
463
+ const spaceId = spaceIdHex.slice(2, 34).toLowerCase();
464
+ console.log("spaceId", spaceId);
465
+
466
+ // Create an entity
467
+ const { ops, id: entityId } = Graph.createEntity({
468
+ name: "Test Entity",
469
+ });
470
+ console.log("entityId", entityId);
471
+
472
+ // Publish to IPFS and get calldata for on-chain submission
473
+ const { cid, editId, to, calldata } = await personalSpace.publishEdit({
474
+ name: "Test Edit",
475
+ spaceId,
476
+ ops,
477
+ author: smartAccountAddress,
478
+ network: "TESTNET",
479
+ });
480
+ console.log("cid", cid);
481
+ console.log("editId", editId);
482
+
483
+ // Send transaction via smart account (account and chain are baked in)
484
+ const txHash = await smartAccount.sendTransaction({
485
+ to,
486
+ data: calldata,
487
+ });
488
+ console.log("txHash", txHash);
489
+
490
+ const receipt = await publicClient.waitForTransactionReceipt({
491
+ hash: txHash,
492
+ });
493
+ console.log("Successfully published edit to space", spaceId);
494
+ ```
495
+
496
+ ## Full Publishing Flow (EOA Wallet)
497
+
498
+ This example shows the complete flow for creating a personal space and publishing an edit on testnet using the `personalSpace` module with an EOA wallet.
422
499
 
423
500
  ```ts
424
501
  import { createPublicClient, type Hex, http } from "viem";
@@ -428,11 +505,9 @@ import {
428
505
  personalSpace,
429
506
  getWalletClient,
430
507
  SpaceRegistryAbi,
508
+ TESTNET_RPC_URL,
431
509
  } from "@geoprotocol/geo-sdk";
432
-
433
- const SPACE_REGISTRY_ADDRESS =
434
- "0xB01683b2f0d38d43fcD4D9aAB980166988924132" as const;
435
- const EMPTY_SPACE_ID = "0x00000000000000000000000000000000" as Hex;
510
+ import { TESTNET } from "@geoprotocol/geo-sdk/contracts";
436
511
 
437
512
  // IMPORTANT: Be careful with your private key. Don't commit it to version control.
438
513
  // You can get your private key using https://www.geobrowser.io/export-wallet
@@ -447,22 +522,18 @@ const walletClient = await getWalletClient({
447
522
  });
448
523
 
449
524
  const account = walletClient.account;
450
- const rpcUrl = walletClient.chain?.rpcUrls?.default?.http?.[0];
451
525
 
452
526
  const publicClient = createPublicClient({
453
- transport: http(rpcUrl),
527
+ transport: http(TESTNET_RPC_URL),
454
528
  });
455
529
 
456
530
  // Check if a personal space already exists for this address
457
- let spaceIdHex = (await publicClient.readContract({
458
- address: SPACE_REGISTRY_ADDRESS,
459
- abi: SpaceRegistryAbi,
460
- functionName: "addressToSpaceId",
461
- args: [account.address],
462
- })) as Hex;
531
+ const hasExistingSpace = await personalSpace.hasSpace({
532
+ address: account.address,
533
+ });
463
534
 
464
535
  // Create a personal space if one doesn't exist
465
- if (spaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
536
+ if (!hasExistingSpace) {
466
537
  console.log("Creating personal space...");
467
538
 
468
539
  const { to, calldata } = personalSpace.createSpace();
@@ -474,16 +545,16 @@ if (spaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
474
545
  });
475
546
 
476
547
  await publicClient.waitForTransactionReceipt({ hash: createSpaceTxHash });
477
-
478
- // Re-fetch the space ID after creation
479
- spaceIdHex = (await publicClient.readContract({
480
- address: SPACE_REGISTRY_ADDRESS,
481
- abi: SpaceRegistryAbi,
482
- functionName: "addressToSpaceId",
483
- args: [account.address],
484
- })) as Hex;
485
548
  }
486
549
 
550
+ // Look up the space ID
551
+ const spaceIdHex = (await publicClient.readContract({
552
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
553
+ abi: SpaceRegistryAbi,
554
+ functionName: "addressToSpaceId",
555
+ args: [account.address],
556
+ })) as Hex;
557
+
487
558
  // Convert bytes16 hex to UUID string (without dashes)
488
559
  const spaceId = spaceIdHex.slice(2, 34).toLowerCase();
489
560
  console.log("spaceId", spaceId);
@@ -28,4 +28,5 @@ export declare const TESTNET: {
28
28
  readonly PLUGIN_SETUP_PROCESSOR_ADDRESS: "0x3C9be4b42B313318091344A261DCDCd02DCd5736";
29
29
  readonly SPACE_REGISTRY_ADDRESS: "0xB01683b2f0d38d43fcD4D9aAB980166988924132";
30
30
  };
31
+ export declare const EMPTY_SPACE_ID: "0x00000000000000000000000000000000";
31
32
  //# sourceMappingURL=contracts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../contracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;CAOV,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;CASV,CAAC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../contracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;CAOV,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;CASV,CAAC;AAEX,eAAO,MAAM,cAAc,EAAG,oCAA6C,CAAC"}
package/dist/contracts.js CHANGED
@@ -28,4 +28,5 @@ export const TESTNET = {
28
28
  PLUGIN_SETUP_PROCESSOR_ADDRESS: '0x3C9be4b42B313318091344A261DCDCd02DCd5736',
29
29
  SPACE_REGISTRY_ADDRESS: '0xB01683b2f0d38d43fcD4D9aAB980166988924132',
30
30
  };
31
+ export const EMPTY_SPACE_ID = '0x00000000000000000000000000000000';
31
32
  //# sourceMappingURL=contracts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../contracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,yBAAyB,EAAE,4CAA4C;IACvE,wCAAwC,EAAE,4CAA4C;IACtF,8BAA8B,EAAE,4CAA4C;IAC5E,mBAAmB,EAAE,4CAA4C;IACjE,oBAAoB,EAAE,4CAA4C;IAClE,8BAA8B,EAAE,4CAA4C;CACpE,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,yBAAyB,EAAE,4CAA4C;IACvE,wCAAwC,EAAE,4CAA4C;IACtF,8BAA8B,EAAE,4CAA4C;IAC5E,mBAAmB,EAAE,4CAA4C;IACjE,yBAAyB,EAAE,4CAA4C;IACvE,oBAAoB,EAAE,4CAA4C;IAClE,8BAA8B,EAAE,4CAA4C;IAC5E,sBAAsB,EAAE,4CAA4C;CAC5D,CAAC"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../contracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,yBAAyB,EAAE,4CAA4C;IACvE,wCAAwC,EAAE,4CAA4C;IACtF,8BAA8B,EAAE,4CAA4C;IAC5E,mBAAmB,EAAE,4CAA4C;IACjE,oBAAoB,EAAE,4CAA4C;IAClE,8BAA8B,EAAE,4CAA4C;CACpE,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,yBAAyB,EAAE,4CAA4C;IACvE,wCAAwC,EAAE,4CAA4C;IACtF,8BAA8B,EAAE,4CAA4C;IAC5E,mBAAmB,EAAE,4CAA4C;IACjE,yBAAyB,EAAE,4CAA4C;IACvE,oBAAoB,EAAE,4CAA4C;IAClE,8BAA8B,EAAE,4CAA4C;IAC5E,sBAAsB,EAAE,4CAA4C;CAC5D,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,oCAA6C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -50,7 +50,7 @@ export * as Rank from './src/ranks/index.js';
50
50
  * @since 0.0.6
51
51
  */
52
52
  export { GraphUrl } from './src/scheme.js';
53
- export { getSmartAccountWalletClient, getWalletClient, } from './src/smart-wallet.js';
53
+ export { getSmartAccountWalletClient, getWalletClient, TESTNET_RPC_URL, } from './src/smart-wallet.js';
54
54
  /**
55
55
  * Provides ids for commonly used entities across the Knowledge Graph.
56
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,yBAAyB,EACzB,8BAA8B,EAC9B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C;;;;;GAKG;AACH,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EACL,2BAA2B,EAC3B,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,yBAAyB,EACzB,8BAA8B,EAC9B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C;;;;;GAKG;AACH,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -50,7 +50,7 @@ export * as Rank from './src/ranks/index.js';
50
50
  * @since 0.0.6
51
51
  */
52
52
  export { GraphUrl } from './src/scheme.js';
53
- export { getSmartAccountWalletClient, getWalletClient, } from './src/smart-wallet.js';
53
+ export { getSmartAccountWalletClient, getWalletClient, TESTNET_RPC_URL, } from './src/smart-wallet.js';
54
54
  /**
55
55
  * Provides ids for commonly used entities across the Knowledge Graph.
56
56
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,yBAAyB,EACzB,8BAA8B,EAC9B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C;;;;;GAKG;AACH,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EACL,2BAA2B,EAC3B,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,yBAAyB,EACzB,8BAA8B,EAC9B,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C;;;;;GAKG;AACH,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC;;;;GAIG;AACH,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxE,cAAc,gBAAgB,CAAC"}
@@ -1,16 +1,14 @@
1
1
  import { createPublicClient, http } from 'viem';
2
2
  import { privateKeyToAccount } from 'viem/accounts';
3
3
  import { it } from 'vitest';
4
+ import { TESTNET } from '../contracts.js';
4
5
  import { SpaceRegistryAbi } from './abis/index.js';
5
6
  import { DESCRIPTION_PROPERTY } from './core/ids/system.js';
6
7
  import * as daoSpace from './dao-space/index.js';
7
8
  import { createEntity } from './graph/create-entity.js';
8
9
  import { updateEntity } from './graph/update-entity.js';
9
10
  import * as personalSpace from './personal-space/index.js';
10
- import { getWalletClient } from './smart-wallet.js';
11
- // Contract addresses for testnet
12
- const SPACE_REGISTRY_ADDRESS = '0xB01683b2f0d38d43fcD4D9aAB980166988924132';
13
- const EMPTY_SPACE_ID = '0x00000000000000000000000000000000';
11
+ import { getWalletClient, TESTNET_RPC_URL } from './smart-wallet.js';
14
12
  const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
15
13
  /**
16
14
  * Converts a bytes16 hex space ID to a UUID string (without dashes).
@@ -20,9 +18,11 @@ function hexToUuid(hex) {
20
18
  return hex.slice(2, 34).toLowerCase();
21
19
  }
22
20
  it.skip('should create a space and publish an edit', async () => {
23
- // IMPORTANT: Replace with your actual private key for testing
24
- // You can get your private key using https://www.geobrowser.io/export-wallet
25
- const addressPrivateKey = '0xTODO';
21
+ const privateKey = process.env.PRIVATE_KEY;
22
+ if (!privateKey) {
23
+ throw new Error('PRIVATE_KEY environment variable is required. Run `pnpm create-private-key` to generate one.');
24
+ }
25
+ const addressPrivateKey = privateKey;
26
26
  const { address } = privateKeyToAccount(addressPrivateKey);
27
27
  console.log('address', address);
28
28
  // Get wallet client for testnet
@@ -34,23 +34,12 @@ it.skip('should create a space and publish an edit', async () => {
34
34
  throw new Error('Wallet client account is undefined');
35
35
  }
36
36
  // Create a public client for reading contract state
37
- const rpcUrl = walletClient.chain?.rpcUrls?.default?.http?.[0];
38
- if (!rpcUrl) {
39
- throw new Error('Wallet client RPC URL is undefined');
40
- }
41
37
  const publicClient = createPublicClient({
42
- transport: http(rpcUrl),
38
+ transport: http(TESTNET_RPC_URL),
43
39
  });
44
40
  // Check if a personal space already exists for this address
45
- let spaceIdHex = (await publicClient.readContract({
46
- address: SPACE_REGISTRY_ADDRESS,
47
- abi: SpaceRegistryAbi,
48
- functionName: 'addressToSpaceId',
49
- args: [account.address],
50
- }));
51
- console.log('existing spaceIdHex', spaceIdHex);
52
- // Create a personal space if one doesn't exist
53
- if (spaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
41
+ const hasExistingSpace = await personalSpace.hasSpace({ address: account.address });
42
+ if (!hasExistingSpace) {
54
43
  console.log('Creating personal space...');
55
44
  const { to, calldata } = personalSpace.createSpace();
56
45
  const createSpaceTxHash = await walletClient.sendTransaction({
@@ -62,23 +51,23 @@ it.skip('should create a space and publish an edit', async () => {
62
51
  });
63
52
  console.log('createSpaceTxHash', createSpaceTxHash);
64
53
  await publicClient.waitForTransactionReceipt({ hash: createSpaceTxHash });
65
- // Re-fetch the space ID after creation
66
- spaceIdHex = (await publicClient.readContract({
67
- address: SPACE_REGISTRY_ADDRESS,
68
- abi: SpaceRegistryAbi,
69
- functionName: 'addressToSpaceId',
70
- args: [account.address],
71
- }));
72
- console.log('new spaceIdHex', spaceIdHex);
73
54
  }
74
- if (spaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
55
+ // Verify space exists after potential creation
56
+ const hasSpaceNow = await personalSpace.hasSpace({ address: account.address });
57
+ if (!hasSpaceNow) {
75
58
  throw new Error(`Failed to create personal space for address ${account.address}`);
76
59
  }
60
+ const spaceIdHex = (await publicClient.readContract({
61
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
62
+ abi: SpaceRegistryAbi,
63
+ functionName: 'addressToSpaceId',
64
+ args: [account.address],
65
+ }));
77
66
  const spaceId = hexToUuid(spaceIdHex);
78
67
  console.log('spaceId (UUID)', spaceId);
79
68
  // Verify the space address exists
80
69
  const spaceAddress = (await publicClient.readContract({
81
- address: SPACE_REGISTRY_ADDRESS,
70
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
82
71
  abi: SpaceRegistryAbi,
83
72
  functionName: 'spaceIdToAddress',
84
73
  args: [spaceIdHex],
@@ -127,9 +116,14 @@ it.skip('should create a space and publish an edit', async () => {
127
116
  console.log('Successfully published edit to space', spaceId);
128
117
  }, 60000);
129
118
  it.skip('should create a DAO space and propose an edit', async () => {
130
- // IMPORTANT: Replace with your actual private key for testing
131
- // You can get your private key using https://www.geobrowser.io/export-wallet
132
- const addressPrivateKey = '0xTODO';
119
+ const privateKeyEnv = process.env.PRIVATE_KEY;
120
+ if (!privateKeyEnv) {
121
+ throw new Error('PRIVATE_KEY environment variable is required. Run `pnpm create-private-key` to generate one.');
122
+ }
123
+ if (!privateKeyEnv.startsWith('0x')) {
124
+ throw new Error('PRIVATE_KEY must be a hex string starting with 0x.');
125
+ }
126
+ const addressPrivateKey = privateKeyEnv;
133
127
  const { address } = privateKeyToAccount(addressPrivateKey);
134
128
  console.log('address', address);
135
129
  // Get wallet client for testnet
@@ -141,23 +135,12 @@ it.skip('should create a DAO space and propose an edit', async () => {
141
135
  throw new Error('Wallet client account is undefined');
142
136
  }
143
137
  // Create a public client for reading contract state
144
- const rpcUrl = walletClient.chain?.rpcUrls?.default?.http?.[0];
145
- if (!rpcUrl) {
146
- throw new Error('Wallet client RPC URL is undefined');
147
- }
148
138
  const publicClient = createPublicClient({
149
- transport: http(rpcUrl),
139
+ transport: http(TESTNET_RPC_URL),
150
140
  });
151
141
  // Check if a personal space already exists for this address
152
- let spaceIdHex = (await publicClient.readContract({
153
- address: SPACE_REGISTRY_ADDRESS,
154
- abi: SpaceRegistryAbi,
155
- functionName: 'addressToSpaceId',
156
- args: [account.address],
157
- }));
158
- console.log('existing spaceIdHex', spaceIdHex);
159
- // Create a personal space if one doesn't exist (required to be an editor)
160
- if (spaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
142
+ const hasExistingSpace = await personalSpace.hasSpace({ address: account.address });
143
+ if (!hasExistingSpace) {
161
144
  console.log('Creating personal space (required to be a DAO editor)...');
162
145
  const { to, calldata } = personalSpace.createSpace();
163
146
  const createSpaceTxHash = await walletClient.sendTransaction({
@@ -169,18 +152,18 @@ it.skip('should create a DAO space and propose an edit', async () => {
169
152
  });
170
153
  console.log('createSpaceTxHash', createSpaceTxHash);
171
154
  await publicClient.waitForTransactionReceipt({ hash: createSpaceTxHash });
172
- // Re-fetch the space ID after creation
173
- spaceIdHex = (await publicClient.readContract({
174
- address: SPACE_REGISTRY_ADDRESS,
175
- abi: SpaceRegistryAbi,
176
- functionName: 'addressToSpaceId',
177
- args: [account.address],
178
- }));
179
- console.log('new spaceIdHex', spaceIdHex);
180
155
  }
181
- if (spaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
156
+ // Verify space exists after potential creation
157
+ const hasSpaceNow = await personalSpace.hasSpace({ address: account.address });
158
+ if (!hasSpaceNow) {
182
159
  throw new Error(`Failed to create personal space for address ${account.address}`);
183
160
  }
161
+ const spaceIdHex = (await publicClient.readContract({
162
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
163
+ abi: SpaceRegistryAbi,
164
+ functionName: 'addressToSpaceId',
165
+ args: [account.address],
166
+ }));
184
167
  console.log('Personal space ID (to use as editor):', spaceIdHex);
185
168
  // Create a DAO space with the user's personal space as the initial editor
186
169
  console.log('Creating DAO space...');
@@ -224,13 +207,14 @@ it.skip('should create a DAO space and propose an edit', async () => {
224
207
  console.log('daoSpaceAddress:', daoSpaceAddress);
225
208
  // Get the DAO space ID from the registry
226
209
  const daoSpaceIdHex = (await publicClient.readContract({
227
- address: SPACE_REGISTRY_ADDRESS,
210
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
228
211
  abi: SpaceRegistryAbi,
229
212
  functionName: 'addressToSpaceId',
230
213
  args: [daoSpaceAddress],
231
214
  }));
232
215
  console.log('daoSpaceIdHex:', daoSpaceIdHex);
233
- if (daoSpaceIdHex.toLowerCase() === EMPTY_SPACE_ID.toLowerCase()) {
216
+ const hasDaoSpace = await personalSpace.hasSpace({ address: daoSpaceAddress });
217
+ if (!hasDaoSpace) {
234
218
  throw new Error('DAO space was not registered in the Space Registry');
235
219
  }
236
220
  // Now propose an edit to the DAO space
@@ -1 +1 @@
1
- {"version":3,"file":"full-flow-test.test.js","sourceRoot":"","sources":["../../src/full-flow-test.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"full-flow-test.test.js","sourceRoot":"","sources":["../../src/full-flow-test.test.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ export * from './create-entity.js';
4
4
  export * from './create-image.js';
5
5
  export * from './create-property.js';
6
6
  export * from './create-relation.js';
7
- export * from './create-space.js';
8
7
  export * from './create-type.js';
9
8
  export * from './delete-entity.js';
10
9
  export * from './delete-relation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
@@ -3,7 +3,6 @@ export * from './create-entity.js';
3
3
  export * from './create-image.js';
4
4
  export * from './create-property.js';
5
5
  export * from './create-relation.js';
6
- export * from './create-space.js';
7
6
  export * from './create-type.js';
8
7
  export * from './delete-entity.js';
9
8
  export * from './delete-relation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graph/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type Hex } from 'viem';
2
+ export declare function hasSpace({ address, rpcUrl, }: {
3
+ address: Hex;
4
+ rpcUrl?: string;
5
+ }): Promise<boolean>;
6
+ //# sourceMappingURL=has-space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-space.d.ts","sourceRoot":"","sources":["../../../src/personal-space/has-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAQ,MAAM,MAAM,CAAC;AAK1D,wBAAsB,QAAQ,CAAC,EAC7B,OAAO,EACP,MAAwB,GACzB,EAAE;IACD,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,OAAO,CAAC,CASnB"}
@@ -0,0 +1,15 @@
1
+ import { createPublicClient, http } from 'viem';
2
+ import { EMPTY_SPACE_ID, TESTNET } from '../../contracts.js';
3
+ import { SpaceRegistryAbi } from '../abis/index.js';
4
+ import { TESTNET_RPC_URL } from '../smart-wallet.js';
5
+ export async function hasSpace({ address, rpcUrl = TESTNET_RPC_URL, }) {
6
+ const publicClient = createPublicClient({ transport: http(rpcUrl) });
7
+ const spaceIdHex = (await publicClient.readContract({
8
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
9
+ abi: SpaceRegistryAbi,
10
+ functionName: 'addressToSpaceId',
11
+ args: [address],
12
+ }));
13
+ return spaceIdHex.toLowerCase() !== EMPTY_SPACE_ID.toLowerCase();
14
+ }
15
+ //# sourceMappingURL=has-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-space.js","sourceRoot":"","sources":["../../../src/personal-space/has-space.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAC7B,OAAO,EACP,MAAM,GAAG,eAAe,GAIzB;IACC,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QAClD,OAAO,EAAE,OAAO,CAAC,sBAAsB;QACvC,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,kBAAkB;QAChC,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB,CAAC,CAAQ,CAAC;IACX,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;AACnE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { createSpace } from './create-space.js';
2
+ export { hasSpace } from './has-space.js';
2
3
  export { publishEdit } from './publish-edit.js';
3
4
  export type { CreateSpaceResult, PublishEditParams, PublishEditResult } from './types.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/personal-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/personal-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { createSpace } from './create-space.js';
2
+ export { hasSpace } from './has-space.js';
2
3
  export { publishEdit } from './publish-edit.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/personal-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/personal-space/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=smart-account-flow-test.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-account-flow-test.test.d.ts","sourceRoot":"","sources":["../../src/smart-account-flow-test.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { createPublicClient, http } from 'viem';
2
+ import { it } from 'vitest';
3
+ import { TESTNET } from '../contracts.js';
4
+ import { SpaceRegistryAbi } from './abis/index.js';
5
+ import { createEntity } from './graph/create-entity.js';
6
+ import * as personalSpace from './personal-space/index.js';
7
+ import { getSmartAccountWalletClient, TESTNET_RPC_URL } from './smart-wallet.js';
8
+ /**
9
+ * Converts a bytes16 hex space ID to a UUID string (without dashes).
10
+ */
11
+ function hexToUuid(hex) {
12
+ return hex.slice(2, 34).toLowerCase();
13
+ }
14
+ it.skip('should publish an edit to personal space via smart account', async () => {
15
+ const privateKeyEnv = process.env.PRIVY_PRIVATE_KEY;
16
+ if (!privateKeyEnv) {
17
+ throw new Error('PRIVY_PRIVATE_KEY environment variable is required.');
18
+ }
19
+ const privateKey = (privateKeyEnv.startsWith('0x') ? privateKeyEnv : `0x${privateKeyEnv}`);
20
+ // Get smart account wallet client (Safe + Pimlico paymaster)
21
+ const smartAccount = await getSmartAccountWalletClient({ privateKey });
22
+ const smartAccountAddress = smartAccount.account.address;
23
+ console.log('Smart account address:', smartAccountAddress);
24
+ // Create a public client for reading contract state
25
+ const publicClient = createPublicClient({
26
+ transport: http(TESTNET_RPC_URL),
27
+ });
28
+ // Check if a personal space exists for this smart account address
29
+ const hasExistingSpace = await personalSpace.hasSpace({ address: smartAccountAddress });
30
+ if (!hasExistingSpace) {
31
+ throw new Error(`No personal space found for smart account address ${smartAccountAddress}. Create one first.`);
32
+ }
33
+ const spaceIdHex = (await publicClient.readContract({
34
+ address: TESTNET.SPACE_REGISTRY_ADDRESS,
35
+ abi: SpaceRegistryAbi,
36
+ functionName: 'addressToSpaceId',
37
+ args: [smartAccountAddress],
38
+ }));
39
+ const spaceId = hexToUuid(spaceIdHex);
40
+ console.log('spaceId (UUID)', spaceId);
41
+ // Create an entity
42
+ const { ops, id: entityId } = createEntity({
43
+ name: 'Smart Account Test Entity',
44
+ });
45
+ console.log('entityId', entityId);
46
+ // Publish the edit to IPFS and get calldata
47
+ const { cid, editId, to, calldata } = await personalSpace.publishEdit({
48
+ name: 'Smart Account Test Edit',
49
+ spaceId,
50
+ ops,
51
+ author: smartAccountAddress,
52
+ network: 'TESTNET',
53
+ });
54
+ console.log('cid', cid);
55
+ console.log('editId', editId);
56
+ // Send transaction via smart account (account and chain are baked in)
57
+ const txHash = await smartAccount.sendTransaction({
58
+ to,
59
+ data: calldata,
60
+ });
61
+ console.log('txHash', txHash);
62
+ const receipt = await publicClient.waitForTransactionReceipt({
63
+ hash: txHash,
64
+ });
65
+ console.log('receipt status', receipt.status);
66
+ if (receipt.status === 'reverted') {
67
+ throw new Error(`Transaction reverted: ${txHash}`);
68
+ }
69
+ console.log('Successfully published edit to space', spaceId, 'via smart account');
70
+ }, 60000);
71
+ //# sourceMappingURL=smart-account-flow-test.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-account-flow-test.test.js","sourceRoot":"","sources":["../../src/smart-account-flow-test.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,25 @@
1
1
  import type { Hex, WalletClient } from 'viem';
2
2
  import type { GeoSmartAccount } from './types.js';
3
+ export declare const TESTNET_RPC_URL = "https://rpc-geo-test-zc16z3tcvf.t.conduit.xyz";
4
+ /**
5
+ * Custom Safe contract addresses for Geo Testnet.
6
+ *
7
+ * Safe uses deterministic deployment so the canonical addresses are the same on
8
+ * every chain. On Geo Mainnet (80451) those canonical addresses exist, so the
9
+ * permissionless library's defaults work. On Geo Testnet (19411) the canonical
10
+ * deployer was never run — the Safe contracts were deployed separately and
11
+ * landed at different addresses. We pass them explicitly to toSafeSmartAccount.
12
+ *
13
+ * Source of truth: curator-app packages/curator-utils/src/utils/smart-account-constants.ts
14
+ */
15
+ export declare const GEO_TESTNET_SAFE_ADDRESSES: {
16
+ readonly safeModuleSetupAddress: Hex;
17
+ readonly safe4337ModuleAddress: Hex;
18
+ readonly safeProxyFactoryAddress: Hex;
19
+ readonly safeSingletonAddress: Hex;
20
+ readonly multiSendAddress: Hex;
21
+ readonly multiSendCallOnlyAddress: Hex;
22
+ };
3
23
  type GetSmartAccountWalletClientParams = {
4
24
  privateKey: Hex;
5
25
  rpcUrl?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"smart-wallet.d.ts","sourceRoot":"","sources":["../../src/smart-wallet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAWlD,KAAK,iCAAiC,GAAG;IACvC,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAyBF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,GAAU,yBAG/C,iCAAiC,KAAG,OAAO,CAAC,eAAe,CA2C7D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,yBAGnC,iCAAiC,KAAG,OAAO,CAAC,YAAY,CAS1D,CAAC"}
1
+ {"version":3,"file":"smart-wallet.d.ts","sourceRoot":"","sources":["../../src/smart-wallet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,eAAO,MAAM,eAAe,kDAAkD,CAAC;AAQ/E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B;qCACmC,GAAG;oCACJ,GAAG;sCACD,GAAG;mCACN,GAAG;+BACP,GAAG;uCACK,GAAG;CACrE,CAAC;AAEX,KAAK,iCAAiC,GAAG;IACvC,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAyBF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,GAAU,yBAG/C,iCAAiC,KAAG,OAAO,CAAC,eAAe,CA4C7D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,yBAGnC,iCAAiC,KAAG,OAAO,CAAC,YAAY,CAS1D,CAAC"}
@@ -4,13 +4,32 @@ import { createPimlicoClient } from 'permissionless/clients/pimlico';
4
4
  import { createPublicClient, createWalletClient, http } from 'viem';
5
5
  import { entryPoint07Address } from 'viem/account-abstraction';
6
6
  import { privateKeyToAccount } from 'viem/accounts';
7
- const MAINNET_DEFAULT_RPC_URL = 'https://rpc-geo-genesis-h0q2s21xx8.t.conduit.xyz';
8
- const TESTNET_DEFAULT_RPC_URL = 'https://rpc-geo-test-zc16z3tcvf.t.conduit.xyz';
7
+ const _MAINNET_DEFAULT_RPC_URL = 'https://rpc-geo-genesis-h0q2s21xx8.t.conduit.xyz';
8
+ export const TESTNET_RPC_URL = 'https://rpc-geo-test-zc16z3tcvf.t.conduit.xyz';
9
9
  /**
10
10
  * We provide a fallback API key for gas sponsorship for the duration of the
11
11
  * Geo Genesis early access period. This API key is gas-limited.
12
12
  */
13
13
  const DEFAULT_API_KEY = 'pim_KqHm63txxhbCYjdDaWaHqH';
14
+ /**
15
+ * Custom Safe contract addresses for Geo Testnet.
16
+ *
17
+ * Safe uses deterministic deployment so the canonical addresses are the same on
18
+ * every chain. On Geo Mainnet (80451) those canonical addresses exist, so the
19
+ * permissionless library's defaults work. On Geo Testnet (19411) the canonical
20
+ * deployer was never run — the Safe contracts were deployed separately and
21
+ * landed at different addresses. We pass them explicitly to toSafeSmartAccount.
22
+ *
23
+ * Source of truth: curator-app packages/curator-utils/src/utils/smart-account-constants.ts
24
+ */
25
+ export const GEO_TESTNET_SAFE_ADDRESSES = {
26
+ safeModuleSetupAddress: '0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47',
27
+ safe4337ModuleAddress: '0x75cf11467937ce3F2f357CE24ffc3DBF8fD5c226',
28
+ safeProxyFactoryAddress: '0xd9d2Ba03a7754250FDD71333F444636471CACBC4',
29
+ safeSingletonAddress: '0x639245e8476E03e789a244f279b5843b9633b2E7',
30
+ multiSendAddress: '0x7B21BBDBdE8D01Df591fdc2dc0bE9956Dde1e16C',
31
+ multiSendCallOnlyAddress: '0x32228dDEA8b9A2bd7f2d71A958fF241D79ca5eEC',
32
+ };
14
33
  const createChain = (network, rpcUrl) => {
15
34
  const chain = {
16
35
  id: network === 'TESTNET' ? Number('19411') : Number('80451'),
@@ -22,10 +41,10 @@ const createChain = (network, rpcUrl) => {
22
41
  },
23
42
  rpcUrls: {
24
43
  default: {
25
- http: [rpcUrl ?? (network === 'TESTNET' ? TESTNET_DEFAULT_RPC_URL : MAINNET_DEFAULT_RPC_URL)],
44
+ http: [rpcUrl],
26
45
  },
27
46
  public: {
28
- http: [rpcUrl ?? (network === 'TESTNET' ? TESTNET_DEFAULT_RPC_URL : MAINNET_DEFAULT_RPC_URL)],
47
+ http: [rpcUrl],
29
48
  },
30
49
  },
31
50
  };
@@ -48,8 +67,8 @@ const createChain = (network, rpcUrl) => {
48
67
  * @param params – {@link GetSmartAccountWalletClientParams}
49
68
  * @returns – {@link SmartAccountClient}
50
69
  */
51
- export const getSmartAccountWalletClient = async ({ privateKey, rpcUrl = MAINNET_DEFAULT_RPC_URL, }) => {
52
- const chain = createChain('MAINNET', rpcUrl);
70
+ export const getSmartAccountWalletClient = async ({ privateKey, rpcUrl = TESTNET_RPC_URL, }) => {
71
+ const chain = createChain('TESTNET', rpcUrl);
53
72
  const transport = http(rpcUrl);
54
73
  const publicClient = createPublicClient({
55
74
  transport,
@@ -64,8 +83,9 @@ export const getSmartAccountWalletClient = async ({ privateKey, rpcUrl = MAINNET
64
83
  version: '0.7',
65
84
  },
66
85
  version: '1.4.1',
86
+ ...GEO_TESTNET_SAFE_ADDRESSES,
67
87
  });
68
- const bundlerTransport = http(`https://api.pimlico.io/v2/80451/rpc?apikey=${DEFAULT_API_KEY}`);
88
+ const bundlerTransport = http(`https://api.pimlico.io/v2/19411/rpc?apikey=${DEFAULT_API_KEY}`);
69
89
  const paymasterClient = createPimlicoClient({
70
90
  transport: bundlerTransport,
71
91
  chain,
@@ -87,7 +107,7 @@ export const getSmartAccountWalletClient = async ({ privateKey, rpcUrl = MAINNET
87
107
  });
88
108
  return smartAccount;
89
109
  };
90
- export const getWalletClient = async ({ privateKey, rpcUrl = TESTNET_DEFAULT_RPC_URL, }) => {
110
+ export const getWalletClient = async ({ privateKey, rpcUrl = TESTNET_RPC_URL, }) => {
91
111
  const chain = createChain('TESTNET', rpcUrl);
92
112
  const transport = http(rpcUrl);
93
113
  const wallet = createWalletClient({
@@ -1 +1 @@
1
- {"version":3,"file":"smart-wallet.js","sourceRoot":"","sources":["../../src/smart-wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-wallet.js","sourceRoot":"","sources":["../../src/smart-wallet.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { createPublicClient, http } from 'viem';
3
3
  import { entryPoint07Address } from 'viem/account-abstraction';
4
4
  import { privateKeyToAccount } from 'viem/accounts';
5
5
  import { beforeEach, describe, expect, it, vi } from 'vitest';
6
- import { getSmartAccountWalletClient } from './smart-wallet.js';
6
+ import { GEO_TESTNET_SAFE_ADDRESSES, getSmartAccountWalletClient } from './smart-wallet.js';
7
7
  // mock all external dependencies
8
8
  vi.mock('permissionless', () => ({
9
9
  createSmartAccountClient: vi.fn().mockReturnValue({ mockSmartAccountClient: true }),
@@ -33,9 +33,9 @@ describe('getSmartAccountWalletClient', () => {
33
33
  });
34
34
  it('should create a client with the default RPC URL when no RPC URL is provided', async () => {
35
35
  await getSmartAccountWalletClient({ privateKey: mockPrivateKey });
36
- expect(http).toHaveBeenCalledWith('https://rpc-geo-genesis-h0q2s21xx8.t.conduit.xyz');
36
+ expect(http).toHaveBeenCalledWith('https://rpc-geo-test-zc16z3tcvf.t.conduit.xyz');
37
37
  expect(createPublicClient).toHaveBeenCalledWith(expect.objectContaining({
38
- transport: { mockTransport: true, url: 'https://rpc-geo-genesis-h0q2s21xx8.t.conduit.xyz' },
38
+ transport: { mockTransport: true, url: 'https://rpc-geo-test-zc16z3tcvf.t.conduit.xyz' },
39
39
  }));
40
40
  });
41
41
  it('should create a client with a custom RPC URL when provided', async () => {
@@ -60,6 +60,7 @@ describe('getSmartAccountWalletClient', () => {
60
60
  version: '0.7',
61
61
  },
62
62
  version: '1.4.1',
63
+ ...GEO_TESTNET_SAFE_ADDRESSES,
63
64
  }));
64
65
  });
65
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"smart-wallet.test.js","sourceRoot":"","sources":["../../src/smart-wallet.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-wallet.test.js","sourceRoot":"","sources":["../../src/smart-wallet.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoprotocol/geo-sdk",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "license": "MIT",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -40,6 +40,7 @@
40
40
  "test": "vitest",
41
41
  "lint": "biome check",
42
42
  "lint:fix": "biome check --write --unsafe",
43
+ "create-private-key": "node --experimental-strip-types create-private-key.ts",
43
44
  "deploy": "pnpm clean && pnpm build && pnpm changeset publish",
44
45
  "bump": "pnpm changeset version"
45
46
  }
@@ -1,6 +0,0 @@
1
- /**
2
- * Test script to verify publish-edit encoding fix.
3
- * Uses smart account for gas sponsorship on Geo testnet (L3).
4
- */
5
- export {};
6
- //# sourceMappingURL=test-publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-publish.d.ts","sourceRoot":"","sources":["../../scripts/test-publish.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,121 +0,0 @@
1
- /**
2
- * Test script to verify publish-edit encoding fix.
3
- * Uses smart account for gas sponsorship on Geo testnet (L3).
4
- */
5
- import { personalSpace, Graph } from '../index.js';
6
- import { createPublicClient, http } from 'viem';
7
- import { createSmartAccountClient } from 'permissionless';
8
- import { toSafeSmartAccount } from 'permissionless/accounts';
9
- import { createPimlicoClient } from 'permissionless/clients/pimlico';
10
- import { entryPoint07Address } from 'viem/account-abstraction';
11
- import { privateKeyToAccount } from 'viem/accounts';
12
- const SPACE_ID = '7fc1dc5b76b8b69624b9abc6c7978c00';
13
- const PIMLICO_API_KEY = 'pim_KqHm63txxhbCYjdDaWaHqH';
14
- const TESTNET_RPC_URL = 'https://rpc-geo-test-zc16z3tcvf.t.conduit.xyz';
15
- const TESTNET_CHAIN_ID = 19411;
16
- // Custom Safe contract addresses deployed on Geo testnet
17
- const TESTNET_SAFE_ADDRESSES = {
18
- safeModuleSetupAddress: "0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47",
19
- safe4337ModuleAddress: "0x75cf11467937ce3F2f357CE24ffc3DBF8fD5c226",
20
- safeProxyFactoryAddress: "0xd9d2Ba03a7754250FDD71333F444636471CACBC4",
21
- safeSingletonAddress: "0x639245e8476E03e789a244f279b5843b9633b2E7",
22
- multiSendAddress: "0x7B21BBDBdE8D01Df591fdc2dc0bE9956Dde1e16C",
23
- multiSendCallOnlyAddress: "0x32228dDEA8b9A2bd7f2d71A958fF241D79ca5eEC",
24
- };
25
- // Define Geo testnet chain
26
- const geoTestnet = {
27
- id: TESTNET_CHAIN_ID,
28
- name: 'Geo Testnet',
29
- nativeCurrency: {
30
- name: 'Ethereum',
31
- symbol: 'ETH',
32
- decimals: 18,
33
- },
34
- rpcUrls: {
35
- default: { http: [TESTNET_RPC_URL] },
36
- public: { http: [TESTNET_RPC_URL] },
37
- },
38
- };
39
- async function main() {
40
- const privateKey = process.env.GEO_PRIVATE_KEY || process.env.PRIVATE_KEY;
41
- if (!privateKey) {
42
- console.error('Set GEO_PRIVATE_KEY or PRIVATE_KEY environment variable');
43
- process.exit(1);
44
- }
45
- const account = privateKeyToAccount(privateKey);
46
- console.log('EOA address:', account.address);
47
- const publicClient = createPublicClient({
48
- chain: geoTestnet,
49
- transport: http(TESTNET_RPC_URL),
50
- });
51
- const safeAccount = await toSafeSmartAccount({
52
- client: publicClient,
53
- owners: [account],
54
- entryPoint: {
55
- address: entryPoint07Address,
56
- version: '0.7',
57
- },
58
- version: '1.4.1',
59
- ...TESTNET_SAFE_ADDRESSES,
60
- });
61
- console.log('Smart account address:', safeAccount.address);
62
- const bundlerUrl = `https://api.pimlico.io/v2/${TESTNET_CHAIN_ID}/rpc?apikey=${PIMLICO_API_KEY}`;
63
- const paymasterClient = createPimlicoClient({
64
- transport: http(bundlerUrl),
65
- chain: geoTestnet,
66
- entryPoint: {
67
- address: entryPoint07Address,
68
- version: '0.7',
69
- },
70
- });
71
- const smartAccountClient = createSmartAccountClient({
72
- chain: geoTestnet,
73
- account: safeAccount,
74
- paymaster: paymasterClient,
75
- bundlerTransport: http(bundlerUrl),
76
- userOperation: {
77
- estimateFeesPerGas: async () => {
78
- return (await paymasterClient.getUserOperationGasPrice()).fast;
79
- },
80
- },
81
- });
82
- const { id, ops } = Graph.createEntity({
83
- name: 'SDK Test Entity ' + Date.now(),
84
- types: [],
85
- });
86
- console.log('Created entity:', id);
87
- console.log('\nPublishing to IPFS...');
88
- const { editId, cid, to, calldata } = await personalSpace.publishEdit({
89
- name: 'Test publish from SDK',
90
- spaceId: SPACE_ID,
91
- ops,
92
- author: safeAccount.address,
93
- network: 'TESTNET',
94
- });
95
- console.log('Edit ID:', editId);
96
- console.log('CID:', cid);
97
- console.log('Contract (to):', to);
98
- console.log('\nSending transaction via smart account...');
99
- const hash = await smartAccountClient.sendTransaction({
100
- to,
101
- data: calldata,
102
- });
103
- console.log('Transaction hash:', hash);
104
- console.log('\nWaiting for transaction receipt...');
105
- const receipt = await publicClient.waitForTransactionReceipt({ hash });
106
- console.log('Receipt status:', receipt.status);
107
- console.log('Block number:', receipt.blockNumber);
108
- if (receipt.status === 'success') {
109
- console.log('\n✅ Transaction confirmed!');
110
- console.log('Edit ID:', editId);
111
- console.log('CID:', cid);
112
- }
113
- else {
114
- console.log('\n❌ Transaction reverted!');
115
- }
116
- }
117
- main().catch(err => {
118
- console.error('Error:', err.message || err);
119
- process.exit(1);
120
- });
121
- //# sourceMappingURL=test-publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-publish.js","sourceRoot":"","sources":["../../scripts/test-publish.ts"],"names":[],"mappings":"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"}