@geoprotocol/geo-sdk 0.18.3 → 0.19.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.
- package/README.md +995 -372
- package/dist/contracts.d.ts +0 -11
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +0 -11
- package/dist/contracts.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/lite.d.ts +2 -0
- package/dist/lite.d.ts.map +1 -1
- package/dist/lite.js +2 -0
- package/dist/lite.js.map +1 -1
- package/dist/src/abis/dao-space-v2.test.d.ts +2 -0
- package/dist/src/abis/dao-space-v2.test.d.ts.map +1 -0
- package/dist/src/abis/dao-space-v2.test.js +67 -0
- package/dist/src/abis/dao-space-v2.test.js.map +1 -0
- package/dist/src/client/api.d.ts +86 -0
- package/dist/src/client/api.d.ts.map +1 -0
- package/dist/src/client/api.js +169 -0
- package/dist/src/client/api.js.map +1 -0
- package/dist/src/client/comments.d.ts +59 -0
- package/dist/src/client/comments.d.ts.map +1 -0
- package/dist/src/client/comments.js +96 -0
- package/dist/src/client/comments.js.map +1 -0
- package/dist/src/client/context.d.ts +20 -0
- package/dist/src/client/context.d.ts.map +1 -0
- package/dist/src/client/context.js +20 -0
- package/dist/src/client/context.js.map +1 -0
- package/dist/src/client/dao-spaces.d.ts +348 -0
- package/dist/src/client/dao-spaces.d.ts.map +1 -0
- package/dist/src/client/dao-spaces.js +494 -0
- package/dist/src/client/dao-spaces.js.map +1 -0
- package/dist/src/client/dao-spaces.test.d.ts +2 -0
- package/dist/src/client/dao-spaces.test.d.ts.map +1 -0
- package/dist/src/client/dao-spaces.test.js +263 -0
- package/dist/src/client/dao-spaces.test.js.map +1 -0
- package/dist/src/client/edits.d.ts +100 -0
- package/dist/src/client/edits.d.ts.map +1 -0
- package/dist/src/client/edits.js +131 -0
- package/dist/src/client/edits.js.map +1 -0
- package/dist/src/client/edits.test.d.ts +2 -0
- package/dist/src/client/edits.test.d.ts.map +1 -0
- package/dist/src/client/edits.test.js +98 -0
- package/dist/src/client/edits.test.js.map +1 -0
- package/dist/src/client/entities.d.ts +23 -0
- package/dist/src/client/entities.d.ts.map +1 -0
- package/dist/src/client/entities.js +88 -0
- package/dist/src/client/entities.js.map +1 -0
- package/dist/src/client/entity-votes.d.ts +141 -0
- package/dist/src/client/entity-votes.d.ts.map +1 -0
- package/dist/src/client/entity-votes.js +168 -0
- package/dist/src/client/entity-votes.js.map +1 -0
- package/dist/src/client/entity-votes.test.d.ts +2 -0
- package/dist/src/client/entity-votes.test.d.ts.map +1 -0
- package/dist/src/client/entity-votes.test.js +93 -0
- package/dist/src/client/entity-votes.test.js.map +1 -0
- package/dist/src/client/graph-workflows.test.d.ts +2 -0
- package/dist/src/client/graph-workflows.test.d.ts.map +1 -0
- package/dist/src/client/graph-workflows.test.js +83 -0
- package/dist/src/client/graph-workflows.test.js.map +1 -0
- package/dist/src/client/images-storage.test.d.ts +2 -0
- package/dist/src/client/images-storage.test.d.ts.map +1 -0
- package/dist/src/client/images-storage.test.js +52 -0
- package/dist/src/client/images-storage.test.js.map +1 -0
- package/dist/src/client/images.d.ts +35 -0
- package/dist/src/client/images.d.ts.map +1 -0
- package/dist/src/client/images.js +90 -0
- package/dist/src/client/images.js.map +1 -0
- package/dist/src/client/personal-spaces.d.ts +155 -0
- package/dist/src/client/personal-spaces.d.ts.map +1 -0
- package/dist/src/client/personal-spaces.js +198 -0
- package/dist/src/client/personal-spaces.js.map +1 -0
- package/dist/src/client/proposals.d.ts +185 -0
- package/dist/src/client/proposals.d.ts.map +1 -0
- package/dist/src/client/proposals.js +294 -0
- package/dist/src/client/proposals.js.map +1 -0
- package/dist/src/client/proposals.test.d.ts +2 -0
- package/dist/src/client/proposals.test.d.ts.map +1 -0
- package/dist/src/client/proposals.test.js +243 -0
- package/dist/src/client/proposals.test.js.map +1 -0
- package/dist/src/client/spaces.test.d.ts +2 -0
- package/dist/src/client/spaces.test.d.ts.map +1 -0
- package/dist/src/client/spaces.test.js +155 -0
- package/dist/src/client/spaces.test.js.map +1 -0
- package/dist/src/client/storage.d.ts +52 -0
- package/dist/src/client/storage.d.ts.map +1 -0
- package/dist/src/client/storage.js +53 -0
- package/dist/src/client/storage.js.map +1 -0
- package/dist/src/client.d.ts +325 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +452 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/client.test.d.ts +2 -0
- package/dist/src/client.test.d.ts.map +1 -0
- package/dist/src/client.test.js +120 -0
- package/dist/src/client.test.js.map +1 -0
- package/dist/src/contracts-v2/abis.d.ts +196 -0
- package/dist/src/contracts-v2/abis.d.ts.map +1 -0
- package/dist/src/contracts-v2/abis.js +110 -0
- package/dist/src/contracts-v2/abis.js.map +1 -0
- package/dist/src/contracts-v2/actions.d.ts +56 -0
- package/dist/src/contracts-v2/actions.d.ts.map +1 -0
- package/dist/src/contracts-v2/actions.js +83 -0
- package/dist/src/contracts-v2/actions.js.map +1 -0
- package/dist/src/contracts-v2/encoding.d.ts +80 -0
- package/dist/src/contracts-v2/encoding.d.ts.map +1 -0
- package/dist/src/contracts-v2/encoding.js +193 -0
- package/dist/src/contracts-v2/encoding.js.map +1 -0
- package/dist/src/contracts-v2/encoding.test.d.ts +2 -0
- package/dist/src/contracts-v2/encoding.test.d.ts.map +1 -0
- package/dist/src/contracts-v2/encoding.test.js +93 -0
- package/dist/src/contracts-v2/encoding.test.js.map +1 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.d.ts +2 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.d.ts.map +1 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.js +239 -0
- package/dist/src/contracts-v2/local-geobrowser.e2e.test.js.map +1 -0
- package/dist/src/contracts-v2/voting-settings.d.ts +48 -0
- package/dist/src/contracts-v2/voting-settings.d.ts.map +1 -0
- package/dist/src/contracts-v2/voting-settings.js +69 -0
- package/dist/src/contracts-v2/voting-settings.js.map +1 -0
- package/dist/src/dao-space/constants.d.ts +6 -3
- package/dist/src/dao-space/constants.d.ts.map +1 -1
- package/dist/src/dao-space/constants.js +6 -5
- package/dist/src/dao-space/constants.js.map +1 -1
- package/dist/src/dao-space/create-space.d.ts +1 -31
- package/dist/src/dao-space/create-space.d.ts.map +1 -1
- package/dist/src/dao-space/create-space.js +5 -70
- package/dist/src/dao-space/create-space.js.map +1 -1
- package/dist/src/dao-space/execute-proposal.d.ts +1 -22
- package/dist/src/dao-space/execute-proposal.d.ts.map +1 -1
- package/dist/src/dao-space/execute-proposal.js +12 -59
- package/dist/src/dao-space/execute-proposal.js.map +1 -1
- package/dist/src/dao-space/propose-add-editor.test.js +1 -1
- package/dist/src/dao-space/propose-add-editor.test.js.map +1 -1
- package/dist/src/dao-space/propose-edit.d.ts +1 -30
- package/dist/src/dao-space/propose-edit.d.ts.map +1 -1
- package/dist/src/dao-space/propose-edit.js +12 -108
- package/dist/src/dao-space/propose-edit.js.map +1 -1
- package/dist/src/dao-space/propose-edit.test.js +8 -1
- package/dist/src/dao-space/propose-edit.test.js.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.d.ts.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.js +5 -5
- package/dist/src/dao-space/propose-remove-editor.js.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.test.js +3 -8
- package/dist/src/dao-space/propose-remove-editor.test.js.map +1 -1
- package/dist/src/dao-space/propose-remove-member.d.ts.map +1 -1
- package/dist/src/dao-space/propose-remove-member.js +5 -5
- package/dist/src/dao-space/propose-remove-member.js.map +1 -1
- package/dist/src/dao-space/propose-request-membership.d.ts.map +1 -1
- package/dist/src/dao-space/propose-request-membership.js +4 -4
- package/dist/src/dao-space/propose-request-membership.js.map +1 -1
- package/dist/src/dao-space/propose-update-voting-settings.d.ts +8 -0
- package/dist/src/dao-space/propose-update-voting-settings.d.ts.map +1 -0
- package/dist/src/dao-space/propose-update-voting-settings.js +19 -0
- package/dist/src/dao-space/propose-update-voting-settings.js.map +1 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.d.ts +2 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.d.ts.map +1 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.js +118 -0
- package/dist/src/dao-space/propose-update-voting-settings.test.js.map +1 -0
- package/dist/src/dao-space/vote-proposal.d.ts +1 -24
- package/dist/src/dao-space/vote-proposal.d.ts.map +1 -1
- package/dist/src/dao-space/vote-proposal.js +12 -64
- package/dist/src/dao-space/vote-proposal.js.map +1 -1
- package/dist/src/e2e/local-geobrowser.d.ts +9 -0
- package/dist/src/e2e/local-geobrowser.d.ts.map +1 -0
- package/dist/src/e2e/local-geobrowser.js +35 -0
- package/dist/src/e2e/local-geobrowser.js.map +1 -0
- package/dist/src/e2e/v2-contracts.test.d.ts +2 -0
- package/dist/src/e2e/v2-contracts.test.d.ts.map +1 -0
- package/dist/src/e2e/v2-contracts.test.js +25 -0
- package/dist/src/e2e/v2-contracts.test.js.map +1 -0
- package/dist/src/e2e-api-surface.test.d.ts +2 -0
- package/dist/src/e2e-api-surface.test.d.ts.map +1 -0
- package/dist/src/e2e-api-surface.test.js +1021 -0
- package/dist/src/e2e-api-surface.test.js.map +1 -0
- package/dist/src/e2e-flows.test.d.ts +2 -0
- package/dist/src/e2e-flows.test.d.ts.map +1 -0
- package/dist/src/e2e-flows.test.js +445 -0
- package/dist/src/e2e-flows.test.js.map +1 -0
- package/dist/src/e2e-legacy-api-surface.test.d.ts +2 -0
- package/dist/src/e2e-legacy-api-surface.test.d.ts.map +1 -0
- package/dist/src/e2e-legacy-api-surface.test.js +840 -0
- package/dist/src/e2e-legacy-api-surface.test.js.map +1 -0
- package/dist/src/encoding.d.ts +3 -0
- package/dist/src/encoding.d.ts.map +1 -1
- package/dist/src/encoding.js +3 -0
- package/dist/src/encoding.js.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts +3 -89
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.js +5 -95
- package/dist/src/encodings/get-create-dao-space-calldata.js.map +1 -1
- package/dist/src/encodings/get-create-personal-space-calldata.d.ts +2 -0
- package/dist/src/encodings/get-create-personal-space-calldata.d.ts.map +1 -1
- package/dist/src/encodings/get-create-personal-space-calldata.js +2 -0
- package/dist/src/encodings/get-create-personal-space-calldata.js.map +1 -1
- package/dist/src/graph/comment-utils.d.ts +4 -0
- package/dist/src/graph/comment-utils.d.ts.map +1 -1
- package/dist/src/graph/comment-utils.js +4 -0
- package/dist/src/graph/comment-utils.js.map +1 -1
- package/dist/src/graph/constants.d.ts +12 -3
- package/dist/src/graph/constants.d.ts.map +1 -1
- package/dist/src/graph/constants.js +11 -5
- package/dist/src/graph/constants.js.map +1 -1
- package/dist/src/graph/create-comment.d.ts +3 -22
- package/dist/src/graph/create-comment.d.ts.map +1 -1
- package/dist/src/graph/create-comment.js +6 -136
- package/dist/src/graph/create-comment.js.map +1 -1
- package/dist/src/graph/create-comment.test.js +19 -8
- package/dist/src/graph/create-comment.test.js.map +1 -1
- package/dist/src/graph/create-entity.d.ts +2 -0
- package/dist/src/graph/create-entity.d.ts.map +1 -1
- package/dist/src/graph/create-entity.js +2 -0
- package/dist/src/graph/create-entity.js.map +1 -1
- package/dist/src/graph/create-image.d.ts +2 -21
- package/dist/src/graph/create-image.d.ts.map +1 -1
- package/dist/src/graph/create-image.js +7 -69
- package/dist/src/graph/create-image.js.map +1 -1
- package/dist/src/graph/create-property.d.ts +2 -0
- package/dist/src/graph/create-property.d.ts.map +1 -1
- package/dist/src/graph/create-property.js +2 -0
- package/dist/src/graph/create-property.js.map +1 -1
- package/dist/src/graph/create-proposal-review.d.ts +1 -27
- package/dist/src/graph/create-proposal-review.d.ts.map +1 -1
- package/dist/src/graph/create-proposal-review.js +4 -61
- package/dist/src/graph/create-proposal-review.js.map +1 -1
- package/dist/src/graph/create-relation.d.ts +2 -0
- package/dist/src/graph/create-relation.d.ts.map +1 -1
- package/dist/src/graph/create-relation.js +2 -0
- package/dist/src/graph/create-relation.js.map +1 -1
- package/dist/src/graph/create-type.d.ts +2 -0
- package/dist/src/graph/create-type.d.ts.map +1 -1
- package/dist/src/graph/create-type.js +2 -0
- package/dist/src/graph/create-type.js.map +1 -1
- package/dist/src/graph/delete-entity.d.ts +2 -14
- package/dist/src/graph/delete-entity.d.ts.map +1 -1
- package/dist/src/graph/delete-entity.js +5 -78
- package/dist/src/graph/delete-entity.js.map +1 -1
- package/dist/src/graph/delete-entity.test.js +7 -0
- package/dist/src/graph/delete-entity.test.js.map +1 -1
- package/dist/src/graph/delete-relation.d.ts +2 -0
- package/dist/src/graph/delete-relation.d.ts.map +1 -1
- package/dist/src/graph/delete-relation.js +2 -0
- package/dist/src/graph/delete-relation.js.map +1 -1
- package/dist/src/graph/entity-vote.d.ts +3 -3
- package/dist/src/graph/entity-vote.d.ts.map +1 -1
- package/dist/src/graph/entity-vote.js +21 -46
- package/dist/src/graph/entity-vote.js.map +1 -1
- package/dist/src/graph/update-comment.d.ts +3 -0
- package/dist/src/graph/update-comment.d.ts.map +1 -1
- package/dist/src/graph/update-comment.js +3 -0
- package/dist/src/graph/update-comment.js.map +1 -1
- package/dist/src/graph/update-entity.d.ts +2 -0
- package/dist/src/graph/update-entity.d.ts.map +1 -1
- package/dist/src/graph/update-entity.js +2 -0
- package/dist/src/graph/update-entity.js.map +1 -1
- package/dist/src/graph/update-proposal-review.d.ts +2 -27
- package/dist/src/graph/update-proposal-review.d.ts.map +1 -1
- package/dist/src/graph/update-proposal-review.js +4 -50
- package/dist/src/graph/update-proposal-review.js.map +1 -1
- package/dist/src/graph/update-relation.d.ts +2 -0
- package/dist/src/graph/update-relation.d.ts.map +1 -1
- package/dist/src/graph/update-relation.js +2 -0
- package/dist/src/graph/update-relation.js.map +1 -1
- package/dist/src/ipfs-core.d.ts +42 -0
- package/dist/src/ipfs-core.d.ts.map +1 -0
- package/dist/src/ipfs-core.js +165 -0
- package/dist/src/ipfs-core.js.map +1 -0
- package/dist/src/ipfs-core.test.d.ts +2 -0
- package/dist/src/ipfs-core.test.d.ts.map +1 -0
- package/dist/src/ipfs-core.test.js +56 -0
- package/dist/src/ipfs-core.test.js.map +1 -0
- package/dist/src/ipfs.d.ts +7 -52
- package/dist/src/ipfs.d.ts.map +1 -1
- package/dist/src/ipfs.js +27 -170
- package/dist/src/ipfs.js.map +1 -1
- package/dist/src/networks.d.ts +46 -0
- package/dist/src/networks.d.ts.map +1 -0
- package/dist/src/networks.js +90 -0
- package/dist/src/networks.js.map +1 -0
- package/dist/src/ops/comments.d.ts +80 -0
- package/dist/src/ops/comments.d.ts.map +1 -0
- package/dist/src/ops/comments.js +142 -0
- package/dist/src/ops/comments.js.map +1 -0
- package/dist/src/ops/entities.d.ts +50 -0
- package/dist/src/ops/entities.d.ts.map +1 -0
- package/dist/src/ops/entities.js +51 -0
- package/dist/src/ops/entities.js.map +1 -0
- package/dist/src/ops/images.d.ts +37 -0
- package/dist/src/ops/images.d.ts.map +1 -0
- package/dist/src/ops/images.js +69 -0
- package/dist/src/ops/images.js.map +1 -0
- package/dist/src/ops/index.d.ts +7 -0
- package/dist/src/ops/index.d.ts.map +1 -0
- package/dist/src/ops/index.js +7 -0
- package/dist/src/ops/index.js.map +1 -0
- package/dist/src/ops/index.test.d.ts +2 -0
- package/dist/src/ops/index.test.d.ts.map +1 -0
- package/dist/src/ops/index.test.js +115 -0
- package/dist/src/ops/index.test.js.map +1 -0
- package/dist/src/ops/properties.d.ts +20 -0
- package/dist/src/ops/properties.d.ts.map +1 -0
- package/dist/src/ops/properties.js +20 -0
- package/dist/src/ops/properties.js.map +1 -0
- package/dist/src/ops/proposal-reviews.d.ts +43 -0
- package/dist/src/ops/proposal-reviews.d.ts.map +1 -0
- package/dist/src/ops/proposal-reviews.js +103 -0
- package/dist/src/ops/proposal-reviews.js.map +1 -0
- package/dist/src/ops/relations.d.ts +57 -0
- package/dist/src/ops/relations.d.ts.map +1 -0
- package/dist/src/ops/relations.js +59 -0
- package/dist/src/ops/relations.js.map +1 -0
- package/dist/src/ops/types.d.ts +20 -0
- package/dist/src/ops/types.d.ts.map +1 -0
- package/dist/src/ops/types.js +20 -0
- package/dist/src/ops/types.js.map +1 -0
- package/dist/src/personal-space/constants.d.ts +1 -0
- package/dist/src/personal-space/constants.d.ts.map +1 -1
- package/dist/src/personal-space/constants.js +1 -0
- package/dist/src/personal-space/constants.js.map +1 -1
- package/dist/src/personal-space/create-space.d.ts +1 -18
- package/dist/src/personal-space/create-space.d.ts.map +1 -1
- package/dist/src/personal-space/create-space.js +1 -18
- package/dist/src/personal-space/create-space.js.map +1 -1
- package/dist/src/personal-space/has-space.d.ts +9 -2
- package/dist/src/personal-space/has-space.d.ts.map +1 -1
- package/dist/src/personal-space/has-space.js +9 -13
- package/dist/src/personal-space/has-space.js.map +1 -1
- package/dist/src/personal-space/has-space.test.d.ts +2 -0
- package/dist/src/personal-space/has-space.test.d.ts.map +1 -0
- package/dist/src/personal-space/has-space.test.js +30 -0
- package/dist/src/personal-space/has-space.test.js.map +1 -0
- package/dist/src/personal-space/publish-edit.d.ts +1 -22
- package/dist/src/personal-space/publish-edit.d.ts.map +1 -1
- package/dist/src/personal-space/publish-edit.js +10 -64
- package/dist/src/personal-space/publish-edit.js.map +1 -1
- package/dist/src/smart-wallet.d.ts +2 -4
- package/dist/src/smart-wallet.d.ts.map +1 -1
- package/dist/src/smart-wallet.js +6 -9
- package/dist/src/smart-wallet.js.map +1 -1
- package/dist/src/types.d.ts +25 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +14 -1
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { decodeAbiParameters, decodeFunctionData, encodeAbiParameters } from 'viem';
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { DaoSpaceAbi, SpaceRegistryAbi } from '../abis/index.js';
|
|
4
|
+
import { createGeoClient } from '../client.js';
|
|
5
|
+
import { bytes16ToBytes32LeftAligned, EMPTY_SIGNATURE, EMPTY_TOPIC, MEMBERSHIP_REQUESTED_ACTION, PROPOSAL_CREATED_ACTION, PROPOSAL_EXECUTED_ACTION, PROPOSAL_VOTED_ACTION, VOTE_OPTION_VALUES, } from '../dao-space/constants.js';
|
|
6
|
+
import { defineGeoNetworkConfig } from '../networks.js';
|
|
7
|
+
import * as Ops from '../ops/index.js';
|
|
8
|
+
const CID = 'ipfs://bafkreigwfjixq5cm3s4youhshorkpqh3ykpviyv76c2ei6gaalujtlqz5i';
|
|
9
|
+
const AUTHOR_ID = '5cade5757ecd41ae83481b22ffc2f94e';
|
|
10
|
+
const CALLER_SPACE_ID = '0x0eed5491b917cf58b33ac81255fe7ae9';
|
|
11
|
+
const DAO_SPACE_ID = '0xabcdef12345678901234567890abcdef';
|
|
12
|
+
const MEMBER_SPACE_ID = '0x22222222222222222222222222222222';
|
|
13
|
+
const PROPOSAL_ID = '0x11111111111111111111111111111111';
|
|
14
|
+
const DAO_SPACE_ADDRESS = '0x1234567890123456789012345678901234567890';
|
|
15
|
+
const SPACE_REGISTRY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
16
|
+
function customNetwork() {
|
|
17
|
+
return defineGeoNetworkConfig({
|
|
18
|
+
id: 'LOCAL',
|
|
19
|
+
name: 'Local Geo',
|
|
20
|
+
apiOrigin: 'http://localhost:3000',
|
|
21
|
+
contracts: {
|
|
22
|
+
SPACE_REGISTRY_ADDRESS,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function mockUploadFetch() {
|
|
27
|
+
return vi.fn().mockResolvedValue(new Response(JSON.stringify({ cid: CID })));
|
|
28
|
+
}
|
|
29
|
+
function decodeEnter(calldata) {
|
|
30
|
+
const decoded = decodeFunctionData({
|
|
31
|
+
abi: SpaceRegistryAbi,
|
|
32
|
+
data: calldata,
|
|
33
|
+
});
|
|
34
|
+
expect(decoded.functionName).toBe('enter');
|
|
35
|
+
const [fromSpaceId, toSpaceId, action, topic, data, signature] = decoded.args;
|
|
36
|
+
return {
|
|
37
|
+
fromSpaceId,
|
|
38
|
+
toSpaceId,
|
|
39
|
+
action,
|
|
40
|
+
topic,
|
|
41
|
+
data,
|
|
42
|
+
signature,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
describe('geo DAO proposal client', () => {
|
|
46
|
+
it('creates proposal calldata for supplied actions without uploading', () => {
|
|
47
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
48
|
+
const action = geo.daoSpaces.proposals.actions.addMember(DAO_SPACE_ADDRESS, MEMBER_SPACE_ID);
|
|
49
|
+
const result = geo.daoSpaces.proposals.create({
|
|
50
|
+
fromSpaceId: CALLER_SPACE_ID,
|
|
51
|
+
daoSpaceId: DAO_SPACE_ID,
|
|
52
|
+
proposalId: PROPOSAL_ID,
|
|
53
|
+
votingMode: 'SLOW',
|
|
54
|
+
actions: [action],
|
|
55
|
+
});
|
|
56
|
+
const decoded = decodeEnter(result.calldata);
|
|
57
|
+
const [proposalId, votingMode, actions] = decodeAbiParameters([
|
|
58
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
59
|
+
{ type: 'uint8', name: 'votingMode' },
|
|
60
|
+
{
|
|
61
|
+
type: 'tuple[]',
|
|
62
|
+
name: 'actions',
|
|
63
|
+
components: [
|
|
64
|
+
{ type: 'address', name: 'to' },
|
|
65
|
+
{ type: 'uint256', name: 'value' },
|
|
66
|
+
{ type: 'bytes', name: 'data' },
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
], decoded.data);
|
|
70
|
+
expect(result.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
71
|
+
expect(result.proposalId).toBe(PROPOSAL_ID);
|
|
72
|
+
expect(decoded.fromSpaceId).toBe(CALLER_SPACE_ID);
|
|
73
|
+
expect(decoded.toSpaceId).toBe(DAO_SPACE_ID);
|
|
74
|
+
expect(decoded.action).toBe(PROPOSAL_CREATED_ACTION);
|
|
75
|
+
expect(decoded.topic).toBe(bytes16ToBytes32LeftAligned(PROPOSAL_ID));
|
|
76
|
+
expect(decoded.signature).toBe(EMPTY_SIGNATURE);
|
|
77
|
+
expect(proposalId).toBe(PROPOSAL_ID);
|
|
78
|
+
expect(votingMode).toBe(0);
|
|
79
|
+
expect(actions).toHaveLength(1);
|
|
80
|
+
expect(actions[0]?.to).toBe(DAO_SPACE_ADDRESS);
|
|
81
|
+
expect(actions[0]?.value).toBe(0n);
|
|
82
|
+
});
|
|
83
|
+
it('encodes proposal vote and execute calldata for the configured registry', () => {
|
|
84
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
85
|
+
const vote = geo.daoSpaces.proposals.vote({
|
|
86
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
87
|
+
spaceId: DAO_SPACE_ID,
|
|
88
|
+
proposalId: PROPOSAL_ID,
|
|
89
|
+
vote: 'NO',
|
|
90
|
+
});
|
|
91
|
+
const execute = geo.daoSpaces.proposals.execute({
|
|
92
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
93
|
+
spaceId: DAO_SPACE_ID,
|
|
94
|
+
proposalId: PROPOSAL_ID,
|
|
95
|
+
});
|
|
96
|
+
const decodedVote = decodeEnter(vote.calldata);
|
|
97
|
+
const decodedExecute = decodeEnter(execute.calldata);
|
|
98
|
+
const [, voteOption] = decodeAbiParameters([
|
|
99
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
100
|
+
{ type: 'uint8', name: 'voteOption' },
|
|
101
|
+
], decodedVote.data);
|
|
102
|
+
expect(vote.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
103
|
+
expect(execute.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
104
|
+
expect(decodedVote.action).toBe(PROPOSAL_VOTED_ACTION);
|
|
105
|
+
expect(decodedVote.topic).toBe(bytes16ToBytes32LeftAligned(PROPOSAL_ID));
|
|
106
|
+
expect(voteOption).toBe(VOTE_OPTION_VALUES.NO);
|
|
107
|
+
expect(decodedExecute.action).toBe(PROPOSAL_EXECUTED_ACTION);
|
|
108
|
+
expect(decodedExecute.topic).toBe(bytes16ToBytes32LeftAligned(PROPOSAL_ID));
|
|
109
|
+
});
|
|
110
|
+
it('publishes an edit and wraps it as a DAO proposal action', async () => {
|
|
111
|
+
const fetch = mockUploadFetch();
|
|
112
|
+
const geo = createGeoClient({ network: customNetwork(), fetch });
|
|
113
|
+
const { ops } = Ops.entities.create({ name: 'Test Entity' });
|
|
114
|
+
const result = await geo.daoSpaces.proposeEdit({
|
|
115
|
+
name: 'Test Edit',
|
|
116
|
+
ops,
|
|
117
|
+
author: AUTHOR_ID,
|
|
118
|
+
daoSpaceAddress: DAO_SPACE_ADDRESS,
|
|
119
|
+
callerSpaceId: CALLER_SPACE_ID,
|
|
120
|
+
daoSpaceId: DAO_SPACE_ID,
|
|
121
|
+
proposalId: PROPOSAL_ID,
|
|
122
|
+
});
|
|
123
|
+
const decoded = decodeEnter(result.calldata);
|
|
124
|
+
const [, , actions] = decodeAbiParameters([
|
|
125
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
126
|
+
{ type: 'uint8', name: 'votingMode' },
|
|
127
|
+
{
|
|
128
|
+
type: 'tuple[]',
|
|
129
|
+
name: 'actions',
|
|
130
|
+
components: [
|
|
131
|
+
{ type: 'address', name: 'to' },
|
|
132
|
+
{ type: 'uint256', name: 'value' },
|
|
133
|
+
{ type: 'bytes', name: 'data' },
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
], decoded.data);
|
|
137
|
+
const publishAction = actions[0];
|
|
138
|
+
expect(publishAction).toBeDefined();
|
|
139
|
+
if (!publishAction) {
|
|
140
|
+
throw new Error('Expected a publish action');
|
|
141
|
+
}
|
|
142
|
+
const publishCall = decodeFunctionData({
|
|
143
|
+
abi: DaoSpaceAbi,
|
|
144
|
+
data: publishAction.data,
|
|
145
|
+
});
|
|
146
|
+
expect(result.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
147
|
+
expect(result.cid).toBe(CID);
|
|
148
|
+
expect(result.proposalId).toBe(PROPOSAL_ID);
|
|
149
|
+
expect(publishAction.to).toBe(DAO_SPACE_ADDRESS);
|
|
150
|
+
expect(publishCall.functionName).toBe('publish');
|
|
151
|
+
expect(publishCall.args?.[1]).toBe(encodeAbiParameters([{ type: 'string' }], [CID]));
|
|
152
|
+
expect(fetch).toHaveBeenCalledWith('http://localhost:3000/ipfs/upload-edit', expect.objectContaining({ method: 'POST' }));
|
|
153
|
+
});
|
|
154
|
+
it('creates member and editor role proposals from daoSpaces', () => {
|
|
155
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
156
|
+
const addMember = geo.daoSpaces.proposeAddMember({
|
|
157
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
158
|
+
spaceId: DAO_SPACE_ID,
|
|
159
|
+
daoSpaceAddress: DAO_SPACE_ADDRESS,
|
|
160
|
+
newMemberSpaceId: MEMBER_SPACE_ID,
|
|
161
|
+
proposalId: PROPOSAL_ID,
|
|
162
|
+
});
|
|
163
|
+
const addEditor = geo.daoSpaces.proposeAddEditor({
|
|
164
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
165
|
+
spaceId: DAO_SPACE_ID,
|
|
166
|
+
daoSpaceAddress: DAO_SPACE_ADDRESS,
|
|
167
|
+
newEditorSpaceId: MEMBER_SPACE_ID,
|
|
168
|
+
proposalId: PROPOSAL_ID,
|
|
169
|
+
});
|
|
170
|
+
const decodedAddMember = decodeEnter(addMember.calldata);
|
|
171
|
+
const [, memberVotingMode, memberActions] = decodeAbiParameters([
|
|
172
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
173
|
+
{ type: 'uint8', name: 'votingMode' },
|
|
174
|
+
{
|
|
175
|
+
type: 'tuple[]',
|
|
176
|
+
name: 'actions',
|
|
177
|
+
components: [
|
|
178
|
+
{ type: 'address', name: 'to' },
|
|
179
|
+
{ type: 'uint256', name: 'value' },
|
|
180
|
+
{ type: 'bytes', name: 'data' },
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
], decodedAddMember.data);
|
|
184
|
+
const [, editorVotingMode] = decodeAbiParameters([
|
|
185
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
186
|
+
{ type: 'uint8', name: 'votingMode' },
|
|
187
|
+
{
|
|
188
|
+
type: 'tuple[]',
|
|
189
|
+
name: 'actions',
|
|
190
|
+
components: [
|
|
191
|
+
{ type: 'address', name: 'to' },
|
|
192
|
+
{ type: 'uint256', name: 'value' },
|
|
193
|
+
{ type: 'bytes', name: 'data' },
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
], decodeEnter(addEditor.calldata).data);
|
|
197
|
+
const addMemberAction = memberActions[0];
|
|
198
|
+
expect(addMemberAction).toBeDefined();
|
|
199
|
+
if (!addMemberAction) {
|
|
200
|
+
throw new Error('Expected addMember action');
|
|
201
|
+
}
|
|
202
|
+
const addMemberCall = decodeFunctionData({
|
|
203
|
+
abi: DaoSpaceAbi,
|
|
204
|
+
data: addMemberAction.data,
|
|
205
|
+
});
|
|
206
|
+
expect(addMember.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
207
|
+
expect(addMemberAction.to).toBe(DAO_SPACE_ADDRESS);
|
|
208
|
+
expect(addMemberCall.functionName).toBe('addMember');
|
|
209
|
+
expect(addMemberCall.args?.[0]).toBe(MEMBER_SPACE_ID);
|
|
210
|
+
expect(memberVotingMode).toBe(0);
|
|
211
|
+
expect(editorVotingMode).toBe(0);
|
|
212
|
+
});
|
|
213
|
+
it('restricts editor role proposals to SLOW voting', () => {
|
|
214
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
215
|
+
expect(() => geo.daoSpaces.proposeAddEditor({
|
|
216
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
217
|
+
spaceId: DAO_SPACE_ID,
|
|
218
|
+
daoSpaceAddress: DAO_SPACE_ADDRESS,
|
|
219
|
+
newEditorSpaceId: MEMBER_SPACE_ID,
|
|
220
|
+
votingMode: 'FAST',
|
|
221
|
+
})).toThrow('proposeAddEditor only supports SLOW voting mode');
|
|
222
|
+
});
|
|
223
|
+
it('requires daoSpaceAddress for DAO role proposal actions', () => {
|
|
224
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
225
|
+
expect(() => geo.daoSpaces.proposeAddMember({
|
|
226
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
227
|
+
spaceId: DAO_SPACE_ID,
|
|
228
|
+
newMemberSpaceId: MEMBER_SPACE_ID,
|
|
229
|
+
proposalId: PROPOSAL_ID,
|
|
230
|
+
})).toThrow('daoSpaceAddress is required');
|
|
231
|
+
});
|
|
232
|
+
it('rejects unknown voting modes at runtime', () => {
|
|
233
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
234
|
+
const action = geo.daoSpaces.proposals.actions.addMember(DAO_SPACE_ADDRESS, MEMBER_SPACE_ID);
|
|
235
|
+
expect(() => geo.daoSpaces.proposals.create({
|
|
236
|
+
fromSpaceId: CALLER_SPACE_ID,
|
|
237
|
+
daoSpaceId: DAO_SPACE_ID,
|
|
238
|
+
proposalId: PROPOSAL_ID,
|
|
239
|
+
votingMode: 'MAYBE',
|
|
240
|
+
actions: [action],
|
|
241
|
+
})).toThrow('votingMode must be "FAST" or "SLOW"');
|
|
242
|
+
});
|
|
243
|
+
it('creates membership request calldata from daoSpaces', () => {
|
|
244
|
+
const geo = createGeoClient({ network: customNetwork() });
|
|
245
|
+
const result = geo.daoSpaces.proposeRequestMembership({
|
|
246
|
+
authorSpaceId: CALLER_SPACE_ID,
|
|
247
|
+
spaceId: DAO_SPACE_ID,
|
|
248
|
+
proposalId: PROPOSAL_ID,
|
|
249
|
+
});
|
|
250
|
+
const decoded = decodeEnter(result.calldata);
|
|
251
|
+
const [proposalId, newMemberSpaceId] = decodeAbiParameters([
|
|
252
|
+
{ type: 'bytes16', name: 'proposalId' },
|
|
253
|
+
{ type: 'bytes16', name: 'newMemberSpaceId' },
|
|
254
|
+
], decoded.data);
|
|
255
|
+
expect(result.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
256
|
+
expect(result.proposalId).toBe(PROPOSAL_ID);
|
|
257
|
+
expect(decoded.action).toBe(MEMBERSHIP_REQUESTED_ACTION);
|
|
258
|
+
expect(decoded.topic).toBe(EMPTY_TOPIC);
|
|
259
|
+
expect(proposalId).toBe(PROPOSAL_ID);
|
|
260
|
+
expect(newMemberSpaceId).toBe(CALLER_SPACE_ID);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
//# sourceMappingURL=dao-spaces.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dao-spaces.test.js","sourceRoot":"","sources":["../../../src/client/dao-spaces.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Id } from '../id.js';
|
|
2
|
+
import { type PublishEditParams } from '../ipfs-core.js';
|
|
3
|
+
import type { GeoClientContext } from './context.js';
|
|
4
|
+
type PublishEditToSpaceParams = PublishEditParams & {
|
|
5
|
+
spaceId: Id | string;
|
|
6
|
+
};
|
|
7
|
+
export type PublishEditToSpaceCalldataParams = {
|
|
8
|
+
spaceId: Id | string;
|
|
9
|
+
cid: `ipfs://${string}`;
|
|
10
|
+
spaceRegistryAddress: `0x${string}`;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Encodes personal-space edit publish calldata.
|
|
14
|
+
*
|
|
15
|
+
* Use this when an edit is already uploaded and you only need calldata for the
|
|
16
|
+
* configured or supplied space registry. The function accepts dashless UUID
|
|
17
|
+
* space IDs and valid SDK IDs.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const tx = encodePublishEditToSpaceCalldata({
|
|
22
|
+
* spaceId,
|
|
23
|
+
* cid: 'ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku',
|
|
24
|
+
* spaceRegistryAddress: '0x0000000000000000000000000000000000000000',
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* await walletClient.sendTransaction({
|
|
28
|
+
* to: tx.to,
|
|
29
|
+
* data: tx.calldata,
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @param params Space ID, edit CID, and space registry address.
|
|
34
|
+
* @returns Target registry address and encoded calldata.
|
|
35
|
+
* @throws When the space ID is not a valid UUID or SDK ID.
|
|
36
|
+
*/
|
|
37
|
+
export declare function encodePublishEditToSpaceCalldata({ spaceId, cid, spaceRegistryAddress, }: PublishEditToSpaceCalldataParams): {
|
|
38
|
+
to: `0x${string}`;
|
|
39
|
+
calldata: `0x${string}`;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Publishes edit ops to IPFS using the configured Geo API.
|
|
43
|
+
*
|
|
44
|
+
* This helper creates a GRC-20 edit payload, uploads it, and returns the edit
|
|
45
|
+
* CID and generated edit ID. It does not create transaction calldata.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* import * as Ops from '@geoprotocol/geo-sdk/ops';
|
|
50
|
+
*
|
|
51
|
+
* const { ops } = Ops.entities.create({ name: 'Geo entity' });
|
|
52
|
+
* const edit = await publish(context, {
|
|
53
|
+
* name: 'Create Geo entity',
|
|
54
|
+
* author: authorSpaceId,
|
|
55
|
+
* ops,
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* console.log(edit.cid);
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @param context Client context containing API origin and fetch configuration.
|
|
62
|
+
* @param params Edit name, author space ID, and ops to publish.
|
|
63
|
+
* @returns Uploaded edit CID and generated edit ID.
|
|
64
|
+
* @throws When ops are empty, IDs are invalid, fetch is unavailable, upload fails, or the CID response is invalid.
|
|
65
|
+
*/
|
|
66
|
+
export declare function publish(context: GeoClientContext, params: PublishEditParams): Promise<import("../ipfs-core.js").PublishEditResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Publishes edit ops to IPFS and returns calldata for submitting the edit to a personal space.
|
|
69
|
+
*
|
|
70
|
+
* This combines {@link publish} and {@link encodePublishEditToSpaceCalldata}
|
|
71
|
+
* using the space registry address from the configured network.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const tx = await geo.personalSpaces.publishEdit({
|
|
76
|
+
* name: 'Create entity',
|
|
77
|
+
* spaceId,
|
|
78
|
+
* author: spaceId,
|
|
79
|
+
* ops,
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* await walletClient.sendTransaction({
|
|
83
|
+
* to: tx.to,
|
|
84
|
+
* data: tx.calldata,
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @param context Client context containing network, contract, and fetch configuration.
|
|
89
|
+
* @param params Edit publication params plus the target space ID.
|
|
90
|
+
* @returns Edit ID, CID, target registry address, and calldata.
|
|
91
|
+
* @throws When required contract addresses are missing or publish/calldata validation fails.
|
|
92
|
+
*/
|
|
93
|
+
export declare function publishToSpace(context: GeoClientContext, params: PublishEditToSpaceParams): Promise<{
|
|
94
|
+
editId: Id;
|
|
95
|
+
cid: `ipfs://${string}`;
|
|
96
|
+
to: `0x${string}`;
|
|
97
|
+
calldata: `0x${string}`;
|
|
98
|
+
}>;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=edits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edits.d.ts","sourceRoot":"","sources":["../../../src/client/edits.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAInC,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AAG1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,KAAK,wBAAwB,GAAG,iBAAiB,GAAG;IAClD,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC;IACrB,GAAG,EAAE,UAAU,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,KAAK,MAAM,EAAE,CAAC;CACrC,CAAC;AAcF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,OAAO,EACP,GAAG,EACH,oBAAoB,GACrB,EAAE,gCAAgC;;;EAalC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,wDAM3E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,wBAAwB;;;;;GAgB/F"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { encodeAbiParameters, encodeFunctionData, toHex } from 'viem';
|
|
2
|
+
import { SpaceRegistryAbi } from '../abis/index.js';
|
|
3
|
+
import { isValid } from '../id.js';
|
|
4
|
+
import { toBytes } from '../id-utils.js';
|
|
5
|
+
import { UUID_DASHLESS_REGEX } from '../internal/uuid.js';
|
|
6
|
+
import { publishEditCore } from '../ipfs-core.js';
|
|
7
|
+
import { requireGeoContract } from '../networks.js';
|
|
8
|
+
import { EDITS_PUBLISHED, EMPTY_SIGNATURE, EMPTY_TOPIC } from '../personal-space/constants.js';
|
|
9
|
+
import { requireFetch } from './context.js';
|
|
10
|
+
function spaceIdToBytes16(spaceId) {
|
|
11
|
+
if (UUID_DASHLESS_REGEX.test(spaceId)) {
|
|
12
|
+
return `0x${spaceId.toLowerCase()}`;
|
|
13
|
+
}
|
|
14
|
+
if (isValid(spaceId)) {
|
|
15
|
+
return toHex(toBytes(spaceId));
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`Invalid spaceId: "${spaceId}". Expected a valid UUID or 32-character hex string.`);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Encodes personal-space edit publish calldata.
|
|
21
|
+
*
|
|
22
|
+
* Use this when an edit is already uploaded and you only need calldata for the
|
|
23
|
+
* configured or supplied space registry. The function accepts dashless UUID
|
|
24
|
+
* space IDs and valid SDK IDs.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const tx = encodePublishEditToSpaceCalldata({
|
|
29
|
+
* spaceId,
|
|
30
|
+
* cid: 'ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku',
|
|
31
|
+
* spaceRegistryAddress: '0x0000000000000000000000000000000000000000',
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* await walletClient.sendTransaction({
|
|
35
|
+
* to: tx.to,
|
|
36
|
+
* data: tx.calldata,
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @param params Space ID, edit CID, and space registry address.
|
|
41
|
+
* @returns Target registry address and encoded calldata.
|
|
42
|
+
* @throws When the space ID is not a valid UUID or SDK ID.
|
|
43
|
+
*/
|
|
44
|
+
export function encodePublishEditToSpaceCalldata({ spaceId, cid, spaceRegistryAddress, }) {
|
|
45
|
+
const spaceIdBytes16 = spaceIdToBytes16(spaceId);
|
|
46
|
+
const encodedCid = encodeAbiParameters([{ type: 'string' }], [cid]);
|
|
47
|
+
const calldata = encodeFunctionData({
|
|
48
|
+
abi: SpaceRegistryAbi,
|
|
49
|
+
functionName: 'enter',
|
|
50
|
+
args: [spaceIdBytes16, spaceIdBytes16, EDITS_PUBLISHED, EMPTY_TOPIC, encodedCid, EMPTY_SIGNATURE],
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
to: spaceRegistryAddress,
|
|
54
|
+
calldata,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Publishes edit ops to IPFS using the configured Geo API.
|
|
59
|
+
*
|
|
60
|
+
* This helper creates a GRC-20 edit payload, uploads it, and returns the edit
|
|
61
|
+
* CID and generated edit ID. It does not create transaction calldata.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* import * as Ops from '@geoprotocol/geo-sdk/ops';
|
|
66
|
+
*
|
|
67
|
+
* const { ops } = Ops.entities.create({ name: 'Geo entity' });
|
|
68
|
+
* const edit = await publish(context, {
|
|
69
|
+
* name: 'Create Geo entity',
|
|
70
|
+
* author: authorSpaceId,
|
|
71
|
+
* ops,
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* console.log(edit.cid);
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @param context Client context containing API origin and fetch configuration.
|
|
78
|
+
* @param params Edit name, author space ID, and ops to publish.
|
|
79
|
+
* @returns Uploaded edit CID and generated edit ID.
|
|
80
|
+
* @throws When ops are empty, IDs are invalid, fetch is unavailable, upload fails, or the CID response is invalid.
|
|
81
|
+
*/
|
|
82
|
+
export function publish(context, params) {
|
|
83
|
+
return publishEditCore({
|
|
84
|
+
...params,
|
|
85
|
+
apiOrigin: context.network.apiOrigin,
|
|
86
|
+
fetch: requireFetch(context, 'Edit publishing'),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Publishes edit ops to IPFS and returns calldata for submitting the edit to a personal space.
|
|
91
|
+
*
|
|
92
|
+
* This combines {@link publish} and {@link encodePublishEditToSpaceCalldata}
|
|
93
|
+
* using the space registry address from the configured network.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* const tx = await geo.personalSpaces.publishEdit({
|
|
98
|
+
* name: 'Create entity',
|
|
99
|
+
* spaceId,
|
|
100
|
+
* author: spaceId,
|
|
101
|
+
* ops,
|
|
102
|
+
* });
|
|
103
|
+
*
|
|
104
|
+
* await walletClient.sendTransaction({
|
|
105
|
+
* to: tx.to,
|
|
106
|
+
* data: tx.calldata,
|
|
107
|
+
* });
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @param context Client context containing network, contract, and fetch configuration.
|
|
111
|
+
* @param params Edit publication params plus the target space ID.
|
|
112
|
+
* @returns Edit ID, CID, target registry address, and calldata.
|
|
113
|
+
* @throws When required contract addresses are missing or publish/calldata validation fails.
|
|
114
|
+
*/
|
|
115
|
+
export async function publishToSpace(context, params) {
|
|
116
|
+
const spaceRegistryAddress = requireGeoContract(context.network, 'SPACE_REGISTRY_ADDRESS');
|
|
117
|
+
spaceIdToBytes16(String(params.spaceId));
|
|
118
|
+
const { cid, editId } = await publish(context, params);
|
|
119
|
+
const { to, calldata } = encodePublishEditToSpaceCalldata({
|
|
120
|
+
spaceId: params.spaceId,
|
|
121
|
+
cid,
|
|
122
|
+
spaceRegistryAddress,
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
editId,
|
|
126
|
+
cid,
|
|
127
|
+
to,
|
|
128
|
+
calldata,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=edits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edits.js","sourceRoot":"","sources":["../../../src/client/edits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE/F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAY5C,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,EAAmB,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,sDAAsD,CAAC,CAAC;AACtG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,gCAAgC,CAAC,EAC/C,OAAO,EACP,GAAG,EACH,oBAAoB,GACa;IACjC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,OAAO;QACrB,IAAI,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC;KAClG,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,oBAAoB;QACxB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,OAAO,CAAC,OAAyB,EAAE,MAAyB;IAC1E,OAAO,eAAe,CAAC;QACrB,GAAG,MAAM;QACT,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;QACpC,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC;KAChD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAyB,EAAE,MAAgC;IAC9F,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAC3F,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,gCAAgC,CAAC;QACxD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG;QACH,oBAAoB;KACrB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,GAAG;QACH,EAAE;QACF,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edits.test.d.ts","sourceRoot":"","sources":["../../../src/client/edits.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { decodeAbiParameters, decodeFunctionData } from 'viem';
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { SpaceRegistryAbi } from '../abis/index.js';
|
|
4
|
+
import { createEntity } from '../graph/create-entity.js';
|
|
5
|
+
import { defineGeoNetworkConfig } from '../networks.js';
|
|
6
|
+
import { EDITS_PUBLISHED, EMPTY_SIGNATURE, EMPTY_TOPIC } from '../personal-space/constants.js';
|
|
7
|
+
import { encodePublishEditToSpaceCalldata, publish, publishToSpace } from './edits.js';
|
|
8
|
+
const CID = 'ipfs://bafkreigwfjixq5cm3s4youhshorkpqh3ykpviyv76c2ei6gaalujtlqz5i';
|
|
9
|
+
const SPACE_ID = '0eed5491b917cf58b33ac81255fe7ae9';
|
|
10
|
+
const AUTHOR_ID = '5cade5757ecd41ae83481b22ffc2f94e';
|
|
11
|
+
const SPACE_REGISTRY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
12
|
+
function mockUploadFetch() {
|
|
13
|
+
return vi.fn().mockResolvedValue(new Response(JSON.stringify({ cid: CID })));
|
|
14
|
+
}
|
|
15
|
+
function testContext(fetch = mockUploadFetch()) {
|
|
16
|
+
return {
|
|
17
|
+
network: defineGeoNetworkConfig({
|
|
18
|
+
id: 'LOCAL',
|
|
19
|
+
name: 'Local Geo',
|
|
20
|
+
apiOrigin: 'http://localhost:3000',
|
|
21
|
+
contracts: {
|
|
22
|
+
SPACE_REGISTRY_ADDRESS,
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
fetch,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function decodePublishEditCalldata(calldata) {
|
|
29
|
+
const decoded = decodeFunctionData({
|
|
30
|
+
abi: SpaceRegistryAbi,
|
|
31
|
+
data: calldata,
|
|
32
|
+
});
|
|
33
|
+
expect(decoded.functionName).toBe('enter');
|
|
34
|
+
const [fromSpaceId, toSpaceId, action, topic, data, signature] = decoded.args;
|
|
35
|
+
const [cid] = decodeAbiParameters([{ type: 'string' }], data);
|
|
36
|
+
return {
|
|
37
|
+
fromSpaceId,
|
|
38
|
+
toSpaceId,
|
|
39
|
+
action,
|
|
40
|
+
topic,
|
|
41
|
+
cid,
|
|
42
|
+
signature,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
describe('client edit helpers', () => {
|
|
46
|
+
it('encodes personal space publish calldata without context', () => {
|
|
47
|
+
const { to, calldata } = encodePublishEditToSpaceCalldata({
|
|
48
|
+
spaceId: SPACE_ID,
|
|
49
|
+
cid: CID,
|
|
50
|
+
spaceRegistryAddress: SPACE_REGISTRY_ADDRESS,
|
|
51
|
+
});
|
|
52
|
+
const decoded = decodePublishEditCalldata(calldata);
|
|
53
|
+
expect(to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
54
|
+
expect(decoded.fromSpaceId).toBe(`0x${SPACE_ID}`);
|
|
55
|
+
expect(decoded.toSpaceId).toBe(`0x${SPACE_ID}`);
|
|
56
|
+
expect(decoded.action).toBe(EDITS_PUBLISHED);
|
|
57
|
+
expect(decoded.topic).toBe(EMPTY_TOPIC);
|
|
58
|
+
expect(decoded.cid).toBe(CID);
|
|
59
|
+
expect(decoded.signature).toBe(EMPTY_SIGNATURE);
|
|
60
|
+
});
|
|
61
|
+
it('publishes an edit with the configured API origin and fetch implementation', async () => {
|
|
62
|
+
const fetch = mockUploadFetch();
|
|
63
|
+
const { ops } = createEntity({ name: 'Test Entity' });
|
|
64
|
+
const result = await publish(testContext(fetch), {
|
|
65
|
+
name: 'Test Edit',
|
|
66
|
+
ops,
|
|
67
|
+
author: AUTHOR_ID,
|
|
68
|
+
});
|
|
69
|
+
expect(result.cid).toBe(CID);
|
|
70
|
+
expect(result.editId).toHaveLength(32);
|
|
71
|
+
expect(fetch).toHaveBeenCalledWith('http://localhost:3000/ipfs/upload-edit', expect.objectContaining({ method: 'POST' }));
|
|
72
|
+
});
|
|
73
|
+
it('publishes to a personal space and returns transaction data for the configured registry', async () => {
|
|
74
|
+
const fetch = mockUploadFetch();
|
|
75
|
+
const { ops } = createEntity({ name: 'Test Entity' });
|
|
76
|
+
const result = await publishToSpace(testContext(fetch), {
|
|
77
|
+
name: 'Publish to space',
|
|
78
|
+
spaceId: SPACE_ID,
|
|
79
|
+
ops,
|
|
80
|
+
author: AUTHOR_ID,
|
|
81
|
+
});
|
|
82
|
+
expect(result.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
83
|
+
expect(result.cid).toBe(CID);
|
|
84
|
+
expect(decodePublishEditCalldata(result.calldata).cid).toBe(CID);
|
|
85
|
+
});
|
|
86
|
+
it('validates the personal space ID before uploading', async () => {
|
|
87
|
+
const fetch = mockUploadFetch();
|
|
88
|
+
const { ops } = createEntity({ name: 'Test Entity' });
|
|
89
|
+
await expect(publishToSpace(testContext(fetch), {
|
|
90
|
+
name: 'Publish to space',
|
|
91
|
+
spaceId: 'not-a-space-id',
|
|
92
|
+
ops,
|
|
93
|
+
author: AUTHOR_ID,
|
|
94
|
+
})).rejects.toThrow('Invalid spaceId');
|
|
95
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=edits.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edits.test.js","sourceRoot":"","sources":["../../../src/client/edits.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CreateResult, DeleteEntityParams } from '../types.js';
|
|
2
|
+
import type { GeoClientContext } from './context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Fetches the current entity values and relations for a space, then builds delete ops.
|
|
5
|
+
*
|
|
6
|
+
* Entity deletion requires current graph context so the SDK can unset existing
|
|
7
|
+
* values and delete existing relations in the target space.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const { ops } = await geo.entities.delete({
|
|
12
|
+
* id: entityId,
|
|
13
|
+
* spaceId,
|
|
14
|
+
* });
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @param context Client context containing API origin and fetch configuration.
|
|
18
|
+
* @param params Entity ID and space ID to delete within.
|
|
19
|
+
* @returns Entity ID and deletion ops, or no ops when the entity is not found.
|
|
20
|
+
* @throws When IDs are invalid, fetch is unavailable, GraphQL fails, or the response is malformed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deleteEntity(context: GeoClientContext, { id, spaceId }: Omit<DeleteEntityParams, 'network'>): Promise<CreateResult>;
|
|
23
|
+
//# sourceMappingURL=entities.d.ts.map
|