lib0 0.2.64 → 0.2.66

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 (51) hide show
  1. package/coverage/tmp/coverage-29418-1678525324823-0.json +1 -0
  2. package/crypto/aes-gcm.d.ts +10 -0
  3. package/crypto/aes-gcm.d.ts.map +1 -0
  4. package/crypto/aes-gcm.js +124 -0
  5. package/crypto/ecdsa.d.ts +13 -0
  6. package/crypto/ecdsa.d.ts.map +1 -0
  7. package/crypto/ecdsa.js +93 -0
  8. package/crypto/rsa-oaep.d.ts +13 -0
  9. package/crypto/rsa-oaep.d.ts.map +1 -0
  10. package/crypto/rsa-oaep.js +84 -0
  11. package/crypto.test.d.ts +2 -0
  12. package/crypto.test.d.ts.map +1 -1
  13. package/dist/crypto/aes-gcm.d.ts +10 -0
  14. package/dist/crypto/aes-gcm.d.ts.map +1 -0
  15. package/dist/crypto/ecdsa.d.ts +13 -0
  16. package/dist/crypto/ecdsa.d.ts.map +1 -0
  17. package/dist/crypto/rsa-oaep.d.ts +13 -0
  18. package/dist/crypto/rsa-oaep.d.ts.map +1 -0
  19. package/dist/crypto.test.d.ts +2 -0
  20. package/dist/crypto.test.d.ts.map +1 -1
  21. package/dist/index.cjs +1 -1
  22. package/dist/{indexeddb-1f25af34.cjs → indexeddb-38ee46bd.cjs} +1 -4
  23. package/dist/indexeddb-38ee46bd.cjs.map +1 -0
  24. package/dist/indexeddb.cjs +1 -1
  25. package/dist/indexeddb.d.ts.map +1 -1
  26. package/dist/indexeddb.test.d.ts +1 -0
  27. package/dist/indexeddb.test.d.ts.map +1 -1
  28. package/dist/testing.cjs +15 -0
  29. package/dist/testing.cjs.map +1 -1
  30. package/dist/testing.d.ts +1 -0
  31. package/dist/testing.d.ts.map +1 -1
  32. package/dist/testing.test.d.ts.map +1 -1
  33. package/indexeddb.d.ts.map +1 -1
  34. package/indexeddb.js +0 -3
  35. package/indexeddb.test.d.ts +1 -0
  36. package/indexeddb.test.d.ts.map +1 -1
  37. package/package.json +18 -6
  38. package/test.html +3 -1
  39. package/testing.d.ts +1 -0
  40. package/testing.d.ts.map +1 -1
  41. package/testing.js +14 -0
  42. package/testing.test.d.ts.map +1 -1
  43. package/coverage/tmp/coverage-17397-1678220559587-0.json +0 -1
  44. package/crypto.d.ts +0 -22
  45. package/crypto.d.ts.map +0 -1
  46. package/crypto.js +0 -186
  47. package/dist/crypto.cjs +0 -232
  48. package/dist/crypto.cjs.map +0 -1
  49. package/dist/crypto.d.ts +0 -22
  50. package/dist/crypto.d.ts.map +0 -1
  51. package/dist/indexeddb-1f25af34.cjs.map +0 -1
@@ -0,0 +1,10 @@
1
+ export function encrypt(key: CryptoKey, data: Uint8Array): Promise<Uint8Array>;
2
+ export function decrypt(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
4
+ export function importKey(jwk: any, usages?: Usages | undefined, extractable?: boolean | undefined): Promise<CryptoKey>;
5
+ export function deriveKey(secret: Uint8Array | string, salt: Uint8Array | string, { extractable, usages }?: {
6
+ extractable?: boolean | undefined;
7
+ usages?: Usages | undefined;
8
+ }): Promise<CryptoKey>;
9
+ export type Usages = Array<'encrypt' | 'decrypt'>;
10
+ //# sourceMappingURL=aes-gcm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-gcm.d.ts","sourceRoot":"","sources":["aes-gcm.js"],"names":[],"mappings":"AAsBO,6BAHI,SAAS,QACT,UAAU,uBAkBpB;AAWM,6BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CAclC;AAKM,+BAFI,SAAS,uBAGoB;AAOjC,+BAJI,GAAG,sFAUb;AAmBM,kCANI,UAAU,GAAC,MAAM,QACjB,UAAU,GAAC,MAAM;IAEF,WAAW;IACZ,MAAM;uBA0B9B;qBAjHY,MAAM,SAAS,GAAC,SAAS,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * AES-GCM is a symmetric key for encryption
3
+ */
4
+
5
+ import * as encoding from '../encoding.js'
6
+ import * as decoding from '../decoding.js'
7
+ import * as webcrypto from 'lib0/webcrypto'
8
+ import * as string from '../string.js'
9
+
10
+ /**
11
+ * @typedef {Array<'encrypt'|'decrypt'>} Usages
12
+ */
13
+
14
+ /**
15
+ * @type {Usages}
16
+ */
17
+ const defaultUsages = ['encrypt', 'decrypt']
18
+
19
+ /**
20
+ * @param {CryptoKey} key
21
+ * @param {Uint8Array} data
22
+ */
23
+ export const encrypt = (key, data) => {
24
+ const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.
25
+ return webcrypto.subtle.encrypt(
26
+ {
27
+ name: 'AES-GCM',
28
+ iv
29
+ },
30
+ key,
31
+ data
32
+ ).then(cipher => {
33
+ const encryptedDataEncoder = encoding.createEncoder()
34
+ // iv may be sent in the clear to the other peers
35
+ encoding.writeUint8Array(encryptedDataEncoder, iv)
36
+ encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))
37
+ return encoding.toUint8Array(encryptedDataEncoder)
38
+ })
39
+ }
40
+
41
+ /**
42
+ * @experimental The API is not final!
43
+ *
44
+ * Decrypt some data using AES-GCM method.
45
+ *
46
+ * @param {CryptoKey} key
47
+ * @param {Uint8Array} data
48
+ * @return {PromiseLike<Uint8Array>} decrypted buffer
49
+ */
50
+ export const decrypt = (key, data) => {
51
+ const dataDecoder = decoding.createDecoder(data)
52
+ const iv = decoding.readUint8Array(dataDecoder, 16)
53
+ const cipher = decoding.readVarUint8Array(dataDecoder)
54
+ return webcrypto.subtle.decrypt(
55
+ {
56
+ name: 'AES-GCM',
57
+ iv
58
+ },
59
+ key,
60
+ cipher
61
+ ).then(data => new Uint8Array(data))
62
+ }
63
+
64
+ /**
65
+ * @param {CryptoKey} key
66
+ */
67
+ export const exportKey = key =>
68
+ webcrypto.subtle.exportKey('jwk', key)
69
+
70
+ /**
71
+ * @param {any} jwk
72
+ * @param {Usages} [usages]
73
+ * @param {boolean} [extractable]
74
+ */
75
+ export const importKey = (jwk, usages, extractable = false) => {
76
+ if (usages == null) {
77
+ /* c8 ignore next */
78
+ usages = jwk.key_ops || defaultUsages
79
+ }
80
+ return webcrypto.subtle.importKey('jwk', jwk, 'AES-GCM', extractable, /** @type {Usages} */ (usages))
81
+ }
82
+
83
+ /**
84
+ * @param {Uint8Array | string} data
85
+ */
86
+ /* c8 ignore next */
87
+ const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data
88
+
89
+ /**
90
+ * @experimental The API is not final!
91
+ *
92
+ * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.
93
+ *
94
+ * @param {Uint8Array|string} secret
95
+ * @param {Uint8Array|string} salt
96
+ * @param {Object} opts
97
+ * @param {boolean} [opts.extractable]
98
+ * @param {Usages} [opts.usages]
99
+ */
100
+ export const deriveKey = (secret, salt, { extractable = false, usages = defaultUsages } = {}) => {
101
+ return webcrypto.subtle.importKey(
102
+ 'raw',
103
+ toBinary(secret),
104
+ 'PBKDF2',
105
+ false,
106
+ ['deriveKey']
107
+ ).then(keyMaterial =>
108
+ webcrypto.subtle.deriveKey(
109
+ {
110
+ name: 'PBKDF2',
111
+ salt: toBinary(salt), // NIST recommends at least 64 bits
112
+ iterations: 600000, // OWASP recommends 600k iterations
113
+ hash: 'SHA-256'
114
+ },
115
+ keyMaterial,
116
+ {
117
+ name: 'AES-GCM',
118
+ length: 256
119
+ },
120
+ extractable,
121
+ usages
122
+ )
123
+ )
124
+ }
@@ -0,0 +1,13 @@
1
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
2
+ export function sign(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function verify(key: CryptoKey, signature: Uint8Array, data: Uint8Array): PromiseLike<boolean>;
4
+ export function generateKeyPair({ extractable, usages }?: {
5
+ extractable?: boolean | undefined;
6
+ usages?: Usages | undefined;
7
+ }): Promise<CryptoKeyPair>;
8
+ export function importKey(jwk: any, { extractable, usages }?: {
9
+ extractable?: boolean | undefined;
10
+ usages?: Usages | undefined;
11
+ }): Promise<CryptoKey>;
12
+ export type Usages = Array<'sign' | 'verify'>;
13
+ //# sourceMappingURL=ecdsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["ecdsa.js"],"names":[],"mappings":"AAkBO,+BAFI,SAAS,uBAInB;AAWM,0BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CAWlC;AAYM,4BALI,SAAS,aACT,UAAU,QACV,UAAU,GACT,YAAY,OAAO,CAAC,CAY/B;AAQM;IAHmB,WAAW;IACZ,MAAM;2BAU5B;AAQI,+BALI,GAAG;IAEY,WAAW;IACZ,MAAM;uBAQ9B;qBArFY,MAAM,MAAM,GAAC,QAAQ,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * ECDSA is an asymmetric key for signing
3
+ */
4
+
5
+ import * as webcrypto from 'lib0/webcrypto'
6
+
7
+ /**
8
+ * @typedef {Array<'sign'|'verify'>} Usages
9
+ */
10
+
11
+ /**
12
+ * @type {Usages}
13
+ */
14
+ const defaultUsages = ['sign', 'verify']
15
+
16
+ /**
17
+ * @param {CryptoKey} key
18
+ */
19
+ export const exportKey = key => {
20
+ return webcrypto.subtle.exportKey('jwk', key)
21
+ }
22
+
23
+ /**
24
+ * @experimental The API is not final!
25
+ *
26
+ * Sign a message
27
+ *
28
+ * @param {CryptoKey} key
29
+ * @param {Uint8Array} data
30
+ * @return {PromiseLike<Uint8Array>} signature
31
+ */
32
+ export const sign = (key, data) => {
33
+ return webcrypto.subtle.sign(
34
+ {
35
+ name: 'ECDSA',
36
+ hash: { name: 'SHA-384' }
37
+ },
38
+ key,
39
+ data
40
+ ).then(signature => new Uint8Array(signature))
41
+ }
42
+
43
+ /**
44
+ * @experimental The API is not final!
45
+ *
46
+ * Sign a message
47
+ *
48
+ * @param {CryptoKey} key
49
+ * @param {Uint8Array} signature
50
+ * @param {Uint8Array} data
51
+ * @return {PromiseLike<boolean>} signature
52
+ */
53
+ export const verify = (key, signature, data) => {
54
+ return webcrypto.subtle.verify(
55
+ {
56
+ name: 'ECDSA',
57
+ hash: { name: 'SHA-384' }
58
+ },
59
+ key,
60
+ signature,
61
+ data
62
+ )
63
+ }
64
+
65
+ /* c8 ignore next */
66
+ /**
67
+ * @param {Object} opts
68
+ * @param {boolean} [opts.extractable]
69
+ * @param {Usages} [opts.usages]
70
+ */
71
+ export const generateKeyPair = ({ extractable = false, usages = defaultUsages } = {}) =>
72
+ webcrypto.subtle.generateKey(
73
+ {
74
+ name: 'ECDSA',
75
+ namedCurve: 'P-384'
76
+ },
77
+ extractable,
78
+ usages
79
+ )
80
+
81
+ /**
82
+ * @param {any} jwk
83
+ * @param {Object} opts
84
+ * @param {boolean} [opts.extractable]
85
+ * @param {Usages} [opts.usages]
86
+ */
87
+ export const importKey = (jwk, { extractable = false, usages } = {}) => {
88
+ if (usages == null) {
89
+ /* c8 ignore next */
90
+ usages = jwk.key_ops || defaultUsages
91
+ }
92
+ return webcrypto.subtle.importKey('jwk', jwk, { name: 'ECDSA', namedCurve: 'P-384' }, extractable, /** @type {Usages} */ (usages))
93
+ }
@@ -0,0 +1,13 @@
1
+ export function encrypt(key: CryptoKey, data: Uint8Array): Promise<any>;
2
+ export function decrypt(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
4
+ export function generateKey({ extractable, usages }?: {
5
+ extractable?: boolean | undefined;
6
+ usages?: Usages | undefined;
7
+ }): Promise<CryptoKeyPair>;
8
+ export function importKey(jwk: any, { extractable, usages }?: {
9
+ extractable?: boolean | undefined;
10
+ usages?: Usages | undefined;
11
+ }): Promise<CryptoKey>;
12
+ export type Usages = Array<'encrypt' | 'decrypt'>;
13
+ //# sourceMappingURL=rsa-oaep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-oaep.d.ts","sourceRoot":"","sources":["rsa-oaep.js"],"names":[],"mappings":"AAqBO,6BAHI,SAAS,QACT,UAAU,gBASlB;AAWI,6BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CASG;AAK/B,+BAFI,SAAS,uBAGoB;AAOjC;IAHmB,WAAW;IACZ,MAAM;2BAY5B;AAQI,+BALI,GAAG;IAEY,WAAW;IACZ,MAAM;uBAQ9B;qBA5EY,MAAM,SAAS,GAAC,SAAS,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * RSA-OAEP is an asymmetric keypair used for encryption
3
+ */
4
+
5
+ import * as webcrypto from 'lib0/webcrypto'
6
+
7
+ /**
8
+ * @typedef {Array<'encrypt'|'decrypt'>} Usages
9
+ */
10
+
11
+ /**
12
+ * @type {Usages}
13
+ */
14
+ const defaultUsages = ['encrypt', 'decrypt']
15
+
16
+ /**
17
+ * Note that the max data size is limited by the size of the RSA key.
18
+ *
19
+ * @param {CryptoKey} key
20
+ * @param {Uint8Array} data
21
+ */
22
+ export const encrypt = (key, data) =>
23
+ webcrypto.subtle.encrypt(
24
+ {
25
+ name: 'RSA-OAEP'
26
+ },
27
+ key,
28
+ data
29
+ )
30
+
31
+ /**
32
+ * @experimental The API is not final!
33
+ *
34
+ * Decrypt some data using AES-GCM method.
35
+ *
36
+ * @param {CryptoKey} key
37
+ * @param {Uint8Array} data
38
+ * @return {PromiseLike<Uint8Array>} decrypted buffer
39
+ */
40
+ export const decrypt = (key, data) =>
41
+ webcrypto.subtle.decrypt(
42
+ {
43
+ name: 'RSA-OAEP'
44
+ },
45
+ key,
46
+ data
47
+ ).then(data => new Uint8Array(data))
48
+
49
+ /**
50
+ * @param {CryptoKey} key
51
+ */
52
+ export const exportKey = key =>
53
+ webcrypto.subtle.exportKey('jwk', key)
54
+
55
+ /**
56
+ * @param {Object} opts
57
+ * @param {boolean} [opts.extractable]
58
+ * @param {Usages} [opts.usages]
59
+ */
60
+ export const generateKey = ({ extractable = false, usages = defaultUsages } = {}) =>
61
+ webcrypto.subtle.generateKey(
62
+ {
63
+ name: 'RSA-OAEP',
64
+ modulusLength: 4096,
65
+ publicExponent: new Uint8Array([1, 0, 1]),
66
+ hash: 'SHA-256'
67
+ },
68
+ extractable,
69
+ usages
70
+ )
71
+
72
+ /**
73
+ * @param {any} jwk
74
+ * @param {Object} opts
75
+ * @param {boolean} [opts.extractable]
76
+ * @param {Usages} [opts.usages]
77
+ */
78
+ export const importKey = (jwk, { extractable = false, usages } = {}) => {
79
+ if (usages == null) {
80
+ /* c8 ignore next */
81
+ usages = jwk.key_ops || defaultUsages
82
+ }
83
+ return webcrypto.subtle.importKey('jwk', jwk, { name: 'RSA-OAEP', hash: 'SHA-256' }, extractable, /** @type {Usages} */ (usages))
84
+ }
package/crypto.test.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ export function testEncryption(tc: t.TestCase): Promise<void>;
1
2
  export function testReapeatEncryption(tc: t.TestCase): Promise<void>;
3
+ export function testImportExport(tc: t.TestCase): Promise<void>;
2
4
  export function testEncryptionPerformance(tc: t.TestCase): Promise<void>;
3
5
  export function testConsistentKeyGeneration(_tc: t.TestCase): Promise<void>;
4
6
  export function testSigning(tc: t.TestCase): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["crypto.test.js"],"names":[],"mappings":"AAQO,0CAFI,EAAE,QAAQ,iBA+BpB;AAKM,8CAFI,EAAE,QAAQ,iBAsCpB;AAKM,iDAFI,EAAE,QAAQ,iBA4CpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB"}
1
+ {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["crypto.test.js"],"names":[],"mappings":"AAUO,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAkCpB;AAKM,8CAFI,EAAE,QAAQ,iBAsCpB;AAKM,iDAFI,EAAE,QAAQ,iBA0EpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB"}
@@ -0,0 +1,10 @@
1
+ export function encrypt(key: CryptoKey, data: Uint8Array): Promise<Uint8Array>;
2
+ export function decrypt(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
4
+ export function importKey(jwk: any, usages?: Usages | undefined, extractable?: boolean | undefined): Promise<CryptoKey>;
5
+ export function deriveKey(secret: Uint8Array | string, salt: Uint8Array | string, { extractable, usages }?: {
6
+ extractable?: boolean | undefined;
7
+ usages?: Usages | undefined;
8
+ }): Promise<CryptoKey>;
9
+ export type Usages = Array<'encrypt' | 'decrypt'>;
10
+ //# sourceMappingURL=aes-gcm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-gcm.d.ts","sourceRoot":"","sources":["../../crypto/aes-gcm.js"],"names":[],"mappings":"AAsBO,6BAHI,SAAS,QACT,UAAU,uBAkBpB;AAWM,6BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CAclC;AAKM,+BAFI,SAAS,uBAGoB;AAOjC,+BAJI,GAAG,sFAUb;AAmBM,kCANI,UAAU,GAAC,MAAM,QACjB,UAAU,GAAC,MAAM;IAEF,WAAW;IACZ,MAAM;uBA0B9B;qBAjHY,MAAM,SAAS,GAAC,SAAS,CAAC"}
@@ -0,0 +1,13 @@
1
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
2
+ export function sign(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function verify(key: CryptoKey, signature: Uint8Array, data: Uint8Array): PromiseLike<boolean>;
4
+ export function generateKeyPair({ extractable, usages }?: {
5
+ extractable?: boolean | undefined;
6
+ usages?: Usages | undefined;
7
+ }): Promise<CryptoKeyPair>;
8
+ export function importKey(jwk: any, { extractable, usages }?: {
9
+ extractable?: boolean | undefined;
10
+ usages?: Usages | undefined;
11
+ }): Promise<CryptoKey>;
12
+ export type Usages = Array<'sign' | 'verify'>;
13
+ //# sourceMappingURL=ecdsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../crypto/ecdsa.js"],"names":[],"mappings":"AAkBO,+BAFI,SAAS,uBAInB;AAWM,0BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CAWlC;AAYM,4BALI,SAAS,aACT,UAAU,QACV,UAAU,GACT,YAAY,OAAO,CAAC,CAY/B;AAQM;IAHmB,WAAW;IACZ,MAAM;2BAU5B;AAQI,+BALI,GAAG;IAEY,WAAW;IACZ,MAAM;uBAQ9B;qBArFY,MAAM,MAAM,GAAC,QAAQ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export function encrypt(key: CryptoKey, data: Uint8Array): Promise<any>;
2
+ export function decrypt(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
4
+ export function generateKey({ extractable, usages }?: {
5
+ extractable?: boolean | undefined;
6
+ usages?: Usages | undefined;
7
+ }): Promise<CryptoKeyPair>;
8
+ export function importKey(jwk: any, { extractable, usages }?: {
9
+ extractable?: boolean | undefined;
10
+ usages?: Usages | undefined;
11
+ }): Promise<CryptoKey>;
12
+ export type Usages = Array<'encrypt' | 'decrypt'>;
13
+ //# sourceMappingURL=rsa-oaep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-oaep.d.ts","sourceRoot":"","sources":["../../crypto/rsa-oaep.js"],"names":[],"mappings":"AAqBO,6BAHI,SAAS,QACT,UAAU,gBASlB;AAWI,6BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CASG;AAK/B,+BAFI,SAAS,uBAGoB;AAOjC;IAHmB,WAAW;IACZ,MAAM;2BAY5B;AAQI,+BALI,GAAG;IAEY,WAAW;IACZ,MAAM;uBAQ9B;qBA5EY,MAAM,SAAS,GAAC,SAAS,CAAC"}
@@ -1,4 +1,6 @@
1
+ export function testEncryption(tc: t.TestCase): Promise<void>;
1
2
  export function testReapeatEncryption(tc: t.TestCase): Promise<void>;
3
+ export function testImportExport(tc: t.TestCase): Promise<void>;
2
4
  export function testEncryptionPerformance(tc: t.TestCase): Promise<void>;
3
5
  export function testConsistentKeyGeneration(_tc: t.TestCase): Promise<void>;
4
6
  export function testSigning(tc: t.TestCase): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["../crypto.test.js"],"names":[],"mappings":"AAQO,0CAFI,EAAE,QAAQ,iBA+BpB;AAKM,8CAFI,EAAE,QAAQ,iBAsCpB;AAKM,iDAFI,EAAE,QAAQ,iBA4CpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB"}
1
+ {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["../crypto.test.js"],"names":[],"mappings":"AAUO,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAkCpB;AAKM,8CAFI,EAAE,QAAQ,iBAsCpB;AAKM,iDAFI,EAAE,QAAQ,iBA0EpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB"}
package/dist/index.cjs CHANGED
@@ -13,7 +13,7 @@ var environment = require('./environment-01c0e75b.cjs');
13
13
  var error = require('./error-8582d695.cjs');
14
14
  var eventloop = require('./eventloop-d0571621.cjs');
15
15
  var _function = require('./function-35e8ddea.cjs');
16
- var indexeddb = require('./indexeddb-1f25af34.cjs');
16
+ var indexeddb = require('./indexeddb-38ee46bd.cjs');
17
17
  var iterator = require('./iterator-9fc627c1.cjs');
18
18
  var json = require('./json-092190a1.cjs');
19
19
  var logging = require('./logging-641c32f4.cjs');
@@ -17,8 +17,6 @@ const rtop = request => promise.create((resolve, reject) => {
17
17
  // @ts-ignore
18
18
  request.onerror = event => reject(new Error(event.target.error));
19
19
  // @ts-ignore
20
- request.onblocked = () => location.reload();
21
- // @ts-ignore
22
20
  request.onsuccess = event => resolve(event.target.result);
23
21
  });
24
22
 
@@ -37,7 +35,6 @@ const openDB = (name, initDB) => promise.create((resolve, reject) => {
37
35
  * @param {any} event
38
36
  */
39
37
  request.onerror = event => reject(error.create(event.target.error));
40
- request.onblocked = () => location.reload();
41
38
  /**
42
39
  * @param {any} event
43
40
  */
@@ -314,4 +311,4 @@ exports.put = put;
314
311
  exports.queryFirst = queryFirst;
315
312
  exports.rtop = rtop;
316
313
  exports.transact = transact;
317
- //# sourceMappingURL=indexeddb-1f25af34.cjs.map
314
+ //# sourceMappingURL=indexeddb-38ee46bd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb-38ee46bd.cjs","sources":["../indexeddb.js"],"sourcesContent":["/* eslint-env browser */\n\n/**\n * Helpers to work with IndexedDB.\n *\n * @module indexeddb\n */\n\nimport * as promise from './promise.js'\nimport * as error from './error.js'\n\n/* c8 ignore start */\n\n/**\n * IDB Request to Promise transformer\n *\n * @param {IDBRequest} request\n * @return {Promise<any>}\n */\nexport const rtop = request => promise.create((resolve, reject) => {\n // @ts-ignore\n request.onerror = event => reject(new Error(event.target.error))\n // @ts-ignore\n request.onsuccess = event => resolve(event.target.result)\n})\n\n/**\n * @param {string} name\n * @param {function(IDBDatabase):any} initDB Called when the database is first created\n * @return {Promise<IDBDatabase>}\n */\nexport const openDB = (name, initDB) => promise.create((resolve, reject) => {\n const request = indexedDB.open(name)\n /**\n * @param {any} event\n */\n request.onupgradeneeded = event => initDB(event.target.result)\n /**\n * @param {any} event\n */\n request.onerror = event => reject(error.create(event.target.error))\n /**\n * @param {any} event\n */\n request.onsuccess = event => {\n /**\n * @type {IDBDatabase}\n */\n const db = event.target.result\n db.onversionchange = () => { db.close() }\n if (typeof addEventListener !== 'undefined') {\n addEventListener('unload', () => db.close())\n }\n resolve(db)\n }\n})\n\n/**\n * @param {string} name\n */\nexport const deleteDB = name => rtop(indexedDB.deleteDatabase(name))\n\n/**\n * @param {IDBDatabase} db\n * @param {Array<Array<string>|Array<string|IDBObjectStoreParameters|undefined>>} definitions\n */\nexport const createStores = (db, definitions) => definitions.forEach(d =>\n // @ts-ignore\n db.createObjectStore.apply(db, d)\n)\n\n/**\n * @param {IDBDatabase} db\n * @param {Array<string>} stores\n * @param {\"readwrite\"|\"readonly\"} [access]\n * @return {Array<IDBObjectStore>}\n */\nexport const transact = (db, stores, access = 'readwrite') => {\n const transaction = db.transaction(stores, access)\n return stores.map(store => getStore(transaction, store))\n}\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @return {Promise<number>}\n */\nexport const count = (store, range) =>\n rtop(store.count(range))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | Array<any> } key\n * @return {Promise<String | number | ArrayBuffer | Date | Array<any>>}\n */\nexport const get = (store, key) =>\n rtop(store.get(key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | IDBKeyRange | Array<any> } key\n */\nexport const del = (store, key) =>\n rtop(store.delete(key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | boolean} item\n * @param {String | number | ArrayBuffer | Date | Array<any>} [key]\n */\nexport const put = (store, item, key) =>\n rtop(store.put(item, key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date | boolean} item\n * @param {String | number | ArrayBuffer | Date | Array<any>} key\n * @return {Promise<any>}\n */\nexport const add = (store, item, key) =>\n rtop(store.add(item, key))\n\n/**\n * @param {IDBObjectStore} store\n * @param {String | number | ArrayBuffer | Date} item\n * @return {Promise<number>} Returns the generated key\n */\nexport const addAutoKey = (store, item) =>\n rtop(store.add(item))\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @param {number} [limit]\n * @return {Promise<Array<any>>}\n */\nexport const getAll = (store, range, limit) =>\n rtop(store.getAll(range, limit))\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @param {number} [limit]\n * @return {Promise<Array<any>>}\n */\nexport const getAllKeys = (store, range, limit) =>\n rtop(store.getAllKeys(range, limit))\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange|null} query\n * @param {'next'|'prev'|'nextunique'|'prevunique'} direction\n * @return {Promise<any>}\n */\nexport const queryFirst = (store, query, direction) => {\n /**\n * @type {any}\n */\n let first = null\n return iterateKeys(store, query, key => {\n first = key\n return false\n }, direction).then(() => first)\n}\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange?} [range]\n * @return {Promise<any>}\n */\nexport const getLastKey = (store, range = null) => queryFirst(store, range, 'prev')\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange?} [range]\n * @return {Promise<any>}\n */\nexport const getFirstKey = (store, range = null) => queryFirst(store, range, 'next')\n\n/**\n * @typedef KeyValuePair\n * @type {Object}\n * @property {any} k key\n * @property {any} v Value\n */\n\n/**\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange} [range]\n * @param {number} [limit]\n * @return {Promise<Array<KeyValuePair>>}\n */\nexport const getAllKeysValues = (store, range, limit) =>\n // @ts-ignore\n promise.all([getAllKeys(store, range, limit), getAll(store, range, limit)]).then(([ks, vs]) => ks.map((k, i) => ({ k, v: vs[i] })))\n\n/**\n * @param {any} request\n * @param {function(IDBCursorWithValue):void|boolean|Promise<void|boolean>} f\n * @return {Promise<void>}\n */\nconst iterateOnRequest = (request, f) => promise.create((resolve, reject) => {\n request.onerror = reject\n /**\n * @param {any} event\n */\n request.onsuccess = async event => {\n const cursor = event.target.result\n if (cursor === null || (await f(cursor)) === false) {\n return resolve()\n }\n cursor.continue()\n }\n})\n\n/**\n * Iterate on keys and values\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange|null} keyrange\n * @param {function(any,any):void|boolean|Promise<void|boolean>} f Callback that receives (value, key)\n * @param {'next'|'prev'|'nextunique'|'prevunique'} direction\n */\nexport const iterate = (store, keyrange, f, direction = 'next') =>\n iterateOnRequest(store.openCursor(keyrange, direction), cursor => f(cursor.value, cursor.key))\n\n/**\n * Iterate on the keys (no values)\n *\n * @param {IDBObjectStore} store\n * @param {IDBKeyRange|null} keyrange\n * @param {function(any):void|boolean|Promise<void|boolean>} f callback that receives the key\n * @param {'next'|'prev'|'nextunique'|'prevunique'} direction\n */\nexport const iterateKeys = (store, keyrange, f, direction = 'next') =>\n iterateOnRequest(store.openKeyCursor(keyrange, direction), cursor => f(cursor.key))\n\n/**\n * Open store from transaction\n * @param {IDBTransaction} t\n * @param {String} store\n * @returns {IDBObjectStore}\n */\nexport const getStore = (t, store) => t.objectStore(store)\n\n/**\n * @param {any} lower\n * @param {any} upper\n * @param {boolean} lowerOpen\n * @param {boolean} upperOpen\n */\nexport const createIDBKeyRangeBound = (lower, upper, lowerOpen, upperOpen) => IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen)\n\n/**\n * @param {any} upper\n * @param {boolean} upperOpen\n */\nexport const createIDBKeyRangeUpperBound = (upper, upperOpen) => IDBKeyRange.upperBound(upper, upperOpen)\n\n/**\n * @param {any} lower\n * @param {boolean} lowerOpen\n */\nexport const createIDBKeyRangeLowerBound = (lower, lowerOpen) => IDBKeyRange.lowerBound(lower, lowerOpen)\n\n/* c8 ignore stop */\n"],"names":["promise.create","error.create","promise.all"],"mappings":"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"}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('./promise-a4f32c85.cjs');
6
6
  require('./error-8582d695.cjs');
7
- var indexeddb = require('./indexeddb-1f25af34.cjs');
7
+ var indexeddb = require('./indexeddb-38ee46bd.cjs');
8
8
  require('./time-bc2081b9.cjs');
9
9
  require('./metric.cjs');
10
10
  require('./math-08e068f9.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../indexeddb.js"],"names":[],"mappings":"AAmBO,8BAHI,UAAU,GACT,QAAQ,GAAG,CAAC,CAStB;AAOK,6BAJI,MAAM,iBACG,WAAW,KAAE,GAAG,GACxB,QAAQ,WAAW,CAAC,CA2B9B;AAKK,+BAFI,MAAM,gBAEmD;AAM7D,iCAHI,WAAW,eACX,MAAM,MAAM,MAAM,CAAC,GAAC,MAAM,MAAM,GAAC,wBAAwB,GAAC,SAAS,CAAC,CAAC,QAK/E;AAQM,6BALI,WAAW,UACX,MAAM,MAAM,CAAC,kDAEZ,MAAM,cAAc,CAAC,CAKhC;AAOM,6BAJI,cAAc,oCAEb,QAAQ,MAAM,CAAC,CAGD;AAOnB,2BAJI,cAAc,OACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,GAChD,QAAQ,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAGhD;AAMf,2BAHI,cAAc,OACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC,gBAGjD;AAOlB,2BAJI,cAAc,QACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,gFAI7B;AAQrB,2BALI,cAAc,QACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,OAC9C,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,GAChD,QAAQ,GAAG,CAAC,CAGI;AAOrB,kCAJI,cAAc,QACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GACnC,QAAQ,MAAM,CAAC,CAGJ;AAQhB,8BALI,cAAc,gEAGb,QAAQ,MAAM,GAAG,CAAC,CAAC,CAGG;AAQ3B,kCALI,cAAc,gEAGb,QAAQ,MAAM,GAAG,CAAC,CAAC,CAGO;AAQ/B,kCALI,cAAc,SACd,WAAW,GAAC,IAAI,aAChB,MAAM,GAAC,MAAM,GAAC,YAAY,GAAC,YAAY,GACtC,QAAQ,GAAG,CAAC,CAWvB;AAOM,kCAJI,cAAc,2CAEb,QAAQ,GAAG,CAAC,CAE2D;AAO5E,mCAJI,cAAc,2CAEb,QAAQ,GAAG,CAAC,CAE4D;AAe7E,wCALI,cAAc,gEAGb,QAAQ,MAAM,YAAY,CAAC,CAAC,CAI6F;AA4B9H,+BALI,cAAc,YACd,WAAW,GAAC,IAAI,YACP,GAAG,QAAC,GAAG,KAAE,IAAI,GAAC,OAAO,GAAC,QAAQ,IAAI,GAAC,OAAO,CAAC,cACpD,MAAM,GAAC,MAAM,GAAC,YAAY,GAAC,YAAY,iBAG8C;AAUzF,mCALI,cAAc,YACd,WAAW,GAAC,IAAI,YACP,GAAG,KAAE,IAAI,GAAC,OAAO,GAAC,QAAQ,IAAI,GAAC,OAAO,CAAC,cAChD,MAAM,GAAC,MAAM,GAAC,YAAY,GAAC,YAAY,iBAGmC;AAQ9E,4BAJI,cAAc,kBAEZ,cAAc,CAE+B;AAQnD,8CALI,GAAG,SACH,GAAG,aACH,OAAO,aACP,OAAO,eAEiH;AAM5H,mDAHI,GAAG,aACH,OAAO,eAEuF;AAMlG,mDAHI,GAAG,aACH,OAAO,eAEuF;;;;;OAhF3F,GAAG;;;;OACH,GAAG"}
1
+ {"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../indexeddb.js"],"names":[],"mappings":"AAmBO,8BAHI,UAAU,GACT,QAAQ,GAAG,CAAC,CAOtB;AAOK,6BAJI,MAAM,iBACG,WAAW,KAAE,GAAG,GACxB,QAAQ,WAAW,CAAC,CA0B9B;AAKK,+BAFI,MAAM,gBAEmD;AAM7D,iCAHI,WAAW,eACX,MAAM,MAAM,MAAM,CAAC,GAAC,MAAM,MAAM,GAAC,wBAAwB,GAAC,SAAS,CAAC,CAAC,QAK/E;AAQM,6BALI,WAAW,UACX,MAAM,MAAM,CAAC,kDAEZ,MAAM,cAAc,CAAC,CAKhC;AAOM,6BAJI,cAAc,oCAEb,QAAQ,MAAM,CAAC,CAGD;AAOnB,2BAJI,cAAc,OACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,GAChD,QAAQ,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAGhD;AAMf,2BAHI,cAAc,OACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC,gBAGjD;AAOlB,2BAJI,cAAc,QACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,gFAI7B;AAQrB,2BALI,cAAc,QACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,OAAO,OAC9C,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,GAChD,QAAQ,GAAG,CAAC,CAGI;AAOrB,kCAJI,cAAc,QACd,SAAS,MAAM,GAAG,WAAW,GAAG,IAAI,GACnC,QAAQ,MAAM,CAAC,CAGJ;AAQhB,8BALI,cAAc,gEAGb,QAAQ,MAAM,GAAG,CAAC,CAAC,CAGG;AAQ3B,kCALI,cAAc,gEAGb,QAAQ,MAAM,GAAG,CAAC,CAAC,CAGO;AAQ/B,kCALI,cAAc,SACd,WAAW,GAAC,IAAI,aAChB,MAAM,GAAC,MAAM,GAAC,YAAY,GAAC,YAAY,GACtC,QAAQ,GAAG,CAAC,CAWvB;AAOM,kCAJI,cAAc,2CAEb,QAAQ,GAAG,CAAC,CAE2D;AAO5E,mCAJI,cAAc,2CAEb,QAAQ,GAAG,CAAC,CAE4D;AAe7E,wCALI,cAAc,gEAGb,QAAQ,MAAM,YAAY,CAAC,CAAC,CAI6F;AA4B9H,+BALI,cAAc,YACd,WAAW,GAAC,IAAI,YACP,GAAG,QAAC,GAAG,KAAE,IAAI,GAAC,OAAO,GAAC,QAAQ,IAAI,GAAC,OAAO,CAAC,cACpD,MAAM,GAAC,MAAM,GAAC,YAAY,GAAC,YAAY,iBAG8C;AAUzF,mCALI,cAAc,YACd,WAAW,GAAC,IAAI,YACP,GAAG,KAAE,IAAI,GAAC,OAAO,GAAC,QAAQ,IAAI,GAAC,OAAO,CAAC,cAChD,MAAM,GAAC,MAAM,GAAC,YAAY,GAAC,YAAY,iBAGmC;AAQ9E,4BAJI,cAAc,kBAEZ,cAAc,CAE+B;AAQnD,8CALI,GAAG,SACH,GAAG,aACH,OAAO,aACP,OAAO,eAEiH;AAM5H,mDAHI,GAAG,aACH,OAAO,eAEuF;AAMlG,mDAHI,GAAG,aACH,OAAO,eAEuF;;;;;OAhF3F,GAAG;;;;OACH,GAAG"}
@@ -1,2 +1,3 @@
1
1
  export function testRetrieveElements(): Promise<void>;
2
+ export function testBlocked(): Promise<void>;
2
3
  //# sourceMappingURL=indexeddb.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexeddb.test.d.ts","sourceRoot":"","sources":["../indexeddb.test.js"],"names":[],"mappings":"AAyBO,sDAoEN"}
1
+ {"version":3,"file":"indexeddb.test.d.ts","sourceRoot":"","sources":["../indexeddb.test.js"],"names":[],"mappings":"AAyBO,sDAoEN;AAGM,6CAWN"}
package/dist/testing.cjs CHANGED
@@ -561,6 +561,20 @@ const fails = f => {
561
561
  fail('Expected this to fail');
562
562
  };
563
563
 
564
+ /**
565
+ * @param {function():Promise<any>} f
566
+ * @throws {TestError}
567
+ */
568
+ const failsAsync = async f => {
569
+ try {
570
+ await f();
571
+ } catch (_err) {
572
+ logging.print(logging.GREEN, '⇖ This Error was expected');
573
+ return
574
+ }
575
+ fail('Expected this to fail');
576
+ };
577
+
564
578
  /**
565
579
  * @param {Object<string, Object<string, function(TestCase):void|Promise<any>>>} tests
566
580
  */
@@ -645,6 +659,7 @@ exports.envSeed = envSeed;
645
659
  exports.extensive = extensive;
646
660
  exports.fail = fail;
647
661
  exports.fails = fails;
662
+ exports.failsAsync = failsAsync;
648
663
  exports.group = group;
649
664
  exports.groupAsync = groupAsync;
650
665
  exports.info = info;