@pkcprotocol/pkc-js 0.0.96 → 0.0.98

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 (29) hide show
  1. package/dist/browser/generated-version.d.ts +1 -1
  2. package/dist/browser/generated-version.js +1 -1
  3. package/dist/browser/runtime/node/community/local-community/cleanup.d.ts +1 -0
  4. package/dist/browser/runtime/node/community/local-community/cleanup.js +33 -11
  5. package/dist/browser/runtime/node/community/local-community/cleanup.js.map +1 -1
  6. package/dist/browser/runtime/node/community/local-community/ipns-publishing.js +31 -8
  7. package/dist/browser/runtime/node/community/local-community/ipns-publishing.js.map +1 -1
  8. package/dist/browser/runtime/node/community/local-community/publication-store.js +12 -1
  9. package/dist/browser/runtime/node/community/local-community/publication-store.js.map +1 -1
  10. package/dist/bundled/bundle-manifest.json +31 -31
  11. package/dist/bundled/chunks/{helia-for-pkc-CmSUHQVn.js → helia-for-pkc-CHv28C49.js} +33 -33
  12. package/dist/bundled/chunks/{local-community-DVG9tyIW.js → local-community-Dslc-qve.js} +1 -1
  13. package/dist/bundled/chunks/{local-community-DK5HhKZf.js → local-community-QnF2Xg4Q.js} +52 -41
  14. package/dist/bundled/chunks/{node-CyXajPvJ.js → node-B1frjYEE.js} +5 -5
  15. package/dist/bundled/chunks/{rpc-local-community-CdG4JLzO.js → rpc-local-community-BUicljzl.js} +1 -1
  16. package/dist/bundled/chunks/{schema-BIik7LGj.js → schema-KFikvQok.js} +1 -1
  17. package/dist/bundled/chunks/{util-y_hIxyCS.js → util-b2CRgd4P.js} +1 -1
  18. package/dist/bundled/index.js +1 -1
  19. package/dist/bundled/rpc/src/index.js +4 -4
  20. package/dist/node/generated-version.d.ts +1 -1
  21. package/dist/node/generated-version.js +1 -1
  22. package/dist/node/runtime/node/community/local-community/cleanup.d.ts +1 -0
  23. package/dist/node/runtime/node/community/local-community/cleanup.js +33 -11
  24. package/dist/node/runtime/node/community/local-community/cleanup.js.map +1 -1
  25. package/dist/node/runtime/node/community/local-community/ipns-publishing.js +31 -8
  26. package/dist/node/runtime/node/community/local-community/ipns-publishing.js.map +1 -1
  27. package/dist/node/runtime/node/community/local-community/publication-store.js +12 -1
  28. package/dist/node/runtime/node/community/local-community/publication-store.js.map +1 -1
  29. package/package.json +1 -1
@@ -1,12 +1,12 @@
1
1
  import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-2rV9d50f.js";
2
- import { B as ipnsNameToIpnsOverPubsubTopic, R as hideClassPrivateProps, Sr as PKCError, wr as logger_default, x as binaryKeyToPubsubTopic } from "./schema-BIik7LGj.js";
3
- import { a as fetchBlockWithStalledSessionFailover, c as selectBitswapSessionSeedPeers, i as directFetchIpnsRecordFromProviders, n as cacheIpnsRecordInPubsubLocalStore, o as getHeliaDebugContext, r as connectToPubsubPeers, s as readFreshCachedIpnsRecordFromPubsubLocalStore } from "./util-y_hIxyCS.js";
2
+ import { B as ipnsNameToIpnsOverPubsubTopic, R as hideClassPrivateProps, Sr as PKCError, wr as logger_default, x as binaryKeyToPubsubTopic } from "./schema-KFikvQok.js";
3
+ import { a as fetchBlockWithStalledSessionFailover, c as selectBitswapSessionSeedPeers, i as directFetchIpnsRecordFromProviders, n as cacheIpnsRecordInPubsubLocalStore, o as getHeliaDebugContext, r as connectToPubsubPeers, s as readFreshCachedIpnsRecordFromPubsubLocalStore } from "./util-b2CRgd4P.js";
4
4
  import { t as map } from "./src-Cpx2Sts8.js";
5
5
  import { t as parallelBatch } from "./src-DKntVmyX.js";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import fsp, { rename, writeFile } from "node:fs/promises";
8
- import path, { basename, dirname, join } from "node:path";
9
- import path$1 from "path";
8
+ import Path, { basename, dirname, join } from "node:path";
9
+ import path from "path";
10
10
  import { CID } from "multiformats/cid";
11
11
  import { peerIdFromString } from "@libp2p/peer-id";
12
12
  import * as Digest from "multiformats/hashes/digest";
@@ -149,7 +149,7 @@ var require_path = /* @__PURE__ */ __commonJSMin(((exports) => {
149
149
  Object.defineProperty(exports, "__esModule", { value: true });
150
150
  exports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;
151
151
  const os$1 = __require("os");
152
- const path$10 = __require("path");
152
+ const path$9 = __require("path");
153
153
  const IS_WINDOWS_PLATFORM = os$1.platform() === "win32";
154
154
  const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2;
155
155
  /**
@@ -178,7 +178,7 @@ var require_path = /* @__PURE__ */ __commonJSMin(((exports) => {
178
178
  }
179
179
  exports.unixify = unixify;
180
180
  function makeAbsolute(cwd, filepath) {
181
- return path$10.resolve(cwd, filepath);
181
+ return path$9.resolve(cwd, filepath);
182
182
  }
183
183
  exports.makeAbsolute = makeAbsolute;
184
184
  function removeLeadingDotSegment(entry) {
@@ -1430,7 +1430,7 @@ var require_braces = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1430
1430
  //#endregion
1431
1431
  //#region node_modules/picomatch/lib/constants.js
1432
1432
  var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1433
- const path$9 = __require("path");
1433
+ const path$8 = __require("path");
1434
1434
  const WIN_SLASH = "\\\\/";
1435
1435
  const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
1436
1436
  const DEFAULT_MAX_EXTGLOB_RECURSION = 0;
@@ -1555,7 +1555,7 @@ var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1555
1555
  CHAR_UNDERSCORE: 95,
1556
1556
  CHAR_VERTICAL_LINE: 124,
1557
1557
  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
1558
- SEP: path$9.sep,
1558
+ SEP: path$8.sep,
1559
1559
  /**
1560
1560
  * Create EXTGLOB_CHARS
1561
1561
  */
@@ -1599,7 +1599,7 @@ var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1599
1599
  //#endregion
1600
1600
  //#region node_modules/picomatch/lib/utils.js
1601
1601
  var require_utils$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
1602
- const path$8 = __require("path");
1602
+ const path$7 = __require("path");
1603
1603
  const win32 = process.platform === "win32";
1604
1604
  const { REGEX_BACKSLASH, REGEX_REMOVE_BACKSLASH, REGEX_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_GLOBAL } = require_constants$1();
1605
1605
  exports.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
@@ -1619,7 +1619,7 @@ var require_utils$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
1619
1619
  };
1620
1620
  exports.isWindows = (options) => {
1621
1621
  if (options && typeof options.windows === "boolean") return options.windows;
1622
- return win32 === true || path$8.sep === "\\";
1622
+ return win32 === true || path$7.sep === "\\";
1623
1623
  };
1624
1624
  exports.escapeLast = (input, char, lastIdx) => {
1625
1625
  const idx = input.lastIndexOf(char, lastIdx);
@@ -2989,7 +2989,7 @@ var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2989
2989
  //#endregion
2990
2990
  //#region node_modules/picomatch/lib/picomatch.js
2991
2991
  var require_picomatch$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2992
- const path$7 = __require("path");
2992
+ const path$6 = __require("path");
2993
2993
  const scan = require_scan();
2994
2994
  const parse = require_parse();
2995
2995
  const utils = require_utils$2();
@@ -3128,7 +3128,7 @@ var require_picomatch$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3128
3128
  * @api public
3129
3129
  */
3130
3130
  picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
3131
- return (glob instanceof RegExp ? glob : picomatch.makeRe(glob, options)).test(path$7.basename(input));
3131
+ return (glob instanceof RegExp ? glob : picomatch.makeRe(glob, options)).test(path$6.basename(input));
3132
3132
  };
3133
3133
  /**
3134
3134
  * Returns true if **any** of the given glob `patterns` match the specified `string`.
@@ -3683,7 +3683,7 @@ var require_micromatch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3683
3683
  var require_pattern = /* @__PURE__ */ __commonJSMin(((exports) => {
3684
3684
  Object.defineProperty(exports, "__esModule", { value: true });
3685
3685
  exports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;
3686
- const path$6 = __require("path");
3686
+ const path$5 = __require("path");
3687
3687
  const globParent = require_glob_parent();
3688
3688
  const micromatch = require_micromatch();
3689
3689
  const GLOBSTAR = "**";
@@ -3791,7 +3791,7 @@ var require_pattern = /* @__PURE__ */ __commonJSMin(((exports) => {
3791
3791
  }
3792
3792
  exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
3793
3793
  function isAffectDepthOfReadingPattern(pattern) {
3794
- const basename = path$6.basename(pattern);
3794
+ const basename = path$5.basename(pattern);
3795
3795
  return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
3796
3796
  }
3797
3797
  exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
@@ -3865,7 +3865,7 @@ var require_pattern = /* @__PURE__ */ __commonJSMin(((exports) => {
3865
3865
  }
3866
3866
  exports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;
3867
3867
  function isAbsolute(pattern) {
3868
- return path$6.isAbsolute(pattern);
3868
+ return path$5.isAbsolute(pattern);
3869
3869
  }
3870
3870
  exports.isAbsolute = isAbsolute;
3871
3871
  }));
@@ -4493,7 +4493,7 @@ var require_fs = /* @__PURE__ */ __commonJSMin(((exports) => {
4493
4493
  //#region node_modules/@nodelib/fs.scandir/out/settings.js
4494
4494
  var require_settings$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
4495
4495
  Object.defineProperty(exports, "__esModule", { value: true });
4496
- const path$5 = __require("path");
4496
+ const path$4 = __require("path");
4497
4497
  const fsStat = require_out$3();
4498
4498
  const fs = require_fs();
4499
4499
  var Settings = class {
@@ -4501,7 +4501,7 @@ var require_settings$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
4501
4501
  this._options = _options;
4502
4502
  this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
4503
4503
  this.fs = fs.createFileSystemAdapter(this._options.fs);
4504
- this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$5.sep);
4504
+ this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$4.sep);
4505
4505
  this.stats = this._getValue(this._options.stats, false);
4506
4506
  this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
4507
4507
  this.fsStatSettings = new fsStat.Settings({
@@ -5095,7 +5095,7 @@ var require_sync$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
5095
5095
  //#region node_modules/@nodelib/fs.walk/out/settings.js
5096
5096
  var require_settings$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
5097
5097
  Object.defineProperty(exports, "__esModule", { value: true });
5098
- const path$4 = __require("path");
5098
+ const path$3 = __require("path");
5099
5099
  const fsScandir = require_out$2();
5100
5100
  var Settings = class {
5101
5101
  constructor(_options = {}) {
@@ -5105,7 +5105,7 @@ var require_settings$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
5105
5105
  this.deepFilter = this._getValue(this._options.deepFilter, null);
5106
5106
  this.entryFilter = this._getValue(this._options.entryFilter, null);
5107
5107
  this.errorFilter = this._getValue(this._options.errorFilter, null);
5108
- this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$4.sep);
5108
+ this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path$3.sep);
5109
5109
  this.fsScandirSettings = new fsScandir.Settings({
5110
5110
  followSymbolicLinks: this._options.followSymbolicLinks,
5111
5111
  fs: this._options.fs,
@@ -5157,7 +5157,7 @@ var require_out$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
5157
5157
  //#region node_modules/fast-glob/out/readers/reader.js
5158
5158
  var require_reader = /* @__PURE__ */ __commonJSMin(((exports) => {
5159
5159
  Object.defineProperty(exports, "__esModule", { value: true });
5160
- const path$3 = __require("path");
5160
+ const path$2 = __require("path");
5161
5161
  const fsStat = require_out$3();
5162
5162
  const utils = require_utils$1();
5163
5163
  var Reader = class {
@@ -5170,7 +5170,7 @@ var require_reader = /* @__PURE__ */ __commonJSMin(((exports) => {
5170
5170
  });
5171
5171
  }
5172
5172
  _getFullEntryPath(filepath) {
5173
- return path$3.resolve(this._settings.cwd, filepath);
5173
+ return path$2.resolve(this._settings.cwd, filepath);
5174
5174
  }
5175
5175
  _makeEntry(stats, pattern) {
5176
5176
  const entry = {
@@ -5505,7 +5505,7 @@ var require_entry = /* @__PURE__ */ __commonJSMin(((exports) => {
5505
5505
  //#region node_modules/fast-glob/out/providers/provider.js
5506
5506
  var require_provider = /* @__PURE__ */ __commonJSMin(((exports) => {
5507
5507
  Object.defineProperty(exports, "__esModule", { value: true });
5508
- const path$2 = __require("path");
5508
+ const path$1 = __require("path");
5509
5509
  const deep_1 = require_deep();
5510
5510
  const entry_1 = require_entry$1();
5511
5511
  const error_1 = require_error();
@@ -5519,7 +5519,7 @@ var require_provider = /* @__PURE__ */ __commonJSMin(((exports) => {
5519
5519
  this.entryTransformer = new entry_2.default(this._settings);
5520
5520
  }
5521
5521
  _getRootDirectory(task) {
5522
- return path$2.resolve(this._settings.cwd, task.base);
5522
+ return path$1.resolve(this._settings.cwd, task.base);
5523
5523
  }
5524
5524
  _getReaderOptions(task) {
5525
5525
  const basePath = task.base === "." ? "" : task.base;
@@ -5850,7 +5850,7 @@ var import_out = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((export
5850
5850
  * Async iterable filename pattern matcher
5851
5851
  */
5852
5852
  async function* glob(dir, pattern, options = {}) {
5853
- const absoluteDir = path.resolve(dir);
5853
+ const absoluteDir = Path.resolve(dir);
5854
5854
  const stats = await fsp.stat(absoluteDir);
5855
5855
  for await (const entry of import_out.default.stream(pattern, {
5856
5856
  ...options,
@@ -6020,7 +6020,7 @@ var NextToLast = class {
6020
6020
  };
6021
6021
  }
6022
6022
  decode(str) {
6023
- let fileName = path.basename(str);
6023
+ let fileName = Path.basename(str);
6024
6024
  if (fileName.endsWith(this.extension)) fileName = fileName.substring(0, fileName.length - this.extension.length);
6025
6025
  return CID.decode(this.base.decoder.decode(fileName));
6026
6026
  }
@@ -6046,7 +6046,7 @@ var NextToLast = class {
6046
6046
  async function writeFile$1(file, contents, options) {
6047
6047
  try {
6048
6048
  options?.signal?.throwIfAborted();
6049
- await raceSignal(fsp.mkdir(path.dirname(file), { recursive: true }), options?.signal);
6049
+ await raceSignal(fsp.mkdir(Path.dirname(file), { recursive: true }), options?.signal);
6050
6050
  const writer = new Writer(file);
6051
6051
  options?.signal?.throwIfAborted();
6052
6052
  await writer.write(contents);
@@ -6071,7 +6071,7 @@ var FsBlockstore = class {
6071
6071
  deleteManyConcurrency;
6072
6072
  shardingStrategy;
6073
6073
  constructor(location, init = {}) {
6074
- this.path = path.resolve(location);
6074
+ this.path = Path.resolve(location);
6075
6075
  this.createIfMissing = init.createIfMissing ?? true;
6076
6076
  this.errorIfExists = init.errorIfExists ?? false;
6077
6077
  this.deleteManyConcurrency = init.deleteManyConcurrency ?? 50;
@@ -6097,7 +6097,7 @@ var FsBlockstore = class {
6097
6097
  async put(key, val, options) {
6098
6098
  const { dir, file } = this.shardingStrategy.encode(key);
6099
6099
  try {
6100
- await writeFile$1(path.join(this.path, dir, file), val, options);
6100
+ await writeFile$1(Path.join(this.path, dir, file), val, options);
6101
6101
  return key;
6102
6102
  } catch (err) {
6103
6103
  throw new PutFailedError(String(err));
@@ -6116,7 +6116,7 @@ var FsBlockstore = class {
6116
6116
  let handle;
6117
6117
  try {
6118
6118
  options?.signal?.throwIfAborted();
6119
- handle = await raceSignal(fsp.open(path.join(this.path, dir, file)), options?.signal);
6119
+ handle = await raceSignal(fsp.open(Path.join(this.path, dir, file)), options?.signal);
6120
6120
  yield* handle.createReadStream();
6121
6121
  } catch (err) {
6122
6122
  if (handle != null) await raceSignal(handle.close(), options?.signal);
@@ -6137,7 +6137,7 @@ var FsBlockstore = class {
6137
6137
  const { dir, file } = this.shardingStrategy.encode(key);
6138
6138
  try {
6139
6139
  options?.signal?.throwIfAborted();
6140
- await raceSignal(fsp.unlink(path.join(this.path, dir, file)), options?.signal);
6140
+ await raceSignal(fsp.unlink(Path.join(this.path, dir, file)), options?.signal);
6141
6141
  } catch (err) {
6142
6142
  if (err.code === "ENOENT") return;
6143
6143
  throw new DeleteFailedError(String(err));
@@ -6155,14 +6155,14 @@ var FsBlockstore = class {
6155
6155
  const { dir, file } = this.shardingStrategy.encode(key);
6156
6156
  try {
6157
6157
  options?.signal?.throwIfAborted();
6158
- await raceSignal(fsp.access(path.join(this.path, dir, file)), options?.signal);
6158
+ await raceSignal(fsp.access(Path.join(this.path, dir, file)), options?.signal);
6159
6159
  } catch (err) {
6160
6160
  return false;
6161
6161
  }
6162
6162
  return true;
6163
6163
  }
6164
6164
  async *getAll(options) {
6165
- const pattern = `**/*${this.shardingStrategy.extension}`.split(path.sep).join("/");
6165
+ const pattern = `**/*${this.shardingStrategy.extension}`.split(Path.sep).join("/");
6166
6166
  const files = glob(this.path, pattern, { absolute: true });
6167
6167
  for await (const file of files) try {
6168
6168
  options?.signal?.throwIfAborted();
@@ -6214,7 +6214,7 @@ async function createBlockstoreForLibp2pJsClient({ dataPath, key }) {
6214
6214
  defaultMaxBytes: DEFAULT_IN_MEMORY_BLOCKSTORE_MAX_BYTES,
6215
6215
  close: async () => {}
6216
6216
  };
6217
- const store = new FsBlockstore(path$1.join(dataPath, "blockstore", key));
6217
+ const store = new FsBlockstore(path.join(dataPath, "blockstore", key));
6218
6218
  await store.open();
6219
6219
  return {
6220
6220
  blockstore: store,
@@ -1,2 +1,2 @@
1
- import { n as createNewLocalCommunityDb, r as updateInstancePropsWithStartedCommunityOrDb, t as LocalCommunity } from "./local-community-DK5HhKZf.js";
1
+ import { n as createNewLocalCommunityDb, r as updateInstancePropsWithStartedCommunityOrDb, t as LocalCommunity } from "./local-community-QnF2Xg4Q.js";
2
2
  export { LocalCommunity, createNewLocalCommunityDb, updateInstancePropsWithStartedCommunityOrDb };
@@ -1,12 +1,12 @@
1
1
  import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-2rV9d50f.js";
2
- import { A as doesDomainAddressHaveCapitalLetter, B as ipnsNameToIpnsOverPubsubTopic, Bn as CommentEditPubsubMessagePublicationSchema, Bt as require_sha256, C as calculateStringSizeSameAsIpfsAddCidV0, Cn as CommentIpfsSchema, Cr as messages, Ct as writeKuboFilesWithTimeout, Dt as findUpdatingCommunity, E as contentContainsMarkdownVideos, F as getErrorCodeFromMessage, Hn as CommentEditReservedFields, I as getIpnsRecordInLocalKuboNode, It as trackUpdatingCommunity, J as isLinkOfImage, Jn as AuthorReservedFields, K as isLinkOfAnimatedImage, Lr as ZodError, Lt as untrackStartedCommunity, N as genToArray, Nn as CommentUpdateTableRowSchema, Nt as syncCommunityRegistryEntry, P as getEquivalentCommunityAddresses, Pn as CommentsTableRowSchema, Pt as trackStartedCommunity, Qt as CommentModerationsTableRowSchema, R as hideClassPrivateProps, S as calculateIpfsCidV0, Sr as PKCError, T as contentContainsMarkdownImages, Tt as findStartedCommunity, Vn as CommentEditPubsubMessagePublicationWithFlexibleAuthorSchema, Wn as CommentEditsTableRowSchema, Wt as CommunityEditPublicationPubsubReservedFields, X as isLinkOfVideo, Xt as CommentModerationReservedFields, Y as isLinkOfMedia, Yt as CommentModerationPubsubMessagePublicationSchema, Z as isLinkValid, _n as VotePubsubMessagePublicationSchema, a as ChallengeRequestMessageSchema, ar as t$6, b as areEquivalentCommunityAddresses, bn as VoteTablesRowSchema, cn as CommunitySignedPropertyNames, d as DecryptedChallengeRequestSchema, et as isStringDomain, gr as require_retry, ht as retryKuboIpfsAddAndProvide, ir as t$7, jn as CommentUpdateSchema, k as derivePublicationFromChallengeRequest, lr as r$1, lt as removeNullUndefinedValues, mr as t$3, nr as t$8, or as e, ot as removeBlocksFromKuboNode, pr as t$5, pt as retryKuboBlockPutPinAndProvidePubsubTopic, q as isLinkOfAudio, r as ChallengeMessageSchema, rr as n$3, s as ChallengeVerificationMessageSchema, sn as CommunityIpfsSchema, sr as e$1, st as removeMfsFilesSafely, t as ChallengeAnswerMessageSchema, tr as n$4, tt as pubsubTopicToDhtKey, u as DecryptedChallengeRequestPublicationSchema, ur as t$4, vn as VotePubsubReservedFields, vt as sleepUntilTimeoutOrAbort, w as contentContainsMarkdownAudio, wn as CommentPubsubMessageReservedFields, wr as logger_default, wt as findCommunityInRegistry, xt as timestamp, y as version_default, yt as statMfsPathSafely, zt as untrackUpdatingCommunity } from "./schema-BIik7LGj.js";
3
- import { $t as getPublicKeyFromPrivateKey, A as deriveDbPosts, At as verifyCommentIpfs, Bt as getAuthorNameFromWire, C as BackupAbortError, Cn as parseDecryptedChallengeAnswerWithPKCErrorIfItFails, Dt as verifyChallengeRequest, E as calculateInlineRepliesBudget, En as parseJsonWithPKCErrorIfFails, F as importSignerIntoKuboNode, Ft as verifyCommunityEdit, G as REPLY_REPLIES_SORT_TYPES, Gt as getCommunityPublicKeyFromWire, It as verifyVote, Jt as encode, K as TIMEFRAMES_TO_SECONDS, Lt as buildRuntimeAuthor, M as getDefaultCommunityDbConfig, Mt as verifyCommentPubsubMessage, Nt as verifyCommentUpdate, O as deleteOldCommunityInWindows, P as getThumbnailPropsOfLink, Pt as verifyCommunity, Qt as getPKCAddressFromPublicKeySync, R as moveCommunityDbToDeletedDirectory, Rt as cleanWireAuthor, S as encryptEd25519AesGcmPublicKeyBuffer, St as signCommunity, T as calculateExpectedSignatureSize, Tt as verifyChallengeAnswer, U as POSTS_SORT_TYPES, W as POST_REPLIES_SORT_TYPES, Wt as getCommunityNameFromWire, Xt as getIpfsKeyFromPrivateKey, Z as iterateOverPageCidsToFindAllCids, Zt as getPKCAddressFromPublicKey, _t as signComment, a as loadChallengeFileFromCommunityChallengeSettings, ar as t$11, b as decryptEd25519AesGcmPublicKeyBuffer, bt as signCommentUpdate, c as LRUCache, d as KeyvBetterSqlite3, dn as parseCommunityEditOptionsSchemaWithPKCErrorIfItFails, dr as STORAGE_KEYS, en as createSchemaRowParser, er as crosspostChainDepthUpTo, fr as require_lodash_merge, ft as cleanUpBeforePublishing, g as SignerWithPublicKeyAddress, gt as signChallengeVerification, i as getCommunityChallengeFromCommunityChallengeSettings, ir as r$2, j as deriveDbReplies, jt as verifyCommentModeration, k as deriveCommentIpfsFromCommentTableRow, kt as verifyCommentEdit, lr as t$10, lt as pLimit, mt as signChallengeMessage, nr as t$9, o as pkcJsChallenges, or as n$6, pn as parseCommunityIpfsSchemaPassthroughWithPKCErrorIfItFails, qt as decode, r as getChallengeVerification, rr as t$12, s as TrackedInstanceRegistry, sr as n$5, t as RpcLocalCommunity, tr as effectiveMaxCrosspostDepth, u as MAX_FILE_SIZE_BYTES_FOR_COMMUNITY_IPFS, ur as stringify, vt as signCommentEdit, w as backupCommunityDb, xt as signCommentUpdateForChallengeVerification, z as resolveDbPostsCidRefs } from "./rpc-local-community-CdG4JLzO.js";
2
+ import { A as doesDomainAddressHaveCapitalLetter, B as ipnsNameToIpnsOverPubsubTopic, Bn as CommentEditPubsubMessagePublicationSchema, Bt as require_sha256, C as calculateStringSizeSameAsIpfsAddCidV0, Cn as CommentIpfsSchema, Cr as messages, Ct as writeKuboFilesWithTimeout, Dt as findUpdatingCommunity, E as contentContainsMarkdownVideos, F as getErrorCodeFromMessage, Hn as CommentEditReservedFields, I as getIpnsRecordInLocalKuboNode, It as trackUpdatingCommunity, J as isLinkOfImage, Jn as AuthorReservedFields, K as isLinkOfAnimatedImage, Lr as ZodError, Lt as untrackStartedCommunity, N as genToArray, Nn as CommentUpdateTableRowSchema, Nt as syncCommunityRegistryEntry, P as getEquivalentCommunityAddresses, Pn as CommentsTableRowSchema, Pt as trackStartedCommunity, Qt as CommentModerationsTableRowSchema, R as hideClassPrivateProps, S as calculateIpfsCidV0, Sr as PKCError, T as contentContainsMarkdownImages, Tt as findStartedCommunity, Vn as CommentEditPubsubMessagePublicationWithFlexibleAuthorSchema, Wn as CommentEditsTableRowSchema, Wt as CommunityEditPublicationPubsubReservedFields, X as isLinkOfVideo, Xt as CommentModerationReservedFields, Y as isLinkOfMedia, Yt as CommentModerationPubsubMessagePublicationSchema, Z as isLinkValid, _n as VotePubsubMessagePublicationSchema, a as ChallengeRequestMessageSchema, ar as t$6, b as areEquivalentCommunityAddresses, bn as VoteTablesRowSchema, cn as CommunitySignedPropertyNames, d as DecryptedChallengeRequestSchema, et as isStringDomain, gr as require_retry, ht as retryKuboIpfsAddAndProvide, ir as t$7, jn as CommentUpdateSchema, k as derivePublicationFromChallengeRequest, lr as r$1, lt as removeNullUndefinedValues, mr as t$3, nr as t$8, or as e, ot as removeBlocksFromKuboNode, pr as t$5, pt as retryKuboBlockPutPinAndProvidePubsubTopic, q as isLinkOfAudio, r as ChallengeMessageSchema, rr as n$3, s as ChallengeVerificationMessageSchema, sn as CommunityIpfsSchema, sr as e$1, st as removeMfsFilesSafely, t as ChallengeAnswerMessageSchema, tr as n$4, tt as pubsubTopicToDhtKey, u as DecryptedChallengeRequestPublicationSchema, ur as t$4, vn as VotePubsubReservedFields, vt as sleepUntilTimeoutOrAbort, w as contentContainsMarkdownAudio, wn as CommentPubsubMessageReservedFields, wr as logger_default, wt as findCommunityInRegistry, xt as timestamp, y as version_default, yt as statMfsPathSafely, zt as untrackUpdatingCommunity } from "./schema-KFikvQok.js";
3
+ import { $t as getPublicKeyFromPrivateKey, A as deriveDbPosts, At as verifyCommentIpfs, Bt as getAuthorNameFromWire, C as BackupAbortError, Cn as parseDecryptedChallengeAnswerWithPKCErrorIfItFails, Dt as verifyChallengeRequest, E as calculateInlineRepliesBudget, En as parseJsonWithPKCErrorIfFails, F as importSignerIntoKuboNode, Ft as verifyCommunityEdit, G as REPLY_REPLIES_SORT_TYPES, Gt as getCommunityPublicKeyFromWire, It as verifyVote, Jt as encode, K as TIMEFRAMES_TO_SECONDS, Lt as buildRuntimeAuthor, M as getDefaultCommunityDbConfig, Mt as verifyCommentPubsubMessage, Nt as verifyCommentUpdate, O as deleteOldCommunityInWindows, P as getThumbnailPropsOfLink, Pt as verifyCommunity, Qt as getPKCAddressFromPublicKeySync, R as moveCommunityDbToDeletedDirectory, Rt as cleanWireAuthor, S as encryptEd25519AesGcmPublicKeyBuffer, St as signCommunity, T as calculateExpectedSignatureSize, Tt as verifyChallengeAnswer, U as POSTS_SORT_TYPES, W as POST_REPLIES_SORT_TYPES, Wt as getCommunityNameFromWire, Xt as getIpfsKeyFromPrivateKey, Z as iterateOverPageCidsToFindAllCids, Zt as getPKCAddressFromPublicKey, _t as signComment, a as loadChallengeFileFromCommunityChallengeSettings, ar as t$11, b as decryptEd25519AesGcmPublicKeyBuffer, bt as signCommentUpdate, c as LRUCache, d as KeyvBetterSqlite3, dn as parseCommunityEditOptionsSchemaWithPKCErrorIfItFails, dr as STORAGE_KEYS, en as createSchemaRowParser, er as crosspostChainDepthUpTo, fr as require_lodash_merge, ft as cleanUpBeforePublishing, g as SignerWithPublicKeyAddress, gt as signChallengeVerification, i as getCommunityChallengeFromCommunityChallengeSettings, ir as r$2, j as deriveDbReplies, jt as verifyCommentModeration, k as deriveCommentIpfsFromCommentTableRow, kt as verifyCommentEdit, lr as t$10, lt as pLimit, mt as signChallengeMessage, nr as t$9, o as pkcJsChallenges, or as n$6, pn as parseCommunityIpfsSchemaPassthroughWithPKCErrorIfItFails, qt as decode, r as getChallengeVerification, rr as t$12, s as TrackedInstanceRegistry, sr as n$5, t as RpcLocalCommunity, tr as effectiveMaxCrosspostDepth, u as MAX_FILE_SIZE_BYTES_FOR_COMMUNITY_IPFS, ur as stringify, vt as signCommentEdit, w as backupCommunityDb, xt as signCommentUpdateForChallengeVerification, z as resolveDbPostsCidRefs } from "./rpc-local-community-BUicljzl.js";
4
4
  import { randomFillSync, randomUUID } from "node:crypto";
5
5
  import { fileURLToPath, pathToFileURL } from "node:url";
6
- import path from "node:path";
6
+ import Path from "node:path";
7
7
  import os from "os";
8
8
  import { existsSync, promises } from "node:fs";
9
- import path$1 from "path";
9
+ import path from "path";
10
10
  import assert from "assert";
11
11
  import fs from "fs";
12
12
  import Database from "better-sqlite3";
@@ -445,7 +445,7 @@ async function repinCommentsIPFSIfNeeded(community) {
445
445
  log(`${unpinnedCommentsFromDb.length} comments' IPFS have been repinned`);
446
446
  }
447
447
  const cidsToUnpinFirstSeenAtMsByCommunity = /* @__PURE__ */ new WeakMap();
448
- const communitiesWithPendingPurgeFlush = /* @__PURE__ */ new WeakSet();
448
+ const communitiesWithPendingPurgeFlush = /* @__PURE__ */ new WeakMap();
449
449
  async function unpinStaleCids(community, options = {}) {
450
450
  const log = logger_default("pkc-js:local-community:sync:unpinStaleCids");
451
451
  if (community._cidsToUnPin.size > 0) {
@@ -455,7 +455,8 @@ async function unpinStaleCids(community, options = {}) {
455
455
  for (const cid of firstSeenAtMs.keys()) if (!community._cidsToUnPin.has(cid)) firstSeenAtMs.delete(cid);
456
456
  const now = Date.now();
457
457
  for (const cid of community._cidsToUnPin) if (!firstSeenAtMs.has(cid)) firstSeenAtMs.set(cid, now);
458
- const flushGraceForPendingPurge = communitiesWithPendingPurgeFlush.has(community) || community._blocksToRm.length > 0;
458
+ const purgeFlushArmedAtMs = communitiesWithPendingPurgeFlush.get(community);
459
+ const flushGraceForPendingPurge = purgeFlushArmedAtMs !== void 0 || community._blocksToRm.length > 0;
459
460
  const cidsToUnpinNow = Array.from(community._cidsToUnPin.values()).filter((cid) => options.bypassGracePeriod || flushGraceForPendingPurge || now - (firstSeenAtMs.get(cid) ?? now) >= 18e5);
460
461
  if (cidsToUnpinNow.length === 0) {
461
462
  log.trace(`All ${sizeBefore} stale cids of community (${community.address}) are within their unpin grace period, keeping them pinned for now`);
@@ -476,7 +477,9 @@ async function unpinStaleCids(community, options = {}) {
476
477
  } else log.trace("Failed to unpin cid", cid, "on community", community.address, "due to error", error);
477
478
  }
478
479
  })));
479
- if (flushGraceForPendingPurge && community._cidsToUnPin.size === 0) communitiesWithPendingPurgeFlush.delete(community);
480
+ if (flushGraceForPendingPurge && community._cidsToUnPin.size === 0) {
481
+ if (purgeFlushArmedAtMs === void 0 || options.cycleStartedAtMs !== void 0 && options.cycleStartedAtMs > purgeFlushArmedAtMs) communitiesWithPendingPurgeFlush.delete(community);
482
+ }
480
483
  log.trace(`unpinned ${sizeBefore - community._cidsToUnPin.size} stale cids from ipfs node for community (${community.address})`);
481
484
  }
482
485
  }
@@ -599,7 +602,7 @@ async function _runRepoGcIfDue({ community, kuboUrl, force, log }) {
599
602
  }));
600
603
  }
601
604
  async function addAllCidsUnderPurgedCommentToBeRemoved(community, purgedCommentAndCommentUpdate) {
602
- communitiesWithPendingPurgeFlush.add(community);
605
+ communitiesWithPendingPurgeFlush.set(community, Date.now());
603
606
  community._cidsToUnPin.add(purgedCommentAndCommentUpdate.commentTableRow.cid);
604
607
  community._blocksToRm.push(purgedCommentAndCommentUpdate.commentTableRow.cid);
605
608
  if (typeof purgedCommentAndCommentUpdate.commentUpdateTableRow?.postUpdatesBucket === "number") {
@@ -1599,9 +1602,9 @@ async function storeCommentEdit(community, commentEditRaw, challengeRequestId) {
1599
1602
  if (isPending || isDisapproved) {
1600
1603
  log("Author deleted a pending/disapproved comment, purging immediately", commentEditRaw.commentCid);
1601
1604
  community._dbHandler.purgeComment(commentEditRaw.commentCid);
1602
- community._communityUpdateTrigger = true;
1603
1605
  }
1604
1606
  }
1607
+ community._communityUpdateTrigger = true;
1605
1608
  }
1606
1609
  async function storeCommentModeration(community, commentModRaw, challengeRequestId) {
1607
1610
  const log = logger_default("pkc-js:local-community:storeCommentModeration");
@@ -1682,6 +1685,7 @@ async function storeVote(community, newVoteProps, challengeRequestId) {
1682
1685
  voteTableRow.extraProps = t$9(newVoteProps, extraPropsInVote);
1683
1686
  }
1684
1687
  community._dbHandler.insertVotes([voteTableRow]);
1688
+ community._communityUpdateTrigger = true;
1685
1689
  log("Inserted vote", "of comment", voteTableRow.commentCid, "into db", "with props", voteTableRow);
1686
1690
  }
1687
1691
  async function storeCommunityEditPublication(community, editProps, challengeRequestId) {
@@ -1760,6 +1764,7 @@ async function storeComment(community, opts) {
1760
1764
  community._dbHandler.rollbackTransaction();
1761
1765
  throw e;
1762
1766
  }
1767
+ if (pendingApproval) community._communityUpdateTrigger = true;
1763
1768
  log("Inserted comment", commentRow.cid, "into db", "with props", commentRow);
1764
1769
  return {
1765
1770
  comment: commentIpfs,
@@ -1868,15 +1873,15 @@ async function throwIfChallengeSettingsAreInvalid({ challengeSettings, pkc, comm
1868
1873
  const processStartedCommunities = new TrackedInstanceRegistry();
1869
1874
  function normalizeRegistryDataPath(dataPath) {
1870
1875
  if (dataPath === void 0) return void 0;
1871
- const resolved = path$1.resolve(dataPath);
1876
+ const resolved = path.resolve(dataPath);
1872
1877
  let existing = resolved;
1873
1878
  let tail = "";
1874
1879
  while (true) try {
1875
- return path$1.join(fs.realpathSync.native(existing), tail);
1880
+ return path.join(fs.realpathSync.native(existing), tail);
1876
1881
  } catch {
1877
- const parent = path$1.dirname(existing);
1882
+ const parent = path.dirname(existing);
1878
1883
  if (parent === existing) return resolved;
1879
- tail = path$1.join(path$1.basename(existing), tail);
1884
+ tail = path.join(path.basename(existing), tail);
1880
1885
  existing = parent;
1881
1886
  }
1882
1887
  }
@@ -3632,9 +3637,9 @@ var DbHandler = class {
3632
3637
  if (needToMigrate) {
3633
3638
  if (dbExistsAlready && currentDbVersion > 0) {
3634
3639
  this.destoryConnection();
3635
- backupDbPath = path$1.join(path$1.dirname(dbPath), ".backup_before_migration", `${path$1.basename(dbPath)}.${currentDbVersion}.${timestamp()}`);
3636
- log(`Copying db ${path$1.basename(dbPath)} to ${backupDbPath} before migration`);
3637
- if (!fs.existsSync(path$1.dirname(backupDbPath))) await fs.promises.mkdir(path$1.dirname(backupDbPath), { recursive: true });
3640
+ backupDbPath = path.join(path.dirname(dbPath), ".backup_before_migration", `${path.basename(dbPath)}.${currentDbVersion}.${timestamp()}`);
3641
+ log(`Copying db ${path.basename(dbPath)} to ${backupDbPath} before migration`);
3642
+ if (!fs.existsSync(path.dirname(backupDbPath))) await fs.promises.mkdir(path.dirname(backupDbPath), { recursive: true });
3638
3643
  const sourceDb = new Database(dbPath, { fileMustExist: true });
3639
3644
  await sourceDb.backup(backupDbPath);
3640
3645
  sourceDb.close();
@@ -5452,10 +5457,10 @@ var DbHandler = class {
5452
5457
  if (this._db || this._keyv) await this.destoryConnection();
5453
5458
  this._transactionDepth = 0;
5454
5459
  const dataPath = this._community._pkc.dataPath;
5455
- const oldPathString = path$1.join(dataPath, "communities", oldDbName);
5456
- const newPathString = path$1.join(dataPath, "communities", newDbName);
5457
- await fs.promises.mkdir(path$1.dirname(oldPathString), { recursive: true });
5458
- await fs.promises.mkdir(path$1.dirname(newPathString), { recursive: true });
5460
+ const oldPathString = path.join(dataPath, "communities", oldDbName);
5461
+ const newPathString = path.join(dataPath, "communities", newDbName);
5462
+ await fs.promises.mkdir(path.dirname(oldPathString), { recursive: true });
5463
+ await fs.promises.mkdir(path.dirname(newPathString), { recursive: true });
5459
5464
  try {
5460
5465
  if (!fs.existsSync(oldPathString)) log(`Old DB file ${oldPathString} does not exist. Cannot backup/rename.`);
5461
5466
  else {
@@ -5477,8 +5482,8 @@ var DbHandler = class {
5477
5482
  }
5478
5483
  async lockCommunityStart(communityAddress = this._community.address) {
5479
5484
  const log = logger_default("pkc-js:local-community:db-handler:lock:start");
5480
- const lockfilePath = path$1.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5481
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", communityAddress);
5485
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5486
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", communityAddress);
5482
5487
  try {
5483
5488
  await import_src.default.lock(communityDbPath, {
5484
5489
  lockfilePath,
@@ -5499,8 +5504,8 @@ var DbHandler = class {
5499
5504
  async unlockCommunityStart(communityAddress = this._community.address) {
5500
5505
  const log = logger_default("pkc-js:local-community:db-handler:unlock:start");
5501
5506
  log.trace(`Attempting to unlock the start of community (${communityAddress})`);
5502
- const lockfilePath = path$1.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5503
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", communityAddress);
5507
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5508
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", communityAddress);
5504
5509
  if (!fs.existsSync(lockfilePath) || !fs.existsSync(communityDbPath)) return;
5505
5510
  try {
5506
5511
  await import_src.default.unlock(communityDbPath, { lockfilePath });
@@ -5511,8 +5516,8 @@ var DbHandler = class {
5511
5516
  }
5512
5517
  }
5513
5518
  async isCommunityStartLocked(communityAddress = this._community.address) {
5514
- const lockfilePath = path$1.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5515
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", communityAddress);
5519
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5520
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", communityAddress);
5516
5521
  return await import_src.default.check(communityDbPath, {
5517
5522
  lockfilePath,
5518
5523
  realpath: false,
@@ -5521,8 +5526,8 @@ var DbHandler = class {
5521
5526
  }
5522
5527
  async lockCommunityState() {
5523
5528
  const log = logger_default("pkc-js:local-community:db-handler:lock:lockCommunityState");
5524
- const lockfilePath = path$1.join(this._community._pkc.dataPath, "communities", `${this._community.address}.state.lock`);
5525
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", this._community.address);
5529
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${this._community.address}.state.lock`);
5530
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", this._community.address);
5526
5531
  try {
5527
5532
  await import_src.default.lock(communityDbPath, {
5528
5533
  lockfilePath,
@@ -5539,8 +5544,8 @@ var DbHandler = class {
5539
5544
  }
5540
5545
  async unlockCommunityState() {
5541
5546
  const log = logger_default("pkc-js:local-community:db-handler:lock:unlockCommunityState");
5542
- const lockfilePath = path$1.join(this._community._pkc.dataPath, "communities", `${this._community.address}.state.lock`);
5543
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", this._community.address);
5547
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${this._community.address}.state.lock`);
5548
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", this._community.address);
5544
5549
  if (!fs.existsSync(lockfilePath)) return;
5545
5550
  try {
5546
5551
  await import_src.default.unlock(communityDbPath, { lockfilePath });
@@ -5550,7 +5555,7 @@ var DbHandler = class {
5550
5555
  }
5551
5556
  }
5552
5557
  communityDbExists() {
5553
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", this._community.address);
5558
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", this._community.address);
5554
5559
  return fs.existsSync(communityDbPath);
5555
5560
  }
5556
5561
  markCommentsAsPublishedToPostUpdates(commentCids) {
@@ -6545,7 +6550,7 @@ async function validateAndSignCommunityRecord(community, build) {
6545
6550
  await community._validateCommunitySizeSchemaAndSignatureBeforePublishing(newCommunityRecord);
6546
6551
  return newCommunityRecord;
6547
6552
  }
6548
- async function publishCommunityRecordToIpns(community, build, newCommunityRecord) {
6553
+ async function publishCommunityRecordToIpns(community, build, newCommunityRecord, cycleStartedAtMs) {
6549
6554
  const { log, newIpns, newModQueue, editIdsToIncludeInNextUpdate } = build;
6550
6555
  const kuboRpcClient = community._clientsManager.getDefaultKuboRpcClient();
6551
6556
  const contentToPublish = stringify(newCommunityRecord);
@@ -6578,7 +6583,8 @@ async function publishCommunityRecordToIpns(community, build, newCommunityRecord
6578
6583
  log(`Published a new IPNS record for community(${community.address}) on IPNS (${publishRes.name}) that points to file (${publishRes.value}) with updatedAt (${newCommunityRecord.updatedAt}) and TTL (${ttl})`);
6579
6584
  community._clientsManager.updateKuboRpcState("stopped", kuboRpcClient.url);
6580
6585
  addOldPageCidsToCidsToUnpin(community, community.raw.communityIpfs?.modQueue, newIpns.modQueue).catch((err) => log.error("Failed to add old page cids of community.modQueue to _cidsToUnpin", err));
6581
- await unpinStaleCids(community);
6586
+ if (community.updateCid && community.updateCid !== file.path) community._cidsToUnPin.add(community.updateCid);
6587
+ await unpinStaleCids(community, { cycleStartedAtMs });
6582
6588
  if (community._blocksToRm.length > 0) {
6583
6589
  const removedBlocks = await removeBlocksFromKuboNode({
6584
6590
  ipfsClient: community._clientsManager.getDefaultKuboRpcClient()._client,
@@ -6589,7 +6595,6 @@ async function publishCommunityRecordToIpns(community, build, newCommunityRecord
6589
6595
  log("Removed blocks", removedBlocks, "from kubo node");
6590
6596
  community._blocksToRm = community._blocksToRm.filter((blockCid) => !removedBlocks.includes(blockCid));
6591
6597
  }
6592
- if (community.updateCid) community._cidsToUnPin.add(community.updateCid);
6593
6598
  const configuredPubsubTopic = community.pubsubTopic;
6594
6599
  const editedPubsubTopic = community._pendingEditProps.filter((editProps) => editProps.editId && editIdsToIncludeInNextUpdate.includes(editProps.editId)).map((editProps) => editProps.pubsubTopic).filter((topic) => typeof topic === "string").pop();
6595
6600
  community.initCommunityIpfsPropsNoMerge(newCommunityRecord);
@@ -6603,7 +6608,6 @@ async function publishCommunityRecordToIpns(community, build, newCommunityRecord
6603
6608
  const remainingEditProps = Object.assign({}, ...community._pendingEditProps.map((editProps) => t$9(editProps, t$6(CommunityIpfsSchema.shape))));
6604
6609
  Object.assign(community, remainingEditProps);
6605
6610
  }
6606
- community._communityUpdateTrigger = false;
6607
6611
  community._firstUpdateAfterStart = false;
6608
6612
  try {
6609
6613
  const ipnsRecord = await getIpnsRecordInLocalKuboNode(kuboRpcClient, community.signer.address);
@@ -6626,8 +6630,15 @@ async function updateCommunityIpnsIfNeeded(community, commentUpdateRowsToPublish
6626
6630
  const log = logger_default("pkc-js:local-community:start:updateCommunityIpnsIfNeeded");
6627
6631
  community._calculateLatestUpdateTrigger();
6628
6632
  if (!community._communityUpdateTrigger) return;
6629
- const build = await calculateNextCommunityRecord(community, commentUpdateRowsToPublishToIpfs, log);
6630
- await publishCommunityRecordToIpns(community, build, await validateAndSignCommunityRecord(community, build));
6633
+ community._communityUpdateTrigger = false;
6634
+ const cycleStartedAtMs = Date.now();
6635
+ try {
6636
+ const build = await calculateNextCommunityRecord(community, commentUpdateRowsToPublishToIpfs, log);
6637
+ await publishCommunityRecordToIpns(community, build, await validateAndSignCommunityRecord(community, build), cycleStartedAtMs);
6638
+ } catch (e) {
6639
+ community._communityUpdateTrigger = true;
6640
+ throw e;
6641
+ }
6631
6642
  }
6632
6643
  async function syncIpnsWithDb(community) {
6633
6644
  const log = logger_default("pkc-js:local-community:sync");
@@ -7288,11 +7299,11 @@ async function edit(community, newCommunityOptions) {
7288
7299
  const EXPORTS_KEY = STORAGE_KEYS[STORAGE_KEYS.EXPORTS];
7289
7300
  function defaultExportPathFor(community, exportId) {
7290
7301
  if (typeof community._pkc.dataPath !== "string") throw new PKCError("ERR_DATA_PATH_IS_NOT_DEFINED", { communityAddress: community.address });
7291
- return path.join(community._pkc.dataPath, "exports", `${exportId}.sqlite`);
7302
+ return Path.join(community._pkc.dataPath, "exports", `${exportId}.sqlite`);
7292
7303
  }
7293
7304
  function sourceDbPathFor(community) {
7294
7305
  if (typeof community._pkc.dataPath !== "string") throw new PKCError("ERR_DATA_PATH_IS_NOT_DEFINED", { communityAddress: community.address });
7295
- return path.join(community._pkc.dataPath, "communities", community.address);
7306
+ return Path.join(community._pkc.dataPath, "communities", community.address);
7296
7307
  }
7297
7308
  async function persistExports(community) {
7298
7309
  if (!community._dbHandler) return;
@@ -7368,9 +7379,9 @@ async function runExportTask(community, exportId, opts) {
7368
7379
  async function exportCommunityEmbedded(community, options = {}) {
7369
7380
  if (options.signal?.aborted) throw options.signal.reason ?? new DOMException("The operation was aborted.", "AbortError");
7370
7381
  const exportId = v4();
7371
- const destPath = options.exportPath ? path.resolve(options.exportPath) : defaultExportPathFor(community, exportId);
7382
+ const destPath = options.exportPath ? Path.resolve(options.exportPath) : defaultExportPathFor(community, exportId);
7372
7383
  const includePrivateKey = options.includePrivateKey === true;
7373
- if (path.resolve(destPath) === path.resolve(sourceDbPathFor(community))) throw new PKCError("ERR_EXPORT_PATH_TARGETS_LIVE_DB", {
7384
+ if (Path.resolve(destPath) === Path.resolve(sourceDbPathFor(community))) throw new PKCError("ERR_EXPORT_PATH_TARGETS_LIVE_DB", {
7374
7385
  communityAddress: community.address,
7375
7386
  exportPath: destPath
7376
7387
  });
@@ -1,7 +1,7 @@
1
1
  import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-2rV9d50f.js";
2
- import { A as doesDomainAddressHaveCapitalLetter, At as listUpdatingCommunities, B as ipnsNameToIpnsOverPubsubTopic, Br as stringifyPrimitive, Bt as require_sha256, Cn as CommentIpfsSchema, Cr as messages, D as createAbortError, Dr as setErrorMap, Dt as findUpdatingCommunity, Et as findUpdatingComment, Ft as trackUpdatingComment, H as isIpfsCid, Ht as pTimeout, O as deepMergeRuntimeFields, On as CommentUpdateForChallengeVerificationSchema, Ot as listStartedCommunities, R as hideClassPrivateProps, Rr as joinValues, Rt as untrackUpdatingComment, Sr as PKCError, St as waitForUpdateInCommunityInstanceWithErrorAndTimeout, Tt as findStartedCommunity, V as isAbortError, Vt as TimeoutError, W as isIpns, _r as FailedToFetchCommentIpfsFromGatewaysError, _t as shortifyCid, a as ChallengeRequestMessageSchema, ar as t$1, at as rejectWhenCommunityStopsOrAborts, b as areEquivalentCommunityAddresses, bt as throwIfAbortSignalAborted, dt as replaceXWithY, et as isStringDomain, ft as resolveWhenPredicateIsTrue, gr as require_retry, gt as shortifyAddress, it as rejectWhenAbortSignalFires, jn as CommentUpdateSchema, jt as refreshTrackedCommentAliases, kt as listUpdatingComments, lr as r, mt as retryKuboIpfsAdd, nn as CommunityAnchorSchema, or as e, pn as PubsubTopicSchema, r as ChallengeMessageSchema, rr as n$1, s as ChallengeVerificationMessageSchema, sn as CommunityIpfsSchema, sr as e$1, t as ChallengeAnswerMessageSchema, tr as n$2, ut as removeUndefinedValuesRecursively, vt as sleepUntilTimeoutOrAbort, wr as logger_default, xt as timestamp, y as version_default, zr as parsedType } from "./schema-BIik7LGj.js";
3
- import { $ as RepliesPages, $n as RpcUnsubscribeParamSchema, An as parseSetNewSettingsPKCWsServerSchemaWithPKCErrorIfItFails, At as verifyCommentIpfs, B as setNativeFunctions$1, Bn as RpcEditCommunityParamSchema, Cn as parseDecryptedChallengeAnswerWithPKCErrorIfItFails, Ct as signCommunityEdit, D as createKuboRpcClient, Dn as parsePKCUserOptionsSchemaWithPKCErrorIfItFails, En as parseJsonWithPKCErrorIfFails, Et as verifyChallengeMessage, Fn as RpcCancelExportParamSchema, Ft as verifyCommunityEdit, Gn as RpcFetchCidParamSchema, Gt as getCommunityPublicKeyFromWire, H as CommentClientsManager, Hn as RpcExportCommunityModLogsResultSchema, Ht as buildRuntimeCommunityFields, I as listCommunitiesSync, In as RpcCidParamSchema, It as verifyVote, Jn as RpcPublishChallengeAnswersParamSchema, Kn as RpcFetchCidResultSchema, Kt as normalizeCommunityInputFromCommunity, L as monitorCommunitiesDirectory, Ln as RpcCommentRepliesPageParamSchema, Lt as buildRuntimeAuthor, Mn as parseVotePubsubMessagePublicationSchemaWithPKCErrorIfItFails, Mt as verifyCommentPubsubMessage, N as getDefaultDataPath, Nn as RpcAnchorPublishPreparationResultSchema, Nt as verifyCommentUpdate, On as parseRpcCommentEventWithPKCErrorIfItFails, Ot as verifyChallengeVerification, Pn as RpcAuthorNameParamSchema, Q as parseRawPages, Qn as RpcSuccessResultSchema, Qt as getPKCAddressFromPublicKeySync, Rn as RpcCommunityIdentifierParamSchema, Rt as cleanWireAuthor, Sn as parseCreateVoteOptionsSchemaWithPKCErrorIfItFails, Tn as parseDecryptedChallengeWithPKCErrorIfItFails, Un as RpcExportCommunityParamSchema, Ut as getCommunityAddressFromRecord, V as tryToDeleteCommunitiesThatFailedToBeDeletedBefore, Vn as RpcExportCommunityModLogsParamSchema, Vt as normalizeCreatePublicationAuthor, Wn as RpcExportCommunityResultSchema, Wt as getCommunityNameFromWire, X as findCommentInPageInstanceRecursively, Xn as RpcResolveAuthorNameResultSchema, Y as extractCommunityRuntimeFieldsFromParsedPages, Yn as RpcPublishedAnchorRecordResultSchema, Yt as getBufferedPKCAddressFromPublicKey, Zn as RpcSubscriptionIdResultSchema, _ as createSigner, _n as parseCreateCommunityEditPublicationOptionsSchemaWithPKCErrorIfItFails, _t as signComment, an as parseCommentIpfsSchemaWithPKCErrorIfItFails, ar as t$3, at as PublicationClientsManager, bn as parseCreateRemoteCommunityFunctionArgumentSchemaWithPKCErrorIfItFails, c as LRUCache, cn as parseCommentPubsubMessagePublicationWithPKCErrorIfItFails, cr as t$2, d as KeyvBetterSqlite3, dt as require_lib$1, et as applyNameResolvedCacheToCrosspost, f as decodeRpcChallengeAnswerPubsubMsg, fn as parseCommunityEditPubsubMessagePublicationSchemaWithPKCErrorIfItFails, ft as cleanUpBeforePublishing, gn as parseCreateCommentOptionsSchemaWithPKCErrorIfItFails, h as decodeRpcChallengeVerificationPubsubMsg, hn as parseCreateCommentModerationOptionsSchemaWithPKCErrorIfItFails, ht as signChallengeRequest, in as parseCommentEditPubsubMessagePublicationSchemaWithPKCErrorIfItFails, it as stripNameResolvedFromCrosspost, jt as verifyCommentModeration, kn as parseRpcCommentUpdateEventWithPKCErrorIfItFails, kt as verifyCommentEdit, l as RemoteCommunity, ln as parseCommunityAddressWithPKCErrorIfItFails, lr as t$5, m as decodeRpcChallengeRequestPubsubMsg, mn as parseCreateCommentEditOptionsSchemaWithPKCErrorIfItFails, mr as require_undici, n as RpcRemoteCommunity, nr as t$4, nt as collectCrosspostAuthorsToResolve, o as pkcJsChallenges, or as n$3, ot as PKCClientsManager, p as decodeRpcChallengePubsubMsg, pr as nativeFunctions$2, pt as signChallengeAnswer, qn as RpcPublishAnchorRecordParamSchema, qt as decode, s as TrackedInstanceRegistry, sn as parseCommentModerationPubsubMessagePublicationSchemaWithPKCErrorIfItFails, st as InflightFetchManager, t as RpcLocalCommunity, tn as parseCidStringSchemaWithPKCErrorIfItFails, tt as cloneCrosspostForRuntime, ut as PKCTypedEmitter, v as createAnchorIpnsRecord$1, vt as signCommentEdit, wn as parseDecryptedChallengeVerification, wt as signVote, x as encryptEd25519AesGcm, xn as parseCreateRpcCommunityFunctionArgumentSchemaWithPKCErrorIfItFails, y as decryptEd25519AesGcm, yt as signCommentModeration, zn as RpcCommunityPageParamSchema, zt as getAuthorNameFromRuntime } from "./rpc-local-community-CdG4JLzO.js";
4
- import { o as getHeliaDebugContext } from "./util-y_hIxyCS.js";
2
+ import { A as doesDomainAddressHaveCapitalLetter, At as listUpdatingCommunities, B as ipnsNameToIpnsOverPubsubTopic, Br as stringifyPrimitive, Bt as require_sha256, Cn as CommentIpfsSchema, Cr as messages, D as createAbortError, Dr as setErrorMap, Dt as findUpdatingCommunity, Et as findUpdatingComment, Ft as trackUpdatingComment, H as isIpfsCid, Ht as pTimeout, O as deepMergeRuntimeFields, On as CommentUpdateForChallengeVerificationSchema, Ot as listStartedCommunities, R as hideClassPrivateProps, Rr as joinValues, Rt as untrackUpdatingComment, Sr as PKCError, St as waitForUpdateInCommunityInstanceWithErrorAndTimeout, Tt as findStartedCommunity, V as isAbortError, Vt as TimeoutError, W as isIpns, _r as FailedToFetchCommentIpfsFromGatewaysError, _t as shortifyCid, a as ChallengeRequestMessageSchema, ar as t$1, at as rejectWhenCommunityStopsOrAborts, b as areEquivalentCommunityAddresses, bt as throwIfAbortSignalAborted, dt as replaceXWithY, et as isStringDomain, ft as resolveWhenPredicateIsTrue, gr as require_retry, gt as shortifyAddress, it as rejectWhenAbortSignalFires, jn as CommentUpdateSchema, jt as refreshTrackedCommentAliases, kt as listUpdatingComments, lr as r, mt as retryKuboIpfsAdd, nn as CommunityAnchorSchema, or as e, pn as PubsubTopicSchema, r as ChallengeMessageSchema, rr as n$1, s as ChallengeVerificationMessageSchema, sn as CommunityIpfsSchema, sr as e$1, t as ChallengeAnswerMessageSchema, tr as n$2, ut as removeUndefinedValuesRecursively, vt as sleepUntilTimeoutOrAbort, wr as logger_default, xt as timestamp, y as version_default, zr as parsedType } from "./schema-KFikvQok.js";
3
+ import { $ as RepliesPages, $n as RpcUnsubscribeParamSchema, An as parseSetNewSettingsPKCWsServerSchemaWithPKCErrorIfItFails, At as verifyCommentIpfs, B as setNativeFunctions$1, Bn as RpcEditCommunityParamSchema, Cn as parseDecryptedChallengeAnswerWithPKCErrorIfItFails, Ct as signCommunityEdit, D as createKuboRpcClient, Dn as parsePKCUserOptionsSchemaWithPKCErrorIfItFails, En as parseJsonWithPKCErrorIfFails, Et as verifyChallengeMessage, Fn as RpcCancelExportParamSchema, Ft as verifyCommunityEdit, Gn as RpcFetchCidParamSchema, Gt as getCommunityPublicKeyFromWire, H as CommentClientsManager, Hn as RpcExportCommunityModLogsResultSchema, Ht as buildRuntimeCommunityFields, I as listCommunitiesSync, In as RpcCidParamSchema, It as verifyVote, Jn as RpcPublishChallengeAnswersParamSchema, Kn as RpcFetchCidResultSchema, Kt as normalizeCommunityInputFromCommunity, L as monitorCommunitiesDirectory, Ln as RpcCommentRepliesPageParamSchema, Lt as buildRuntimeAuthor, Mn as parseVotePubsubMessagePublicationSchemaWithPKCErrorIfItFails, Mt as verifyCommentPubsubMessage, N as getDefaultDataPath, Nn as RpcAnchorPublishPreparationResultSchema, Nt as verifyCommentUpdate, On as parseRpcCommentEventWithPKCErrorIfItFails, Ot as verifyChallengeVerification, Pn as RpcAuthorNameParamSchema, Q as parseRawPages, Qn as RpcSuccessResultSchema, Qt as getPKCAddressFromPublicKeySync, Rn as RpcCommunityIdentifierParamSchema, Rt as cleanWireAuthor, Sn as parseCreateVoteOptionsSchemaWithPKCErrorIfItFails, Tn as parseDecryptedChallengeWithPKCErrorIfItFails, Un as RpcExportCommunityParamSchema, Ut as getCommunityAddressFromRecord, V as tryToDeleteCommunitiesThatFailedToBeDeletedBefore, Vn as RpcExportCommunityModLogsParamSchema, Vt as normalizeCreatePublicationAuthor, Wn as RpcExportCommunityResultSchema, Wt as getCommunityNameFromWire, X as findCommentInPageInstanceRecursively, Xn as RpcResolveAuthorNameResultSchema, Y as extractCommunityRuntimeFieldsFromParsedPages, Yn as RpcPublishedAnchorRecordResultSchema, Yt as getBufferedPKCAddressFromPublicKey, Zn as RpcSubscriptionIdResultSchema, _ as createSigner, _n as parseCreateCommunityEditPublicationOptionsSchemaWithPKCErrorIfItFails, _t as signComment, an as parseCommentIpfsSchemaWithPKCErrorIfItFails, ar as t$3, at as PublicationClientsManager, bn as parseCreateRemoteCommunityFunctionArgumentSchemaWithPKCErrorIfItFails, c as LRUCache, cn as parseCommentPubsubMessagePublicationWithPKCErrorIfItFails, cr as t$2, d as KeyvBetterSqlite3, dt as require_lib$1, et as applyNameResolvedCacheToCrosspost, f as decodeRpcChallengeAnswerPubsubMsg, fn as parseCommunityEditPubsubMessagePublicationSchemaWithPKCErrorIfItFails, ft as cleanUpBeforePublishing, gn as parseCreateCommentOptionsSchemaWithPKCErrorIfItFails, h as decodeRpcChallengeVerificationPubsubMsg, hn as parseCreateCommentModerationOptionsSchemaWithPKCErrorIfItFails, ht as signChallengeRequest, in as parseCommentEditPubsubMessagePublicationSchemaWithPKCErrorIfItFails, it as stripNameResolvedFromCrosspost, jt as verifyCommentModeration, kn as parseRpcCommentUpdateEventWithPKCErrorIfItFails, kt as verifyCommentEdit, l as RemoteCommunity, ln as parseCommunityAddressWithPKCErrorIfItFails, lr as t$5, m as decodeRpcChallengeRequestPubsubMsg, mn as parseCreateCommentEditOptionsSchemaWithPKCErrorIfItFails, mr as require_undici, n as RpcRemoteCommunity, nr as t$4, nt as collectCrosspostAuthorsToResolve, o as pkcJsChallenges, or as n$3, ot as PKCClientsManager, p as decodeRpcChallengePubsubMsg, pr as nativeFunctions$2, pt as signChallengeAnswer, qn as RpcPublishAnchorRecordParamSchema, qt as decode, s as TrackedInstanceRegistry, sn as parseCommentModerationPubsubMessagePublicationSchemaWithPKCErrorIfItFails, st as InflightFetchManager, t as RpcLocalCommunity, tn as parseCidStringSchemaWithPKCErrorIfItFails, tt as cloneCrosspostForRuntime, ut as PKCTypedEmitter, v as createAnchorIpnsRecord$1, vt as signCommentEdit, wn as parseDecryptedChallengeVerification, wt as signVote, x as encryptEd25519AesGcm, xn as parseCreateRpcCommunityFunctionArgumentSchemaWithPKCErrorIfItFails, y as decryptEd25519AesGcm, yt as signCommentModeration, zn as RpcCommunityPageParamSchema, zt as getAuthorNameFromRuntime } from "./rpc-local-community-BUicljzl.js";
4
+ import { o as getHeliaDebugContext } from "./util-b2CRgd4P.js";
5
5
  import path from "path";
6
6
  import assert from "assert";
7
7
  import fs from "fs";
@@ -7025,7 +7025,7 @@ var PKC$1 = class extends PKCTypedEmitter {
7025
7025
  this.clients.libp2pJsClients = {};
7026
7026
  if (!this.libp2pJsClientsOptions) return;
7027
7027
  if (!this.httpRoutersOptions) throw Error("httpRoutersOptions is required for libp2pJsClient");
7028
- const { createLibp2pJsClientOrUseExistingOne } = await import("./helia-for-pkc-CmSUHQVn.js");
7028
+ const { createLibp2pJsClientOrUseExistingOne } = await import("./helia-for-pkc-CHv28C49.js");
7029
7029
  for (const clientOptions of this.libp2pJsClientsOptions) {
7030
7030
  const heliaNode = await createLibp2pJsClientOrUseExistingOne({
7031
7031
  ...clientOptions,
@@ -7304,7 +7304,7 @@ var PKC$1 = class extends PKCTypedEmitter {
7304
7304
  const log = logger_default("pkc-js:pkc:createLocalCommunity");
7305
7305
  log.trace("Received community options to create a local community instance:", options);
7306
7306
  if (!this._canCreateNewLocalCommunity()) throw new PKCError("ERR_CAN_NOT_CREATE_A_LOCAL_COMMUNITY", { pkcOptions: this._userPKCOptions });
7307
- const { LocalCommunity, createNewLocalCommunityDb, updateInstancePropsWithStartedCommunityOrDb } = await import("./local-community-DVG9tyIW.js");
7307
+ const { LocalCommunity, createNewLocalCommunityDb, updateInstancePropsWithStartedCommunityOrDb } = await import("./local-community-Dslc-qve.js");
7308
7308
  const isLocalCommunity = (await listCommunitiesSync(this)).includes(options.address);
7309
7309
  const community = new LocalCommunity(this);
7310
7310
  if (isLocalCommunity) {