UNPKG

2.41 kBJavaScriptView Raw
1'use strict';
2
3var packJS = require('./pack.js');
4var StringIO = require('./stringio.js');
5var BigNumber = require('bignumber.js');
6BigNumber.config({
7 DECIMAL_PLACES: 43,
8 EXPONENTIAL_AT: 50
9});
10
11class ByteReader {
12 constructor(io) {
13 this.io = io;
14 }
15
16 get read_int64() {
17 var temp = this.io.read(8);
18 var unpacked = packJS.unpack("C*", temp);
19 var result = new BigNumber(0);
20 Object.keys(unpacked).forEach(function(key) {
21 var index = key - 1;
22 var byte = unpacked[key];
23
24 var a = new BigNumber(256).toPower(new BigNumber(index));
25 var b = new BigNumber(byte).times(a);
26
27 result = result.plus(b)
28 });
29 return result.toString();
30 }
31
32 get read_short() {
33 var temp = this.io.read(2);
34 var unpacked = packJS.unpack("S*", temp);
35 return unpacked[''].toString();
36 }
37}
38
39class SharecodeDecoder {
40 constructor(code) {
41 this.code = this.sanitize_code(code);
42 this.originalCode = code;
43
44 this.DICTIONARY = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefhijkmnopqrstuvwxyz23456789";
45 this.DICTIONARY_LENGTH = this.DICTIONARY.length
46 }
47
48 decode() {
49 var reader = new ByteReader(this.io);
50 var matchId = reader.read_int64;
51 var outcomeId = reader.read_int64;
52 var tokenId = reader.read_short;
53
54 return {
55 matchId: matchId,
56 outcomeId: outcomeId,
57 tokenId: tokenId
58 };
59 }
60
61 sanitize_code(str) {
62 return str.replace(/CSGO|\-/g, '');
63 }
64
65 get io() {
66 return new StringIO.StringIO(this.decoded_code);
67 }
68
69 get decoded_code() {
70 var self = this;
71 var result = new Array(18).fill(0);
72 var reversed = this.code.split('').reverse();
73 reversed.forEach(function(char, index) {
74 var addval = self.DICTIONARY.indexOf(char);
75 var tmp = new Array(18).fill(0);
76 var carry = 0;
77 var v = 0;
78 for(var t = 17; t >= 0; t--) {
79 carry = 0;
80 for(var s = t; s >= 0; s--) {
81 if(t - s == 0) {
82 v = tmp[s] + result[t] * 57;
83 }else {
84 v = 0;
85 }
86 v = v + carry;
87 carry = v >> 8;
88 tmp[s] = v & 0xFF;
89 }
90 }
91 result = tmp;
92 carry = 0;
93
94 for(var t = 17; t >= 0; t--) {
95 if(t == 17) {
96 v = result[t] + addval;
97 }else {
98 v = result[t];
99 }
100 v = v + carry;
101 carry = v >> 8;
102 result[t] = v & 0xFF;
103 }
104 });
105
106 result.unshift('C*');
107 return packJS.pack.apply(this, result);
108 }
109}
110
111exports.SharecodeDecoder = SharecodeDecoder;