@geoprotocol/geo-sdk 0.18.3 → 0.19.1
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 +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- 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-factory.d.ts +43 -6
- package/dist/src/abis/dao-space-factory.d.ts.map +1 -1
- package/dist/src/abis/dao-space-factory.js +38 -27
- package/dist/src/abis/dao-space-factory.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/abis/dao-space.d.ts +98 -7
- package/dist/src/abis/dao-space.d.ts.map +1 -1
- package/dist/src/abis/dao-space.js +61 -99
- package/dist/src/abis/dao-space.js.map +1 -1
- package/dist/src/abis/index.d.ts +2 -2
- package/dist/src/abis/index.d.ts.map +1 -1
- package/dist/src/abis/index.js +2 -2
- package/dist/src/abis/index.js.map +1 -1
- package/dist/src/abis/space-registry.d.ts +26 -0
- package/dist/src/abis/space-registry.d.ts.map +1 -1
- package/dist/src/abis/space-registry.js +33 -0
- package/dist/src/abis/space-registry.js.map +1 -1
- package/dist/src/api-surface.e2e.test.d.ts +2 -0
- package/dist/src/api-surface.e2e.test.d.ts.map +1 -0
- package/dist/src/api-surface.e2e.test.js +1206 -0
- package/dist/src/api-surface.e2e.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 +408 -0
- package/dist/src/client/dao-spaces.d.ts.map +1 -0
- package/dist/src/client/dao-spaces.js +626 -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 +497 -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 +229 -0
- package/dist/src/client/personal-spaces.d.ts.map +1 -0
- package/dist/src/client/personal-spaces.js +278 -0
- package/dist/src/client/personal-spaces.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 +175 -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 +338 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +494 -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 +125 -0
- package/dist/src/client.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/dao-space/constants.d.ts +16 -3
- package/dist/src/dao-space/constants.d.ts.map +1 -1
- package/dist/src/dao-space/constants.js +16 -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/index.d.ts +2 -1
- package/dist/src/dao-space/index.d.ts.map +1 -1
- package/dist/src/dao-space/index.js +1 -0
- package/dist/src/dao-space/index.js.map +1 -1
- package/dist/src/dao-space/propose-add-editor.d.ts +1 -20
- package/dist/src/dao-space/propose-add-editor.d.ts.map +1 -1
- package/dist/src/dao-space/propose-add-editor.js +12 -87
- package/dist/src/dao-space/propose-add-editor.js.map +1 -1
- package/dist/src/dao-space/propose-add-editor.test.js +16 -4
- package/dist/src/dao-space/propose-add-editor.test.js.map +1 -1
- package/dist/src/dao-space/propose-add-member.d.ts +1 -20
- package/dist/src/dao-space/propose-add-member.d.ts.map +1 -1
- package/dist/src/dao-space/propose-add-member.js +12 -87
- package/dist/src/dao-space/propose-add-member.js.map +1 -1
- package/dist/src/dao-space/propose-add-member.test.js +13 -0
- package/dist/src/dao-space/propose-add-member.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 +53 -1
- package/dist/src/dao-space/propose-edit.test.js.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.d.ts +1 -22
- package/dist/src/dao-space/propose-remove-editor.d.ts.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.js +12 -94
- package/dist/src/dao-space/propose-remove-editor.js.map +1 -1
- package/dist/src/dao-space/propose-remove-editor.test.js +24 -11
- package/dist/src/dao-space/propose-remove-editor.test.js.map +1 -1
- package/dist/src/dao-space/propose-remove-member.d.ts +1 -22
- package/dist/src/dao-space/propose-remove-member.d.ts.map +1 -1
- package/dist/src/dao-space/propose-remove-member.js +12 -94
- package/dist/src/dao-space/propose-remove-member.js.map +1 -1
- package/dist/src/dao-space/propose-remove-member.test.js +19 -0
- package/dist/src/dao-space/propose-remove-member.test.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/types.d.ts +72 -11
- package/dist/src/dao-space/types.d.ts.map +1 -1
- 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/dao-space/vote-proposal.test.js +54 -0
- package/dist/src/dao-space/vote-proposal.test.js.map +1 -1
- package/dist/src/e2e-test-environment.d.ts +26 -0
- package/dist/src/e2e-test-environment.d.ts.map +1 -0
- package/dist/src/e2e-test-environment.js +150 -0
- package/dist/src/e2e-test-environment.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 +34 -97
- package/dist/src/encodings/get-create-dao-space-calldata.d.ts.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.js +66 -109
- package/dist/src/encodings/get-create-dao-space-calldata.js.map +1 -1
- package/dist/src/encodings/get-create-dao-space-calldata.test.js +90 -23
- package/dist/src/encodings/get-create-dao-space-calldata.test.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/full-flow-test.test.js +5 -2
- package/dist/src/full-flow-test.test.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/legacy-api-surface.e2e.test.d.ts +2 -0
- package/dist/src/legacy-api-surface.e2e.test.d.ts.map +1 -0
- package/dist/src/legacy-api-surface.e2e.test.js +860 -0
- package/dist/src/legacy-api-surface.e2e.test.js.map +1 -0
- 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/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 +3 -20
- package/dist/src/personal-space/create-space.d.ts.map +1 -1
- package/dist/src/personal-space/create-space.js +5 -21
- 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/personal-space/types.d.ts +4 -1
- package/dist/src/personal-space/types.d.ts.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
- package/dist/proto.d.ts +0 -5
- package/dist/proto.d.ts.map +0 -1
- package/dist/proto.js +0 -5
- package/dist/proto.js.map +0 -1
- package/dist/src/graph/create-space.d.ts +0 -37
- package/dist/src/graph/create-space.d.ts.map +0 -1
- package/dist/src/graph/create-space.js +0 -67
- package/dist/src/graph/create-space.js.map +0 -1
- package/dist/src/proto/index.d.ts +0 -7
- package/dist/src/proto/index.d.ts.map +0 -1
- package/dist/src/proto/index.js +0 -7
- package/dist/src/proto/index.js.map +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { encodeAbiParameters, encodeFunctionData, keccak256, toHex } from 'viem';
|
|
2
|
+
import { SpaceRegistryAbi } from '../abis/index.js';
|
|
3
|
+
import { assertValid } from '../id-utils.js';
|
|
4
|
+
import { requireGeoContract } from '../networks.js';
|
|
5
|
+
const EMPTY_SIGNATURE = '0x';
|
|
6
|
+
const ENTITY_OBJECT_TYPE = '00000000';
|
|
7
|
+
const ENTITY_VOTE_VERSION = 0;
|
|
8
|
+
const UPVOTED_ACTION = keccak256(toHex('PERMISSIONLESS.UPVOTED'));
|
|
9
|
+
const DOWNVOTED_ACTION = keccak256(toHex('PERMISSIONLESS.DOWNVOTED'));
|
|
10
|
+
const UNVOTED_ACTION = keccak256(toHex('PERMISSIONLESS.UNVOTED'));
|
|
11
|
+
function idToBytes16(id, sourceHint) {
|
|
12
|
+
const normalized = id.startsWith('0x') ? id.slice(2) : id.replaceAll('-', '');
|
|
13
|
+
assertValid(normalized, sourceHint);
|
|
14
|
+
return `0x${normalized.toLowerCase()}`;
|
|
15
|
+
}
|
|
16
|
+
function encodeEntityVoteTopic(entityId) {
|
|
17
|
+
const normalizedEntityId = idToBytes16(entityId, '`entityId` in entity vote').slice(2);
|
|
18
|
+
return `0x${ENTITY_OBJECT_TYPE}${normalizedEntityId}${'0'.repeat(24)}`;
|
|
19
|
+
}
|
|
20
|
+
function encodeEntityVoteData(authorSpaceId, spaceId) {
|
|
21
|
+
return encodeAbiParameters([{ type: 'uint16' }, { type: 'bytes16' }, { type: 'bytes16' }], [ENTITY_VOTE_VERSION, authorSpaceId, spaceId]);
|
|
22
|
+
}
|
|
23
|
+
function encodeEntityVoteCalldata(params, action) {
|
|
24
|
+
const authorSpaceId = idToBytes16(params.authorSpaceId, '`authorSpaceId` in entity vote');
|
|
25
|
+
const spaceId = idToBytes16(params.spaceId, '`spaceId` in entity vote');
|
|
26
|
+
const topic = encodeEntityVoteTopic(params.entityId);
|
|
27
|
+
const data = encodeEntityVoteData(authorSpaceId, spaceId);
|
|
28
|
+
const calldata = encodeFunctionData({
|
|
29
|
+
abi: SpaceRegistryAbi,
|
|
30
|
+
functionName: 'enter',
|
|
31
|
+
args: [authorSpaceId, spaceId, action, topic, data, EMPTY_SIGNATURE],
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
to: params.spaceRegistryAddress,
|
|
35
|
+
calldata,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function withSpaceRegistry(context, params) {
|
|
39
|
+
return {
|
|
40
|
+
...params,
|
|
41
|
+
spaceRegistryAddress: requireGeoContract(context.network, 'SPACE_REGISTRY_ADDRESS'),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Encodes upvote calldata.
|
|
46
|
+
*
|
|
47
|
+
* Use this pure helper when you already have the target space registry address.
|
|
48
|
+
* Use `geo.entityVotes.upvote(...)` when the address should come from the
|
|
49
|
+
* configured network.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* const tx = encodeUpvoteEntityCalldata({
|
|
54
|
+
* authorSpaceId,
|
|
55
|
+
* spaceId,
|
|
56
|
+
* entityId,
|
|
57
|
+
* spaceRegistryAddress,
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @param params Author space, target space, entity ID, and space registry address.
|
|
62
|
+
* @returns Target registry address and encoded calldata.
|
|
63
|
+
* @throws When any supplied ID is invalid.
|
|
64
|
+
*/
|
|
65
|
+
export function encodeUpvoteEntityCalldata(params) {
|
|
66
|
+
return encodeEntityVoteCalldata(params, UPVOTED_ACTION);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Encodes downvote calldata.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* const tx = encodeDownvoteEntityCalldata({
|
|
74
|
+
* authorSpaceId,
|
|
75
|
+
* spaceId,
|
|
76
|
+
* entityId,
|
|
77
|
+
* spaceRegistryAddress,
|
|
78
|
+
* });
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @param params Author space, target space, entity ID, and space registry address.
|
|
82
|
+
* @returns Target registry address and encoded calldata.
|
|
83
|
+
* @throws When any supplied ID is invalid.
|
|
84
|
+
*/
|
|
85
|
+
export function encodeDownvoteEntityCalldata(params) {
|
|
86
|
+
return encodeEntityVoteCalldata(params, DOWNVOTED_ACTION);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Encodes vote-withdrawal calldata.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* const tx = encodeWithdrawEntityVoteCalldata({
|
|
94
|
+
* authorSpaceId,
|
|
95
|
+
* spaceId,
|
|
96
|
+
* entityId,
|
|
97
|
+
* spaceRegistryAddress,
|
|
98
|
+
* });
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @param params Author space, target space, entity ID, and space registry address.
|
|
102
|
+
* @returns Target registry address and encoded calldata.
|
|
103
|
+
* @throws When any supplied ID is invalid.
|
|
104
|
+
*/
|
|
105
|
+
export function encodeWithdrawEntityVoteCalldata(params) {
|
|
106
|
+
return encodeEntityVoteCalldata(params, UNVOTED_ACTION);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Builds calldata for upvoting an entity using the configured space registry.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* const tx = geo.entityVotes.upvote({
|
|
114
|
+
* authorSpaceId,
|
|
115
|
+
* spaceId,
|
|
116
|
+
* entityId,
|
|
117
|
+
* });
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @param context Client context containing the target network configuration.
|
|
121
|
+
* @param params Author space, target space, and entity ID.
|
|
122
|
+
* @returns Target registry address and encoded calldata.
|
|
123
|
+
* @throws When IDs are invalid or the configured network is missing `SPACE_REGISTRY_ADDRESS`.
|
|
124
|
+
*/
|
|
125
|
+
export function upvote(context, params) {
|
|
126
|
+
return encodeUpvoteEntityCalldata(withSpaceRegistry(context, params));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Builds calldata for downvoting an entity using the configured space registry.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* const tx = geo.entityVotes.downvote({
|
|
134
|
+
* authorSpaceId,
|
|
135
|
+
* spaceId,
|
|
136
|
+
* entityId,
|
|
137
|
+
* });
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* @param context Client context containing the target network configuration.
|
|
141
|
+
* @param params Author space, target space, and entity ID.
|
|
142
|
+
* @returns Target registry address and encoded calldata.
|
|
143
|
+
* @throws When IDs are invalid or the configured network is missing `SPACE_REGISTRY_ADDRESS`.
|
|
144
|
+
*/
|
|
145
|
+
export function downvote(context, params) {
|
|
146
|
+
return encodeDownvoteEntityCalldata(withSpaceRegistry(context, params));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Builds calldata for withdrawing an entity vote using the configured space registry.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* const tx = geo.entityVotes.withdraw({
|
|
154
|
+
* authorSpaceId,
|
|
155
|
+
* spaceId,
|
|
156
|
+
* entityId,
|
|
157
|
+
* });
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* @param context Client context containing the target network configuration.
|
|
161
|
+
* @param params Author space, target space, and entity ID.
|
|
162
|
+
* @returns Target registry address and encoded calldata.
|
|
163
|
+
* @throws When IDs are invalid or the configured network is missing `SPACE_REGISTRY_ADDRESS`.
|
|
164
|
+
*/
|
|
165
|
+
export function withdraw(context, params) {
|
|
166
|
+
return encodeWithdrawEntityVoteCalldata(withSpaceRegistry(context, params));
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=entity-votes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-votes.js","sourceRoot":"","sources":["../../../src/client/entity-votes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,MAAM,eAAe,GAAG,IAAa,CAAC;AACtC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAClE,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACtE,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAclE,SAAS,WAAW,CAAC,EAAe,EAAE,UAAkB;IACtD,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9E,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEpC,OAAO,KAAK,UAAU,CAAC,WAAW,EAAE,EAAmB,CAAC;AAC1D,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAqB;IAClD,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEvF,OAAO,KAAK,kBAAkB,GAAG,kBAAkB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAmB,CAAC;AAC1F,CAAC;AAED,SAAS,oBAAoB,CAAC,aAA4B,EAAE,OAAsB;IAChF,OAAO,mBAAmB,CACxB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC9D,CAAC,mBAAmB,EAAE,aAAa,EAAE,OAAO,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAgC,EAAE,MAAwB;IAC1F,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,gCAAgC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAClC,GAAG,EAAE,gBAAgB;QACrB,YAAY,EAAE,OAAO;QACrB,IAAI,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC;KACrE,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,oBAAoB;QAC/B,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAyB,EAAE,MAA8B;IAClF,OAAO;QACL,GAAG,MAAM;QACT,oBAAoB,EAAE,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC;KACpF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAgC;IACzE,OAAO,wBAAwB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAgC;IAC3E,OAAO,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gCAAgC,CAAC,MAAgC;IAC/E,OAAO,wBAAwB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,MAAM,CAAC,OAAyB,EAAE,MAA8B;IAC9E,OAAO,0BAA0B,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAA8B;IAChF,OAAO,4BAA4B,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAA8B;IAChF,OAAO,gCAAgC,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-votes.test.d.ts","sourceRoot":"","sources":["../../../src/client/entity-votes.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { decodeAbiParameters, decodeFunctionData } from 'viem';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { SpaceRegistryAbi } from '../abis/index.js';
|
|
4
|
+
import { defineGeoNetworkConfig } from '../networks.js';
|
|
5
|
+
import { downvote, encodeDownvoteEntityCalldata, encodeUpvoteEntityCalldata, encodeWithdrawEntityVoteCalldata, upvote, withdraw, } from './entity-votes.js';
|
|
6
|
+
const AUTHOR_SPACE_ID = '0eed5491b917cf58b33ac81255fe7ae9';
|
|
7
|
+
const SPACE_ID = 'abcdef12345678901234567890abcdef';
|
|
8
|
+
const ENTITY_ID = '11111111111111111111111111111111';
|
|
9
|
+
const SPACE_REGISTRY_ADDRESS = '0x0000000000000000000000000000000000000001';
|
|
10
|
+
const UPVOTED_ACTION = '0x1fc04a8d9387c7bd1199a2a77c8e531a7a7b11991df5dcc8c9acb6abcb481725';
|
|
11
|
+
const DOWNVOTED_ACTION = '0xde8b897ce7cc541dacb388d5aabb3dc0fb7856920284f41582c15b5fc31a8662';
|
|
12
|
+
const UNVOTED_ACTION = '0x3bd4c337382f79aa5007a91169bb57723b5dd59e6b4bb60d20362bcc0d9d998b';
|
|
13
|
+
function testContext() {
|
|
14
|
+
return {
|
|
15
|
+
network: defineGeoNetworkConfig({
|
|
16
|
+
id: 'LOCAL',
|
|
17
|
+
name: 'Local Geo',
|
|
18
|
+
apiOrigin: 'http://localhost:3000',
|
|
19
|
+
contracts: {
|
|
20
|
+
SPACE_REGISTRY_ADDRESS,
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function decodeEntityVote(calldata) {
|
|
26
|
+
const decoded = decodeFunctionData({
|
|
27
|
+
abi: SpaceRegistryAbi,
|
|
28
|
+
data: calldata,
|
|
29
|
+
});
|
|
30
|
+
expect(decoded.functionName).toBe('enter');
|
|
31
|
+
const [fromSpaceId, toSpaceId, action, topic, data, signature] = decoded.args;
|
|
32
|
+
const [version, authorSpaceId, spaceId] = decodeAbiParameters([{ type: 'uint16' }, { type: 'bytes16' }, { type: 'bytes16' }], data);
|
|
33
|
+
return {
|
|
34
|
+
fromSpaceId,
|
|
35
|
+
toSpaceId,
|
|
36
|
+
action,
|
|
37
|
+
topic,
|
|
38
|
+
signature,
|
|
39
|
+
version,
|
|
40
|
+
authorSpaceId,
|
|
41
|
+
spaceId,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
describe('client entity vote helpers', () => {
|
|
45
|
+
it('encodes an upvote without context', () => {
|
|
46
|
+
const result = encodeUpvoteEntityCalldata({
|
|
47
|
+
authorSpaceId: AUTHOR_SPACE_ID,
|
|
48
|
+
spaceId: SPACE_ID,
|
|
49
|
+
entityId: ENTITY_ID,
|
|
50
|
+
spaceRegistryAddress: SPACE_REGISTRY_ADDRESS,
|
|
51
|
+
});
|
|
52
|
+
const decoded = decodeEntityVote(result.calldata);
|
|
53
|
+
expect(result.to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
54
|
+
expect(decoded.fromSpaceId).toBe(`0x${AUTHOR_SPACE_ID}`);
|
|
55
|
+
expect(decoded.toSpaceId).toBe(`0x${SPACE_ID}`);
|
|
56
|
+
expect(decoded.action).toBe(UPVOTED_ACTION);
|
|
57
|
+
expect(decoded.topic).toBe(`0x00000000${ENTITY_ID}${'0'.repeat(24)}`);
|
|
58
|
+
expect(decoded.signature).toBe('0x');
|
|
59
|
+
expect(decoded.version).toBe(0);
|
|
60
|
+
expect(decoded.authorSpaceId).toBe(`0x${AUTHOR_SPACE_ID}`);
|
|
61
|
+
expect(decoded.spaceId).toBe(`0x${SPACE_ID}`);
|
|
62
|
+
});
|
|
63
|
+
it('encodes downvote and withdraw variants without context', () => {
|
|
64
|
+
const base = {
|
|
65
|
+
authorSpaceId: AUTHOR_SPACE_ID,
|
|
66
|
+
spaceId: SPACE_ID,
|
|
67
|
+
entityId: ENTITY_ID,
|
|
68
|
+
spaceRegistryAddress: SPACE_REGISTRY_ADDRESS,
|
|
69
|
+
};
|
|
70
|
+
expect(decodeEntityVote(encodeDownvoteEntityCalldata(base).calldata).action).toBe(DOWNVOTED_ACTION);
|
|
71
|
+
expect(decodeEntityVote(encodeWithdrawEntityVoteCalldata(base).calldata).action).toBe(UNVOTED_ACTION);
|
|
72
|
+
});
|
|
73
|
+
it('uses the configured registry address for context-aware helpers', () => {
|
|
74
|
+
const context = testContext();
|
|
75
|
+
const params = {
|
|
76
|
+
authorSpaceId: AUTHOR_SPACE_ID,
|
|
77
|
+
spaceId: SPACE_ID,
|
|
78
|
+
entityId: ENTITY_ID,
|
|
79
|
+
};
|
|
80
|
+
expect(upvote(context, params).to).toBe(SPACE_REGISTRY_ADDRESS);
|
|
81
|
+
expect(decodeEntityVote(downvote(context, params).calldata).action).toBe(DOWNVOTED_ACTION);
|
|
82
|
+
expect(decodeEntityVote(withdraw(context, params).calldata).action).toBe(UNVOTED_ACTION);
|
|
83
|
+
});
|
|
84
|
+
it('throws for invalid ids before encoding', () => {
|
|
85
|
+
expect(() => encodeUpvoteEntityCalldata({
|
|
86
|
+
authorSpaceId: 'invalid',
|
|
87
|
+
spaceId: SPACE_ID,
|
|
88
|
+
entityId: ENTITY_ID,
|
|
89
|
+
spaceRegistryAddress: SPACE_REGISTRY_ADDRESS,
|
|
90
|
+
})).toThrow('Invalid id: "invalid" for `authorSpaceId` in entity vote');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=entity-votes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-votes.test.js","sourceRoot":"","sources":["../../../src/client/entity-votes.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,QAAQ,EACR,4BAA4B,EAC5B,0BAA0B,EAC1B,gCAAgC,EAChC,MAAM,EACN,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,MAAM,eAAe,GAAG,kCAAkC,CAAC;AAC3D,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,MAAM,sBAAsB,GAAG,4CAAqD,CAAC;AACrF,MAAM,cAAc,GAAG,oEAAoE,CAAC;AAC5F,MAAM,gBAAgB,GAAG,oEAAoE,CAAC;AAC9F,MAAM,cAAc,GAAG,oEAAoE,CAAC;AAE5F,SAAS,WAAW;IAClB,OAAO;QACL,OAAO,EAAE,sBAAsB,CAAC;YAC9B,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,uBAAuB;YAClC,SAAS,EAAE;gBACT,sBAAsB;aACvB;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAuB;IAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACjC,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE3C,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAOxE,CAAC;IACF,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAC3D,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC9D,IAAI,CACL,CAAC;IAEF,OAAO;QACL,WAAW;QACX,SAAS;QACT,MAAM;QACN,KAAK;QACL,SAAS;QACT,OAAO;QACP,aAAa;QACb,OAAO;KACR,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,0BAA0B,CAAC;YACxC,aAAa,EAAE,eAAe;YAC9B,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,SAAS;YACnB,oBAAoB,EAAE,sBAAsB;SAC7C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,eAAe,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG;YACX,aAAa,EAAE,eAAe;YAC9B,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,SAAS;YACnB,oBAAoB,EAAE,sBAAsB;SAC7C,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpG,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG;YACb,aAAa,EAAE,eAAe;YAC9B,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,SAAS;SACpB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3F,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,EAAE,CACV,0BAA0B,CAAC;YACzB,aAAa,EAAE,SAAS;YACxB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,SAAS;YACnB,oBAAoB,EAAE,sBAAsB;SAC7C,CAAC,CACH,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-workflows.test.d.ts","sourceRoot":"","sources":["../../../src/client/graph-workflows.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { createGeoClient } from '../client.js';
|
|
3
|
+
import { REPLY_TO_PROPERTY } from '../core/ids/system.js';
|
|
4
|
+
import { toGrcId } from '../id-utils.js';
|
|
5
|
+
import { defineGeoNetworkConfig } from '../networks.js';
|
|
6
|
+
const ENTITY_ID = '3af3e22d21694a078681516710b7ecf1';
|
|
7
|
+
const SPACE_ID = 'd4bc2f205e2d415e971eb0b9fbf6b6fc';
|
|
8
|
+
const COMMENT_A_ID = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
|
|
9
|
+
const ROOT_ENTITY_ID = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
|
|
10
|
+
const ROOT_SPACE_ID = 'cccccccccccccccccccccccccccccccc';
|
|
11
|
+
const PROPERTY_ID = 'dddddddddddddddddddddddddddddddd';
|
|
12
|
+
const RELATION_ID = 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
13
|
+
function customNetwork() {
|
|
14
|
+
return defineGeoNetworkConfig({
|
|
15
|
+
id: 'LOCAL',
|
|
16
|
+
name: 'Local Geo',
|
|
17
|
+
apiOrigin: 'http://localhost:3000',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function replyToRelations(ops) {
|
|
21
|
+
return ops.filter((op) => op.type === 'createRelation' &&
|
|
22
|
+
op.relationType.every((byte, index) => byte === toGrcId(REPLY_TO_PROPERTY)[index]));
|
|
23
|
+
}
|
|
24
|
+
describe('geo graph workflow clients', () => {
|
|
25
|
+
it('creates comment reply chains from fetched parent context', async () => {
|
|
26
|
+
const fetch = vi.fn().mockResolvedValue(new Response(JSON.stringify({
|
|
27
|
+
data: {
|
|
28
|
+
entity: {
|
|
29
|
+
relationsList: [
|
|
30
|
+
{
|
|
31
|
+
toEntity: { id: ROOT_ENTITY_ID },
|
|
32
|
+
toSpace: { id: ROOT_SPACE_ID },
|
|
33
|
+
position: 'a1',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
toEntity: { id: COMMENT_A_ID },
|
|
37
|
+
toSpace: { id: SPACE_ID },
|
|
38
|
+
position: 'a0',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
})));
|
|
44
|
+
const geo = createGeoClient({ network: customNetwork(), fetch });
|
|
45
|
+
const result = await geo.comments.create({
|
|
46
|
+
id: 'ffffffffffffffffffffffffffffffff',
|
|
47
|
+
content: 'Deep reply',
|
|
48
|
+
replyTo: { entityId: ENTITY_ID, spaceId: SPACE_ID },
|
|
49
|
+
});
|
|
50
|
+
const relations = replyToRelations(result.ops);
|
|
51
|
+
expect(relations).toHaveLength(3);
|
|
52
|
+
expect(relations[0]?.to).toEqual(toGrcId(ENTITY_ID));
|
|
53
|
+
expect(relations[1]?.to).toEqual(toGrcId(COMMENT_A_ID));
|
|
54
|
+
expect(relations[2]?.to).toEqual(toGrcId(ROOT_ENTITY_ID));
|
|
55
|
+
expect(relations[0]?.toSpace).toEqual(toGrcId(SPACE_ID));
|
|
56
|
+
expect(relations[2]?.toSpace).toEqual(toGrcId(ROOT_SPACE_ID));
|
|
57
|
+
expect(fetch).toHaveBeenCalledWith('http://localhost:3000/graphql', expect.objectContaining({ method: 'POST' }));
|
|
58
|
+
});
|
|
59
|
+
it('deletes an entity using fetched values and relations for the requested space', async () => {
|
|
60
|
+
const fetch = vi.fn().mockResolvedValue(new Response(JSON.stringify({
|
|
61
|
+
data: {
|
|
62
|
+
entity: {
|
|
63
|
+
valuesList: [
|
|
64
|
+
{ propertyId: PROPERTY_ID, spaceId: SPACE_ID },
|
|
65
|
+
{ propertyId: PROPERTY_ID, spaceId: SPACE_ID },
|
|
66
|
+
{ propertyId: ROOT_ENTITY_ID, spaceId: ROOT_SPACE_ID },
|
|
67
|
+
],
|
|
68
|
+
relationsList: [
|
|
69
|
+
{ id: RELATION_ID, spaceId: SPACE_ID },
|
|
70
|
+
{ id: COMMENT_A_ID, spaceId: ROOT_SPACE_ID },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
})));
|
|
75
|
+
const geo = createGeoClient({ network: customNetwork(), fetch });
|
|
76
|
+
const result = await geo.entities.delete({ id: ENTITY_ID, spaceId: SPACE_ID });
|
|
77
|
+
expect(result.id).toBe(ENTITY_ID);
|
|
78
|
+
expect(result.ops.map(op => op.type)).toEqual(['updateEntity', 'deleteRelation']);
|
|
79
|
+
expect(result.ops[0].unset).toHaveLength(1);
|
|
80
|
+
expect(fetch).toHaveBeenCalledWith('http://localhost:3000/graphql', expect.objectContaining({ method: 'POST' }));
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=graph-workflows.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-workflows.test.js","sourceRoot":"","sources":["../../../src/client/graph-workflows.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACpD,MAAM,YAAY,GAAG,kCAAkC,CAAC;AACxD,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAC1D,MAAM,aAAa,GAAG,kCAAkC,CAAC;AACzD,MAAM,WAAW,GAAG,kCAAkC,CAAC;AACvD,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAEvD,SAAS,aAAa;IACpB,OAAO,sBAAsB,CAAC;QAC5B,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,uBAAuB;KACnC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,GAA4B;IACpD,OAAO,GAAG,CAAC,MAAM,CACf,CAAC,EAAE,EAAwB,EAAE,CAC3B,EAAE,CAAC,IAAI,KAAK,gBAAgB;QAC3B,EAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CACzG,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,EAA2B,CAAC,iBAAiB,CAC9D,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,aAAa,EAAE;wBACb;4BACE,QAAQ,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;4BAChC,OAAO,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE;4BAC9B,QAAQ,EAAE,IAAI;yBACf;wBACD;4BACE,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE;4BAC9B,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;4BACzB,QAAQ,EAAE,IAAI;yBACf;qBACF;iBACF;aACF;SACF,CAAC,CACH,CACF,CAAC;QACF,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,EAAE,EAAE,kCAAkC;YACtC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;SACpD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,+BAA+B,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,EAA2B,CAAC,iBAAiB,CAC9D,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,UAAU,EAAE;wBACV,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;wBAC9C,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;wBAC9C,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE;qBACvD;oBACD,aAAa,EAAE;wBACb,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;wBACtC,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;qBAC7C;iBACF;aACF;SACF,CAAC,CACH,CACF,CAAC;QACF,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE/E,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClF,MAAM,CAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAkB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,+BAA+B,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images-storage.test.d.ts","sourceRoot":"","sources":["../../../src/client/images-storage.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { createGeoClient } from '../client.js';
|
|
3
|
+
import { IMAGE_URL_PROPERTY } from '../core/ids/system.js';
|
|
4
|
+
import { toGrcId } from '../id-utils.js';
|
|
5
|
+
import { defineGeoNetworkConfig } from '../networks.js';
|
|
6
|
+
const CID = 'ipfs://bafkreigwfjixq5cm3s4youhshorkpqh3ykpviyv76c2ei6gaalujtlqz5i';
|
|
7
|
+
const IMAGE_ID = '3af3e22d21694a078681516710b7ecf1';
|
|
8
|
+
function customNetwork() {
|
|
9
|
+
return defineGeoNetworkConfig({
|
|
10
|
+
id: 'LOCAL',
|
|
11
|
+
name: 'Local Geo',
|
|
12
|
+
apiOrigin: 'http://localhost:3000',
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function mockUploadFetch() {
|
|
16
|
+
return vi.fn().mockImplementation(async () => new Response(JSON.stringify({ cid: CID })));
|
|
17
|
+
}
|
|
18
|
+
function imageUrlValue(entityOp) {
|
|
19
|
+
return entityOp.values.find(value => value.property.every((byte, index) => byte === toGrcId(IMAGE_URL_PROPERTY)[index]));
|
|
20
|
+
}
|
|
21
|
+
describe('geo image and storage clients', () => {
|
|
22
|
+
it('uploads an image through the configured API origin before creating image ops', async () => {
|
|
23
|
+
const fetch = mockUploadFetch();
|
|
24
|
+
const geo = createGeoClient({ network: customNetwork(), fetch });
|
|
25
|
+
const result = await geo.images.create({
|
|
26
|
+
id: IMAGE_ID,
|
|
27
|
+
name: 'Test image',
|
|
28
|
+
blob: new Blob([new Uint8Array([0, 0, 0, 0])], { type: 'image/png' }),
|
|
29
|
+
});
|
|
30
|
+
const entityOp = result.ops[0];
|
|
31
|
+
const urlValue = imageUrlValue(entityOp);
|
|
32
|
+
expect(result.id).toBe(IMAGE_ID);
|
|
33
|
+
expect(result.cid).toBe(CID);
|
|
34
|
+
expect(urlValue?.value.type).toBe('text');
|
|
35
|
+
if (urlValue?.value.type === 'text') {
|
|
36
|
+
expect(urlValue.value.value).toBe(CID);
|
|
37
|
+
}
|
|
38
|
+
expect(fetch).toHaveBeenCalledWith('http://localhost:3000/ipfs/upload-file', expect.objectContaining({ method: 'POST' }));
|
|
39
|
+
});
|
|
40
|
+
it('uses configured upload routes for storage helpers', async () => {
|
|
41
|
+
const fetch = mockUploadFetch();
|
|
42
|
+
const geo = createGeoClient({ network: customNetwork(), fetch });
|
|
43
|
+
await expect(geo.storage.uploadImage({
|
|
44
|
+
blob: new Blob([new Uint8Array([0, 0, 0, 0])], { type: 'image/png' }),
|
|
45
|
+
alternativeGateway: true,
|
|
46
|
+
})).resolves.toEqual({ cid: CID });
|
|
47
|
+
await expect(geo.storage.uploadCSV('a,b\n1,2')).resolves.toBe(CID);
|
|
48
|
+
expect(fetch).toHaveBeenNthCalledWith(1, 'http://localhost:3000/ipfs/upload-file-alternative-gateway', expect.objectContaining({ method: 'POST' }));
|
|
49
|
+
expect(fetch).toHaveBeenNthCalledWith(2, 'http://localhost:3000/ipfs/upload-edit', expect.objectContaining({ method: 'POST' }));
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=images-storage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images-storage.test.js","sourceRoot":"","sources":["../../../src/client/images-storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Id } from '../id.js';
|
|
2
|
+
import { type PublishImageParams } from '../ipfs-core.js';
|
|
3
|
+
import type { CreateImageResult } from '../types.js';
|
|
4
|
+
import type { GeoClientContext } from './context.js';
|
|
5
|
+
export type CreateImageParams = PublishImageParams & {
|
|
6
|
+
name?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
id?: Id | string;
|
|
9
|
+
alternativeGateway?: boolean;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Uploads an image and builds the corresponding image entity ops.
|
|
13
|
+
*
|
|
14
|
+
* This is the context-aware image workflow used by `geo.images.create(...)`.
|
|
15
|
+
* It uploads the image through the configured API origin, attempts to read
|
|
16
|
+
* image dimensions, then creates image entity ops.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const { id, cid, dimensions, ops } = await geo.images.create({
|
|
21
|
+
* url: 'https://example.com/cover.png',
|
|
22
|
+
* name: 'Cover image',
|
|
23
|
+
* description: 'Image used as the space cover.',
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* console.log(id, cid, dimensions);
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @param context Client context containing network and fetch configuration.
|
|
30
|
+
* @param params Image source plus optional entity metadata.
|
|
31
|
+
* @returns Created image entity ID, uploaded CID, dimensions when detected, and ops.
|
|
32
|
+
* @throws When the optional ID is invalid, fetch is unavailable, upload fails, or the CID response is invalid.
|
|
33
|
+
*/
|
|
34
|
+
export declare function create(context: GeoClientContext, params: CreateImageParams): Promise<CreateImageResult>;
|
|
35
|
+
//# sourceMappingURL=images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../../src/client/images.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,OAAO,EAAE,KAAK,kBAAkB,EAAmB,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,8BAgBhF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createRelation as grcCreateRelation } from '@geoprotocol/grc-20';
|
|
2
|
+
import { IMAGE_HEIGHT_PROPERTY, IMAGE_TYPE, IMAGE_URL_PROPERTY, IMAGE_WIDTH_PROPERTY, TYPES_PROPERTY, } from '../core/ids/system.js';
|
|
3
|
+
import { Id } from '../id.js';
|
|
4
|
+
import { assertValid, generate, toGrcId } from '../id-utils.js';
|
|
5
|
+
import { uploadImageCore } from '../ipfs-core.js';
|
|
6
|
+
import { create as createEntity } from '../ops/entities.js';
|
|
7
|
+
import { requireFetch } from './context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Uploads an image and builds the corresponding image entity ops.
|
|
10
|
+
*
|
|
11
|
+
* This is the context-aware image workflow used by `geo.images.create(...)`.
|
|
12
|
+
* It uploads the image through the configured API origin, attempts to read
|
|
13
|
+
* image dimensions, then creates image entity ops.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const { id, cid, dimensions, ops } = await geo.images.create({
|
|
18
|
+
* url: 'https://example.com/cover.png',
|
|
19
|
+
* name: 'Cover image',
|
|
20
|
+
* description: 'Image used as the space cover.',
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* console.log(id, cid, dimensions);
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @param context Client context containing network and fetch configuration.
|
|
27
|
+
* @param params Image source plus optional entity metadata.
|
|
28
|
+
* @returns Created image entity ID, uploaded CID, dimensions when detected, and ops.
|
|
29
|
+
* @throws When the optional ID is invalid, fetch is unavailable, upload fails, or the CID response is invalid.
|
|
30
|
+
*/
|
|
31
|
+
export async function create(context, params) {
|
|
32
|
+
if (params.id)
|
|
33
|
+
assertValid(params.id, '`id` in `createImage`');
|
|
34
|
+
const { cid, dimensions } = await uploadImageCore({
|
|
35
|
+
...params,
|
|
36
|
+
apiOrigin: context.network.apiOrigin,
|
|
37
|
+
fetch: requireFetch(context, 'Image creation'),
|
|
38
|
+
});
|
|
39
|
+
return createImageOps({
|
|
40
|
+
id: params.id,
|
|
41
|
+
name: params.name,
|
|
42
|
+
description: params.description,
|
|
43
|
+
cid,
|
|
44
|
+
dimensions,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function createImageOps({ cid, dimensions, name, description, id: providedId, }) {
|
|
48
|
+
const id = providedId ?? generate();
|
|
49
|
+
const values = [
|
|
50
|
+
{
|
|
51
|
+
property: IMAGE_URL_PROPERTY,
|
|
52
|
+
type: 'text',
|
|
53
|
+
value: cid,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
if (dimensions?.height) {
|
|
57
|
+
values.push({
|
|
58
|
+
property: IMAGE_HEIGHT_PROPERTY,
|
|
59
|
+
type: 'float',
|
|
60
|
+
value: dimensions.height,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (dimensions?.width) {
|
|
64
|
+
values.push({
|
|
65
|
+
property: IMAGE_WIDTH_PROPERTY,
|
|
66
|
+
type: 'float',
|
|
67
|
+
value: dimensions.width,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const result = createEntity({
|
|
71
|
+
id,
|
|
72
|
+
name,
|
|
73
|
+
description,
|
|
74
|
+
values,
|
|
75
|
+
});
|
|
76
|
+
result.ops.push(grcCreateRelation({
|
|
77
|
+
id: toGrcId(generate()),
|
|
78
|
+
entity: toGrcId(generate()),
|
|
79
|
+
from: toGrcId(id),
|
|
80
|
+
to: toGrcId(IMAGE_TYPE),
|
|
81
|
+
relationType: toGrcId(TYPES_PROPERTY),
|
|
82
|
+
}));
|
|
83
|
+
return {
|
|
84
|
+
id: Id(id),
|
|
85
|
+
cid,
|
|
86
|
+
dimensions,
|
|
87
|
+
ops: result.ops,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/client/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAA2B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAS5C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAyB,EAAE,MAAyB;IAC/E,IAAI,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAE/D,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,eAAe,CAAC;QAChD,GAAG,MAAM;QACT,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;QACpC,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC;KAC/C,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG;QACH,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAUD,SAAS,cAAc,CAAC,EACtB,GAAG,EACH,UAAU,EACV,IAAI,EACJ,WAAW,EACX,EAAE,EAAE,UAAU,GACO;IACrB,MAAM,EAAE,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;IACpC,MAAM,MAAM,GAAoB;QAC9B;YACE,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;SACX;KACF,CAAC;IAEF,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,qBAAqB;YAC/B,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,UAAU,EAAE,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,oBAAoB;YAC9B,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,EAAE;QACF,IAAI;QACJ,WAAW;QACX,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,IAAI,CACb,iBAAiB,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACjB,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC;QACvB,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC;KACtC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACV,GAAG;QACH,UAAU;QACV,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;AACJ,CAAC"}
|