UNPKG

@river-build/sdk

Version:

For more details, visit the following resources:

90 lines 4.18 kB
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