@towns-labs/sdk 2.0.5 → 2.0.6
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/createApp.d.ts.map +1 -1
- package/dist/createApp.js +7 -1
- package/dist/createApp.js.map +1 -1
- package/dist/id.d.ts +1 -0
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +3 -0
- package/dist/id.js.map +1 -1
- package/dist/sync-agent/dms/models/dm.d.ts +2 -4
- package/dist/sync-agent/dms/models/dm.d.ts.map +1 -1
- package/dist/sync-agent/dms/models/dm.js +2 -30
- package/dist/sync-agent/dms/models/dm.js.map +1 -1
- package/dist/sync-agent/gdms/models/gdm.d.ts +2 -4
- package/dist/sync-agent/gdms/models/gdm.d.ts.map +1 -1
- package/dist/sync-agent/gdms/models/gdm.js +2 -30
- package/dist/sync-agent/gdms/models/gdm.js.map +1 -1
- package/dist/sync-agent/river-connection/riverConnection.d.ts +1 -3
- package/dist/sync-agent/river-connection/riverConnection.d.ts.map +1 -1
- package/dist/sync-agent/river-connection/riverConnection.js +5 -3
- package/dist/sync-agent/river-connection/riverConnection.js.map +1 -1
- package/dist/sync-agent/spaces/models/channel.d.ts +3 -6
- package/dist/sync-agent/spaces/models/channel.d.ts.map +1 -1
- package/dist/sync-agent/spaces/models/channel.js +4 -76
- package/dist/sync-agent/spaces/models/channel.js.map +1 -1
- package/dist/sync-agent/spaces/models/space.d.ts +6 -6
- package/dist/sync-agent/spaces/models/space.d.ts.map +1 -1
- package/dist/sync-agent/spaces/models/space.js +8 -30
- package/dist/sync-agent/spaces/models/space.js.map +1 -1
- package/dist/sync-agent/spaces/spaces.d.ts +3 -4
- package/dist/sync-agent/spaces/spaces.d.ts.map +1 -1
- package/dist/sync-agent/spaces/spaces.js +6 -25
- package/dist/sync-agent/spaces/spaces.js.map +1 -1
- package/dist/sync-agent/syncAgent.d.ts.map +1 -1
- package/dist/sync-agent/syncAgent.js +2 -7
- package/dist/sync-agent/syncAgent.js.map +1 -1
- package/dist/townsEnv.js +5 -5
- package/dist/townsEnv.js.map +1 -1
- package/package.json +10 -10
- package/dist/createBot.d.ts +0 -159
- package/dist/createBot.d.ts.map +0 -1
- package/dist/createBot.js +0 -206
- package/dist/createBot.js.map +0 -1
- package/dist/makeRiverRpcClient.d.ts +0 -6
- package/dist/makeRiverRpcClient.d.ts.map +0 -1
- package/dist/makeRiverRpcClient.js +0 -9
- package/dist/makeRiverRpcClient.js.map +0 -1
- package/dist/streamStateView_ChannelMetadata.d.ts +0 -22
- package/dist/streamStateView_ChannelMetadata.d.ts.map +0 -1
- package/dist/streamStateView_ChannelMetadata.js +0 -77
- package/dist/streamStateView_ChannelMetadata.js.map +0 -1
- package/dist/sync-agent/entitlements/entitlements.d.ts +0 -10
- package/dist/sync-agent/entitlements/entitlements.d.ts.map +0 -1
- package/dist/sync-agent/entitlements/entitlements.js +0 -20
- package/dist/sync-agent/entitlements/entitlements.js.map +0 -1
- package/dist/sync-agent/river-connection/models/riverChain.d.ts +0 -24
- package/dist/sync-agent/river-connection/models/riverChain.d.ts.map +0 -1
- package/dist/sync-agent/river-connection/models/riverChain.js +0 -66
- package/dist/sync-agent/river-connection/models/riverChain.js.map +0 -1
- package/dist/tests/multi/appRegistryService.test.d.ts +0 -2
- package/dist/tests/multi/appRegistryService.test.d.ts.map +0 -1
- package/dist/tests/multi/appRegistryService.test.js +0 -41
- package/dist/tests/multi/appRegistryService.test.js.map +0 -1
- package/dist/tests/multi/botEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/botEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/botEntitlements.test.js +0 -178
- package/dist/tests/multi/botEntitlements.test.js.map +0 -1
- package/dist/tests/multi/botMembership.test.d.ts +0 -5
- package/dist/tests/multi/botMembership.test.d.ts.map +0 -1
- package/dist/tests/multi/botMembership.test.js +0 -295
- package/dist/tests/multi/botMembership.test.js.map +0 -1
- package/dist/tests/multi/botStreamCreation.test.d.ts +0 -5
- package/dist/tests/multi/botStreamCreation.test.d.ts.map +0 -1
- package/dist/tests/multi/botStreamCreation.test.js +0 -60
- package/dist/tests/multi/botStreamCreation.test.js.map +0 -1
- package/dist/tests/multi/channelScrubbing.test.d.ts +0 -5
- package/dist/tests/multi/channelScrubbing.test.d.ts.map +0 -1
- package/dist/tests/multi/channelScrubbing.test.js +0 -102
- package/dist/tests/multi/channelScrubbing.test.js.map +0 -1
- package/dist/tests/multi_ne/nodeSelection.test.d.ts +0 -5
- package/dist/tests/multi_ne/nodeSelection.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/nodeSelection.test.js +0 -41
- package/dist/tests/multi_ne/nodeSelection.test.js.map +0 -1
- package/dist/tests/multi_ne/trading.solana.test.d.ts +0 -2
- package/dist/tests/multi_ne/trading.solana.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/trading.solana.test.js +0 -229
- package/dist/tests/multi_ne/trading.solana.test.js.map +0 -1
- package/dist/tests/multi_ne/trading.test.d.ts +0 -2
- package/dist/tests/multi_ne/trading.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/trading.test.js +0 -243
- package/dist/tests/multi_ne/trading.test.js.map +0 -1
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { PersistedObservable, persistedObservable } from '../../../observable/persistedObservable';
|
|
8
|
-
import { LoadPriority } from '../../../store/store';
|
|
9
|
-
import { dlogger } from '@towns-protocol/utils';
|
|
10
|
-
// Define a class that will manage the data model, decorate it to give it store properties
|
|
11
|
-
let RiverChain = class RiverChain extends PersistedObservable {
|
|
12
|
-
riverRegistryDapp;
|
|
13
|
-
userId;
|
|
14
|
-
log;
|
|
15
|
-
sessionStartMs = Date.now();
|
|
16
|
-
stopped = false;
|
|
17
|
-
// The constructor is where we set up the class, we pass in the store and any other dependencies
|
|
18
|
-
constructor(store, riverRegistryDapp, userId, logId) {
|
|
19
|
-
// pass a default value to the parent class, this is what will be used if the data is not loaded
|
|
20
|
-
// set the load priority to high, this will load first
|
|
21
|
-
super({ id: '0', urls: { value: '' } }, store, LoadPriority.high);
|
|
22
|
-
this.riverRegistryDapp = riverRegistryDapp;
|
|
23
|
-
this.userId = userId;
|
|
24
|
-
this.log = dlogger(`csb:agent:riverChain:${logId}`);
|
|
25
|
-
}
|
|
26
|
-
// implement start function then wire it up from parent
|
|
27
|
-
onLoaded() {
|
|
28
|
-
this.log.info('riverChain onLoaded');
|
|
29
|
-
this.withInfiniteRetries(() => this.fetchUrls());
|
|
30
|
-
}
|
|
31
|
-
stop() {
|
|
32
|
-
this.stopped = true;
|
|
33
|
-
}
|
|
34
|
-
async urls() {
|
|
35
|
-
// urls is returning the cached data if it exists, otherwise waiting for the data to be fetched
|
|
36
|
-
// if the cached data returns a stale node url, the startup will fail
|
|
37
|
-
// nodes almost never exit the network, so this is a very rare case
|
|
38
|
-
await this.when((x) => x.data.urls.fetchedAtMs !== undefined, { timeoutMs: 15000 });
|
|
39
|
-
return this.data.urls.value;
|
|
40
|
-
}
|
|
41
|
-
async fetchUrls() {
|
|
42
|
-
const now = Date.now();
|
|
43
|
-
const urls = await this.riverRegistryDapp.getOperationalNodeUrls(); // here we are fetching the node urls
|
|
44
|
-
this.setData({ urls: { value: urls, fetchedAtMs: now } }); // if the data is new, update our own state
|
|
45
|
-
return urls;
|
|
46
|
-
}
|
|
47
|
-
withInfiniteRetries(fn, delayMs = 5000) {
|
|
48
|
-
if (this.stopped) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
fn().catch((e) => {
|
|
52
|
-
this.log.error(e);
|
|
53
|
-
this.log.info(`retrying in ${delayMs / 1000} seconds`);
|
|
54
|
-
setTimeout(() => {
|
|
55
|
-
this.withInfiniteRetries(fn, delayMs);
|
|
56
|
-
}, delayMs);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
RiverChain = __decorate([
|
|
61
|
-
persistedObservable({
|
|
62
|
-
tableName: 'riverChain', // this is the name of the table in the database
|
|
63
|
-
})
|
|
64
|
-
], RiverChain);
|
|
65
|
-
export { RiverChain };
|
|
66
|
-
//# sourceMappingURL=riverChain.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"riverChain.js","sourceRoot":"","sources":["../../../../src/sync-agent/river-connection/models/riverChain.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAClG,OAAO,EAAE,YAAY,EAAS,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAkB,MAAM,uBAAuB,CAAA;AAc/D,0FAA0F;AAInF,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,mBAAoC;IAOpD;IACA;IAPJ,GAAG,CAAgB;IACnB,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC3B,OAAO,GAAG,KAAK,CAAA;IACvB,gGAAgG;IAChG,YACI,KAAY,EACJ,iBAAgC,EAChC,MAAc,EACtB,KAAa;QAEb,gGAAgG;QAChG,sDAAsD;QACtD,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;QANzD,sBAAiB,GAAjB,iBAAiB,CAAe;QAChC,WAAM,GAAN,MAAM,CAAQ;QAMtB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,uDAAuD;IACpC,QAAQ;QACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QACpC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,IAAI;QACA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,IAAI;QACN,+FAA+F;QAC/F,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACnF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAA,CAAC,qCAAqC;QACxG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA,CAAC,2CAA2C;QACrG,OAAO,IAAI,CAAA;IACf,CAAC;IAEO,mBAAmB,CAAI,EAAoB,EAAE,UAAkB,IAAI;QACvE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAM;QACV,CAAC;QACD,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,GAAG,IAAI,UAAU,CAAC,CAAA;YACtD,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YACzC,CAAC,EAAE,OAAO,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;IACN,CAAC;CACJ,CAAA;AAtDY,UAAU;IAHtB,mBAAmB,CAAC;QACjB,SAAS,EAAE,YAAY,EAAE,gDAAgD;KAC5E,CAAC;GACW,UAAU,CAsDtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"appRegistryService.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/appRegistryService.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { makeSignerContext } from '../../signerContext';
|
|
2
|
-
import { AppRegistryService } from '../../appRegistryService';
|
|
3
|
-
import { ethers } from 'ethers';
|
|
4
|
-
import { townsEnv } from '../../townsEnv';
|
|
5
|
-
import { bin_fromHexString } from '@towns-labs/utils';
|
|
6
|
-
import { setupWalletsAndContexts, createSpaceAndDefaultChannel, everyoneMembershipStruct, } from '../testUtils';
|
|
7
|
-
const appRegistryUrl = townsEnv().getAppRegistryUrl(process.env.RIVER_ENV);
|
|
8
|
-
describe('appRegistryService test', () => {
|
|
9
|
-
test('authenticate with primary key', async () => {
|
|
10
|
-
const wallet = ethers.Wallet.createRandom();
|
|
11
|
-
const { finishResponse } = await AppRegistryService.authenticateWithSigner(wallet.address, wallet, appRegistryUrl);
|
|
12
|
-
expect(finishResponse.sessionToken).toBeDefined();
|
|
13
|
-
});
|
|
14
|
-
test('authenticate with delegate key', async () => {
|
|
15
|
-
const wallet = ethers.Wallet.createRandom();
|
|
16
|
-
const delegateWallet = ethers.Wallet.createRandom();
|
|
17
|
-
const signerContext = await makeSignerContext(wallet, delegateWallet, { days: 1 });
|
|
18
|
-
const { finishResponse } = await AppRegistryService.authenticate(signerContext, appRegistryUrl);
|
|
19
|
-
expect(finishResponse.sessionToken).toBeDefined();
|
|
20
|
-
});
|
|
21
|
-
test('cannot register a non-app user stream', async () => {
|
|
22
|
-
// Set up wallets and contexts for space creation
|
|
23
|
-
const { bob, bobProvider, bobSpaceDapp } = await setupWalletsAndContexts();
|
|
24
|
-
// Create a space so that bob's user stream can be initialized.
|
|
25
|
-
const everyoneMembership = await everyoneMembershipStruct(bobSpaceDapp, bob);
|
|
26
|
-
await createSpaceAndDefaultChannel(bob, bobSpaceDapp, bobProvider.wallet, 'test space', everyoneMembership);
|
|
27
|
-
// Authentication should work for any user
|
|
28
|
-
const { appRegistryRpcClient } = await AppRegistryService.authenticateWithSigner(bob.userId, bob.wallet, // Use wallet directly as signer
|
|
29
|
-
appRegistryUrl);
|
|
30
|
-
expect(appRegistryRpcClient).toBeDefined();
|
|
31
|
-
// However, trying to register should fail because the user's address
|
|
32
|
-
// is not a registered app contract address
|
|
33
|
-
await expect(appRegistryRpcClient.register({
|
|
34
|
-
appId: bin_fromHexString(bob.wallet.address), // Regular user address, not an app contract
|
|
35
|
-
appOwnerId: bin_fromHexString(bob.userId),
|
|
36
|
-
})).rejects.toThrow();
|
|
37
|
-
// Cleanup
|
|
38
|
-
await bob.stopSync();
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
//# sourceMappingURL=appRegistryService.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"appRegistryService.test.js","sourceRoot":"","sources":["../../../src/tests/multi/appRegistryService.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EACH,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,GAC3B,MAAM,cAAc,CAAA;AAErB,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAE1E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACrC,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QAC3C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAkB,CAAC,sBAAsB,CACtE,MAAM,CAAC,OAAO,EACd,MAAM,EACN,cAAc,CACjB,CAAA;QACD,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QACnD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QAElF,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAC5D,aAAa,EACb,cAAc,CACjB,CAAA;QACD,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,iDAAiD;QACjD,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,uBAAuB,EAAE,CAAA;QAE1E,+DAA+D;QAC/D,MAAM,kBAAkB,GAAG,MAAM,wBAAwB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QAC5E,MAAM,4BAA4B,CAC9B,GAAG,EACH,YAAY,EACZ,WAAW,CAAC,MAAM,EAClB,YAAY,EACZ,kBAAkB,CACrB,CAAA;QAED,0CAA0C;QAC1C,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,kBAAkB,CAAC,sBAAsB,CAC5E,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,MAAM,EAAE,gCAAgC;QAC5C,cAAc,CACjB,CAAA;QACD,MAAM,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAA;QAE1C,qEAAqE;QACrE,2CAA2C;QAC3C,MAAM,MAAM,CACR,oBAAoB,CAAC,QAAQ,CAAC;YAC1B,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,4CAA4C;YAC1F,UAAU,EAAE,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;SAC5C,CAAC,CACL,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QAEnB,UAAU;QACV,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"botEntitlements.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/botEntitlements.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @group with-entitlements
|
|
3
|
-
*/
|
|
4
|
-
import { AppRegistryDapp, Permission, SpaceAddressFromSpaceId } from '@towns-protocol/web3';
|
|
5
|
-
import { createSpaceAndDefaultChannel, everyoneMembershipStruct, setupWalletsAndContexts, waitFor, createChannel, } from '../testUtils';
|
|
6
|
-
import { townsEnv } from '../../townsEnv';
|
|
7
|
-
import { ethers } from 'ethers';
|
|
8
|
-
import { MembershipOp } from '@towns-protocol/proto';
|
|
9
|
-
import { make_MemberPayload_KeySolicitation } from '../../types';
|
|
10
|
-
describe('bot entitlements tests', () => {
|
|
11
|
-
test('bot has READ permissions to channels when granted by isAppEntitled', async () => {
|
|
12
|
-
const { bob: bot, bobsWallet: botWallet, bobProvider: botProvider, carol: spaceOwner, carolProvider: spaceOwnerProvider, carolSpaceDapp: spaceOwnerSpaceDapp, } = await setupWalletsAndContexts();
|
|
13
|
-
const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
|
|
14
|
-
// Create bot app contract with READ permission only
|
|
15
|
-
const tx = await appRegistryDapp.createApp(botProvider.signer, 'read-only-bot', [Permission.Read], // Only READ permission, no WRITE
|
|
16
|
-
botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
|
|
17
|
-
const receipt = await tx.wait();
|
|
18
|
-
const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
|
|
19
|
-
expect(foundAppAddress).toBeDefined();
|
|
20
|
-
// Create bot user streams
|
|
21
|
-
await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
|
|
22
|
-
bot.startSync();
|
|
23
|
-
// Create a town with channels (everyone can join)
|
|
24
|
-
const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
|
|
25
|
-
const { spaceId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
|
|
26
|
-
// Install the bot to the space (as space owner)
|
|
27
|
-
const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
|
|
28
|
-
const installReceipt = await installTx.wait();
|
|
29
|
-
expect(installReceipt.status).toBe(1);
|
|
30
|
-
// This channel has no roles attached, so the bot can only gain READ permissions through
|
|
31
|
-
// isAppEntitled.
|
|
32
|
-
const { channelId: restrictedChannelId, error: channelError } = await createChannel(spaceOwnerSpaceDapp, spaceOwnerProvider, spaceId, 'channel-without-roles', [], spaceOwnerProvider.wallet);
|
|
33
|
-
expect(channelError).toBeUndefined();
|
|
34
|
-
expect(restrictedChannelId).toBeDefined();
|
|
35
|
-
// Create the channel stream
|
|
36
|
-
const { streamId: returnedChannelId } = await spaceOwner.createChannel(spaceId, 'channel-without-roles', '', restrictedChannelId);
|
|
37
|
-
expect(returnedChannelId).toEqual(restrictedChannelId);
|
|
38
|
-
// Have space owner add bot to space and channel
|
|
39
|
-
await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
|
|
40
|
-
await expect(spaceOwner.joinUser(restrictedChannelId, bot.userId)).resolves.toBeDefined();
|
|
41
|
-
// Validate bot is a member of both space and channel
|
|
42
|
-
const botUserStreamView = bot.stream(bot.userStreamId).view;
|
|
43
|
-
await waitFor(() => {
|
|
44
|
-
expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
|
|
45
|
-
expect(botUserStreamView.userContent.isMember(restrictedChannelId, MembershipOp.SO_JOIN)).toBe(true);
|
|
46
|
-
});
|
|
47
|
-
// Force miniblocks with snapshots for both space and channel streams
|
|
48
|
-
// The test will now fail if app address is not properly propogated through member snapshots.
|
|
49
|
-
const spaceStream = spaceOwner.stream(spaceId);
|
|
50
|
-
const channelStream = spaceOwner.stream(restrictedChannelId);
|
|
51
|
-
await waitFor(async () => {
|
|
52
|
-
const response = await spaceOwner.debugForceMakeMiniblock(spaceId, {
|
|
53
|
-
forceSnapshot: true,
|
|
54
|
-
lastKnownMiniblockNum: spaceStream.view.miniblockInfo.max,
|
|
55
|
-
});
|
|
56
|
-
expect(response).toBeDefined();
|
|
57
|
-
});
|
|
58
|
-
await waitFor(async () => {
|
|
59
|
-
const response = await spaceOwner.debugForceMakeMiniblock(restrictedChannelId, {
|
|
60
|
-
forceSnapshot: true,
|
|
61
|
-
lastKnownMiniblockNum: channelStream.view.miniblockInfo.max,
|
|
62
|
-
});
|
|
63
|
-
expect(response).toBeDefined();
|
|
64
|
-
});
|
|
65
|
-
// Bot should be able to post a key solicitation because it has READ permission through isAppEntitled
|
|
66
|
-
// Key solicitations require READ permission, not WRITE permission
|
|
67
|
-
const payload = make_MemberPayload_KeySolicitation({
|
|
68
|
-
deviceKey: 'bot-device-key',
|
|
69
|
-
sessionIds: ['aaa'],
|
|
70
|
-
fallbackKey: 'bot-fallback-key',
|
|
71
|
-
isNewDevice: true,
|
|
72
|
-
});
|
|
73
|
-
// This should succeed because the bot has READ permission via app entitlements
|
|
74
|
-
await bot.makeEventAndAddToStream(restrictedChannelId, payload);
|
|
75
|
-
// Cleanup
|
|
76
|
-
await bot.stopSync();
|
|
77
|
-
await spaceOwner.stopSync();
|
|
78
|
-
});
|
|
79
|
-
test('bot has write permissions to channels when granted by isAppEntitled', async () => {
|
|
80
|
-
const { alice: spaceOwner, aliceProvider: spaceOwnerProvider, aliceSpaceDapp: spaceOwnerSpaceDapp, bob: botWithoutWrite, bobsWallet: botWithoutWriteWallet, bobProvider: botWithoutWriteProvider, carol: botWithWrite, carolsWallet: botWithWriteWallet, carolProvider: botWithWriteProvider, } = await setupWalletsAndContexts();
|
|
81
|
-
const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
|
|
82
|
-
// Create first bot app contract with READ permission only (no WRITE)
|
|
83
|
-
const tx1 = await appRegistryDapp.createApp(botWithoutWriteProvider.signer, 'read-only-bot', [Permission.Read], // Only READ permission, no WRITE
|
|
84
|
-
botWithoutWriteWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
|
|
85
|
-
const receipt1 = await tx1.wait();
|
|
86
|
-
const { app: readOnlyBotAddress } = appRegistryDapp.getCreateAppEvent(receipt1, botWithoutWriteWallet.address);
|
|
87
|
-
expect(readOnlyBotAddress).toBeDefined();
|
|
88
|
-
// Create second bot app contract with both READ and WRITE permissions
|
|
89
|
-
const tx2 = await appRegistryDapp.createApp(botWithWriteProvider.signer, 'read-write-bot', [Permission.Read, Permission.Write], // Both READ and WRITE permissions
|
|
90
|
-
botWithWriteWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
|
|
91
|
-
const receipt2 = await tx2.wait();
|
|
92
|
-
const { app: readWriteBotAddress } = appRegistryDapp.getCreateAppEvent(receipt2, botWithWriteWallet.address);
|
|
93
|
-
expect(readWriteBotAddress).toBeDefined();
|
|
94
|
-
// Create bot user streams for both bots
|
|
95
|
-
await expect(botWithoutWrite.initializeUser({ appAddress: readOnlyBotAddress })).resolves.toBeDefined();
|
|
96
|
-
await expect(botWithWrite.initializeUser({ appAddress: readWriteBotAddress })).resolves.toBeDefined();
|
|
97
|
-
botWithoutWrite.startSync();
|
|
98
|
-
botWithWrite.startSync();
|
|
99
|
-
// Create a town with channels (everyone can join)
|
|
100
|
-
const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
|
|
101
|
-
const { spaceId, defaultChannelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
|
|
102
|
-
// Install both bots to the space (as space owner)
|
|
103
|
-
const installTx1 = await appRegistryDapp.installApp(spaceOwnerProvider.signer, readOnlyBotAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
|
|
104
|
-
const installReceipt1 = await installTx1.wait();
|
|
105
|
-
expect(installReceipt1.status).toBe(1);
|
|
106
|
-
const installTx2 = await appRegistryDapp.installApp(spaceOwnerProvider.signer, readWriteBotAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
|
|
107
|
-
const installReceipt2 = await installTx2.wait();
|
|
108
|
-
expect(installReceipt2.status).toBe(1);
|
|
109
|
-
// Verify both bots are installed
|
|
110
|
-
const space = spaceOwnerSpaceDapp.getSpace(spaceId);
|
|
111
|
-
const installedApps = await space.AppAccount.read.getInstalledApps();
|
|
112
|
-
expect(installedApps).toContain(readOnlyBotAddress);
|
|
113
|
-
expect(installedApps).toContain(readWriteBotAddress);
|
|
114
|
-
// Have space owner add both bots to space and default channel
|
|
115
|
-
await expect(spaceOwner.joinUser(spaceId, botWithoutWrite.userId)).resolves.toBeDefined();
|
|
116
|
-
await expect(spaceOwner.joinUser(defaultChannelId, botWithoutWrite.userId)).resolves.toBeDefined();
|
|
117
|
-
await expect(spaceOwner.joinUser(spaceId, botWithWrite.userId)).resolves.toBeDefined();
|
|
118
|
-
await expect(spaceOwner.joinUser(defaultChannelId, botWithWrite.userId)).resolves.toBeDefined();
|
|
119
|
-
// Validate both bots are members of space and default channel
|
|
120
|
-
const botWithoutWriteUserStreamView = botWithoutWrite.stream(botWithoutWrite.userStreamId).view;
|
|
121
|
-
const botWithWriteUserStreamView = botWithWrite.stream(botWithWrite.userStreamId).view;
|
|
122
|
-
await waitFor(() => {
|
|
123
|
-
expect(botWithoutWriteUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
|
|
124
|
-
expect(botWithoutWriteUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
|
|
125
|
-
expect(botWithWriteUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
|
|
126
|
-
expect(botWithWriteUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
|
|
127
|
-
});
|
|
128
|
-
// Bot without WRITE permission should NOT be able to post a message
|
|
129
|
-
await expect(botWithoutWrite.sendMessage(defaultChannelId, 'Message from read-only bot')).rejects.toThrow(/PERMISSION_DENIED/);
|
|
130
|
-
// Bot with WRITE permission should be able to post a message
|
|
131
|
-
await expect(botWithWrite.sendMessage(defaultChannelId, 'Message from read-write bot')).resolves.not.toThrow();
|
|
132
|
-
// Cleanup
|
|
133
|
-
await botWithoutWrite.stopSync();
|
|
134
|
-
await botWithWrite.stopSync();
|
|
135
|
-
await spaceOwner.stopSync();
|
|
136
|
-
});
|
|
137
|
-
// TODO: flaky test
|
|
138
|
-
test.skip('bot does not have write permissions to channels when not granted by isAppEntitled', async () => {
|
|
139
|
-
const { alice: spaceOwner, aliceProvider: spaceOwnerProvider, aliceSpaceDapp: spaceOwnerSpaceDapp, bob: bot, bobsWallet: botWallet, bobProvider: botProvider, } = await setupWalletsAndContexts();
|
|
140
|
-
const appRegistryDapp = new AppRegistryDapp(townsEnv().makeBaseChainConfig().chainConfig, spaceOwnerProvider);
|
|
141
|
-
// Create bot app contract with READ permission only (no WRITE)
|
|
142
|
-
const tx = await appRegistryDapp.createApp(botProvider.signer, 'read-only-bot-no-write', [Permission.Read], // Only READ permission, no WRITE
|
|
143
|
-
botWallet.address, ethers.utils.parseEther('0.01').toBigInt(), 31536000n);
|
|
144
|
-
const receipt = await tx.wait();
|
|
145
|
-
const { app: foundAppAddress } = appRegistryDapp.getCreateAppEvent(receipt, botWallet.address);
|
|
146
|
-
expect(foundAppAddress).toBeDefined();
|
|
147
|
-
// Create bot user streams
|
|
148
|
-
await expect(bot.initializeUser({ appAddress: foundAppAddress })).resolves.toBeDefined();
|
|
149
|
-
bot.startSync();
|
|
150
|
-
// Create a town with channels where everyone can join and has write permissions
|
|
151
|
-
const everyoneMembership = await everyoneMembershipStruct(spaceOwnerSpaceDapp, spaceOwner);
|
|
152
|
-
const { spaceId, defaultChannelId } = await createSpaceAndDefaultChannel(spaceOwner, spaceOwnerSpaceDapp, spaceOwnerProvider.wallet, "space owner's town", everyoneMembership);
|
|
153
|
-
// Install the bot to the space (as space owner)
|
|
154
|
-
const installTx = await appRegistryDapp.installApp(spaceOwnerProvider.signer, foundAppAddress, SpaceAddressFromSpaceId(spaceId), ethers.utils.parseEther('0.02').toBigInt());
|
|
155
|
-
const installReceipt = await installTx.wait();
|
|
156
|
-
expect(installReceipt.status).toBe(1);
|
|
157
|
-
// Verify bot is installed
|
|
158
|
-
const space = spaceOwnerSpaceDapp.getSpace(spaceId);
|
|
159
|
-
const installedApps = await space.AppAccount.read.getInstalledApps();
|
|
160
|
-
expect(installedApps).toContain(foundAppAddress);
|
|
161
|
-
// Have space owner add bot to space and default channel
|
|
162
|
-
await expect(spaceOwner.joinUser(spaceId, bot.userId)).resolves.toBeDefined();
|
|
163
|
-
await expect(spaceOwner.joinUser(defaultChannelId, bot.userId)).resolves.toBeDefined();
|
|
164
|
-
// Validate bot is a member of both space and channel
|
|
165
|
-
const botUserStreamView = bot.stream(bot.userStreamId).view;
|
|
166
|
-
await waitFor(() => {
|
|
167
|
-
expect(botUserStreamView.userContent.isMember(spaceId, MembershipOp.SO_JOIN)).toBe(true);
|
|
168
|
-
expect(botUserStreamView.userContent.isMember(defaultChannelId, MembershipOp.SO_JOIN)).toBe(true);
|
|
169
|
-
});
|
|
170
|
-
// Bot should NOT be able to post a message because it lacks WRITE permission through isAppEntitled
|
|
171
|
-
// Even though the space grants write permissions to all users, the bot's app contract only has READ permission
|
|
172
|
-
await expect(bot.sendMessage(defaultChannelId, 'Message from read-only bot')).rejects.toThrow(/PERMISSION_DENIED/);
|
|
173
|
-
// Cleanup
|
|
174
|
-
await bot.stopSync();
|
|
175
|
-
await spaceOwner.stopSync();
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
//# sourceMappingURL=botEntitlements.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"botEntitlements.test.js","sourceRoot":"","sources":["../../../src/tests/multi/botEntitlements.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"botMembership.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multi/botMembership.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|