@geoprotocol/geo-sdk 0.19.0 → 0.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +2 -2
  2. package/dist/src/client/dao-spaces.d.ts +2 -2
  3. package/dist/src/client/dao-spaces.js +2 -2
  4. package/dist/src/client.d.ts +2 -6
  5. package/dist/src/client.d.ts.map +1 -1
  6. package/dist/src/client.js +1 -1
  7. package/dist/src/client.js.map +1 -1
  8. package/dist/src/e2e-api-surface.test.js +2 -2
  9. package/dist/src/e2e-api-surface.test.js.map +1 -1
  10. package/dist/src/e2e-legacy-api-surface.test.js +2 -2
  11. package/dist/src/e2e-legacy-api-surface.test.js.map +1 -1
  12. package/dist/src/encodings/get-create-dao-space-calldata.d.ts +16 -6
  13. package/dist/src/encodings/get-create-dao-space-calldata.d.ts.map +1 -1
  14. package/dist/src/encodings/get-create-dao-space-calldata.js +24 -6
  15. package/dist/src/encodings/get-create-dao-space-calldata.js.map +1 -1
  16. package/dist/src/encodings/get-create-dao-space-calldata.test.js +48 -11
  17. package/dist/src/encodings/get-create-dao-space-calldata.test.js.map +1 -1
  18. package/package.json +1 -1
  19. package/dist/proto.d.ts +0 -5
  20. package/dist/proto.d.ts.map +0 -1
  21. package/dist/proto.js +0 -5
  22. package/dist/proto.js.map +0 -1
  23. package/dist/src/abis/dao-space-v2.test.d.ts +0 -2
  24. package/dist/src/abis/dao-space-v2.test.d.ts.map +0 -1
  25. package/dist/src/abis/dao-space-v2.test.js +0 -67
  26. package/dist/src/abis/dao-space-v2.test.js.map +0 -1
  27. package/dist/src/client/proposals.d.ts +0 -185
  28. package/dist/src/client/proposals.d.ts.map +0 -1
  29. package/dist/src/client/proposals.js +0 -294
  30. package/dist/src/client/proposals.js.map +0 -1
  31. package/dist/src/client/proposals.test.d.ts +0 -2
  32. package/dist/src/client/proposals.test.d.ts.map +0 -1
  33. package/dist/src/client/proposals.test.js +0 -243
  34. package/dist/src/client/proposals.test.js.map +0 -1
  35. package/dist/src/contracts-v2/abis.d.ts +0 -196
  36. package/dist/src/contracts-v2/abis.d.ts.map +0 -1
  37. package/dist/src/contracts-v2/abis.js +0 -110
  38. package/dist/src/contracts-v2/abis.js.map +0 -1
  39. package/dist/src/contracts-v2/actions.d.ts +0 -56
  40. package/dist/src/contracts-v2/actions.d.ts.map +0 -1
  41. package/dist/src/contracts-v2/actions.js +0 -83
  42. package/dist/src/contracts-v2/actions.js.map +0 -1
  43. package/dist/src/contracts-v2/encoding.d.ts +0 -80
  44. package/dist/src/contracts-v2/encoding.d.ts.map +0 -1
  45. package/dist/src/contracts-v2/encoding.js +0 -193
  46. package/dist/src/contracts-v2/encoding.js.map +0 -1
  47. package/dist/src/contracts-v2/encoding.test.d.ts +0 -2
  48. package/dist/src/contracts-v2/encoding.test.d.ts.map +0 -1
  49. package/dist/src/contracts-v2/encoding.test.js +0 -93
  50. package/dist/src/contracts-v2/encoding.test.js.map +0 -1
  51. package/dist/src/contracts-v2/local-geobrowser.e2e.test.d.ts +0 -2
  52. package/dist/src/contracts-v2/local-geobrowser.e2e.test.d.ts.map +0 -1
  53. package/dist/src/contracts-v2/local-geobrowser.e2e.test.js +0 -239
  54. package/dist/src/contracts-v2/local-geobrowser.e2e.test.js.map +0 -1
  55. package/dist/src/contracts-v2/voting-settings.d.ts +0 -48
  56. package/dist/src/contracts-v2/voting-settings.d.ts.map +0 -1
  57. package/dist/src/contracts-v2/voting-settings.js +0 -69
  58. package/dist/src/contracts-v2/voting-settings.js.map +0 -1
  59. package/dist/src/dao-space/propose-update-voting-settings.d.ts +0 -8
  60. package/dist/src/dao-space/propose-update-voting-settings.d.ts.map +0 -1
  61. package/dist/src/dao-space/propose-update-voting-settings.js +0 -19
  62. package/dist/src/dao-space/propose-update-voting-settings.js.map +0 -1
  63. package/dist/src/dao-space/propose-update-voting-settings.test.d.ts +0 -2
  64. package/dist/src/dao-space/propose-update-voting-settings.test.d.ts.map +0 -1
  65. package/dist/src/dao-space/propose-update-voting-settings.test.js +0 -118
  66. package/dist/src/dao-space/propose-update-voting-settings.test.js.map +0 -1
  67. package/dist/src/e2e/local-geobrowser.d.ts +0 -9
  68. package/dist/src/e2e/local-geobrowser.d.ts.map +0 -1
  69. package/dist/src/e2e/local-geobrowser.js +0 -35
  70. package/dist/src/e2e/local-geobrowser.js.map +0 -1
  71. package/dist/src/e2e/v2-contracts.test.d.ts +0 -2
  72. package/dist/src/e2e/v2-contracts.test.d.ts.map +0 -1
  73. package/dist/src/e2e/v2-contracts.test.js +0 -25
  74. package/dist/src/e2e/v2-contracts.test.js.map +0 -1
  75. package/dist/src/e2e-flows.test.d.ts +0 -2
  76. package/dist/src/e2e-flows.test.d.ts.map +0 -1
  77. package/dist/src/e2e-flows.test.js +0 -445
  78. package/dist/src/e2e-flows.test.js.map +0 -1
  79. package/dist/src/graph/create-space.d.ts +0 -37
  80. package/dist/src/graph/create-space.d.ts.map +0 -1
  81. package/dist/src/graph/create-space.js +0 -67
  82. package/dist/src/graph/create-space.js.map +0 -1
  83. package/dist/src/ops/images.d.ts +0 -37
  84. package/dist/src/ops/images.d.ts.map +0 -1
  85. package/dist/src/ops/images.js +0 -69
  86. package/dist/src/ops/images.js.map +0 -1
  87. package/dist/src/proto/index.d.ts +0 -7
  88. package/dist/src/proto/index.d.ts.map +0 -1
  89. package/dist/src/proto/index.js +0 -7
  90. package/dist/src/proto/index.js.map +0 -1
@@ -1,294 +0,0 @@
1
- import { v4 as uuidv4 } from 'uuid';
2
- import { encodeAbiParameters, encodeFunctionData } from 'viem';
3
- import { DaoSpaceAbi, SpaceRegistryAbi } from '../abis/index.js';
4
- import { bytes16ToBytes32LeftAligned, EMPTY_SIGNATURE, EMPTY_TOPIC, ensure0xPrefix, isBytes16Hex, PROPOSAL_CREATED_ACTION, PROPOSAL_EXECUTED_ACTION, PROPOSAL_VOTED_ACTION, VOTE_OPTION_VALUES, } from '../dao-space/constants.js';
5
- import { toContractVotingSettings, validateIpfsUri, } from '../encodings/get-create-dao-space-calldata.js';
6
- import { assertValid } from '../id-utils.js';
7
- import { requireGeoContract } from '../networks.js';
8
- const VALIDATION_CID = 'ipfs://QmP6aJhM3SgoRSPUccBQK9VMHNqqezixG1Qvjy2xPWvPh5';
9
- function bytes16Id(value, name) {
10
- const normalized = ensure0xPrefix(value);
11
- if (!isBytes16Hex(normalized)) {
12
- throw new Error(`${name} must be bytes16 hex (32 hex chars). Received: ${value}`);
13
- }
14
- return normalized;
15
- }
16
- function encodeCreateProposal(params) {
17
- const fromSpaceId = bytes16Id(params.fromSpaceId, 'fromSpaceId');
18
- const daoSpaceId = bytes16Id(params.daoSpaceId, 'daoSpaceId');
19
- const proposalId = params.proposalId
20
- ? bytes16Id(params.proposalId, 'proposalId')
21
- : `0x${uuidv4().replaceAll('-', '')}`;
22
- const votingMode = params.votingMode ?? 'FAST';
23
- const data = encodeAbiParameters([
24
- { type: 'bytes16', name: 'proposalId' },
25
- { type: 'uint8', name: 'votingMode' },
26
- {
27
- type: 'tuple[]',
28
- name: 'actions',
29
- components: [
30
- { type: 'address', name: 'to' },
31
- { type: 'uint256', name: 'value' },
32
- { type: 'bytes', name: 'data' },
33
- ],
34
- },
35
- ], [proposalId, votingMode === 'FAST' ? 1 : 0, params.actions]);
36
- const calldata = encodeFunctionData({
37
- abi: SpaceRegistryAbi,
38
- functionName: 'enter',
39
- args: [
40
- fromSpaceId,
41
- daoSpaceId,
42
- PROPOSAL_CREATED_ACTION,
43
- bytes16ToBytes32LeftAligned(proposalId),
44
- data,
45
- EMPTY_SIGNATURE,
46
- ],
47
- });
48
- return {
49
- to: params.spaceRegistryAddress,
50
- calldata,
51
- proposalId,
52
- };
53
- }
54
- function encodePublishEditProposalAction(daoSpaceAddress, cid) {
55
- const ipfsError = validateIpfsUri(cid);
56
- if (ipfsError) {
57
- throw new Error(ipfsError);
58
- }
59
- return {
60
- to: daoSpaceAddress,
61
- value: 0n,
62
- data: encodeFunctionData({
63
- abi: DaoSpaceAbi,
64
- functionName: 'publish',
65
- args: [EMPTY_TOPIC, encodeAbiParameters([{ type: 'string' }], [cid]), '0x'],
66
- }),
67
- };
68
- }
69
- function encodeDaoRoleAction(daoSpaceAddress, functionName, spaceId) {
70
- return {
71
- to: daoSpaceAddress,
72
- value: 0n,
73
- data: encodeFunctionData({
74
- abi: DaoSpaceAbi,
75
- functionName,
76
- args: [bytes16Id(spaceId, 'spaceId')],
77
- }),
78
- };
79
- }
80
- function encodeUpdateVotingSettingsAction(daoSpaceAddress, votingSettings) {
81
- const contractVotingSettings = toContractVotingSettings(votingSettings);
82
- return {
83
- to: daoSpaceAddress,
84
- value: 0n,
85
- data: encodeFunctionData({
86
- abi: DaoSpaceAbi,
87
- functionName: 'updateVotingSettings',
88
- args: [
89
- {
90
- slowPathPercentageThreshold: contractVotingSettings.slowPathPercentageThreshold,
91
- fastPathFlatThreshold: contractVotingSettings.fastPathFlatThreshold,
92
- quorum: contractVotingSettings.quorum,
93
- duration: contractVotingSettings.duration,
94
- },
95
- ],
96
- }),
97
- };
98
- }
99
- /**
100
- * Builds calldata for creating a DAO proposal from prebuilt proposal actions.
101
- *
102
- * This helper is synchronous and does not publish or fetch. It uses the
103
- * configured `SPACE_REGISTRY_ADDRESS` and encodes a
104
- * `GOVERNANCE.PROPOSAL_CREATED` `SpaceRegistry.enter(...)` call.
105
- *
106
- * @example
107
- * ```ts
108
- * const actions = [
109
- * geo.daoSpaces.proposals.actions.addMember(daoSpaceAddress, memberSpaceId),
110
- * geo.daoSpaces.proposals.actions.updateVotingSettings(daoSpaceAddress, {
111
- * slowPathPercentageThreshold: 60,
112
- * fastPathFlatThreshold: 2,
113
- * quorum: 3,
114
- * durationInDays: 5,
115
- * }),
116
- * ];
117
- *
118
- * const tx = geo.daoSpaces.proposals.create({
119
- * fromSpaceId: authorSpaceId,
120
- * daoSpaceId,
121
- * votingMode: 'SLOW',
122
- * actions,
123
- * });
124
- * ```
125
- *
126
- * @param context Client context containing the target network configuration.
127
- * @param params Caller space, DAO space, voting mode, optional proposal ID, and actions.
128
- * @returns Target registry address, calldata, and proposal ID.
129
- * @throws When IDs are invalid or the configured network is missing `SPACE_REGISTRY_ADDRESS`.
130
- */
131
- export function create(context, params) {
132
- return encodeCreateProposal({
133
- ...params,
134
- spaceRegistryAddress: requireGeoContract(context.network, 'SPACE_REGISTRY_ADDRESS'),
135
- });
136
- }
137
- /**
138
- * Publishes an edit and wraps it in a DAO proposal.
139
- *
140
- * This helper validates the proposal shape before upload, publishes the edit
141
- * through the configured API, creates a DAO `publish(...)` action with the
142
- * resulting CID, and returns calldata for proposal creation.
143
- *
144
- * @example
145
- * ```ts
146
- * import * as Ops from '@geoprotocol/geo-sdk/ops';
147
- *
148
- * const { ops } = Ops.entities.update({
149
- * id: entityId,
150
- * name: 'Updated name',
151
- * });
152
- *
153
- * const proposal = await geo.daoSpaces.proposeEdit({
154
- * name: 'Update entity',
155
- * ops,
156
- * author: authorSpaceId,
157
- * daoSpaceAddress,
158
- * callerSpaceId: authorSpaceId,
159
- * daoSpaceId,
160
- * });
161
- * ```
162
- *
163
- * @param context Client context containing network, contract, API, and fetch configuration.
164
- * @param params Edit publication params plus DAO proposal target details.
165
- * @returns Edit ID, CID, target registry address, calldata, and proposal ID.
166
- * @throws When IDs are invalid, required contracts are missing, or edit publishing fails.
167
- */
168
- export async function proposeEdit(context, params) {
169
- assertValid(String(params.author), '`author` in `proposeEdit`');
170
- const spaceRegistryAddress = requireGeoContract(context.network, 'SPACE_REGISTRY_ADDRESS');
171
- const validated = encodeCreateProposal({
172
- fromSpaceId: params.callerSpaceId,
173
- daoSpaceId: params.daoSpaceId,
174
- proposalId: params.proposalId,
175
- votingMode: params.votingMode ?? 'FAST',
176
- actions: [encodePublishEditProposalAction(params.daoSpaceAddress, VALIDATION_CID)],
177
- spaceRegistryAddress,
178
- });
179
- const { publish } = await import('./edits.js');
180
- const { cid, editId } = await publish(context, {
181
- name: params.name,
182
- ops: params.ops,
183
- author: params.author,
184
- });
185
- const result = encodeCreateProposal({
186
- fromSpaceId: params.callerSpaceId,
187
- daoSpaceId: params.daoSpaceId,
188
- proposalId: validated.proposalId,
189
- votingMode: params.votingMode ?? 'FAST',
190
- actions: [encodePublishEditProposalAction(params.daoSpaceAddress, cid)],
191
- spaceRegistryAddress,
192
- });
193
- return {
194
- editId,
195
- cid,
196
- ...result,
197
- };
198
- }
199
- /**
200
- * Builds calldata for voting on a DAO proposal.
201
- *
202
- * @example
203
- * ```ts
204
- * const tx = geo.daoSpaces.proposals.vote({
205
- * authorSpaceId,
206
- * spaceId: daoSpaceId,
207
- * proposalId,
208
- * vote: 'YES',
209
- * });
210
- * ```
211
- *
212
- * @param context Client context containing the target network configuration.
213
- * @param params Author space, DAO space, proposal ID, and vote option.
214
- * @returns Target registry address and calldata for `GOVERNANCE.PROPOSAL_VOTED`.
215
- * @throws When IDs are invalid or the configured network is missing `SPACE_REGISTRY_ADDRESS`.
216
- */
217
- export function vote(context, params) {
218
- const authorSpaceId = bytes16Id(params.authorSpaceId, 'authorSpaceId');
219
- const spaceId = bytes16Id(params.spaceId, 'spaceId');
220
- const proposalId = bytes16Id(params.proposalId, 'proposalId');
221
- const topic = bytes16ToBytes32LeftAligned(proposalId);
222
- const data = encodeAbiParameters([
223
- { type: 'bytes16', name: 'proposalId' },
224
- { type: 'uint8', name: 'voteOption' },
225
- ], [proposalId, VOTE_OPTION_VALUES[params.vote]]);
226
- const calldata = encodeFunctionData({
227
- abi: SpaceRegistryAbi,
228
- functionName: 'enter',
229
- args: [authorSpaceId, spaceId, PROPOSAL_VOTED_ACTION, topic, data, EMPTY_SIGNATURE],
230
- });
231
- return {
232
- to: requireGeoContract(context.network, 'SPACE_REGISTRY_ADDRESS'),
233
- calldata,
234
- };
235
- }
236
- /**
237
- * Builds calldata for executing a passed DAO proposal.
238
- *
239
- * @example
240
- * ```ts
241
- * const tx = geo.daoSpaces.proposals.execute({
242
- * authorSpaceId,
243
- * spaceId: daoSpaceId,
244
- * proposalId,
245
- * });
246
- * ```
247
- *
248
- * @param context Client context containing the target network configuration.
249
- * @param params Author space, DAO space, and proposal ID.
250
- * @returns Target registry address and calldata for `GOVERNANCE.PROPOSAL_EXECUTED`.
251
- * @throws When IDs are invalid or the configured network is missing `SPACE_REGISTRY_ADDRESS`.
252
- */
253
- export function execute(context, params) {
254
- const authorSpaceId = bytes16Id(params.authorSpaceId, 'authorSpaceId');
255
- const spaceId = bytes16Id(params.spaceId, 'spaceId');
256
- const proposalId = bytes16Id(params.proposalId, 'proposalId');
257
- const topic = bytes16ToBytes32LeftAligned(proposalId);
258
- const data = encodeAbiParameters([{ type: 'bytes16', name: 'proposalId' }], [proposalId]);
259
- const calldata = encodeFunctionData({
260
- abi: SpaceRegistryAbi,
261
- functionName: 'enter',
262
- args: [authorSpaceId, spaceId, PROPOSAL_EXECUTED_ACTION, topic, data, EMPTY_SIGNATURE],
263
- });
264
- return {
265
- to: requireGeoContract(context.network, 'SPACE_REGISTRY_ADDRESS'),
266
- calldata,
267
- };
268
- }
269
- /**
270
- * Helpers for constructing DAO proposal actions.
271
- *
272
- * These helpers only encode DAO-space action payloads. Pass their results to
273
- * `geo.daoSpaces.proposals.create(...)` when building a proposal from explicit actions.
274
- *
275
- * @example
276
- * ```ts
277
- * const action = geo.daoSpaces.proposals.actions.addEditor(daoSpaceAddress, editorSpaceId);
278
- * const proposal = geo.daoSpaces.proposals.create({
279
- * fromSpaceId: authorSpaceId,
280
- * daoSpaceId,
281
- * votingMode: 'SLOW',
282
- * actions: [action],
283
- * });
284
- * ```
285
- */
286
- export const actions = {
287
- publishEdit: encodePublishEditProposalAction,
288
- addEditor: (daoSpaceAddress, spaceId) => encodeDaoRoleAction(daoSpaceAddress, 'addEditor', spaceId),
289
- removeEditor: (daoSpaceAddress, spaceId) => encodeDaoRoleAction(daoSpaceAddress, 'removeEditor', spaceId),
290
- addMember: (daoSpaceAddress, spaceId) => encodeDaoRoleAction(daoSpaceAddress, 'addMember', spaceId),
291
- removeMember: (daoSpaceAddress, spaceId) => encodeDaoRoleAction(daoSpaceAddress, 'removeMember', spaceId),
292
- updateVotingSettings: encodeUpdateVotingSettingsAction,
293
- };
294
- //# sourceMappingURL=proposals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../../src/client/proposals.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=proposals.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposals.test.d.ts","sourceRoot":"","sources":["../../../src/client/proposals.test.ts"],"names":[],"mappings":""}
@@ -1,243 +0,0 @@
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('creates membership request calldata from daoSpaces', () => {
224
- const geo = createGeoClient({ network: customNetwork() });
225
- const result = geo.daoSpaces.proposeRequestMembership({
226
- authorSpaceId: CALLER_SPACE_ID,
227
- spaceId: DAO_SPACE_ID,
228
- proposalId: PROPOSAL_ID,
229
- });
230
- const decoded = decodeEnter(result.calldata);
231
- const [proposalId, newMemberSpaceId] = decodeAbiParameters([
232
- { type: 'bytes16', name: 'proposalId' },
233
- { type: 'bytes16', name: 'newMemberSpaceId' },
234
- ], decoded.data);
235
- expect(result.to).toBe(SPACE_REGISTRY_ADDRESS);
236
- expect(result.proposalId).toBe(PROPOSAL_ID);
237
- expect(decoded.action).toBe(MEMBERSHIP_REQUESTED_ACTION);
238
- expect(decoded.topic).toBe(EMPTY_TOPIC);
239
- expect(proposalId).toBe(PROPOSAL_ID);
240
- expect(newMemberSpaceId).toBe(CALLER_SPACE_ID);
241
- });
242
- });
243
- //# sourceMappingURL=proposals.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposals.test.js","sourceRoot":"","sources":["../../../src/client/proposals.test.ts"],"names":[],"mappings":"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"}