@river-build/sdk
Version:
For more details, visit the following resources:
90 lines • 4.18 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { LoadPriority } from '../../store/store';
import { PersistedObservable, persistedObservable, } from '../../observable/persistedObservable';
import { Space } from './models/space';
import { MembershipOp } from '@river-build/proto';
import { isSpaceStreamId, makeDefaultChannelStreamId, makeSpaceStreamId } from '../../id';
import { makeDefaultMembershipInfo } from '../utils/spaceUtils';
import { check, dlogger } from '@river-build/dlog';
const logger = dlogger('csb:spaces');
let Spaces = class Spaces extends PersistedObservable {
riverConnection;
userMemberships;
spaceDapp;
spaces = {};
constructor(store, riverConnection, userMemberships, spaceDapp) {
super({ id: '0', spaceIds: [] }, store, LoadPriority.high);
this.riverConnection = riverConnection;
this.userMemberships = userMemberships;
this.spaceDapp = spaceDapp;
}
onLoaded() {
this.userMemberships.subscribe((value) => {
this.onUserMembershipsChanged(value);
}, { fireImediately: true });
}
getSpace(spaceId) {
check(isSpaceStreamId(spaceId), 'Invalid spaceId');
if (!this.spaces[spaceId]) {
this.spaces[spaceId] = new Space(spaceId, this.riverConnection, this.store, this.spaceDapp);
}
return this.spaces[spaceId];
}
onUserMembershipsChanged(value) {
if (value.status === 'loading') {
return;
}
const spaceIds = Object.values(value.data.memberships)
.filter((m) => isSpaceStreamId(m.streamId) && m.op === MembershipOp.SO_JOIN)
.map((m) => m.streamId);
this.setData({ spaceIds });
for (const spaceId of spaceIds) {
if (!this.spaces[spaceId]) {
this.spaces[spaceId] = new Space(spaceId, this.riverConnection, this.store, this.spaceDapp);
}
}
}
async createSpace(params, signer) {
const membershipInfo = params.membership ??
(await makeDefaultMembershipInfo(this.spaceDapp, this.riverConnection.userId));
const channelName = params.channelName ?? 'general';
const transaction = await this.spaceDapp.createSpace({
spaceName: params.spaceName,
uri: params.uri ?? '',
channelName: channelName,
membership: membershipInfo,
shortDescription: params.shortDescription,
longDescription: params.longDescription,
}, signer);
const receipt = await transaction.wait();
logger.log('transaction receipt', receipt);
const spaceAddress = this.spaceDapp.getSpaceAddress(receipt, await signer.getAddress());
if (!spaceAddress) {
throw new Error('Space address not found');
}
logger.log('spaceAddress', spaceAddress);
const spaceId = makeSpaceStreamId(spaceAddress);
const defaultChannelId = makeDefaultChannelStreamId(spaceAddress);
logger.log('spaceId, defaultChannelId', { spaceId, defaultChannelId });
await this.riverConnection.login({ spaceId });
await this.riverConnection.call(async (client) => {
await client.createSpace(spaceId);
await client.createChannel(spaceId, channelName, '', defaultChannelId);
});
return { spaceId, defaultChannelId };
}
async joinSpace(spaceId, ...args) {
const space = this.getSpace(spaceId);
return space.join(...args);
}
};
Spaces = __decorate([
persistedObservable({ tableName: 'spaces' })
], Spaces);
export { Spaces };
//# sourceMappingURL=spaces.js.map