@meshline/sdk 0.0.0-stage → 0.1.0-alpha.1

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 (338) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -2
  3. package/dist/channels/repository.d.ts +73 -0
  4. package/dist/channels/repository.d.ts.map +1 -0
  5. package/dist/channels/repository.js +367 -0
  6. package/dist/channels/repository.js.map +1 -0
  7. package/dist/client/account-operations.d.ts +41 -0
  8. package/dist/client/account-operations.d.ts.map +1 -0
  9. package/dist/client/account-operations.js +304 -0
  10. package/dist/client/account-operations.js.map +1 -0
  11. package/dist/client/conversations.d.ts +36 -0
  12. package/dist/client/conversations.d.ts.map +1 -0
  13. package/dist/client/conversations.js +144 -0
  14. package/dist/client/conversations.js.map +1 -0
  15. package/dist/client.d.ts +53 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +162 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/components/account.d.ts +38 -0
  20. package/dist/components/account.d.ts.map +1 -0
  21. package/dist/components/account.js +243 -0
  22. package/dist/components/account.js.map +1 -0
  23. package/dist/components/channel.d.ts +78 -0
  24. package/dist/components/channel.d.ts.map +1 -0
  25. package/dist/components/channel.js +475 -0
  26. package/dist/components/channel.js.map +1 -0
  27. package/dist/components/component.d.ts +49 -0
  28. package/dist/components/component.d.ts.map +1 -0
  29. package/dist/components/component.js +194 -0
  30. package/dist/components/component.js.map +1 -0
  31. package/dist/components/device.d.ts +60 -0
  32. package/dist/components/device.d.ts.map +1 -0
  33. package/dist/components/device.js +648 -0
  34. package/dist/components/device.js.map +1 -0
  35. package/dist/components/group.d.ts +141 -0
  36. package/dist/components/group.d.ts.map +1 -0
  37. package/dist/components/group.js +933 -0
  38. package/dist/components/group.js.map +1 -0
  39. package/dist/components/message.d.ts +63 -0
  40. package/dist/components/message.d.ts.map +1 -0
  41. package/dist/components/message.js +439 -0
  42. package/dist/components/message.js.map +1 -0
  43. package/dist/components/profile.d.ts +37 -0
  44. package/dist/components/profile.d.ts.map +1 -0
  45. package/dist/components/profile.js +232 -0
  46. package/dist/components/profile.js.map +1 -0
  47. package/dist/crypto/groups.d.ts +56 -0
  48. package/dist/crypto/groups.d.ts.map +1 -0
  49. package/dist/crypto/groups.js +163 -0
  50. package/dist/crypto/groups.js.map +1 -0
  51. package/dist/crypto/messages.d.ts +52 -0
  52. package/dist/crypto/messages.d.ts.map +1 -0
  53. package/dist/crypto/messages.js +180 -0
  54. package/dist/crypto/messages.js.map +1 -0
  55. package/dist/crypto/primitives.d.ts +30 -0
  56. package/dist/crypto/primitives.d.ts.map +1 -0
  57. package/dist/crypto/primitives.js +102 -0
  58. package/dist/crypto/primitives.js.map +1 -0
  59. package/dist/errors.d.ts +11 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +14 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/groups/account-sync.d.ts +28 -0
  64. package/dist/groups/account-sync.d.ts.map +1 -0
  65. package/dist/groups/account-sync.js +235 -0
  66. package/dist/groups/account-sync.js.map +1 -0
  67. package/dist/groups/messages.d.ts +39 -0
  68. package/dist/groups/messages.d.ts.map +1 -0
  69. package/dist/groups/messages.js +141 -0
  70. package/dist/groups/messages.js.map +1 -0
  71. package/dist/groups/operations.d.ts +57 -0
  72. package/dist/groups/operations.d.ts.map +1 -0
  73. package/dist/groups/operations.js +225 -0
  74. package/dist/groups/operations.js.map +1 -0
  75. package/dist/groups/repository.d.ts +56 -0
  76. package/dist/groups/repository.d.ts.map +1 -0
  77. package/dist/groups/repository.js +254 -0
  78. package/dist/groups/repository.js.map +1 -0
  79. package/dist/groups/secrets.d.ts +67 -0
  80. package/dist/groups/secrets.d.ts.map +1 -0
  81. package/dist/groups/secrets.js +452 -0
  82. package/dist/groups/secrets.js.map +1 -0
  83. package/dist/groups/state.d.ts +39 -0
  84. package/dist/groups/state.d.ts.map +1 -0
  85. package/dist/groups/state.js +201 -0
  86. package/dist/groups/state.js.map +1 -0
  87. package/dist/identity/identifiers.d.ts +9 -0
  88. package/dist/identity/identifiers.d.ts.map +1 -0
  89. package/dist/identity/identifiers.js +37 -0
  90. package/dist/identity/identifiers.js.map +1 -0
  91. package/dist/identity/neo.d.ts +11 -0
  92. package/dist/identity/neo.d.ts.map +1 -0
  93. package/dist/identity/neo.js +77 -0
  94. package/dist/identity/neo.js.map +1 -0
  95. package/dist/index.d.ts +53 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +46 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/interactions.d.ts +31 -0
  100. package/dist/interactions.d.ts.map +1 -0
  101. package/dist/interactions.js +2 -0
  102. package/dist/interactions.js.map +1 -0
  103. package/dist/messages/account-sender.d.ts +9 -0
  104. package/dist/messages/account-sender.d.ts.map +1 -0
  105. package/dist/messages/account-sender.js +46 -0
  106. package/dist/messages/account-sender.js.map +1 -0
  107. package/dist/messages/contacts.d.ts +103 -0
  108. package/dist/messages/contacts.d.ts.map +1 -0
  109. package/dist/messages/contacts.js +525 -0
  110. package/dist/messages/contacts.js.map +1 -0
  111. package/dist/messages/outbox.d.ts +66 -0
  112. package/dist/messages/outbox.d.ts.map +1 -0
  113. package/dist/messages/outbox.js +167 -0
  114. package/dist/messages/outbox.js.map +1 -0
  115. package/dist/messages/receiver.d.ts +35 -0
  116. package/dist/messages/receiver.d.ts.map +1 -0
  117. package/dist/messages/receiver.js +113 -0
  118. package/dist/messages/receiver.js.map +1 -0
  119. package/dist/messages/repository.d.ts +89 -0
  120. package/dist/messages/repository.d.ts.map +1 -0
  121. package/dist/messages/repository.js +295 -0
  122. package/dist/messages/repository.js.map +1 -0
  123. package/dist/models/authentication.d.ts +37 -0
  124. package/dist/models/authentication.d.ts.map +1 -0
  125. package/dist/models/authentication.js +53 -0
  126. package/dist/models/authentication.js.map +1 -0
  127. package/dist/models/channels.d.ts +141 -0
  128. package/dist/models/channels.d.ts.map +1 -0
  129. package/dist/models/channels.js +258 -0
  130. package/dist/models/channels.js.map +1 -0
  131. package/dist/models/contacts.d.ts +68 -0
  132. package/dist/models/contacts.d.ts.map +1 -0
  133. package/dist/models/contacts.js +186 -0
  134. package/dist/models/contacts.js.map +1 -0
  135. package/dist/models/content.d.ts +37 -0
  136. package/dist/models/content.d.ts.map +1 -0
  137. package/dist/models/content.js +137 -0
  138. package/dist/models/content.js.map +1 -0
  139. package/dist/models/device-state.d.ts +8 -0
  140. package/dist/models/device-state.d.ts.map +1 -0
  141. package/dist/models/device-state.js +22 -0
  142. package/dist/models/device-state.js.map +1 -0
  143. package/dist/models/group-admission.d.ts +111 -0
  144. package/dist/models/group-admission.d.ts.map +1 -0
  145. package/dist/models/group-admission.js +153 -0
  146. package/dist/models/group-admission.js.map +1 -0
  147. package/dist/models/group-keys.d.ts +30 -0
  148. package/dist/models/group-keys.d.ts.map +1 -0
  149. package/dist/models/group-keys.js +52 -0
  150. package/dist/models/group-keys.js.map +1 -0
  151. package/dist/models/group-management.d.ts +190 -0
  152. package/dist/models/group-management.d.ts.map +1 -0
  153. package/dist/models/group-management.js +263 -0
  154. package/dist/models/group-management.js.map +1 -0
  155. package/dist/models/groups.d.ts +81 -0
  156. package/dist/models/groups.d.ts.map +1 -0
  157. package/dist/models/groups.js +127 -0
  158. package/dist/models/groups.js.map +1 -0
  159. package/dist/models/identity.d.ts +47 -0
  160. package/dist/models/identity.d.ts.map +1 -0
  161. package/dist/models/identity.js +136 -0
  162. package/dist/models/identity.js.map +1 -0
  163. package/dist/models/messages.d.ts +104 -0
  164. package/dist/models/messages.d.ts.map +1 -0
  165. package/dist/models/messages.js +168 -0
  166. package/dist/models/messages.js.map +1 -0
  167. package/dist/models/profile.d.ts +24 -0
  168. package/dist/models/profile.d.ts.map +1 -0
  169. package/dist/models/profile.js +47 -0
  170. package/dist/models/profile.js.map +1 -0
  171. package/dist/models/relay.d.ts +39 -0
  172. package/dist/models/relay.d.ts.map +1 -0
  173. package/dist/models/relay.js +160 -0
  174. package/dist/models/relay.js.map +1 -0
  175. package/dist/protocol/codec.d.ts +36 -0
  176. package/dist/protocol/codec.d.ts.map +1 -0
  177. package/dist/protocol/codec.js +144 -0
  178. package/dist/protocol/codec.js.map +1 -0
  179. package/dist/protocol/context.d.ts +14 -0
  180. package/dist/protocol/context.d.ts.map +1 -0
  181. package/dist/protocol/context.js +43 -0
  182. package/dist/protocol/context.js.map +1 -0
  183. package/dist/protocol/encoding.d.ts +15 -0
  184. package/dist/protocol/encoding.d.ts.map +1 -0
  185. package/dist/protocol/encoding.js +133 -0
  186. package/dist/protocol/encoding.js.map +1 -0
  187. package/dist/protocol/json.d.ts +16 -0
  188. package/dist/protocol/json.d.ts.map +1 -0
  189. package/dist/protocol/json.js +172 -0
  190. package/dist/protocol/json.js.map +1 -0
  191. package/dist/protocol/validation.d.ts +4 -0
  192. package/dist/protocol/validation.d.ts.map +1 -0
  193. package/dist/protocol/validation.js +18 -0
  194. package/dist/protocol/validation.js.map +1 -0
  195. package/dist/runtime/abort.d.ts +6 -0
  196. package/dist/runtime/abort.d.ts.map +1 -0
  197. package/dist/runtime/abort.js +32 -0
  198. package/dist/runtime/abort.js.map +1 -0
  199. package/dist/runtime/async-gate.d.ts +6 -0
  200. package/dist/runtime/async-gate.d.ts.map +1 -0
  201. package/dist/runtime/async-gate.js +15 -0
  202. package/dist/runtime/async-gate.js.map +1 -0
  203. package/dist/runtime/async-pulse.d.ts +7 -0
  204. package/dist/runtime/async-pulse.d.ts.map +1 -0
  205. package/dist/runtime/async-pulse.js +23 -0
  206. package/dist/runtime/async-pulse.js.map +1 -0
  207. package/dist/runtime/clock.d.ts +16 -0
  208. package/dist/runtime/clock.d.ts.map +1 -0
  209. package/dist/runtime/clock.js +62 -0
  210. package/dist/runtime/clock.js.map +1 -0
  211. package/dist/runtime/events.d.ts +11 -0
  212. package/dist/runtime/events.d.ts.map +1 -0
  213. package/dist/runtime/events.js +45 -0
  214. package/dist/runtime/events.js.map +1 -0
  215. package/dist/runtime/url.d.ts +3 -0
  216. package/dist/runtime/url.d.ts.map +1 -0
  217. package/dist/runtime/url.js +23 -0
  218. package/dist/runtime/url.js.map +1 -0
  219. package/dist/storage/signed-request.d.ts +14 -0
  220. package/dist/storage/signed-request.d.ts.map +1 -0
  221. package/dist/storage/signed-request.js +26 -0
  222. package/dist/storage/signed-request.js.map +1 -0
  223. package/dist/storage/store.d.ts +58 -0
  224. package/dist/storage/store.d.ts.map +1 -0
  225. package/dist/storage/store.js +52 -0
  226. package/dist/storage/store.js.map +1 -0
  227. package/dist/storage/transaction.d.ts +7 -0
  228. package/dist/storage/transaction.d.ts.map +1 -0
  229. package/dist/storage/transaction.js +22 -0
  230. package/dist/storage/transaction.js.map +1 -0
  231. package/dist/transport/client.d.ts +61 -0
  232. package/dist/transport/client.d.ts.map +1 -0
  233. package/dist/transport/client.js +392 -0
  234. package/dist/transport/client.js.map +1 -0
  235. package/dist/transport/discovery.d.ts +19 -0
  236. package/dist/transport/discovery.d.ts.map +1 -0
  237. package/dist/transport/discovery.js +75 -0
  238. package/dist/transport/discovery.js.map +1 -0
  239. package/dist/transport/endpoint.d.ts +6 -0
  240. package/dist/transport/endpoint.d.ts.map +1 -0
  241. package/dist/transport/endpoint.js +35 -0
  242. package/dist/transport/endpoint.js.map +1 -0
  243. package/dist/transport/http.d.ts +52 -0
  244. package/dist/transport/http.d.ts.map +1 -0
  245. package/dist/transport/http.js +128 -0
  246. package/dist/transport/http.js.map +1 -0
  247. package/dist/transport/pool.d.ts +31 -0
  248. package/dist/transport/pool.d.ts.map +1 -0
  249. package/dist/transport/pool.js +137 -0
  250. package/dist/transport/pool.js.map +1 -0
  251. package/dist/transport/relay-error.d.ts +23 -0
  252. package/dist/transport/relay-error.d.ts.map +1 -0
  253. package/dist/transport/relay-error.js +47 -0
  254. package/dist/transport/relay-error.js.map +1 -0
  255. package/dist/transport/rpc.d.ts +31 -0
  256. package/dist/transport/rpc.d.ts.map +1 -0
  257. package/dist/transport/rpc.js +56 -0
  258. package/dist/transport/rpc.js.map +1 -0
  259. package/dist/transport/session.d.ts +49 -0
  260. package/dist/transport/session.d.ts.map +1 -0
  261. package/dist/transport/session.js +169 -0
  262. package/dist/transport/session.js.map +1 -0
  263. package/dist/transport/socket.d.ts +55 -0
  264. package/dist/transport/socket.d.ts.map +1 -0
  265. package/dist/transport/socket.js +266 -0
  266. package/dist/transport/socket.js.map +1 -0
  267. package/dist/transport/subscription.d.ts +36 -0
  268. package/dist/transport/subscription.d.ts.map +1 -0
  269. package/dist/transport/subscription.js +169 -0
  270. package/dist/transport/subscription.js.map +1 -0
  271. package/package.json +35 -4
  272. package/src/channels/repository.ts +244 -0
  273. package/src/client/account-operations.ts +183 -0
  274. package/src/client/conversations.ts +95 -0
  275. package/src/client.ts +108 -0
  276. package/src/components/account.ts +206 -0
  277. package/src/components/channel.ts +253 -0
  278. package/src/components/component.ts +151 -0
  279. package/src/components/device.ts +455 -0
  280. package/src/components/group.ts +546 -0
  281. package/src/components/message.ts +253 -0
  282. package/src/components/profile.ts +179 -0
  283. package/src/crypto/groups.ts +107 -0
  284. package/src/crypto/messages.ts +129 -0
  285. package/src/crypto/primitives.ts +103 -0
  286. package/src/errors.ts +13 -0
  287. package/src/groups/account-sync.ts +144 -0
  288. package/src/groups/messages.ts +89 -0
  289. package/src/groups/operations.ts +145 -0
  290. package/src/groups/repository.ts +161 -0
  291. package/src/groups/secrets.ts +256 -0
  292. package/src/groups/state.ts +138 -0
  293. package/src/identity/identifiers.ts +41 -0
  294. package/src/identity/neo.ts +72 -0
  295. package/src/index.ts +52 -0
  296. package/src/interactions.ts +35 -0
  297. package/src/messages/account-sender.ts +33 -0
  298. package/src/messages/contacts.ts +379 -0
  299. package/src/messages/outbox.ts +152 -0
  300. package/src/messages/receiver.ts +86 -0
  301. package/src/messages/repository.ts +230 -0
  302. package/src/models/authentication.ts +63 -0
  303. package/src/models/channels.ts +155 -0
  304. package/src/models/contacts.ts +141 -0
  305. package/src/models/content.ts +105 -0
  306. package/src/models/device-state.ts +18 -0
  307. package/src/models/group-admission.ts +110 -0
  308. package/src/models/group-keys.ts +34 -0
  309. package/src/models/group-management.ts +182 -0
  310. package/src/models/groups.ts +100 -0
  311. package/src/models/identity.ts +164 -0
  312. package/src/models/messages.ts +139 -0
  313. package/src/models/profile.ts +46 -0
  314. package/src/models/relay.ts +151 -0
  315. package/src/protocol/codec.ts +144 -0
  316. package/src/protocol/context.ts +39 -0
  317. package/src/protocol/encoding.ts +106 -0
  318. package/src/protocol/json.ts +140 -0
  319. package/src/protocol/validation.ts +13 -0
  320. package/src/runtime/abort.ts +27 -0
  321. package/src/runtime/async-gate.ts +16 -0
  322. package/src/runtime/async-pulse.ts +20 -0
  323. package/src/runtime/clock.ts +63 -0
  324. package/src/runtime/events.ts +31 -0
  325. package/src/runtime/url.ts +17 -0
  326. package/src/storage/signed-request.ts +26 -0
  327. package/src/storage/store.ts +90 -0
  328. package/src/storage/transaction.ts +17 -0
  329. package/src/transport/client.ts +328 -0
  330. package/src/transport/discovery.ts +64 -0
  331. package/src/transport/endpoint.ts +32 -0
  332. package/src/transport/http.ts +129 -0
  333. package/src/transport/pool.ts +115 -0
  334. package/src/transport/relay-error.ts +46 -0
  335. package/src/transport/rpc.ts +56 -0
  336. package/src/transport/session.ts +154 -0
  337. package/src/transport/socket.ts +248 -0
  338. package/src/transport/subscription.ts +117 -0
@@ -0,0 +1,37 @@
1
+ import { type ExtensibleModel } from '../protocol/codec.js';
2
+ /** Protocol Unicode 17 White_Space, deliberately independent of JavaScript trim(). */
3
+ export declare function containsNonWhitespace(value: string): boolean;
4
+ /** RFC 9110 grammar; repeated charset parameters must all specify UTF-8 for bodies. */
5
+ export declare function validateMediaType(value: string, requireUtf8?: boolean): void;
6
+ export interface ContentEncryption extends ExtensibleModel {
7
+ readonly alg: string;
8
+ readonly key: Uint8Array;
9
+ readonly nonce: Uint8Array;
10
+ }
11
+ export declare const contentEncryptionCodec: import("../protocol/codec.js").ProtocolCodec<ContentEncryption>;
12
+ export declare function validateContentEncryption(value: ContentEncryption): void;
13
+ export interface ContentReference extends ExtensibleModel {
14
+ readonly uri: string;
15
+ readonly hash: string;
16
+ readonly contentType: string;
17
+ readonly size: number;
18
+ readonly encryption?: ContentEncryption;
19
+ }
20
+ export declare const contentReferenceCodec: import("../protocol/codec.js").ProtocolCodec<ContentReference>;
21
+ export declare function contentHashBytes(hash: string): Uint8Array;
22
+ export declare function validateContentReference(value: ContentReference): void;
23
+ export declare function contentHashUri(value: ContentReference): string;
24
+ export declare function validateAttachments(attachments: readonly ContentReference[]): void;
25
+ export declare function resolveContentReference(uri: string, attachments: readonly ContentReference[]): ContentReference | undefined;
26
+ export declare function verifyContent(value: ContentReference, plaintext: Uint8Array): void;
27
+ export declare function contentEncryptionAad(value: ContentReference): Uint8Array;
28
+ /** Low-level helper; the caller supplies a fresh independent key and nonce for every attachment. */
29
+ export declare function encryptContent(value: ContentReference, plaintext: Uint8Array): Uint8Array;
30
+ export declare function decryptContent(value: ContentReference, ciphertext: Uint8Array): Uint8Array;
31
+ export interface MessageBody extends ExtensibleModel {
32
+ readonly contentType: string;
33
+ readonly text: string;
34
+ }
35
+ export declare const messageBodyCodec: import("../protocol/codec.js").ProtocolCodec<MessageBody>;
36
+ export declare function validateMessageBody(value: MessageBody): void;
37
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/models/content.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM/F,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAA+G;AAK5K,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,IAAI,CAgB1E;AACD,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE;AACzI,eAAO,MAAM,sBAAsB,iEAAoJ,CAAC;AACxL,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIxE;AACD,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAC7I;AACD,eAAO,MAAM,qBAAqB,gEACkJ,CAAC;AACrL,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAGzD;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAUtE;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAAiF;AAChJ,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAOlF;AACD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,SAAS,CAS3H;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,CAGlF;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAIxE;AACD,oGAAoG;AACpG,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAGzF;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAI1F;AACD,MAAM,WAAW,WAAY,SAAQ,eAAe;IAAG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC5G,eAAO,MAAM,gBAAgB,2DAAwH,CAAC;AACtJ,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAK5D"}
@@ -0,0 +1,137 @@
1
+ import { decryptAes, encryptAes, requireLength, sha256 } from '../crypto/primitives.js';
2
+ import { ProtocolError } from '../errors.js';
3
+ import { bytes, defineCodec, integer, text } from '../protocol/codec.js';
4
+ import { decodeBase64Url, encodeUtf8, equalBytes } from '../protocol/encoding.js';
5
+ import { canonicalBytes, requireSafeInteger } from '../protocol/json.js';
6
+ import { validateCompleteObject } from '../protocol/validation.js';
7
+ import { parseAbsoluteUrl } from '../runtime/url.js';
8
+ /** Protocol Unicode 17 White_Space, deliberately independent of JavaScript trim(). */
9
+ export function containsNonWhitespace(value) { return /[^\u0009-\u000d\u0020\u0085\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]/u.test(value); }
10
+ const token = "[!#$%&'*+.^_`|~0-9A-Za-z-]+";
11
+ const quoted = '"(?:[\\t\\x20\\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t\\x20-\\x7E\\x80-\\xFF])*"';
12
+ const mediaStart = new RegExp(`^${token}/${token}`);
13
+ const mediaParameter = new RegExp(`[ \\t]*;[ \\t]*(?:(${token})=(${token}|${quoted}))?`, 'y');
14
+ /** RFC 9110 grammar; repeated charset parameters must all specify UTF-8 for bodies. */
15
+ export function validateMediaType(value, requireUtf8 = false) {
16
+ if (typeof value !== 'string')
17
+ throw new ProtocolError('invalid_media_type', 'Expected a media type.');
18
+ const start = mediaStart.exec(value);
19
+ if (!start)
20
+ throw new ProtocolError('invalid_media_type', 'Invalid media type.');
21
+ let offset = start[0].length;
22
+ while (offset < value.length) {
23
+ mediaParameter.lastIndex = offset;
24
+ const parameter = mediaParameter.exec(value);
25
+ if (!parameter)
26
+ throw new ProtocolError('invalid_media_type', 'Invalid media type parameter.');
27
+ if (requireUtf8 && parameter[1]?.toLowerCase() === 'charset') {
28
+ const raw = parameter[2];
29
+ const charset = raw.startsWith('"') ? raw.slice(1, -1).replace(/\\([\s\S])/g, '$1') : raw;
30
+ if (charset.toLowerCase() !== 'utf-8')
31
+ throw new ProtocolError('invalid_charset', 'Message body charset must be UTF-8.');
32
+ }
33
+ offset = mediaParameter.lastIndex;
34
+ }
35
+ }
36
+ export const contentEncryptionCodec = defineCodec({ alg: { wire: 'alg', codec: text }, key: { wire: 'key', codec: bytes }, nonce: { wire: 'nonce', codec: bytes } });
37
+ export function validateContentEncryption(value) {
38
+ validateCompleteObject(contentEncryptionCodec.encode(value));
39
+ if (value.alg !== 'AES-256-GCM')
40
+ throw new ProtocolError('unsupported_algorithm', 'Content encryption must use AES-256-GCM.');
41
+ requireLength(value.key, 32, 'Content key');
42
+ requireLength(value.nonce, 12, 'Content nonce');
43
+ }
44
+ export const contentReferenceCodec = defineCodec({ uri: { wire: 'uri', codec: text }, hash: { wire: 'hash', codec: text },
45
+ contentType: { wire: 'content_type', codec: text }, size: { wire: 'size', codec: integer }, encryption: { wire: 'encryption', codec: contentEncryptionCodec, optional: true } });
46
+ export function contentHashBytes(hash) {
47
+ if (typeof hash !== 'string' || !hash.startsWith('sha256:'))
48
+ throw new ProtocolError('invalid_hash', 'Expected a sha256 content hash.');
49
+ const bytes = decodeBase64Url(hash.slice(7));
50
+ requireLength(bytes, 32, 'Content hash');
51
+ return bytes;
52
+ }
53
+ export function validateContentReference(value) {
54
+ validateCompleteObject(contentReferenceCodec.encode(value));
55
+ encodeUtf8(value.uri);
56
+ if (!/^https:\/\//i.test(value.uri) || /[\s\u0085\x00-\x1f\x7f-\x9f\\]/u.test(value.uri) || /%(?![0-9a-fA-F]{2})/.test(value.uri))
57
+ throw new ProtocolError('invalid_uri', 'Content requires a well-formed absolute HTTPS URI.');
58
+ try {
59
+ if (!parseAbsoluteUrl(value.uri).hostname)
60
+ throw new Error('Missing host');
61
+ }
62
+ catch (cause) {
63
+ throw new ProtocolError('invalid_uri', 'Content requires a valid HTTPS host.', { cause });
64
+ }
65
+ contentHashBytes(value.hash);
66
+ requireSafeInteger(value.size, 0);
67
+ validateMediaType(value.contentType);
68
+ if (value.encryption)
69
+ validateContentEncryption(value.encryption);
70
+ contentReferenceCodec.encode(value);
71
+ }
72
+ export function contentHashUri(value) { contentHashBytes(value.hash); return `ni:///sha-256;${value.hash.slice(7)}`; }
73
+ export function validateAttachments(attachments) {
74
+ const hashes = new Set();
75
+ for (const reference of attachments) {
76
+ validateContentReference(reference);
77
+ if (hashes.has(reference.hash))
78
+ throw new ProtocolError('duplicate_attachment', 'Attachments cannot contain duplicate plaintext hashes.');
79
+ hashes.add(reference.hash);
80
+ }
81
+ }
82
+ export function resolveContentReference(uri, attachments) {
83
+ validateAttachments(attachments);
84
+ if (!/^ni:\/\/\//i.test(uri) || /[/?#]/.test(uri.slice(6)))
85
+ return undefined;
86
+ const separator = uri.indexOf(';', 6);
87
+ if (separator < 0)
88
+ return undefined;
89
+ try {
90
+ if (decodeURIComponent(uri.slice(6, separator)) !== 'sha-256')
91
+ return undefined;
92
+ const hash = `sha256:${decodeURIComponent(uri.slice(separator + 1))}`;
93
+ contentHashBytes(hash);
94
+ return attachments.find(value => value.hash === hash);
95
+ }
96
+ catch {
97
+ return undefined;
98
+ } // Malformed user-facing ni links are simply unresolved.
99
+ }
100
+ export function verifyContent(value, plaintext) {
101
+ if (plaintext.length !== value.size || !equalBytes(sha256(plaintext), contentHashBytes(value.hash)))
102
+ throw new ProtocolError('invalid_content', 'Plaintext does not match the content size and hash.');
103
+ }
104
+ export function contentEncryptionAad(value) {
105
+ if (!value.encryption)
106
+ throw new ProtocolError('encryption_required', 'Content reference has no encryption parameters.');
107
+ validateContentReference(value);
108
+ return canonicalBytes({ $type: 'meshline.content.reference.aad', alg: value.encryption.alg, hash: value.hash, content_type: value.contentType, size: value.size });
109
+ }
110
+ /** Low-level helper; the caller supplies a fresh independent key and nonce for every attachment. */
111
+ export function encryptContent(value, plaintext) {
112
+ const aad = contentEncryptionAad(value);
113
+ verifyContent(value, plaintext);
114
+ return encryptAes(value.encryption.key, value.encryption.nonce, plaintext, aad);
115
+ }
116
+ export function decryptContent(value, ciphertext) {
117
+ const aad = contentEncryptionAad(value);
118
+ const plaintext = decryptAes(value.encryption.key, value.encryption.nonce, ciphertext, aad);
119
+ try {
120
+ verifyContent(value, plaintext);
121
+ return plaintext;
122
+ }
123
+ catch (error) {
124
+ plaintext.fill(0);
125
+ throw error;
126
+ }
127
+ }
128
+ export const messageBodyCodec = defineCodec({ contentType: { wire: 'content_type', codec: text }, text: { wire: 'text', codec: text } });
129
+ export function validateMessageBody(value) {
130
+ validateCompleteObject(messageBodyCodec.encode(value));
131
+ validateMediaType(value.contentType, true);
132
+ encodeUtf8(value.text);
133
+ if (!containsNonWhitespace(value.text))
134
+ throw new ProtocolError('invalid_body', 'Message body must contain non-whitespace text.');
135
+ messageBodyCodec.encode(value);
136
+ }
137
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/models/content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type ExtensibleModel } from '../protocol/codec.js';
2
+ export interface DeviceStatePublishResponse extends ExtensibleModel {
3
+ readonly status: 'accepted' | 'staged';
4
+ readonly stagedUntil?: number;
5
+ }
6
+ export declare const deviceStatePublishResponseCodec: import("../protocol/codec.js").ProtocolCodec<DeviceStatePublishResponse>;
7
+ export declare function validateDeviceStatePublishResponse(value: DeviceStatePublishResponse, now: number): void;
8
+ //# sourceMappingURL=device-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-state.d.ts","sourceRoot":"","sources":["../../src/models/device-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI/F,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7I,eAAO,MAAM,+BAA+B,0EAE1C,CAAC;AACH,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQvG"}
@@ -0,0 +1,22 @@
1
+ import { ProtocolError } from '../errors.js';
2
+ import { defineCodec, enumeration, integer } from '../protocol/codec.js';
3
+ import { requireSafeInteger } from '../protocol/json.js';
4
+ import { validateCompleteObject } from '../protocol/validation.js';
5
+ export const deviceStatePublishResponseCodec = defineCodec({
6
+ status: { wire: 'status', codec: enumeration('accepted', 'staged') }, stagedUntil: { wire: 'staged_until', codec: integer, optional: true },
7
+ });
8
+ export function validateDeviceStatePublishResponse(value, now) {
9
+ validateCompleteObject(deviceStatePublishResponseCodec.encode(value));
10
+ if (value.status === 'accepted') {
11
+ if (value.stagedUntil !== undefined)
12
+ throw new ProtocolError('invalid_response', 'An accepted device state must omit staged_until.');
13
+ }
14
+ else if (value.status === 'staged') {
15
+ requireSafeInteger(value.stagedUntil, 1);
16
+ if (value.stagedUntil <= now)
17
+ throw new ProtocolError('invalid_response', 'The staged device state has already expired.');
18
+ }
19
+ else
20
+ throw new ProtocolError('invalid_response', 'Unknown device state publication status.');
21
+ }
22
+ //# sourceMappingURL=device-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-state.js","sourceRoot":"","sources":["../../src/models/device-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAwB,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,WAAW,CAA6B;IACnF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;CAC9I,CAAC,CAAC;AACH,MAAM,UAAU,kCAAkC,CAAC,KAAiC,EAAE,GAAW;IAC7F,sBAAsB,CAAC,+BAA+B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAC;IACzI,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnC,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,WAAW,IAAI,GAAG;YAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAC;IAC9H,CAAC;;QAAM,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,0CAA0C,CAAC,CAAC;AACnG,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { type ExtensibleModel } from '../protocol/codec.js';
2
+ import type { NetworkContext } from '../protocol/context.js';
3
+ import { type GroupApplication, type GroupApplicationApproval, type GroupInvite, type GroupMemberRecoveryApproval, type GroupMemberRecoveryRequest } from './group-management.js';
4
+ import { type GroupSecretBox } from './groups.js';
5
+ import { type DeviceCertificate } from './identity.js';
6
+ export interface GroupListQuery extends ExtensibleModel {
7
+ readonly groupId: string;
8
+ readonly cursor?: string;
9
+ readonly limit?: number;
10
+ }
11
+ export declare const groupListQueryCodec: import("../protocol/codec.js").ProtocolCodec<GroupListQuery>;
12
+ export declare function validateGroupListQuery(value: GroupListQuery): void;
13
+ export interface GroupInviteQuery extends ExtensibleModel {
14
+ readonly groupId: string;
15
+ readonly inviteId: string;
16
+ }
17
+ export declare const groupInviteQueryCodec: import("../protocol/codec.js").ProtocolCodec<GroupInviteQuery>;
18
+ export declare function validateGroupInviteQuery(value: GroupInviteQuery): void;
19
+ export interface GroupResolveQuery extends ExtensibleModel {
20
+ readonly groupId: string;
21
+ readonly inviteId?: string;
22
+ }
23
+ export declare const groupResolveQueryCodec: import("../protocol/codec.js").ProtocolCodec<GroupResolveQuery>;
24
+ export declare function validateGroupResolveQuery(value: GroupResolveQuery): void;
25
+ export interface GroupAccountsRequest extends ExtensibleModel {
26
+ readonly groupId: string;
27
+ readonly accounts: readonly string[];
28
+ }
29
+ export declare const groupAccountsRequestCodec: import("../protocol/codec.js").ProtocolCodec<GroupAccountsRequest>;
30
+ export declare function validateGroupAccountsRequest(value: GroupAccountsRequest): void;
31
+ export interface GroupInviteResolveResult extends ExtensibleModel {
32
+ readonly invite: GroupInvite;
33
+ readonly signerCertificate: DeviceCertificate;
34
+ readonly uses: number;
35
+ }
36
+ export declare const groupInviteResolveResultCodec: import("../protocol/codec.js").ProtocolCodec<GroupInviteResolveResult>;
37
+ export declare function validateGroupInviteResolveResult(value: GroupInviteResolveResult, query: GroupInviteQuery, context: NetworkContext, now: number): void;
38
+ export interface GroupInviteEntry extends ExtensibleModel {
39
+ readonly invite: GroupInvite;
40
+ readonly signerDeviceId: string;
41
+ readonly uses: number;
42
+ }
43
+ export declare const groupInviteEntryCodec: import("../protocol/codec.js").ProtocolCodec<GroupInviteEntry>;
44
+ export interface GroupInvitePage extends ExtensibleModel {
45
+ readonly invites: readonly GroupInviteEntry[];
46
+ readonly certificates: readonly DeviceCertificate[];
47
+ readonly next?: string;
48
+ }
49
+ export declare const groupInvitePageCodec: import("../protocol/codec.js").ProtocolCodec<GroupInvitePage>;
50
+ export declare function validateGroupInvitePage(value: GroupInvitePage, query: GroupListQuery, context: NetworkContext, now: number): void;
51
+ export interface GroupApplicationEntry extends ExtensibleModel {
52
+ readonly application: GroupApplication;
53
+ readonly signerCertificate: DeviceCertificate;
54
+ readonly acceptedAt: number;
55
+ }
56
+ export declare const groupApplicationEntryCodec: import("../protocol/codec.js").ProtocolCodec<GroupApplicationEntry>;
57
+ export declare function validateGroupApplicationEntry(value: GroupApplicationEntry, expectedGroupId: string, context: NetworkContext): void;
58
+ export interface GroupApplicationPage extends ExtensibleModel {
59
+ readonly applications: readonly GroupApplicationEntry[];
60
+ readonly next?: string;
61
+ }
62
+ export declare const groupApplicationPageCodec: import("../protocol/codec.js").ProtocolCodec<GroupApplicationPage>;
63
+ export declare function validateGroupApplicationPage(value: GroupApplicationPage, query: GroupListQuery, context: NetworkContext): void;
64
+ export interface GroupRecoverySubmitResult extends ExtensibleModel {
65
+ readonly acceptedAt: number;
66
+ readonly expiresAt: number;
67
+ }
68
+ export declare const groupRecoverySubmitResultCodec: import("../protocol/codec.js").ProtocolCodec<GroupRecoverySubmitResult>;
69
+ export declare function validateGroupRecoverySubmitResult(value: GroupRecoverySubmitResult): void;
70
+ export interface GroupRecoveryEntry extends ExtensibleModel, GroupRecoverySubmitResult {
71
+ readonly request: GroupMemberRecoveryRequest;
72
+ readonly signerCertificate: DeviceCertificate;
73
+ }
74
+ export declare const groupRecoveryEntryCodec: import("../protocol/codec.js").ProtocolCodec<GroupRecoveryEntry>;
75
+ export declare function validateGroupRecoveryEntry(value: GroupRecoveryEntry, expectedGroupId: string, context: NetworkContext): void;
76
+ export interface GroupRecoveryPage extends ExtensibleModel {
77
+ readonly requests: readonly GroupRecoveryEntry[];
78
+ readonly next?: string;
79
+ }
80
+ export declare const groupRecoveryPageCodec: import("../protocol/codec.js").ProtocolCodec<GroupRecoveryPage>;
81
+ export declare function validateGroupRecoveryPage(value: GroupRecoveryPage, query: GroupListQuery, context: NetworkContext): void;
82
+ export interface GroupApplicationApproveRequest extends ExtensibleModel {
83
+ readonly approval: GroupApplicationApproval;
84
+ readonly clientSecretCommitment: string;
85
+ readonly clientSecretBoxes: Readonly<Record<string, GroupSecretBox>>;
86
+ }
87
+ export interface GroupRecoveryApproveRequest extends ExtensibleModel {
88
+ readonly approval: GroupMemberRecoveryApproval;
89
+ readonly clientSecretCommitment: string;
90
+ readonly clientSecretBoxes: Readonly<Record<string, GroupSecretBox>>;
91
+ }
92
+ export declare const groupApplicationApproveRequestCodec: import("../protocol/codec.js").ProtocolCodec<GroupApplicationApproveRequest>;
93
+ export declare const groupRecoveryApproveRequestCodec: import("../protocol/codec.js").ProtocolCodec<GroupRecoveryApproveRequest>;
94
+ export declare function validateGroupApplicationApproveRequest(value: GroupApplicationApproveRequest): void;
95
+ export declare function validateGroupRecoveryApproveRequest(value: GroupRecoveryApproveRequest): void;
96
+ export interface GroupSubscriptionRequest extends ExtensibleModel {
97
+ readonly groupIds: readonly string[];
98
+ }
99
+ export declare const groupSubscriptionRequestCodec: import("../protocol/codec.js").ProtocolCodec<GroupSubscriptionRequest>;
100
+ export declare function validateGroupSubscriptionRequest(value: GroupSubscriptionRequest): void;
101
+ export interface GroupChangedNotification extends ExtensibleModel {
102
+ readonly groupId: string;
103
+ }
104
+ export declare const groupChangedNotificationCodec: import("../protocol/codec.js").ProtocolCodec<GroupChangedNotification>;
105
+ export declare function validateGroupChangedNotification(value: GroupChangedNotification): void;
106
+ export interface GroupTimelineChangedNotification extends GroupChangedNotification {
107
+ readonly head: number;
108
+ }
109
+ export declare const groupTimelineChangedNotificationCodec: import("../protocol/codec.js").ProtocolCodec<GroupTimelineChangedNotification>;
110
+ export declare function validateGroupTimelineChangedNotification(value: GroupTimelineChangedNotification): void;
111
+ //# sourceMappingURL=group-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-admission.d.ts","sourceRoot":"","sources":["../../src/models/group-admission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import { ProtocolError } from '../errors.js';
2
+ import { validateIdentifier } from '../identity/identifiers.js';
3
+ import { validateAccountId } from '../identity/neo.js';
4
+ import { array, defineCodec, dictionary, integer, text } from '../protocol/codec.js';
5
+ import { requireSafeInteger } from '../protocol/json.js';
6
+ import { validateCompleteObject } from '../protocol/validation.js';
7
+ import { contentHashBytes } from './content.js';
8
+ import { groupApplicationApprovalCodec, groupApplicationCodec, groupInviteCodec, groupMemberRecoveryApprovalCodec, groupMemberRecoveryRequestCodec, validateGroupManagementPayload, verifyGroupApplication, verifyGroupInvite, verifyGroupMemberRecoveryRequest } from './group-management.js';
9
+ import { groupSecretBoxCodec, validateGroupSecretBox } from './groups.js';
10
+ import { certificateId, deviceCertificateCodec, validateCertificate } from './identity.js';
11
+ const groupId = { wire: 'group_id', codec: text };
12
+ const signerCertificate = { wire: 'signer_certificate', codec: deviceCertificateCodec };
13
+ const acceptedAt = { wire: 'accepted_at', codec: integer };
14
+ const next = { wire: 'next', codec: text, optional: true };
15
+ const certificates = { wire: 'certificates', codec: array(deviceCertificateCodec) };
16
+ function cursor(value) { if (!/^[A-Za-z0-9._~-]+$/.test(value) || /[^A-Za-z0-9._~-]/.test(value))
17
+ throw new ProtocolError('invalid_cursor', 'Group list cursor must contain nonempty ASCII URL-safe text.'); }
18
+ export const groupListQueryCodec = defineCodec({ groupId, cursor: { wire: 'cursor', codec: text, optional: true }, limit: { wire: 'limit', codec: integer, optional: true } });
19
+ export function validateGroupListQuery(value) { validateCompleteObject(groupListQueryCodec.encode(value)); validateIdentifier('group', value.groupId); if (value.cursor !== undefined)
20
+ cursor(value.cursor); if (value.limit !== undefined)
21
+ requireSafeInteger(value.limit, 1); }
22
+ function page(count, nextCursor, query) {
23
+ validateGroupListQuery(query);
24
+ if (nextCursor !== undefined)
25
+ cursor(nextCursor);
26
+ if (nextCursor !== undefined && (!count || nextCursor === query.cursor) || query.limit !== undefined && count > query.limit)
27
+ throw new ProtocolError('invalid_pagination', 'Group list is empty with a continuation, repeats its cursor, or exceeds the requested limit.');
28
+ }
29
+ export const groupInviteQueryCodec = defineCodec({ groupId, inviteId: { wire: 'invite_id', codec: text } });
30
+ export function validateGroupInviteQuery(value) { validateCompleteObject(groupInviteQueryCodec.encode(value)); validateIdentifier('group', value.groupId); validateIdentifier('invite', value.inviteId); }
31
+ export const groupResolveQueryCodec = defineCodec({ groupId, inviteId: { wire: 'invite_id', codec: text, optional: true } });
32
+ export function validateGroupResolveQuery(value) { validateCompleteObject(groupResolveQueryCodec.encode(value)); validateIdentifier('group', value.groupId); if (value.inviteId !== undefined)
33
+ validateIdentifier('invite', value.inviteId); }
34
+ export const groupAccountsRequestCodec = defineCodec({ groupId, accounts: { wire: 'accounts', codec: array(text) } });
35
+ export function validateGroupAccountsRequest(value) {
36
+ validateCompleteObject(groupAccountsRequestCodec.encode(value));
37
+ validateIdentifier('group', value.groupId);
38
+ if (!value.accounts.length || new Set(value.accounts).size !== value.accounts.length)
39
+ throw new ProtocolError('invalid_accounts', 'Group account list must be nonempty and unique.');
40
+ for (const account of value.accounts)
41
+ validateAccountId(account);
42
+ }
43
+ export const groupInviteResolveResultCodec = defineCodec({ invite: { wire: 'invite', codec: groupInviteCodec }, signerCertificate, uses: { wire: 'uses', codec: integer } });
44
+ export function validateGroupInviteResolveResult(value, query, context, now) {
45
+ validateCompleteObject(groupInviteResolveResultCodec.encode(value));
46
+ validateGroupInviteQuery(query);
47
+ verifyGroupInvite(value.invite, value.signerCertificate, context, now);
48
+ requireSafeInteger(value.uses, 0);
49
+ if (value.invite.groupId !== query.groupId || value.invite.inviteId !== query.inviteId)
50
+ throw new ProtocolError('invalid_binding', 'Relay returned another group invitation.');
51
+ if (value.invite.invitee !== undefined && value.uses > 1 || value.invite.maxUses !== undefined && value.uses > value.invite.maxUses)
52
+ throw new ProtocolError('invalid_uses', 'Invitation use count exceeds its limit.');
53
+ }
54
+ export const groupInviteEntryCodec = defineCodec({ invite: { wire: 'invite', codec: groupInviteCodec }, signerDeviceId: { wire: 'signer_device_id', codec: text }, uses: { wire: 'uses', codec: integer } });
55
+ export const groupInvitePageCodec = defineCodec({ invites: { wire: 'invites', codec: array(groupInviteEntryCodec) }, certificates, next });
56
+ export function validateGroupInvitePage(value, query, context, now) {
57
+ validateCompleteObject(groupInvitePageCodec.encode(value));
58
+ page(value.invites.length, value.next, query);
59
+ const signers = new Map();
60
+ for (const certificate of value.certificates) {
61
+ validateCertificate(certificate, context);
62
+ const id = certificateId(certificate, context);
63
+ if (signers.has(id))
64
+ throw new ProtocolError('duplicate_certificate', 'Invitation page repeats a signing device.');
65
+ signers.set(id, certificate);
66
+ }
67
+ const ids = new Set();
68
+ for (const entry of value.invites) {
69
+ validateIdentifier('device', entry.signerDeviceId);
70
+ const signer = signers.get(entry.signerDeviceId);
71
+ if (!signer)
72
+ throw new ProtocolError('missing_certificate', 'Invitation signing certificate is missing.');
73
+ if (ids.has(entry.invite.inviteId))
74
+ throw new ProtocolError('duplicate_invite', 'Invitation page repeats an invitation.');
75
+ ids.add(entry.invite.inviteId);
76
+ validateGroupInviteResolveResult({ invite: entry.invite, signerCertificate: signer, uses: entry.uses }, { groupId: query.groupId, inviteId: entry.invite.inviteId }, context, now);
77
+ }
78
+ }
79
+ export const groupApplicationEntryCodec = defineCodec({ application: { wire: 'application', codec: groupApplicationCodec }, signerCertificate, acceptedAt });
80
+ export function validateGroupApplicationEntry(value, expectedGroupId, context) {
81
+ validateCompleteObject(groupApplicationEntryCodec.encode(value));
82
+ validateIdentifier('group', expectedGroupId);
83
+ requireSafeInteger(value.acceptedAt, 0);
84
+ verifyGroupApplication(value.application, value.signerCertificate, context);
85
+ if (value.application.groupId !== expectedGroupId)
86
+ throw new ProtocolError('invalid_binding', 'Application belongs to another group.');
87
+ }
88
+ export const groupApplicationPageCodec = defineCodec({ applications: { wire: 'applications', codec: array(groupApplicationEntryCodec) }, next });
89
+ export function validateGroupApplicationPage(value, query, context) {
90
+ validateCompleteObject(groupApplicationPageCodec.encode(value));
91
+ page(value.applications.length, value.next, query);
92
+ const accounts = new Set();
93
+ for (const entry of value.applications) {
94
+ validateGroupApplicationEntry(entry, query.groupId, context);
95
+ if (accounts.has(entry.application.account))
96
+ throw new ProtocolError('duplicate_account', 'Application page repeats an account.');
97
+ accounts.add(entry.application.account);
98
+ }
99
+ }
100
+ const recoveryInterval = { acceptedAt, expiresAt: { wire: 'expires_at', codec: integer } };
101
+ export const groupRecoverySubmitResultCodec = defineCodec(recoveryInterval);
102
+ export function validateGroupRecoverySubmitResult(value) {
103
+ validateCompleteObject(groupRecoverySubmitResultCodec.encode(value));
104
+ requireSafeInteger(value.acceptedAt, 0);
105
+ requireSafeInteger(value.expiresAt, 0);
106
+ if (value.expiresAt <= value.acceptedAt)
107
+ throw new ProtocolError('invalid_expiry', 'Recovery acceptance interval must have a later expiry.');
108
+ }
109
+ export const groupRecoveryEntryCodec = defineCodec({ request: { wire: 'request', codec: groupMemberRecoveryRequestCodec }, signerCertificate, ...recoveryInterval });
110
+ export function validateGroupRecoveryEntry(value, expectedGroupId, context) {
111
+ validateCompleteObject(groupRecoveryEntryCodec.encode(value));
112
+ validateIdentifier('group', expectedGroupId);
113
+ validateGroupRecoverySubmitResult({ acceptedAt: value.acceptedAt, expiresAt: value.expiresAt });
114
+ verifyGroupMemberRecoveryRequest(value.request, value.signerCertificate, context);
115
+ if (value.request.groupId !== expectedGroupId)
116
+ throw new ProtocolError('invalid_binding', 'Recovery request belongs to another group.');
117
+ }
118
+ export const groupRecoveryPageCodec = defineCodec({ requests: { wire: 'requests', codec: array(groupRecoveryEntryCodec) }, next });
119
+ export function validateGroupRecoveryPage(value, query, context) {
120
+ validateCompleteObject(groupRecoveryPageCodec.encode(value));
121
+ page(value.requests.length, value.next, query);
122
+ const accounts = new Set();
123
+ for (const entry of value.requests) {
124
+ validateGroupRecoveryEntry(entry, query.groupId, context);
125
+ if (accounts.has(entry.request.account))
126
+ throw new ProtocolError('duplicate_account', 'Recovery page repeats an account.');
127
+ accounts.add(entry.request.account);
128
+ }
129
+ }
130
+ const wrapping = { clientSecretCommitment: { wire: 'client_secret_commitment', codec: text }, clientSecretBoxes: { wire: 'client_secret_boxes', codec: dictionary(groupSecretBoxCodec) } };
131
+ export const groupApplicationApproveRequestCodec = defineCodec({ approval: { wire: 'approval', codec: groupApplicationApprovalCodec }, ...wrapping });
132
+ export const groupRecoveryApproveRequestCodec = defineCodec({ approval: { wire: 'approval', codec: groupMemberRecoveryApprovalCodec }, ...wrapping });
133
+ function boxes(value) {
134
+ contentHashBytes(value.clientSecretCommitment);
135
+ if (Object.keys(value.clientSecretBoxes).length !== value.approval.members.length)
136
+ throw new ProtocolError('invalid_recipients', 'Client secret boxes must match exactly the approved accounts.');
137
+ for (const member of value.approval.members) {
138
+ if (!Object.hasOwn(value.clientSecretBoxes, member.account))
139
+ throw new ProtocolError('invalid_recipients', 'An approved account is missing its client secret box.');
140
+ validateGroupSecretBox(value.clientSecretBoxes[member.account]);
141
+ }
142
+ }
143
+ export function validateGroupApplicationApproveRequest(value) { validateCompleteObject(groupApplicationApproveRequestCodec.encode(value)); validateGroupManagementPayload({ kind: 'applicationApproval', value: value.approval }); boxes(value); }
144
+ export function validateGroupRecoveryApproveRequest(value) { validateCompleteObject(groupRecoveryApproveRequestCodec.encode(value)); validateGroupManagementPayload({ kind: 'memberRecoveryApproval', value: value.approval }); boxes(value); }
145
+ export const groupSubscriptionRequestCodec = defineCodec({ groupIds: { wire: 'group_ids', codec: array(text) } });
146
+ export function validateGroupSubscriptionRequest(value) { validateCompleteObject(groupSubscriptionRequestCodec.encode(value)); if (new Set(value.groupIds).size !== value.groupIds.length)
147
+ throw new ProtocolError('duplicate_group', 'Group subscription repeats a group.'); for (const id of value.groupIds)
148
+ validateIdentifier('group', id); }
149
+ export const groupChangedNotificationCodec = defineCodec({ groupId });
150
+ export function validateGroupChangedNotification(value) { validateCompleteObject(groupChangedNotificationCodec.encode(value)); validateIdentifier('group', value.groupId); }
151
+ export const groupTimelineChangedNotificationCodec = defineCodec({ groupId, head: { wire: 'head', codec: integer } });
152
+ export function validateGroupTimelineChangedNotification(value) { validateCompleteObject(groupTimelineChangedNotificationCodec.encode(value)); validateIdentifier('group', value.groupId); requireSafeInteger(value.head, 0); }
153
+ //# sourceMappingURL=group-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-admission.js","sourceRoot":"","sources":["../../src/models/group-admission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type ExtensibleModel } from '../protocol/codec.js';
2
+ import { type GroupSecretBox } from './groups.js';
3
+ export interface GroupKeyEntry extends ExtensibleModel {
4
+ readonly epoch: number;
5
+ readonly clientSecretBox?: GroupSecretBox;
6
+ readonly relaySecretBox: GroupSecretBox;
7
+ }
8
+ export declare const groupKeyEntryCodec: import("../protocol/codec.js").ProtocolCodec<GroupKeyEntry>;
9
+ export declare function validateGroupKeyEntry(value: GroupKeyEntry): void;
10
+ export interface GroupKeyPage extends ExtensibleModel {
11
+ readonly keys: readonly GroupKeyEntry[];
12
+ readonly hasMore: boolean;
13
+ }
14
+ export declare const groupKeyPageCodec: import("../protocol/codec.js").ProtocolCodec<GroupKeyPage>;
15
+ export declare function validateGroupKeyPage(value: GroupKeyPage, after?: number): void;
16
+ export interface GroupRotationPrepareRequest extends ExtensibleModel {
17
+ readonly groupId: string;
18
+ readonly baseCommitment: string;
19
+ readonly clientSecretCommitment: string;
20
+ readonly clientSecretBoxes: Readonly<Record<string, GroupSecretBox>>;
21
+ }
22
+ export declare const groupRotationPrepareRequestCodec: import("../protocol/codec.js").ProtocolCodec<GroupRotationPrepareRequest>;
23
+ export declare function validateGroupRotationPrepareRequest(value: GroupRotationPrepareRequest): void;
24
+ export interface GroupRotationPrepareResult extends ExtensibleModel {
25
+ readonly prepared: number;
26
+ readonly expiresAt: number;
27
+ }
28
+ export declare const groupRotationPrepareResultCodec: import("../protocol/codec.js").ProtocolCodec<GroupRotationPrepareResult>;
29
+ export declare function validateGroupRotationPrepareResult(value: GroupRotationPrepareResult, now: number): void;
30
+ //# sourceMappingURL=group-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-keys.d.ts","sourceRoot":"","sources":["../../src/models/group-keys.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0D,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIpH,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/F,MAAM,WAAW,aAAc,SAAQ,eAAe;IAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;CAAE;AACrK,eAAO,MAAM,kBAAkB,6DAAiP,CAAC;AACjR,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAA0N;AAC3R,MAAM,WAAW,YAAa,SAAQ,eAAe;IAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAC5H,eAAO,MAAM,iBAAiB,4DAAyI,CAAC;AACxK,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,SAAK,GAAG,IAAI,CAK1E;AACD,MAAM,WAAW,2BAA4B,SAAQ,eAAe;IAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;CAAE;AACjP,eAAO,MAAM,gCAAgC,2EAA4T,CAAC;AAC1W,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CAK5F;AACD,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC7H,eAAO,MAAM,+BAA+B,0EAAiJ,CAAC;AAC9L,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGvG"}