@pezkuwi/x-randomvalues 14.0.5 → 14.0.6

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 (68) hide show
  1. package/README.md +1 -1
  2. package/build/README.md +3 -0
  3. package/build/browser.js +6 -0
  4. package/build/cjs/browser.d.ts +3 -0
  5. package/build/cjs/browser.js +11 -0
  6. package/build/cjs/fallback.js +18 -0
  7. package/build/cjs/node.js +13 -0
  8. package/build/cjs/packageInfo.js +4 -0
  9. package/build/cjs/react-native.js +35 -0
  10. package/build/cjs/shim.js +5 -0
  11. package/build/fallback.d.ts +1 -0
  12. package/build/fallback.js +15 -0
  13. package/build/node.d.ts +3 -0
  14. package/build/node.js +7 -0
  15. package/build/package.json +197 -0
  16. package/build/packageInfo.d.ts +6 -0
  17. package/build/packageInfo.js +1 -0
  18. package/build/react-native.d.ts +12 -0
  19. package/build/react-native.js +31 -0
  20. package/build/shim.d.ts +1 -0
  21. package/build/shim.js +3 -0
  22. package/build-deno/README.md +3 -0
  23. package/build-deno/browser.ts +10 -0
  24. package/build-deno/fallback.ts +22 -0
  25. package/build-deno/mod.ts +2 -0
  26. package/build-deno/node.ts +12 -0
  27. package/build-deno/packageInfo.ts +3 -0
  28. package/build-deno/react-native.ts +57 -0
  29. package/build-deno/shim.ts +5 -0
  30. package/{cjs → build-tsc-cjs}/packageInfo.js +1 -1
  31. package/{packageInfo.js → build-tsc-esm/packageInfo.js} +1 -1
  32. package/package.json +14 -176
  33. package/src/browser.ts +14 -0
  34. package/src/fallback.spec.ts +22 -0
  35. package/src/fallback.ts +28 -0
  36. package/src/mod.ts +4 -0
  37. package/src/node.ts +17 -0
  38. package/src/packageInfo.ts +6 -0
  39. package/src/react-native.ts +64 -0
  40. package/src/shim.ts +7 -0
  41. package/tsconfig.build.json +15 -0
  42. package/tsconfig.build.tsbuildinfo +1 -0
  43. package/tsconfig.spec.json +17 -0
  44. package/tsconfig.spec.tsbuildinfo +1 -0
  45. /package/{LICENSE → build/LICENSE} +0 -0
  46. /package/{cjs → build}/browser.d.ts +0 -0
  47. /package/{fallback.d.ts → build/cjs/fallback.d.ts} +0 -0
  48. /package/{node.d.ts → build/cjs/node.d.ts} +0 -0
  49. /package/{cjs → build/cjs}/package.json +0 -0
  50. /package/{packageInfo.d.ts → build/cjs/packageInfo.d.ts} +0 -0
  51. /package/{react-native.d.ts → build/cjs/react-native.d.ts} +0 -0
  52. /package/{shim.d.ts → build/cjs/shim.d.ts} +0 -0
  53. /package/{browser.d.ts → build-tsc/browser.d.ts} +0 -0
  54. /package/{cjs → build-tsc}/fallback.d.ts +0 -0
  55. /package/{cjs → build-tsc}/node.d.ts +0 -0
  56. /package/{cjs → build-tsc}/packageInfo.d.ts +0 -0
  57. /package/{cjs → build-tsc}/react-native.d.ts +0 -0
  58. /package/{cjs → build-tsc}/shim.d.ts +0 -0
  59. /package/{cjs → build-tsc-cjs}/browser.js +0 -0
  60. /package/{cjs → build-tsc-cjs}/fallback.js +0 -0
  61. /package/{cjs → build-tsc-cjs}/node.js +0 -0
  62. /package/{cjs → build-tsc-cjs}/react-native.js +0 -0
  63. /package/{cjs → build-tsc-cjs}/shim.js +0 -0
  64. /package/{browser.js → build-tsc-esm/browser.js} +0 -0
  65. /package/{fallback.js → build-tsc-esm/fallback.js} +0 -0
  66. /package/{node.js → build-tsc-esm/node.js} +0 -0
  67. /package/{react-native.js → build-tsc-esm/react-native.js} +0 -0
  68. /package/{shim.js → build-tsc-esm/shim.js} +0 -0
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # @polkadot/x-randomvalues
1
+ # @pezkuwi/x-randomvalues
2
2
 
3
3
  A cross-environment `window.crypto.getRandomValues`.
@@ -0,0 +1,3 @@
1
+ # @pezkuwi/x-randomvalues
2
+
3
+ A cross-environment `window.crypto.getRandomValues`.
@@ -0,0 +1,6 @@
1
+ import { xglobal } from '@pezkuwi/x-global';
2
+ export { packageInfo } from './packageInfo.js';
3
+ export const crypto = xglobal.crypto;
4
+ export function getRandomValues(arr) {
5
+ return crypto.getRandomValues(arr);
6
+ }
@@ -0,0 +1,3 @@
1
+ export { packageInfo } from './packageInfo.js';
2
+ export declare const crypto: Crypto;
3
+ export declare function getRandomValues<T extends Uint8Array>(arr: T): T;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.crypto = exports.packageInfo = void 0;
4
+ exports.getRandomValues = getRandomValues;
5
+ const x_global_1 = require("@pezkuwi/x-global");
6
+ var packageInfo_js_1 = require("./packageInfo.js");
7
+ Object.defineProperty(exports, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
8
+ exports.crypto = x_global_1.xglobal.crypto;
9
+ function getRandomValues(arr) {
10
+ return exports.crypto.getRandomValues(arr);
11
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.insecureRandomValues = insecureRandomValues;
4
+ let warned = false;
5
+ function insecureRandomValues(arr) {
6
+ if (!warned) {
7
+ console.warn('Using an insecure random number generator, this should only happen when running in a debugger without support for crypto');
8
+ warned = true;
9
+ }
10
+ let r = 0;
11
+ for (let i = 0, count = arr.length; i < count; i++) {
12
+ if ((i & 0b11) === 0) {
13
+ r = Math.random() * 0x100000000;
14
+ }
15
+ arr[i] = (r >>> ((i & 0b11) << 3)) & 0xff;
16
+ }
17
+ return arr;
18
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.crypto = exports.packageInfo = void 0;
4
+ exports.getRandomValues = getRandomValues;
5
+ const tslib_1 = require("tslib");
6
+ const node_crypto_1 = tslib_1.__importDefault(require("node:crypto"));
7
+ const x_global_1 = require("@pezkuwi/x-global");
8
+ var packageInfo_js_1 = require("./packageInfo.js");
9
+ Object.defineProperty(exports, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
10
+ exports.crypto = (0, x_global_1.extractGlobal)('crypto', node_crypto_1.default.webcrypto);
11
+ function getRandomValues(output) {
12
+ return exports.crypto.getRandomValues(output);
13
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.packageInfo = void 0;
4
+ exports.packageInfo = { name: '@pezkuwi/x-randomvalues', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '14.0.6' };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.crypto = exports.getRandomValues = exports.packageInfo = void 0;
4
+ const react_native_1 = require("react-native");
5
+ const base64_1 = require("@pezkuwi/wasm-util/base64");
6
+ const x_global_1 = require("@pezkuwi/x-global");
7
+ const browser_js_1 = require("./browser.js");
8
+ var packageInfo_js_1 = require("./packageInfo.js");
9
+ Object.defineProperty(exports, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
10
+ /**
11
+ * @internal
12
+ *
13
+ * A getRandomValues util that detects and uses the available RN
14
+ * random utiliy generation functions.
15
+ **/
16
+ function getRandomValuesRn(output) {
17
+ if (!react_native_1.NativeModules['ExpoRandom'] && !react_native_1.NativeModules.RNGetRandomValues) {
18
+ throw new Error('No secure random number generator available. This environment does not support crypto.getRandomValues and no React Native secure RNG module is available.');
19
+ }
20
+ return (0, base64_1.base64Decode)(react_native_1.NativeModules.RNGetRandomValues
21
+ ? react_native_1.NativeModules.RNGetRandomValues.getRandomBase64(output.length)
22
+ : react_native_1.NativeModules.ExpoRandom.getRandomBase64String(output.length), output);
23
+ }
24
+ const hasNativeRNModules = !!react_native_1.NativeModules['ExpoRandom'] || !!react_native_1.NativeModules.RNGetRandomValues;
25
+ const hasNativeCrypto = typeof x_global_1.xglobal.crypto === 'object' && typeof x_global_1.xglobal.crypto.getRandomValues === 'function';
26
+ exports.getRandomValues = (hasNativeRNModules
27
+ ? getRandomValuesRn
28
+ : hasNativeCrypto
29
+ ? browser_js_1.getRandomValues
30
+ : () => {
31
+ throw new Error('No secure random number generator available. This environment does not support crypto.getRandomValues.');
32
+ });
33
+ exports.crypto = (exports.getRandomValues === browser_js_1.getRandomValues
34
+ ? browser_js_1.crypto
35
+ : { getRandomValues: exports.getRandomValues });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const x_global_1 = require("@pezkuwi/x-global");
4
+ const x_randomvalues_1 = require("@pezkuwi/x-randomvalues");
5
+ (0, x_global_1.exposeGlobal)('crypto', x_randomvalues_1.crypto);
@@ -0,0 +1 @@
1
+ export declare function insecureRandomValues<T extends Uint8Array>(arr: T): T;
@@ -0,0 +1,15 @@
1
+ let warned = false;
2
+ export function insecureRandomValues(arr) {
3
+ if (!warned) {
4
+ console.warn('Using an insecure random number generator, this should only happen when running in a debugger without support for crypto');
5
+ warned = true;
6
+ }
7
+ let r = 0;
8
+ for (let i = 0, count = arr.length; i < count; i++) {
9
+ if ((i & 0b11) === 0) {
10
+ r = Math.random() * 0x100000000;
11
+ }
12
+ arr[i] = (r >>> ((i & 0b11) << 3)) & 0xff;
13
+ }
14
+ return arr;
15
+ }
@@ -0,0 +1,3 @@
1
+ export { packageInfo } from './packageInfo.js';
2
+ export declare const crypto: Crypto;
3
+ export declare function getRandomValues<T extends Uint8Array>(output: T): T;
package/build/node.js ADDED
@@ -0,0 +1,7 @@
1
+ import nodeCrypto from 'node:crypto';
2
+ import { extractGlobal } from '@pezkuwi/x-global';
3
+ export { packageInfo } from './packageInfo.js';
4
+ export const crypto = /*#__PURE__*/ extractGlobal('crypto', nodeCrypto.webcrypto);
5
+ export function getRandomValues(output) {
6
+ return crypto.getRandomValues(output);
7
+ }
@@ -0,0 +1,197 @@
1
+ {
2
+ "author": "Jaco Greeff <jacogr@gmail.com>",
3
+ "bugs": "https://github.com/pezkuwichain/pezkuwi-common/issues",
4
+ "description": "A cross-environment window.crypto.getRandomValues replacement",
5
+ "engines": {
6
+ "node": ">=18"
7
+ },
8
+ "homepage": "https://github.com/pezkuwichain/pezkuwi-common/tree/master/packages/x-randomvalues#readme",
9
+ "license": "Apache-2.0",
10
+ "name": "@pezkuwi/x-randomvalues",
11
+ "repository": {
12
+ "directory": "packages/x-randomvalues",
13
+ "type": "git",
14
+ "url": "https://github.com/pezkuwichain/pezkuwi-common.git"
15
+ },
16
+ "sideEffects": false,
17
+ "type": "module",
18
+ "version": "14.0.6",
19
+ "main": "./cjs/node.js",
20
+ "module": "./node.js",
21
+ "browser": "./cjs/browser.js",
22
+ "react-native": "./cjs/react-native.js",
23
+ "types": "./node.d.ts",
24
+ "exports": {
25
+ "./cjs/package.json": "./cjs/package.json",
26
+ "./cjs/*": "./cjs/*.js",
27
+ ".": {
28
+ "types": "./node.d.ts",
29
+ "react-native": {
30
+ "module": {
31
+ "types": "./react-native.d.ts",
32
+ "default": "./react-native.js"
33
+ },
34
+ "require": {
35
+ "types": "./cjs/react-native.d.ts",
36
+ "default": "./cjs/react-native.js"
37
+ },
38
+ "default": {
39
+ "types": "./react-native.d.ts",
40
+ "default": "./react-native.js"
41
+ }
42
+ },
43
+ "browser": {
44
+ "module": {
45
+ "types": "./browser.d.ts",
46
+ "default": "./browser.js"
47
+ },
48
+ "require": {
49
+ "types": "./cjs/browser.d.ts",
50
+ "default": "./cjs/browser.js"
51
+ },
52
+ "default": {
53
+ "types": "./browser.d.ts",
54
+ "default": "./browser.js"
55
+ }
56
+ },
57
+ "node": {
58
+ "module": {
59
+ "types": "./node.d.ts",
60
+ "default": "./node.js"
61
+ },
62
+ "require": {
63
+ "types": "./cjs/node.d.ts",
64
+ "default": "./cjs/node.js"
65
+ },
66
+ "default": {
67
+ "types": "./node.d.ts",
68
+ "default": "./node.js"
69
+ }
70
+ }
71
+ },
72
+ "./browser": {
73
+ "module": {
74
+ "types": "./browser.d.ts",
75
+ "default": "./browser.js"
76
+ },
77
+ "require": {
78
+ "types": "./cjs/browser.d.ts",
79
+ "default": "./cjs/browser.js"
80
+ },
81
+ "default": {
82
+ "types": "./browser.d.ts",
83
+ "default": "./browser.js"
84
+ }
85
+ },
86
+ "./fallback": {
87
+ "module": {
88
+ "types": "./fallback.d.ts",
89
+ "default": "./fallback.js"
90
+ },
91
+ "require": {
92
+ "types": "./cjs/fallback.d.ts",
93
+ "default": "./cjs/fallback.js"
94
+ },
95
+ "default": {
96
+ "types": "./fallback.d.ts",
97
+ "default": "./fallback.js"
98
+ }
99
+ },
100
+ "./node": {
101
+ "module": {
102
+ "types": "./node.d.ts",
103
+ "default": "./node.js"
104
+ },
105
+ "require": {
106
+ "types": "./cjs/node.d.ts",
107
+ "default": "./cjs/node.js"
108
+ },
109
+ "default": {
110
+ "types": "./node.d.ts",
111
+ "default": "./node.js"
112
+ }
113
+ },
114
+ "./package.json": {
115
+ "require": "./cjs/package.json",
116
+ "default": "./package.json"
117
+ },
118
+ "./packageInfo.js": {
119
+ "module": {
120
+ "types": "./packageInfo.d.ts",
121
+ "default": "./packageInfo.js"
122
+ },
123
+ "require": {
124
+ "types": "./cjs/packageInfo.d.ts",
125
+ "default": "./cjs/packageInfo.js"
126
+ },
127
+ "default": {
128
+ "types": "./packageInfo.d.ts",
129
+ "default": "./packageInfo.js"
130
+ }
131
+ },
132
+ "./packageInfo": {
133
+ "module": {
134
+ "types": "./packageInfo.d.ts",
135
+ "default": "./packageInfo.js"
136
+ },
137
+ "require": {
138
+ "types": "./cjs/packageInfo.d.ts",
139
+ "default": "./cjs/packageInfo.js"
140
+ },
141
+ "default": {
142
+ "types": "./packageInfo.d.ts",
143
+ "default": "./packageInfo.js"
144
+ }
145
+ },
146
+ "./react-native": {
147
+ "module": {
148
+ "types": "./react-native.d.ts",
149
+ "default": "./react-native.js"
150
+ },
151
+ "require": {
152
+ "types": "./cjs/react-native.d.ts",
153
+ "default": "./cjs/react-native.js"
154
+ },
155
+ "default": {
156
+ "types": "./react-native.d.ts",
157
+ "default": "./react-native.js"
158
+ }
159
+ },
160
+ "./shim.js": {
161
+ "module": {
162
+ "types": "./shim.d.ts",
163
+ "default": "./shim.js"
164
+ },
165
+ "require": {
166
+ "types": "./cjs/shim.d.ts",
167
+ "default": "./cjs/shim.js"
168
+ },
169
+ "default": {
170
+ "types": "./shim.d.ts",
171
+ "default": "./shim.js"
172
+ }
173
+ },
174
+ "./shim": {
175
+ "module": {
176
+ "types": "./shim.d.ts",
177
+ "default": "./shim.js"
178
+ },
179
+ "require": {
180
+ "types": "./cjs/shim.d.ts",
181
+ "default": "./cjs/shim.js"
182
+ },
183
+ "default": {
184
+ "types": "./shim.d.ts",
185
+ "default": "./shim.js"
186
+ }
187
+ }
188
+ },
189
+ "dependencies": {
190
+ "@pezkuwi/x-global": "14.0.1",
191
+ "tslib": "^2.8.0"
192
+ },
193
+ "peerDependencies": {
194
+ "@pezkuwi/util": "14.0.1",
195
+ "@pezkuwi/wasm-util": "*"
196
+ }
197
+ }
@@ -0,0 +1,6 @@
1
+ export declare const packageInfo: {
2
+ name: string;
3
+ path: string;
4
+ type: string;
5
+ version: string;
6
+ };
@@ -0,0 +1 @@
1
+ export const packageInfo = { name: '@pezkuwi/x-randomvalues', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '14.0.6' };
@@ -0,0 +1,12 @@
1
+ export { packageInfo } from './packageInfo.js';
2
+ /**
3
+ * @internal
4
+ *
5
+ * A getRandomValues util that detects and uses the available RN
6
+ * random utiliy generation functions.
7
+ **/
8
+ declare function getRandomValuesRn(output: Uint8Array): Uint8Array;
9
+ export declare const getRandomValues: typeof getRandomValuesRn;
10
+ export declare const crypto: Crypto | {
11
+ getRandomValues: typeof getRandomValuesRn;
12
+ };
@@ -0,0 +1,31 @@
1
+ import { NativeModules } from 'react-native';
2
+ import { base64Decode } from '@pezkuwi/wasm-util/base64';
3
+ import { xglobal } from '@pezkuwi/x-global';
4
+ import { crypto as cryptoBrowser, getRandomValues as getRandomValuesBrowser } from './browser.js';
5
+ export { packageInfo } from './packageInfo.js';
6
+ /**
7
+ * @internal
8
+ *
9
+ * A getRandomValues util that detects and uses the available RN
10
+ * random utiliy generation functions.
11
+ **/
12
+ function getRandomValuesRn(output) {
13
+ if (!NativeModules['ExpoRandom'] && !NativeModules.RNGetRandomValues) {
14
+ throw new Error('No secure random number generator available. This environment does not support crypto.getRandomValues and no React Native secure RNG module is available.');
15
+ }
16
+ return base64Decode(NativeModules.RNGetRandomValues
17
+ ? NativeModules.RNGetRandomValues.getRandomBase64(output.length)
18
+ : NativeModules.ExpoRandom.getRandomBase64String(output.length), output);
19
+ }
20
+ const hasNativeRNModules = !!NativeModules['ExpoRandom'] || !!NativeModules.RNGetRandomValues;
21
+ const hasNativeCrypto = typeof xglobal.crypto === 'object' && typeof xglobal.crypto.getRandomValues === 'function';
22
+ export const getRandomValues = (hasNativeRNModules
23
+ ? getRandomValuesRn
24
+ : hasNativeCrypto
25
+ ? getRandomValuesBrowser
26
+ : () => {
27
+ throw new Error('No secure random number generator available. This environment does not support crypto.getRandomValues.');
28
+ });
29
+ export const crypto = (getRandomValues === getRandomValuesBrowser
30
+ ? cryptoBrowser
31
+ : { getRandomValues });
@@ -0,0 +1 @@
1
+ export {};
package/build/shim.js ADDED
@@ -0,0 +1,3 @@
1
+ import { exposeGlobal } from '@pezkuwi/x-global';
2
+ import { crypto } from '@pezkuwi/x-randomvalues';
3
+ exposeGlobal('crypto', crypto);
@@ -0,0 +1,3 @@
1
+ # @pezkuwi/x-randomvalues
2
+
3
+ A cross-environment `window.crypto.getRandomValues`.
@@ -0,0 +1,10 @@
1
+
2
+ import { xglobal } from 'https://deno.land/x/pezkuwi/x-global/mod.ts';
3
+
4
+ export { packageInfo } from './packageInfo.ts';
5
+
6
+ export const crypto = xglobal.crypto;
7
+
8
+ export function getRandomValues <T extends Uint8Array> (arr: T): T {
9
+ return crypto.getRandomValues(arr);
10
+ }
@@ -0,0 +1,22 @@
1
+
2
+
3
+ let warned = false;
4
+
5
+ export function insecureRandomValues <T extends Uint8Array> (arr: T): T {
6
+ if (!warned) {
7
+ console.warn('Using an insecure random number generator, this should only happen when running in a debugger without support for crypto');
8
+ warned = true;
9
+ }
10
+
11
+ let r = 0;
12
+
13
+ for (let i = 0, count = arr.length; i < count; i++) {
14
+ if ((i & 0b11) === 0) {
15
+ r = Math.random() * 0x100000000;
16
+ }
17
+
18
+ arr[i] = (r >>> ((i & 0b11) << 3)) & 0xff;
19
+ }
20
+
21
+ return arr;
22
+ }
@@ -0,0 +1,2 @@
1
+
2
+ export * from './browser.ts';
@@ -0,0 +1,12 @@
1
+
2
+ import nodeCrypto from 'node:crypto';
3
+
4
+ import { extractGlobal } from 'https://deno.land/x/pezkuwi/x-global/mod.ts';
5
+
6
+ export { packageInfo } from './packageInfo.ts';
7
+
8
+ export const crypto = /*#__PURE__*/ extractGlobal('crypto', nodeCrypto.webcrypto);
9
+
10
+ export function getRandomValues <T extends Uint8Array> (output: T): T {
11
+ return crypto.getRandomValues(output);
12
+ }
@@ -0,0 +1,3 @@
1
+
2
+
3
+ export const packageInfo = { name: '@pezkuwi/x-randomvalues', path: new URL(import.meta.url).pathname, type: 'deno', version: '14.0.6' };
@@ -0,0 +1,57 @@
1
+
2
+
3
+ import { NativeModules } from 'https://esm.sh/react-native';
4
+
5
+ import { base64Decode } from 'https://deno.land/x/pezkuwi/wasm-util/base64.ts';
6
+ import { xglobal } from 'https://deno.land/x/pezkuwi/x-global/mod.ts';
7
+
8
+ import { crypto as cryptoBrowser, getRandomValues as getRandomValuesBrowser } from './browser.ts';
9
+
10
+ export { packageInfo } from './packageInfo.ts';
11
+
12
+ interface RNExt {
13
+ ExpoRandom: {
14
+ getRandomBase64String: (length: number) => string;
15
+ };
16
+ RNGetRandomValues: {
17
+ getRandomBase64: (length: number) => string;
18
+ }
19
+ }
20
+
21
+ /**
22
+ * @internal
23
+ *
24
+ * A getRandomValues util that detects and uses the available RN
25
+ * random utiliy generation functions.
26
+ **/
27
+ function getRandomValuesRn (output: Uint8Array): Uint8Array {
28
+ if (!NativeModules['ExpoRandom'] && !(NativeModules as RNExt).RNGetRandomValues) {
29
+ throw new Error('No secure random number generator available. This environment does not support crypto.getRandomValues and no React Native secure RNG module is available.');
30
+ }
31
+
32
+ return base64Decode(
33
+ (NativeModules as RNExt).RNGetRandomValues
34
+ ? (NativeModules as RNExt).RNGetRandomValues.getRandomBase64(output.length)
35
+ : (NativeModules as RNExt).ExpoRandom.getRandomBase64String(output.length),
36
+ output
37
+ );
38
+ }
39
+
40
+ const hasNativeRNModules = !!NativeModules['ExpoRandom'] || !!(NativeModules as RNExt).RNGetRandomValues;
41
+ const hasNativeCrypto = typeof xglobal.crypto === 'object' && typeof xglobal.crypto.getRandomValues === 'function';
42
+
43
+ export const getRandomValues = (
44
+ hasNativeRNModules
45
+ ? getRandomValuesRn
46
+ : hasNativeCrypto
47
+ ? getRandomValuesBrowser
48
+ : () => {
49
+ throw new Error('No secure random number generator available. This environment does not support crypto.getRandomValues.');
50
+ }
51
+ );
52
+
53
+ export const crypto = (
54
+ getRandomValues === getRandomValuesBrowser
55
+ ? cryptoBrowser
56
+ : { getRandomValues }
57
+ );
@@ -0,0 +1,5 @@
1
+
2
+ import { exposeGlobal } from 'https://deno.land/x/pezkuwi/x-global/mod.ts';
3
+ import { crypto } from 'https://deno.land/x/pezkuwi/x-randomvalues/mod.ts';
4
+
5
+ exposeGlobal('crypto', crypto);
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.packageInfo = void 0;
4
- exports.packageInfo = { name: '@pezkuwi/x-randomvalues', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '14.0.1' };
4
+ exports.packageInfo = { name: '@pezkuwi/x-randomvalues', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '14.0.6' };
@@ -1 +1 @@
1
- export const packageInfo = { name: '@pezkuwi/x-randomvalues', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '14.0.1' };
1
+ export const packageInfo = { name: '@pezkuwi/x-randomvalues', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '14.0.6' };