@pkcprotocol/pkc-js 0.0.83 → 0.0.85

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 (154) hide show
  1. package/README.md +16 -0
  2. package/dist/browser/clients/rpc-client/rpc-schema-util.d.ts +1 -0
  3. package/dist/browser/clients/rpc-client/schema.d.ts +1 -0
  4. package/dist/browser/community/rpc-remote-community.js +15 -8
  5. package/dist/browser/community/rpc-remote-community.js.map +1 -1
  6. package/dist/browser/community/schema.d.ts +106 -2
  7. package/dist/browser/community/schema.js +28 -7
  8. package/dist/browser/community/schema.js.map +1 -1
  9. package/dist/browser/errors.d.ts +9 -1
  10. package/dist/browser/errors.js +11 -0
  11. package/dist/browser/errors.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/index-with-compile-cache.d.ts +88 -2
  15. package/dist/browser/index.d.ts +88 -2
  16. package/dist/browser/pkc/pkc-with-rpc-client.d.ts +5 -3
  17. package/dist/browser/pkc/pkc-with-rpc-client.js +45 -7
  18. package/dist/browser/pkc/pkc-with-rpc-client.js.map +1 -1
  19. package/dist/browser/pkc/pkc.d.ts +6 -3
  20. package/dist/browser/pkc/pkc.js +71 -9
  21. package/dist/browser/pkc/pkc.js.map +1 -1
  22. package/dist/browser/pkc-error.d.ts +1 -1
  23. package/dist/browser/publications/comment/schema.d.ts +1 -1
  24. package/dist/browser/publications/comment/schema.js +5 -1
  25. package/dist/browser/publications/comment/schema.js.map +1 -1
  26. package/dist/browser/publications/community-edit/schema.d.ts +4 -0
  27. package/dist/browser/publications/publication-client-manager.js +10 -2
  28. package/dist/browser/publications/publication-client-manager.js.map +1 -1
  29. package/dist/browser/publications/publication.d.ts +4 -0
  30. package/dist/browser/publications/publication.js +36 -2
  31. package/dist/browser/publications/publication.js.map +1 -1
  32. package/dist/browser/pubsub-messages/schema.d.ts +2 -0
  33. package/dist/browser/rpc/src/index.js +4 -1
  34. package/dist/browser/rpc/src/index.js.map +1 -1
  35. package/dist/browser/rpc/src/lib/pkc-js/index.d.ts +44 -1
  36. package/dist/browser/rpc/src/schema.d.ts +265 -7
  37. package/dist/browser/rpc/src/schema.js +4 -2
  38. package/dist/browser/rpc/src/schema.js.map +1 -1
  39. package/dist/browser/runtime/node/community/challenges/exclude/exclude.d.ts +2 -2
  40. package/dist/browser/runtime/node/community/challenges/exclude/exclude.js +5 -1
  41. package/dist/browser/runtime/node/community/challenges/exclude/exclude.js.map +1 -1
  42. package/dist/browser/runtime/node/community/challenges/index.d.ts +7 -3
  43. package/dist/browser/runtime/node/community/challenges/index.js +29 -6
  44. package/dist/browser/runtime/node/community/challenges/index.js.map +1 -1
  45. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/address-list-validation.d.ts +4 -0
  46. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/address-list-validation.js +27 -0
  47. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/address-list-validation.js.map +1 -0
  48. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/blacklist.js +2 -1
  49. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/blacklist.js.map +1 -1
  50. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/publication-match.js +34 -1
  51. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/publication-match.js.map +1 -1
  52. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/question.js +8 -1
  53. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/question.js.map +1 -1
  54. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/whitelist.js +2 -1
  55. package/dist/browser/runtime/node/community/challenges/pkc-js-challenges/whitelist.js.map +1 -1
  56. package/dist/browser/runtime/node/community/challenges/validate-challenge-settings.d.ts +22 -0
  57. package/dist/browser/runtime/node/community/challenges/validate-challenge-settings.js +92 -0
  58. package/dist/browser/runtime/node/community/challenges/validate-challenge-settings.js.map +1 -0
  59. package/dist/browser/runtime/node/community/db-handler.d.ts +1 -0
  60. package/dist/browser/runtime/node/community/local-community/db-state.js +8 -0
  61. package/dist/browser/runtime/node/community/local-community/db-state.js.map +1 -1
  62. package/dist/browser/runtime/node/community/local-community/editing.js +8 -0
  63. package/dist/browser/runtime/node/community/local-community/editing.js.map +1 -1
  64. package/dist/browser/runtime/node/community/local-community/lifecycle.js +29 -0
  65. package/dist/browser/runtime/node/community/local-community/lifecycle.js.map +1 -1
  66. package/dist/browser/schema/schema-util.d.ts +9 -0
  67. package/dist/browser/schema.d.ts +352 -8
  68. package/dist/browser/test/test-util.d.ts +2 -0
  69. package/dist/browser/types.d.ts +5 -0
  70. package/dist/browser/util.d.ts +20 -1
  71. package/dist/browser/util.js +100 -2
  72. package/dist/browser/util.js.map +1 -1
  73. package/dist/bundled/bundle-manifest.json +33 -31
  74. package/dist/bundled/chunks/{helia-for-pkc-BtjQ8rfd.js → helia-for-pkc-C5Oe_ZSx.js} +2 -2
  75. package/dist/bundled/chunks/{local-community-DJM47U8C.js → local-community-BqxmCg5p.js} +107 -2
  76. package/dist/bundled/chunks/{local-community-B_Yg8LQH.js → local-community-D4SjlAKS.js} +1 -1
  77. package/dist/bundled/chunks/{node-lb4SvdBh.js → node-C2DKW30L.js} +110 -22
  78. package/dist/bundled/chunks/{rpc-local-community-a464veDe.js → rpc-local-community-o0teUvw_.js} +91 -19
  79. package/dist/bundled/chunks/{schema-mdv9_FG5.js → schema-qhSDu1BU.js} +126 -10
  80. package/dist/bundled/chunks/{util-y9-A9BnM.js → util-BVGNNIgn.js} +1 -1
  81. package/dist/bundled/index.js +1 -1
  82. package/dist/bundled/rpc/src/index.js +5 -5
  83. package/dist/node/clients/rpc-client/rpc-schema-util.d.ts +1 -0
  84. package/dist/node/clients/rpc-client/schema.d.ts +1 -0
  85. package/dist/node/community/rpc-remote-community.js +15 -8
  86. package/dist/node/community/rpc-remote-community.js.map +1 -1
  87. package/dist/node/community/schema.d.ts +106 -2
  88. package/dist/node/community/schema.js +28 -7
  89. package/dist/node/community/schema.js.map +1 -1
  90. package/dist/node/errors.d.ts +9 -1
  91. package/dist/node/errors.js +11 -0
  92. package/dist/node/errors.js.map +1 -1
  93. package/dist/node/generated-version.d.ts +1 -1
  94. package/dist/node/generated-version.js +1 -1
  95. package/dist/node/index-with-compile-cache.d.ts +88 -2
  96. package/dist/node/index.d.ts +88 -2
  97. package/dist/node/pkc/pkc-with-rpc-client.d.ts +5 -3
  98. package/dist/node/pkc/pkc-with-rpc-client.js +45 -7
  99. package/dist/node/pkc/pkc-with-rpc-client.js.map +1 -1
  100. package/dist/node/pkc/pkc.d.ts +6 -3
  101. package/dist/node/pkc/pkc.js +71 -9
  102. package/dist/node/pkc/pkc.js.map +1 -1
  103. package/dist/node/pkc-error.d.ts +1 -1
  104. package/dist/node/publications/comment/schema.d.ts +1 -1
  105. package/dist/node/publications/comment/schema.js +5 -1
  106. package/dist/node/publications/comment/schema.js.map +1 -1
  107. package/dist/node/publications/community-edit/schema.d.ts +4 -0
  108. package/dist/node/publications/publication-client-manager.js +10 -2
  109. package/dist/node/publications/publication-client-manager.js.map +1 -1
  110. package/dist/node/publications/publication.d.ts +4 -0
  111. package/dist/node/publications/publication.js +36 -2
  112. package/dist/node/publications/publication.js.map +1 -1
  113. package/dist/node/pubsub-messages/schema.d.ts +2 -0
  114. package/dist/node/rpc/src/index.js +4 -1
  115. package/dist/node/rpc/src/index.js.map +1 -1
  116. package/dist/node/rpc/src/lib/pkc-js/index.d.ts +44 -1
  117. package/dist/node/rpc/src/schema.d.ts +265 -7
  118. package/dist/node/rpc/src/schema.js +4 -2
  119. package/dist/node/rpc/src/schema.js.map +1 -1
  120. package/dist/node/runtime/node/community/challenges/exclude/exclude.d.ts +2 -2
  121. package/dist/node/runtime/node/community/challenges/exclude/exclude.js +5 -1
  122. package/dist/node/runtime/node/community/challenges/exclude/exclude.js.map +1 -1
  123. package/dist/node/runtime/node/community/challenges/index.d.ts +7 -3
  124. package/dist/node/runtime/node/community/challenges/index.js +29 -6
  125. package/dist/node/runtime/node/community/challenges/index.js.map +1 -1
  126. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/address-list-validation.d.ts +4 -0
  127. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/address-list-validation.js +27 -0
  128. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/address-list-validation.js.map +1 -0
  129. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/blacklist.js +2 -1
  130. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/blacklist.js.map +1 -1
  131. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/publication-match.js +34 -1
  132. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/publication-match.js.map +1 -1
  133. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/question.js +8 -1
  134. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/question.js.map +1 -1
  135. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/whitelist.js +2 -1
  136. package/dist/node/runtime/node/community/challenges/pkc-js-challenges/whitelist.js.map +1 -1
  137. package/dist/node/runtime/node/community/challenges/validate-challenge-settings.d.ts +22 -0
  138. package/dist/node/runtime/node/community/challenges/validate-challenge-settings.js +92 -0
  139. package/dist/node/runtime/node/community/challenges/validate-challenge-settings.js.map +1 -0
  140. package/dist/node/runtime/node/community/db-handler.d.ts +1 -0
  141. package/dist/node/runtime/node/community/local-community/db-state.js +8 -0
  142. package/dist/node/runtime/node/community/local-community/db-state.js.map +1 -1
  143. package/dist/node/runtime/node/community/local-community/editing.js +8 -0
  144. package/dist/node/runtime/node/community/local-community/editing.js.map +1 -1
  145. package/dist/node/runtime/node/community/local-community/lifecycle.js +29 -0
  146. package/dist/node/runtime/node/community/local-community/lifecycle.js.map +1 -1
  147. package/dist/node/schema/schema-util.d.ts +9 -0
  148. package/dist/node/schema.d.ts +352 -8
  149. package/dist/node/test/test-util.d.ts +2 -0
  150. package/dist/node/types.d.ts +5 -0
  151. package/dist/node/util.d.ts +20 -1
  152. package/dist/node/util.js +100 -2
  153. package/dist/node/util.js.map +1 -1
  154. package/package.json +3 -3
@@ -12,6 +12,7 @@ declare const _default: {
12
12
  path: import("zod").ZodOptional<import("zod").ZodString>;
13
13
  name: import("zod").ZodOptional<import("zod").ZodString>;
14
14
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
15
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
15
16
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
16
17
  community: import("zod").ZodOptional<import("zod").ZodObject<{
17
18
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -64,6 +65,7 @@ declare const _default: {
64
65
  path: import("zod").ZodOptional<import("zod").ZodString>;
65
66
  name: import("zod").ZodOptional<import("zod").ZodString>;
66
67
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
68
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
67
69
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
68
70
  community: import("zod").ZodOptional<import("zod").ZodObject<{
69
71
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -123,7 +125,48 @@ declare const _default: {
123
125
  error: import("zod").ZodString;
124
126
  reason: import("zod").ZodOptional<import("zod").ZodString>;
125
127
  }, import("zod/v4/core").$strip>]>]>>>;
126
- }, import("zod/v4/core").$strict>>>;
128
+ validateChallengeSettings: import("zod").ZodOptional<import("zod").ZodFunction<import("zod").ZodTuple<readonly [import("zod").ZodObject<{
129
+ challengeSettings: import("zod").ZodObject<{
130
+ path: import("zod").ZodOptional<import("zod").ZodString>;
131
+ name: import("zod").ZodOptional<import("zod").ZodString>;
132
+ options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
133
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
134
+ exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
135
+ community: import("zod").ZodOptional<import("zod").ZodObject<{
136
+ addresses: import("zod").ZodArray<import("zod").ZodString>;
137
+ maxCommentCids: import("zod").ZodNumber;
138
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
139
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
140
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
141
+ }, import("zod/v4/core").$strict>>;
142
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
143
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
144
+ postCount: import("zod").ZodOptional<import("zod").ZodNumber>;
145
+ replyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
146
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
147
+ challenges: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodNumber>>;
148
+ role: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnion<[import("zod").ZodEnum<{
149
+ owner: "owner";
150
+ admin: "admin";
151
+ moderator: "moderator";
152
+ }>, import("zod").ZodString]>>>;
153
+ address: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
154
+ rateLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
155
+ rateLimitChallengeSuccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
156
+ publicationType: import("zod").ZodOptional<import("zod").ZodObject<{
157
+ post: import("zod").ZodOptional<import("zod").ZodBoolean>;
158
+ reply: import("zod").ZodOptional<import("zod").ZodBoolean>;
159
+ vote: import("zod").ZodOptional<import("zod").ZodBoolean>;
160
+ commentEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
161
+ commentModeration: import("zod").ZodOptional<import("zod").ZodBoolean>;
162
+ communityEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
163
+ }, import("zod/v4/core").$loose>>;
164
+ }, import("zod/v4/core").$loose>>>;
165
+ description: import("zod").ZodOptional<import("zod").ZodString>;
166
+ pendingApproval: import("zod").ZodOptional<import("zod").ZodBoolean>;
167
+ }, import("zod/v4/core").$strict>;
168
+ }, import("zod/v4/core").$strip>], null>, import("zod").ZodVoid>>;
169
+ }, import("zod/v4/core").$loose>>>;
127
170
  createAnchorIpnsRecord: typeof import("./signer/ipns-record.js").createAnchorIpnsRecord;
128
171
  };
129
172
  export default _default;
@@ -139,6 +182,7 @@ export declare const challenges: Record<string, import("zod/v4/core").$InferInne
139
182
  path: import("zod").ZodOptional<import("zod").ZodString>;
140
183
  name: import("zod").ZodOptional<import("zod").ZodString>;
141
184
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
185
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
142
186
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
143
187
  community: import("zod").ZodOptional<import("zod").ZodObject<{
144
188
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -191,6 +235,7 @@ export declare const challenges: Record<string, import("zod/v4/core").$InferInne
191
235
  path: import("zod").ZodOptional<import("zod").ZodString>;
192
236
  name: import("zod").ZodOptional<import("zod").ZodString>;
193
237
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
238
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
194
239
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
195
240
  community: import("zod").ZodOptional<import("zod").ZodObject<{
196
241
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -250,7 +295,48 @@ export declare const challenges: Record<string, import("zod/v4/core").$InferInne
250
295
  error: import("zod").ZodString;
251
296
  reason: import("zod").ZodOptional<import("zod").ZodString>;
252
297
  }, import("zod/v4/core").$strip>]>]>>>;
253
- }, import("zod/v4/core").$strict>>>;
298
+ validateChallengeSettings: import("zod").ZodOptional<import("zod").ZodFunction<import("zod").ZodTuple<readonly [import("zod").ZodObject<{
299
+ challengeSettings: import("zod").ZodObject<{
300
+ path: import("zod").ZodOptional<import("zod").ZodString>;
301
+ name: import("zod").ZodOptional<import("zod").ZodString>;
302
+ options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
303
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
304
+ exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
305
+ community: import("zod").ZodOptional<import("zod").ZodObject<{
306
+ addresses: import("zod").ZodArray<import("zod").ZodString>;
307
+ maxCommentCids: import("zod").ZodNumber;
308
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
309
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
310
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
311
+ }, import("zod/v4/core").$strict>>;
312
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
313
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
314
+ postCount: import("zod").ZodOptional<import("zod").ZodNumber>;
315
+ replyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
316
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
317
+ challenges: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodNumber>>;
318
+ role: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnion<[import("zod").ZodEnum<{
319
+ owner: "owner";
320
+ admin: "admin";
321
+ moderator: "moderator";
322
+ }>, import("zod").ZodString]>>>;
323
+ address: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
324
+ rateLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
325
+ rateLimitChallengeSuccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
326
+ publicationType: import("zod").ZodOptional<import("zod").ZodObject<{
327
+ post: import("zod").ZodOptional<import("zod").ZodBoolean>;
328
+ reply: import("zod").ZodOptional<import("zod").ZodBoolean>;
329
+ vote: import("zod").ZodOptional<import("zod").ZodBoolean>;
330
+ commentEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
331
+ commentModeration: import("zod").ZodOptional<import("zod").ZodBoolean>;
332
+ communityEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
333
+ }, import("zod/v4/core").$loose>>;
334
+ }, import("zod/v4/core").$loose>>>;
335
+ description: import("zod").ZodOptional<import("zod").ZodString>;
336
+ pendingApproval: import("zod").ZodOptional<import("zod").ZodBoolean>;
337
+ }, import("zod/v4/core").$strict>;
338
+ }, import("zod/v4/core").$strip>], null>, import("zod").ZodVoid>>;
339
+ }, import("zod/v4/core").$loose>>>;
254
340
  export declare const createAnchorIpnsRecord: typeof import("./signer/ipns-record.js").createAnchorIpnsRecord;
255
341
  export type { NameResolverInterface } from "./schema.js";
256
342
  export type { NameResolver } from "./types.js";
@@ -17,6 +17,7 @@ declare const PKC: {
17
17
  path: import("zod").ZodOptional<import("zod").ZodString>;
18
18
  name: import("zod").ZodOptional<import("zod").ZodString>;
19
19
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
20
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
20
21
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
21
22
  community: import("zod").ZodOptional<import("zod").ZodObject<{
22
23
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -69,6 +70,7 @@ declare const PKC: {
69
70
  path: import("zod").ZodOptional<import("zod").ZodString>;
70
71
  name: import("zod").ZodOptional<import("zod").ZodString>;
71
72
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
73
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
72
74
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
73
75
  community: import("zod").ZodOptional<import("zod").ZodObject<{
74
76
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -128,7 +130,48 @@ declare const PKC: {
128
130
  error: import("zod").ZodString;
129
131
  reason: import("zod").ZodOptional<import("zod").ZodString>;
130
132
  }, import("zod/v4/core").$strip>]>]>>>;
131
- }, import("zod/v4/core").$strict>>>;
133
+ validateChallengeSettings: import("zod").ZodOptional<import("zod").ZodFunction<import("zod").ZodTuple<readonly [import("zod").ZodObject<{
134
+ challengeSettings: import("zod").ZodObject<{
135
+ path: import("zod").ZodOptional<import("zod").ZodString>;
136
+ name: import("zod").ZodOptional<import("zod").ZodString>;
137
+ options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
138
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
139
+ exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
140
+ community: import("zod").ZodOptional<import("zod").ZodObject<{
141
+ addresses: import("zod").ZodArray<import("zod").ZodString>;
142
+ maxCommentCids: import("zod").ZodNumber;
143
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
144
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
145
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
146
+ }, import("zod/v4/core").$strict>>;
147
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
148
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
149
+ postCount: import("zod").ZodOptional<import("zod").ZodNumber>;
150
+ replyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
151
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
152
+ challenges: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodNumber>>;
153
+ role: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnion<[import("zod").ZodEnum<{
154
+ owner: "owner";
155
+ admin: "admin";
156
+ moderator: "moderator";
157
+ }>, import("zod").ZodString]>>>;
158
+ address: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
159
+ rateLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
160
+ rateLimitChallengeSuccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
161
+ publicationType: import("zod").ZodOptional<import("zod").ZodObject<{
162
+ post: import("zod").ZodOptional<import("zod").ZodBoolean>;
163
+ reply: import("zod").ZodOptional<import("zod").ZodBoolean>;
164
+ vote: import("zod").ZodOptional<import("zod").ZodBoolean>;
165
+ commentEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
166
+ commentModeration: import("zod").ZodOptional<import("zod").ZodBoolean>;
167
+ communityEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
168
+ }, import("zod/v4/core").$loose>>;
169
+ }, import("zod/v4/core").$loose>>>;
170
+ description: import("zod").ZodOptional<import("zod").ZodString>;
171
+ pendingApproval: import("zod").ZodOptional<import("zod").ZodBoolean>;
172
+ }, import("zod/v4/core").$strict>;
173
+ }, import("zod/v4/core").$strip>], null>, import("zod").ZodVoid>>;
174
+ }, import("zod/v4/core").$loose>>>;
132
175
  createAnchorIpnsRecord: typeof signerCreateAnchorIpnsRecord;
133
176
  };
134
177
  export default PKC;
@@ -144,6 +187,7 @@ export declare const challenges: Record<string, import("zod/v4/core").$InferInne
144
187
  path: import("zod").ZodOptional<import("zod").ZodString>;
145
188
  name: import("zod").ZodOptional<import("zod").ZodString>;
146
189
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
190
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
147
191
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
148
192
  community: import("zod").ZodOptional<import("zod").ZodObject<{
149
193
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -196,6 +240,7 @@ export declare const challenges: Record<string, import("zod/v4/core").$InferInne
196
240
  path: import("zod").ZodOptional<import("zod").ZodString>;
197
241
  name: import("zod").ZodOptional<import("zod").ZodString>;
198
242
  options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
243
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
199
244
  exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
200
245
  community: import("zod").ZodOptional<import("zod").ZodObject<{
201
246
  addresses: import("zod").ZodArray<import("zod").ZodString>;
@@ -255,7 +300,48 @@ export declare const challenges: Record<string, import("zod/v4/core").$InferInne
255
300
  error: import("zod").ZodString;
256
301
  reason: import("zod").ZodOptional<import("zod").ZodString>;
257
302
  }, import("zod/v4/core").$strip>]>]>>>;
258
- }, import("zod/v4/core").$strict>>>;
303
+ validateChallengeSettings: import("zod").ZodOptional<import("zod").ZodFunction<import("zod").ZodTuple<readonly [import("zod").ZodObject<{
304
+ challengeSettings: import("zod").ZodObject<{
305
+ path: import("zod").ZodOptional<import("zod").ZodString>;
306
+ name: import("zod").ZodOptional<import("zod").ZodString>;
307
+ options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
308
+ publicOptions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
309
+ exclude: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
310
+ community: import("zod").ZodOptional<import("zod").ZodObject<{
311
+ addresses: import("zod").ZodArray<import("zod").ZodString>;
312
+ maxCommentCids: import("zod").ZodNumber;
313
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
314
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
315
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
316
+ }, import("zod/v4/core").$strict>>;
317
+ postScore: import("zod").ZodOptional<import("zod").ZodNumber>;
318
+ replyScore: import("zod").ZodOptional<import("zod").ZodNumber>;
319
+ postCount: import("zod").ZodOptional<import("zod").ZodNumber>;
320
+ replyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
321
+ firstCommentTimestamp: import("zod").ZodOptional<import("zod").ZodNumber>;
322
+ challenges: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodNumber>>;
323
+ role: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnion<[import("zod").ZodEnum<{
324
+ owner: "owner";
325
+ admin: "admin";
326
+ moderator: "moderator";
327
+ }>, import("zod").ZodString]>>>;
328
+ address: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
329
+ rateLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
330
+ rateLimitChallengeSuccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
331
+ publicationType: import("zod").ZodOptional<import("zod").ZodObject<{
332
+ post: import("zod").ZodOptional<import("zod").ZodBoolean>;
333
+ reply: import("zod").ZodOptional<import("zod").ZodBoolean>;
334
+ vote: import("zod").ZodOptional<import("zod").ZodBoolean>;
335
+ commentEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
336
+ commentModeration: import("zod").ZodOptional<import("zod").ZodBoolean>;
337
+ communityEdit: import("zod").ZodOptional<import("zod").ZodBoolean>;
338
+ }, import("zod/v4/core").$loose>>;
339
+ }, import("zod/v4/core").$loose>>>;
340
+ description: import("zod").ZodOptional<import("zod").ZodString>;
341
+ pendingApproval: import("zod").ZodOptional<import("zod").ZodBoolean>;
342
+ }, import("zod/v4/core").$strict>;
343
+ }, import("zod/v4/core").$strip>], null>, import("zod").ZodVoid>>;
344
+ }, import("zod/v4/core").$loose>>>;
259
345
  export declare const createAnchorIpnsRecord: typeof signerCreateAnchorIpnsRecord;
260
346
  export type { NameResolverInterface } from "./schema.js";
261
347
  export type { NameResolver } from "./types.js";
@@ -1,5 +1,5 @@
1
1
  import { PKC } from "./pkc.js";
2
- import type { InputPKCOptions, GetCommunityArgs } from "../types.js";
2
+ import type { InputPKCOptions, GetCommunityArgs, GetCommentArgs } from "../types.js";
3
3
  import { CreateRpcCommunityFunctionArgumentSchema } from "../community/schema.js";
4
4
  import { RpcLocalCommunity } from "../community/rpc-local-community.js";
5
5
  import { RpcRemoteCommunity } from "../community/rpc-remote-community.js";
@@ -18,7 +18,9 @@ export declare class PKCWithRpcClient extends PKC {
18
18
  resolvedAuthorName: string | null;
19
19
  }>;
20
20
  destroy(): Promise<void>;
21
- getComment(commentCid: CidRpcParam): Promise<import("../publications/comment/comment.js").Comment>;
21
+ getComment(getCommentArgs: GetCommentArgs): Promise<import("../publications/comment/comment.js").Comment>;
22
22
  getCommunity(getCommunityArgs: GetCommunityArgs): Promise<import("../community/remote-community.js").RemoteCommunity>;
23
- createCommunity(options?: z.infer<typeof CreateRpcCommunityFunctionArgumentSchema> | RpcRemoteCommunityJson | RpcLocalCommunityJson): Promise<RpcLocalCommunity | RpcRemoteCommunity>;
23
+ createCommunity(options?: z.infer<typeof CreateRpcCommunityFunctionArgumentSchema> | RpcRemoteCommunityJson | RpcLocalCommunityJson, opts?: {
24
+ abortSignal?: AbortSignal;
25
+ }): Promise<RpcLocalCommunity | RpcRemoteCommunity>;
24
26
  }
@@ -3,6 +3,8 @@ import { PKC } from "./pkc.js";
3
3
  import { parseCreateRpcCommunityFunctionArgumentSchemaWithPKCErrorIfItFails } from "../schema/schema-util.js";
4
4
  import { RpcLocalCommunity } from "../community/rpc-local-community.js";
5
5
  import { RpcRemoteCommunity } from "../community/rpc-remote-community.js";
6
+ import { PKCError } from "../pkc-error.js";
7
+ import { rejectWhenAbortSignalFires, rejectWhenCommunityStopsOrAborts, throwIfAbortSignalAborted } from "../util.js";
6
8
  import { parseRpcAuthorNameParam, parseRpcCidParam, parseRpcFetchCidParam } from "../clients/rpc-client/rpc-schema-util.js";
7
9
  import { listStartedCommunities } from "./tracked-instance-registry-util.js";
8
10
  // This is a helper class for separating RPC-client logic from main PKC
@@ -47,9 +49,23 @@ export class PKCWithRpcClient extends PKC {
47
49
  await super.destroy();
48
50
  await this._pkcRpcClient.destroy();
49
51
  }
50
- async getComment(commentCid) {
51
- const parsedArgs = parseRpcCidParam(commentCid);
52
- const commentIpfs = await this._pkcRpcClient.getComment(parsedArgs);
52
+ // The RPC call below has no cancellation of its own, so an aborting caller (and pkc.destroy(),
53
+ // which cannot reach into this function) would be left waiting on it. Racing the combined signal
54
+ // gives them a way out, matching the direct path in PKC.getComment (issue #278).
55
+ async getComment(getCommentArgs) {
56
+ const { abortSignal, ...cidArgs } = getCommentArgs;
57
+ const parsedArgs = parseRpcCidParam(cidArgs);
58
+ const cancellation = rejectWhenAbortSignalFires({
59
+ abortSignal: this._combineWithDestroyAbortSignal(abortSignal),
60
+ error: () => new PKCError("ERR_GET_COMMENT_ABORTED", { getCommentArgs: parsedArgs, abortReason: abortSignal?.reason })
61
+ });
62
+ let commentIpfs;
63
+ try {
64
+ commentIpfs = await Promise.race([this._pkcRpcClient.getComment(parsedArgs), cancellation.promise]);
65
+ }
66
+ finally {
67
+ cancellation.cleanup();
68
+ }
53
69
  return this.createComment({ ...parsedArgs, raw: { ...parsedArgs?.raw, comment: commentIpfs } });
54
70
  }
55
71
  async getCommunity(getCommunityArgs) {
@@ -58,8 +74,9 @@ export class PKCWithRpcClient extends PKC {
58
74
  }
59
75
  return super.getCommunity(getCommunityArgs);
60
76
  }
61
- async createCommunity(options = {}) {
77
+ async createCommunity(options = {}, opts) {
62
78
  const log = Logger("pkc-js:pkc-with-rpc-client:createCommunity");
79
+ throwIfAbortSignalAborted(opts?.abortSignal);
63
80
  // No need to parse if it's a jsonified instance
64
81
  const parsedRpcOptions = "clients" in options ? options : parseCreateRpcCommunityFunctionArgumentSchemaWithPKCErrorIfItFails(options);
65
82
  log.trace("Received community options to create a community instance over RPC:", options);
@@ -97,9 +114,30 @@ export class PKCWithRpcClient extends PKC {
97
114
  const updatePromise = new Promise((resolve) => community.once("update", resolve));
98
115
  let error;
99
116
  const errorPromise = new Promise((resolve) => community.once("error", (err) => resolve((error = err))));
100
- await community._createAndSubscribeToNewUpdatingCommunity(community);
101
- await community.update();
102
- await Promise.race([updatePromise, errorPromise]);
117
+ // Every wait below is unbounded: the subscribe call may never be answered, and the
118
+ // server may never push an update for a community it hosts. Without something to
119
+ // lose to, an aborting caller (and pkc.destroy(), which cannot reach into this
120
+ // function) is left with a promise that never settles — issue #277. The instance is
121
+ // tracked in _updatingCommunities before the first wait, so a third-party stop()
122
+ // reaches it too, and that is the second way out.
123
+ const cancellation = rejectWhenCommunityStopsOrAborts({
124
+ community,
125
+ abortSignal: this._combineWithDestroyAbortSignal(opts?.abortSignal)
126
+ });
127
+ try {
128
+ await Promise.race([community._createAndSubscribeToNewUpdatingCommunity(community), cancellation.promise]);
129
+ await Promise.race([community.update(), cancellation.promise]);
130
+ await Promise.race([updatePromise, errorPromise, cancellation.promise]);
131
+ }
132
+ catch (e) {
133
+ // stop() is a no-op on an instance that is already stopped, which is exactly the
134
+ // case when we lost to a stop rather than to an abort.
135
+ await community.stop().catch((stopErr) => log.error("Failed to stop a cancelled community instance", stopErr));
136
+ throw e;
137
+ }
138
+ finally {
139
+ cancellation.cleanup();
140
+ }
103
141
  await community.stop();
104
142
  if (error)
105
143
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"pkc-with-rpc-client.js","sourceRoot":"","sources":["../../../src/pkc/pkc-with-rpc-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkc-with-rpc-client.js","sourceRoot":"","sources":["../../../src/pkc/pkc-with-rpc-client.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { StorageInterface, GatewayClient, KuboRpcClient, PKCEvents, PubsubClient, ParsedPKCOptions, LRUStorageInterface, LRUStorageConstructor, InputPKCOptions, PKCMemCaches, GetCommunityArgs } from "../types.js";
1
+ import type { StorageInterface, GatewayClient, KuboRpcClient, PKCEvents, PubsubClient, ParsedPKCOptions, LRUStorageInterface, LRUStorageConstructor, InputPKCOptions, PKCMemCaches, GetCommunityArgs, GetCommentArgs } from "../types.js";
2
2
  import { Comment } from "../publications/comment/comment.js";
3
3
  import Vote from "../publications/vote/vote.js";
4
4
  import { CommentEdit } from "../publications/comment-edit/comment-edit.js";
@@ -102,7 +102,7 @@ export declare class PKC extends PKCTypedEmitter<PKCEvents> implements ParsedPKC
102
102
  _waitForHttpRoutersSetupToSettle(): Promise<void>;
103
103
  _init(): Promise<void>;
104
104
  getCommunity(getCommunityArgs: GetCommunityArgs): Promise<RemoteCommunity>;
105
- getComment(cid: CidRpcParam): Promise<Comment>;
105
+ getComment(getCommentArgs: GetCommentArgs): Promise<Comment>;
106
106
  private _initMissingFieldsOfPublicationBeforeSigning;
107
107
  private _createCommentInstanceFromAnotherCommentInstance;
108
108
  createComment(options: CommentIpfsType | CommentPubsubMessagePublication | {
@@ -119,7 +119,9 @@ export declare class PKC extends PKCTypedEmitter<PKCEvents> implements ParsedPKC
119
119
  private _createRemoteCommunityInstance;
120
120
  private _createLocalCommunity;
121
121
  private _createCommunityInstanceFromJsonifiedCommunity;
122
- createCommunity(options?: z.infer<typeof CreateCommunityFunctionArgumentsSchema> | CommunityJson): Promise<RemoteCommunity | RpcRemoteCommunity | RpcLocalCommunity | LocalCommunity>;
122
+ createCommunity(options?: z.infer<typeof CreateCommunityFunctionArgumentsSchema> | CommunityJson, opts?: {
123
+ abortSignal?: AbortSignal;
124
+ }): Promise<RemoteCommunity | RpcRemoteCommunity | RpcLocalCommunity | LocalCommunity>;
123
125
  _createVoteInstanceFromJsonfiedVote(jsonfied: VoteJson): Promise<Vote>;
124
126
  createVote(options: CreateVoteOptions | VotePubsubMessagePublication | VoteJson): Promise<Vote>;
125
127
  _createCommentEditInstanceFromJsonfiedCommentEdit(jsonfied: CommentEditTypeJson): Promise<CommentEdit>;
@@ -140,5 +142,6 @@ export declare class PKC extends PKCTypedEmitter<PKCEvents> implements ParsedPKC
140
142
  }): Promise<void>;
141
143
  _createStorageLRU(opts: Omit<LRUStorageConstructor, "pkc">): Promise<LRUStorageInterface>;
142
144
  _getDestroyAbortSignal(): AbortSignal;
145
+ _combineWithDestroyAbortSignal(abortSignal?: AbortSignal): AbortSignal;
143
146
  destroy(): Promise<void>;
144
147
  }
@@ -1,6 +1,6 @@
1
1
  import { getDefaultDataPath, listCommunitiesSync as nodeListCommunities, createKuboRpcClient, monitorCommunitiesDirectory, tryToDeleteCommunitiesThatFailedToBeDeletedBefore } from "../runtime/node/util.js";
2
2
  import { Comment } from "../publications/comment/comment.js";
3
- import { waitForUpdateInCommunityInstanceWithErrorAndTimeout, areEquivalentCommunityAddresses, deepMergeRuntimeFields, doesDomainAddressHaveCapitalLetter, hideClassPrivateProps, isStringDomain, removeUndefinedValuesRecursively, timestamp, resolveWhenPredicateIsTrue } from "../util.js";
3
+ import { waitForUpdateInCommunityInstanceWithErrorAndTimeout, areEquivalentCommunityAddresses, deepMergeRuntimeFields, doesDomainAddressHaveCapitalLetter, hideClassPrivateProps, isStringDomain, removeUndefinedValuesRecursively, timestamp, resolveWhenPredicateIsTrue, throwIfAbortSignalAborted } from "../util.js";
4
4
  import Vote from "../publications/vote/vote.js";
5
5
  import { createSigner } from "../signer/index.js";
6
6
  import { CommentEdit } from "../publications/comment-edit/comment-edit.js";
@@ -277,28 +277,67 @@ export class PKC extends PKCTypedEmitter {
277
277
  this._clientsManager = new PKCClientsManager(this);
278
278
  hideClassPrivateProps(this);
279
279
  }
280
+ // `abortSignal` unwinds the IPNS wait below immediately instead of blocking for
281
+ // `_timeouts["community-ipns"]`, and rejects with ERR_GET_COMMUNITY_ABORTED (issue #275). It has
282
+ // to be split off before the rest reaches createCommunity(), whose schemas are `.strict()`.
280
283
  async getCommunity(getCommunityArgs) {
281
- if (!getCommunityArgs.address && !getCommunityArgs.name && !getCommunityArgs.publicKey) {
284
+ const { abortSignal, ...communityIdentifier } = getCommunityArgs;
285
+ if (!communityIdentifier.address && !communityIdentifier.name && !communityIdentifier.publicKey) {
282
286
  throw new Error("At least one of address, name, or publicKey must be provided");
283
287
  }
284
- const community = await this.createCommunity(getCommunityArgs);
288
+ // Same code as an abort mid-fetch, so callers have one thing to check regardless of when the
289
+ // signal fired, and we skip creating an instance we would only stop again.
290
+ if (abortSignal?.aborted)
291
+ throw new PKCError("ERR_GET_COMMUNITY_ABORTED", { communityIdentifier, abortReason: abortSignal.reason });
292
+ const community = await this.createCommunity(communityIdentifier, { abortSignal });
285
293
  if (typeof community.createdAt === "number")
286
294
  return community; // It's a local community, and already has been loaded, no need to wait
287
295
  const timeoutMs = this._timeouts["community-ipns"];
288
- await waitForUpdateInCommunityInstanceWithErrorAndTimeout(community, timeoutMs);
296
+ await waitForUpdateInCommunityInstanceWithErrorAndTimeout({ community, timeoutMs, abortSignal });
289
297
  return community;
290
298
  }
291
- async getComment(cid) {
299
+ // `abortSignal` unwinds the CommentIpfs wait below immediately instead of blocking for
300
+ // `_timeouts["comment-ipfs"]`, and rejects with ERR_GET_COMMENT_ABORTED (issue #278). It has to
301
+ // be split off before the rest reaches createComment(), which would otherwise carry the signal
302
+ // onto the instance — the same reason `abortSignal` is a reserved comment field.
303
+ async getComment(getCommentArgs) {
292
304
  const log = Logger("pkc-js:pkc:getComment");
293
- const parsedGetCommentArgs = parseRpcCidParam(cid);
305
+ const { abortSignal, ...cidArgs } = getCommentArgs;
306
+ const parsedGetCommentArgs = parseRpcCidParam(cidArgs);
307
+ // Same code as an abort mid-fetch, so callers have one thing to check regardless of when the
308
+ // signal fired, and we skip creating an instance we would only stop again.
309
+ if (abortSignal?.aborted)
310
+ throw new PKCError("ERR_GET_COMMENT_ABORTED", { getCommentArgs: parsedGetCommentArgs, abortReason: abortSignal.reason });
294
311
  // getComment is interested in loading CommentIpfs only
295
312
  const comment = await this.createComment(parsedGetCommentArgs);
296
313
  let lastUpdateError;
297
314
  const errorListener = (err) => (lastUpdateError = err);
298
315
  comment.on("error", errorListener);
316
+ // Rejects the race below on abort. Reported as ERR_GET_COMMENT_ABORTED rather than as the
317
+ // timeout, so callers can tell a slow network from a cancellation.
318
+ let abortError;
319
+ let abortReject;
320
+ const abortListener = () => {
321
+ abortError = new PKCError("ERR_GET_COMMENT_ABORTED", {
322
+ getCommentArgs: parsedGetCommentArgs,
323
+ abortReason: abortSignal?.reason,
324
+ lastUpdateError
325
+ });
326
+ abortReject?.(abortError);
327
+ };
328
+ const abortPromise = new Promise((_, reject) => {
329
+ abortReject = reject;
330
+ });
331
+ // pTimeout attaches its own handler, but only once we hand it the race below. Give it one up
332
+ // front so an abort landing before that never surfaces as an unhandled rejection.
333
+ void abortPromise.catch(() => { });
334
+ // The signal outlives this call (a caller's long-lived stop signal), so the listener is
335
+ // removed in the `finally` on every outcome. `{ once: true }` alone only detaches it when
336
+ // abort fires, which leaks one listener per call (issues #145, #146).
337
+ abortSignal?.addEventListener("abort", abortListener);
299
338
  const commentTimeout = this._timeouts["comment-ipfs"];
300
339
  try {
301
- await pTimeout(comment._attemptInfintelyToLoadCommentIpfs(), {
340
+ await pTimeout(Promise.race([comment._attemptInfintelyToLoadCommentIpfs(), abortPromise]), {
302
341
  milliseconds: commentTimeout,
303
342
  message: lastUpdateError ||
304
343
  new TimeoutError(`pkc.getComment({cid: ${parsedGetCommentArgs}}) timed out after ${commentTimeout}ms`)
@@ -308,11 +347,16 @@ export class PKC extends PKCTypedEmitter {
308
347
  return comment;
309
348
  }
310
349
  catch (e) {
350
+ // Abort wins over whatever else the comment happened to emit: the caller cancelled on
351
+ // purpose, so reporting a stale retriable error instead would be misleading.
352
+ if (abortError)
353
+ throw abortError;
311
354
  if (lastUpdateError)
312
355
  throw lastUpdateError;
313
356
  throw e;
314
357
  }
315
358
  finally {
359
+ abortSignal?.removeEventListener("abort", abortListener);
316
360
  comment.removeListener("error", errorListener);
317
361
  await comment.stop();
318
362
  }
@@ -589,8 +633,13 @@ export class PKC extends PKCTypedEmitter {
589
633
  else
590
634
  return this._createRemoteCommunityInstance(jsonfied);
591
635
  }
592
- async createCommunity(options = {}) {
636
+ // `opts.abortSignal` is a second parameter rather than a key on `options`, because `options` is
637
+ // zod-parsed by `.strict()` schemas that would reject the extra key. It only has teeth on the
638
+ // RPC path, whose local-community branch parks on waits with no timeout (issue #277); here it
639
+ // just refuses to start work the caller has already given up on.
640
+ async createCommunity(options = {}, opts) {
593
641
  const log = Logger("pkc-js:pkc:createCommunity");
642
+ throwIfAbortSignalAborted(opts?.abortSignal);
594
643
  if ("clients" in options)
595
644
  return this._createCommunityInstanceFromJsonifiedCommunity(options);
596
645
  const parsedOptions = options;
@@ -937,10 +986,23 @@ export class PKC extends PKCTypedEmitter {
937
986
  return this._storageLRUs[opts.cacheName];
938
987
  }
939
988
  _getDestroyAbortSignal() {
940
- if (!this._destroyAbortController)
989
+ if (!this._destroyAbortController) {
941
990
  this._destroyAbortController = new AbortController();
991
+ // destroy() aborts with `?.`, so nothing happens there if no caller had asked for the
992
+ // signal yet. Without this, the first caller to ask afterwards is handed a live signal
993
+ // for a pkc that is already torn down, and waits on it forever (issue #277).
994
+ if (this.destroyed)
995
+ this._destroyAbortController.abort(new PKCError("ERR_PKC_IS_DESTROYED"));
996
+ }
942
997
  return this._destroyAbortController.signal;
943
998
  }
999
+ // Folds teardown into a caller's signal, so work nobody explicitly cancelled still stops when the
1000
+ // pkc is destroyed. Returns the destroy signal untouched when there is nothing to combine, which
1001
+ // keeps AbortSignal.any() (and the listener it registers on both sources) off the common path.
1002
+ _combineWithDestroyAbortSignal(abortSignal) {
1003
+ const destroySignal = this._getDestroyAbortSignal();
1004
+ return abortSignal ? AbortSignal.any([abortSignal, destroySignal]) : destroySignal;
1005
+ }
944
1006
  async destroy() {
945
1007
  const log = Logger("pkc-js:pkc:destroy");
946
1008
  if (this.destroyed)