@fkn/lib 0.9.27 → 0.9.29

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/rooms.js ADDED
@@ -0,0 +1,142 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { c as t, l as n, o as r } from "./api-DLvscoll.js";
3
+ import { t as i } from "./busy-B189uX--.js";
4
+ //#region src/rooms.ts
5
+ var a = /* @__PURE__ */ e({
6
+ available: () => p,
7
+ create: () => m,
8
+ join: () => h
9
+ }), o = {
10
+ noSuchRoom: "rooms: no such room",
11
+ wrongKey: "rooms: wrong room key",
12
+ inviteNoKey: "rooms: the invite carries no key",
13
+ noSuchMember: "rooms: no such member",
14
+ roomFull: "rooms: the room is full",
15
+ tooManyRooms: "rooms: too many rooms",
16
+ tooManyConnections: "rooms: too many connections",
17
+ tooManyBlocks: "rooms: too many blocks",
18
+ blocked: "rooms: you are blocked from this room",
19
+ cannotSend: "rooms: you cannot send here",
20
+ permissionDenied: "rooms: permission denied",
21
+ notOwner: "rooms: not the room owner",
22
+ ownerNotRemovable: "rooms: the owner cannot be removed",
23
+ ownerKeepsEvery: "rooms: the owner keeps every permission",
24
+ removeYourself: "rooms: you cannot remove yourself",
25
+ tooFast: "rooms: sending too fast",
26
+ tooLarge: "rooms: the message is too large",
27
+ unavailable: "rooms: rooms are unavailable",
28
+ notEnabled: "rooms: rooms are not available",
29
+ alreadyJoined: "rooms: already joined",
30
+ malformed: "rooms: malformed frame",
31
+ ended: "rooms: the room has ended"
32
+ }, s = (e, t) => Object.assign(Error(t), { code: e }), c = (e) => e instanceof Error && typeof e.code == "string", l = async () => {
33
+ if (!t) return;
34
+ let e = (await r("a room").catch(() => void 0))?.rooms;
35
+ return typeof e?.create == "function" ? e : void 0;
36
+ }, u = () => {
37
+ throw s("unavailable", o.unavailable);
38
+ }, d = (e) => e === "blocked" ? "blocked" : e === "not-found" ? "ended" : "unavailable", f = async (e) => {
39
+ let t = e.invite, r = e, a = 0, l = e.self, u = await e.defaults().catch(() => ({
40
+ send: !0,
41
+ receive: !0
42
+ })), f = !1, p = /* @__PURE__ */ new Set(), m = /* @__PURE__ */ new Set(), h = i("room"), g = () => {}, _ = () => {}, v = new Promise((e) => {
43
+ _ = e;
44
+ }), y = (e) => {
45
+ let t = [...m];
46
+ m.clear();
47
+ for (let n of t) try {
48
+ n(e);
49
+ } catch {}
50
+ }, b = (e) => {
51
+ f || (f = !0, g(), p.clear(), h(), y(s("closed", o.ended)), _({ reason: e }));
52
+ }, x = (e) => {
53
+ if (!f) {
54
+ e.type === "defaults" && (u = e.defaults), e.type === "permissions" && e.id === l.id && (l = {
55
+ id: l.id,
56
+ permissions: e.permissions
57
+ });
58
+ for (let t of [...p]) try {
59
+ t(e);
60
+ } catch {}
61
+ }
62
+ }, S = (e, t) => {
63
+ Promise.resolve(e.on(x)).catch(() => {}), Promise.resolve(e.closed).then((e) => {
64
+ t === a && b(e.reason);
65
+ }, () => {});
66
+ }, C = async (e, n) => {
67
+ if (typeof e?.join != "function") return b("unavailable");
68
+ let i = await e.join(t).catch(() => void 0);
69
+ if (f || n !== a) return;
70
+ if (!i) return b("unavailable");
71
+ if ("error" in i) return b(d(i.error));
72
+ if (i.self.id !== l.id) return Promise.resolve(i.leave()).catch(() => {}), b("unavailable");
73
+ r = i, l = i.self, S(i, n);
74
+ let o = await i.defaults().catch(() => void 0);
75
+ o && !f && n === a && (u = o);
76
+ };
77
+ g = n((e, t) => {
78
+ let n = a;
79
+ a = t, !(f || n === 0 || n === t) && (y(s("unavailable", o.unavailable)), C(e.rooms, t));
80
+ }), S(e, a);
81
+ let w = async (e) => {
82
+ if (f) throw s("closed", o.ended);
83
+ let t = () => {}, n = new Promise((e, n) => {
84
+ t = n;
85
+ });
86
+ m.add(t);
87
+ try {
88
+ return await Promise.race([Promise.resolve(e(r)), n]);
89
+ } catch (e) {
90
+ throw c(e) ? e : s("unavailable", o.unavailable);
91
+ } finally {
92
+ m.delete(t);
93
+ }
94
+ }, T = async (e) => {
95
+ let t = await w(e);
96
+ if ("error" in t) throw s(t.error, t.message);
97
+ };
98
+ return {
99
+ id: e.id,
100
+ key: e.key,
101
+ invite: t,
102
+ get self() {
103
+ return l;
104
+ },
105
+ owner: e.owner,
106
+ defaults: () => u,
107
+ members: () => w((e) => e.members()),
108
+ send: (e) => T((t) => t.send(e)),
109
+ setDefault: (e, t) => T((n) => n.setDefault(e, t)),
110
+ grant: (e, t) => T((n) => n.grant(e, t)),
111
+ revoke: (e, t) => T((n) => n.revoke(e, t)),
112
+ remove: (e) => T((t) => t.remove(e)),
113
+ block: (e) => T((t) => t.block(e)),
114
+ unblock: (e) => T((t) => t.unblock(e)),
115
+ on: async (e) => f ? () => {} : (p.add(e), () => {
116
+ p.delete(e);
117
+ }),
118
+ leave: async () => {
119
+ await Promise.resolve(r.leave()).catch(() => {}), b("left");
120
+ },
121
+ closed: v
122
+ };
123
+ }, p = async () => {
124
+ let e = await l();
125
+ return e ? e.available().catch(() => !1) : !1;
126
+ }, m = async (e) => {
127
+ let t = await l();
128
+ if (!t) throw s("unavailable", o.unavailable);
129
+ let n = await t.create(e).catch(u);
130
+ if ("error" in n) throw s(n.error, n.message);
131
+ return f(n);
132
+ }, h = async (e, t) => {
133
+ let n = typeof e == "string" ? e.indexOf(".") : -1;
134
+ if (n <= 0 || n === e.length - 1) throw s("invalid", o.inviteNoKey);
135
+ let r = await l();
136
+ if (!r) throw s("unavailable", o.unavailable);
137
+ let i = await r.join(e, t).catch(u);
138
+ if ("error" in i) throw s(i.error, i.message);
139
+ return f(i);
140
+ };
141
+ //#endregion
142
+ export { p as available, m as create, h as join, a as t };