glow.ts 1.0.2 → 1.1.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 (121) hide show
  1. package/README.md +6 -21
  2. package/dist/glow.cjs.js +4 -0
  3. package/dist/glow.cjs.js.map +1 -0
  4. package/dist/glow.es.js +993 -0
  5. package/dist/glow.es.js.map +1 -0
  6. package/dist/index.d.ts +544 -0
  7. package/package.json +34 -26
  8. package/dist/cjs2/config.js +0 -18
  9. package/dist/cjs2/config.js.map +0 -1
  10. package/dist/cjs2/crypto-storage/crypto-storage.js +0 -118
  11. package/dist/cjs2/crypto-storage/crypto-storage.js.map +0 -1
  12. package/dist/cjs2/crypto-storage/in-memory-storage.js +0 -36
  13. package/dist/cjs2/crypto-storage/in-memory-storage.js.map +0 -1
  14. package/dist/cjs2/crypto-storage/local-storage.driver.js +0 -36
  15. package/dist/cjs2/crypto-storage/local-storage.driver.js.map +0 -1
  16. package/dist/cjs2/crypto-storage/storage-driver.interface.js +0 -3
  17. package/dist/cjs2/crypto-storage/storage-driver.interface.js.map +0 -1
  18. package/dist/cjs2/index.js +0 -28
  19. package/dist/cjs2/index.js.map +0 -1
  20. package/dist/cjs2/keyring/keyring.js +0 -151
  21. package/dist/cjs2/keyring/keyring.js.map +0 -1
  22. package/dist/cjs2/keys/keys.js +0 -40
  23. package/dist/cjs2/keys/keys.js.map +0 -1
  24. package/dist/cjs2/mailbox/mailbox.js +0 -352
  25. package/dist/cjs2/mailbox/mailbox.js.map +0 -1
  26. package/dist/cjs2/nacl/encryption.helper.js +0 -101
  27. package/dist/cjs2/nacl/encryption.helper.js.map +0 -1
  28. package/dist/cjs2/nacl/js-nacl-driver.js +0 -110
  29. package/dist/cjs2/nacl/js-nacl-driver.js.map +0 -1
  30. package/dist/cjs2/nacl/keypair.interface.js +0 -3
  31. package/dist/cjs2/nacl/keypair.interface.js.map +0 -1
  32. package/dist/cjs2/nacl/nacl-driver.interface.js +0 -3
  33. package/dist/cjs2/nacl/nacl-driver.interface.js.map +0 -1
  34. package/dist/cjs2/nacl/nacl.js +0 -29
  35. package/dist/cjs2/nacl/nacl.js.map +0 -1
  36. package/dist/cjs2/relay/network-error.js +0 -12
  37. package/dist/cjs2/relay/network-error.js.map +0 -1
  38. package/dist/cjs2/relay/relay-factory.js +0 -22
  39. package/dist/cjs2/relay/relay-factory.js.map +0 -1
  40. package/dist/cjs2/relay/relay.js +0 -300
  41. package/dist/cjs2/relay/relay.js.map +0 -1
  42. package/dist/cjs2/utils/utils.js +0 -39
  43. package/dist/cjs2/utils/utils.js.map +0 -1
  44. package/dist/cjs2/zax.interface.js +0 -46
  45. package/dist/cjs2/zax.interface.js.map +0 -1
  46. package/dist/esm/config.js +0 -15
  47. package/dist/esm/config.js.map +0 -1
  48. package/dist/esm/crypto-storage/crypto-storage.js +0 -114
  49. package/dist/esm/crypto-storage/crypto-storage.js.map +0 -1
  50. package/dist/esm/crypto-storage/in-memory-storage.js +0 -32
  51. package/dist/esm/crypto-storage/in-memory-storage.js.map +0 -1
  52. package/dist/esm/crypto-storage/local-storage.driver.js +0 -32
  53. package/dist/esm/crypto-storage/local-storage.driver.js.map +0 -1
  54. package/dist/esm/crypto-storage/storage-driver.interface.js +0 -2
  55. package/dist/esm/crypto-storage/storage-driver.interface.js.map +0 -1
  56. package/dist/esm/index.js +0 -14
  57. package/dist/esm/index.js.map +0 -1
  58. package/dist/esm/keyring/keyring.js +0 -147
  59. package/dist/esm/keyring/keyring.js.map +0 -1
  60. package/dist/esm/keys/keys.js +0 -36
  61. package/dist/esm/keys/keys.js.map +0 -1
  62. package/dist/esm/mailbox/mailbox.js +0 -348
  63. package/dist/esm/mailbox/mailbox.js.map +0 -1
  64. package/dist/esm/nacl/encryption.helper.js +0 -97
  65. package/dist/esm/nacl/encryption.helper.js.map +0 -1
  66. package/dist/esm/nacl/js-nacl-driver.js +0 -106
  67. package/dist/esm/nacl/js-nacl-driver.js.map +0 -1
  68. package/dist/esm/nacl/keypair.interface.js +0 -2
  69. package/dist/esm/nacl/keypair.interface.js.map +0 -1
  70. package/dist/esm/nacl/nacl-driver.interface.js +0 -2
  71. package/dist/esm/nacl/nacl-driver.interface.js.map +0 -1
  72. package/dist/esm/nacl/nacl.js +0 -25
  73. package/dist/esm/nacl/nacl.js.map +0 -1
  74. package/dist/esm/relay/network-error.js +0 -8
  75. package/dist/esm/relay/network-error.js.map +0 -1
  76. package/dist/esm/relay/relay-factory.js +0 -18
  77. package/dist/esm/relay/relay-factory.js.map +0 -1
  78. package/dist/esm/relay/relay.js +0 -293
  79. package/dist/esm/relay/relay.js.map +0 -1
  80. package/dist/esm/utils/utils.js +0 -35
  81. package/dist/esm/utils/utils.js.map +0 -1
  82. package/dist/esm/zax.interface.js +0 -43
  83. package/dist/esm/zax.interface.js.map +0 -1
  84. package/dist/types/config.d.ts +0 -10
  85. package/dist/types/config.d.ts.map +0 -1
  86. package/dist/types/crypto-storage/crypto-storage.d.ts +0 -20
  87. package/dist/types/crypto-storage/crypto-storage.d.ts.map +0 -1
  88. package/dist/types/crypto-storage/in-memory-storage.d.ts +0 -17
  89. package/dist/types/crypto-storage/in-memory-storage.d.ts.map +0 -1
  90. package/dist/types/crypto-storage/local-storage.driver.d.ts +0 -15
  91. package/dist/types/crypto-storage/local-storage.driver.d.ts.map +0 -1
  92. package/dist/types/crypto-storage/storage-driver.interface.d.ts +0 -11
  93. package/dist/types/crypto-storage/storage-driver.interface.d.ts.map +0 -1
  94. package/dist/types/index.d.ts +0 -16
  95. package/dist/types/index.d.ts.map +0 -1
  96. package/dist/types/keyring/keyring.d.ts +0 -43
  97. package/dist/types/keyring/keyring.d.ts.map +0 -1
  98. package/dist/types/keys/keys.d.ts +0 -16
  99. package/dist/types/keys/keys.d.ts.map +0 -1
  100. package/dist/types/mailbox/mailbox.d.ts +0 -148
  101. package/dist/types/mailbox/mailbox.d.ts.map +0 -1
  102. package/dist/types/nacl/encryption.helper.d.ts +0 -37
  103. package/dist/types/nacl/encryption.helper.d.ts.map +0 -1
  104. package/dist/types/nacl/js-nacl-driver.d.ts +0 -39
  105. package/dist/types/nacl/js-nacl-driver.d.ts.map +0 -1
  106. package/dist/types/nacl/keypair.interface.d.ts +0 -5
  107. package/dist/types/nacl/keypair.interface.d.ts.map +0 -1
  108. package/dist/types/nacl/nacl-driver.interface.d.ts +0 -28
  109. package/dist/types/nacl/nacl-driver.interface.d.ts.map +0 -1
  110. package/dist/types/nacl/nacl.d.ts +0 -13
  111. package/dist/types/nacl/nacl.d.ts.map +0 -1
  112. package/dist/types/relay/network-error.d.ts +0 -6
  113. package/dist/types/relay/network-error.d.ts.map +0 -1
  114. package/dist/types/relay/relay-factory.d.ts +0 -10
  115. package/dist/types/relay/relay-factory.d.ts.map +0 -1
  116. package/dist/types/relay/relay.d.ts +0 -88
  117. package/dist/types/relay/relay.d.ts.map +0 -1
  118. package/dist/types/utils/utils.d.ts +0 -9
  119. package/dist/types/utils/utils.d.ts.map +0 -1
  120. package/dist/types/zax.interface.d.ts +0 -101
  121. package/dist/types/zax.interface.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-storage.driver.js","sourceRoot":"","sources":["../../../src/crypto-storage/local-storage.driver.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IAG7B,YAAY,IAAI,GAAG,UAAU;QAC3B,IAAI,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAc;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAoB;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAyC;QACzD,KAAI,MAAM,GAAG,IAAI,MAAM,EAAE;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;aAC5C;SACF;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAc;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,GAAG,CAAC,GAAW;QACrB,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=storage-driver.interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage-driver.interface.js","sourceRoot":"","sources":["../../../src/crypto-storage/storage-driver.interface.ts"],"names":[],"mappings":""}
package/dist/esm/index.js DELETED
@@ -1,14 +0,0 @@
1
- import { NaCl } from './nacl/nacl';
2
- import { Keys } from './keys/keys.js';
3
- import { KeyRing } from './keyring/keyring.js';
4
- import { CryptoStorage } from './crypto-storage/crypto-storage.js';
5
- import { LocalStorageDriver } from './crypto-storage/local-storage.driver.js';
6
- import { Mailbox } from './mailbox/mailbox';
7
- import { Relay } from './relay/relay';
8
- import { ZaxMessageKind } from './zax.interface';
9
- import { JsNaClDriver } from './nacl/js-nacl-driver';
10
- import { Utils } from './utils/utils';
11
- import { NetworkError } from './relay/network-error';
12
- import { InMemoryStorage } from './crypto-storage/in-memory-storage';
13
- export { NaCl, Keys, KeyRing, Mailbox, Relay, CryptoStorage, LocalStorageDriver, ZaxMessageKind, JsNaClDriver, Utils, NetworkError, InMemoryStorage };
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EACL,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,KAAK,EACL,aAAa,EAEb,kBAAkB,EAClB,cAAc,EAOd,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,eAAe,EAChB,CAAC"}
@@ -1,147 +0,0 @@
1
- import { CryptoStorage } from '../crypto-storage/crypto-storage';
2
- import { Keys } from '../keys/keys';
3
- import { NaCl } from '../nacl/nacl';
4
- import { Utils } from '../utils/utils';
5
- const commKeyTag = '__::commKey::__';
6
- // Manages the set of public keys of counterparties
7
- export class KeyRing {
8
- constructor(naclDriver, cryptoStorage, commKey) {
9
- this.guestKeys = new Map();
10
- this.nacl = naclDriver;
11
- this.storage = cryptoStorage;
12
- this.commKey = commKey;
13
- }
14
- static async new(id) {
15
- const nacl = NaCl.getInstance();
16
- const cryptoStorage = await CryptoStorage.new(id);
17
- const commKey = await KeyRing.getCommKeyOrCreate(nacl, cryptoStorage);
18
- const keyRing = new KeyRing(nacl, cryptoStorage, commKey);
19
- await keyRing.loadGuestKeys();
20
- return keyRing;
21
- }
22
- static async fromBackup(id, backupString) {
23
- const backup = JSON.parse(backupString);
24
- const secretKey = Utils.fromBase64(backup[commKeyTag]);
25
- const restoredKeyRing = await KeyRing.new(id);
26
- await restoredKeyRing.setCommFromSecKey(secretKey);
27
- for (const [key, value] of Object.entries(backup)) {
28
- if (key !== commKeyTag) {
29
- await restoredKeyRing.addGuest(key, value);
30
- }
31
- }
32
- return restoredKeyRing;
33
- }
34
- getNumberOfGuests() {
35
- return this.guestKeys.size;
36
- }
37
- get guests() {
38
- return this.guestKeys;
39
- }
40
- /**
41
- * Returns public identity, which is the default communication key.
42
- * Correspondents can know it, whereas Relays do not need it (other than
43
- * temporarily for internal use during the ownership proof)
44
- */
45
- getPubCommKey() {
46
- return this.commKey.publicKey;
47
- }
48
- getPrivateCommKey() {
49
- return this.commKey.privateKey;
50
- }
51
- /**
52
- * Returns HPK (hash of the public key) of the mailbox. This is what Zax relays
53
- * uses as the universal address of the mailbox
54
- */
55
- async getHpk() {
56
- const hpk = await this.nacl.h2(Utils.fromBase64(this.commKey.publicKey));
57
- return Utils.toBase64(hpk);
58
- }
59
- getTagByHpk(hpk) {
60
- for (const [key, value] of this.guestKeys) {
61
- if (value.hpk === hpk) {
62
- return key;
63
- }
64
- }
65
- return null;
66
- }
67
- getGuestKey(guestTag) {
68
- const keyRecord = this.guestKeys.get(guestTag);
69
- if (keyRecord) {
70
- return keyRecord.pk;
71
- }
72
- return null;
73
- }
74
- // Backups
75
- async backup() {
76
- const backup = {
77
- [commKeyTag]: this.commKey.privateKey
78
- };
79
- if (this.getNumberOfGuests() > 0) {
80
- for (const [key, value] of this.guestKeys) {
81
- if (key && value) {
82
- backup[key] = value.pk;
83
- }
84
- }
85
- }
86
- return JSON.stringify(backup);
87
- }
88
- async setCommFromSeed(seed) {
89
- this.commKey = new Keys(await this.nacl.crypto_box_keypair_from_seed(seed));
90
- await this.storage.save(KeyRing.commKeyTag, this.commKey.toString());
91
- }
92
- async setCommFromSecKey(rawSecretKey) {
93
- this.commKey = new Keys(await this.nacl.crypto_box_keypair_from_raw_sk(rawSecretKey));
94
- await this.storage.save(KeyRing.commKeyTag, this.commKey.toString());
95
- }
96
- async addGuest(guestTag, publicKey) {
97
- const b64_h2 = Utils.toBase64(await this.nacl.h2(Utils.fromBase64(publicKey)));
98
- this.guestKeys.set(guestTag, {
99
- pk: publicKey,
100
- hpk: b64_h2
101
- });
102
- await this.saveGuests();
103
- return b64_h2;
104
- }
105
- async removeGuest(guestTag) {
106
- if (this.guestKeys.has(guestTag)) {
107
- this.guestKeys.delete(guestTag);
108
- await this.saveGuests();
109
- }
110
- return true;
111
- }
112
- async loadGuestKeys() {
113
- const guestKeys = await this.storage.get(KeyRing.guestRegistryTag);
114
- if (!guestKeys) {
115
- return;
116
- }
117
- else if (typeof guestKeys === 'object') {
118
- this.guestKeys = new Map(Object.entries(guestKeys));
119
- }
120
- else {
121
- throw new Error('[Keyring] Guest keys is not an object');
122
- }
123
- }
124
- async saveGuests() {
125
- await this.storage.save(KeyRing.guestRegistryTag, Utils.toObject(this.guestKeys.entries()));
126
- }
127
- static async getCommKeyOrCreate(nacl, storage) {
128
- const commKeyRecord = await storage.get(KeyRing.commKeyTag);
129
- if (commKeyRecord && typeof commKeyRecord === 'string') {
130
- return new Keys(commKeyRecord);
131
- }
132
- else {
133
- const keypair = await nacl.crypto_box_keypair();
134
- const commKey = new Keys(keypair);
135
- await storage.save(KeyRing.commKeyTag, commKey.toString());
136
- return commKey;
137
- }
138
- }
139
- async selfDestruct() {
140
- await this.storage.remove(KeyRing.guestRegistryTag);
141
- await this.storage.remove(KeyRing.commKeyTag);
142
- await this.storage.selfDestruct();
143
- }
144
- }
145
- KeyRing.commKeyTag = 'comm_key';
146
- KeyRing.guestRegistryTag = 'guest_registry';
147
- //# sourceMappingURL=keyring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyring.js","sourceRoot":"","sources":["../../../src/keyring/keyring.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import { Utils } from '../utils/utils';
2
- /**
3
- * A simple wrapper around a public/private keys pair.
4
- * Stores keys in base64 format.
5
- */
6
- export class Keys {
7
- constructor(keys) {
8
- this.keys = keys;
9
- if (typeof keys === 'string') {
10
- const { boxPk, boxSk } = JSON.parse(keys);
11
- this.keyPair = {
12
- boxPk: Utils.fromBase64(boxPk),
13
- boxSk: Utils.fromBase64(boxSk)
14
- };
15
- }
16
- else {
17
- this.keyPair = keys;
18
- }
19
- }
20
- static isEqual(keys1, keys2) {
21
- return keys1.toString() === keys2.toString();
22
- }
23
- toString() {
24
- return JSON.stringify({
25
- boxPk: this.publicKey,
26
- boxSk: this.privateKey
27
- });
28
- }
29
- get publicKey() {
30
- return Utils.toBase64(this.keyPair.boxPk);
31
- }
32
- get privateKey() {
33
- return Utils.toBase64(this.keyPair.boxSk);
34
- }
35
- }
36
- //# sourceMappingURL=keys.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/keys/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;GAGG;AACH,MAAM,OAAO,IAAI;IAGf,YAAmB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG;gBACb,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC9B,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aAC/B,CAAC;SACH;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAW,EAAE,KAAW;QACrC,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS;QACX,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF"}
@@ -1,348 +0,0 @@
1
- import { NaCl } from '../nacl/nacl';
2
- import { EncryptionHelper } from '../nacl/encryption.helper';
3
- import { KeyRing } from '../keyring/keyring';
4
- import { Utils } from '../utils/utils';
5
- import { RelayCommand, ZaxMessageKind } from '../zax.interface';
6
- import { RelayFactory } from '../relay/relay-factory';
7
- import { Mutex } from 'async-mutex';
8
- /**
9
- * Mailbox class represents a wrapper around a Keyring that allows to exchange
10
- * encrypted messages with other Mailboxes via a relay
11
- */
12
- export class Mailbox {
13
- constructor(naclDriver, keyRing, identity) {
14
- /**
15
- * each mailbox use it's own relays for connection
16
- * this gives possibility to connect different mailboxes to same server simultaneously
17
- * because they will use different session keys, tokens, server pub keys
18
- */
19
- this.relayFactory = new RelayFactory;
20
- this.relayConnectionMutexes = new Map();
21
- this.nacl = naclDriver;
22
- this.keyRing = keyRing;
23
- this.identity = identity;
24
- }
25
- static async new(identity) {
26
- return new Mailbox(NaCl.getInstance(), await KeyRing.new(identity), identity);
27
- }
28
- // ---------- Alternative initializers ----------
29
- /**
30
- * Create a Mailbox where the secret identity key is derived from a well-known seed
31
- */
32
- static async fromSeed(id, seed) {
33
- const mbx = await this.new(id);
34
- if (!(seed instanceof Uint8Array)) {
35
- seed = Utils.encode_latin1(seed);
36
- }
37
- await mbx.keyRing.setCommFromSeed(seed);
38
- return mbx;
39
- }
40
- /**
41
- * Create a Mailbox from the known secret identity key
42
- */
43
- static async fromSecKey(id, rawSecretKey) {
44
- const mbx = await this.new(id);
45
- if (!(rawSecretKey instanceof Uint8Array)) {
46
- rawSecretKey = Utils.fromBase64(rawSecretKey);
47
- }
48
- await mbx.keyRing.setCommFromSecKey(rawSecretKey);
49
- return mbx;
50
- }
51
- /**
52
- * Create a Mailbox from the backup string
53
- */
54
- static async fromBackup(identity, backup) {
55
- return new Mailbox(NaCl.getInstance(), await KeyRing.fromBackup(identity, backup), identity);
56
- }
57
- // ---------- Relay message commands (public API) ----------
58
- /**
59
- * Sends a free-form object to a guest we already have in our keyring. Set `encrypt` to `false` to
60
- * send a plaintext message. Returns a token that can be used with `messageStatus` command to check
61
- * the status of the message
62
- */
63
- async upload(url, guestKey, message, encrypt = true) {
64
- const relay = await this.prepareRelay(url);
65
- const guestPk = this.getGuestKey(guestKey);
66
- const payload = encrypt ? await this.encodeMessage(guestKey, message) : message;
67
- const toHpk = Utils.toBase64(await this.nacl.h2(Utils.fromBase64(guestPk)));
68
- const [token] = await this.runRelayCommand(relay, RelayCommand.upload, { to: toHpk, payload });
69
- return token;
70
- }
71
- /**
72
- * Downloads all messages from a relay, decrypts them with a relay key,
73
- * and then parses each message to find out if it's a text message, file message,
74
- * or if it can't be decrypted because HPK is missing in the keyring.
75
- * Returns an array of mixed messages
76
- */
77
- async download(url) {
78
- const relay = await this.prepareRelay(url);
79
- const response = await this.runRelayCommand(relay, RelayCommand.download);
80
- const messages = await this.decryptResponse(relay, response);
81
- const parsedMessages = [];
82
- for (const message of messages) {
83
- const senderTag = this.keyRing.getTagByHpk(message.from);
84
- if (!senderTag) {
85
- parsedMessages.push(await this.parsePlainMessage(message));
86
- }
87
- else if (message.kind === 'message') {
88
- parsedMessages.push(await this.parseTextMessage(message, senderTag));
89
- }
90
- else if (message.kind === 'file') {
91
- parsedMessages.push(await this.parseFileMessage(message, senderTag));
92
- }
93
- else {
94
- throw new Error('[Mailbox] download - Unknown message type');
95
- }
96
- }
97
- return parsedMessages;
98
- }
99
- /**
100
- * Marks a raw Zax message as one that can't be decrypted,
101
- * because sender's HPK is not found in the keyring
102
- */
103
- async parsePlainMessage({ data, time, from, nonce }) {
104
- return { data, time, from, nonce, kind: ZaxMessageKind.plain };
105
- }
106
- /**
107
- * Decrypts a message that represents uploaded file metadata
108
- */
109
- async parseFileMessage(message, senderTag) {
110
- const { nonce, ctext, uploadID } = JSON.parse(message.data);
111
- const rawData = await this.decodeMessage(senderTag, nonce, ctext);
112
- if (rawData === null) {
113
- throw new Error('[Mailbox] Failed to decode file message');
114
- }
115
- const data = JSON.parse(rawData);
116
- return { data, time: message.time, senderTag, uploadID, nonce, kind: ZaxMessageKind.file };
117
- }
118
- /**
119
- * Attempts to decrypt a regular encrypted Zax message. Returns plain message if it was sent encrypted
120
- */
121
- async parseTextMessage(message, senderTag) {
122
- let data = await this.decodeMessage(senderTag, message.nonce, message.data);
123
- // If the message was sent unencrypted, the line above will return `null`
124
- if (!data) {
125
- data = message.data;
126
- }
127
- return ({ data, time: message.time, senderTag, nonce: message.nonce, kind: ZaxMessageKind.message });
128
- }
129
- /**
130
- * Returns the number of messages in the mailbox on a given relay
131
- */
132
- async count(url) {
133
- const relay = await this.prepareRelay(url);
134
- const response = await this.runRelayCommand(relay, RelayCommand.count);
135
- return await this.decryptResponse(relay, response);
136
- }
137
- /**
138
- * Deletes messages from a relay given a list of base64 message nonces,
139
- * and returns the number of remaining messages
140
- */
141
- async delete(url, nonceList) {
142
- const relay = await this.prepareRelay(url);
143
- const [response] = await this.runRelayCommand(relay, RelayCommand.delete, { payload: nonceList });
144
- return parseInt(response, 10);
145
- }
146
- /**
147
- * Gets the status of a previously sent Zax message by a storage token.
148
- * Returns "time to live" in seconds or a negative value if it's not applicable.
149
- * See `MessageStatusResponse` values for reference
150
- */
151
- async messageStatus(url, storageToken) {
152
- const relay = await this.prepareRelay(url);
153
- const [response] = await this.runRelayCommand(relay, RelayCommand.messageStatus, { token: storageToken });
154
- const status = parseInt(response, 10);
155
- return status;
156
- }
157
- // ---------- Relay file commands (public API) ----------
158
- /**
159
- * Asks Zax to start a new upload session, and returns a unique file identifier
160
- * required to upload file chunks.
161
- */
162
- async startFileUpload(url, guest, rawMetadata) {
163
- const relay = await this.prepareRelay(url);
164
- const guestPk = this.getGuestKey(guest);
165
- const toHpk = Utils.toBase64(await this.nacl.h2(Utils.fromBase64(guestPk)));
166
- const secretKey = await this.nacl.random_bytes(this.nacl.crypto_secretbox_KEYBYTES);
167
- rawMetadata.skey = Utils.toBase64(secretKey);
168
- const metadata = await this.encodeMessage(guest, JSON.stringify(rawMetadata));
169
- const response = await this.runRelayCommand(relay, RelayCommand.startFileUpload, {
170
- to: toHpk,
171
- file_size: rawMetadata.orig_size,
172
- metadata
173
- });
174
- const decrypted = await this.decryptResponse(relay, response);
175
- // append symmetric secret key (unique for this upload session) to the server response
176
- decrypted.skey = secretKey;
177
- return decrypted;
178
- }
179
- /**
180
- * Encrypts the file chunk symmetrically and transfers it to a relay
181
- */
182
- async uploadFileChunk(url, uploadID, chunk, part, totalParts, skey) {
183
- const relay = await this.prepareRelay(url);
184
- const encodedChunk = await EncryptionHelper.encodeMessageSymmetric(chunk, skey);
185
- const response = await this.runRelayCommand(relay, RelayCommand.uploadFileChunk, {
186
- uploadID,
187
- part,
188
- last_chunk: (totalParts - 1 === part),
189
- nonce: encodedChunk.nonce
190
- }, encodedChunk.ctext); // do not encode file chunk contents, as it's already encoded with symmetric encryption
191
- return await this.decryptResponse(relay, response);
192
- }
193
- /**
194
- * Returns the status of a file upload by its relay-specific uploadID. Uploader can call it
195
- * to verify the correct transfer, and downloader can check if the file exists and retrieve
196
- * the number of chunks
197
- */
198
- async getFileStatus(url, uploadID) {
199
- const relay = await this.prepareRelay(url);
200
- const response = await this.runRelayCommand(relay, RelayCommand.fileStatus, { uploadID });
201
- return await this.decryptResponse(relay, response);
202
- }
203
- /**
204
- * Fetches the file metadata by uploadID, which was declared by the uploader
205
- */
206
- async getFileMetadata(url, uploadID) {
207
- const messages = await this.download(url);
208
- const fileMessage = messages
209
- .filter(message => message.kind === 'file')
210
- .find(message => message.uploadID === uploadID);
211
- return fileMessage === null || fileMessage === void 0 ? void 0 : fileMessage.data;
212
- }
213
- /**
214
- * Downloads a binary chunk of a file from a relay by a given uploadID. The total number of chunks
215
- * can be retrieved via a `getFileStatus` request
216
- */
217
- async downloadFileChunk(url, uploadID, part, skey) {
218
- if (!(skey instanceof Uint8Array)) {
219
- skey = Utils.fromBase64(skey);
220
- }
221
- const relay = await this.prepareRelay(url);
222
- const response = await this.runRelayCommand(relay, RelayCommand.downloadFileChunk, { uploadID, part });
223
- const [nonce, ctext, fileCtext] = response;
224
- const decoded = await relay.decodeMessage(nonce, ctext);
225
- return await EncryptionHelper.decodeMessageSymmetric(decoded.nonce, fileCtext, skey);
226
- }
227
- /**
228
- * Deletes a file from the relay (or all chunks uploaded so far, if the upload was not completed).
229
- * Can be called by either the sender or recipient
230
- */
231
- async deleteFile(url, uploadID) {
232
- const relay = await this.prepareRelay(url);
233
- const response = await this.runRelayCommand(relay, RelayCommand.deleteFile, { uploadID });
234
- return await this.decryptResponse(relay, response);
235
- }
236
- // ---------- Dealing with Relay ----------
237
- /**
238
- * Establishes a session, exchanges temp keys and proves our ownership of this
239
- * Mailbox to this specific relay. This is the first function to start
240
- * communications with any relay. Returns the number of messages in the mailbox
241
- */
242
- async connectToRelay(url) {
243
- const relay = this.relayFactory.getInstance(url);
244
- const connectionData = await relay.openConnection();
245
- const encryptedSignature = await this.encryptSignature(connectionData);
246
- const messagesNumber = await relay.prove(await relay.encodeMessage(JSON.stringify({
247
- pub_key: this.keyRing.getPubCommKey(),
248
- nonce: encryptedSignature.nonce,
249
- ctext: encryptedSignature.ctext
250
- })));
251
- return parseInt(messagesNumber, 10);
252
- }
253
- clearSession(url) {
254
- const relay = this.relayFactory.getInstance(url);
255
- relay.clearToken();
256
- relay.clearSession();
257
- }
258
- async encryptSignature(connection) {
259
- const privateKey = Utils.fromBase64(this.keyRing.getPrivateCommKey());
260
- return await EncryptionHelper.encodeMessage(connection.h2Signature, connection.relayPublicKey, privateKey);
261
- }
262
- /**
263
- * Gets a singleton Relay instance, and reconnects to a relay if a previous token has expired
264
- */
265
- async prepareRelay(url) {
266
- const relay = this.relayFactory.getInstance(url);
267
- /**
268
- * allow establishing only once connection for pair mailbox-relay
269
- */
270
- await this.getRelayConnectionMutex(url).runExclusive(async () => {
271
- if (!relay.isConnected) {
272
- await this.connectToRelay(url);
273
- }
274
- });
275
- return relay;
276
- }
277
- /**
278
- * Encrypts the payload of the command and sends it to a relay
279
- */
280
- async runRelayCommand(relay, command, params, ctext) {
281
- params = Object.assign({ cmd: command }, params);
282
- const hpk = await this.keyRing.getHpk();
283
- const message = await relay.encodeMessage(JSON.stringify(params));
284
- return await relay.runCmd(command, hpk, message, ctext);
285
- }
286
- /**
287
- * Parses relay's response to a command, for those commands that expect an encrypted message in return.
288
- * Two lines of POST response will be nonce and ctext
289
- */
290
- async decryptResponse(relay, response) {
291
- const [nonce, ctext] = response;
292
- return await relay.decodeMessage(nonce, ctext);
293
- }
294
- // ---------- Message encoding / decoding ----------
295
- /**
296
- * Encodes `message` to the guest key of a guest already
297
- * added to the keyring
298
- */
299
- async encodeMessage(guest, message) {
300
- const guestPk = this.getGuestKey(guest);
301
- const privateKey = this.keyRing.getPrivateCommKey();
302
- return await EncryptionHelper.encodeMessage(await this.nacl.encode_utf8(message), Utils.fromBase64(guestPk), Utils.fromBase64(privateKey));
303
- }
304
- /**
305
- * Decodes a ciphertext from a guest key already in our keyring with this nonce
306
- * @returns null if failed to decode
307
- */
308
- async decodeMessage(guest, nonce, ctext) {
309
- const guestPk = this.getGuestKey(guest);
310
- const privateKey = this.keyRing.getPrivateCommKey();
311
- let uint8ArrayCtext;
312
- try {
313
- uint8ArrayCtext = Utils.fromBase64(ctext);
314
- }
315
- catch (err) {
316
- // looks like ctext was not encoded
317
- return null;
318
- }
319
- return await EncryptionHelper.decodeMessage(Utils.fromBase64(nonce), uint8ArrayCtext, Utils.fromBase64(guestPk), Utils.fromBase64(privateKey));
320
- }
321
- /**
322
- * Wrapper around `keyring.getGuestKey` that handles unknown guests
323
- */
324
- getGuestKey(guest) {
325
- const guestPk = this.keyRing.getGuestKey(guest);
326
- if (!guestPk) {
327
- throw new Error(`[Mailbox] Unknown guest ${guest}`);
328
- }
329
- return guestPk;
330
- }
331
- // ---------- Destroying Mailbox ----------
332
- /**
333
- * Deletes a Mailbox and all its data from local CryptoStorage. This is a very
334
- * destructive operation, use with caution - it will delete the Mailbox
335
- * keyring along with all stored public keys. To restore that information, you
336
- * will need to do another key exchange with all the guests on your keyring.
337
- */
338
- async selfDestruct() {
339
- await this.keyRing.selfDestruct();
340
- }
341
- getRelayConnectionMutex(url) {
342
- if (!this.relayConnectionMutexes.has(url)) {
343
- this.relayConnectionMutexes.set(url, new Mutex());
344
- }
345
- return this.relayConnectionMutexes.get(url);
346
- }
347
- }
348
- //# sourceMappingURL=mailbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../../src/mailbox/mailbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAU,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EACL,YAAY,EAOZ,cAAc,EAMf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC;;;GAGG;AACH,MAAM,OAAO,OAAO;IAelB,YAAoB,UAAsB,EAAE,OAAgB,EAAE,QAAgB;QAZ9E;;;;WAIG;QAEK,iBAAY,GAAG,IAAI,YAAY,CAAC;QAEhC,2BAAsB,GAAG,IAAI,GAAG,EAAiB,CAAC;QAKxD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAgB;QAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChF,CAAC;IAED,iDAAiD;IAEjD;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,IAAyB;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,EAAE;YACjC,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAClC;QACD,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,YAAiC;QACnE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,YAAY,YAAY,UAAU,CAAC,EAAE;YACzC,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC/C;QACD,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,MAAc;QACtD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/F,CAAC;IAED,4DAA4D;IAE5D;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,QAAgB,EAAE,OAAe,EAAE,OAAO,GAAG,IAAI;QACzE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAChF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/F,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAoB,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE9E,MAAM,cAAc,GAAuB,EAAE,CAAC;QAC9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,SAAS,EAAE;gBACd,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;aAC5D;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;gBACrC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;aACtE;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;gBAClC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;aACtE;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;aAC9D;SACF;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAiB;QACxE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAqB,CAAC;IACpF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,OAAsB,EAAE,SAAiB;QACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;SAC5D;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAoB,CAAC;IAC/G,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,OAAsB,EAAE,SAAiB;QACtE,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5E,yEAAyE;QACzE,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;SACrB;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;IACvG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,GAAW;QACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;;MAGE;IACF,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,SAAmB;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAClG,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;;;MAIE;IACF,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,YAAoB;QACnD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1G,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yDAAyD;IAEzD;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,GAAW,EAAE,KAAa,EAC9C,WAA+B;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACpF,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAE9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,eAAe,EAAE;YAC/E,EAAE,EAAE,KAAK;YACT,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9D,sFAAsF;QACtF,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAiB,EACpE,IAAY,EAAE,UAAkB,EAAE,IAAgB;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,eAAe,EAAE;YAC/E,QAAQ;YACR,IAAI;YACJ,UAAU,EAAE,CAAC,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC;YACrC,KAAK,EAAE,YAAY,CAAC,KAAK;SAC1B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uFAAuF;QAC/G,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,QAAgB;QAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1F,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,GAAW,EAAE,QAAgB;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE1C,MAAM,WAAW,GAAG,QAAQ;aACzB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;aAC1C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAE,OAA0B,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACtE,OAAO,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAA0B,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY,EAAE,IAAyB;QAE5F,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,EAAE;YACjC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC/B;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACvG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,MAAM,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACvF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,QAAgB;QAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1F,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,2CAA2C;IAE3C;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,GAAW;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAEvE,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;YAChF,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YACrC,KAAK,EAAE,kBAAkB,CAAC,KAAK;YAC/B,KAAK,EAAE,kBAAkB,CAAC,KAAK;SAChC,CAAC,CAAC,CAAC,CAAC;QACL,OAAO,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,YAAY,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,KAAK,CAAC,YAAY,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,UAA+B;QAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtE,OAAO,MAAM,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC7G,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,GAAW;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD;;WAEG;QACH,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC9D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBACtB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;aAChC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,KAAY,EAAE,OAAqB,EAAE,MAA4B,EAAE,KAAc;QACjF,MAAM,mBAAK,GAAG,EAAE,OAAO,IAAK,MAAM,CAAE,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAAC,KAAY,EAAE,QAAkB;QAC5D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC;QAChC,OAAO,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,oDAAoD;IAEpD;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,OAAe;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAEpD,OAAO,MAAM,gBAAgB,CAAC,aAAa,CACzC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACnG,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACpD,IAAI,eAA2B,CAAC;QAChC,IAAI;YACF,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC3C;QAAC,OAAO,GAAG,EAAE;YACZ,mCAAmC;YACnC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,MAAM,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,eAAe,EAClF,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAa;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;SACrD;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2CAA2C;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAEO,uBAAuB,CAAC,GAAW;QACzC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACzC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAU,CAAC;IACvD,CAAC;CACF"}