@pkcprotocol/pkc-js 0.0.34 → 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.
Files changed (114) hide show
  1. package/README.md +18 -0
  2. package/dist/browser/community/remote-community.d.ts +3 -3
  3. package/dist/browser/community/remote-community.js.map +1 -1
  4. package/dist/browser/generated-version.d.ts +1 -1
  5. package/dist/browser/generated-version.js +1 -1
  6. package/dist/browser/helia/helia-for-pkc.js +30 -12
  7. package/dist/browser/helia/helia-for-pkc.js.map +1 -1
  8. package/dist/browser/helia/util.js +142 -42
  9. package/dist/browser/helia/util.js.map +1 -1
  10. package/dist/browser/pkc/pkc.js +3 -3
  11. package/dist/browser/pkc/pkc.js.map +1 -1
  12. package/dist/browser/runtime/browser/community/local-community.d.ts +2 -0
  13. package/dist/browser/runtime/browser/community/local-community.js +6 -0
  14. package/dist/browser/runtime/browser/community/local-community.js.map +1 -1
  15. package/dist/browser/runtime/node/community/db-handler.js +6 -4
  16. package/dist/browser/runtime/node/community/db-handler.js.map +1 -1
  17. package/dist/browser/runtime/node/community/local-community/challenges.d.ts +26 -0
  18. package/dist/browser/runtime/node/community/local-community/challenges.js +519 -0
  19. package/dist/browser/runtime/node/community/local-community/challenges.js.map +1 -0
  20. package/dist/browser/runtime/node/community/local-community/cleanup.d.ts +9 -0
  21. package/dist/browser/runtime/node/community/local-community/cleanup.js +165 -0
  22. package/dist/browser/runtime/node/community/local-community/cleanup.js.map +1 -0
  23. package/dist/browser/runtime/node/community/local-community/comment-updates.d.ts +11 -0
  24. package/dist/browser/runtime/node/community/local-community/comment-updates.js +218 -0
  25. package/dist/browser/runtime/node/community/local-community/comment-updates.js.map +1 -0
  26. package/dist/browser/runtime/node/community/local-community/db-state.d.ts +15 -0
  27. package/dist/browser/runtime/node/community/local-community/db-state.js +323 -0
  28. package/dist/browser/runtime/node/community/local-community/db-state.js.map +1 -0
  29. package/dist/browser/runtime/node/community/local-community/defaults.d.ts +12 -0
  30. package/dist/browser/runtime/node/community/local-community/defaults.js +29 -0
  31. package/dist/browser/runtime/node/community/local-community/defaults.js.map +1 -0
  32. package/dist/browser/runtime/node/community/local-community/editing.d.ts +10 -0
  33. package/dist/browser/runtime/node/community/local-community/editing.js +188 -0
  34. package/dist/browser/runtime/node/community/local-community/editing.js.map +1 -0
  35. package/dist/browser/runtime/node/community/local-community/ipns-publishing.d.ts +12 -0
  36. package/dist/browser/runtime/node/community/local-community/ipns-publishing.js +340 -0
  37. package/dist/browser/runtime/node/community/local-community/ipns-publishing.js.map +1 -0
  38. package/dist/browser/runtime/node/community/local-community/lifecycle.d.ts +11 -0
  39. package/dist/browser/runtime/node/community/local-community/lifecycle.js +428 -0
  40. package/dist/browser/runtime/node/community/local-community/lifecycle.js.map +1 -0
  41. package/dist/browser/runtime/node/community/local-community/publication-store.d.ts +100 -0
  42. package/dist/browser/runtime/node/community/local-community/publication-store.js +395 -0
  43. package/dist/browser/runtime/node/community/local-community/publication-store.js.map +1 -0
  44. package/dist/browser/runtime/node/community/local-community/publication-validation.d.ts +9 -0
  45. package/dist/browser/runtime/node/community/local-community/publication-validation.js +493 -0
  46. package/dist/browser/runtime/node/community/local-community/publication-validation.js.map +1 -0
  47. package/dist/browser/runtime/node/community/local-community/pubsub.d.ts +3 -0
  48. package/dist/browser/runtime/node/community/local-community/pubsub.js +43 -0
  49. package/dist/browser/runtime/node/community/local-community/pubsub.js.map +1 -0
  50. package/dist/browser/runtime/node/community/local-community/registry.d.ts +3 -0
  51. package/dist/browser/runtime/node/community/local-community/registry.js +4 -0
  52. package/dist/browser/runtime/node/community/local-community/registry.js.map +1 -0
  53. package/dist/browser/runtime/node/community/local-community.d.ts +68 -105
  54. package/dist/browser/runtime/node/community/local-community.js +127 -2927
  55. package/dist/browser/runtime/node/community/local-community.js.map +1 -1
  56. package/dist/browser/test/test-util.js +0 -1
  57. package/dist/browser/test/test-util.js.map +1 -1
  58. package/dist/node/community/remote-community.d.ts +3 -3
  59. package/dist/node/community/remote-community.js.map +1 -1
  60. package/dist/node/generated-version.d.ts +1 -1
  61. package/dist/node/generated-version.js +1 -1
  62. package/dist/node/helia/helia-for-pkc.js +30 -12
  63. package/dist/node/helia/helia-for-pkc.js.map +1 -1
  64. package/dist/node/helia/util.js +142 -42
  65. package/dist/node/helia/util.js.map +1 -1
  66. package/dist/node/pkc/pkc.js +3 -3
  67. package/dist/node/pkc/pkc.js.map +1 -1
  68. package/dist/node/runtime/browser/community/local-community.d.ts +2 -0
  69. package/dist/node/runtime/browser/community/local-community.js +6 -0
  70. package/dist/node/runtime/browser/community/local-community.js.map +1 -1
  71. package/dist/node/runtime/node/community/db-handler.js +6 -4
  72. package/dist/node/runtime/node/community/db-handler.js.map +1 -1
  73. package/dist/node/runtime/node/community/local-community/challenges.d.ts +26 -0
  74. package/dist/node/runtime/node/community/local-community/challenges.js +519 -0
  75. package/dist/node/runtime/node/community/local-community/challenges.js.map +1 -0
  76. package/dist/node/runtime/node/community/local-community/cleanup.d.ts +9 -0
  77. package/dist/node/runtime/node/community/local-community/cleanup.js +165 -0
  78. package/dist/node/runtime/node/community/local-community/cleanup.js.map +1 -0
  79. package/dist/node/runtime/node/community/local-community/comment-updates.d.ts +11 -0
  80. package/dist/node/runtime/node/community/local-community/comment-updates.js +218 -0
  81. package/dist/node/runtime/node/community/local-community/comment-updates.js.map +1 -0
  82. package/dist/node/runtime/node/community/local-community/db-state.d.ts +15 -0
  83. package/dist/node/runtime/node/community/local-community/db-state.js +323 -0
  84. package/dist/node/runtime/node/community/local-community/db-state.js.map +1 -0
  85. package/dist/node/runtime/node/community/local-community/defaults.d.ts +12 -0
  86. package/dist/node/runtime/node/community/local-community/defaults.js +29 -0
  87. package/dist/node/runtime/node/community/local-community/defaults.js.map +1 -0
  88. package/dist/node/runtime/node/community/local-community/editing.d.ts +10 -0
  89. package/dist/node/runtime/node/community/local-community/editing.js +188 -0
  90. package/dist/node/runtime/node/community/local-community/editing.js.map +1 -0
  91. package/dist/node/runtime/node/community/local-community/ipns-publishing.d.ts +12 -0
  92. package/dist/node/runtime/node/community/local-community/ipns-publishing.js +340 -0
  93. package/dist/node/runtime/node/community/local-community/ipns-publishing.js.map +1 -0
  94. package/dist/node/runtime/node/community/local-community/lifecycle.d.ts +11 -0
  95. package/dist/node/runtime/node/community/local-community/lifecycle.js +428 -0
  96. package/dist/node/runtime/node/community/local-community/lifecycle.js.map +1 -0
  97. package/dist/node/runtime/node/community/local-community/publication-store.d.ts +100 -0
  98. package/dist/node/runtime/node/community/local-community/publication-store.js +395 -0
  99. package/dist/node/runtime/node/community/local-community/publication-store.js.map +1 -0
  100. package/dist/node/runtime/node/community/local-community/publication-validation.d.ts +9 -0
  101. package/dist/node/runtime/node/community/local-community/publication-validation.js +493 -0
  102. package/dist/node/runtime/node/community/local-community/publication-validation.js.map +1 -0
  103. package/dist/node/runtime/node/community/local-community/pubsub.d.ts +3 -0
  104. package/dist/node/runtime/node/community/local-community/pubsub.js +43 -0
  105. package/dist/node/runtime/node/community/local-community/pubsub.js.map +1 -0
  106. package/dist/node/runtime/node/community/local-community/registry.d.ts +3 -0
  107. package/dist/node/runtime/node/community/local-community/registry.js +4 -0
  108. package/dist/node/runtime/node/community/local-community/registry.js.map +1 -0
  109. package/dist/node/runtime/node/community/local-community.d.ts +68 -105
  110. package/dist/node/runtime/node/community/local-community.js +127 -2927
  111. package/dist/node/runtime/node/community/local-community.js.map +1 -1
  112. package/dist/node/test/test-util.js +0 -1
  113. package/dist/node/test/test-util.js.map +1 -1
  114. 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>;