@towns-protocol/sdk
Version:
For more details, visit the following resources:
131 lines • 5.69 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 { bin_toHexString, bin_toString, check } from '@towns-protocol/dlog';
import { isDefined } from '../../../check';
import { PersistedObservable, persistedObservable } from '../../../observable/persistedObservable';
let Member = class Member extends PersistedObservable {
userId;
riverConnection;
constructor(userId, streamId, riverConnection, store) {
super({
id: `${userId}_${streamId}`,
userId,
streamId,
initialized: false,
username: '',
isUsernameConfirmed: false,
isUsernameEncrypted: false,
displayName: '',
isDisplayNameEncrypted: false,
ensAddress: undefined,
nft: undefined,
membership: undefined,
}, store);
this.userId = userId;
this.riverConnection = riverConnection;
}
onStreamInitialized(streamId) {
if (this.data.streamId === streamId) {
const streamView = this.riverConnection.client?.stream(this.data.streamId)?.view;
check(isDefined(streamView), 'streamView is not defined');
const metadata = streamView.getMemberMetadata();
const usernameInfo = metadata?.usernames.info(this.userId);
const displayNameInfo = metadata?.displayNames.info(this.userId);
const ensAddress = metadata?.ensAddresses.info(this.userId);
const nft = metadata?.nfts.info(this.userId);
const membership = streamView.getMembers().info(this.userId);
this.setData({
initialized: true,
username: usernameInfo?.username,
isUsernameConfirmed: usernameInfo?.usernameConfirmed,
isUsernameEncrypted: usernameInfo?.usernameEncrypted,
displayName: displayNameInfo?.displayName,
isDisplayNameEncrypted: displayNameInfo?.displayNameEncrypted,
ensAddress,
nft,
membership,
});
}
}
onStreamUsernameUpdated(streamId, userId) {
if (this.data.userId === userId && this.data.streamId === streamId) {
const streamView = this.riverConnection.client?.stream(this.data.streamId)?.view;
check(isDefined(streamView), 'streamView is not defined');
const usernameInfo = streamView.getMemberMetadata()?.usernames.info(this.userId);
this.setData({
username: usernameInfo?.username,
isUsernameConfirmed: usernameInfo?.usernameConfirmed,
isUsernameEncrypted: usernameInfo?.usernameEncrypted,
});
}
}
onStreamNftUpdated = (streamId, userId) => {
if (streamId === this.data.streamId && userId === this.userId) {
const streamView = this.riverConnection.client?.stream(streamId)?.view;
const metadata = streamView?.getMemberMetadata();
if (metadata) {
const nftPayload = metadata.nfts.confirmedNfts.get(userId);
const nft = nftPayload
? {
contractAddress: bin_toHexString(nftPayload.contractAddress),
tokenId: bin_toString(nftPayload.tokenId),
chainId: nftPayload.chainId,
}
: undefined;
this.setData({ nft });
}
}
};
onStreamEnsAddressUpdated = (streamId, userId) => {
if (streamId === this.data.streamId && userId === this.userId) {
const stream = this.riverConnection.client?.streams.get(streamId);
const metadata = stream?.view.getMemberMetadata();
const ensAddress = metadata?.ensAddresses.info(userId);
if (ensAddress) {
this.setData({ ensAddress: ensAddress });
}
}
};
onStreamDisplayNameUpdated = (streamId, userId) => {
if (streamId === this.data.streamId && userId === this.userId) {
const stream = this.riverConnection.client?.streams.get(streamId);
const metadata = stream?.view.getMemberMetadata();
const info = metadata?.displayNames.info(userId);
if (info) {
this.setData({
displayName: info.displayName,
isDisplayNameEncrypted: info.displayNameEncrypted,
});
}
}
};
onStreamMembershipUpdated = (streamId, userId, membership) => {
if (streamId === this.data.streamId && userId === this.userId) {
this.setData({ membership });
}
};
get username() {
return this.data.username;
}
get displayName() {
return this.data.displayName;
}
get ensAddress() {
return this.data.ensAddress;
}
get nft() {
return this.data.nft;
}
get membership() {
return this.data.membership;
}
};
Member = __decorate([
persistedObservable({ tableName: 'member' })
], Member);
export { Member };
//# sourceMappingURL=member.js.map