@ledgerhq/hw-ledger-key-ring-protocol 0.2.1-fix-build-number-pre.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 (224) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/CHANGELOG.md +126 -0
  4. package/LICENSE.txt +21 -0
  5. package/README.md +3 -0
  6. package/jest.config.js +13 -0
  7. package/lib/ApduDevice.d.ts +99 -0
  8. package/lib/ApduDevice.d.ts.map +1 -0
  9. package/lib/ApduDevice.js +528 -0
  10. package/lib/ApduDevice.js.map +1 -0
  11. package/lib/BigEndian.d.ts +7 -0
  12. package/lib/BigEndian.d.ts.map +1 -0
  13. package/lib/BigEndian.js +26 -0
  14. package/lib/BigEndian.js.map +1 -0
  15. package/lib/CommandBlock.d.ts +114 -0
  16. package/lib/CommandBlock.d.ts.map +1 -0
  17. package/lib/CommandBlock.js +156 -0
  18. package/lib/CommandBlock.js.map +1 -0
  19. package/lib/CommandStream.d.ts +38 -0
  20. package/lib/CommandStream.d.ts.map +1 -0
  21. package/lib/CommandStream.js +195 -0
  22. package/lib/CommandStream.js.map +1 -0
  23. package/lib/CommandStreamDecoder.d.ts +15 -0
  24. package/lib/CommandStreamDecoder.d.ts.map +1 -0
  25. package/lib/CommandStreamDecoder.js +101 -0
  26. package/lib/CommandStreamDecoder.js.map +1 -0
  27. package/lib/CommandStreamEncoder.d.ts +16 -0
  28. package/lib/CommandStreamEncoder.d.ts.map +1 -0
  29. package/lib/CommandStreamEncoder.js +131 -0
  30. package/lib/CommandStreamEncoder.js.map +1 -0
  31. package/lib/CommandStreamJsonifier.d.ts +6 -0
  32. package/lib/CommandStreamJsonifier.d.ts.map +1 -0
  33. package/lib/CommandStreamJsonifier.js +75 -0
  34. package/lib/CommandStreamJsonifier.js.map +1 -0
  35. package/lib/CommandStreamResolver.d.ts +53 -0
  36. package/lib/CommandStreamResolver.d.ts.map +1 -0
  37. package/lib/CommandStreamResolver.js +221 -0
  38. package/lib/CommandStreamResolver.js.map +1 -0
  39. package/lib/Crypto.d.ts +38 -0
  40. package/lib/Crypto.d.ts.map +1 -0
  41. package/lib/Crypto.js +47 -0
  42. package/lib/Crypto.js.map +1 -0
  43. package/lib/Device.d.ts +43 -0
  44. package/lib/Device.d.ts.map +1 -0
  45. package/lib/Device.js +195 -0
  46. package/lib/Device.js.map +1 -0
  47. package/lib/IndexedTree.d.ts +13 -0
  48. package/lib/IndexedTree.d.ts.map +1 -0
  49. package/lib/IndexedTree.js +75 -0
  50. package/lib/IndexedTree.js.map +1 -0
  51. package/lib/NobleCrypto.d.ts +39 -0
  52. package/lib/NobleCrypto.d.ts.map +1 -0
  53. package/lib/NobleCrypto.js +240 -0
  54. package/lib/NobleCrypto.js.map +1 -0
  55. package/lib/PublicKey.d.ts +5 -0
  56. package/lib/PublicKey.d.ts.map +1 -0
  57. package/lib/PublicKey.js +10 -0
  58. package/lib/PublicKey.js.map +1 -0
  59. package/lib/SeedId.d.ts +80 -0
  60. package/lib/SeedId.d.ts.map +1 -0
  61. package/lib/SeedId.js +244 -0
  62. package/lib/SeedId.js.map +1 -0
  63. package/lib/StreamTree.d.ts +50 -0
  64. package/lib/StreamTree.d.ts.map +1 -0
  65. package/lib/StreamTree.js +169 -0
  66. package/lib/StreamTree.js.map +1 -0
  67. package/lib/StreamTreeCipher.d.ts +46 -0
  68. package/lib/StreamTreeCipher.d.ts.map +1 -0
  69. package/lib/StreamTreeCipher.js +175 -0
  70. package/lib/StreamTreeCipher.js.map +1 -0
  71. package/lib/__tests__/codec.d.ts +2 -0
  72. package/lib/__tests__/codec.d.ts.map +1 -0
  73. package/lib/__tests__/codec.js +108 -0
  74. package/lib/__tests__/codec.js.map +1 -0
  75. package/lib/__tests__/crypto.d.ts +2 -0
  76. package/lib/__tests__/crypto.d.ts.map +1 -0
  77. package/lib/__tests__/crypto.js +46 -0
  78. package/lib/__tests__/crypto.js.map +1 -0
  79. package/lib/__tests__/indexed_tree.d.ts +2 -0
  80. package/lib/__tests__/indexed_tree.d.ts.map +1 -0
  81. package/lib/__tests__/indexed_tree.js +45 -0
  82. package/lib/__tests__/indexed_tree.js.map +1 -0
  83. package/lib/__tests__/key_exchange.d.ts +2 -0
  84. package/lib/__tests__/key_exchange.d.ts.map +1 -0
  85. package/lib/__tests__/key_exchange.js +129 -0
  86. package/lib/__tests__/key_exchange.js.map +1 -0
  87. package/lib/__tests__/seedId.d.ts +2 -0
  88. package/lib/__tests__/seedId.d.ts.map +1 -0
  89. package/lib/__tests__/seedId.js +92 -0
  90. package/lib/__tests__/seedId.js.map +1 -0
  91. package/lib/__tests__/shared_object.d.ts +2 -0
  92. package/lib/__tests__/shared_object.d.ts.map +1 -0
  93. package/lib/__tests__/shared_object.js +78 -0
  94. package/lib/__tests__/shared_object.js.map +1 -0
  95. package/lib/index.d.ts +35 -0
  96. package/lib/index.d.ts.map +1 -0
  97. package/lib/index.js +81 -0
  98. package/lib/index.js.map +1 -0
  99. package/lib/tlv.d.ts +99 -0
  100. package/lib/tlv.d.ts.map +1 -0
  101. package/lib/tlv.js +150 -0
  102. package/lib/tlv.js.map +1 -0
  103. package/lib-es/ApduDevice.d.ts +99 -0
  104. package/lib-es/ApduDevice.d.ts.map +1 -0
  105. package/lib-es/ApduDevice.js +522 -0
  106. package/lib-es/ApduDevice.js.map +1 -0
  107. package/lib-es/BigEndian.d.ts +7 -0
  108. package/lib-es/BigEndian.d.ts.map +1 -0
  109. package/lib-es/BigEndian.js +23 -0
  110. package/lib-es/BigEndian.js.map +1 -0
  111. package/lib-es/CommandBlock.d.ts +114 -0
  112. package/lib-es/CommandBlock.d.ts.map +1 -0
  113. package/lib-es/CommandBlock.js +143 -0
  114. package/lib-es/CommandBlock.js.map +1 -0
  115. package/lib-es/CommandStream.d.ts +38 -0
  116. package/lib-es/CommandStream.d.ts.map +1 -0
  117. package/lib-es/CommandStream.js +187 -0
  118. package/lib-es/CommandStream.js.map +1 -0
  119. package/lib-es/CommandStreamDecoder.d.ts +15 -0
  120. package/lib-es/CommandStreamDecoder.d.ts.map +1 -0
  121. package/lib-es/CommandStreamDecoder.js +97 -0
  122. package/lib-es/CommandStreamDecoder.js.map +1 -0
  123. package/lib-es/CommandStreamEncoder.d.ts +16 -0
  124. package/lib-es/CommandStreamEncoder.d.ts.map +1 -0
  125. package/lib-es/CommandStreamEncoder.js +127 -0
  126. package/lib-es/CommandStreamEncoder.js.map +1 -0
  127. package/lib-es/CommandStreamJsonifier.d.ts +6 -0
  128. package/lib-es/CommandStreamJsonifier.d.ts.map +1 -0
  129. package/lib-es/CommandStreamJsonifier.js +72 -0
  130. package/lib-es/CommandStreamJsonifier.js.map +1 -0
  131. package/lib-es/CommandStreamResolver.d.ts +53 -0
  132. package/lib-es/CommandStreamResolver.d.ts.map +1 -0
  133. package/lib-es/CommandStreamResolver.js +216 -0
  134. package/lib-es/CommandStreamResolver.js.map +1 -0
  135. package/lib-es/Crypto.d.ts +38 -0
  136. package/lib-es/Crypto.d.ts.map +1 -0
  137. package/lib-es/Crypto.js +43 -0
  138. package/lib-es/Crypto.js.map +1 -0
  139. package/lib-es/Device.d.ts +43 -0
  140. package/lib-es/Device.d.ts.map +1 -0
  141. package/lib-es/Device.js +187 -0
  142. package/lib-es/Device.js.map +1 -0
  143. package/lib-es/IndexedTree.d.ts +13 -0
  144. package/lib-es/IndexedTree.d.ts.map +1 -0
  145. package/lib-es/IndexedTree.js +71 -0
  146. package/lib-es/IndexedTree.js.map +1 -0
  147. package/lib-es/NobleCrypto.d.ts +39 -0
  148. package/lib-es/NobleCrypto.d.ts.map +1 -0
  149. package/lib-es/NobleCrypto.js +209 -0
  150. package/lib-es/NobleCrypto.js.map +1 -0
  151. package/lib-es/PublicKey.d.ts +5 -0
  152. package/lib-es/PublicKey.d.ts.map +1 -0
  153. package/lib-es/PublicKey.js +6 -0
  154. package/lib-es/PublicKey.js.map +1 -0
  155. package/lib-es/SeedId.d.ts +80 -0
  156. package/lib-es/SeedId.d.ts.map +1 -0
  157. package/lib-es/SeedId.js +235 -0
  158. package/lib-es/SeedId.js.map +1 -0
  159. package/lib-es/StreamTree.d.ts +50 -0
  160. package/lib-es/StreamTree.d.ts.map +1 -0
  161. package/lib-es/StreamTree.js +165 -0
  162. package/lib-es/StreamTree.js.map +1 -0
  163. package/lib-es/StreamTreeCipher.d.ts +46 -0
  164. package/lib-es/StreamTreeCipher.d.ts.map +1 -0
  165. package/lib-es/StreamTreeCipher.js +171 -0
  166. package/lib-es/StreamTreeCipher.js.map +1 -0
  167. package/lib-es/__tests__/codec.d.ts +2 -0
  168. package/lib-es/__tests__/codec.d.ts.map +1 -0
  169. package/lib-es/__tests__/codec.js +106 -0
  170. package/lib-es/__tests__/codec.js.map +1 -0
  171. package/lib-es/__tests__/crypto.d.ts +2 -0
  172. package/lib-es/__tests__/crypto.d.ts.map +1 -0
  173. package/lib-es/__tests__/crypto.js +44 -0
  174. package/lib-es/__tests__/crypto.js.map +1 -0
  175. package/lib-es/__tests__/indexed_tree.d.ts +2 -0
  176. package/lib-es/__tests__/indexed_tree.d.ts.map +1 -0
  177. package/lib-es/__tests__/indexed_tree.js +43 -0
  178. package/lib-es/__tests__/indexed_tree.js.map +1 -0
  179. package/lib-es/__tests__/key_exchange.d.ts +2 -0
  180. package/lib-es/__tests__/key_exchange.d.ts.map +1 -0
  181. package/lib-es/__tests__/key_exchange.js +124 -0
  182. package/lib-es/__tests__/key_exchange.js.map +1 -0
  183. package/lib-es/__tests__/seedId.d.ts +2 -0
  184. package/lib-es/__tests__/seedId.d.ts.map +1 -0
  185. package/lib-es/__tests__/seedId.js +90 -0
  186. package/lib-es/__tests__/seedId.js.map +1 -0
  187. package/lib-es/__tests__/shared_object.d.ts +2 -0
  188. package/lib-es/__tests__/shared_object.d.ts.map +1 -0
  189. package/lib-es/__tests__/shared_object.js +76 -0
  190. package/lib-es/__tests__/shared_object.js.map +1 -0
  191. package/lib-es/index.d.ts +35 -0
  192. package/lib-es/index.d.ts.map +1 -0
  193. package/lib-es/index.js +32 -0
  194. package/lib-es/index.js.map +1 -0
  195. package/lib-es/tlv.d.ts +99 -0
  196. package/lib-es/tlv.d.ts.map +1 -0
  197. package/lib-es/tlv.js +144 -0
  198. package/lib-es/tlv.js.map +1 -0
  199. package/package.json +63 -0
  200. package/src/ApduDevice.ts +688 -0
  201. package/src/BigEndian.ts +25 -0
  202. package/src/CommandBlock.ts +244 -0
  203. package/src/CommandStream.ts +260 -0
  204. package/src/CommandStreamDecoder.ts +142 -0
  205. package/src/CommandStreamEncoder.ts +144 -0
  206. package/src/CommandStreamJsonifier.ts +82 -0
  207. package/src/CommandStreamResolver.ts +284 -0
  208. package/src/Crypto.ts +78 -0
  209. package/src/Device.ts +246 -0
  210. package/src/IndexedTree.ts +80 -0
  211. package/src/NobleCrypto.ts +255 -0
  212. package/src/PublicKey.ts +6 -0
  213. package/src/SeedId.ts +338 -0
  214. package/src/StreamTree.ts +212 -0
  215. package/src/StreamTreeCipher.ts +207 -0
  216. package/src/__tests__/codec.ts +146 -0
  217. package/src/__tests__/crypto.ts +44 -0
  218. package/src/__tests__/indexed_tree.ts +51 -0
  219. package/src/__tests__/key_exchange.ts +167 -0
  220. package/src/__tests__/seedId.ts +120 -0
  221. package/src/__tests__/shared_object.ts +118 -0
  222. package/src/index.ts +43 -0
  223. package/src/tlv.ts +210 -0
  224. package/tsconfig.json +14 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ *
3
+ */
4
+ export interface Command {
5
+ getType(): CommandType;
6
+ }
7
+ /**
8
+ *
9
+ */
10
+ export declare enum CommandType {
11
+ Seed = 16,
12
+ AddMember = 17,
13
+ PublishKey = 18,
14
+ EditMember = 20,
15
+ Derive = 21,
16
+ CloseStream = 19
17
+ }
18
+ /**
19
+ *
20
+ */
21
+ export declare const Permissions: {
22
+ KEY_READER: number;
23
+ KEY_CREATOR: number;
24
+ KEY_REVOKER: number;
25
+ ADD_MEMBER: number;
26
+ REMOVE_MEMBER: number;
27
+ CHANGE_MEMBER_PERMISSIONS: number;
28
+ CHANGE_MEMBER_NAME: number;
29
+ MEMBER: number;
30
+ OWNER: number;
31
+ };
32
+ /**
33
+ *
34
+ */
35
+ export declare class Seed implements Command {
36
+ topic: Uint8Array | null;
37
+ protocolVersion: number;
38
+ groupKey: Uint8Array;
39
+ initializationVector: Uint8Array;
40
+ encryptedXpriv: Uint8Array;
41
+ ephemeralPublicKey: Uint8Array;
42
+ constructor(topic: Uint8Array | null, protocolVersion: number, groupKey: Uint8Array, initializationVector: Uint8Array, encryptedXpriv: Uint8Array, ephemerPublicKey: Uint8Array);
43
+ getType(): CommandType;
44
+ }
45
+ /**
46
+ *
47
+ */
48
+ export declare class Derive implements Command {
49
+ path: number[];
50
+ groupKey: Uint8Array;
51
+ initializationVector: Uint8Array;
52
+ encryptedXpriv: Uint8Array;
53
+ ephemeralPublicKey: Uint8Array;
54
+ constructor(path: number[], groupKey: Uint8Array, initializationVector: Uint8Array, encryptedXpriv: Uint8Array, ephemeralPublicKey: Uint8Array);
55
+ getType(): CommandType;
56
+ }
57
+ /**
58
+ *
59
+ */
60
+ export declare class AddMember implements Command {
61
+ name: string;
62
+ publicKey: Uint8Array;
63
+ permissions: number;
64
+ constructor(name: string, publicKey: Uint8Array, permissions: number);
65
+ getType(): CommandType;
66
+ }
67
+ /**
68
+ *
69
+ */
70
+ export declare class PublishKey implements Command {
71
+ initializationVector: Uint8Array;
72
+ encryptedXpriv: Uint8Array;
73
+ recipient: Uint8Array;
74
+ ephemeralPublicKey: Uint8Array;
75
+ constructor(initializationVector: Uint8Array, encryptedXpriv: Uint8Array, recipient: Uint8Array, ephemeralPublicKey: Uint8Array);
76
+ getType(): CommandType;
77
+ }
78
+ /**
79
+ *
80
+ */
81
+ export declare class EditMember implements Command {
82
+ member: Uint8Array;
83
+ name: string | null;
84
+ permissions: number | null;
85
+ constructor(member: Uint8Array, name: string | null, permissions: number | null);
86
+ getType(): CommandType;
87
+ }
88
+ /**
89
+ *
90
+ */
91
+ export declare class CloseStream implements Command {
92
+ constructor();
93
+ getType(): CommandType;
94
+ }
95
+ export interface CommandBlock {
96
+ version: number;
97
+ parent: Uint8Array;
98
+ issuer: Uint8Array;
99
+ commands: Command[];
100
+ signature: Uint8Array;
101
+ }
102
+ /**
103
+ * Create a new command block.
104
+ * @param issuer The public key of the command block issuer
105
+ * @param commands The list of commands in this command block
106
+ * @param signature The signature of the command block (by default the block is not signed)
107
+ * @param parent The parent command block hash (if null, the block is the first block and a parent will be generated)
108
+ * @returns
109
+ */
110
+ export declare function createCommandBlock(issuer: Uint8Array, commands: Command[], signature?: Uint8Array, parent?: Uint8Array | null): CommandBlock;
111
+ export declare function signCommandBlock(block: CommandBlock, issuer: Uint8Array, secretKey: Uint8Array): CommandBlock;
112
+ export declare function hashCommandBlock(block: CommandBlock): Uint8Array;
113
+ export declare function verifyCommandBlock(block: CommandBlock): boolean;
114
+ //# sourceMappingURL=CommandBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandBlock.d.ts","sourceRoot":"","sources":["../src/CommandBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyCommandBlock = exports.hashCommandBlock = exports.signCommandBlock = exports.createCommandBlock = exports.CloseStream = exports.EditMember = exports.PublishKey = exports.AddMember = exports.Derive = exports.Seed = exports.Permissions = exports.CommandType = void 0;
4
+ const CommandStreamEncoder_1 = require("./CommandStreamEncoder");
5
+ const Crypto_1 = require("./Crypto");
6
+ /**
7
+ *
8
+ */
9
+ var CommandType;
10
+ (function (CommandType) {
11
+ CommandType[CommandType["Seed"] = 16] = "Seed";
12
+ CommandType[CommandType["AddMember"] = 17] = "AddMember";
13
+ CommandType[CommandType["PublishKey"] = 18] = "PublishKey";
14
+ CommandType[CommandType["EditMember"] = 20] = "EditMember";
15
+ CommandType[CommandType["Derive"] = 21] = "Derive";
16
+ CommandType[CommandType["CloseStream"] = 19] = "CloseStream";
17
+ })(CommandType || (exports.CommandType = CommandType = {}));
18
+ /**
19
+ *
20
+ */
21
+ exports.Permissions = {
22
+ KEY_READER: 0x01,
23
+ KEY_CREATOR: 0x02,
24
+ KEY_REVOKER: 0x04,
25
+ ADD_MEMBER: 0x08,
26
+ REMOVE_MEMBER: 0x16,
27
+ CHANGE_MEMBER_PERMISSIONS: 0x32,
28
+ CHANGE_MEMBER_NAME: 0x64,
29
+ MEMBER: 0,
30
+ OWNER: 0xffffffff,
31
+ };
32
+ /**
33
+ *
34
+ */
35
+ class Seed {
36
+ constructor(topic, protocolVersion, groupKey, initializationVector, encryptedXpriv, ephemerPublicKey) {
37
+ this.topic = topic;
38
+ this.protocolVersion = protocolVersion;
39
+ this.groupKey = groupKey.length == 0 ? new Uint8Array(33) : groupKey;
40
+ this.initializationVector =
41
+ initializationVector.length == 0 ? new Uint8Array(16) : initializationVector;
42
+ this.encryptedXpriv = encryptedXpriv.length == 0 ? new Uint8Array(64) : encryptedXpriv;
43
+ this.ephemeralPublicKey = ephemerPublicKey.length == 0 ? new Uint8Array(33) : ephemerPublicKey;
44
+ }
45
+ getType() {
46
+ return CommandType.Seed;
47
+ }
48
+ }
49
+ exports.Seed = Seed;
50
+ /**
51
+ *
52
+ */
53
+ class Derive {
54
+ constructor(path, groupKey, initializationVector, encryptedXpriv, ephemeralPublicKey) {
55
+ this.path = path;
56
+ this.groupKey = groupKey;
57
+ this.initializationVector = initializationVector;
58
+ this.encryptedXpriv = encryptedXpriv;
59
+ this.ephemeralPublicKey = ephemeralPublicKey;
60
+ }
61
+ getType() {
62
+ return CommandType.Derive;
63
+ }
64
+ }
65
+ exports.Derive = Derive;
66
+ /**
67
+ *
68
+ */
69
+ class AddMember {
70
+ constructor(name, publicKey, permissions) {
71
+ this.name = name;
72
+ this.publicKey = publicKey;
73
+ this.permissions = permissions;
74
+ }
75
+ getType() {
76
+ return CommandType.AddMember;
77
+ }
78
+ }
79
+ exports.AddMember = AddMember;
80
+ /**
81
+ *
82
+ */
83
+ class PublishKey {
84
+ constructor(initializationVector, encryptedXpriv, recipient, ephemeralPublicKey) {
85
+ this.encryptedXpriv = encryptedXpriv;
86
+ this.initializationVector = initializationVector;
87
+ this.recipient = recipient;
88
+ this.ephemeralPublicKey = ephemeralPublicKey;
89
+ }
90
+ getType() {
91
+ return CommandType.PublishKey;
92
+ }
93
+ }
94
+ exports.PublishKey = PublishKey;
95
+ /**
96
+ *
97
+ */
98
+ class EditMember {
99
+ constructor(member, name, permissions) {
100
+ this.name = name;
101
+ this.permissions = permissions;
102
+ this.member = member;
103
+ }
104
+ getType() {
105
+ return CommandType.EditMember;
106
+ }
107
+ }
108
+ exports.EditMember = EditMember;
109
+ /**
110
+ *
111
+ */
112
+ class CloseStream {
113
+ constructor() { }
114
+ getType() {
115
+ return CommandType.CloseStream;
116
+ }
117
+ }
118
+ exports.CloseStream = CloseStream;
119
+ /**
120
+ * Create a new command block.
121
+ * @param issuer The public key of the command block issuer
122
+ * @param commands The list of commands in this command block
123
+ * @param signature The signature of the command block (by default the block is not signed)
124
+ * @param parent The parent command block hash (if null, the block is the first block and a parent will be generated)
125
+ * @returns
126
+ */
127
+ function createCommandBlock(issuer, commands, signature = new Uint8Array(), parent = null) {
128
+ if (parent === null) {
129
+ parent = parent = Crypto_1.crypto.randomBytes(32);
130
+ }
131
+ return {
132
+ version: 1,
133
+ issuer,
134
+ parent,
135
+ commands,
136
+ signature,
137
+ };
138
+ }
139
+ exports.createCommandBlock = createCommandBlock;
140
+ function signCommandBlock(block, issuer, secretKey) {
141
+ const signature = Crypto_1.crypto.sign(hashCommandBlock(block), Crypto_1.crypto.keypairFromSecretKey(secretKey));
142
+ return Object.assign(Object.assign({}, block), { signature });
143
+ }
144
+ exports.signCommandBlock = signCommandBlock;
145
+ function hashCommandBlock(block) {
146
+ return Crypto_1.crypto.hash(CommandStreamEncoder_1.CommandStreamEncoder.encode([block]));
147
+ }
148
+ exports.hashCommandBlock = hashCommandBlock;
149
+ function verifyCommandBlock(block) {
150
+ const unsignedBlock = Object.assign({}, block);
151
+ unsignedBlock.signature = new Uint8Array();
152
+ const hash = hashCommandBlock(unsignedBlock);
153
+ return Crypto_1.crypto.verify(hash, block.signature, block.issuer);
154
+ }
155
+ exports.verifyCommandBlock = verifyCommandBlock;
156
+ //# sourceMappingURL=CommandBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandBlock.js","sourceRoot":"","sources":["../src/CommandBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { CommandBlock, Command } from "./CommandBlock";
2
+ import { ResolvedCommandStream } from "./CommandStreamResolver";
3
+ import { Device } from "./Device";
4
+ import { StreamTree } from "./StreamTree";
5
+ /**
6
+ *
7
+ */
8
+ export type CommandIssuer = (device: Device, tempStream: CommandStream, streamTree?: StreamTree | null) => Promise<Command[]>;
9
+ /**
10
+ *
11
+ */
12
+ export declare class CommandStreamIssuer {
13
+ private _stream;
14
+ private _steps;
15
+ constructor(stream: CommandStream);
16
+ seed(topic?: Uint8Array | null): CommandStreamIssuer;
17
+ derive(path: number[]): CommandStreamIssuer;
18
+ addMember(name: string, publicKey: Uint8Array, permissions: number, publishKey?: boolean): CommandStreamIssuer;
19
+ publishKey(publicKey: Uint8Array): CommandStreamIssuer;
20
+ close(): CommandStreamIssuer;
21
+ issue(device: Device, streamTree?: StreamTree | null, parentHash?: Uint8Array | null): Promise<CommandStream>;
22
+ }
23
+ /**
24
+ *
25
+ */
26
+ export default class CommandStream {
27
+ private _blocks;
28
+ constructor(blocks?: CommandBlock[]);
29
+ resolve(incomplete?: boolean): Promise<ResolvedCommandStream>;
30
+ getRootHash(): Uint8Array;
31
+ getStreamPath(): string | null;
32
+ push(block: CommandBlock, issuer: Device, tree: StreamTree | null): Promise<CommandStream>;
33
+ issue(device: Device, commands: Command[], tree?: StreamTree | null, parentHash?: Uint8Array | null): Promise<CommandStream>;
34
+ edit(): CommandStreamIssuer;
35
+ getStreamPublicKey(): Promise<Uint8Array>;
36
+ get blocks(): CommandBlock[];
37
+ }
38
+ //# sourceMappingURL=CommandStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStream.d.ts","sourceRoot":"","sources":["../src/CommandStream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,OAAO,EASR,MAAM,gBAAgB,CAAC;AACxB,OAA8B,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,aAAa,EACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,KAC3B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAExB;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,aAAa;IAI1B,IAAI,CAAC,KAAK,GAAE,UAAU,GAAG,IAAW,GAAG,mBAAmB;IAe1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB;IAgB3C,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAc,GACzB,mBAAmB;IAsBf,UAAU,CAAC,SAAS,EAAE,UAAU,GAAG,mBAAmB;IAetD,KAAK,IAAI,mBAAmB;IAetB,KAAK,CAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAC7B,OAAO,CAAC,aAAa,CAAC;CAqB1B;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,OAAO,CAAsB;gBAEzB,MAAM,GAAE,YAAY,EAAO;IAIhC,OAAO,CAAC,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKpE,WAAW,IAAI,UAAU;IAIzB,aAAa,IAAI,MAAM,GAAG,IAAI;IAWxB,IAAI,CACf,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,IAAI,GACtB,OAAO,CAAC,aAAa,CAAC;IAkCZ,KAAK,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,GAAE,UAAU,GAAG,IAAW,EAC9B,UAAU,GAAE,UAAU,GAAG,IAAW,GACnC,OAAO,CAAC,aAAa,CAAC;IAYlB,IAAI,IAAI,mBAAmB;IAIrB,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAatD,IAAI,MAAM,IAAI,YAAY,EAAE,CAE3B;CACF"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CommandStreamIssuer = void 0;
16
+ const CommandBlock_1 = require("./CommandBlock");
17
+ const CommandStreamResolver_1 = __importDefault(require("./CommandStreamResolver"));
18
+ const Crypto_1 = require("./Crypto");
19
+ const Device_1 = require("./Device");
20
+ const EMPTY = new Uint8Array();
21
+ /**
22
+ *
23
+ */
24
+ class CommandStreamIssuer {
25
+ constructor(stream) {
26
+ this._steps = [];
27
+ this._stream = stream;
28
+ }
29
+ seed(topic = null) {
30
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
31
+ device;
32
+ tempStream;
33
+ streamTree;
34
+ return [new CommandBlock_1.Seed(topic, 0, EMPTY, EMPTY, EMPTY, EMPTY)];
35
+ });
36
+ this._steps.push(step);
37
+ return this;
38
+ }
39
+ derive(path) {
40
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
41
+ device;
42
+ tempStream;
43
+ streamTree;
44
+ const derivationPath = Crypto_1.DerivationPath.toIndexArray(path);
45
+ return [new CommandBlock_1.Derive(derivationPath, EMPTY, EMPTY, EMPTY, EMPTY)];
46
+ });
47
+ this._steps.push(step);
48
+ return this;
49
+ }
50
+ addMember(name, publicKey, permissions, publishKey = true) {
51
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
52
+ device;
53
+ tempStream;
54
+ streamTree;
55
+ if (publishKey) {
56
+ return [
57
+ new CommandBlock_1.AddMember(name, publicKey, permissions),
58
+ new CommandBlock_1.PublishKey(EMPTY, EMPTY, publicKey, EMPTY),
59
+ ];
60
+ }
61
+ else {
62
+ return [new CommandBlock_1.AddMember(name, publicKey, permissions)];
63
+ }
64
+ });
65
+ this._steps.push(step);
66
+ return this;
67
+ }
68
+ publishKey(publicKey) {
69
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
70
+ device;
71
+ tempStream;
72
+ streamTree;
73
+ return [new CommandBlock_1.PublishKey(EMPTY, EMPTY, publicKey, EMPTY)];
74
+ });
75
+ this._steps.push(step);
76
+ return this;
77
+ }
78
+ close() {
79
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
80
+ device;
81
+ tempStream;
82
+ streamTree;
83
+ return [new CommandBlock_1.CloseStream()];
84
+ });
85
+ this._steps.push(step);
86
+ return this;
87
+ }
88
+ issue(device, streamTree, parentHash) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const lastBlockHash = this._stream.blocks.length > 0
91
+ ? (0, CommandBlock_1.hashCommandBlock)(this._stream.blocks[this._stream.blocks.length - 1])
92
+ : null;
93
+ const block = (0, CommandBlock_1.createCommandBlock)(Device_1.ISSUER_PLACEHOLDER, [], new Uint8Array(), parentHash || lastBlockHash);
94
+ const stream = new CommandStream(this._stream.blocks.concat([]));
95
+ const tempStream = new CommandStream(this._stream.blocks.concat([block]));
96
+ let commands = [];
97
+ for (const step of this._steps) {
98
+ const newCommands = yield step(device, tempStream, streamTree);
99
+ commands = commands.concat(newCommands);
100
+ tempStream.blocks[tempStream.blocks.length - 1].commands = commands;
101
+ }
102
+ return yield stream.issue(device, commands, streamTree, parentHash);
103
+ });
104
+ }
105
+ }
106
+ exports.CommandStreamIssuer = CommandStreamIssuer;
107
+ /**
108
+ *
109
+ */
110
+ class CommandStream {
111
+ constructor(blocks = []) {
112
+ this._blocks = [];
113
+ this._blocks = blocks;
114
+ }
115
+ resolve(incomplete = false) {
116
+ incomplete;
117
+ return CommandStreamResolver_1.default.resolve(this._blocks);
118
+ }
119
+ getRootHash() {
120
+ return (0, CommandBlock_1.hashCommandBlock)(this._blocks[0]);
121
+ }
122
+ getStreamPath() {
123
+ if (this._blocks.length === 0)
124
+ return null;
125
+ if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Seed) {
126
+ return "";
127
+ }
128
+ else if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Derive) {
129
+ return Crypto_1.DerivationPath.toString(this._blocks[0].commands[0].path);
130
+ }
131
+ else {
132
+ throw new Error("Malformed CommandStream");
133
+ }
134
+ }
135
+ push(block, issuer, tree) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ let stream = [];
138
+ if (block.commands.length === 0) {
139
+ throw new Error("Attempts to create an empty block");
140
+ }
141
+ // If the first command of the new block is not a seed and the first command of the stream is not a seed either, prepend the root block
142
+ if ((this._blocks.length == 0 || this._blocks[0].commands[0].getType() !== CommandBlock_1.CommandType.Seed) &&
143
+ block.commands[0].getType() !== CommandBlock_1.CommandType.Seed) {
144
+ const root = tree === null || tree === void 0 ? void 0 : tree.getRoot();
145
+ if (!root || root.blocks.length === 0) {
146
+ throw new Error("Null or empty tree cannot be used to sign the new block");
147
+ }
148
+ stream = [root.blocks[0]].concat(this._blocks);
149
+ }
150
+ else {
151
+ stream = this._blocks;
152
+ }
153
+ if (block.commands[0].getType() === CommandBlock_1.CommandType.Derive) {
154
+ // Set the parent hash of the block to the root hash
155
+ const b = Object.assign({}, block);
156
+ b.parent = (0, CommandBlock_1.hashCommandBlock)(stream[0]);
157
+ stream = stream.concat([b]);
158
+ }
159
+ else {
160
+ stream = stream.concat([block]);
161
+ }
162
+ const signedBlock = yield issuer.sign(stream, tree || undefined);
163
+ return new CommandStream(this._blocks.concat([signedBlock]));
164
+ });
165
+ }
166
+ issue(device_1, commands_1) {
167
+ return __awaiter(this, arguments, void 0, function* (device, commands, tree = null, parentHash = null) {
168
+ const lastBlockHash = this._blocks.length > 0 ? (0, CommandBlock_1.hashCommandBlock)(this._blocks[this._blocks.length - 1]) : null;
169
+ const block = (0, CommandBlock_1.createCommandBlock)(Device_1.ISSUER_PLACEHOLDER, commands, new Uint8Array(), parentHash || lastBlockHash);
170
+ return this.push(block, device, tree);
171
+ });
172
+ }
173
+ edit() {
174
+ return new CommandStreamIssuer(this);
175
+ }
176
+ getStreamPublicKey() {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ // Group public must be the first command in the first block othwerwise it is malformed
179
+ if (this._blocks.length === 0 || this._blocks[0].commands.length === 0)
180
+ throw new Error("Empty CommandStream");
181
+ if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Seed) {
182
+ return this._blocks[0].commands[0].groupKey;
183
+ }
184
+ if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Derive) {
185
+ return this._blocks[0].commands[0].groupKey;
186
+ }
187
+ throw new Error("Malformed CommandStream");
188
+ });
189
+ }
190
+ get blocks() {
191
+ return this._blocks;
192
+ }
193
+ }
194
+ exports.default = CommandStream;
195
+ //# sourceMappingURL=CommandStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStream.js","sourceRoot":"","sources":["../src/CommandStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Command, CommandBlock } from "./CommandBlock";
2
+ import { TLVField } from "./tlv";
3
+ export declare const TLVCommandStreamDecoder: {
4
+ readCommand: (tlv: TLVField) => Command;
5
+ readSeedCommand: (buffer: Uint8Array) => Command;
6
+ readDeriveCommand: (buffer: Uint8Array) => Command;
7
+ readAddMemberCommand: (buffer: Uint8Array) => Command;
8
+ readPublishKeyCommand: (buffer: Uint8Array) => Command;
9
+ readCloseStreamCommand: (buffer: Uint8Array) => Command;
10
+ readEditMemberCommand: (buffer: Uint8Array) => Command;
11
+ };
12
+ export declare class CommandStreamDecoder {
13
+ static decode(buffer: Uint8Array): CommandBlock[];
14
+ }
15
+ //# sourceMappingURL=CommandStreamDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStreamDecoder.d.ts","sourceRoot":"","sources":["../src/CommandStreamDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,YAAY,EAQb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAO,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,eAAO,MAAM,uBAAuB;uBAGN,QAAQ,KAAG,OAAO;8BAmBX,UAAU,KAAG,OAAO;gCAmBlB,UAAU,KAAG,OAAO;mCAiBjB,UAAU,KAAG,OAAO;oCAOnB,UAAU,KAAG,OAAO;qCAcnB,UAAU,KAAG,OAAO;oCAKrB,UAAU,KAAG,OAAO;CAM9D,CAAC;AAkCF,qBAAa,oBAAoB;WACjB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE;CAGzD"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandStreamDecoder = exports.TLVCommandStreamDecoder = void 0;
4
+ const CommandBlock_1 = require("./CommandBlock");
5
+ const tlv_1 = require("./tlv");
6
+ exports.TLVCommandStreamDecoder = {
7
+ // Read command from TLV
8
+ readCommand: function (tlv) {
9
+ switch (tlv.type) {
10
+ case CommandBlock_1.CommandType.Seed:
11
+ return exports.TLVCommandStreamDecoder.readSeedCommand(tlv.value);
12
+ case CommandBlock_1.CommandType.Derive:
13
+ return exports.TLVCommandStreamDecoder.readDeriveCommand(tlv.value);
14
+ case CommandBlock_1.CommandType.AddMember:
15
+ return exports.TLVCommandStreamDecoder.readAddMemberCommand(tlv.value);
16
+ case CommandBlock_1.CommandType.PublishKey:
17
+ return exports.TLVCommandStreamDecoder.readPublishKeyCommand(tlv.value);
18
+ case CommandBlock_1.CommandType.EditMember:
19
+ return exports.TLVCommandStreamDecoder.readEditMemberCommand(tlv.value);
20
+ case CommandBlock_1.CommandType.CloseStream:
21
+ return exports.TLVCommandStreamDecoder.readCloseStreamCommand(tlv.value);
22
+ default:
23
+ throw new Error("Unknown command type");
24
+ }
25
+ },
26
+ readSeedCommand: function (buffer) {
27
+ const readTopic = tlv_1.TLV.readNullOr(tlv_1.TLV.readTLV(buffer, 0), tlv_1.TLV.readBytes);
28
+ const readProtocolVersion = tlv_1.TLV.readVarInt(tlv_1.TLV.readTLV(buffer, readTopic.offset));
29
+ const readGroupKey = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, readProtocolVersion.offset));
30
+ const readIV = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, readGroupKey.offset));
31
+ const readEncryptedXpriv = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, readIV.offset));
32
+ const readEphemeralPublicKey = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, readEncryptedXpriv.offset));
33
+ return new CommandBlock_1.Seed(readTopic.value, readProtocolVersion.value, readGroupKey.value, readIV.value, readEncryptedXpriv.value, readEphemeralPublicKey.value);
34
+ },
35
+ readDeriveCommand: function (buffer) {
36
+ const readPath = tlv_1.TLV.readDerivationPath(tlv_1.TLV.readTLV(buffer, 0));
37
+ const readGroupKey = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, readPath.offset));
38
+ const readIV = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, readGroupKey.offset));
39
+ const readEncryptedXpriv = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, readIV.offset));
40
+ const readEphemeralPublicKey = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, readEncryptedXpriv.offset));
41
+ return new CommandBlock_1.Derive(readPath.value, readGroupKey.value, readIV.value, readEncryptedXpriv.value, readEphemeralPublicKey.value);
42
+ },
43
+ readAddMemberCommand: function (buffer) {
44
+ const readName = tlv_1.TLV.readString(tlv_1.TLV.readTLV(buffer, 0));
45
+ const pubkey = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, readName.offset));
46
+ const permissions = tlv_1.TLV.readVarInt(tlv_1.TLV.readTLV(buffer, pubkey.offset));
47
+ return new CommandBlock_1.AddMember(readName.value, pubkey.value, permissions.value);
48
+ },
49
+ readPublishKeyCommand: function (buffer) {
50
+ const IV = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, 0));
51
+ const encryptedXpriv = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, IV.offset));
52
+ const recipient = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, encryptedXpriv.offset));
53
+ const ephemeralPublicKey = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, recipient.offset));
54
+ return new CommandBlock_1.PublishKey(IV.value, encryptedXpriv.value, recipient.value, ephemeralPublicKey.value);
55
+ },
56
+ readCloseStreamCommand: function (buffer) {
57
+ buffer;
58
+ return new CommandBlock_1.CloseStream();
59
+ },
60
+ readEditMemberCommand: function (buffer) {
61
+ const member = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, 0));
62
+ const permissions = tlv_1.TLV.readNullOr(tlv_1.TLV.readTLV(buffer, member.offset), tlv_1.TLV.readVarInt);
63
+ const name = tlv_1.TLV.readNullOr(tlv_1.TLV.readTLV(buffer, permissions.offset), tlv_1.TLV.readString);
64
+ return new CommandBlock_1.EditMember(member.value, name.value, permissions.value);
65
+ },
66
+ };
67
+ function unpack(buffer) {
68
+ const stream = [];
69
+ let offset = 0;
70
+ while (offset < buffer.length) {
71
+ const version = tlv_1.TLV.readVarInt(tlv_1.TLV.readTLV(buffer, offset));
72
+ const parent = tlv_1.TLV.readHash(tlv_1.TLV.readTLV(buffer, version.offset));
73
+ const issuer = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, parent.offset));
74
+ const length = tlv_1.TLV.readVarInt(tlv_1.TLV.readTLV(buffer, issuer.offset));
75
+ offset = length.offset;
76
+ const commands = [];
77
+ for (let index = 0; index < length.value; index++) {
78
+ const commandBuffer = tlv_1.TLV.readTLV(buffer, offset);
79
+ const command = exports.TLVCommandStreamDecoder.readCommand(commandBuffer.tlv);
80
+ commands.push(command);
81
+ offset = commandBuffer.offset;
82
+ }
83
+ const signature = tlv_1.TLV.readSignature(tlv_1.TLV.readTLV(buffer, offset));
84
+ offset = signature.offset;
85
+ stream.push({
86
+ version: version.value,
87
+ parent: parent.value,
88
+ issuer: issuer.value,
89
+ commands,
90
+ signature: signature.value,
91
+ });
92
+ }
93
+ return stream;
94
+ }
95
+ class CommandStreamDecoder {
96
+ static decode(buffer) {
97
+ return unpack(buffer);
98
+ }
99
+ }
100
+ exports.CommandStreamDecoder = CommandStreamDecoder;
101
+ //# sourceMappingURL=CommandStreamDecoder.js.map