{"version":3,"sources":["meteor://💻app/packages/random/main_server.js","meteor://💻app/packages/random/AbstractRandomGenerator.js","meteor://💻app/packages/random/AleaRandomGenerator.js","meteor://💻app/packages/random/NodeRandomGenerator.js","meteor://💻app/packages/random/createAleaGenerator.js","meteor://💻app/packages/random/createRandom.js"],"names":["module","export","Random","NodeRandomGenerator","link","default","v","createRandom","RandomGenerator","Meteor","UNMISTAKABLE_CHARS","BASE64_CHARS","fraction","Error","hexString","digits","_randomString","charsCount","alphabet","result","i","choice","id","undefined","secret","arrayOrString","index","Math","floor","length","substr","AleaRandomGenerator","Alea","seeds","Mash","n","mash","data","toString","charCodeAt","h","version","s0","s1","s2","c","Date","random","t","uint32","fract53","args","constructor","alea","crypto","numerator","Number","parseInt","numBytes","ceil","bytes","randomBytes","e","pseudoRandomBytes","substring","createAleaGenerator","height","window","innerHeight","document","documentElement","clientHeight","body","width","innerWidth","clientWidth","agent","navigator","userAgent","createAleaGeneratorWithGeneratedSeed","generator","createWithSeeds","insecure"],"mappings":"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","file":"/packages/random.js","sourcesContent":["// We use cryptographically strong PRNGs (crypto.getRandomBytes())\n// When using crypto.getRandomValues(), our primitive is hexString(),\n// from which we construct fraction().\n\nimport NodeRandomGenerator from './NodeRandomGenerator';\nimport createRandom from './createRandom';\n\nexport const Random = createRandom(new NodeRandomGenerator());\n","// We use cryptographically strong PRNGs (crypto.getRandomBytes() on the server,\n// window.crypto.getRandomValues() in the browser) when available. If these\n// PRNGs fail, we fall back to the Alea PRNG, which is not cryptographically\n// strong, and we seed it with various sources such as the date, Math.random,\n// and window size on the client. When using crypto.getRandomValues(), our\n// primitive is hexString(), from which we construct fraction(). When using\n// window.crypto.getRandomValues() or alea, the primitive is fraction and we use\n// that to construct hex string.\n\nimport { Meteor } from 'meteor/meteor';\n\nconst UNMISTAKABLE_CHARS = '23456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijkmnopqrstuvwxyz';\nconst BASE64_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' +\n '0123456789-_';\n\n// `type` is one of `RandomGenerator.Type` as defined below.\n//\n// options:\n// - seeds: (required, only for RandomGenerator.Type.ALEA) an array\n// whose items will be `toString`ed and used as the seed to the Alea\n// algorithm\nexport default class RandomGenerator {\n\n /**\n * @name Random.fraction\n * @summary Return a number between 0 and 1, like `Math.random`.\n * @locus Anywhere\n */\n fraction () {\n throw new Error(`Unknown random generator type`);\n }\n\n /**\n * @name Random.hexString\n * @summary Return a random string of `n` hexadecimal digits.\n * @locus Anywhere\n * @param {Number} n Length of the string\n */\n hexString (digits) {\n return this._randomString(digits, '0123456789abcdef');\n }\n\n _randomString (charsCount, alphabet) {\n let result = '';\n for (let i = 0; i < charsCount; i++) {\t\n result += this.choice(alphabet);\n }\n return result;\n }\n\n /**\n * @name Random.id\n * @summary Return a unique identifier, such as `\"Jjwjg6gouWLXhMGKW\"`, that is\n * likely to be unique in the whole world.\n * @locus Anywhere\n * @param {Number} [n] Optional length of the identifier in characters\n * (defaults to 17)\n */\n id (charsCount) {\n // 17 characters is around 96 bits of entropy, which is the amount of\n // state in the Alea PRNG.\n if (charsCount === undefined) {\n charsCount = 17;\n }\n\n return this._randomString(charsCount, UNMISTAKABLE_CHARS);\n }\n\n /**\n * @name Random.secret\n * @summary Return a random string of printable characters with 6 bits of\n * entropy per character. Use `Random.secret` for security-critical secrets\n * that are intended for machine, rather than human, consumption.\n * @locus Anywhere\n * @param {Number} [n] Optional length of the secret string (defaults to 43\n * characters, or 256 bits of entropy)\n */\n secret (charsCount) {\n // Default to 256 bits of entropy, or 43 characters at 6 bits per\n // character.\n if (charsCount === undefined) {\n charsCount = 43;\n }\n\n return this._randomString(charsCount, BASE64_CHARS);\n }\n\n /**\n * @name Random.choice\n * @summary Return a random element of the given array or string.\n * @locus Anywhere\n * @param {Array|String} arrayOrString Array or string to choose from\n */\n choice (arrayOrString) {\n const index = Math.floor(this.fraction() * arrayOrString.length);\n if (typeof arrayOrString === 'string') {\n return arrayOrString.substr(index, 1);\n }\n return arrayOrString[index];\n }\n}\n","import RandomGenerator from './AbstractRandomGenerator';\n\n// Alea PRNG, which is not cryptographically strong\n// see http://baagoe.org/en/wiki/Better_random_numbers_for_javascript\n// for a full discussion and Alea implementation.\nfunction Alea(seeds) {\n function Mash() {\n let n = 0xefc8249d;\n\n const mash = (data) => {\n data = data.toString();\n for (let i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n let h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n mash.version = 'Mash 0.9';\n return mash;\n }\n\n let s0 = 0;\n let s1 = 0;\n let s2 = 0;\n let c = 1;\n if (seeds.length === 0) {\n seeds = [+new Date];\n }\n let mash = Mash();\n s0 = mash(' ');\n s1 = mash(' ');\n s2 = mash(' ');\n\n for (let i = 0; i < seeds.length; i++) {\n s0 -= mash(seeds[i]);\n if (s0 < 0) {\n s0 += 1;\n }\n s1 -= mash(seeds[i]);\n if (s1 < 0) {\n s1 += 1;\n }\n s2 -= mash(seeds[i]);\n if (s2 < 0) {\n s2 += 1;\n }\n }\n mash = null;\n\n const random = () => {\n const t = (2091639 * s0) + (c * 2.3283064365386963e-10); // 2^-32\n s0 = s1;\n s1 = s2;\n return s2 = t - (c = t | 0);\n };\n\n random.uint32 = () => random() * 0x100000000; // 2^32\n random.fract53 = () => random() +\n ((random() * 0x200000 | 0) * 1.1102230246251565e-16); // 2^-53\n\n random.version = 'Alea 0.9';\n random.args = seeds;\n return random;\n}\n\n// options:\n// - seeds: an array\n// whose items will be `toString`ed and used as the seed to the Alea\n// algorithm\nexport default class AleaRandomGenerator extends RandomGenerator {\n constructor ({ seeds = [] } = {}) {\n super();\n if (!seeds) {\n throw new Error('No seeds were provided for Alea PRNG');\n }\n this.alea = Alea(seeds);\n }\n\n /**\n * @name Random.fraction\n * @summary Return a number between 0 and 1, like `Math.random`.\n * @locus Anywhere\n */\n fraction () {\n return this.alea();\n }\n}\n","import crypto from 'crypto';\nimport RandomGenerator from './AbstractRandomGenerator';\n\nexport default class NodeRandomGenerator extends RandomGenerator {\n /**\n * @name Random.fraction\n * @summary Return a number between 0 and 1, like `Math.random`.\n * @locus Anywhere\n */\n fraction () {\n const numerator = Number.parseInt(this.hexString(8), 16);\n return numerator * 2.3283064365386963e-10; // 2^-3;\n }\n\n /**\n * @name Random.hexString\n * @summary Return a random string of `n` hexadecimal digits.\n * @locus Anywhere\n * @param {Number} n Length of the string\n */\n hexString (digits) {\n const numBytes = Math.ceil(digits / 2);\n let bytes;\n // Try to get cryptographically strong randomness. Fall back to\n // non-cryptographically strong if not available.\n try {\n bytes = crypto.randomBytes(numBytes);\n } catch (e) {\n // XXX should re-throw any error except insufficient entropy\n bytes = crypto.pseudoRandomBytes(numBytes);\n }\n const result = bytes.toString('hex');\n // If the number of digits is odd, we'll have generated an extra 4 bits\n // of randomness, so we need to trim the last digit.\n return result.substring(0, digits);\n }\n}\n","import AleaRandomGenerator from './AleaRandomGenerator';\n\n// instantiate RNG. Heuristically collect entropy from various sources when a\n// cryptographic PRNG isn't available.\n\n// client sources\nconst height = (typeof window !== 'undefined' && window.innerHeight) ||\n (typeof document !== 'undefined'\n && document.documentElement\n && document.documentElement.clientHeight) ||\n (typeof document !== 'undefined'\n && document.body\n && document.body.clientHeight) ||\n 1;\n\nconst width = (typeof window !== 'undefined' && window.innerWidth) ||\n (typeof document !== 'undefined'\n && document.documentElement\n && document.documentElement.clientWidth) ||\n (typeof document !== 'undefined'\n && document.body\n && document.body.clientWidth) ||\n 1;\n\nconst agent = (typeof navigator !== 'undefined' && navigator.userAgent) || '';\n\nexport default function createAleaGenerator() {\n return new AleaRandomGenerator({\n seeds: [new Date, height, width, agent, Math.random()],\n });\n}\n","import AleaRandomGenerator from './AleaRandomGenerator'\nimport createAleaGeneratorWithGeneratedSeed from './createAleaGenerator';\n\nexport default function createRandom(generator) {\n // Create a non-cryptographically secure PRNG with a given seed (using\n // the Alea algorithm)\n generator.createWithSeeds = (...seeds) => {\n if (seeds.length === 0) {\n throw new Error('No seeds were provided');\n }\n return new AleaRandomGenerator({ seeds });\n };\n\n // Used like `Random`, but much faster and not cryptographically\n // secure\n generator.insecure = createAleaGeneratorWithGeneratedSeed();\n\n return generator;\n}\n"]}