@pkcprotocol/pkc-js 0.0.93 → 0.0.94

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 (67) hide show
  1. package/dist/browser/clients/base-client-manager.d.ts +1 -0
  2. package/dist/browser/clients/base-client-manager.js +7 -1
  3. package/dist/browser/clients/base-client-manager.js.map +1 -1
  4. package/dist/browser/clients/rpc-client/pkc-rpc-client.d.ts +1 -0
  5. package/dist/browser/clients/rpc-client/pkc-rpc-client.js +27 -1
  6. package/dist/browser/clients/rpc-client/pkc-rpc-client.js.map +1 -1
  7. package/dist/browser/community/community-client-manager.d.ts +16 -0
  8. package/dist/browser/community/community-client-manager.js +307 -31
  9. package/dist/browser/community/community-client-manager.js.map +1 -1
  10. package/dist/browser/community/remote-community.js +7 -0
  11. package/dist/browser/community/remote-community.js.map +1 -1
  12. package/dist/browser/generated-version.d.ts +1 -1
  13. package/dist/browser/generated-version.js +1 -1
  14. package/dist/browser/helia/helia-for-pkc.js +56 -1
  15. package/dist/browser/helia/helia-for-pkc.js.map +1 -1
  16. package/dist/browser/helia/types.d.ts +16 -0
  17. package/dist/browser/helia/util.d.ts +1 -0
  18. package/dist/browser/helia/util.js +21 -1
  19. package/dist/browser/helia/util.js.map +1 -1
  20. package/dist/browser/rpc/src/index.d.ts +2 -0
  21. package/dist/browser/rpc/src/index.js +52 -19
  22. package/dist/browser/rpc/src/index.js.map +1 -1
  23. package/dist/browser/test/test-util.d.ts +353 -5
  24. package/dist/browser/test/test-util.js +88 -5
  25. package/dist/browser/test/test-util.js.map +1 -1
  26. package/dist/browser/util.d.ts +7 -0
  27. package/dist/browser/util.js +21 -11
  28. package/dist/browser/util.js.map +1 -1
  29. package/dist/bundled/bundle-manifest.json +25 -25
  30. package/dist/bundled/chunks/{helia-for-pkc-C8tOPlIj.js → helia-for-pkc-Bj-Zb4JN.js} +70 -33
  31. package/dist/bundled/chunks/{local-community-DYEWq5rq.js → local-community-BrMLMEmt.js} +1 -1
  32. package/dist/bundled/chunks/{local-community-DgbMuVAA.js → local-community-Ce7303vY.js} +30 -30
  33. package/dist/bundled/chunks/{node-BrLiC0qX.js → node-C37nDOa8.js} +21 -6
  34. package/dist/bundled/chunks/{rpc-local-community-DOSee621.js → rpc-local-community-Dr_-Lb8I.js} +151 -18
  35. package/dist/bundled/chunks/{schema-HH2zeH-j.js → schema-5-rYJ-bC.js} +29 -12
  36. package/dist/bundled/chunks/{util-DSIDv1Cb.js → util-_-fNQNIV.js} +11 -3
  37. package/dist/bundled/index.js +1 -1
  38. package/dist/bundled/rpc/src/index.js +43 -22
  39. package/dist/node/clients/base-client-manager.d.ts +1 -0
  40. package/dist/node/clients/base-client-manager.js +7 -1
  41. package/dist/node/clients/base-client-manager.js.map +1 -1
  42. package/dist/node/clients/rpc-client/pkc-rpc-client.d.ts +1 -0
  43. package/dist/node/clients/rpc-client/pkc-rpc-client.js +27 -1
  44. package/dist/node/clients/rpc-client/pkc-rpc-client.js.map +1 -1
  45. package/dist/node/community/community-client-manager.d.ts +16 -0
  46. package/dist/node/community/community-client-manager.js +307 -31
  47. package/dist/node/community/community-client-manager.js.map +1 -1
  48. package/dist/node/community/remote-community.js +7 -0
  49. package/dist/node/community/remote-community.js.map +1 -1
  50. package/dist/node/generated-version.d.ts +1 -1
  51. package/dist/node/generated-version.js +1 -1
  52. package/dist/node/helia/helia-for-pkc.js +56 -1
  53. package/dist/node/helia/helia-for-pkc.js.map +1 -1
  54. package/dist/node/helia/types.d.ts +16 -0
  55. package/dist/node/helia/util.d.ts +1 -0
  56. package/dist/node/helia/util.js +21 -1
  57. package/dist/node/helia/util.js.map +1 -1
  58. package/dist/node/rpc/src/index.d.ts +2 -0
  59. package/dist/node/rpc/src/index.js +52 -19
  60. package/dist/node/rpc/src/index.js.map +1 -1
  61. package/dist/node/test/test-util.d.ts +353 -5
  62. package/dist/node/test/test-util.js +88 -5
  63. package/dist/node/test/test-util.js.map +1 -1
  64. package/dist/node/util.d.ts +7 -0
  65. package/dist/node/util.js +21 -11
  66. package/dist/node/util.js.map +1 -1
  67. 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 { L as hideClassPrivateProps, R as ipnsNameToIpnsOverPubsubTopic, Sr as logger_default, br as PKCError } from "./schema-HH2zeH-j.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-DSIDv1Cb.js";
2
+ import { B as ipnsNameToIpnsOverPubsubTopic, R as hideClassPrivateProps, Sr as PKCError, wr as logger_default, x as binaryKeyToPubsubTopic } from "./schema-5-rYJ-bC.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-_-fNQNIV.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,
@@ -6628,6 +6628,29 @@ async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
6628
6628
  const ipnsPubsubLocalStore = ipnsPubsubRouter.localStore;
6629
6629
  const ipnsPubsubRouterSubscriptions = ipnsPubsubRouter.subscriptions;
6630
6630
  const ipnsRecordNetworkValidatedAtMs = /* @__PURE__ */ new Map();
6631
+ const ipnsRecordArrivalListeners = /* @__PURE__ */ new Map();
6632
+ const originalLocalStorePut = ipnsPubsubLocalStore.put.bind(ipnsPubsubLocalStore);
6633
+ ipnsPubsubLocalStore.put = async (routingKey, marshalledRecord, options) => {
6634
+ await originalLocalStorePut(routingKey, marshalledRecord, options);
6635
+ const pubsubTopic = binaryKeyToPubsubTopic(routingKey);
6636
+ const listeners = ipnsRecordArrivalListeners.get(pubsubTopic);
6637
+ if (!listeners || listeners.size === 0) return;
6638
+ let record;
6639
+ try {
6640
+ record = unmarshalIPNSRecord(marshalledRecord);
6641
+ } catch (e) {
6642
+ log.error("Failed to unmarshal a cached IPNS record for the arrival listeners of topic", pubsubTopic, e);
6643
+ return;
6644
+ }
6645
+ for (const listener of [...listeners]) try {
6646
+ listener({
6647
+ pubsubTopic,
6648
+ record
6649
+ });
6650
+ } catch (e) {
6651
+ log.error("An IPNS record arrival listener threw for topic", pubsubTopic, e);
6652
+ }
6653
+ };
6631
6654
  const WARMUP_MAX_PEERS = 4;
6632
6655
  const warmupPromisesByTopic = /* @__PURE__ */ new Map();
6633
6656
  const warmupForTopic = (topic, options) => {
@@ -6876,6 +6899,19 @@ async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
6876
6899
  async add(entry, options) {
6877
6900
  throw Error("Helia 'add' is not supported at the moment in pkc-js API");
6878
6901
  },
6902
+ ipnsRecordArrivals: {
6903
+ subscribe: ({ pubsubTopic, listener }) => {
6904
+ const listeners = ipnsRecordArrivalListeners.get(pubsubTopic) ?? /* @__PURE__ */ new Set();
6905
+ listeners.add(listener);
6906
+ ipnsRecordArrivalListeners.set(pubsubTopic, listeners);
6907
+ },
6908
+ unsubscribe: ({ pubsubTopic, listener }) => {
6909
+ const listeners = ipnsRecordArrivalListeners.get(pubsubTopic);
6910
+ if (!listeners) return;
6911
+ listeners.delete(listener);
6912
+ if (listeners.size === 0) ipnsRecordArrivalListeners.delete(pubsubTopic);
6913
+ }
6914
+ },
6879
6915
  async stop(options) {
6880
6916
  const clientFromMap = libp2pJsClients[pkcOptions.key];
6881
6917
  if (!clientFromMap) return;
@@ -6883,6 +6919,7 @@ async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
6883
6919
  clientFromMap.countOfUsesOfInstance--;
6884
6920
  if (clientFromMap.countOfUsesOfInstance === 0) {
6885
6921
  delete libp2pJsClients[pkcOptions.key];
6922
+ ipnsRecordArrivalListeners.clear();
6886
6923
  for (const router of ipnsNameResolver.routers) {
6887
6924
  const lifecycle = router;
6888
6925
  if (typeof lifecycle.stop === "function") try {
@@ -1,2 +1,2 @@
1
- import { n as createNewLocalCommunityDb, r as updateInstancePropsWithStartedCommunityOrDb, t as LocalCommunity } from "./local-community-DgbMuVAA.js";
1
+ import { n as createNewLocalCommunityDb, r as updateInstancePropsWithStartedCommunityOrDb, t as LocalCommunity } from "./local-community-Ce7303vY.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 { $ as pubsubTopicToDhtKey, $n as n$4, Bn as CommentEditReservedFields, C as contentContainsMarkdownAudio, Ct as findStartedCommunity, F as getIpnsRecordInLocalKuboNode, Fr as ZodError, Ft as untrackStartedCommunity, G as isLinkOfAudio, Hn as CommentEditsTableRowSchema, Ht as CommunityEditPublicationPubsubReservedFields, J as isLinkOfVideo, Jt as CommentModerationReservedFields, K as isLinkOfImage, Kn as AuthorReservedFields, L as hideClassPrivateProps, Lt as untrackUpdatingCommunity, M as genToArray, Mn as CommentsTableRowSchema, Mt as trackStartedCommunity, N as getEquivalentCommunityAddresses, O as derivePublicationFromChallengeRequest, P as getErrorCodeFromMessage, Pt as trackUpdatingCommunity, Q as isStringDomain, R as ipnsNameToIpnsOverPubsubTopic, Rn as CommentEditPubsubMessagePublicationSchema, Rt as require_sha256, S as calculateStringSizeSameAsIpfsAddCidV0, Sn as CommentPubsubMessageReservedFields, Sr as logger_default, St as findCommunityInRegistry, T as contentContainsMarkdownVideos, Tt as findUpdatingCommunity, W as isLinkOfAnimatedImage, Xt as CommentModerationsTableRowSchema, Y as isLinkValid, _t as statMfsPathSafely, a as ChallengeRequestMessageSchema, an as CommunityIpfsSchema, ar as e$1, at as removeMfsFilesSafely, b as areEquivalentCommunityAddresses, br as PKCError, cr as t$4, d as DecryptedChallengeRequestSchema, dr as t$5, dt as retryKuboBlockPutPinAndProvidePubsubTopic, er as t$8, fr as t$3, gn as VotePubsubReservedFields, gt as sleepUntilTimeoutOrAbort, hn as VotePubsubMessagePublicationSchema, ir as e, it as removeBlocksFromKuboNode, jn as CommentUpdateTableRowSchema, jt as syncCommunityRegistryEntry, k as doesDomainAddressHaveCapitalLetter, kn as CommentUpdateSchema, mr as require_retry, nr as t$7, on as CommunitySignedPropertyNames, pt as retryKuboIpfsAddAndProvide, q as isLinkOfMedia, qt as CommentModerationPubsubMessagePublicationSchema, r as ChallengeMessageSchema, rr as t$6, s as ChallengeVerificationMessageSchema, sr as r$1, st as removeNullUndefinedValues, t as ChallengeAnswerMessageSchema, tr as n$3, u as DecryptedChallengeRequestPublicationSchema, vn as VoteTablesRowSchema, w as contentContainsMarkdownImages, x as calculateIpfsCidV0, xn as CommentIpfsSchema, xr as messages, xt as writeKuboFilesWithTimeout, y as version_default, yt as timestamp, zn as CommentEditPubsubMessagePublicationWithFlexibleAuthorSchema } from "./schema-HH2zeH-j.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-DOSee621.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-5-rYJ-bC.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-Dr_-Lb8I.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";
@@ -1868,15 +1868,15 @@ async function throwIfChallengeSettingsAreInvalid({ challengeSettings, pkc, comm
1868
1868
  const processStartedCommunities = new TrackedInstanceRegistry();
1869
1869
  function normalizeRegistryDataPath(dataPath) {
1870
1870
  if (dataPath === void 0) return void 0;
1871
- const resolved = path$1.resolve(dataPath);
1871
+ const resolved = path.resolve(dataPath);
1872
1872
  let existing = resolved;
1873
1873
  let tail = "";
1874
1874
  while (true) try {
1875
- return path$1.join(fs.realpathSync.native(existing), tail);
1875
+ return path.join(fs.realpathSync.native(existing), tail);
1876
1876
  } catch {
1877
- const parent = path$1.dirname(existing);
1877
+ const parent = path.dirname(existing);
1878
1878
  if (parent === existing) return resolved;
1879
- tail = path$1.join(path$1.basename(existing), tail);
1879
+ tail = path.join(path.basename(existing), tail);
1880
1880
  existing = parent;
1881
1881
  }
1882
1882
  }
@@ -3632,9 +3632,9 @@ var DbHandler = class {
3632
3632
  if (needToMigrate) {
3633
3633
  if (dbExistsAlready && currentDbVersion > 0) {
3634
3634
  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 });
3635
+ backupDbPath = path.join(path.dirname(dbPath), ".backup_before_migration", `${path.basename(dbPath)}.${currentDbVersion}.${timestamp()}`);
3636
+ log(`Copying db ${path.basename(dbPath)} to ${backupDbPath} before migration`);
3637
+ if (!fs.existsSync(path.dirname(backupDbPath))) await fs.promises.mkdir(path.dirname(backupDbPath), { recursive: true });
3638
3638
  const sourceDb = new Database(dbPath, { fileMustExist: true });
3639
3639
  await sourceDb.backup(backupDbPath);
3640
3640
  sourceDb.close();
@@ -5452,10 +5452,10 @@ var DbHandler = class {
5452
5452
  if (this._db || this._keyv) await this.destoryConnection();
5453
5453
  this._transactionDepth = 0;
5454
5454
  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 });
5455
+ const oldPathString = path.join(dataPath, "communities", oldDbName);
5456
+ const newPathString = path.join(dataPath, "communities", newDbName);
5457
+ await fs.promises.mkdir(path.dirname(oldPathString), { recursive: true });
5458
+ await fs.promises.mkdir(path.dirname(newPathString), { recursive: true });
5459
5459
  try {
5460
5460
  if (!fs.existsSync(oldPathString)) log(`Old DB file ${oldPathString} does not exist. Cannot backup/rename.`);
5461
5461
  else {
@@ -5477,8 +5477,8 @@ var DbHandler = class {
5477
5477
  }
5478
5478
  async lockCommunityStart(communityAddress = this._community.address) {
5479
5479
  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);
5480
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5481
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", communityAddress);
5482
5482
  try {
5483
5483
  await import_src.default.lock(communityDbPath, {
5484
5484
  lockfilePath,
@@ -5499,8 +5499,8 @@ var DbHandler = class {
5499
5499
  async unlockCommunityStart(communityAddress = this._community.address) {
5500
5500
  const log = logger_default("pkc-js:local-community:db-handler:unlock:start");
5501
5501
  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);
5502
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5503
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", communityAddress);
5504
5504
  if (!fs.existsSync(lockfilePath) || !fs.existsSync(communityDbPath)) return;
5505
5505
  try {
5506
5506
  await import_src.default.unlock(communityDbPath, { lockfilePath });
@@ -5511,8 +5511,8 @@ var DbHandler = class {
5511
5511
  }
5512
5512
  }
5513
5513
  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);
5514
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${communityAddress}.start.lock`);
5515
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", communityAddress);
5516
5516
  return await import_src.default.check(communityDbPath, {
5517
5517
  lockfilePath,
5518
5518
  realpath: false,
@@ -5521,8 +5521,8 @@ var DbHandler = class {
5521
5521
  }
5522
5522
  async lockCommunityState() {
5523
5523
  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);
5524
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${this._community.address}.state.lock`);
5525
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", this._community.address);
5526
5526
  try {
5527
5527
  await import_src.default.lock(communityDbPath, {
5528
5528
  lockfilePath,
@@ -5539,8 +5539,8 @@ var DbHandler = class {
5539
5539
  }
5540
5540
  async unlockCommunityState() {
5541
5541
  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);
5542
+ const lockfilePath = path.join(this._community._pkc.dataPath, "communities", `${this._community.address}.state.lock`);
5543
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", this._community.address);
5544
5544
  if (!fs.existsSync(lockfilePath)) return;
5545
5545
  try {
5546
5546
  await import_src.default.unlock(communityDbPath, { lockfilePath });
@@ -5550,7 +5550,7 @@ var DbHandler = class {
5550
5550
  }
5551
5551
  }
5552
5552
  communityDbExists() {
5553
- const communityDbPath = path$1.join(this._community._pkc.dataPath, "communities", this._community.address);
5553
+ const communityDbPath = path.join(this._community._pkc.dataPath, "communities", this._community.address);
5554
5554
  return fs.existsSync(communityDbPath);
5555
5555
  }
5556
5556
  markCommentsAsPublishedToPostUpdates(commentCids) {
@@ -7288,11 +7288,11 @@ async function edit(community, newCommunityOptions) {
7288
7288
  const EXPORTS_KEY = STORAGE_KEYS[STORAGE_KEYS.EXPORTS];
7289
7289
  function defaultExportPathFor(community, exportId) {
7290
7290
  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`);
7291
+ return Path.join(community._pkc.dataPath, "exports", `${exportId}.sqlite`);
7292
7292
  }
7293
7293
  function sourceDbPathFor(community) {
7294
7294
  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);
7295
+ return Path.join(community._pkc.dataPath, "communities", community.address);
7296
7296
  }
7297
7297
  async function persistExports(community) {
7298
7298
  if (!community._dbHandler) return;
@@ -7368,9 +7368,9 @@ async function runExportTask(community, exportId, opts) {
7368
7368
  async function exportCommunityEmbedded(community, options = {}) {
7369
7369
  if (options.signal?.aborted) throw options.signal.reason ?? new DOMException("The operation was aborted.", "AbortError");
7370
7370
  const exportId = v4();
7371
- const destPath = options.exportPath ? path.resolve(options.exportPath) : defaultExportPathFor(community, exportId);
7371
+ const destPath = options.exportPath ? Path.resolve(options.exportPath) : defaultExportPathFor(community, exportId);
7372
7372
  const includePrivateKey = options.includePrivateKey === true;
7373
- if (path.resolve(destPath) === path.resolve(sourceDbPathFor(community))) throw new PKCError("ERR_EXPORT_PATH_TARGETS_LIVE_DB", {
7373
+ if (Path.resolve(destPath) === Path.resolve(sourceDbPathFor(community))) throw new PKCError("ERR_EXPORT_PATH_TARGETS_LIVE_DB", {
7374
7374
  communityAddress: community.address,
7375
7375
  exportPath: destPath
7376
7376
  });
@@ -1,7 +1,7 @@
1
1
  import { i as __toESM, r as __require, t as __commonJSMin } from "./chunk-2rV9d50f.js";
2
- import { $n as n$2, B as isIpfsCid, Bt as pTimeout, Ct as findStartedCommunity, D as deepMergeRuntimeFields, Dt as listUpdatingComments, E as createAbortError, En as CommentUpdateForChallengeVerificationSchema, Et as listStartedCommunities, H as isIpns, Ir as joinValues, It as untrackUpdatingComment, L as hideClassPrivateProps, Lr as parsedType, Nt as trackUpdatingComment, Ot as listUpdatingCommunities, Q as isStringDomain, R as ipnsNameToIpnsOverPubsubTopic, Rr as stringifyPrimitive, Rt as require_sha256, Sr as logger_default, Tr as setErrorMap, Tt as findUpdatingCommunity, a as ChallengeRequestMessageSchema, an as CommunityIpfsSchema, ar as e$1, b as areEquivalentCommunityAddresses, br as PKCError, bt as waitForUpdateInCommunityInstanceWithErrorAndTimeout, ct as removeUndefinedValuesRecursively, dn as PubsubTopicSchema, en as CommunityAnchorSchema, ft as retryKuboIpfsAdd, gt as sleepUntilTimeoutOrAbort, hr as FailedToFetchCommentIpfsFromGatewaysError, ht as shortifyCid, ir as e, k as doesDomainAddressHaveCapitalLetter, kn as CommentUpdateSchema, kt as refreshTrackedCommentAliases, lt as replaceXWithY, mr as require_retry, mt as shortifyAddress, nt as rejectWhenAbortSignalFires, r as ChallengeMessageSchema, rr as t$1, rt as rejectWhenCommunityStopsOrAborts, s as ChallengeVerificationMessageSchema, sr as r, t as ChallengeAnswerMessageSchema, tr as n$1, ut as resolveWhenPredicateIsTrue, vt as throwIfAbortSignalAborted, wt as findUpdatingComment, xn as CommentIpfsSchema, xr as messages, y as version_default, yt as timestamp, z as isAbortError, zt as TimeoutError } from "./schema-HH2zeH-j.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-DOSee621.js";
4
- import { o as getHeliaDebugContext } from "./util-DSIDv1Cb.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-5-rYJ-bC.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-Dr_-Lb8I.js";
4
+ import { o as getHeliaDebugContext } from "./util-_-fNQNIV.js";
5
5
  import path from "path";
6
6
  import assert from "assert";
7
7
  import fs from "fs";
@@ -2221,6 +2221,8 @@ const parseRpcExportCommunityModLogsResult = (result) => RpcExportCommunityModLo
2221
2221
  //#endregion
2222
2222
  //#region dist/node/clients/rpc-client/pkc-rpc-client.js
2223
2223
  const log = logger_default("pkc-js:PKCRpcClient");
2224
+ const WEBSOCKET_READY_STATE_CLOSED = 3;
2225
+ const DESTROY_SOCKET_CLOSE_TIMEOUT_MS = 5e3;
2224
2226
  const scheduleMacrotask = setTimeout.bind(globalThis);
2225
2227
  var PKCRpcClient = class extends import_lib.TypedEmitter {
2226
2228
  constructor(rpcServerUrl) {
@@ -2293,7 +2295,7 @@ var PKCRpcClient = class extends import_lib.TypedEmitter {
2293
2295
  this.emit("error", error);
2294
2296
  });
2295
2297
  this._webSocketClient.on("close", () => {
2296
- log.error("connection with web socket has been closed", this._websocketServerUrl);
2298
+ if (!this._destroyRequested) log.error("connection with web socket has been closed", this._websocketServerUrl);
2297
2299
  this._openConnectionPromise = void 0;
2298
2300
  this.setState("stopped");
2299
2301
  });
@@ -2363,7 +2365,10 @@ var PKCRpcClient = class extends import_lib.TypedEmitter {
2363
2365
  try {
2364
2366
  if (this._webSocketClient instanceof Client) {
2365
2367
  this._webSocketClient.setAutoReconnect(false);
2368
+ const socketClosed = this._waitForSocketClose();
2366
2369
  this._webSocketClient.close();
2370
+ await socketClosed;
2371
+ log("Closed websocket connection to", this._websocketServerUrl);
2367
2372
  }
2368
2373
  } catch (e) {
2369
2374
  log.error("Failed to close websocket", e);
@@ -2371,6 +2376,16 @@ var PKCRpcClient = class extends import_lib.TypedEmitter {
2371
2376
  this._openConnectionPromise = void 0;
2372
2377
  this.setState("stopped");
2373
2378
  }
2379
+ async _waitForSocketClose() {
2380
+ const socket = this._webSocketClient.socket;
2381
+ if (!socket || socket.readyState === WEBSOCKET_READY_STATE_CLOSED) return;
2382
+ const closed = new Promise((resolve) => socket.addEventListener("close", () => resolve(), { once: true }));
2383
+ try {
2384
+ await pTimeout(closed, { milliseconds: DESTROY_SOCKET_CLOSE_TIMEOUT_MS });
2385
+ } catch {
2386
+ log.error("Websocket did not close within", DESTROY_SOCKET_CLOSE_TIMEOUT_MS, "ms of destroy()", this._websocketServerUrl);
2387
+ }
2388
+ }
2374
2389
  toJSON() {}
2375
2390
  getSubscription(subscriptionId) {
2376
2391
  if (!this._subscriptionEvents[subscriptionId]) throw Error(`No subscription to RPC with id (${subscriptionId})`);
@@ -7010,7 +7025,7 @@ var PKC$1 = class extends PKCTypedEmitter {
7010
7025
  this.clients.libp2pJsClients = {};
7011
7026
  if (!this.libp2pJsClientsOptions) return;
7012
7027
  if (!this.httpRoutersOptions) throw Error("httpRoutersOptions is required for libp2pJsClient");
7013
- const { createLibp2pJsClientOrUseExistingOne } = await import("./helia-for-pkc-C8tOPlIj.js");
7028
+ const { createLibp2pJsClientOrUseExistingOne } = await import("./helia-for-pkc-Bj-Zb4JN.js");
7014
7029
  for (const clientOptions of this.libp2pJsClientsOptions) {
7015
7030
  const heliaNode = await createLibp2pJsClientOrUseExistingOne({
7016
7031
  ...clientOptions,
@@ -7289,7 +7304,7 @@ var PKC$1 = class extends PKCTypedEmitter {
7289
7304
  const log = logger_default("pkc-js:pkc:createLocalCommunity");
7290
7305
  log.trace("Received community options to create a local community instance:", options);
7291
7306
  if (!this._canCreateNewLocalCommunity()) throw new PKCError("ERR_CAN_NOT_CREATE_A_LOCAL_COMMUNITY", { pkcOptions: this._userPKCOptions });
7292
- const { LocalCommunity, createNewLocalCommunityDb, updateInstancePropsWithStartedCommunityOrDb } = await import("./local-community-DYEWq5rq.js");
7307
+ const { LocalCommunity, createNewLocalCommunityDb, updateInstancePropsWithStartedCommunityOrDb } = await import("./local-community-BrMLMEmt.js");
7293
7308
  const isLocalCommunity = (await listCommunitiesSync(this)).includes(options.address);
7294
7309
  const community = new LocalCommunity(this);
7295
7310
  if (isLocalCommunity) {