@freqhole/haruspex 0.0.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.
Files changed (250) hide show
  1. package/dist/flows/add-peer/machine.d.ts +36 -0
  2. package/dist/flows/add-peer/machine.d.ts.map +1 -0
  3. package/dist/flows/add-peer/machine.js +500 -0
  4. package/dist/flows/add-peer/machine.test.d.ts +2 -0
  5. package/dist/flows/add-peer/machine.test.d.ts.map +1 -0
  6. package/dist/flows/add-peer/machine.test.js +421 -0
  7. package/dist/flows/add-peer/runner.d.ts +16 -0
  8. package/dist/flows/add-peer/runner.d.ts.map +1 -0
  9. package/dist/flows/add-peer/runner.js +349 -0
  10. package/dist/flows/add-peer/runner.test.d.ts +2 -0
  11. package/dist/flows/add-peer/runner.test.d.ts.map +1 -0
  12. package/dist/flows/add-peer/runner.test.js +205 -0
  13. package/dist/flows/add-peer/types.d.ts +271 -0
  14. package/dist/flows/add-peer/types.d.ts.map +1 -0
  15. package/dist/flows/add-peer/types.js +10 -0
  16. package/dist/flows/index.d.ts +6 -0
  17. package/dist/flows/index.d.ts.map +1 -0
  18. package/dist/flows/index.js +6 -0
  19. package/dist/identity/idbStore.d.ts +51 -0
  20. package/dist/identity/idbStore.d.ts.map +1 -0
  21. package/dist/identity/idbStore.js +183 -0
  22. package/dist/identity/idbStore.test.d.ts +2 -0
  23. package/dist/identity/idbStore.test.d.ts.map +1 -0
  24. package/dist/identity/idbStore.test.js +103 -0
  25. package/dist/identity/index.d.ts +8 -0
  26. package/dist/identity/index.d.ts.map +1 -0
  27. package/dist/identity/index.js +3 -0
  28. package/dist/identity/resolve.d.ts +31 -0
  29. package/dist/identity/resolve.d.ts.map +1 -0
  30. package/dist/identity/resolve.js +37 -0
  31. package/dist/identity/resolve.test.d.ts +2 -0
  32. package/dist/identity/resolve.test.d.ts.map +1 -0
  33. package/dist/identity/resolve.test.js +105 -0
  34. package/dist/identity/types.d.ts +21 -0
  35. package/dist/identity/types.d.ts.map +1 -0
  36. package/dist/identity/types.js +1 -0
  37. package/dist/identity/webLocks.d.ts +22 -0
  38. package/dist/identity/webLocks.d.ts.map +1 -0
  39. package/dist/identity/webLocks.js +67 -0
  40. package/dist/identity/webLocks.test.d.ts +2 -0
  41. package/dist/identity/webLocks.test.d.ts.map +1 -0
  42. package/dist/identity/webLocks.test.js +125 -0
  43. package/dist/index.d.ts +2 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +1 -0
  46. package/dist/index.test.d.ts +2 -0
  47. package/dist/index.test.d.ts.map +1 -0
  48. package/dist/index.test.js +7 -0
  49. package/dist/knock/index.d.ts +10 -0
  50. package/dist/knock/index.d.ts.map +1 -0
  51. package/dist/knock/index.js +5 -0
  52. package/dist/knock/pending-checker.d.ts +19 -0
  53. package/dist/knock/pending-checker.d.ts.map +1 -0
  54. package/dist/knock/pending-checker.js +27 -0
  55. package/dist/knock/pending-checker.test.d.ts +2 -0
  56. package/dist/knock/pending-checker.test.d.ts.map +1 -0
  57. package/dist/knock/pending-checker.test.js +93 -0
  58. package/dist/knock/requester.d.ts +26 -0
  59. package/dist/knock/requester.d.ts.map +1 -0
  60. package/dist/knock/requester.js +72 -0
  61. package/dist/knock/requester.test.d.ts +2 -0
  62. package/dist/knock/requester.test.d.ts.map +1 -0
  63. package/dist/knock/requester.test.js +108 -0
  64. package/dist/knock/responder.d.ts +13 -0
  65. package/dist/knock/responder.d.ts.map +1 -0
  66. package/dist/knock/responder.js +40 -0
  67. package/dist/knock/responder.test.d.ts +2 -0
  68. package/dist/knock/responder.test.d.ts.map +1 -0
  69. package/dist/knock/responder.test.js +89 -0
  70. package/dist/knock/store.d.ts +11 -0
  71. package/dist/knock/store.d.ts.map +1 -0
  72. package/dist/knock/store.js +211 -0
  73. package/dist/knock/store.test.d.ts +2 -0
  74. package/dist/knock/store.test.d.ts.map +1 -0
  75. package/dist/knock/store.test.js +195 -0
  76. package/dist/knock/types.d.ts +144 -0
  77. package/dist/knock/types.d.ts.map +1 -0
  78. package/dist/knock/types.js +26 -0
  79. package/dist/permissions/access.d.ts +54 -0
  80. package/dist/permissions/access.d.ts.map +1 -0
  81. package/dist/permissions/access.js +56 -0
  82. package/dist/permissions/access.test.d.ts +2 -0
  83. package/dist/permissions/access.test.d.ts.map +1 -0
  84. package/dist/permissions/access.test.js +72 -0
  85. package/dist/permissions/index.d.ts +5 -0
  86. package/dist/permissions/index.d.ts.map +1 -0
  87. package/dist/permissions/index.js +2 -0
  88. package/dist/permissions/role-table.d.ts +11 -0
  89. package/dist/permissions/role-table.d.ts.map +1 -0
  90. package/dist/permissions/role-table.js +16 -0
  91. package/dist/protocol/client.d.ts +67 -0
  92. package/dist/protocol/client.d.ts.map +1 -0
  93. package/dist/protocol/client.js +195 -0
  94. package/dist/protocol/client.test.d.ts +2 -0
  95. package/dist/protocol/client.test.d.ts.map +1 -0
  96. package/dist/protocol/client.test.js +282 -0
  97. package/dist/protocol/codec.d.ts +45 -0
  98. package/dist/protocol/codec.d.ts.map +1 -0
  99. package/dist/protocol/codec.js +111 -0
  100. package/dist/protocol/codec.test.d.ts +2 -0
  101. package/dist/protocol/codec.test.d.ts.map +1 -0
  102. package/dist/protocol/codec.test.js +93 -0
  103. package/dist/protocol/extensions.d.ts +33 -0
  104. package/dist/protocol/extensions.d.ts.map +1 -0
  105. package/dist/protocol/extensions.js +36 -0
  106. package/dist/protocol/extensions.test.d.ts +2 -0
  107. package/dist/protocol/extensions.test.d.ts.map +1 -0
  108. package/dist/protocol/extensions.test.js +65 -0
  109. package/dist/protocol/fixtures.test.d.ts +2 -0
  110. package/dist/protocol/fixtures.test.d.ts.map +1 -0
  111. package/dist/protocol/fixtures.test.js +51 -0
  112. package/dist/protocol/index.d.ts +9 -0
  113. package/dist/protocol/index.d.ts.map +1 -0
  114. package/dist/protocol/index.js +4 -0
  115. package/dist/protocol/messages.d.ts +480 -0
  116. package/dist/protocol/messages.d.ts.map +1 -0
  117. package/dist/protocol/messages.js +255 -0
  118. package/dist/protocol/messages.test.d.ts +2 -0
  119. package/dist/protocol/messages.test.d.ts.map +1 -0
  120. package/dist/protocol/messages.test.js +75 -0
  121. package/dist/share/codec.d.ts +58 -0
  122. package/dist/share/codec.d.ts.map +1 -0
  123. package/dist/share/codec.js +222 -0
  124. package/dist/share/codec.test.d.ts +2 -0
  125. package/dist/share/codec.test.d.ts.map +1 -0
  126. package/dist/share/codec.test.js +150 -0
  127. package/dist/share/detect.d.ts +24 -0
  128. package/dist/share/detect.d.ts.map +1 -0
  129. package/dist/share/detect.js +25 -0
  130. package/dist/share/detect.test.d.ts +2 -0
  131. package/dist/share/detect.test.d.ts.map +1 -0
  132. package/dist/share/detect.test.js +31 -0
  133. package/dist/share/index.d.ts +7 -0
  134. package/dist/share/index.d.ts.map +1 -0
  135. package/dist/share/index.js +3 -0
  136. package/dist/share/peer-addr.d.ts +32 -0
  137. package/dist/share/peer-addr.d.ts.map +1 -0
  138. package/dist/share/peer-addr.js +72 -0
  139. package/dist/share/peer-addr.test.d.ts +2 -0
  140. package/dist/share/peer-addr.test.d.ts.map +1 -0
  141. package/dist/share/peer-addr.test.js +58 -0
  142. package/dist/solid/auth-form.d.ts +43 -0
  143. package/dist/solid/auth-form.d.ts.map +1 -0
  144. package/dist/solid/auth-form.js +55 -0
  145. package/dist/solid/auth-form.test.d.ts +2 -0
  146. package/dist/solid/auth-form.test.d.ts.map +1 -0
  147. package/dist/solid/auth-form.test.js +131 -0
  148. package/dist/solid/auth-status.d.ts +21 -0
  149. package/dist/solid/auth-status.d.ts.map +1 -0
  150. package/dist/solid/auth-status.js +58 -0
  151. package/dist/solid/auth-status.test.d.ts +2 -0
  152. package/dist/solid/auth-status.test.d.ts.map +1 -0
  153. package/dist/solid/auth-status.test.js +60 -0
  154. package/dist/solid/index.d.ts +5 -0
  155. package/dist/solid/index.d.ts.map +1 -0
  156. package/dist/solid/index.js +10 -0
  157. package/dist/solid/knock-inbox.d.ts +61 -0
  158. package/dist/solid/knock-inbox.d.ts.map +1 -0
  159. package/dist/solid/knock-inbox.js +123 -0
  160. package/dist/solid/knock-inbox.test.d.ts +2 -0
  161. package/dist/solid/knock-inbox.test.d.ts.map +1 -0
  162. package/dist/solid/knock-inbox.test.js +153 -0
  163. package/dist/solid/reauth-flow.d.ts +26 -0
  164. package/dist/solid/reauth-flow.d.ts.map +1 -0
  165. package/dist/solid/reauth-flow.js +34 -0
  166. package/dist/solid/reauth-flow.test.d.ts +2 -0
  167. package/dist/solid/reauth-flow.test.d.ts.map +1 -0
  168. package/dist/solid/reauth-flow.test.js +91 -0
  169. package/dist/state/endpoint-control.d.ts +22 -0
  170. package/dist/state/endpoint-control.d.ts.map +1 -0
  171. package/dist/state/endpoint-control.js +34 -0
  172. package/dist/state/endpoint-control.test.d.ts +2 -0
  173. package/dist/state/endpoint-control.test.d.ts.map +1 -0
  174. package/dist/state/endpoint-control.test.js +63 -0
  175. package/dist/state/friend-directory.d.ts +37 -0
  176. package/dist/state/friend-directory.d.ts.map +1 -0
  177. package/dist/state/friend-directory.js +44 -0
  178. package/dist/state/friend-directory.test.d.ts +2 -0
  179. package/dist/state/friend-directory.test.d.ts.map +1 -0
  180. package/dist/state/friend-directory.test.js +63 -0
  181. package/dist/state/index.d.ts +6 -0
  182. package/dist/state/index.d.ts.map +1 -0
  183. package/dist/state/index.js +3 -0
  184. package/dist/state/peer-names.d.ts +7 -0
  185. package/dist/state/peer-names.d.ts.map +1 -0
  186. package/dist/state/peer-names.js +21 -0
  187. package/dist/state/peer-names.test.d.ts +2 -0
  188. package/dist/state/peer-names.test.d.ts.map +1 -0
  189. package/dist/state/peer-names.test.js +29 -0
  190. package/dist/testing/idb-harness.d.ts +9 -0
  191. package/dist/testing/idb-harness.d.ts.map +1 -0
  192. package/dist/testing/idb-harness.js +19 -0
  193. package/dist/testing/idb-harness.test.d.ts +2 -0
  194. package/dist/testing/idb-harness.test.d.ts.map +1 -0
  195. package/dist/testing/idb-harness.test.js +18 -0
  196. package/dist/testing/identity-fixtures.d.ts +10 -0
  197. package/dist/testing/identity-fixtures.d.ts.map +1 -0
  198. package/dist/testing/identity-fixtures.js +21 -0
  199. package/dist/testing/identity-fixtures.test.d.ts +2 -0
  200. package/dist/testing/identity-fixtures.test.d.ts.map +1 -0
  201. package/dist/testing/identity-fixtures.test.js +28 -0
  202. package/dist/testing/index.d.ts +7 -0
  203. package/dist/testing/index.d.ts.map +1 -0
  204. package/dist/testing/index.js +11 -0
  205. package/dist/testing/knock-fixtures.d.ts +13 -0
  206. package/dist/testing/knock-fixtures.d.ts.map +1 -0
  207. package/dist/testing/knock-fixtures.js +45 -0
  208. package/dist/testing/knock-fixtures.test.d.ts +2 -0
  209. package/dist/testing/knock-fixtures.test.d.ts.map +1 -0
  210. package/dist/testing/knock-fixtures.test.js +65 -0
  211. package/dist/testing/protocol-fixtures.d.ts +7 -0
  212. package/dist/testing/protocol-fixtures.d.ts.map +1 -0
  213. package/dist/testing/protocol-fixtures.js +28 -0
  214. package/dist/testing/protocol-fixtures.test.d.ts +2 -0
  215. package/dist/testing/protocol-fixtures.test.d.ts.map +1 -0
  216. package/dist/testing/protocol-fixtures.test.js +19 -0
  217. package/dist/testing/state-fixtures.d.ts +33 -0
  218. package/dist/testing/state-fixtures.d.ts.map +1 -0
  219. package/dist/testing/state-fixtures.js +67 -0
  220. package/dist/testing/state-fixtures.test.d.ts +2 -0
  221. package/dist/testing/state-fixtures.test.d.ts.map +1 -0
  222. package/dist/testing/state-fixtures.test.js +68 -0
  223. package/dist/testing/webauthn-mocks.d.ts +27 -0
  224. package/dist/testing/webauthn-mocks.d.ts.map +1 -0
  225. package/dist/testing/webauthn-mocks.js +78 -0
  226. package/dist/testing/webauthn-mocks.test.d.ts +2 -0
  227. package/dist/testing/webauthn-mocks.test.d.ts.map +1 -0
  228. package/dist/testing/webauthn-mocks.test.js +40 -0
  229. package/dist/webauthn/ceremony.d.ts +76 -0
  230. package/dist/webauthn/ceremony.d.ts.map +1 -0
  231. package/dist/webauthn/ceremony.js +136 -0
  232. package/dist/webauthn/ceremony.test.d.ts +2 -0
  233. package/dist/webauthn/ceremony.test.d.ts.map +1 -0
  234. package/dist/webauthn/ceremony.test.js +245 -0
  235. package/dist/webauthn/codec.d.ts +39 -0
  236. package/dist/webauthn/codec.d.ts.map +1 -0
  237. package/dist/webauthn/codec.js +118 -0
  238. package/dist/webauthn/codec.test.d.ts +2 -0
  239. package/dist/webauthn/codec.test.d.ts.map +1 -0
  240. package/dist/webauthn/codec.test.js +126 -0
  241. package/dist/webauthn/index.d.ts +7 -0
  242. package/dist/webauthn/index.d.ts.map +1 -0
  243. package/dist/webauthn/index.js +3 -0
  244. package/dist/webauthn/transport.d.ts +58 -0
  245. package/dist/webauthn/transport.d.ts.map +1 -0
  246. package/dist/webauthn/transport.js +6 -0
  247. package/dist/webauthn/types.d.ts +78 -0
  248. package/dist/webauthn/types.d.ts.map +1 -0
  249. package/dist/webauthn/types.js +29 -0
  250. package/package.json +83 -0
@@ -0,0 +1,65 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { z } from "zod";
3
+ import { createAppExtensionRegistry, isAppExtensionType, } from "./extensions.js";
4
+ describe("isAppExtensionType", () => {
5
+ it("is true for a namespaced type", () => {
6
+ expect(isAppExtensionType("skein:canvas-invite")).toBe(true);
7
+ });
8
+ it("is false for a bare core-style type", () => {
9
+ expect(isAppExtensionType("heartbeat")).toBe(false);
10
+ });
11
+ });
12
+ describe("AppExtensionRegistry", () => {
13
+ const canvasInviteSchema = z.object({
14
+ v: z.literal(1),
15
+ type: z.literal("skein:canvas-invite"),
16
+ inviteId: z.string(),
17
+ canvasDocId: z.string(),
18
+ canvasTitle: z.string(),
19
+ originNodeId: z.string(),
20
+ originUsername: z.string(),
21
+ role: z.string(),
22
+ targets: z.array(z.string()),
23
+ acked: z.array(z.string()),
24
+ });
25
+ const message = {
26
+ messageType: "skein:canvas-invite",
27
+ payload: {
28
+ v: 1,
29
+ type: "skein:canvas-invite",
30
+ inviteId: "inv-1",
31
+ canvasDocId: "doc-canvas-1",
32
+ canvasTitle: "my canvas",
33
+ originNodeId: "node-abc123",
34
+ originUsername: "alice",
35
+ role: "member",
36
+ targets: ["node-def456"],
37
+ acked: [],
38
+ },
39
+ };
40
+ it("throws parse() for an unregistered message type", () => {
41
+ const registry = createAppExtensionRegistry();
42
+ expect(() => registry.parse(message)).toThrow(/no schema registered/);
43
+ expect(registry.isRegistered("skein:canvas-invite")).toBe(false);
44
+ });
45
+ it("parses a registered message type against its schema", () => {
46
+ const registry = createAppExtensionRegistry();
47
+ registry.register("skein:canvas-invite", canvasInviteSchema);
48
+ expect(registry.isRegistered("skein:canvas-invite")).toBe(true);
49
+ const parsed = registry.parse(message);
50
+ expect(parsed.inviteId).toBe("inv-1");
51
+ expect(parsed.targets).toEqual(["node-def456"]);
52
+ });
53
+ it("throws when the payload doesn't match the registered schema", () => {
54
+ const registry = createAppExtensionRegistry();
55
+ registry.register("skein:canvas-invite", canvasInviteSchema);
56
+ expect(() => registry.parse({ messageType: "skein:canvas-invite", payload: { type: "skein:canvas-invite" } })).toThrow();
57
+ });
58
+ it("unregister() removes a schema", () => {
59
+ const registry = createAppExtensionRegistry();
60
+ registry.register("skein:canvas-invite", canvasInviteSchema);
61
+ registry.unregister("skein:canvas-invite");
62
+ expect(registry.isRegistered("skein:canvas-invite")).toBe(false);
63
+ expect(() => registry.parse(message)).toThrow();
64
+ });
65
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fixtures.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.test.d.ts","sourceRoot":"","sources":["../../src/protocol/fixtures.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ // primary correctness test for ./protocol: every one of the 20 rust
2
+ // fixture files (haruspex/rust/fixtures/protocol/) must parse successfully
3
+ // through decodeFriendzMessage, and representative fixtures must round-trip
4
+ // (re-encoding produces an equivalent value - not necessarily byte-identical
5
+ // key order/whitespace, which doesn't matter).
6
+ import { readFileSync, readdirSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { describe, expect, it } from "vitest";
10
+ import { decodeFriendzMessage, encodeFriendzMessageToJson } from "./codec.js";
11
+ const here = dirname(fileURLToPath(import.meta.url));
12
+ const fixturesDir = join(here, "..", "..", "..", "rust", "fixtures", "protocol");
13
+ const fixtureFiles = readdirSync(fixturesDir)
14
+ .filter((name) => name.endsWith(".json"))
15
+ .sort();
16
+ describe("protocol fixture parity", () => {
17
+ it("found the expected 20 fixture files", () => {
18
+ expect(fixtureFiles).toHaveLength(20);
19
+ });
20
+ it.each(fixtureFiles)("parses %s", (name) => {
21
+ const raw = JSON.parse(readFileSync(join(fixturesDir, name), "utf8"));
22
+ const message = decodeFriendzMessage(raw);
23
+ expect(message).toBeDefined();
24
+ });
25
+ it("routes the app-extension fixture through the passthrough, not the core union", () => {
26
+ const raw = JSON.parse(readFileSync(join(fixturesDir, "app-extension-skein-canvas-invite.json"), "utf8"));
27
+ const message = decodeFriendzMessage(raw);
28
+ expect(message.kind).toBe("app-extension");
29
+ if (message.kind === "app-extension") {
30
+ expect(message.messageType).toBe("skein:canvas-invite");
31
+ expect(message.payload).toEqual(raw);
32
+ }
33
+ });
34
+ it.each(fixtureFiles.filter((name) => name !== "app-extension-skein-canvas-invite.json"))("round-trips %s through decode -> encode as an equivalent value", (name) => {
35
+ const raw = JSON.parse(readFileSync(join(fixturesDir, name), "utf8"));
36
+ const message = decodeFriendzMessage(raw);
37
+ const reEncoded = encodeFriendzMessageToJson(message);
38
+ // decode fills in defaults (v, empty arrays) the fixture may omit,
39
+ // so re-decoding the re-encoded form must reach a fixed point -
40
+ // that's the round-trip property that matters here, not raw
41
+ // key-for-key equality with the original fixture.
42
+ expect(decodeFriendzMessage(reEncoded)).toEqual(message);
43
+ });
44
+ it("every fixture's type is either a known core type or namespaced", () => {
45
+ for (const name of fixtureFiles) {
46
+ const raw = JSON.parse(readFileSync(join(fixturesDir, name), "utf8"));
47
+ const message = decodeFriendzMessage(raw);
48
+ expect(typeof message.kind).toBe("string");
49
+ }
50
+ });
51
+ });
@@ -0,0 +1,9 @@
1
+ export { BrowseCapabilitySchema, CapabilitiesSchema, CORE_MESSAGE_TYPES, CoreMessageSchema, GossipDigestPendingKnockSchema, GossipDigestProfileEntrySchema, isCoreMessageType, WireKnockScopeSchema, WireKnockStatusSchema, WireRoleSchema, } from "./messages.js";
2
+ export type { AclChangeMessage, BlobOfferMessage, BlobSeekMessage, BrowseCapability, Capabilities, CoreMessage, ErrorMessage, FriendAcceptAckMessage, FriendAcceptMessage, FriendRejectMessage, FriendRequestMessage, GossipDigestMessage, GossipDigestPendingKnock, GossipDigestProfileEntry, HeartbeatMessage, HelloMessage, HelloOkMessage, IdentityUpdateMessage, KnockAckMessage, KnockOutcomeMessage, KnockRequestMessage, OfflineAnnouncementMessage, ProfileRequestMessage, ProfileResponseMessage, WireKnockScope, WireKnockStatus, WireRole, } from "./messages.js";
3
+ export type { AppExtensionMessage, AppExtensionRegistry } from "./extensions.js";
4
+ export { createAppExtensionRegistry, isAppExtensionType } from "./extensions.js";
5
+ export type { FriendzMessage } from "./codec.js";
6
+ export { decodeFriendzMessage, decodeMessage, encodeFriendzMessageToJson, encodeMessage, frameMessage, friendzMessageType, FrameReader, } from "./codec.js";
7
+ export type { BiStreamLike, FriendzClient, FriendzClientOptions, MiddenNodeLike, } from "./client.js";
8
+ export { createFriendzClient, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_HEARTBEAT_TIMEOUT_MS, } from "./client.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,0BAA0B,EAC1B,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { BrowseCapabilitySchema, CapabilitiesSchema, CORE_MESSAGE_TYPES, CoreMessageSchema, GossipDigestPendingKnockSchema, GossipDigestProfileEntrySchema, isCoreMessageType, WireKnockScopeSchema, WireKnockStatusSchema, WireRoleSchema, } from "./messages.js";
2
+ export { createAppExtensionRegistry, isAppExtensionType } from "./extensions.js";
3
+ export { decodeFriendzMessage, decodeMessage, encodeFriendzMessageToJson, encodeMessage, frameMessage, friendzMessageType, FrameReader, } from "./codec.js";
4
+ export { createFriendzClient, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_HEARTBEAT_TIMEOUT_MS, } from "./client.js";
@@ -0,0 +1,480 @@
1
+ import { z } from "zod";
2
+ /** the grantable role vocabulary carried on the wire (knock-outcome, acl-change). */
3
+ export declare const WireRoleSchema: z.ZodEnum<{
4
+ member: "member";
5
+ viewer: "viewer";
6
+ root: "root";
7
+ admin: "admin";
8
+ }>;
9
+ export type WireRole = z.infer<typeof WireRoleSchema>;
10
+ /** resolution of a knock request. */
11
+ export declare const WireKnockStatusSchema: z.ZodEnum<{
12
+ denied: "denied";
13
+ pending: "pending";
14
+ accepted: "accepted";
15
+ }>;
16
+ export type WireKnockStatus = z.infer<typeof WireKnockStatusSchema>;
17
+ /** whether a peer may browse without knocking first, or must knock. */
18
+ export declare const BrowseCapabilitySchema: z.ZodEnum<{
19
+ public: "public";
20
+ knock: "knock";
21
+ }>;
22
+ export type BrowseCapability = z.infer<typeof BrowseCapabilitySchema>;
23
+ /** capability bag carried on the hello/hello-ok handshake. */
24
+ export declare const CapabilitiesSchema: z.ZodObject<{
25
+ browse: z.ZodEnum<{
26
+ public: "public";
27
+ knock: "knock";
28
+ }>;
29
+ }, z.core.$strip>;
30
+ export type Capabilities = z.infer<typeof CapabilitiesSchema>;
31
+ /**
32
+ * the wire shape of a knock's scope: what access is being requested.
33
+ * - account: acceptance creates or links a user identity
34
+ * - browse: list access, no specific resource named
35
+ * - resource: access to one named resource, with an optional requested role
36
+ */
37
+ export declare const WireKnockScopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
38
+ kind: z.ZodLiteral<"account">;
39
+ requestedUsername: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ kind: z.ZodLiteral<"browse">;
42
+ }, z.core.$strip>, z.ZodObject<{
43
+ kind: z.ZodLiteral<"resource">;
44
+ resourceId: z.ZodString;
45
+ requestedRole: z.ZodOptional<z.ZodEnum<{
46
+ member: "member";
47
+ viewer: "viewer";
48
+ root: "root";
49
+ admin: "admin";
50
+ }>>;
51
+ }, z.core.$strip>], "kind">;
52
+ export type WireKnockScope = z.infer<typeof WireKnockScopeSchema>;
53
+ /** a pending-knock entry gossiped in a gossip-digest message. */
54
+ export declare const GossipDigestPendingKnockSchema: z.ZodObject<{
55
+ knockId: z.ZodString;
56
+ nodeId: z.ZodString;
57
+ username: z.ZodOptional<z.ZodString>;
58
+ message: z.ZodString;
59
+ scope: z.ZodDiscriminatedUnion<[z.ZodObject<{
60
+ kind: z.ZodLiteral<"account">;
61
+ requestedUsername: z.ZodOptional<z.ZodString>;
62
+ }, z.core.$strip>, z.ZodObject<{
63
+ kind: z.ZodLiteral<"browse">;
64
+ }, z.core.$strip>, z.ZodObject<{
65
+ kind: z.ZodLiteral<"resource">;
66
+ resourceId: z.ZodString;
67
+ requestedRole: z.ZodOptional<z.ZodEnum<{
68
+ member: "member";
69
+ viewer: "viewer";
70
+ root: "root";
71
+ admin: "admin";
72
+ }>>;
73
+ }, z.core.$strip>], "kind">;
74
+ knockedAt: z.ZodString;
75
+ }, z.core.$strip>;
76
+ export type GossipDigestPendingKnock = z.infer<typeof GossipDigestPendingKnockSchema>;
77
+ /** a profile-doc pointer entry in a gossip digest. */
78
+ export declare const GossipDigestProfileEntrySchema: z.ZodObject<{
79
+ peerNodeId: z.ZodString;
80
+ profileDocId: z.ZodString;
81
+ updatedAt: z.ZodString;
82
+ }, z.core.$strip>;
83
+ export type GossipDigestProfileEntry = z.infer<typeof GossipDigestProfileEntrySchema>;
84
+ declare const ProfileRequestSchema: z.ZodObject<{
85
+ type: z.ZodLiteral<"profile-request">;
86
+ v: z.ZodDefault<z.ZodNumber>;
87
+ }, z.core.$strip>;
88
+ declare const ProfileResponseSchema: z.ZodObject<{
89
+ type: z.ZodLiteral<"profile-response">;
90
+ v: z.ZodDefault<z.ZodNumber>;
91
+ username: z.ZodString;
92
+ bio: z.ZodString;
93
+ avatarDataUrl: z.ZodString;
94
+ accentColor: z.ZodOptional<z.ZodNumber>;
95
+ profileDocId: z.ZodOptional<z.ZodString>;
96
+ profileUpdatedAt: z.ZodOptional<z.ZodString>;
97
+ }, z.core.$strip>;
98
+ declare const FriendRequestSchema: z.ZodObject<{
99
+ type: z.ZodLiteral<"friend-request">;
100
+ v: z.ZodDefault<z.ZodNumber>;
101
+ fromNodeId: z.ZodString;
102
+ fromUsername: z.ZodString;
103
+ isHub: z.ZodOptional<z.ZodBoolean>;
104
+ }, z.core.$strip>;
105
+ declare const FriendAcceptSchema: z.ZodObject<{
106
+ type: z.ZodLiteral<"friend-accept">;
107
+ v: z.ZodDefault<z.ZodNumber>;
108
+ fromNodeId: z.ZodString;
109
+ fromUsername: z.ZodString;
110
+ isHub: z.ZodOptional<z.ZodBoolean>;
111
+ }, z.core.$strip>;
112
+ declare const FriendAcceptAckSchema: z.ZodObject<{
113
+ type: z.ZodLiteral<"friend-accept-ack">;
114
+ v: z.ZodDefault<z.ZodNumber>;
115
+ fromNodeId: z.ZodString;
116
+ }, z.core.$strip>;
117
+ declare const FriendRejectSchema: z.ZodObject<{
118
+ type: z.ZodLiteral<"friend-reject">;
119
+ v: z.ZodDefault<z.ZodNumber>;
120
+ fromNodeId: z.ZodString;
121
+ }, z.core.$strip>;
122
+ declare const HeartbeatSchema: z.ZodObject<{
123
+ type: z.ZodLiteral<"heartbeat">;
124
+ v: z.ZodDefault<z.ZodNumber>;
125
+ nodeId: z.ZodString;
126
+ username: z.ZodString;
127
+ appPayload: z.ZodOptional<z.ZodUnknown>;
128
+ }, z.core.$strip>;
129
+ declare const OfflineAnnouncementSchema: z.ZodObject<{
130
+ type: z.ZodLiteral<"offline-announcement">;
131
+ v: z.ZodDefault<z.ZodNumber>;
132
+ nodeId: z.ZodString;
133
+ }, z.core.$strip>;
134
+ declare const HelloSchema: z.ZodObject<{
135
+ type: z.ZodLiteral<"hello">;
136
+ v: z.ZodDefault<z.ZodNumber>;
137
+ nodeId: z.ZodString;
138
+ username: z.ZodOptional<z.ZodString>;
139
+ avatarBlobId: z.ZodOptional<z.ZodString>;
140
+ capabilities: z.ZodObject<{
141
+ browse: z.ZodEnum<{
142
+ public: "public";
143
+ knock: "knock";
144
+ }>;
145
+ }, z.core.$strip>;
146
+ }, z.core.$strip>;
147
+ declare const HelloOkSchema: z.ZodObject<{
148
+ type: z.ZodLiteral<"hello-ok">;
149
+ v: z.ZodDefault<z.ZodNumber>;
150
+ nodeId: z.ZodString;
151
+ username: z.ZodOptional<z.ZodString>;
152
+ avatarBlobId: z.ZodOptional<z.ZodString>;
153
+ capabilities: z.ZodObject<{
154
+ browse: z.ZodEnum<{
155
+ public: "public";
156
+ knock: "knock";
157
+ }>;
158
+ }, z.core.$strip>;
159
+ }, z.core.$strip>;
160
+ declare const KnockRequestSchema: z.ZodObject<{
161
+ type: z.ZodLiteral<"knock-request">;
162
+ v: z.ZodDefault<z.ZodNumber>;
163
+ knockId: z.ZodString;
164
+ nodeId: z.ZodString;
165
+ username: z.ZodOptional<z.ZodString>;
166
+ message: z.ZodString;
167
+ scope: z.ZodDiscriminatedUnion<[z.ZodObject<{
168
+ kind: z.ZodLiteral<"account">;
169
+ requestedUsername: z.ZodOptional<z.ZodString>;
170
+ }, z.core.$strip>, z.ZodObject<{
171
+ kind: z.ZodLiteral<"browse">;
172
+ }, z.core.$strip>, z.ZodObject<{
173
+ kind: z.ZodLiteral<"resource">;
174
+ resourceId: z.ZodString;
175
+ requestedRole: z.ZodOptional<z.ZodEnum<{
176
+ member: "member";
177
+ viewer: "viewer";
178
+ root: "root";
179
+ admin: "admin";
180
+ }>>;
181
+ }, z.core.$strip>], "kind">;
182
+ }, z.core.$strip>;
183
+ declare const KnockAckSchema: z.ZodObject<{
184
+ type: z.ZodLiteral<"knock-ack">;
185
+ v: z.ZodDefault<z.ZodNumber>;
186
+ knockId: z.ZodString;
187
+ ackerNodeId: z.ZodString;
188
+ resourceId: z.ZodOptional<z.ZodString>;
189
+ }, z.core.$strip>;
190
+ declare const KnockOutcomeSchema: z.ZodObject<{
191
+ type: z.ZodLiteral<"knock-outcome">;
192
+ v: z.ZodDefault<z.ZodNumber>;
193
+ knockId: z.ZodOptional<z.ZodString>;
194
+ status: z.ZodEnum<{
195
+ denied: "denied";
196
+ pending: "pending";
197
+ accepted: "accepted";
198
+ }>;
199
+ grantedRole: z.ZodOptional<z.ZodEnum<{
200
+ member: "member";
201
+ viewer: "viewer";
202
+ root: "root";
203
+ admin: "admin";
204
+ }>>;
205
+ grantedResourceIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
206
+ byNodeId: z.ZodOptional<z.ZodString>;
207
+ }, z.core.$strip>;
208
+ declare const IdentityUpdateSchema: z.ZodObject<{
209
+ type: z.ZodLiteral<"identity-update">;
210
+ v: z.ZodDefault<z.ZodNumber>;
211
+ nodeId: z.ZodString;
212
+ username: z.ZodOptional<z.ZodString>;
213
+ avatarDataUrl: z.ZodOptional<z.ZodString>;
214
+ }, z.core.$strip>;
215
+ declare const AclChangeSchema: z.ZodObject<{
216
+ type: z.ZodLiteral<"acl-change">;
217
+ v: z.ZodDefault<z.ZodNumber>;
218
+ resourceId: z.ZodString;
219
+ resourceTitle: z.ZodOptional<z.ZodString>;
220
+ targetNodeId: z.ZodString;
221
+ newRole: z.ZodOptional<z.ZodEnum<{
222
+ member: "member";
223
+ viewer: "viewer";
224
+ root: "root";
225
+ admin: "admin";
226
+ }>>;
227
+ changedBy: z.ZodString;
228
+ changedByUsername: z.ZodString;
229
+ }, z.core.$strip>;
230
+ declare const GossipDigestSchema: z.ZodObject<{
231
+ type: z.ZodLiteral<"gossip-digest">;
232
+ v: z.ZodDefault<z.ZodNumber>;
233
+ pendingKnocks: z.ZodDefault<z.ZodArray<z.ZodObject<{
234
+ knockId: z.ZodString;
235
+ nodeId: z.ZodString;
236
+ username: z.ZodOptional<z.ZodString>;
237
+ message: z.ZodString;
238
+ scope: z.ZodDiscriminatedUnion<[z.ZodObject<{
239
+ kind: z.ZodLiteral<"account">;
240
+ requestedUsername: z.ZodOptional<z.ZodString>;
241
+ }, z.core.$strip>, z.ZodObject<{
242
+ kind: z.ZodLiteral<"browse">;
243
+ }, z.core.$strip>, z.ZodObject<{
244
+ kind: z.ZodLiteral<"resource">;
245
+ resourceId: z.ZodString;
246
+ requestedRole: z.ZodOptional<z.ZodEnum<{
247
+ member: "member";
248
+ viewer: "viewer";
249
+ root: "root";
250
+ admin: "admin";
251
+ }>>;
252
+ }, z.core.$strip>], "kind">;
253
+ knockedAt: z.ZodString;
254
+ }, z.core.$strip>>>;
255
+ profiles: z.ZodDefault<z.ZodArray<z.ZodObject<{
256
+ peerNodeId: z.ZodString;
257
+ profileDocId: z.ZodString;
258
+ updatedAt: z.ZodString;
259
+ }, z.core.$strip>>>;
260
+ appPayload: z.ZodOptional<z.ZodUnknown>;
261
+ }, z.core.$strip>;
262
+ declare const BlobSeekSchema: z.ZodObject<{
263
+ type: z.ZodLiteral<"blob-seek">;
264
+ v: z.ZodDefault<z.ZodNumber>;
265
+ needed: z.ZodDefault<z.ZodArray<z.ZodString>>;
266
+ }, z.core.$strip>;
267
+ declare const BlobOfferSchema: z.ZodObject<{
268
+ type: z.ZodLiteral<"blob-offer">;
269
+ v: z.ZodDefault<z.ZodNumber>;
270
+ available: z.ZodDefault<z.ZodArray<z.ZodString>>;
271
+ }, z.core.$strip>;
272
+ declare const ErrorMessageSchema: z.ZodObject<{
273
+ type: z.ZodLiteral<"error">;
274
+ v: z.ZodDefault<z.ZodNumber>;
275
+ code: z.ZodString;
276
+ message: z.ZodString;
277
+ }, z.core.$strip>;
278
+ /** the discriminated union of every core (non-namespaced) friendz message. */
279
+ export declare const CoreMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
280
+ type: z.ZodLiteral<"profile-request">;
281
+ v: z.ZodDefault<z.ZodNumber>;
282
+ }, z.core.$strip>, z.ZodObject<{
283
+ type: z.ZodLiteral<"profile-response">;
284
+ v: z.ZodDefault<z.ZodNumber>;
285
+ username: z.ZodString;
286
+ bio: z.ZodString;
287
+ avatarDataUrl: z.ZodString;
288
+ accentColor: z.ZodOptional<z.ZodNumber>;
289
+ profileDocId: z.ZodOptional<z.ZodString>;
290
+ profileUpdatedAt: z.ZodOptional<z.ZodString>;
291
+ }, z.core.$strip>, z.ZodObject<{
292
+ type: z.ZodLiteral<"friend-request">;
293
+ v: z.ZodDefault<z.ZodNumber>;
294
+ fromNodeId: z.ZodString;
295
+ fromUsername: z.ZodString;
296
+ isHub: z.ZodOptional<z.ZodBoolean>;
297
+ }, z.core.$strip>, z.ZodObject<{
298
+ type: z.ZodLiteral<"friend-accept">;
299
+ v: z.ZodDefault<z.ZodNumber>;
300
+ fromNodeId: z.ZodString;
301
+ fromUsername: z.ZodString;
302
+ isHub: z.ZodOptional<z.ZodBoolean>;
303
+ }, z.core.$strip>, z.ZodObject<{
304
+ type: z.ZodLiteral<"friend-accept-ack">;
305
+ v: z.ZodDefault<z.ZodNumber>;
306
+ fromNodeId: z.ZodString;
307
+ }, z.core.$strip>, z.ZodObject<{
308
+ type: z.ZodLiteral<"friend-reject">;
309
+ v: z.ZodDefault<z.ZodNumber>;
310
+ fromNodeId: z.ZodString;
311
+ }, z.core.$strip>, z.ZodObject<{
312
+ type: z.ZodLiteral<"heartbeat">;
313
+ v: z.ZodDefault<z.ZodNumber>;
314
+ nodeId: z.ZodString;
315
+ username: z.ZodString;
316
+ appPayload: z.ZodOptional<z.ZodUnknown>;
317
+ }, z.core.$strip>, z.ZodObject<{
318
+ type: z.ZodLiteral<"offline-announcement">;
319
+ v: z.ZodDefault<z.ZodNumber>;
320
+ nodeId: z.ZodString;
321
+ }, z.core.$strip>, z.ZodObject<{
322
+ type: z.ZodLiteral<"hello">;
323
+ v: z.ZodDefault<z.ZodNumber>;
324
+ nodeId: z.ZodString;
325
+ username: z.ZodOptional<z.ZodString>;
326
+ avatarBlobId: z.ZodOptional<z.ZodString>;
327
+ capabilities: z.ZodObject<{
328
+ browse: z.ZodEnum<{
329
+ public: "public";
330
+ knock: "knock";
331
+ }>;
332
+ }, z.core.$strip>;
333
+ }, z.core.$strip>, z.ZodObject<{
334
+ type: z.ZodLiteral<"hello-ok">;
335
+ v: z.ZodDefault<z.ZodNumber>;
336
+ nodeId: z.ZodString;
337
+ username: z.ZodOptional<z.ZodString>;
338
+ avatarBlobId: z.ZodOptional<z.ZodString>;
339
+ capabilities: z.ZodObject<{
340
+ browse: z.ZodEnum<{
341
+ public: "public";
342
+ knock: "knock";
343
+ }>;
344
+ }, z.core.$strip>;
345
+ }, z.core.$strip>, z.ZodObject<{
346
+ type: z.ZodLiteral<"knock-request">;
347
+ v: z.ZodDefault<z.ZodNumber>;
348
+ knockId: z.ZodString;
349
+ nodeId: z.ZodString;
350
+ username: z.ZodOptional<z.ZodString>;
351
+ message: z.ZodString;
352
+ scope: z.ZodDiscriminatedUnion<[z.ZodObject<{
353
+ kind: z.ZodLiteral<"account">;
354
+ requestedUsername: z.ZodOptional<z.ZodString>;
355
+ }, z.core.$strip>, z.ZodObject<{
356
+ kind: z.ZodLiteral<"browse">;
357
+ }, z.core.$strip>, z.ZodObject<{
358
+ kind: z.ZodLiteral<"resource">;
359
+ resourceId: z.ZodString;
360
+ requestedRole: z.ZodOptional<z.ZodEnum<{
361
+ member: "member";
362
+ viewer: "viewer";
363
+ root: "root";
364
+ admin: "admin";
365
+ }>>;
366
+ }, z.core.$strip>], "kind">;
367
+ }, z.core.$strip>, z.ZodObject<{
368
+ type: z.ZodLiteral<"knock-ack">;
369
+ v: z.ZodDefault<z.ZodNumber>;
370
+ knockId: z.ZodString;
371
+ ackerNodeId: z.ZodString;
372
+ resourceId: z.ZodOptional<z.ZodString>;
373
+ }, z.core.$strip>, z.ZodObject<{
374
+ type: z.ZodLiteral<"knock-outcome">;
375
+ v: z.ZodDefault<z.ZodNumber>;
376
+ knockId: z.ZodOptional<z.ZodString>;
377
+ status: z.ZodEnum<{
378
+ denied: "denied";
379
+ pending: "pending";
380
+ accepted: "accepted";
381
+ }>;
382
+ grantedRole: z.ZodOptional<z.ZodEnum<{
383
+ member: "member";
384
+ viewer: "viewer";
385
+ root: "root";
386
+ admin: "admin";
387
+ }>>;
388
+ grantedResourceIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
389
+ byNodeId: z.ZodOptional<z.ZodString>;
390
+ }, z.core.$strip>, z.ZodObject<{
391
+ type: z.ZodLiteral<"identity-update">;
392
+ v: z.ZodDefault<z.ZodNumber>;
393
+ nodeId: z.ZodString;
394
+ username: z.ZodOptional<z.ZodString>;
395
+ avatarDataUrl: z.ZodOptional<z.ZodString>;
396
+ }, z.core.$strip>, z.ZodObject<{
397
+ type: z.ZodLiteral<"acl-change">;
398
+ v: z.ZodDefault<z.ZodNumber>;
399
+ resourceId: z.ZodString;
400
+ resourceTitle: z.ZodOptional<z.ZodString>;
401
+ targetNodeId: z.ZodString;
402
+ newRole: z.ZodOptional<z.ZodEnum<{
403
+ member: "member";
404
+ viewer: "viewer";
405
+ root: "root";
406
+ admin: "admin";
407
+ }>>;
408
+ changedBy: z.ZodString;
409
+ changedByUsername: z.ZodString;
410
+ }, z.core.$strip>, z.ZodObject<{
411
+ type: z.ZodLiteral<"gossip-digest">;
412
+ v: z.ZodDefault<z.ZodNumber>;
413
+ pendingKnocks: z.ZodDefault<z.ZodArray<z.ZodObject<{
414
+ knockId: z.ZodString;
415
+ nodeId: z.ZodString;
416
+ username: z.ZodOptional<z.ZodString>;
417
+ message: z.ZodString;
418
+ scope: z.ZodDiscriminatedUnion<[z.ZodObject<{
419
+ kind: z.ZodLiteral<"account">;
420
+ requestedUsername: z.ZodOptional<z.ZodString>;
421
+ }, z.core.$strip>, z.ZodObject<{
422
+ kind: z.ZodLiteral<"browse">;
423
+ }, z.core.$strip>, z.ZodObject<{
424
+ kind: z.ZodLiteral<"resource">;
425
+ resourceId: z.ZodString;
426
+ requestedRole: z.ZodOptional<z.ZodEnum<{
427
+ member: "member";
428
+ viewer: "viewer";
429
+ root: "root";
430
+ admin: "admin";
431
+ }>>;
432
+ }, z.core.$strip>], "kind">;
433
+ knockedAt: z.ZodString;
434
+ }, z.core.$strip>>>;
435
+ profiles: z.ZodDefault<z.ZodArray<z.ZodObject<{
436
+ peerNodeId: z.ZodString;
437
+ profileDocId: z.ZodString;
438
+ updatedAt: z.ZodString;
439
+ }, z.core.$strip>>>;
440
+ appPayload: z.ZodOptional<z.ZodUnknown>;
441
+ }, z.core.$strip>, z.ZodObject<{
442
+ type: z.ZodLiteral<"blob-seek">;
443
+ v: z.ZodDefault<z.ZodNumber>;
444
+ needed: z.ZodDefault<z.ZodArray<z.ZodString>>;
445
+ }, z.core.$strip>, z.ZodObject<{
446
+ type: z.ZodLiteral<"blob-offer">;
447
+ v: z.ZodDefault<z.ZodNumber>;
448
+ available: z.ZodDefault<z.ZodArray<z.ZodString>>;
449
+ }, z.core.$strip>, z.ZodObject<{
450
+ type: z.ZodLiteral<"error">;
451
+ v: z.ZodDefault<z.ZodNumber>;
452
+ code: z.ZodString;
453
+ message: z.ZodString;
454
+ }, z.core.$strip>], "type">;
455
+ export type CoreMessage = z.infer<typeof CoreMessageSchema>;
456
+ export type ProfileRequestMessage = z.infer<typeof ProfileRequestSchema>;
457
+ export type ProfileResponseMessage = z.infer<typeof ProfileResponseSchema>;
458
+ export type FriendRequestMessage = z.infer<typeof FriendRequestSchema>;
459
+ export type FriendAcceptMessage = z.infer<typeof FriendAcceptSchema>;
460
+ export type FriendAcceptAckMessage = z.infer<typeof FriendAcceptAckSchema>;
461
+ export type FriendRejectMessage = z.infer<typeof FriendRejectSchema>;
462
+ export type HeartbeatMessage = z.infer<typeof HeartbeatSchema>;
463
+ export type OfflineAnnouncementMessage = z.infer<typeof OfflineAnnouncementSchema>;
464
+ export type HelloMessage = z.infer<typeof HelloSchema>;
465
+ export type HelloOkMessage = z.infer<typeof HelloOkSchema>;
466
+ export type KnockRequestMessage = z.infer<typeof KnockRequestSchema>;
467
+ export type KnockAckMessage = z.infer<typeof KnockAckSchema>;
468
+ export type KnockOutcomeMessage = z.infer<typeof KnockOutcomeSchema>;
469
+ export type IdentityUpdateMessage = z.infer<typeof IdentityUpdateSchema>;
470
+ export type AclChangeMessage = z.infer<typeof AclChangeSchema>;
471
+ export type GossipDigestMessage = z.infer<typeof GossipDigestSchema>;
472
+ export type BlobSeekMessage = z.infer<typeof BlobSeekSchema>;
473
+ export type BlobOfferMessage = z.infer<typeof BlobOfferSchema>;
474
+ export type ErrorMessage = z.infer<typeof ErrorMessageSchema>;
475
+ /** every core message's wire `type` discriminant, in enum-declaration order. */
476
+ export declare const CORE_MESSAGE_TYPES: readonly ["profile-request", "profile-response", "friend-request", "friend-accept", "friend-accept-ack", "friend-reject", "heartbeat", "offline-announcement", "hello", "hello-ok", "knock-request", "knock-ack", "knock-outcome", "identity-update", "acl-change", "gossip-digest", "blob-seek", "blob-offer", "error"];
477
+ /** is `type` one of the core (non-namespaced) message types above? */
478
+ export declare function isCoreMessageType(type: string): boolean;
479
+ export {};
480
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":"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"}