@vex-chat/libvex 1.0.2 → 2.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 (151) hide show
  1. package/README.md +103 -41
  2. package/dist/Client.d.ts +449 -554
  3. package/dist/Client.d.ts.map +1 -0
  4. package/dist/Client.js +1542 -1484
  5. package/dist/Client.js.map +1 -1
  6. package/dist/Storage.d.ts +111 -0
  7. package/dist/Storage.d.ts.map +1 -0
  8. package/dist/Storage.js +2 -0
  9. package/dist/Storage.js.map +1 -0
  10. package/dist/__tests__/harness/memory-storage.d.ts +29 -27
  11. package/dist/__tests__/harness/memory-storage.d.ts.map +1 -0
  12. package/dist/__tests__/harness/memory-storage.js +120 -109
  13. package/dist/__tests__/harness/memory-storage.js.map +1 -1
  14. package/dist/codec.d.ts +44 -0
  15. package/dist/codec.d.ts.map +1 -0
  16. package/dist/codec.js +51 -0
  17. package/dist/codec.js.map +1 -0
  18. package/dist/codecs.d.ts +201 -0
  19. package/dist/codecs.d.ts.map +1 -0
  20. package/dist/codecs.js +67 -0
  21. package/dist/codecs.js.map +1 -0
  22. package/dist/index.d.ts +7 -5
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +1 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/keystore/memory.d.ts +5 -4
  27. package/dist/keystore/memory.d.ts.map +1 -0
  28. package/dist/keystore/memory.js +9 -7
  29. package/dist/keystore/memory.js.map +1 -1
  30. package/dist/keystore/node.d.ts +6 -5
  31. package/dist/keystore/node.d.ts.map +1 -0
  32. package/dist/keystore/node.js +38 -19
  33. package/dist/keystore/node.js.map +1 -1
  34. package/dist/preset/common.d.ts +9 -0
  35. package/dist/preset/common.d.ts.map +1 -0
  36. package/dist/preset/common.js +2 -0
  37. package/dist/preset/common.js.map +1 -0
  38. package/dist/preset/node.d.ts +3 -5
  39. package/dist/preset/node.d.ts.map +1 -0
  40. package/dist/preset/node.js +5 -7
  41. package/dist/preset/node.js.map +1 -1
  42. package/dist/preset/test.d.ts +4 -4
  43. package/dist/preset/test.d.ts.map +1 -0
  44. package/dist/preset/test.js +8 -10
  45. package/dist/preset/test.js.map +1 -1
  46. package/dist/storage/node.d.ts +4 -3
  47. package/dist/storage/node.d.ts.map +1 -0
  48. package/dist/storage/node.js +4 -4
  49. package/dist/storage/node.js.map +1 -1
  50. package/dist/storage/schema.d.ts +55 -57
  51. package/dist/storage/schema.d.ts.map +1 -0
  52. package/dist/storage/sqlite.d.ts +33 -28
  53. package/dist/storage/sqlite.d.ts.map +1 -0
  54. package/dist/storage/sqlite.js +330 -290
  55. package/dist/storage/sqlite.js.map +1 -1
  56. package/dist/transport/types.d.ts +23 -16
  57. package/dist/transport/types.d.ts.map +1 -0
  58. package/dist/transport/websocket.d.ts +26 -0
  59. package/dist/transport/websocket.d.ts.map +1 -0
  60. package/dist/transport/websocket.js +83 -0
  61. package/dist/transport/websocket.js.map +1 -0
  62. package/dist/types/crypto.d.ts +35 -0
  63. package/dist/types/crypto.d.ts.map +1 -0
  64. package/dist/types/crypto.js +9 -0
  65. package/dist/types/crypto.js.map +1 -0
  66. package/dist/types/identity.d.ts +17 -0
  67. package/dist/types/identity.d.ts.map +1 -0
  68. package/dist/types/identity.js +6 -0
  69. package/dist/types/identity.js.map +1 -0
  70. package/dist/types/index.d.ts +3 -0
  71. package/dist/types/index.d.ts.map +1 -0
  72. package/dist/types/index.js +2 -0
  73. package/dist/types/index.js.map +1 -0
  74. package/dist/utils/capitalize.d.ts +1 -0
  75. package/dist/utils/capitalize.d.ts.map +1 -0
  76. package/dist/utils/createLogger.d.ts +1 -0
  77. package/dist/utils/createLogger.d.ts.map +1 -0
  78. package/dist/utils/createLogger.js +4 -11
  79. package/dist/utils/createLogger.js.map +1 -1
  80. package/dist/utils/formatBytes.d.ts +1 -0
  81. package/dist/utils/formatBytes.d.ts.map +1 -0
  82. package/dist/utils/formatBytes.js +3 -1
  83. package/dist/utils/formatBytes.js.map +1 -1
  84. package/dist/utils/sqlSessionToCrypto.d.ts +4 -2
  85. package/dist/utils/sqlSessionToCrypto.d.ts.map +1 -0
  86. package/dist/utils/sqlSessionToCrypto.js +5 -5
  87. package/dist/utils/sqlSessionToCrypto.js.map +1 -1
  88. package/dist/utils/uint8uuid.d.ts +1 -4
  89. package/dist/utils/uint8uuid.d.ts.map +1 -0
  90. package/dist/utils/uint8uuid.js +1 -7
  91. package/dist/utils/uint8uuid.js.map +1 -1
  92. package/package.json +58 -87
  93. package/src/Client.ts +3304 -0
  94. package/{dist/IStorage.d.ts → src/Storage.ts} +70 -62
  95. package/src/__tests__/codec.test.ts +251 -0
  96. package/src/__tests__/ghost.png +0 -0
  97. package/src/__tests__/harness/fixtures.ts +22 -0
  98. package/src/__tests__/harness/memory-storage.ts +254 -0
  99. package/src/__tests__/harness/platform-transports.ts +17 -0
  100. package/src/__tests__/harness/poison-node-imports.ts +108 -0
  101. package/src/__tests__/harness/shared-suite.ts +446 -0
  102. package/src/__tests__/platform-browser.test.ts +19 -0
  103. package/src/__tests__/platform-node.test.ts +10 -0
  104. package/src/__tests__/triggered.png +0 -0
  105. package/src/codec.ts +68 -0
  106. package/src/codecs.ts +101 -0
  107. package/src/index.ts +33 -0
  108. package/src/keystore/memory.ts +30 -0
  109. package/src/keystore/node.ts +91 -0
  110. package/src/preset/common.ts +13 -0
  111. package/src/preset/node.ts +34 -0
  112. package/src/preset/test.ts +37 -0
  113. package/src/storage/node.ts +33 -0
  114. package/src/storage/schema.ts +94 -0
  115. package/src/storage/sqlite.ts +676 -0
  116. package/src/transport/types.ts +29 -0
  117. package/src/transport/websocket.ts +106 -0
  118. package/src/types/crypto.ts +39 -0
  119. package/src/types/identity.ts +18 -0
  120. package/src/types/index.ts +9 -0
  121. package/src/utils/capitalize.ts +6 -0
  122. package/src/utils/createLogger.ts +37 -0
  123. package/src/utils/formatBytes.ts +15 -0
  124. package/src/utils/sqlSessionToCrypto.ts +16 -0
  125. package/src/utils/uint8uuid.ts +7 -0
  126. package/dist/IStorage.js +0 -2
  127. package/dist/IStorage.js.map +0 -1
  128. package/dist/keystore/types.d.ts +0 -4
  129. package/dist/keystore/types.js +0 -2
  130. package/dist/keystore/types.js.map +0 -1
  131. package/dist/preset/expo.d.ts +0 -2
  132. package/dist/preset/expo.js +0 -37
  133. package/dist/preset/expo.js.map +0 -1
  134. package/dist/preset/tauri.d.ts +0 -2
  135. package/dist/preset/tauri.js +0 -35
  136. package/dist/preset/tauri.js.map +0 -1
  137. package/dist/preset/types.d.ts +0 -13
  138. package/dist/preset/types.js +0 -2
  139. package/dist/preset/types.js.map +0 -1
  140. package/dist/storage/expo.d.ts +0 -3
  141. package/dist/storage/expo.js +0 -18
  142. package/dist/storage/expo.js.map +0 -1
  143. package/dist/storage/tauri.d.ts +0 -3
  144. package/dist/storage/tauri.js +0 -21
  145. package/dist/storage/tauri.js.map +0 -1
  146. package/dist/transport/browser.d.ts +0 -17
  147. package/dist/transport/browser.js +0 -56
  148. package/dist/transport/browser.js.map +0 -1
  149. package/dist/utils/constants.d.ts +0 -8
  150. package/dist/utils/constants.js +0 -9
  151. package/dist/utils/constants.js.map +0 -1
@@ -1,68 +1,145 @@
1
+ import { xBoxKeyPairFromSecret, XKeyConvert, xSecretbox, xSecretboxOpen, xSignKeyPairFromSecret, XUtils, } from "@vex-chat/crypto";
1
2
  /**
2
- * Minimal in-memory IStorage for browser/RN platform tests.
3
+ * Minimal in-memory Storage for browser/RN platform tests.
3
4
  *
4
5
  * Uses eventemitter3 (browser-safe) instead of Node's events module.
5
6
  * No persistence — just enough for the register/login/connect/DM test flow.
6
7
  */
7
8
  import { EventEmitter } from "eventemitter3";
8
- import { XKeyConvert, XUtils } from "@vex-chat/crypto";
9
- import nacl from "tweetnacl";
10
9
  export class MemoryStorage extends EventEmitter {
11
10
  ready = false;
12
- messages = [];
13
- sessions = [];
14
- preKeys = [];
15
- oneTimeKeys = [];
16
11
  devices = [];
17
12
  idKeys;
18
- nextPreKeyIndex = 1;
13
+ messages = [];
19
14
  nextOtkIndex = 1;
15
+ nextPreKeyIndex = 1;
16
+ oneTimeKeys = [];
17
+ preKeys = [];
18
+ sessions = [];
20
19
  constructor(SK) {
21
20
  super();
22
- const idKeys = XKeyConvert.convertKeyPair(nacl.sign.keyPair.fromSecretKey(XUtils.decodeHex(SK)));
21
+ const idKeys = XKeyConvert.convertKeyPair(xSignKeyPairFromSecret(XUtils.decodeHex(SK)));
23
22
  if (!idKeys)
24
23
  throw new Error("Can't convert SK!");
25
24
  this.idKeys = idKeys;
26
25
  }
27
- async init() {
28
- this.ready = true;
29
- this.emit("ready");
26
+ close() {
27
+ return Promise.resolve();
30
28
  }
31
- async close() { }
32
- async saveMessage(message) {
33
- const copy = { ...message };
34
- copy.message = XUtils.encodeHex(nacl.secretbox(XUtils.decodeUTF8(message.message), XUtils.decodeHex(message.nonce), this.idKeys.secretKey));
35
- this.messages.push(copy);
29
+ deleteHistory(channelOrUserID) {
30
+ this.messages = this.messages.filter((m) => m.group !== channelOrUserID &&
31
+ m.authorID !== channelOrUserID &&
32
+ m.readerID !== channelOrUserID);
33
+ return Promise.resolve();
36
34
  }
37
- async deleteMessage(mailID) {
35
+ deleteMessage(mailID) {
38
36
  this.messages = this.messages.filter((m) => m.mailID !== mailID);
37
+ return Promise.resolve();
39
38
  }
40
- async markSessionVerified(sessionID) {
41
- const s = this.sessions.find((s) => s.sessionID === sessionID);
42
- if (s)
43
- s.verified = true;
39
+ deleteOneTimeKey(index) {
40
+ this.oneTimeKeys = this.oneTimeKeys.filter((k) => k.index !== index);
41
+ return Promise.resolve();
44
42
  }
45
- async markSessionUsed(sessionID) {
46
- const s = this.sessions.find((s) => s.sessionID === sessionID);
47
- if (s)
48
- s.lastUsed = new Date();
43
+ getAllSessions() {
44
+ return Promise.resolve(this.sessions.map((s) => ({
45
+ ...s,
46
+ verified: s.verified,
47
+ })));
48
+ }
49
+ getDevice(deviceID) {
50
+ return Promise.resolve(this.devices.find((d) => d.deviceID === deviceID) ?? null);
51
+ }
52
+ getGroupHistory(channelID) {
53
+ return Promise.resolve(this.messages
54
+ .filter((m) => m.group === channelID)
55
+ .map((m) => this.decryptMessage(m)));
49
56
  }
50
- async getMessageHistory(userID) {
51
- return this.messages
57
+ getMessageHistory(userID) {
58
+ return Promise.resolve(this.messages
52
59
  .filter((m) => (m.direction === "incoming" &&
53
60
  m.authorID === userID &&
54
61
  !m.group) ||
55
62
  (m.direction === "outgoing" &&
56
63
  m.readerID === userID &&
57
64
  !m.group))
58
- .map((m) => this.decryptMessage(m));
65
+ .map((m) => this.decryptMessage(m)));
59
66
  }
60
- async getGroupHistory(channelID) {
61
- return this.messages
62
- .filter((m) => m.group === channelID)
63
- .map((m) => this.decryptMessage(m));
67
+ getOneTimeKey(index) {
68
+ const otk = this.oneTimeKeys.find((k) => k.index === index);
69
+ if (!otk || !otk.privateKey)
70
+ return Promise.resolve(null);
71
+ return Promise.resolve({
72
+ index: otk.index,
73
+ keyPair: xBoxKeyPairFromSecret(XUtils.decodeHex(otk.privateKey)),
74
+ signature: XUtils.decodeHex(otk.signature),
75
+ });
76
+ }
77
+ getPreKeys() {
78
+ if (this.preKeys.length === 0)
79
+ return Promise.resolve(null);
80
+ const pk = this.preKeys[0];
81
+ if (!pk.privateKey)
82
+ return Promise.resolve(null);
83
+ return Promise.resolve({
84
+ index: pk.index,
85
+ keyPair: xBoxKeyPairFromSecret(XUtils.decodeHex(pk.privateKey)),
86
+ signature: XUtils.decodeHex(pk.signature),
87
+ });
88
+ }
89
+ getSessionByDeviceID(deviceID) {
90
+ const s = this.sessions.find((s) => s.deviceID === deviceID);
91
+ if (!s)
92
+ return Promise.resolve(null);
93
+ return Promise.resolve(this.sqlToCrypto(s));
94
+ }
95
+ getSessionByPublicKey(publicKey) {
96
+ const hex = XUtils.encodeHex(publicKey);
97
+ const s = this.sessions.find((s) => s.publicKey === hex);
98
+ if (!s)
99
+ return Promise.resolve(null);
100
+ return Promise.resolve(this.sqlToCrypto(s));
101
+ }
102
+ init() {
103
+ this.ready = true;
104
+ this.emit("ready");
105
+ return Promise.resolve();
106
+ }
107
+ markSessionUsed(sessionID) {
108
+ const s = this.sessions.find((s) => s.sessionID === sessionID);
109
+ if (s)
110
+ s.lastUsed = new Date().toISOString();
111
+ return Promise.resolve();
64
112
  }
65
- async savePreKeys(preKeys, oneTime) {
113
+ markSessionVerified(sessionID) {
114
+ const s = this.sessions.find((s) => s.sessionID === sessionID);
115
+ if (s)
116
+ s.verified = true;
117
+ return Promise.resolve();
118
+ }
119
+ purgeHistory() {
120
+ this.messages = [];
121
+ return Promise.resolve();
122
+ }
123
+ purgeKeyData() {
124
+ this.sessions = [];
125
+ this.preKeys = [];
126
+ this.oneTimeKeys = [];
127
+ this.messages = [];
128
+ return Promise.resolve();
129
+ }
130
+ saveDevice(device) {
131
+ if (!this.devices.find((d) => d.deviceID === device.deviceID)) {
132
+ this.devices.push(device);
133
+ }
134
+ return Promise.resolve();
135
+ }
136
+ saveMessage(message) {
137
+ const copy = { ...message };
138
+ copy.message = XUtils.encodeHex(xSecretbox(XUtils.decodeUTF8(message.message), XUtils.decodeHex(message.nonce), this.idKeys.secretKey));
139
+ this.messages.push(copy);
140
+ return Promise.resolve();
141
+ }
142
+ savePreKeys(preKeys, oneTime) {
66
143
  const added = [];
67
144
  for (const pk of preKeys) {
68
145
  const idx = oneTime ? this.nextOtkIndex++ : this.nextPreKeyIndex++;
@@ -83,84 +160,18 @@ export class MemoryStorage extends EventEmitter {
83
160
  signature: row.signature,
84
161
  });
85
162
  }
86
- return added;
87
- }
88
- async getPreKeys() {
89
- if (this.preKeys.length === 0)
90
- return null;
91
- const pk = this.preKeys[0];
92
- if (!pk.privateKey)
93
- return null;
94
- return {
95
- keyPair: nacl.box.keyPair.fromSecretKey(XUtils.decodeHex(pk.privateKey)),
96
- signature: XUtils.decodeHex(pk.signature),
97
- };
98
- }
99
- async getOneTimeKey(index) {
100
- const otk = this.oneTimeKeys.find((k) => k.index === index);
101
- if (!otk || !otk.privateKey)
102
- return null;
103
- return {
104
- keyPair: nacl.box.keyPair.fromSecretKey(XUtils.decodeHex(otk.privateKey)),
105
- signature: XUtils.decodeHex(otk.signature),
106
- index: otk.index,
107
- };
108
- }
109
- async deleteOneTimeKey(index) {
110
- this.oneTimeKeys = this.oneTimeKeys.filter((k) => k.index !== index);
111
- }
112
- async getSessionByPublicKey(publicKey) {
113
- const hex = XUtils.encodeHex(publicKey);
114
- const s = this.sessions.find((s) => s.publicKey === hex);
115
- if (!s)
116
- return null;
117
- return this.sqlToCrypto(s);
118
- }
119
- async getAllSessions() {
120
- return this.sessions.map((s) => ({
121
- ...s,
122
- verified: Boolean(s.verified),
123
- }));
163
+ return Promise.resolve(added);
124
164
  }
125
- async getSessionByDeviceID(deviceID) {
126
- const s = this.sessions.find((s) => s.deviceID === deviceID);
127
- if (!s)
128
- return null;
129
- return this.sqlToCrypto(s);
130
- }
131
- async saveSession(session) {
165
+ saveSession(session) {
132
166
  if (!this.sessions.find((s) => s.SK === session.SK)) {
133
167
  this.sessions.push(session);
134
168
  }
135
- }
136
- async getDevice(deviceID) {
137
- return this.devices.find((d) => d.deviceID === deviceID) ?? null;
138
- }
139
- async saveDevice(device) {
140
- if (!this.devices.find((d) => d.deviceID === device.deviceID)) {
141
- this.devices.push(device);
142
- }
143
- }
144
- async purgeHistory() {
145
- this.messages = [];
146
- }
147
- async purgeKeyData() {
148
- this.sessions = [];
149
- this.preKeys = [];
150
- this.oneTimeKeys = [];
151
- this.messages = [];
152
- }
153
- async deleteHistory(channelOrUserID) {
154
- this.messages = this.messages.filter((m) => m.group !== channelOrUserID &&
155
- m.authorID !== channelOrUserID &&
156
- m.readerID !== channelOrUserID);
169
+ return Promise.resolve();
157
170
  }
158
171
  decryptMessage(msg) {
159
172
  const copy = { ...msg };
160
- copy.timestamp = new Date(copy.timestamp);
161
- copy.decrypted = Boolean(copy.decrypted);
162
173
  if (copy.decrypted) {
163
- const dec = nacl.secretbox.open(XUtils.decodeHex(copy.message), XUtils.decodeHex(copy.nonce), this.idKeys.secretKey);
174
+ const dec = xSecretboxOpen(XUtils.decodeHex(copy.message), XUtils.decodeHex(copy.nonce), this.idKeys.secretKey);
164
175
  if (dec)
165
176
  copy.message = XUtils.encodeUTF8(dec);
166
177
  }
@@ -168,13 +179,13 @@ export class MemoryStorage extends EventEmitter {
168
179
  }
169
180
  sqlToCrypto(s) {
170
181
  return {
171
- sessionID: s.sessionID,
172
- userID: s.userID,
182
+ fingerprint: XUtils.decodeHex(s.fingerprint),
183
+ lastUsed: s.lastUsed,
173
184
  mode: s.mode,
174
- SK: XUtils.decodeHex(s.SK),
175
185
  publicKey: XUtils.decodeHex(s.publicKey),
176
- lastUsed: s.lastUsed,
177
- fingerprint: XUtils.decodeHex(s.fingerprint),
186
+ sessionID: s.sessionID,
187
+ SK: XUtils.decodeHex(s.SK),
188
+ userID: s.userID,
178
189
  };
179
190
  }
180
191
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../../../src/__tests__/harness/memory-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../../../src/__tests__/harness/memory-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Type-safe codec factory for msgpack encode/decode with optional Zod validation.
3
+ *
4
+ * Usage:
5
+ * import { MailWSSchema } from "@vex-chat/types";
6
+ * const MailCodec = createCodec(MailWSSchema);
7
+ *
8
+ * // SDK/Apps (trusted internal) — fast, typed, no Zod overhead:
9
+ * const msg = MailCodec.decode(data);
10
+ *
11
+ * // Spire (trust boundary) — validates at runtime:
12
+ * const msg = MailCodec.decodeSafe(data);
13
+ */
14
+ import type { z } from "zod/v4";
15
+ /**
16
+ * Creates a type-safe codec for msgpack encode/decode.
17
+ *
18
+ * @param schema - A Zod schema to validate against
19
+ * @returns An object with encode, decode, encodeSafe, and decodeSafe methods
20
+ */
21
+ export declare function createCodec<T extends z.ZodType>(schema: T): {
22
+ /** Decode msgpack data — typed but not validated. Fast path for SDK. */
23
+ decode: (data: Uint8Array) => z.core.output<T>;
24
+ /** Decode + validate with Zod. Safe path for trust boundaries (Spire). */
25
+ decodeSafe: (data: Uint8Array) => z.core.output<T>;
26
+ /** Encode to msgpack — typed but not validated. */
27
+ encode: (msg: z.core.output<T>) => Uint8Array;
28
+ /** Validate + encode. Ensures outgoing messages match the schema. */
29
+ encodeSafe: (msg: z.core.output<T>) => Uint8Array;
30
+ };
31
+ declare function decode(data: Uint8Array): unknown;
32
+ /**
33
+ * Encode a value to msgpack. Returns a fresh Uint8Array copy
34
+ * (not a subarray of the internal pool buffer) to avoid browser
35
+ * XMLHttpRequest.send() corruption (axios issue #4068).
36
+ */
37
+ declare function encode(value: unknown): Uint8Array;
38
+ /** Raw msgpack encode/decode without schema validation. */
39
+ export declare const msgpack: {
40
+ decode: typeof decode;
41
+ encode: typeof encode;
42
+ };
43
+ export {};
44
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAMhC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAGlD,wEAAwE;mBACzD,UAAU;IAEzB,0EAA0E;uBACvD,UAAU;IAG7B,mDAAmD;uCAC/B,UAAU;IAE9B,qEAAqE;2CAC7C,UAAU;EAKzC;AAED,iBAAS,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEzC;AAED;;;;GAIG;AACH,iBAAS,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAQ1C;AAED,2DAA2D;AAC3D,eAAO,MAAM,OAAO;;;CAAqB,CAAC"}
package/dist/codec.js ADDED
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Type-safe codec factory for msgpack encode/decode with optional Zod validation.
3
+ *
4
+ * Usage:
5
+ * import { MailWSSchema } from "@vex-chat/types";
6
+ * const MailCodec = createCodec(MailWSSchema);
7
+ *
8
+ * // SDK/Apps (trusted internal) — fast, typed, no Zod overhead:
9
+ * const msg = MailCodec.decode(data);
10
+ *
11
+ * // Spire (trust boundary) — validates at runtime:
12
+ * const msg = MailCodec.decodeSafe(data);
13
+ */
14
+ import { Packr } from "msgpackr";
15
+ const _packr = new Packr({ moreTypes: false, useRecords: false });
16
+ /**
17
+ * Creates a type-safe codec for msgpack encode/decode.
18
+ *
19
+ * @param schema - A Zod schema to validate against
20
+ * @returns An object with encode, decode, encodeSafe, and decodeSafe methods
21
+ */
22
+ export function createCodec(schema) {
23
+ return {
24
+ /** Decode msgpack data — typed but not validated. Fast path for SDK. */
25
+ decode: (data) => schema.parse(decode(data)),
26
+ /** Decode + validate with Zod. Safe path for trust boundaries (Spire). */
27
+ decodeSafe: (data) => schema.parse(decode(data)),
28
+ /** Encode to msgpack — typed but not validated. */
29
+ encode: (msg) => encode(msg),
30
+ /** Validate + encode. Ensures outgoing messages match the schema. */
31
+ encodeSafe: (msg) => {
32
+ schema.parse(msg);
33
+ return encode(msg);
34
+ },
35
+ };
36
+ }
37
+ function decode(data) {
38
+ return _packr.decode(data);
39
+ }
40
+ /**
41
+ * Encode a value to msgpack. Returns a fresh Uint8Array copy
42
+ * (not a subarray of the internal pool buffer) to avoid browser
43
+ * XMLHttpRequest.send() corruption (axios issue #4068).
44
+ */
45
+ function encode(value) {
46
+ const packed = _packr.encode(value);
47
+ return new Uint8Array(packed.buffer.slice(packed.byteOffset, packed.byteOffset + packed.byteLength));
48
+ }
49
+ /** Raw msgpack encode/decode without schema validation. */
50
+ export const msgpack = { decode, encode };
51
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAsB,MAAS;IAEtD,OAAO;QACH,wEAAwE;QACxE,MAAM,EAAE,CAAC,IAAgB,EAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAQ;QAEpE,0EAA0E;QAC1E,UAAU,EAAE,CAAC,IAAgB,EAAO,EAAE,CAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAQ;QAErC,mDAAmD;QACnD,MAAM,EAAE,CAAC,GAAQ,EAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;QAE7C,qEAAqE;QACrE,UAAU,EAAE,CAAC,GAAQ,EAAc,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAS,MAAM,CAAC,IAAgB;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAY,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,KAAc;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,IAAI,UAAU,CACjB,MAAM,CAAC,MAAM,CAAC,KAAK,CACf,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CACxC,CACJ,CAAC;AACN,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,201 @@
1
+ export declare const UserCodec: {
2
+ decode: (data: Uint8Array) => import("@vex-chat/types").User;
3
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").User;
4
+ encode: (msg: import("@vex-chat/types").User) => Uint8Array;
5
+ encodeSafe: (msg: import("@vex-chat/types").User) => Uint8Array;
6
+ };
7
+ export declare const DeviceCodec: {
8
+ decode: (data: Uint8Array) => import("@vex-chat/types").Device;
9
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Device;
10
+ encode: (msg: import("@vex-chat/types").Device) => Uint8Array;
11
+ encodeSafe: (msg: import("@vex-chat/types").Device) => Uint8Array;
12
+ };
13
+ export declare const ServerCodec: {
14
+ decode: (data: Uint8Array) => import("@vex-chat/types").Server;
15
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Server;
16
+ encode: (msg: import("@vex-chat/types").Server) => Uint8Array;
17
+ encodeSafe: (msg: import("@vex-chat/types").Server) => Uint8Array;
18
+ };
19
+ export declare const ChannelCodec: {
20
+ decode: (data: Uint8Array) => import("@vex-chat/types").Channel;
21
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Channel;
22
+ encode: (msg: import("@vex-chat/types").Channel) => Uint8Array;
23
+ encodeSafe: (msg: import("@vex-chat/types").Channel) => Uint8Array;
24
+ };
25
+ export declare const PermissionCodec: {
26
+ decode: (data: Uint8Array) => import("@vex-chat/types").Permission;
27
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Permission;
28
+ encode: (msg: import("@vex-chat/types").Permission) => Uint8Array;
29
+ encodeSafe: (msg: import("@vex-chat/types").Permission) => Uint8Array;
30
+ };
31
+ export declare const InviteCodec: {
32
+ decode: (data: Uint8Array) => import("@vex-chat/types").Invite;
33
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Invite;
34
+ encode: (msg: import("@vex-chat/types").Invite) => Uint8Array;
35
+ encodeSafe: (msg: import("@vex-chat/types").Invite) => Uint8Array;
36
+ };
37
+ export declare const EmojiCodec: {
38
+ decode: (data: Uint8Array) => import("@vex-chat/types").Emoji;
39
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Emoji;
40
+ encode: (msg: import("@vex-chat/types").Emoji) => Uint8Array;
41
+ encodeSafe: (msg: import("@vex-chat/types").Emoji) => Uint8Array;
42
+ };
43
+ export declare const FileSQLCodec: {
44
+ decode: (data: Uint8Array) => import("@vex-chat/types").FileSQL;
45
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").FileSQL;
46
+ encode: (msg: import("@vex-chat/types").FileSQL) => Uint8Array;
47
+ encodeSafe: (msg: import("@vex-chat/types").FileSQL) => Uint8Array;
48
+ };
49
+ export declare const ActionTokenCodec: {
50
+ decode: (data: Uint8Array) => import("@vex-chat/types").ActionToken;
51
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").ActionToken;
52
+ encode: (msg: import("@vex-chat/types").ActionToken) => Uint8Array;
53
+ encodeSafe: (msg: import("@vex-chat/types").ActionToken) => Uint8Array;
54
+ };
55
+ export declare const KeyBundleCodec: {
56
+ decode: (data: Uint8Array) => import("@vex-chat/types").KeyBundle;
57
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").KeyBundle;
58
+ encode: (msg: import("@vex-chat/types").KeyBundle) => Uint8Array;
59
+ encodeSafe: (msg: import("@vex-chat/types").KeyBundle) => Uint8Array;
60
+ };
61
+ export declare const UserArrayCodec: {
62
+ decode: (data: Uint8Array) => import("@vex-chat/types").User[];
63
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").User[];
64
+ encode: (msg: import("@vex-chat/types").User[]) => Uint8Array;
65
+ encodeSafe: (msg: import("@vex-chat/types").User[]) => Uint8Array;
66
+ };
67
+ export declare const DeviceArrayCodec: {
68
+ decode: (data: Uint8Array) => import("@vex-chat/types").Device[];
69
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Device[];
70
+ encode: (msg: import("@vex-chat/types").Device[]) => Uint8Array;
71
+ encodeSafe: (msg: import("@vex-chat/types").Device[]) => Uint8Array;
72
+ };
73
+ export declare const ServerArrayCodec: {
74
+ decode: (data: Uint8Array) => import("@vex-chat/types").Server[];
75
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Server[];
76
+ encode: (msg: import("@vex-chat/types").Server[]) => Uint8Array;
77
+ encodeSafe: (msg: import("@vex-chat/types").Server[]) => Uint8Array;
78
+ };
79
+ export declare const ChannelArrayCodec: {
80
+ decode: (data: Uint8Array) => import("@vex-chat/types").Channel[];
81
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Channel[];
82
+ encode: (msg: import("@vex-chat/types").Channel[]) => Uint8Array;
83
+ encodeSafe: (msg: import("@vex-chat/types").Channel[]) => Uint8Array;
84
+ };
85
+ export declare const PermissionArrayCodec: {
86
+ decode: (data: Uint8Array) => import("@vex-chat/types").Permission[];
87
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Permission[];
88
+ encode: (msg: import("@vex-chat/types").Permission[]) => Uint8Array;
89
+ encodeSafe: (msg: import("@vex-chat/types").Permission[]) => Uint8Array;
90
+ };
91
+ export declare const InviteArrayCodec: {
92
+ decode: (data: Uint8Array) => import("@vex-chat/types").Invite[];
93
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Invite[];
94
+ encode: (msg: import("@vex-chat/types").Invite[]) => Uint8Array;
95
+ encodeSafe: (msg: import("@vex-chat/types").Invite[]) => Uint8Array;
96
+ };
97
+ export declare const EmojiArrayCodec: {
98
+ decode: (data: Uint8Array) => import("@vex-chat/types").Emoji[];
99
+ decodeSafe: (data: Uint8Array) => import("@vex-chat/types").Emoji[];
100
+ encode: (msg: import("@vex-chat/types").Emoji[]) => Uint8Array;
101
+ encodeSafe: (msg: import("@vex-chat/types").Emoji[]) => Uint8Array;
102
+ };
103
+ export declare const ConnectResponseCodec: {
104
+ decode: (data: Uint8Array) => {
105
+ deviceToken: string;
106
+ };
107
+ decodeSafe: (data: Uint8Array) => {
108
+ deviceToken: string;
109
+ };
110
+ encode: (msg: {
111
+ deviceToken: string;
112
+ }) => Uint8Array;
113
+ encodeSafe: (msg: {
114
+ deviceToken: string;
115
+ }) => Uint8Array;
116
+ };
117
+ export declare const AuthResponseCodec: {
118
+ decode: (data: Uint8Array) => {
119
+ token: string;
120
+ user: import("@vex-chat/types").User;
121
+ };
122
+ decodeSafe: (data: Uint8Array) => {
123
+ token: string;
124
+ user: import("@vex-chat/types").User;
125
+ };
126
+ encode: (msg: {
127
+ token: string;
128
+ user: import("@vex-chat/types").User;
129
+ }) => Uint8Array;
130
+ encodeSafe: (msg: {
131
+ token: string;
132
+ user: import("@vex-chat/types").User;
133
+ }) => Uint8Array;
134
+ };
135
+ export declare const DeviceChallengeCodec: {
136
+ decode: (data: Uint8Array) => {
137
+ challenge: string;
138
+ challengeID: string;
139
+ };
140
+ decodeSafe: (data: Uint8Array) => {
141
+ challenge: string;
142
+ challengeID: string;
143
+ };
144
+ encode: (msg: {
145
+ challenge: string;
146
+ challengeID: string;
147
+ }) => Uint8Array;
148
+ encodeSafe: (msg: {
149
+ challenge: string;
150
+ challengeID: string;
151
+ }) => Uint8Array;
152
+ };
153
+ export declare const WhoamiCodec: {
154
+ decode: (data: Uint8Array) => {
155
+ exp: number;
156
+ token: string;
157
+ user: import("@vex-chat/types").User;
158
+ };
159
+ decodeSafe: (data: Uint8Array) => {
160
+ exp: number;
161
+ token: string;
162
+ user: import("@vex-chat/types").User;
163
+ };
164
+ encode: (msg: {
165
+ exp: number;
166
+ token: string;
167
+ user: import("@vex-chat/types").User;
168
+ }) => Uint8Array;
169
+ encodeSafe: (msg: {
170
+ exp: number;
171
+ token: string;
172
+ user: import("@vex-chat/types").User;
173
+ }) => Uint8Array;
174
+ };
175
+ export declare const OtkCountCodec: {
176
+ decode: (data: Uint8Array) => {
177
+ count: number;
178
+ };
179
+ decodeSafe: (data: Uint8Array) => {
180
+ count: number;
181
+ };
182
+ encode: (msg: {
183
+ count: number;
184
+ }) => Uint8Array;
185
+ encodeSafe: (msg: {
186
+ count: number;
187
+ }) => Uint8Array;
188
+ };
189
+ /**
190
+ * Decode an axios arraybuffer response with a typed codec.
191
+ * Uses decodeSafe (Zod-validated) so schema mismatches surface immediately.
192
+ */
193
+ export declare function decodeAxios<T>(codec: {
194
+ decodeSafe: (data: Uint8Array) => T;
195
+ },
196
+ /**
197
+ * Accepts `unknown` because axios types its `responseType: 'arraybuffer'`
198
+ * responses as `any`. At runtime this is always an `ArrayBuffer`.
199
+ */
200
+ data: unknown): T;
201
+ //# sourceMappingURL=codecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../src/codecs.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,SAAS;;;;;CAA0B,CAAC;AACjD,eAAO,MAAM,WAAW;;;;;CAA4B,CAAC;AACrD,eAAO,MAAM,WAAW;;;;;CAA4B,CAAC;AACrD,eAAO,MAAM,YAAY;;;;;CAA6B,CAAC;AACvD,eAAO,MAAM,eAAe;;;;;CAAgC,CAAC;AAC7D,eAAO,MAAM,WAAW;;;;;CAA4B,CAAC;AACrD,eAAO,MAAM,UAAU;;;;;CAA2B,CAAC;AACnD,eAAO,MAAM,YAAY;;;;;CAA6B,CAAC;AACvD,eAAO,MAAM,gBAAgB;;;;;CAAiC,CAAC;AAC/D,eAAO,MAAM,cAAc;;;;;CAA+B,CAAC;AAI3D,eAAO,MAAM,cAAc;;;;;CAAmC,CAAC;AAC/D,eAAO,MAAM,gBAAgB;;;;;CAAqC,CAAC;AACnE,eAAO,MAAM,gBAAgB;;;;;CAAqC,CAAC;AACnE,eAAO,MAAM,iBAAiB;;;;;CAAsC,CAAC;AACrE,eAAO,MAAM,oBAAoB;;;;;CAAyC,CAAC;AAC3E,eAAO,MAAM,gBAAgB;;;;;CAAqC,CAAC;AACnE,eAAO,MAAM,eAAe;;;;;CAAoC,CAAC;AAIjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;CAEhC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAK7B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;CAKhC,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAMvB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAA+C,CAAC;AAI1E;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EACzB,KAAK,EAAE;IAAE,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,CAAC,CAAA;CAAE;AAC9C;;;GAGG;AACH,IAAI,EAAE,OAAO,GACd,CAAC,CAQH"}