@orangecheck/chat-core 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{channel-D8aOo4eI.d.mts → channel-ChK3AAvd.d.mts} +8 -3
- package/dist/{channel-D8aOo4eI.d.ts → channel-ChK3AAvd.d.ts} +8 -3
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +23 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +23 -6
- package/dist/index.mjs.map +1 -1
- package/dist/io.d.mts +13 -14
- package/dist/io.d.ts +13 -14
- package/dist/io.js +45 -23
- package/dist/io.js.map +1 -1
- package/dist/io.mjs +45 -24
- package/dist/io.mjs.map +1 -1
- package/package.json +2 -2
- package/src/channel.test.ts +121 -7
- package/src/channel.ts +48 -12
- package/src/io.test.ts +97 -51
- package/src/io.ts +95 -50
package/dist/index.mjs
CHANGED
|
@@ -514,6 +514,9 @@ async function checkWritePermission(content, descriptor, role, pid, opts, verify
|
|
|
514
514
|
if (!content.write_proof) return "E_CHAN_FLOOR";
|
|
515
515
|
if (!opts.controlSig) return "E_CHAN_FLOOR";
|
|
516
516
|
if (!isBitcoinAddress(content.author_address)) return "E_CHAN_FLOOR";
|
|
517
|
+
if (opts.tipHeight === "unanswered") {
|
|
518
|
+
throw new UnansweredReadError("the chain tip could not be read");
|
|
519
|
+
}
|
|
517
520
|
const v = evaluateWriteProof(content.write_proof, w, opts.tipHeight);
|
|
518
521
|
if (v.verdict !== "accept") return "E_CHAN_FLOOR";
|
|
519
522
|
const sigOk = await verify({
|
|
@@ -855,15 +858,25 @@ function orderChannelPosts(posts) {
|
|
|
855
858
|
async function verifyChannelPosts(events, descriptor, opts) {
|
|
856
859
|
const removed = /* @__PURE__ */ new Set();
|
|
857
860
|
const byPostId = /* @__PURE__ */ new Map();
|
|
861
|
+
const unchecked = /* @__PURE__ */ new Set();
|
|
862
|
+
let removalsUnread = false;
|
|
858
863
|
for (const ev of events) {
|
|
859
864
|
const content = parsePost(ev);
|
|
860
865
|
if (!content || content.channel_id !== descriptor.channel_id) continue;
|
|
861
866
|
const controlSig = ev.tags.find((t) => t[0] === "control_sig")?.[1];
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
+
let v;
|
|
868
|
+
try {
|
|
869
|
+
v = await verifyPost(content, descriptor, {
|
|
870
|
+
...opts,
|
|
871
|
+
event: ev,
|
|
872
|
+
...controlSig ? { controlSig } : {}
|
|
873
|
+
});
|
|
874
|
+
} catch (e) {
|
|
875
|
+
if (!(e instanceof UnansweredReadError)) throw e;
|
|
876
|
+
unchecked.add(postId(content));
|
|
877
|
+
if (typeof content.removes === "string") removalsUnread = true;
|
|
878
|
+
continue;
|
|
879
|
+
}
|
|
867
880
|
if (!v.ok) continue;
|
|
868
881
|
if (v.isTombstone && content.removes) {
|
|
869
882
|
removed.add(content.removes);
|
|
@@ -874,7 +887,11 @@ async function verifyChannelPosts(events, descriptor, opts) {
|
|
|
874
887
|
byPostId.set(v.postId, { post: content, postId: v.postId, event: ev });
|
|
875
888
|
}
|
|
876
889
|
}
|
|
877
|
-
return
|
|
890
|
+
return {
|
|
891
|
+
posts: orderChannelPosts([...byPostId.values()].filter((a) => !removed.has(a.postId))),
|
|
892
|
+
unchecked: [...unchecked].filter((id) => !byPostId.has(id)).length,
|
|
893
|
+
removalsChecked: !removalsUnread
|
|
894
|
+
};
|
|
878
895
|
}
|
|
879
896
|
|
|
880
897
|
// src/directory-legacy.json
|