@pkcprotocol/pkc-js 0.0.35 → 0.0.36
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/README.md +18 -0
- package/dist/browser/community/remote-community.d.ts +3 -3
- package/dist/browser/community/remote-community.js.map +1 -1
- package/dist/browser/generated-version.d.ts +1 -1
- package/dist/browser/generated-version.js +1 -1
- package/dist/browser/pkc/pkc.js +3 -3
- package/dist/browser/pkc/pkc.js.map +1 -1
- package/dist/browser/runtime/browser/community/local-community.d.ts +2 -0
- package/dist/browser/runtime/browser/community/local-community.js +6 -0
- package/dist/browser/runtime/browser/community/local-community.js.map +1 -1
- package/dist/browser/runtime/node/community/db-handler.js +6 -4
- package/dist/browser/runtime/node/community/db-handler.js.map +1 -1
- package/dist/browser/runtime/node/community/local-community/challenges.d.ts +26 -0
- package/dist/browser/runtime/node/community/local-community/challenges.js +519 -0
- package/dist/browser/runtime/node/community/local-community/challenges.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/cleanup.d.ts +9 -0
- package/dist/browser/runtime/node/community/local-community/cleanup.js +165 -0
- package/dist/browser/runtime/node/community/local-community/cleanup.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/comment-updates.d.ts +11 -0
- package/dist/browser/runtime/node/community/local-community/comment-updates.js +218 -0
- package/dist/browser/runtime/node/community/local-community/comment-updates.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/db-state.d.ts +15 -0
- package/dist/browser/runtime/node/community/local-community/db-state.js +323 -0
- package/dist/browser/runtime/node/community/local-community/db-state.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/defaults.d.ts +12 -0
- package/dist/browser/runtime/node/community/local-community/defaults.js +29 -0
- package/dist/browser/runtime/node/community/local-community/defaults.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/editing.d.ts +10 -0
- package/dist/browser/runtime/node/community/local-community/editing.js +188 -0
- package/dist/browser/runtime/node/community/local-community/editing.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/ipns-publishing.d.ts +12 -0
- package/dist/browser/runtime/node/community/local-community/ipns-publishing.js +340 -0
- package/dist/browser/runtime/node/community/local-community/ipns-publishing.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/lifecycle.d.ts +11 -0
- package/dist/browser/runtime/node/community/local-community/lifecycle.js +428 -0
- package/dist/browser/runtime/node/community/local-community/lifecycle.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/publication-store.d.ts +100 -0
- package/dist/browser/runtime/node/community/local-community/publication-store.js +395 -0
- package/dist/browser/runtime/node/community/local-community/publication-store.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/publication-validation.d.ts +9 -0
- package/dist/browser/runtime/node/community/local-community/publication-validation.js +493 -0
- package/dist/browser/runtime/node/community/local-community/publication-validation.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/pubsub.d.ts +3 -0
- package/dist/browser/runtime/node/community/local-community/pubsub.js +43 -0
- package/dist/browser/runtime/node/community/local-community/pubsub.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community/registry.d.ts +3 -0
- package/dist/browser/runtime/node/community/local-community/registry.js +4 -0
- package/dist/browser/runtime/node/community/local-community/registry.js.map +1 -0
- package/dist/browser/runtime/node/community/local-community.d.ts +68 -105
- package/dist/browser/runtime/node/community/local-community.js +127 -2927
- package/dist/browser/runtime/node/community/local-community.js.map +1 -1
- package/dist/browser/test/test-util.js +0 -1
- package/dist/browser/test/test-util.js.map +1 -1
- package/dist/node/community/remote-community.d.ts +3 -3
- package/dist/node/community/remote-community.js.map +1 -1
- package/dist/node/generated-version.d.ts +1 -1
- package/dist/node/generated-version.js +1 -1
- package/dist/node/pkc/pkc.js +3 -3
- package/dist/node/pkc/pkc.js.map +1 -1
- package/dist/node/runtime/browser/community/local-community.d.ts +2 -0
- package/dist/node/runtime/browser/community/local-community.js +6 -0
- package/dist/node/runtime/browser/community/local-community.js.map +1 -1
- package/dist/node/runtime/node/community/db-handler.js +6 -4
- package/dist/node/runtime/node/community/db-handler.js.map +1 -1
- package/dist/node/runtime/node/community/local-community/challenges.d.ts +26 -0
- package/dist/node/runtime/node/community/local-community/challenges.js +519 -0
- package/dist/node/runtime/node/community/local-community/challenges.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/cleanup.d.ts +9 -0
- package/dist/node/runtime/node/community/local-community/cleanup.js +165 -0
- package/dist/node/runtime/node/community/local-community/cleanup.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/comment-updates.d.ts +11 -0
- package/dist/node/runtime/node/community/local-community/comment-updates.js +218 -0
- package/dist/node/runtime/node/community/local-community/comment-updates.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/db-state.d.ts +15 -0
- package/dist/node/runtime/node/community/local-community/db-state.js +323 -0
- package/dist/node/runtime/node/community/local-community/db-state.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/defaults.d.ts +12 -0
- package/dist/node/runtime/node/community/local-community/defaults.js +29 -0
- package/dist/node/runtime/node/community/local-community/defaults.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/editing.d.ts +10 -0
- package/dist/node/runtime/node/community/local-community/editing.js +188 -0
- package/dist/node/runtime/node/community/local-community/editing.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/ipns-publishing.d.ts +12 -0
- package/dist/node/runtime/node/community/local-community/ipns-publishing.js +340 -0
- package/dist/node/runtime/node/community/local-community/ipns-publishing.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/lifecycle.d.ts +11 -0
- package/dist/node/runtime/node/community/local-community/lifecycle.js +428 -0
- package/dist/node/runtime/node/community/local-community/lifecycle.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/publication-store.d.ts +100 -0
- package/dist/node/runtime/node/community/local-community/publication-store.js +395 -0
- package/dist/node/runtime/node/community/local-community/publication-store.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/publication-validation.d.ts +9 -0
- package/dist/node/runtime/node/community/local-community/publication-validation.js +493 -0
- package/dist/node/runtime/node/community/local-community/publication-validation.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/pubsub.d.ts +3 -0
- package/dist/node/runtime/node/community/local-community/pubsub.js +43 -0
- package/dist/node/runtime/node/community/local-community/pubsub.js.map +1 -0
- package/dist/node/runtime/node/community/local-community/registry.d.ts +3 -0
- package/dist/node/runtime/node/community/local-community/registry.js +4 -0
- package/dist/node/runtime/node/community/local-community/registry.js.map +1 -0
- package/dist/node/runtime/node/community/local-community.d.ts +68 -105
- package/dist/node/runtime/node/community/local-community.js +127 -2927
- package/dist/node/runtime/node/community/local-community.js.map +1 -1
- package/dist/node/test/test-util.js +0 -1
- package/dist/node/test/test-util.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import Logger from "../../../../logger.js";
|
|
2
|
+
import * as remeda from "remeda";
|
|
3
|
+
import { v4 as uuidV4 } from "uuid";
|
|
4
|
+
import { ipnsNameToIpnsOverPubsubTopic, pubsubTopicToDhtKey, timestamp } from "../../../../util.js";
|
|
5
|
+
import { PKCError } from "../../../../pkc-error.js";
|
|
6
|
+
import env from "../../../../version.js";
|
|
7
|
+
import { STORAGE_KEYS } from "../../../../constants.js";
|
|
8
|
+
import { parseCommunityIpfsSchemaPassthroughWithPKCErrorIfItFails } from "../../../../schema/schema-util.js";
|
|
9
|
+
import { deriveDbPosts, resolveDbPostsCidRefs, importSignerIntoKuboNode } from "../../util.js";
|
|
10
|
+
import { SignerWithPublicKeyAddress } from "../../../../signer/index.js";
|
|
11
|
+
import { getIpfsKeyFromPrivateKey, getPublicKeyFromPrivateKey } from "../../../../signer/util.js";
|
|
12
|
+
import { findCommunityInRegistry, findStartedCommunity } from "../../../../pkc/tracked-instance-registry-util.js";
|
|
13
|
+
import { getCommunityChallengeFromCommunityChallengeSettings } from "../challenges/index.js";
|
|
14
|
+
import { generateDefaultChallenges, isDefaultChallengeStructure } from "./defaults.js";
|
|
15
|
+
import { processStartedCommunities } from "./registry.js";
|
|
16
|
+
import { CommunitySignedPropertyNames } from "../../../../community/schema.js";
|
|
17
|
+
import { syncCommunityRegistryEntry } from "../../../../pkc/tracked-instance-registry-util.js";
|
|
18
|
+
import { DbHandler } from "../db-handler.js";
|
|
19
|
+
import { PageGenerator } from "../page-generator.js";
|
|
20
|
+
export async function initSignerProps(community, newSignerProps) {
|
|
21
|
+
community.signer = new SignerWithPublicKeyAddress(newSignerProps);
|
|
22
|
+
if (!community.signer?.ipfsKey?.byteLength || community.signer?.ipfsKey?.byteLength <= 0)
|
|
23
|
+
community.signer.ipfsKey = new Uint8Array(await getIpfsKeyFromPrivateKey(community.signer.privateKey));
|
|
24
|
+
if (!community.signer.ipnsKeyName)
|
|
25
|
+
community.signer.ipnsKeyName = community.signer.address;
|
|
26
|
+
if (!community.signer.publicKey)
|
|
27
|
+
community.signer.publicKey = await getPublicKeyFromPrivateKey(community.signer.privateKey);
|
|
28
|
+
community.encryption = {
|
|
29
|
+
type: "ed25519-aes-gcm",
|
|
30
|
+
publicKey: community.signer.publicKey
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export async function importCommunitySignerIntoIpfsIfNeeded(community) {
|
|
34
|
+
if (!community.signer.ipnsKeyName)
|
|
35
|
+
throw Error("community.signer.ipnsKeyName is not defined");
|
|
36
|
+
if (!community.signer.ipfsKey)
|
|
37
|
+
throw Error("community.signer.ipfsKey is not defined");
|
|
38
|
+
await importSignerIntoKuboNode(community.signer.ipnsKeyName, community.signer.ipfsKey, {
|
|
39
|
+
url: community._pkc.kuboRpcClientsOptions[0].url.toString(),
|
|
40
|
+
headers: community._pkc.kuboRpcClientsOptions[0].headers
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export async function getDbInternalState(community, lock) {
|
|
44
|
+
const log = Logger("pkc-js:local-community:_getDbInternalState");
|
|
45
|
+
if (!community._dbHandler.keyvHas(STORAGE_KEYS[STORAGE_KEYS.INTERNAL_COMMUNITY]))
|
|
46
|
+
throw new PKCError("ERR_COMMUNITY_HAS_NO_INTERNAL_STATE", { address: community.address, dataPath: community._pkc.dataPath });
|
|
47
|
+
let lockedIt = false;
|
|
48
|
+
try {
|
|
49
|
+
if (lock) {
|
|
50
|
+
await community._dbHandler.lockCommunityState();
|
|
51
|
+
lockedIt = true;
|
|
52
|
+
}
|
|
53
|
+
const internalState = await community._dbHandler.keyvGet(STORAGE_KEYS[STORAGE_KEYS.INTERNAL_COMMUNITY]);
|
|
54
|
+
if (!internalState)
|
|
55
|
+
throw new PKCError("ERR_COMMUNITY_HAS_NO_INTERNAL_STATE", { address: community.address, dataPath: community._pkc.dataPath });
|
|
56
|
+
return internalState;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
log.error("Failed to get community", community.address, "internal state from db", e);
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
if (lockedIt)
|
|
64
|
+
await community._dbHandler.unlockCommunityState();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function updateDbInternalState(community, props) {
|
|
68
|
+
const log = Logger("pkc-js:local-community:_updateDbInternalState");
|
|
69
|
+
if (remeda.isEmpty(props))
|
|
70
|
+
throw Error("props to update DB internal state should not be empty");
|
|
71
|
+
await community._dbHandler.initDbIfNeeded();
|
|
72
|
+
props._internalStateUpdateId = uuidV4();
|
|
73
|
+
let lockedIt = false;
|
|
74
|
+
try {
|
|
75
|
+
await community._dbHandler.lockCommunityState();
|
|
76
|
+
lockedIt = true;
|
|
77
|
+
const internalStateBefore = await community._getDbInternalState(false);
|
|
78
|
+
// Convert posts to CID-ref format for compact DB storage (strip preloaded page data)
|
|
79
|
+
const propsToStore = "posts" in props && props.posts
|
|
80
|
+
? {
|
|
81
|
+
...props,
|
|
82
|
+
posts: deriveDbPosts({
|
|
83
|
+
posts: props.posts,
|
|
84
|
+
allPageCids: community._postsAllPageCids
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
: props;
|
|
88
|
+
const mergedInternalState = { ...internalStateBefore, ...propsToStore };
|
|
89
|
+
await community._dbHandler.keyvSet(STORAGE_KEYS[STORAGE_KEYS.INTERNAL_COMMUNITY], mergedInternalState);
|
|
90
|
+
community._internalStateUpdateId = props._internalStateUpdateId;
|
|
91
|
+
log.trace("Updated community", community.address, "internal state in db with new props", Object.keys(props));
|
|
92
|
+
if (community.updateCid && community.raw.communityIpfs) {
|
|
93
|
+
community.raw.localCommunity = community.toJSONInternalRpcAfterFirstUpdate();
|
|
94
|
+
}
|
|
95
|
+
else if (community.settings) {
|
|
96
|
+
community.raw.localCommunity = community.toJSONInternalRpcBeforeFirstUpdate();
|
|
97
|
+
}
|
|
98
|
+
return mergedInternalState;
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
log.error("Failed to update community", community.address, "internal state in db with new props", Object.keys(props), e);
|
|
102
|
+
throw e;
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
if (lockedIt)
|
|
106
|
+
await community._dbHandler.unlockCommunityState();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export async function updateInstanceStateWithDbState(community) {
|
|
110
|
+
const currentDbState = await community._getDbInternalState(false);
|
|
111
|
+
if ("updatedAt" in currentDbState) {
|
|
112
|
+
// Resolve CID-ref posts from DB back to full wire format with preloaded pages.
|
|
113
|
+
// DB stores posts in compact CID-ref format (no preloaded page data).
|
|
114
|
+
// _dbHandler is guaranteed to be initialized here since we're loading from DB.
|
|
115
|
+
if (currentDbState.posts && !("pages" in currentDbState.posts)) {
|
|
116
|
+
const dbPosts = currentDbState.posts;
|
|
117
|
+
currentDbState.posts = resolveDbPostsCidRefs({ dbPosts, dbHandler: community._dbHandler });
|
|
118
|
+
}
|
|
119
|
+
await community.initInternalCommunityAfterFirstUpdateNoMerge(currentDbState);
|
|
120
|
+
}
|
|
121
|
+
else
|
|
122
|
+
await community.initInternalCommunityBeforeFirstUpdateNoMerge(currentDbState);
|
|
123
|
+
}
|
|
124
|
+
export async function updateInstancePropsWithStartedCommunityOrDb(community) {
|
|
125
|
+
// if it's started in the same pkc instance, we will load it from the started community instance
|
|
126
|
+
// if it's started in another process, we will throw an error
|
|
127
|
+
// if community is not started, load the InternalCommunity props from the local db
|
|
128
|
+
const log = Logger("pkc-js:local-community:_updateInstancePropsWithStartedCommunityOrDb");
|
|
129
|
+
const startedCommunity = ((findStartedCommunity(community._pkc, { publicKey: community.publicKey, name: community.name }) ||
|
|
130
|
+
findCommunityInRegistry(processStartedCommunities, { publicKey: community.publicKey, name: community.name })));
|
|
131
|
+
if (startedCommunity) {
|
|
132
|
+
log("Loading local community", community.address, "from started community instance");
|
|
133
|
+
if (startedCommunity.updatedAt)
|
|
134
|
+
await community.initInternalCommunityAfterFirstUpdateNoMerge(startedCommunity.toJSONInternalAfterFirstUpdate());
|
|
135
|
+
else
|
|
136
|
+
await community.initInternalCommunityBeforeFirstUpdateNoMerge(startedCommunity.toJSONInternalBeforeFirstUpdate());
|
|
137
|
+
community.started = true;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
await community.initDbHandlerIfNeeded();
|
|
141
|
+
try {
|
|
142
|
+
await community._updateStartedValue();
|
|
143
|
+
const communityDbExists = community._dbHandler.communityDbExists();
|
|
144
|
+
if (!communityDbExists)
|
|
145
|
+
throw new PKCError("CAN_NOT_LOAD_LOCAL_COMMUNITY_IF_DB_DOES_NOT_EXIST", {
|
|
146
|
+
address: community.address,
|
|
147
|
+
dataPath: community._pkc.dataPath
|
|
148
|
+
});
|
|
149
|
+
const dbConfig = community.state === "updating" ? { readonly: true } : undefined;
|
|
150
|
+
await community._dbHandler.initDbIfNeeded(dbConfig);
|
|
151
|
+
await updateInstanceStateWithDbState(community); // Load InternalCommunity from DB here
|
|
152
|
+
if (!community.signer)
|
|
153
|
+
throw new PKCError("ERR_LOCAL_COMMUNITY_HAS_NO_SIGNER_IN_INTERNAL_STATE", { address: community.address });
|
|
154
|
+
await community._updateStartedValue();
|
|
155
|
+
log("Loaded local community", community.address, "from db");
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
throw e;
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
community._dbHandler.destoryConnection(); // Need to destory connection so process wouldn't hang
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// need to validate schema of Community IPFS
|
|
165
|
+
if (community.raw.communityIpfs)
|
|
166
|
+
try {
|
|
167
|
+
parseCommunityIpfsSchemaPassthroughWithPKCErrorIfItFails(community.raw.communityIpfs);
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
if (e instanceof Error) {
|
|
171
|
+
log("Local community", community.address, "has an invalid communityIpfs schema from DB, clearing for re-generation after migration:", e.message);
|
|
172
|
+
community.raw.communityIpfs = undefined;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export async function setChallengesToDefaultIfNotDefined(community, log) {
|
|
177
|
+
if (community._usingDefaultChallenge !== false &&
|
|
178
|
+
(!community.settings?.challenges || isDefaultChallengeStructure(community.settings?.challenges)))
|
|
179
|
+
community._usingDefaultChallenge = true;
|
|
180
|
+
if (community._usingDefaultChallenge) {
|
|
181
|
+
const currentAnswer = community.settings?.challenges?.[0]?.options?.answer;
|
|
182
|
+
if (currentAnswer && isDefaultChallengeStructure(community._defaultCommunityChallenges)) {
|
|
183
|
+
// Preserve the existing per-community random answer in the template
|
|
184
|
+
community._defaultCommunityChallenges = generateDefaultChallenges(currentAnswer);
|
|
185
|
+
}
|
|
186
|
+
if (!remeda.isDeepEqual(community.settings?.challenges, community._defaultCommunityChallenges)) {
|
|
187
|
+
await community.edit({ settings: { ...community.settings, challenges: community._defaultCommunityChallenges } });
|
|
188
|
+
// edit() recalculates _usingDefaultChallenge via _isDefaultChallengeStructure,
|
|
189
|
+
// which may return false for non-standard defaults (e.g. []).
|
|
190
|
+
// Re-assert true since we know this is still a default-driven upgrade.
|
|
191
|
+
community._usingDefaultChallenge = true;
|
|
192
|
+
log(`Upgraded default challenge for community (${community.address})`, community._defaultCommunityChallenges[0]?.options?.answer
|
|
193
|
+
? `with answer: ${community._defaultCommunityChallenges[0].options.answer}`
|
|
194
|
+
: `to ${community._defaultCommunityChallenges.length} challenge(s)`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export async function createNewLocalCommunityDb(community) {
|
|
199
|
+
// We're creating a totally new community here with a new db
|
|
200
|
+
// This function should be called only once per community
|
|
201
|
+
const log = Logger("pkc-js:local-community:_createNewLocalCommunityDb");
|
|
202
|
+
await community.initDbHandlerIfNeeded();
|
|
203
|
+
await community._dbHandler.initDbIfNeeded({ fileMustExist: false });
|
|
204
|
+
await community._dbHandler.createOrMigrateTablesIfNeeded();
|
|
205
|
+
await initSignerProps(community, community.signer); // init this.encryption as well
|
|
206
|
+
if (!community.pubsubTopic)
|
|
207
|
+
community.pubsubTopic = remeda.clone(community.signer.address);
|
|
208
|
+
if (typeof community.createdAt !== "number")
|
|
209
|
+
community.createdAt = timestamp();
|
|
210
|
+
if (!community.protocolVersion)
|
|
211
|
+
community.protocolVersion = env.PROTOCOL_VERSION;
|
|
212
|
+
if (!community.settings?.maxPendingApprovalCount)
|
|
213
|
+
community.settings = { ...community.settings, maxPendingApprovalCount: 500 };
|
|
214
|
+
if (!community.settings?.challenges) {
|
|
215
|
+
community.settings = { ...community.settings, challenges: community._defaultCommunityChallenges };
|
|
216
|
+
community._usingDefaultChallenge = true;
|
|
217
|
+
log(`Generated default challenge for community (${community.address}) with answer:`, community._defaultCommunityChallenges[0].options.answer);
|
|
218
|
+
}
|
|
219
|
+
if (typeof community.settings?.purgeDisapprovedCommentsOlderThan !== "number") {
|
|
220
|
+
community.settings = { ...community.settings, purgeDisapprovedCommentsOlderThan: 1.21e6 }; // two weeks
|
|
221
|
+
}
|
|
222
|
+
community.challenges = await Promise.all(community.settings.challenges.map(async (cs) => (await getCommunityChallengeFromCommunityChallengeSettings({ communityChallengeSettings: cs, pkc: community._pkc }))
|
|
223
|
+
.communityChallenge));
|
|
224
|
+
if (community._dbHandler.keyvHas(STORAGE_KEYS[STORAGE_KEYS.INTERNAL_COMMUNITY]))
|
|
225
|
+
throw Error("Internal state exists already");
|
|
226
|
+
await community._dbHandler.keyvSet(STORAGE_KEYS[STORAGE_KEYS.INTERNAL_COMMUNITY], community.toJSONInternalBeforeFirstUpdate());
|
|
227
|
+
await community._updateStartedValue();
|
|
228
|
+
community._dbHandler.destoryConnection(); // Need to destory connection so process wouldn't hang
|
|
229
|
+
community._updateIpnsPubsubPropsIfNeeded({
|
|
230
|
+
...community.toJSONInternalBeforeFirstUpdate(), //@ts-expect-error
|
|
231
|
+
signature: { publicKey: community.signer.publicKey }
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
export async function initNewLocalCommunityPropsNoMerge(community, newProps) {
|
|
235
|
+
await initSignerProps(community, newProps.signer);
|
|
236
|
+
community.title = newProps.title;
|
|
237
|
+
community.description = newProps.description;
|
|
238
|
+
community.setAddress(newProps.address);
|
|
239
|
+
community.pubsubTopic = newProps.pubsubTopic;
|
|
240
|
+
community.roles = newProps.roles;
|
|
241
|
+
community.features = newProps.features;
|
|
242
|
+
community.suggested = newProps.suggested;
|
|
243
|
+
community.rules = newProps.rules;
|
|
244
|
+
community.flairs = newProps.flairs;
|
|
245
|
+
if (newProps.settings)
|
|
246
|
+
community.settings = newProps.settings;
|
|
247
|
+
}
|
|
248
|
+
export async function initInternalCommunityAfterFirstUpdateNoMerge(community, newProps) {
|
|
249
|
+
// Detect CID-ref format posts from DB: wire format always has 'pages' key, CID-ref format doesn't
|
|
250
|
+
if (newProps.posts && !("pages" in newProps.posts)) {
|
|
251
|
+
const dbPosts = newProps.posts;
|
|
252
|
+
// Extract allPageCids for future unpinning
|
|
253
|
+
const allPageCids = {};
|
|
254
|
+
for (const [sortName, entry] of Object.entries(dbPosts)) {
|
|
255
|
+
if (entry?.allPageCids?.length)
|
|
256
|
+
allPageCids[sortName] = entry.allPageCids;
|
|
257
|
+
}
|
|
258
|
+
community._postsAllPageCids = Object.keys(allPageCids).length > 0 ? allPageCids : undefined;
|
|
259
|
+
// Lightweight conversion: just pageCids from allPageCids[0], preloaded pages regenerated on next update.
|
|
260
|
+
// Never use resolveDbPostsCidRefs here — this method is called from many code paths
|
|
261
|
+
// where _dbHandler._db may not be initialized (e.g. updateListener from a mirrored community).
|
|
262
|
+
const pageCids = {};
|
|
263
|
+
for (const [sortName, entry] of Object.entries(dbPosts)) {
|
|
264
|
+
if (entry?.allPageCids?.[0])
|
|
265
|
+
pageCids[sortName] = entry.allPageCids[0];
|
|
266
|
+
}
|
|
267
|
+
newProps = {
|
|
268
|
+
...newProps,
|
|
269
|
+
posts: { pages: {}, ...(Object.keys(pageCids).length > 0 ? { pageCids } : {}) }
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
const keysOfCommunityIpfs = [...CommunitySignedPropertyNames, "signature"];
|
|
273
|
+
community.initRpcInternalCommunityAfterFirstUpdateNoMerge({
|
|
274
|
+
community: remeda.pick(newProps, keysOfCommunityIpfs),
|
|
275
|
+
localCommunity: {
|
|
276
|
+
signer: remeda.pick(newProps.signer, ["publicKey", "address", "shortAddress", "type"]),
|
|
277
|
+
settings: newProps.settings,
|
|
278
|
+
_usingDefaultChallenge: newProps._usingDefaultChallenge,
|
|
279
|
+
address: newProps.address,
|
|
280
|
+
started: community.started,
|
|
281
|
+
startedState: community.startedState
|
|
282
|
+
},
|
|
283
|
+
runtimeFields: { updateCid: newProps.updateCid }
|
|
284
|
+
});
|
|
285
|
+
await initSignerProps(community, newProps.signer);
|
|
286
|
+
community._internalStateUpdateId = newProps._internalStateUpdateId;
|
|
287
|
+
if (Array.isArray(newProps._cidsToUnPin))
|
|
288
|
+
newProps._cidsToUnPin.forEach((cid) => community._cidsToUnPin.add(cid));
|
|
289
|
+
if (Array.isArray(newProps._mfsPathsToRemove))
|
|
290
|
+
newProps._mfsPathsToRemove.forEach((path) => community._mfsPathsToRemove.add(path));
|
|
291
|
+
community._updateIpnsPubsubPropsIfNeeded(newProps);
|
|
292
|
+
if (processStartedCommunities.has(community))
|
|
293
|
+
syncCommunityRegistryEntry(processStartedCommunities, community);
|
|
294
|
+
if (community.updateCid)
|
|
295
|
+
community.raw.localCommunity = community.toJSONInternalRpcAfterFirstUpdate();
|
|
296
|
+
}
|
|
297
|
+
export async function initInternalCommunityBeforeFirstUpdateNoMerge(community, newProps) {
|
|
298
|
+
community.initRpcInternalCommunityBeforeFirstUpdateNoMerge({
|
|
299
|
+
localCommunity: {
|
|
300
|
+
...remeda.omit(newProps, ["signer", "_internalStateUpdateId", "_pendingEditProps"]),
|
|
301
|
+
signer: remeda.pick(newProps.signer, ["publicKey", "address", "shortAddress", "type"]),
|
|
302
|
+
started: community.started,
|
|
303
|
+
startedState: community.startedState
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
await initSignerProps(community, newProps.signer);
|
|
307
|
+
community._internalStateUpdateId = newProps._internalStateUpdateId;
|
|
308
|
+
community._updateIpnsPubsubPropsIfNeeded(newProps);
|
|
309
|
+
community.ipnsName = newProps.signer.address;
|
|
310
|
+
community.ipnsPubsubTopic = ipnsNameToIpnsOverPubsubTopic(community.ipnsName);
|
|
311
|
+
community.ipnsPubsubTopicRoutingCid = pubsubTopicToDhtKey(community.ipnsPubsubTopic);
|
|
312
|
+
if (processStartedCommunities.has(community))
|
|
313
|
+
syncCommunityRegistryEntry(processStartedCommunities, community);
|
|
314
|
+
community.raw.localCommunity = community.toJSONInternalRpcBeforeFirstUpdate();
|
|
315
|
+
}
|
|
316
|
+
export async function initDbHandlerIfNeeded(community) {
|
|
317
|
+
if (!community._dbHandler) {
|
|
318
|
+
community._dbHandler = new DbHandler(community);
|
|
319
|
+
await community._dbHandler.initDbConfigIfNeeded();
|
|
320
|
+
community._pageGenerator = new PageGenerator(community);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=db-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-state.js","sourceRoot":"","sources":["../../../../../../src/runtime/browser/community/local-community/db-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CommunityChallengeSetting } from "../../../../community/types.js";
|
|
2
|
+
import type { CommentsTableRow, CommentUpdatesTableRowInsert, CommentUpdateType } from "../../../../publications/comment/types.js";
|
|
3
|
+
export type CommentUpdateToWriteToDbAndPublishToIpfs = {
|
|
4
|
+
newCommentUpdate: CommentUpdateType;
|
|
5
|
+
newCommentUpdateToWriteToDb: CommentUpdatesTableRowInsert;
|
|
6
|
+
localMfsPath: string | undefined;
|
|
7
|
+
pendingApproval: CommentsTableRow["pendingApproval"];
|
|
8
|
+
};
|
|
9
|
+
export declare const DUPLICATE_PUBLICATION_ERRORS: Set<string>;
|
|
10
|
+
export declare const defaultChallengeQuestionText = "What is the answer to this community's challenge? (check community.settings.challenges to see the answer, or set your own challenge)";
|
|
11
|
+
export declare function generateDefaultChallenges(answer?: string): CommunityChallengeSetting[];
|
|
12
|
+
export declare function isDefaultChallengeStructure(challenges: CommunityChallengeSetting[] | undefined): boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { v4 as uuidV4 } from "uuid";
|
|
2
|
+
import { messages } from "../../../../errors.js";
|
|
3
|
+
export const DUPLICATE_PUBLICATION_ERRORS = new Set([
|
|
4
|
+
messages.ERR_DUPLICATE_COMMENT,
|
|
5
|
+
messages.ERR_DUPLICATE_COMMENT_EDIT,
|
|
6
|
+
messages.ERR_DUPLICATE_COMMENT_MODERATION
|
|
7
|
+
]);
|
|
8
|
+
export const defaultChallengeQuestionText = "What is the answer to this community's challenge? (check community.settings.challenges to see the answer, or set your own challenge)";
|
|
9
|
+
export function generateDefaultChallenges(answer) {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
name: "question",
|
|
13
|
+
options: {
|
|
14
|
+
question: defaultChallengeQuestionText,
|
|
15
|
+
answer: answer ?? uuidV4()
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
export function isDefaultChallengeStructure(challenges) {
|
|
21
|
+
if (!challenges || challenges.length !== 1)
|
|
22
|
+
return false;
|
|
23
|
+
const c = challenges[0];
|
|
24
|
+
return (c.name === "question" &&
|
|
25
|
+
c.options?.question === defaultChallengeQuestionText &&
|
|
26
|
+
typeof c.options?.answer === "string" &&
|
|
27
|
+
c.options.answer.length > 0);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../../../src/runtime/browser/community/local-community/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AASjD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS;IACxD,QAAQ,CAAC,qBAAqB;IAC9B,QAAQ,CAAC,0BAA0B;IACnC,QAAQ,CAAC,gCAAgC;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GACrC,sIAAsI,CAAC;AAE3I,MAAM,UAAU,yBAAyB,CAAC,MAAe;IACrD,OAAO;QACH;YACI,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE;gBACL,QAAQ,EAAE,4BAA4B;gBACtC,MAAM,EAAE,MAAM,IAAI,MAAM,EAAE;aAC7B;SACJ;KACJ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAAmD;IAC3F,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CACH,CAAC,CAAC,IAAI,KAAK,UAAU;QACrB,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,4BAA4B;QACpD,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ;QACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAC9B,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Logger from "../../../../logger.js";
|
|
2
|
+
import type { CommunityEditOptions, InternalCommunityRecordAfterFirstUpdateType, ParsedCommunityEditOptions } from "../../../../community/types.js";
|
|
3
|
+
import type { LocalCommunity } from "../local-community.js";
|
|
4
|
+
export declare function movePostUpdatesFolderToNewAddress(community: LocalCommunity, oldAddress: string, newAddress: string): Promise<void>;
|
|
5
|
+
export declare function parseRolesToEdit(community: LocalCommunity, newRawRoles: NonNullable<CommunityEditOptions["roles"]>): Promise<NonNullable<InternalCommunityRecordAfterFirstUpdateType["roles"]>>;
|
|
6
|
+
export declare function parseChallengesToEdit(community: LocalCommunity, newChallengeSettings: NonNullable<NonNullable<CommunityEditOptions["settings"]>["challenges"]>): Promise<NonNullable<Pick<InternalCommunityRecordAfterFirstUpdateType, "challenges" | "_usingDefaultChallenge">>>;
|
|
7
|
+
export declare function validateNewAddressBeforeEditing(community: LocalCommunity, newAddress: string, log: Logger): Promise<void>;
|
|
8
|
+
export declare function editPropsOnStartedCommunity(community: LocalCommunity, parsedEditOptions: ParsedCommunityEditOptions): Promise<LocalCommunity>;
|
|
9
|
+
export declare function editPropsOnNotStartedCommunity(community: LocalCommunity, parsedEditOptions: ParsedCommunityEditOptions): Promise<LocalCommunity>;
|
|
10
|
+
export declare function edit(community: LocalCommunity, newCommunityOptions: CommunityEditOptions): Promise<LocalCommunity>;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import Logger from "../../../../logger.js";
|
|
2
|
+
import * as remeda from "remeda";
|
|
3
|
+
import { stringify as deterministicStringify } from "safe-stable-stringify";
|
|
4
|
+
import { sha256 } from "js-sha256";
|
|
5
|
+
import { areEquivalentCommunityAddresses, doesDomainAddressHaveCapitalLetter, isStringDomain } from "../../../../util.js";
|
|
6
|
+
import { PKCError } from "../../../../pkc-error.js";
|
|
7
|
+
import { parseCommunityEditOptionsSchemaWithPKCErrorIfItFails } from "../../../../schema/schema-util.js";
|
|
8
|
+
import { findCommunityInRegistry, findStartedCommunity, syncCommunityRegistryEntry, trackStartedCommunity } from "../../../../pkc/tracked-instance-registry-util.js";
|
|
9
|
+
import { getCommunityChallengeFromCommunityChallengeSettings } from "../challenges/index.js";
|
|
10
|
+
import { isDefaultChallengeStructure } from "./defaults.js";
|
|
11
|
+
import { processStartedCommunities } from "./registry.js";
|
|
12
|
+
import { updateDbInternalState, updateInstancePropsWithStartedCommunityOrDb } from "./db-state.js";
|
|
13
|
+
export async function movePostUpdatesFolderToNewAddress(community, oldAddress, newAddress) {
|
|
14
|
+
const log = Logger("pkc-js:local-community:_movePostUpdatesFolderToNewAddress");
|
|
15
|
+
const kuboRpc = community._clientsManager.getDefaultKuboRpcClient();
|
|
16
|
+
try {
|
|
17
|
+
await kuboRpc._client.files.mv(`/${oldAddress}`, `/${newAddress}`); // Could throw
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
if (e instanceof Error && e.message !== "file does not exist") {
|
|
21
|
+
log.error("Failed to move directory of post updates in MFS", community.address, e);
|
|
22
|
+
throw e; // A critical error
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function parseRolesToEdit(community, newRawRoles) {
|
|
27
|
+
for (const [roleAddress, roleValue] of Object.entries(newRawRoles)) {
|
|
28
|
+
if (roleValue === undefined || roleValue === null)
|
|
29
|
+
continue; // skip removals
|
|
30
|
+
// Use community._clientsManager (not community._pkc) so nameResolver state changes emit on the community's clients
|
|
31
|
+
if (isStringDomain(roleAddress)) {
|
|
32
|
+
let resolved;
|
|
33
|
+
try {
|
|
34
|
+
({ resolvedAuthorName: resolved } = await community._clientsManager.resolveAuthorNameIfNeeded({
|
|
35
|
+
authorName: roleAddress,
|
|
36
|
+
abortSignal: AbortSignal.timeout(community._pkc._timeouts["resolve-author-name"]),
|
|
37
|
+
// Role edits must apply to current state — bypass cache.
|
|
38
|
+
cache: { maxAge: 0 }
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
resolved = null;
|
|
43
|
+
}
|
|
44
|
+
if (!resolved)
|
|
45
|
+
throw new PKCError("ERR_ROLE_ADDRESS_NAME_COULD_NOT_BE_RESOLVED", { roleAddress });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return remeda.omitBy(newRawRoles, (val, key) => val === undefined || val === null);
|
|
49
|
+
}
|
|
50
|
+
export async function parseChallengesToEdit(community, newChallengeSettings) {
|
|
51
|
+
return {
|
|
52
|
+
challenges: await Promise.all(newChallengeSettings.map(async (cs) => (await getCommunityChallengeFromCommunityChallengeSettings({ communityChallengeSettings: cs, pkc: community._pkc }))
|
|
53
|
+
.communityChallenge)),
|
|
54
|
+
_usingDefaultChallenge: isDefaultChallengeStructure(newChallengeSettings)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export async function validateNewAddressBeforeEditing(community, newAddress, log) {
|
|
58
|
+
if (doesDomainAddressHaveCapitalLetter(newAddress))
|
|
59
|
+
throw new PKCError("ERR_COMMUNITY_NAME_HAS_CAPITAL_LETTER", { communityAddress: newAddress });
|
|
60
|
+
// Check if any existing community (other than this one) already has an equivalent address
|
|
61
|
+
// This handles both exact matches and .eth/.bso alias equivalence
|
|
62
|
+
const existingEquivalent = community._pkc.communities.find((existing) => areEquivalentCommunityAddresses(existing, newAddress) && !areEquivalentCommunityAddresses(existing, community.address));
|
|
63
|
+
if (existingEquivalent)
|
|
64
|
+
throw new PKCError("ERR_COMMUNITY_OWNER_ATTEMPTED_EDIT_NEW_ADDRESS_THAT_ALREADY_EXISTS", {
|
|
65
|
+
currentCommunityAddress: community.address,
|
|
66
|
+
newCommunityAddress: newAddress,
|
|
67
|
+
currentSubs: community._pkc.communities
|
|
68
|
+
});
|
|
69
|
+
community._assertDomainResolvesCorrectly(newAddress).catch((err) => {
|
|
70
|
+
log.error(err);
|
|
71
|
+
community.emit("error", err);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export async function editPropsOnStartedCommunity(community, parsedEditOptions) {
|
|
75
|
+
// 'community' is the started community with state="started"
|
|
76
|
+
// community._pkc._startedCommunities[community.address] === community
|
|
77
|
+
const log = Logger("pkc-js:local-community:start:editPropsOnStartedCommunity");
|
|
78
|
+
const oldAddress = remeda.clone(community.address);
|
|
79
|
+
if (typeof parsedEditOptions.address === "string" && community.address !== parsedEditOptions.address) {
|
|
80
|
+
await validateNewAddressBeforeEditing(community, parsedEditOptions.address, log);
|
|
81
|
+
log(`Attempting to edit community.address from ${oldAddress} to ${parsedEditOptions.address}. We will stop community first`);
|
|
82
|
+
await community.stop();
|
|
83
|
+
await community._dbHandler.changeDbFilename(oldAddress, parsedEditOptions.address);
|
|
84
|
+
community.setAddress(parsedEditOptions.address);
|
|
85
|
+
await community._dbHandler.initDbIfNeeded();
|
|
86
|
+
await community.start();
|
|
87
|
+
await movePostUpdatesFolderToNewAddress(community, oldAddress, parsedEditOptions.address);
|
|
88
|
+
}
|
|
89
|
+
const uniqueEditId = sha256(deterministicStringify(parsedEditOptions));
|
|
90
|
+
community._pendingEditProps.push({ ...parsedEditOptions, editId: uniqueEditId });
|
|
91
|
+
if (community.updateCid)
|
|
92
|
+
await community.initInternalCommunityAfterFirstUpdateNoMerge({
|
|
93
|
+
...community.toJSONInternalAfterFirstUpdate(),
|
|
94
|
+
...parsedEditOptions,
|
|
95
|
+
_internalStateUpdateId: uniqueEditId
|
|
96
|
+
});
|
|
97
|
+
else
|
|
98
|
+
await community.initInternalCommunityBeforeFirstUpdateNoMerge({
|
|
99
|
+
...community.toJSONInternalBeforeFirstUpdate(),
|
|
100
|
+
...parsedEditOptions,
|
|
101
|
+
_internalStateUpdateId: uniqueEditId
|
|
102
|
+
});
|
|
103
|
+
community._communityUpdateTrigger = true;
|
|
104
|
+
log(`Community (${community.address}) props (${remeda.keys.strict(parsedEditOptions)}) has been edited. Will be including edited props in next update: `, remeda.pick(community, remeda.keys.strict(parsedEditOptions)));
|
|
105
|
+
community.emit("update", community);
|
|
106
|
+
if (community.address !== oldAddress) {
|
|
107
|
+
trackStartedCommunity(community._pkc, community);
|
|
108
|
+
syncCommunityRegistryEntry(processStartedCommunities, community);
|
|
109
|
+
}
|
|
110
|
+
return community;
|
|
111
|
+
}
|
|
112
|
+
export async function editPropsOnNotStartedCommunity(community, parsedEditOptions) {
|
|
113
|
+
// sceneario 3, the community is not running anywhere, we need to edit the db and update this instance
|
|
114
|
+
const log = Logger("pkc-js:local-community:edit:editPropsOnNotStartedCommunity");
|
|
115
|
+
const oldAddress = remeda.clone(community.address);
|
|
116
|
+
await community.initDbHandlerIfNeeded();
|
|
117
|
+
await community._dbHandler.initDbIfNeeded();
|
|
118
|
+
if (typeof parsedEditOptions.address === "string" && community.address !== parsedEditOptions.address) {
|
|
119
|
+
await validateNewAddressBeforeEditing(community, parsedEditOptions.address, log);
|
|
120
|
+
log(`Attempting to edit community.address from ${oldAddress} to ${parsedEditOptions.address}`);
|
|
121
|
+
// in this sceneario we're editing a community that's not started anywhere
|
|
122
|
+
log("will rename the community", community.address, "db in edit() because the community is not being ran anywhere else");
|
|
123
|
+
await movePostUpdatesFolderToNewAddress(community, community.address, parsedEditOptions.address);
|
|
124
|
+
community._dbHandler.destoryConnection();
|
|
125
|
+
await community._dbHandler.changeDbFilename(community.address, parsedEditOptions.address);
|
|
126
|
+
await community._dbHandler.initDbIfNeeded();
|
|
127
|
+
community.setAddress(parsedEditOptions.address);
|
|
128
|
+
}
|
|
129
|
+
const mergedInternalState = await updateDbInternalState(community, parsedEditOptions);
|
|
130
|
+
if ("updatedAt" in mergedInternalState && mergedInternalState.updatedAt)
|
|
131
|
+
await community.initInternalCommunityAfterFirstUpdateNoMerge(mergedInternalState);
|
|
132
|
+
else
|
|
133
|
+
await community.initInternalCommunityBeforeFirstUpdateNoMerge(mergedInternalState);
|
|
134
|
+
await community._dbHandler.destoryConnection();
|
|
135
|
+
community.emit("update", community);
|
|
136
|
+
return community;
|
|
137
|
+
}
|
|
138
|
+
export async function edit(community, newCommunityOptions) {
|
|
139
|
+
// scenearios
|
|
140
|
+
// 1 - calling edit() on a community instance that's not running, but the it's started in pkc._startedCommunities (should edit the started community)
|
|
141
|
+
// 2 - calling edit() on a community that's started in another process (should throw)
|
|
142
|
+
// 3 - calling edit() on a community that's not started (should load db and edit it)
|
|
143
|
+
// 4 - calling edit() on the community that's started (should edit the started community)
|
|
144
|
+
const startedCommunity = ((findStartedCommunity(community._pkc, { publicKey: community.publicKey, name: community.name }) ||
|
|
145
|
+
findCommunityInRegistry(processStartedCommunities, { publicKey: community.publicKey, name: community.name })));
|
|
146
|
+
if (startedCommunity && community.state !== "started") {
|
|
147
|
+
// sceneario 1
|
|
148
|
+
const editRes = await startedCommunity.edit(newCommunityOptions);
|
|
149
|
+
community.setAddress(editRes.address); // need to force an update of the address for this instance
|
|
150
|
+
await updateInstancePropsWithStartedCommunityOrDb(community);
|
|
151
|
+
return community;
|
|
152
|
+
}
|
|
153
|
+
await community.initDbHandlerIfNeeded();
|
|
154
|
+
await community._updateStartedValue();
|
|
155
|
+
if (community.started && community.state !== "started") {
|
|
156
|
+
// sceneario 2
|
|
157
|
+
community._dbHandler.destoryConnection();
|
|
158
|
+
throw new PKCError("ERR_CAN_NOT_EDIT_A_LOCAL_COMMUNITY_THAT_IS_ALREADY_STARTED_IN_ANOTHER_PROCESS", {
|
|
159
|
+
address: community.address,
|
|
160
|
+
dataPath: community._pkc.dataPath
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
const parsedEditOptions = parseCommunityEditOptionsSchemaWithPKCErrorIfItFails(newCommunityOptions);
|
|
164
|
+
// Convert backward-compat address → name for wire format when address is a domain
|
|
165
|
+
const editWithDerivedName = typeof parsedEditOptions.address === "string" && isStringDomain(parsedEditOptions.address)
|
|
166
|
+
? { ...parsedEditOptions, name: parsedEditOptions.address }
|
|
167
|
+
: parsedEditOptions;
|
|
168
|
+
const newInternalProps = {
|
|
169
|
+
...(editWithDerivedName.roles ? { roles: await parseRolesToEdit(community, editWithDerivedName.roles) } : undefined),
|
|
170
|
+
...(editWithDerivedName?.settings?.challenges
|
|
171
|
+
? await parseChallengesToEdit(community, editWithDerivedName.settings.challenges)
|
|
172
|
+
: undefined)
|
|
173
|
+
};
|
|
174
|
+
const newProps = {
|
|
175
|
+
...remeda.omit(editWithDerivedName, ["roles"]), // we omit here to make tsc shut up
|
|
176
|
+
...newInternalProps
|
|
177
|
+
};
|
|
178
|
+
if (!community.started && !startedCommunity) {
|
|
179
|
+
// sceneario 3
|
|
180
|
+
return editPropsOnNotStartedCommunity(community, newProps);
|
|
181
|
+
}
|
|
182
|
+
if (findStartedCommunity(community._pkc, { publicKey: community.publicKey, name: community.name }) === community) {
|
|
183
|
+
// sceneario 4
|
|
184
|
+
return editPropsOnStartedCommunity(community, newProps);
|
|
185
|
+
}
|
|
186
|
+
throw new Error("Can't edit a community that's started in another process");
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=editing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editing.js","sourceRoot":"","sources":["../../../../../../src/runtime/browser/community/local-community/editing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CommunityIpfsType } from "../../../../community/types.js";
|
|
2
|
+
import type { CommentUpdateType } from "../../../../publications/comment/types.js";
|
|
3
|
+
import type { LocalCommunity } from "../local-community.js";
|
|
4
|
+
import type { CommentUpdateToWriteToDbAndPublishToIpfs } from "./defaults.js";
|
|
5
|
+
export declare function calculateNewPostUpdates(community: LocalCommunity): Promise<CommunityIpfsType["postUpdates"]>;
|
|
6
|
+
export declare function calculateLatestUpdateTrigger(community: LocalCommunity): void;
|
|
7
|
+
export declare function requireCommunityUpdateIfModQueueChanged(community: LocalCommunity): void;
|
|
8
|
+
export declare function resolveIpnsAndLogIfPotentialProblematicSequence(community: LocalCommunity): Promise<void>;
|
|
9
|
+
export declare function addOldPageCidsToCidsToUnpin(community: LocalCommunity, curPages: CommentUpdateType["replies"] | CommunityIpfsType["posts"] | CommunityIpfsType["modQueue"], newPages: CommentUpdateType["replies"] | CommunityIpfsType["posts"] | CommunityIpfsType["modQueue"], addToBlockRm?: boolean): Promise<void>;
|
|
10
|
+
export declare function shouldResolveDomainForVerification(community: LocalCommunity): boolean;
|
|
11
|
+
export declare function updateCommunityIpnsIfNeeded(community: LocalCommunity, commentUpdateRowsToPublishToIpfs: CommentUpdateToWriteToDbAndPublishToIpfs[]): Promise<void>;
|
|
12
|
+
export declare function syncIpnsWithDb(community: LocalCommunity): Promise<void>;
|