PartnerGate.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import Logs from "../libs/logs.js";
  2. import { receivePartnerData } from "./Partner.js";
  3. import eventSolutions from '../triangle/eventSolutions.js';
  4. /**
  5. * 精确浮点数字
  6. * @param {number} number
  7. * @param {number} x
  8. * @returns {number}
  9. */
  10. const fixFloat = (number, x=3) => {
  11. return parseFloat(number.toFixed(x));
  12. }
  13. const getSolutionWithIors = async(params) => {
  14. const { iors, cross_type, base_stake } = params;
  15. if (typeof params !== 'object' || params === null || Array.isArray(params)) {
  16. return Promise.reject(new Error('params must be an object'));
  17. }
  18. if (!Array.isArray(iors) || iors.length < 2) {
  19. return Promise.reject(new Error('iors must be an array and length must be greater than 2'));
  20. }
  21. iors.forEach(item => {
  22. if (typeof item.v !== 'number' || !Number.isFinite(item.v)) {
  23. return Promise.reject(new Error('iors must be an array of numbers'));
  24. }
  25. if (item.v <= 1) {
  26. return Promise.reject(new Error('iors must be an array of numbers greater than 1'));
  27. }
  28. });
  29. if (typeof cross_type !== 'string' || cross_type.length === 0) {
  30. return Promise.reject(new Error('cross_type must be a non-empty string'));
  31. }
  32. if (typeof base_stake !== 'number' || !Number.isFinite(base_stake) || base_stake <= 0) {
  33. return Promise.reject(new Error('base_stake must be a positive number'));
  34. }
  35. const base_index = iors.reduce((minIdx, cur, idx) => cur.v < iors[minIdx].v ? idx : minIdx, 0);
  36. if (iors.length === 2) {
  37. iors.push({ v: 1 });
  38. }
  39. const betInfo = {
  40. cross_type,
  41. base_index,
  42. base_stake,
  43. odds_side_a: fixFloat(iors[0].v - 1),
  44. odds_side_b: fixFloat(iors[1].v - 1),
  45. odds_side_c: fixFloat(iors[2].v - 1),
  46. };
  47. const sol = eventSolutions(betInfo, true);
  48. return sol;
  49. }
  50. export const partnerGate = async (data) => {
  51. return receivePartnerData(data).
  52. then(({ action, params }) => {
  53. switch (action) {
  54. case 'iors.solution':
  55. return getSolutionWithIors(params);
  56. default:
  57. return Promise.reject(new Error('invalid action'));
  58. }
  59. });
  60. }
  61. export default { partnerGate };