@towns-labs/sdk 2.0.6 → 2.0.9
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/dist/streamStateView_Members.d.ts +7 -0
- package/dist/streamStateView_Members.d.ts.map +1 -1
- package/dist/streamStateView_Members.js +19 -0
- package/dist/streamStateView_Members.js.map +1 -1
- package/dist/tests/multi_ne/gdms.test.js +50 -3
- package/dist/tests/multi_ne/gdms.test.js.map +1 -1
- package/dist/tests/multi_ne/userInboxMessage.test.js +3 -3
- package/dist/tests/multi_ne/userInboxMessage.test.js.map +1 -1
- package/package.json +9 -9
- package/dist/tests/multi/notificationService.test.d.ts +0 -2
- package/dist/tests/multi/notificationService.test.d.ts.map +0 -1
- package/dist/tests/multi/notificationService.test.js +0 -51
- package/dist/tests/multi/notificationService.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/member-queue.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/member-queue.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/member-queue.test.js +0 -54
- package/dist/tests/multi/sync-agent/member-queue.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/member.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/member.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/member.test.js +0 -45
- package/dist/tests/multi/sync-agent/member.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/members.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/members.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/members.test.js +0 -35
- package/dist/tests/multi/sync-agent/members.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/riverConnection.test.d.ts +0 -5
- package/dist/tests/multi/sync-agent/riverConnection.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/riverConnection.test.js +0 -39
- package/dist/tests/multi/sync-agent/riverConnection.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/spaces.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/spaces.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/spaces.test.js +0 -33
- package/dist/tests/multi/sync-agent/spaces.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/streams.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/streams.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/streams.test.js +0 -27
- package/dist/tests/multi/sync-agent/streams.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/syncAgent.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/syncAgent.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/syncAgent.test.js +0 -68
- package/dist/tests/multi/sync-agent/syncAgent.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/syncAgents.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/syncAgents.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/syncAgents.test.js +0 -163
- package/dist/tests/multi/sync-agent/syncAgents.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/timeline.test.d.ts +0 -2
- package/dist/tests/multi/sync-agent/timeline.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/timeline.test.js +0 -232
- package/dist/tests/multi/sync-agent/timeline.test.js.map +0 -1
- package/dist/tests/multi/sync-agent/user.test.d.ts +0 -5
- package/dist/tests/multi/sync-agent/user.test.d.ts.map +0 -1
- package/dist/tests/multi/sync-agent/user.test.js +0 -55
- package/dist/tests/multi/sync-agent/user.test.js.map +0 -1
- package/dist/tests/multi/transactions.test.d.ts +0 -5
- package/dist/tests/multi/transactions.test.d.ts.map +0 -1
- package/dist/tests/multi/transactions.test.js +0 -153
- package/dist/tests/multi/transactions.test.js.map +0 -1
- package/dist/tests/multi/transactions_SpaceReview.test.d.ts +0 -2
- package/dist/tests/multi/transactions_SpaceReview.test.d.ts.map +0 -1
- package/dist/tests/multi/transactions_SpaceReview.test.js +0 -278
- package/dist/tests/multi/transactions_SpaceReview.test.js.map +0 -1
- package/dist/tests/multi/transactions_Tip.test.d.ts +0 -5
- package/dist/tests/multi/transactions_Tip.test.d.ts.map +0 -1
- package/dist/tests/multi/transactions_Tip.test.js +0 -379
- package/dist/tests/multi/transactions_Tip.test.js.map +0 -1
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { Permission } from '@towns-labs/web3';
|
|
2
|
-
import { findMessageByText, waitFor } from '../../testUtils';
|
|
3
|
-
import { Bot } from '../../../sync-agent/utils/bot';
|
|
4
|
-
import { makeDefaultMembershipInfo } from '../../../sync-agent/utils/spaceUtils';
|
|
5
|
-
import { RiverTimelineEvent } from '../../../views/models/timelineTypes';
|
|
6
|
-
import { dlog } from '@towns-labs/utils';
|
|
7
|
-
const log = dlog('test:timeline.test.ts');
|
|
8
|
-
const setupTest = async () => {
|
|
9
|
-
const bobUser = new Bot();
|
|
10
|
-
const aliceUser = new Bot();
|
|
11
|
-
const charlieUser = new Bot();
|
|
12
|
-
await Promise.all([bobUser.fundWallet(), aliceUser.fundWallet(), charlieUser.fundWallet()]);
|
|
13
|
-
const [bob, alice, charlie] = await Promise.all([
|
|
14
|
-
bobUser.makeSyncAgent(),
|
|
15
|
-
aliceUser.makeSyncAgent(),
|
|
16
|
-
charlieUser.makeSyncAgent(),
|
|
17
|
-
]);
|
|
18
|
-
return { bob, alice, charlie, bobUser, aliceUser, charlieUser };
|
|
19
|
-
};
|
|
20
|
-
describe('timeline.test.ts', () => {
|
|
21
|
-
test.concurrent('send and receive a mention', async () => {
|
|
22
|
-
const { bob, alice, bobUser, aliceUser } = await setupTest();
|
|
23
|
-
await Promise.all([bob.start(), alice.start()]);
|
|
24
|
-
const { spaceId } = await bob.spaces.createSpace({ spaceName: 'BlastOff' }, bobUser.signer);
|
|
25
|
-
expect(bob.user.memberships.isJoined(spaceId)).toBe(true);
|
|
26
|
-
await alice.spaces.getSpace(spaceId).join(aliceUser.signer);
|
|
27
|
-
const aliceChannel = alice.spaces.getSpace(spaceId).getDefaultChannel();
|
|
28
|
-
expect(alice.user.memberships.isJoined(spaceId)).toBe(true);
|
|
29
|
-
await aliceChannel.sendMessage('Hi @bob', {
|
|
30
|
-
mentions: [
|
|
31
|
-
{
|
|
32
|
-
userId: bob.userId,
|
|
33
|
-
displayName: 'bob',
|
|
34
|
-
mentionBehavior: { case: undefined, value: undefined }, // geez
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
});
|
|
38
|
-
const bobChannel = bob.spaces.getSpace(spaceId).getDefaultChannel();
|
|
39
|
-
// bob should receive the message
|
|
40
|
-
await waitFor(async () => {
|
|
41
|
-
const e = findMessageByText(bobChannel.timeline.events.value, 'Hi @bob');
|
|
42
|
-
expect(e?.content?.kind === RiverTimelineEvent.ChannelMessage &&
|
|
43
|
-
e?.content?.body === 'Hi @bob' &&
|
|
44
|
-
e?.content?.mentions != undefined &&
|
|
45
|
-
e?.content?.mentions.length > 0 &&
|
|
46
|
-
e?.content?.mentions[0].userId === bob.userId &&
|
|
47
|
-
e?.content?.mentions[0].displayName === 'bob', `mention: ${bobChannel.data.id}`).toEqual(true);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
// aellis 2025-01-25: this test is flaky and fails intermittently
|
|
51
|
-
test.skip('scrollback', async () => {
|
|
52
|
-
const NUM_MESSAGES = 100;
|
|
53
|
-
const { bob, alice, bobUser, aliceUser } = await setupTest();
|
|
54
|
-
await Promise.all([bob.start(), alice.start()]);
|
|
55
|
-
const { spaceId } = await bob.spaces.createSpace({ spaceName: 'Scrollback Team 🔙' }, bobUser.signer);
|
|
56
|
-
const bobChannel = bob.spaces.getSpace(spaceId).getDefaultChannel();
|
|
57
|
-
for (let i = 0; i < NUM_MESSAGES; i++) {
|
|
58
|
-
await bobChannel.sendMessage(`message ${i}`);
|
|
59
|
-
// force miniblocks, if we're going fast it's possible that the miniblock is not created
|
|
60
|
-
if ((i % NUM_MESSAGES) / 4 == 0) {
|
|
61
|
-
await bob.riverConnection.client?.debugForceMakeMiniblock(bobChannel.data.id, {
|
|
62
|
-
forceSnapshot: true,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// alice joins the room
|
|
67
|
-
await alice.spaces.getSpace(spaceId).join(aliceUser.signer);
|
|
68
|
-
const aliceChannel = alice.spaces.getSpace(spaceId).getDefaultChannel();
|
|
69
|
-
// alice shouldnt receive all the messages, only a few
|
|
70
|
-
expect(aliceChannel.timeline.events.value.length).toBeLessThan(NUM_MESSAGES);
|
|
71
|
-
const aliceChannelLength = aliceChannel.timeline.events.value.length;
|
|
72
|
-
// call scrollback
|
|
73
|
-
await aliceChannel.timeline.scrollback();
|
|
74
|
-
// did we get more events?
|
|
75
|
-
await waitFor(() => expect(aliceChannel.timeline.events.value.length).toBeGreaterThanOrEqual(aliceChannelLength));
|
|
76
|
-
});
|
|
77
|
-
test.concurrent('three users in a room', async () => {
|
|
78
|
-
const { bob, alice, charlie, bobUser, aliceUser, charlieUser } = await setupTest();
|
|
79
|
-
await Promise.all([bob.start(), alice.start(), charlie.start()]);
|
|
80
|
-
// bob creates a space
|
|
81
|
-
const { spaceId } = await bob.spaces.createSpace({ spaceName: 'Encrypted Room 🔐' }, bobUser.signer);
|
|
82
|
-
const bobSpace = bob.spaces.getSpace(spaceId);
|
|
83
|
-
// create a channel
|
|
84
|
-
// const channelId = await bobSpace.createChannel('Vault 🔒', bobUser.signer)
|
|
85
|
-
// Join the space and channel
|
|
86
|
-
await Promise.all([
|
|
87
|
-
alice.spaces.getSpace(spaceId).join(aliceUser.signer),
|
|
88
|
-
charlie.spaces.getSpace(spaceId).join(charlieUser.signer),
|
|
89
|
-
]);
|
|
90
|
-
// TODO: join channel by id
|
|
91
|
-
const aliceChannel = alice.spaces.getSpace(spaceId).getDefaultChannel();
|
|
92
|
-
const charlieChannel = charlie.spaces.getSpace(spaceId).getDefaultChannel();
|
|
93
|
-
const bobChannel = bobSpace.getDefaultChannel();
|
|
94
|
-
// Confirm that the members are in
|
|
95
|
-
await waitFor(() => {
|
|
96
|
-
const members = bobChannel.members.value;
|
|
97
|
-
expect(members.data.initialized).toBe(true);
|
|
98
|
-
expect(members.data.userIds.length).toBe(3);
|
|
99
|
-
});
|
|
100
|
-
await bobChannel.sendMessage('hey everyone!');
|
|
101
|
-
// everyone should receive the message
|
|
102
|
-
await Promise.all([
|
|
103
|
-
waitFor(() => {
|
|
104
|
-
log('aliceChannel.timeline.events.value', aliceChannel.timeline.events.value);
|
|
105
|
-
expect(findMessageByText(aliceChannel.timeline.events.value, 'hey everyone!')).toBeTruthy();
|
|
106
|
-
}),
|
|
107
|
-
waitFor(() => expect(findMessageByText(charlieChannel.timeline.events.value, 'hey everyone!')).toBeTruthy()),
|
|
108
|
-
]);
|
|
109
|
-
// everyone sends a message to the room
|
|
110
|
-
await Promise.all([
|
|
111
|
-
aliceChannel.sendMessage('Hello Bob from Alice!'),
|
|
112
|
-
charlieChannel.sendMessage('Hello Bob from Charlie!'),
|
|
113
|
-
]);
|
|
114
|
-
// bob should receive the messages
|
|
115
|
-
await waitFor(() => {
|
|
116
|
-
expect(findMessageByText(bobChannel.timeline.events.value, 'Hello Bob from Alice!')).toBeTruthy();
|
|
117
|
-
expect(findMessageByText(bobChannel.timeline.events.value, 'Hello Bob from Charlie!')).toBeTruthy();
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
test.concurrent('create room, send message, send a reaction and redact', async () => {
|
|
121
|
-
const { bob, alice, bobUser, aliceUser } = await setupTest();
|
|
122
|
-
await Promise.all([bob.start(), alice.start()]);
|
|
123
|
-
const defaultMembership = await makeDefaultMembershipInfo(bob.riverConnection.spaceDapp, bob.userId);
|
|
124
|
-
const { spaceId } = await bob.spaces.createSpace({
|
|
125
|
-
spaceName: 'ReActers 🤠',
|
|
126
|
-
membership: {
|
|
127
|
-
...defaultMembership,
|
|
128
|
-
permissions: [
|
|
129
|
-
Permission.Read,
|
|
130
|
-
Permission.Write,
|
|
131
|
-
Permission.Redact,
|
|
132
|
-
Permission.React,
|
|
133
|
-
],
|
|
134
|
-
},
|
|
135
|
-
}, bobUser.signer);
|
|
136
|
-
const bobChannel = bob.spaces.getSpace(spaceId).getDefaultChannel();
|
|
137
|
-
await alice.spaces.getSpace(spaceId).join(aliceUser.signer);
|
|
138
|
-
const aliceChannel = alice.spaces.getSpace(spaceId).getDefaultChannel();
|
|
139
|
-
// bob sends a message to the room
|
|
140
|
-
await bobChannel.sendMessage('hey!');
|
|
141
|
-
// wait for alice to receive the message
|
|
142
|
-
await waitFor(async () => {
|
|
143
|
-
const event = findMessageByText(aliceChannel.timeline.events.value, 'hey!');
|
|
144
|
-
expect(event?.content?.kind === RiverTimelineEvent.ChannelMessage &&
|
|
145
|
-
event?.content?.body === 'hey!', `find hey message: ${aliceChannel.data.id}`).toEqual(true);
|
|
146
|
-
}, { timeoutMS: 20000 });
|
|
147
|
-
// alice grabs the message
|
|
148
|
-
const messageEvent = findMessageByText(aliceChannel.timeline.events.value, 'hey!');
|
|
149
|
-
expect(messageEvent).toBeTruthy();
|
|
150
|
-
// alice sends a reaction
|
|
151
|
-
const { eventId: reactionEventId } = await aliceChannel.sendReaction(messageEvent.eventId, '👍');
|
|
152
|
-
// wait for bob to receive the reaction
|
|
153
|
-
await waitFor(async () => {
|
|
154
|
-
const reaction = bobChannel.timeline.reactions.value[messageEvent.eventId];
|
|
155
|
-
expect(reaction).toBeTruthy();
|
|
156
|
-
expect(reaction?.['👍']).toBeTruthy();
|
|
157
|
-
expect(reaction?.['👍'][alice.userId].eventId).toEqual(reactionEventId);
|
|
158
|
-
});
|
|
159
|
-
// alice deletes the reaction
|
|
160
|
-
await aliceChannel.redact(reactionEventId);
|
|
161
|
-
// wait for bob to no longer see the reaction
|
|
162
|
-
await waitFor(() => {
|
|
163
|
-
const reaction = bobChannel.timeline.reactions.value[messageEvent.eventId];
|
|
164
|
-
expect(reaction).toStrictEqual({});
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
test.concurrent('create room, invite user, accept invite, and send threadded message', async () => {
|
|
168
|
-
const { bob, alice, bobUser, aliceUser } = await setupTest();
|
|
169
|
-
await Promise.all([bob.start(), alice.start()]);
|
|
170
|
-
const defaultMembership = await makeDefaultMembershipInfo(bob.riverConnection.spaceDapp, bob.userId);
|
|
171
|
-
const { spaceId } = await bob.spaces.createSpace({
|
|
172
|
-
spaceName: 'Monday Sewing Club 🧵',
|
|
173
|
-
membership: {
|
|
174
|
-
...defaultMembership,
|
|
175
|
-
permissions: [
|
|
176
|
-
Permission.Read,
|
|
177
|
-
Permission.Write,
|
|
178
|
-
Permission.Redact,
|
|
179
|
-
Permission.React,
|
|
180
|
-
],
|
|
181
|
-
},
|
|
182
|
-
}, bobUser.signer);
|
|
183
|
-
const bobChannel = bob.spaces.getSpace(spaceId).getDefaultChannel();
|
|
184
|
-
await alice.spaces.getSpace(spaceId).join(aliceUser.signer);
|
|
185
|
-
const aliceChannel = alice.spaces.getSpace(spaceId).getDefaultChannel();
|
|
186
|
-
// bob sends a message to the room
|
|
187
|
-
await bobChannel.sendMessage('hey alice, ready to sew?');
|
|
188
|
-
// wait for alice to receive the message
|
|
189
|
-
await waitFor(async () => {
|
|
190
|
-
const events = aliceChannel.timeline.events.value.map((e) => ({
|
|
191
|
-
kind: e.content?.kind,
|
|
192
|
-
body: e.content?.kind === RiverTimelineEvent.ChannelMessage
|
|
193
|
-
? e.content?.body
|
|
194
|
-
: undefined,
|
|
195
|
-
}));
|
|
196
|
-
expect(events, `find ready to sew: ${aliceChannel.data.id}`).toContainEqual({
|
|
197
|
-
kind: RiverTimelineEvent.ChannelMessage,
|
|
198
|
-
body: 'hey alice, ready to sew?',
|
|
199
|
-
});
|
|
200
|
-
}, { timeoutMS: 20000 });
|
|
201
|
-
const event = aliceChannel.timeline.events.value.find((event) => event.content?.kind === RiverTimelineEvent.ChannelMessage);
|
|
202
|
-
// a non threaded message should not have a thread parent id
|
|
203
|
-
expect(event?.threadParentId).toBeUndefined();
|
|
204
|
-
// alice sends a threaded reply room
|
|
205
|
-
const firstReply = await aliceChannel.sendMessage('yey lesgo!', {
|
|
206
|
-
threadId: event.eventId,
|
|
207
|
-
});
|
|
208
|
-
const secondReply = await aliceChannel.sendMessage('i was planning to make a hat', {
|
|
209
|
-
threadId: event.eventId,
|
|
210
|
-
});
|
|
211
|
-
// bob should receive the message in the thread and the thread id should be set to parent event id
|
|
212
|
-
await waitFor(() => {
|
|
213
|
-
const thread = bobChannel.timeline.threads.value[event.eventId];
|
|
214
|
-
expect(thread).toBeTruthy();
|
|
215
|
-
expect(thread?.find((e) => e.eventId === firstReply.eventId)?.content?.kind ===
|
|
216
|
-
RiverTimelineEvent.ChannelMessage, `find first reply ${bobChannel.data.id}`).toBeTruthy();
|
|
217
|
-
expect(thread?.find((e) => e.eventId === secondReply.eventId)?.content?.kind ===
|
|
218
|
-
RiverTimelineEvent.ChannelMessage, `find second reply ${bobChannel.data.id}`).toBeTruthy();
|
|
219
|
-
});
|
|
220
|
-
// alice deletes the first reply
|
|
221
|
-
await aliceChannel.redact(firstReply.eventId);
|
|
222
|
-
// bob should no longer see the first reply
|
|
223
|
-
await waitFor(() => {
|
|
224
|
-
const thread = bobChannel.timeline.threads.value[event.eventId];
|
|
225
|
-
expect(thread.find((e) => e.eventId === firstReply.eventId)?.content?.kind ===
|
|
226
|
-
RiverTimelineEvent.RedactedEvent, `find first reply redacted ${bobChannel.data.id}`).toBeTruthy();
|
|
227
|
-
expect(thread.find((e) => e.eventId === secondReply.eventId)?.content?.kind ===
|
|
228
|
-
RiverTimelineEvent.ChannelMessage, `find second reply not redacted ${bobChannel.data.id}`).toBeTruthy();
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
//# sourceMappingURL=timeline.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.test.js","sourceRoot":"","sources":["../../../../src/tests/multi/sync-agent/timeline.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/multi/sync-agent/user.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @group with-entitlements
|
|
3
|
-
*/
|
|
4
|
-
import { dlogger } from '@towns-labs/utils';
|
|
5
|
-
import { Bot } from '../../../sync-agent/utils/bot';
|
|
6
|
-
const logger = dlogger('csb:test:user');
|
|
7
|
-
describe('User.test.ts', () => {
|
|
8
|
-
logger.log('start');
|
|
9
|
-
const testUser = new Bot();
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
await testUser.fundWallet();
|
|
12
|
-
});
|
|
13
|
-
test('User initializes', async () => {
|
|
14
|
-
const syncAgent = await testUser.makeSyncAgent();
|
|
15
|
-
const riverConnection = syncAgent.riverConnection;
|
|
16
|
-
const user = syncAgent.user;
|
|
17
|
-
const spaces = syncAgent.spaces;
|
|
18
|
-
expect(user.data.id).toBe(testUser.userId);
|
|
19
|
-
expect(riverConnection.data.userExists).toBe(false);
|
|
20
|
-
expect(user.memberships.data.initialized).toBe(false);
|
|
21
|
-
expect(user.inbox.data.initialized).toBe(false);
|
|
22
|
-
expect(user.deviceKeys.data.initialized).toBe(false);
|
|
23
|
-
expect(user.settings.data.initialized).toBe(false);
|
|
24
|
-
await syncAgent.start();
|
|
25
|
-
expect(user.data.id).toBe(testUser.userId);
|
|
26
|
-
expect(riverConnection.data.userExists).toBe(false);
|
|
27
|
-
expect(user.memberships.data.initialized).toBe(false);
|
|
28
|
-
expect(user.inbox.data.initialized).toBe(false);
|
|
29
|
-
expect(user.deviceKeys.data.initialized).toBe(false);
|
|
30
|
-
expect(user.settings.data.initialized).toBe(false);
|
|
31
|
-
const { spaceId } = await spaces.createSpace({ spaceName: 'bobs-space' }, testUser.signer);
|
|
32
|
-
logger.log('created spaceId', spaceId);
|
|
33
|
-
expect(riverConnection.data.userExists).toBe(true);
|
|
34
|
-
expect(user.memberships.data.initialized).toBe(true);
|
|
35
|
-
expect(user.inbox.data.initialized).toBe(true);
|
|
36
|
-
expect(user.deviceKeys.data.initialized).toBe(true);
|
|
37
|
-
expect(user.settings.data.initialized).toBe(true);
|
|
38
|
-
await syncAgent.stop();
|
|
39
|
-
});
|
|
40
|
-
test('User loads from db', async () => {
|
|
41
|
-
const syncAgent = await testUser.makeSyncAgent();
|
|
42
|
-
const riverConnection = syncAgent.riverConnection;
|
|
43
|
-
const user = syncAgent.user;
|
|
44
|
-
expect(user.value.status).toBe('loading');
|
|
45
|
-
await syncAgent.start();
|
|
46
|
-
expect(user.value.status).toBe('loaded');
|
|
47
|
-
expect(riverConnection.data.userExists).toBe(true);
|
|
48
|
-
expect(user.memberships.data.initialized).toBe(true);
|
|
49
|
-
expect(user.inbox.data.initialized).toBe(true);
|
|
50
|
-
expect(user.deviceKeys.data.initialized).toBe(true);
|
|
51
|
-
expect(user.settings.data.initialized).toBe(true);
|
|
52
|
-
await syncAgent.stop();
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
//# sourceMappingURL=user.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user.test.js","sourceRoot":"","sources":["../../../../src/tests/multi/sync-agent/user.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/transactions.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @group with-entitlements
|
|
3
|
-
*/
|
|
4
|
-
import { bin_toHexString, dlog } from '@towns-labs/utils';
|
|
5
|
-
import { ethers } from 'ethers';
|
|
6
|
-
import { LocalhostWeb3Provider } from '@towns-labs/web3';
|
|
7
|
-
import { townsEnv } from '../../townsEnv';
|
|
8
|
-
import { Bot } from '../../sync-agent/utils/bot';
|
|
9
|
-
import { cloneDeep } from 'lodash-es';
|
|
10
|
-
import { deepCopy } from 'ethers/lib/utils';
|
|
11
|
-
import { randomBytes } from '../../utils';
|
|
12
|
-
const base_log = dlog('csb:test:transactions');
|
|
13
|
-
describe('transactions', () => {
|
|
14
|
-
const townsConfig = townsEnv().makeTownsConfig();
|
|
15
|
-
const bobIdentity = new Bot(undefined, townsConfig);
|
|
16
|
-
const aliceIdentity = new Bot(undefined, townsConfig);
|
|
17
|
-
const bobsOtherWallet = ethers.Wallet.createRandom();
|
|
18
|
-
const bobsOtherWalletProvider = new LocalhostWeb3Provider(townsConfig.base.rpcUrl, bobsOtherWallet);
|
|
19
|
-
const chainId = townsConfig.base.chainConfig.chainId;
|
|
20
|
-
// updated once and shared between tests
|
|
21
|
-
let bob;
|
|
22
|
-
let alice;
|
|
23
|
-
let spaceId;
|
|
24
|
-
let defaultChannelId;
|
|
25
|
-
// updated before each test
|
|
26
|
-
let dummyReceipt;
|
|
27
|
-
let dummyReceiptCopy;
|
|
28
|
-
beforeAll(async () => {
|
|
29
|
-
// setup once
|
|
30
|
-
const log = base_log.extend('beforeAll');
|
|
31
|
-
log('start');
|
|
32
|
-
await Promise.all([
|
|
33
|
-
bobIdentity.fundWallet(),
|
|
34
|
-
aliceIdentity.fundWallet(),
|
|
35
|
-
bobsOtherWalletProvider.fundWallet(),
|
|
36
|
-
]);
|
|
37
|
-
bob = await bobIdentity.makeSyncAgent();
|
|
38
|
-
alice = await aliceIdentity.makeSyncAgent();
|
|
39
|
-
await Promise.all([
|
|
40
|
-
bob.start(),
|
|
41
|
-
alice.start(),
|
|
42
|
-
bob.riverConnection.spaceDapp.walletLink.linkWalletToRootKey(bobIdentity.signer, bobsOtherWallet),
|
|
43
|
-
]);
|
|
44
|
-
// before they can do anything on river, they need to be in a space
|
|
45
|
-
const { spaceId: sid, defaultChannelId: cid } = await bob.spaces.createSpace({ spaceName: 'BlastOff' }, bobIdentity.signer);
|
|
46
|
-
spaceId = sid;
|
|
47
|
-
defaultChannelId = cid;
|
|
48
|
-
await alice.spaces.joinSpace(spaceId, aliceIdentity.signer);
|
|
49
|
-
log('bob and alice joined space', spaceId, defaultChannelId);
|
|
50
|
-
const transaction = await bobIdentity.web3Provider.mintMockNFT(townsConfig.base.chainConfig);
|
|
51
|
-
dummyReceipt = await transaction.wait(2);
|
|
52
|
-
dummyReceiptCopy = deepCopy(dummyReceipt);
|
|
53
|
-
expect(dummyReceiptCopy).toEqual(dummyReceipt);
|
|
54
|
-
});
|
|
55
|
-
afterEach(() => {
|
|
56
|
-
// for speed we share a receipt between tests, don't modify it
|
|
57
|
-
expect(dummyReceiptCopy).toEqual(dummyReceipt);
|
|
58
|
-
});
|
|
59
|
-
afterAll(async () => {
|
|
60
|
-
await bob.stop();
|
|
61
|
-
await alice.stop();
|
|
62
|
-
});
|
|
63
|
-
test('addEvent', async () => {
|
|
64
|
-
// a user should be able to upload a transaction that
|
|
65
|
-
// is from their account or one of their linked accounts and
|
|
66
|
-
// is valid on chain
|
|
67
|
-
// add the transaction to the river chain
|
|
68
|
-
const transaction = await bobIdentity.web3Provider.mintMockNFT(townsConfig.base.chainConfig);
|
|
69
|
-
const receipt = await transaction.wait(2);
|
|
70
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, receipt)).resolves.not.toThrow();
|
|
71
|
-
});
|
|
72
|
-
test('cantAddEventTwice', async () => {
|
|
73
|
-
const transaction = await bobIdentity.web3Provider.mintMockNFT(townsConfig.base.chainConfig);
|
|
74
|
-
const receipt = await transaction.wait(2);
|
|
75
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, receipt)).resolves.not.toThrow();
|
|
76
|
-
// can't add the same transaction twice
|
|
77
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, receipt)).rejects.toThrow('duplicate transaction');
|
|
78
|
-
});
|
|
79
|
-
test('cantAddEventFromOtherUser', async () => {
|
|
80
|
-
// alice should not be able to add the transaction to the river
|
|
81
|
-
await expect(alice.riverConnection.client.addTransaction(chainId, dummyReceipt)).rejects.toThrow();
|
|
82
|
-
});
|
|
83
|
-
test('cantModifyReceiptFrom', async () => {
|
|
84
|
-
// if we modify the dummyReceipt from, it should not be accepted
|
|
85
|
-
const modifiedReceipt = cloneDeep(dummyReceipt); // deepCopy is imutable
|
|
86
|
-
modifiedReceipt.from = await aliceIdentity.signer.getAddress();
|
|
87
|
-
await expect(alice.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('From address mismatch');
|
|
88
|
-
});
|
|
89
|
-
test('cantModifyReceiptTo', async () => {
|
|
90
|
-
// if we modify the dummyReceipt from, it should not be accepted
|
|
91
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
92
|
-
modifiedReceipt.to = await aliceIdentity.signer.getAddress();
|
|
93
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('To address mismatch');
|
|
94
|
-
});
|
|
95
|
-
test('cantAddEventWithAdditionalWrongBlockNumber', async () => {
|
|
96
|
-
// modifying the logs by adding additional logs should also not be accepted
|
|
97
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
98
|
-
modifiedReceipt.blockNumber -= 1;
|
|
99
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('Block number mismatch');
|
|
100
|
-
});
|
|
101
|
-
test('cantAddEventWithAdditionalLogs', async () => {
|
|
102
|
-
// modifying the logs by adding additional logs should also not be accepted
|
|
103
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
104
|
-
modifiedReceipt.logs.push(modifiedReceipt.logs[0]);
|
|
105
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('Log count mismatch');
|
|
106
|
-
});
|
|
107
|
-
test('cantModifyReceiptLogData', async () => {
|
|
108
|
-
// modify existing log should not be accepted
|
|
109
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
110
|
-
modifiedReceipt.logs[0].data = bin_toHexString(randomBytes(32));
|
|
111
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('Log data mismatch');
|
|
112
|
-
});
|
|
113
|
-
test('cantModifyReceiptLogAddress', async () => {
|
|
114
|
-
// modify existing log should not be accepted
|
|
115
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
116
|
-
modifiedReceipt.logs[0].address = bin_toHexString(randomBytes(32));
|
|
117
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('Log address mismatch');
|
|
118
|
-
});
|
|
119
|
-
test('cantModifyReceiptLogTopics', async () => {
|
|
120
|
-
// modify existing log should not be accepted
|
|
121
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
122
|
-
modifiedReceipt.logs[0].topics[0] = bin_toHexString(randomBytes(32));
|
|
123
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('Log topic mismatch');
|
|
124
|
-
});
|
|
125
|
-
test('cantModifyReceiptLogTopicsCount', async () => {
|
|
126
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
127
|
-
modifiedReceipt.logs[0].topics.push(bin_toHexString(randomBytes(32)));
|
|
128
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow('Log topics count mismatch');
|
|
129
|
-
});
|
|
130
|
-
test('cantAddEventWithInvalidHash', async () => {
|
|
131
|
-
// send dummyReceipt with invalid hash
|
|
132
|
-
const modifiedReceipt = cloneDeep(dummyReceipt);
|
|
133
|
-
modifiedReceipt.transactionHash = bin_toHexString(randomBytes(32));
|
|
134
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, modifiedReceipt)).rejects.toThrow();
|
|
135
|
-
});
|
|
136
|
-
test('addEventFromLinkedWallet', async () => {
|
|
137
|
-
// a user should be able to upload a transaction that
|
|
138
|
-
// is from one of their linked accounts and is valid on chain
|
|
139
|
-
const transaction = await bobsOtherWalletProvider.mintMockNFT(townsConfig.base.chainConfig);
|
|
140
|
-
const receipt = await transaction.wait();
|
|
141
|
-
// add the transaction to the river
|
|
142
|
-
await expect(bob.riverConnection.client.addTransaction(chainId, receipt)).resolves.not.toThrow();
|
|
143
|
-
});
|
|
144
|
-
test('cantAddEventFromUnlinkedLinkedWallet', async () => {
|
|
145
|
-
// a user should not be able to upload a transaction that
|
|
146
|
-
// is from one of their linked accounts and is valid on chain
|
|
147
|
-
const transaction = await bobsOtherWalletProvider.mintMockNFT(townsConfig.base.chainConfig);
|
|
148
|
-
const receipt = await transaction.wait();
|
|
149
|
-
// add the transaction to the river
|
|
150
|
-
await expect(alice.riverConnection.client.addTransaction(chainId, receipt)).rejects.toThrow();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
//# sourceMappingURL=transactions.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.test.js","sourceRoot":"","sources":["../../../src/tests/multi/transactions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactions_SpaceReview.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/transactions_SpaceReview.test.ts"],"names":[],"mappings":""}
|