shufflecom-calculations 3.3.2 → 3.3.3

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.
@@ -1,7 +1,7 @@
1
- import { Currency } from './currency';
1
+ import { CryptoCurrency } from './currency';
2
2
  interface BuyCryptoCurrencyConfig {
3
3
  moonpay?: string;
4
4
  swapped?: string;
5
5
  }
6
- export declare const BUY_CRYPTO_CURRENCY_CONFIGS: Record<Currency, BuyCryptoCurrencyConfig>;
6
+ export declare const BUY_CRYPTO_CURRENCY_CONFIGS: Record<CryptoCurrency, BuyCryptoCurrencyConfig>;
7
7
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"buy-crypto-currency-code-map.js","sourceRoot":"","sources":["../../src/utils/buy-crypto-currency-code-map.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAOzB,QAAA,2BAA2B,GAA8C;IACpF,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;IAC9D,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE;IAC9D,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IACpC,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IACrD,CAAC,mBAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IACtC,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;IACnB,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;IAC3C,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;IAClC,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;IACnB,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IACpC,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE;IAClB,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;IACnB,CAAC,mBAAQ,CAAC,KAAK,CAAC,EAAE,EAAE;IACpB,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;IAC3D,CAAC,mBAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;IACjB,CAAC,mBAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;CAClB,CAAC"}
1
+ {"version":3,"file":"buy-crypto-currency-code-map.js","sourceRoot":"","sources":["../../src/utils/buy-crypto-currency-code-map.ts"],"names":[],"mappings":";;;AAAA,yCAAsD;AAOzC,QAAA,2BAA2B,GAAoD;IAC1F,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;IAC9D,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE;IAC9D,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IACpC,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;IACrD,CAAC,mBAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IACtC,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;IACnB,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;IAC3C,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;IAClC,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;IACnB,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IACpC,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE;IAClB,CAAC,mBAAQ,CAAC,IAAI,CAAC,EAAE,EAAE;IACnB,CAAC,mBAAQ,CAAC,KAAK,CAAC,EAAE,EAAE;IACpB,CAAC,mBAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;IAC3D,CAAC,mBAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;IACjB,CAAC,mBAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;CAClB,CAAC"}
@@ -21,5 +21,24 @@ export declare enum Currency {
21
21
  TRUMP = "TRUMP",
22
22
  PUMP = "PUMP",
23
23
  GC = "GC",
24
- SC = "SC"
24
+ SC = "SC",
25
+ CAD = "CAD"
25
26
  }
27
+ export declare class CurrencyType {
28
+ private static readonly TYPE_MAP;
29
+ static readonly CRYPTO_CURRENCIES: readonly CryptoCurrency[];
30
+ static readonly FIAT_CURRENCIES: readonly PlatformFiatCurrency[];
31
+ static isCrypto(c: Currency): c is CryptoCurrency;
32
+ static isFiat(c: Currency): c is PlatformFiatCurrency;
33
+ }
34
+ export type CryptoCurrency = {
35
+ [K in Currency]: (typeof CurrencyType)['TYPE_MAP'][K] extends 'crypto' ? K : never;
36
+ }[Currency];
37
+ export type PlatformFiatCurrency = {
38
+ [K in Currency]: (typeof CurrencyType)['TYPE_MAP'][K] extends 'fiat' ? K : never;
39
+ }[Currency];
40
+ declare const CHECKED: unique symbol;
41
+ export type CheckedCurrency = Currency & {
42
+ readonly [CHECKED]: true;
43
+ };
44
+ export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Currency = void 0;
3
+ exports.CurrencyType = exports.Currency = void 0;
4
4
  var Currency;
5
5
  (function (Currency) {
6
6
  Currency["BTC"] = "BTC";
@@ -26,5 +26,43 @@ var Currency;
26
26
  Currency["PUMP"] = "PUMP";
27
27
  Currency["GC"] = "GC";
28
28
  Currency["SC"] = "SC";
29
+ Currency["CAD"] = "CAD";
29
30
  })(Currency || (exports.Currency = Currency = {}));
31
+ class CurrencyType {
32
+ static isCrypto(c) {
33
+ return CurrencyType.TYPE_MAP[c] === 'crypto';
34
+ }
35
+ static isFiat(c) {
36
+ return CurrencyType.TYPE_MAP[c] === 'fiat';
37
+ }
38
+ }
39
+ exports.CurrencyType = CurrencyType;
40
+ CurrencyType.TYPE_MAP = {
41
+ [Currency.BTC]: 'crypto',
42
+ [Currency.ETH]: 'crypto',
43
+ [Currency.LTC]: 'crypto',
44
+ [Currency.USDT]: 'crypto',
45
+ [Currency.USDC]: 'crypto',
46
+ [Currency.DAI]: 'crypto',
47
+ [Currency.TRX]: 'crypto',
48
+ [Currency.MATIC]: 'crypto',
49
+ [Currency.XRP]: 'crypto',
50
+ [Currency.SOL]: 'crypto',
51
+ [Currency.DOGE]: 'crypto',
52
+ [Currency.BUSD]: 'crypto',
53
+ [Currency.BNB]: 'crypto',
54
+ [Currency.SHIB]: 'crypto',
55
+ [Currency.SHFL]: 'crypto',
56
+ [Currency.BONK]: 'crypto',
57
+ [Currency.WIF]: 'crypto',
58
+ [Currency.TON]: 'crypto',
59
+ [Currency.AVAX]: 'crypto',
60
+ [Currency.TRUMP]: 'crypto',
61
+ [Currency.PUMP]: 'crypto',
62
+ [Currency.GC]: 'crypto',
63
+ [Currency.SC]: 'crypto',
64
+ [Currency.CAD]: 'fiat',
65
+ };
66
+ CurrencyType.CRYPTO_CURRENCIES = Object.keys(CurrencyType.TYPE_MAP).filter((c) => CurrencyType.TYPE_MAP[c] === 'crypto');
67
+ CurrencyType.FIAT_CURRENCIES = Object.keys(CurrencyType.TYPE_MAP).filter((c) => CurrencyType.TYPE_MAP[c] === 'fiat');
30
68
  //# sourceMappingURL=currency.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"currency.js","sourceRoot":"","sources":["../../src/utils/currency.ts"],"names":[],"mappings":";;;AACA,IAAY,QA+BX;AA/BD,WAAY,QAAQ;IAElB,uBAAW,CAAA;IACX,uBAAW,CAAA;IACX,uBAAW,CAAA;IAGX,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,uBAAW,CAAA;IAGX,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uBAAW,CAAA;IACX,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,uBAAW,CAAA;IACX,uBAAW,CAAA;IACX,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,yBAAa,CAAA;IAGb,qBAAS,CAAA;IACT,qBAAS,CAAA;AACX,CAAC,EA/BW,QAAQ,wBAAR,QAAQ,QA+BnB"}
1
+ {"version":3,"file":"currency.js","sourceRoot":"","sources":["../../src/utils/currency.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,9 @@ function parseCreateVipBonusBaseInput({ date, bonus }) {
23
23
  if (expiryPerOccurrence === undefined) {
24
24
  throw new Error('Vip Bonus (Reloaded) must have expiryPerOccurrence defined');
25
25
  }
26
+ if (cadence > expiryPerOccurrence) {
27
+ throw new Error('Vip Bonus (Reloaded) expiryPerOccurrence must be greater than or equal to cadence');
28
+ }
26
29
  const endAt = date
27
30
  .add(firstOccurrenceActivationPeriod, 'hour')
28
31
  .add(cadence * (occurrence - 1), 'second')
@@ -1 +1 @@
1
- {"version":3,"file":"parse-create-vip-bonus.js","sourceRoot":"","sources":["../../src/utils/parse-create-vip-bonus.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAWhD,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;AAClD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACnE,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AAEjD,QAAA,8BAA8B,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G,QAAA,+BAA+B,GAAG,CAAC,CAAC;AAEpC,QAAA,+BAA+B,GAAG,IAAI,CAAC;AAUpD,SAAgB,4BAA4B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAyD;IACjH,IAAI,KAAK,CAAC,IAAI,KAAK,6BAAY,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;QAE5F,IAAI,CAAC,OAAO,IAAI,CAAC,sCAA8B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,sCAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrH,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,uCAA+B,IAAI,UAAU,GAAG,uCAA+B,EAAE,CAAC;YAChH,MAAM,IAAI,KAAK,CAAC,8CAA8C,uCAA+B,WAAW,uCAA+B,EAAE,CAAC,CAAC;QAC7I,CAAC;QAED,IAAI,+BAA+B,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,KAAK,GAAG,IAAI;aACf,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC;aAC5C,GAAG,CAAC,OAAO,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;aACzC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC;aAClC,MAAM,EAAE,CAAC;QAEZ,OAAO;YACL,OAAO;YACP,UAAU;YACV,+BAA+B;YAC/B,mBAAmB;YACnB,KAAK;SACN,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;QACb,+BAA+B,EAAE,CAAC;QAClC,mBAAmB,EAAE,CAAC;QACtB,KAAK,EAAE,KAAK,CAAC,UAAU;KACxB,CAAC;AACJ,CAAC;AA9CD,oEA8CC"}
1
+ {"version":3,"file":"parse-create-vip-bonus.js","sourceRoot":"","sources":["../../src/utils/parse-create-vip-bonus.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAWhD,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;AAClD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACnE,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AAEjD,QAAA,8BAA8B,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G,QAAA,+BAA+B,GAAG,CAAC,CAAC;AAEpC,QAAA,+BAA+B,GAAG,IAAI,CAAC;AAUpD,SAAgB,4BAA4B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAyD;IACjH,IAAI,KAAK,CAAC,IAAI,KAAK,6BAAY,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;QAE5F,IAAI,CAAC,OAAO,IAAI,CAAC,sCAA8B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,sCAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrH,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,uCAA+B,IAAI,UAAU,GAAG,uCAA+B,EAAE,CAAC;YAChH,MAAM,IAAI,KAAK,CAAC,8CAA8C,uCAA+B,WAAW,uCAA+B,EAAE,CAAC,CAAC;QAC7I,CAAC;QAED,IAAI,+BAA+B,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,KAAK,GAAG,IAAI;aACf,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC;aAC5C,GAAG,CAAC,OAAO,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;aACzC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC;aAClC,MAAM,EAAE,CAAC;QAEZ,OAAO;YACL,OAAO;YACP,UAAU;YACV,+BAA+B;YAC/B,mBAAmB;YACnB,KAAK;SACN,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;QACb,+BAA+B,EAAE,CAAC;QAClC,mBAAmB,EAAE,CAAC;QACtB,KAAK,EAAE,KAAK,CAAC,UAAU;KACxB,CAAC;AACJ,CAAC;AAlDD,oEAkDC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shufflecom-calculations",
3
- "version": "3.3.2",
3
+ "version": "3.3.3",
4
4
  "description": "",
5
5
  "types": "lib/index.d.ts",
6
6
  "main": "lib/index.js",
@@ -14,5 +14,5 @@
14
14
  },
15
15
  "author": "",
16
16
  "license": "ISC",
17
- "gitHead": "c9af0d92510bc6dc48847a10ef81721b95adf723"
17
+ "gitHead": "d235d6302a4a8791c384a8a48246672c8544749c"
18
18
  }
@@ -1,11 +1,11 @@
1
- import { Currency } from './currency';
1
+ import { Currency, CryptoCurrency } from './currency';
2
2
 
3
3
  interface BuyCryptoCurrencyConfig {
4
4
  moonpay?: string; //https://dev.moonpay.com/docs/list-of-supported-cryptocurrencies
5
5
  swapped?: string; //https://docs.swapped.com/swapped-ramp/readme/supported-cryptocurrencies
6
6
  }
7
7
 
8
- export const BUY_CRYPTO_CURRENCY_CONFIGS: Record<Currency, BuyCryptoCurrencyConfig> = {
8
+ export const BUY_CRYPTO_CURRENCY_CONFIGS: Record<CryptoCurrency, BuyCryptoCurrencyConfig> = {
9
9
  [Currency.BTC]: { moonpay: 'BTC', swapped: 'BTC' },
10
10
  [Currency.ETH]: { moonpay: 'ETH', swapped: 'ETH' },
11
11
  [Currency.USDT]: { moonpay: 'USDT_TRX', swapped: 'USDT_TRON' },
@@ -30,4 +30,74 @@ export enum Currency {
30
30
  // shuffle_us only currency
31
31
  GC = 'GC',
32
32
  SC = 'SC',
33
- }
33
+
34
+ // Fiat (shufflecom only)
35
+ // TODO: inform fast track once list finalized
36
+ CAD = 'CAD',
37
+ }
38
+
39
+ export class CurrencyType {
40
+ private static readonly TYPE_MAP = {
41
+ [Currency.BTC]: 'crypto',
42
+ [Currency.ETH]: 'crypto',
43
+ [Currency.LTC]: 'crypto',
44
+ [Currency.USDT]: 'crypto',
45
+ [Currency.USDC]: 'crypto',
46
+ [Currency.DAI]: 'crypto',
47
+ [Currency.TRX]: 'crypto',
48
+ [Currency.MATIC]: 'crypto',
49
+ [Currency.XRP]: 'crypto',
50
+ [Currency.SOL]: 'crypto',
51
+ [Currency.DOGE]: 'crypto',
52
+ [Currency.BUSD]: 'crypto',
53
+ [Currency.BNB]: 'crypto',
54
+ [Currency.SHIB]: 'crypto',
55
+ [Currency.SHFL]: 'crypto',
56
+ [Currency.BONK]: 'crypto',
57
+ [Currency.WIF]: 'crypto',
58
+ [Currency.TON]: 'crypto',
59
+ [Currency.AVAX]: 'crypto',
60
+ [Currency.TRUMP]: 'crypto',
61
+ [Currency.PUMP]: 'crypto',
62
+
63
+ [Currency.GC]: 'crypto',
64
+ [Currency.SC]: 'crypto',
65
+
66
+ // Fiat — shufflecom only
67
+ [Currency.CAD]: 'fiat',
68
+ } as const satisfies Record<Currency, 'crypto' | 'fiat'>;
69
+
70
+ static readonly CRYPTO_CURRENCIES: readonly CryptoCurrency[] = (Object.keys(CurrencyType.TYPE_MAP) as Currency[]).filter(
71
+ (c): c is CryptoCurrency => CurrencyType.TYPE_MAP[c] === 'crypto',
72
+ );
73
+
74
+ static readonly FIAT_CURRENCIES: readonly PlatformFiatCurrency[] = (Object.keys(CurrencyType.TYPE_MAP) as Currency[]).filter(
75
+ (c): c is PlatformFiatCurrency => CurrencyType.TYPE_MAP[c] === 'fiat',
76
+ );
77
+
78
+ static isCrypto(c: Currency): c is CryptoCurrency {
79
+ return CurrencyType.TYPE_MAP[c] === 'crypto';
80
+ }
81
+
82
+ static isFiat(c: Currency): c is PlatformFiatCurrency {
83
+ return CurrencyType.TYPE_MAP[c] === 'fiat';
84
+ }
85
+ }
86
+
87
+ export type CryptoCurrency = {
88
+ [K in Currency]: (typeof CurrencyType)['TYPE_MAP'][K] extends 'crypto' ? K : never;
89
+ }[Currency];
90
+
91
+ export type PlatformFiatCurrency = {
92
+ [K in Currency]: (typeof CurrencyType)['TYPE_MAP'][K] extends 'fiat' ? K : never;
93
+ }[Currency];
94
+
95
+ /**
96
+ * A Currency that has passed CurrencyEligibilityService.check() for a specific user.
97
+ * Only mintable by calling that service's check() method.
98
+ * Required by Transaction.build() so writes can't compile without eligibility having run.
99
+ */
100
+ declare const CHECKED: unique symbol;
101
+ export type CheckedCurrency = Currency & {
102
+ readonly [CHECKED]: true;
103
+ };
@@ -20,7 +20,7 @@ describe('parseCreateVipBonusBaseInput', () => {
20
20
  cadence: TEN_MINUTES_IN_SECONDS,
21
21
  occurrence: 5,
22
22
  firstOccurrenceActivationPeriod: 5,
23
- expiryPerOccurrence: FIVE_MINUTES_IN_SECONDS,
23
+ expiryPerOccurrence: TEN_MINUTES_IN_SECONDS,
24
24
  });
25
25
 
26
26
  it('should return parsed data with correctly computed endAt for valid input', () => {
@@ -44,7 +44,7 @@ describe('parseCreateVipBonusBaseInput', () => {
44
44
 
45
45
  it('should accept every cadence in VALID_RELOAD_VIP_BONUS_CADENCE', () => {
46
46
  VALID_RELOAD_VIP_BONUS_CADENCE.forEach(cadence => {
47
- const bonus = { ...validReloadedBonus(), cadence };
47
+ const bonus = { ...validReloadedBonus(), cadence, expiryPerOccurrence: cadence };
48
48
  expect(() => parseCreateVipBonusBaseInput({ date, bonus })).not.toThrow();
49
49
  });
50
50
  });
@@ -71,15 +71,10 @@ describe('parseCreateVipBonusBaseInput', () => {
71
71
  );
72
72
  });
73
73
 
74
- it('should accept expiryPerOccurrence = 0 (only undefined is rejected)', () => {
75
- const bonus = { ...validReloadedBonus(), expiryPerOccurrence: 0 };
76
- const result = parseCreateVipBonusBaseInput({ date, bonus });
77
- expect(result.expiryPerOccurrence).toBe(0);
78
- expect(result.endAt).toEqual(
79
- date
80
- .add(bonus.firstOccurrenceActivationPeriod!, 'hour')
81
- .add(bonus.cadence! * (bonus.occurrence! - 1), 'second')
82
- .toDate(),
74
+ it('should not accept expiryPerOccurrence >= cadence ', () => {
75
+ const bonus = { ...validReloadedBonus(), expiryPerOccurrence: FIVE_MINUTES_IN_SECONDS };
76
+ expect(() => parseCreateVipBonusBaseInput({ date, bonus })).toThrow(
77
+ 'Vip Bonus (Reloaded) expiryPerOccurrence must be greater than or equal to cadence',
83
78
  );
84
79
  });
85
80
 
@@ -47,6 +47,10 @@ export function parseCreateVipBonusBaseInput({ date, bonus }: { date: dayjs.Dayj
47
47
  throw new Error('Vip Bonus (Reloaded) must have expiryPerOccurrence defined');
48
48
  }
49
49
 
50
+ if (cadence > expiryPerOccurrence) {
51
+ throw new Error('Vip Bonus (Reloaded) expiryPerOccurrence must be greater than or equal to cadence');
52
+ }
53
+
50
54
  const endAt = date
51
55
  .add(firstOccurrenceActivationPeriod, 'hour')
52
56
  .add(cadence * (occurrence - 1), 'second')