@polymarbot/shared 0.3.6 → 0.3.7

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.
package/markets/utils.cjs CHANGED
@@ -603,8 +603,9 @@ __export(utils_exports, {
603
603
  generateMarketUrl: () => generateMarketUrl,
604
604
  getIntervalSeconds: () => getIntervalSeconds,
605
605
  parseIntervalFromSlug: () => parseIntervalFromSlug,
606
- parseSymbolAndIntervalFromSlug: () => parseSymbolAndIntervalFromSlug,
607
- parseSymbolFromSlug: () => parseSymbolFromSlug
606
+ parseSlug: () => parseSlug,
607
+ parseSymbolFromSlug: () => parseSymbolFromSlug,
608
+ parseTimeRangeFromSlug: () => parseTimeRangeFromSlug
608
609
  });
609
610
  module.exports = __toCommonJS(utils_exports);
610
611
 
@@ -733,10 +734,68 @@ function getIntervalSeconds(interval) {
733
734
  };
734
735
  return intervalSecondsMap[interval];
735
736
  }
736
- function parseSymbolAndIntervalFromSlug(slug) {
737
+ function parseTimeRangeFromSlug(slug, referenceYear) {
738
+ const interval = parseIntervalFromSlug(slug);
739
+ if (!interval) {
740
+ return { startTime: null, endTime: null };
741
+ }
742
+ const intervalSeconds = getIntervalSeconds(interval);
743
+ let startTime = null;
744
+ const lowerSlug = slug.toLowerCase();
745
+ if (interval === "15m" /* M15 */ || interval === "4h" /* H4 */) {
746
+ const match = lowerSlug.match(/-updown-(?:15m|4h)-(\d+)$/);
747
+ if (match) {
748
+ startTime = parseInt(match[1], 10);
749
+ }
750
+ } else if (interval === "1h" /* H1 */) {
751
+ const match = lowerSlug.match(/-up-or-down-(\w+)-(\d+)-(\d+)(am|pm)-et$/);
752
+ if (match) {
753
+ const [, monthName, day, hour, ampm] = match;
754
+ const monthIndex = MONTH_NAMES.indexOf(monthName);
755
+ if (monthIndex !== -1) {
756
+ const year = referenceYear ?? (/* @__PURE__ */ new Date()).getFullYear();
757
+ let hour24 = parseInt(hour, 10);
758
+ if (ampm === "pm" && hour24 !== 12) {
759
+ hour24 += 12;
760
+ } else if (ampm === "am" && hour24 === 12) {
761
+ hour24 = 0;
762
+ }
763
+ const etTime = dayjs_default.tz(
764
+ `${year}-${String(monthIndex + 1).padStart(2, "0")}-${String(day).padStart(2, "0")} ${String(hour24).padStart(2, "0")}:00:00`,
765
+ "America/New_York"
766
+ );
767
+ startTime = etTime.unix();
768
+ }
769
+ }
770
+ } else if (interval === "1d" /* D1 */) {
771
+ const match = lowerSlug.match(/-up-or-down-on-(\w+)-(\d+)$/);
772
+ if (match) {
773
+ const [, monthName, day] = match;
774
+ const monthIndex = MONTH_NAMES.indexOf(monthName);
775
+ if (monthIndex !== -1) {
776
+ const year = referenceYear ?? (/* @__PURE__ */ new Date()).getFullYear();
777
+ const utcTime = dayjs_default.utc(
778
+ `${year}-${String(monthIndex + 1).padStart(2, "0")}-${String(day).padStart(2, "0")} 00:00:00`
779
+ );
780
+ startTime = utcTime.unix();
781
+ }
782
+ }
783
+ }
784
+ if (startTime === null) {
785
+ return { startTime: null, endTime: null };
786
+ }
787
+ return {
788
+ startTime,
789
+ endTime: startTime + intervalSeconds
790
+ };
791
+ }
792
+ function parseSlug(slug, referenceYear) {
793
+ const { startTime, endTime } = parseTimeRangeFromSlug(slug, referenceYear);
737
794
  return {
738
795
  symbol: parseSymbolFromSlug(slug),
739
- interval: parseIntervalFromSlug(slug)
796
+ interval: parseIntervalFromSlug(slug),
797
+ startTime,
798
+ endTime
740
799
  };
741
800
  }
742
801
  // Annotate the CommonJS export names for ESM import in node:
@@ -751,6 +810,7 @@ function parseSymbolAndIntervalFromSlug(slug) {
751
810
  generateMarketUrl,
752
811
  getIntervalSeconds,
753
812
  parseIntervalFromSlug,
754
- parseSymbolAndIntervalFromSlug,
755
- parseSymbolFromSlug
813
+ parseSlug,
814
+ parseSymbolFromSlug,
815
+ parseTimeRangeFromSlug
756
816
  });
@@ -21,9 +21,16 @@ declare function parseIntervalFromSlug(slug: string): SupportedInterval | null;
21
21
 
22
22
  declare function getIntervalSeconds(interval: SupportedInterval): number;
23
23
 
24
- declare function parseSymbolAndIntervalFromSlug(slug: string): {
24
+ declare function parseTimeRangeFromSlug(slug: string, referenceYear?: number): {
25
+ startTime: number | null;
26
+ endTime: number | null;
27
+ };
28
+
29
+ declare function parseSlug(slug: string, referenceYear?: number): {
25
30
  symbol: SupportedSymbol | null;
26
31
  interval: SupportedInterval | null;
32
+ startTime: number | null;
33
+ endTime: number | null;
27
34
  };
28
35
 
29
- export { SUPPORTED_SYMBOLS, SYMBOL_FULL_NAME_MAP, calculatePeriodStartInET, generate15mSlug, generate1dSlug, generate1hSlug, generate4hSlug, generateMarketUrl, getIntervalSeconds, parseIntervalFromSlug, parseSymbolAndIntervalFromSlug, parseSymbolFromSlug };
36
+ export { SUPPORTED_SYMBOLS, SYMBOL_FULL_NAME_MAP, calculatePeriodStartInET, generate15mSlug, generate1dSlug, generate1hSlug, generate4hSlug, generateMarketUrl, getIntervalSeconds, parseIntervalFromSlug, parseSlug, parseSymbolFromSlug, parseTimeRangeFromSlug };
@@ -21,9 +21,16 @@ declare function parseIntervalFromSlug(slug: string): SupportedInterval | null;
21
21
 
22
22
  declare function getIntervalSeconds(interval: SupportedInterval): number;
23
23
 
24
- declare function parseSymbolAndIntervalFromSlug(slug: string): {
24
+ declare function parseTimeRangeFromSlug(slug: string, referenceYear?: number): {
25
+ startTime: number | null;
26
+ endTime: number | null;
27
+ };
28
+
29
+ declare function parseSlug(slug: string, referenceYear?: number): {
25
30
  symbol: SupportedSymbol | null;
26
31
  interval: SupportedInterval | null;
32
+ startTime: number | null;
33
+ endTime: number | null;
27
34
  };
28
35
 
29
- export { SUPPORTED_SYMBOLS, SYMBOL_FULL_NAME_MAP, calculatePeriodStartInET, generate15mSlug, generate1dSlug, generate1hSlug, generate4hSlug, generateMarketUrl, getIntervalSeconds, parseIntervalFromSlug, parseSymbolAndIntervalFromSlug, parseSymbolFromSlug };
36
+ export { SUPPORTED_SYMBOLS, SYMBOL_FULL_NAME_MAP, calculatePeriodStartInET, generate15mSlug, generate1dSlug, generate1hSlug, generate4hSlug, generateMarketUrl, getIntervalSeconds, parseIntervalFromSlug, parseSlug, parseSymbolFromSlug, parseTimeRangeFromSlug };
package/markets/utils.js CHANGED
@@ -682,10 +682,68 @@ function getIntervalSeconds(interval) {
682
682
  };
683
683
  return intervalSecondsMap[interval];
684
684
  }
685
- function parseSymbolAndIntervalFromSlug(slug) {
685
+ function parseTimeRangeFromSlug(slug, referenceYear) {
686
+ const interval = parseIntervalFromSlug(slug);
687
+ if (!interval) {
688
+ return { startTime: null, endTime: null };
689
+ }
690
+ const intervalSeconds = getIntervalSeconds(interval);
691
+ let startTime = null;
692
+ const lowerSlug = slug.toLowerCase();
693
+ if (interval === "15m" /* M15 */ || interval === "4h" /* H4 */) {
694
+ const match = lowerSlug.match(/-updown-(?:15m|4h)-(\d+)$/);
695
+ if (match) {
696
+ startTime = parseInt(match[1], 10);
697
+ }
698
+ } else if (interval === "1h" /* H1 */) {
699
+ const match = lowerSlug.match(/-up-or-down-(\w+)-(\d+)-(\d+)(am|pm)-et$/);
700
+ if (match) {
701
+ const [, monthName, day, hour, ampm] = match;
702
+ const monthIndex = MONTH_NAMES.indexOf(monthName);
703
+ if (monthIndex !== -1) {
704
+ const year = referenceYear ?? (/* @__PURE__ */ new Date()).getFullYear();
705
+ let hour24 = parseInt(hour, 10);
706
+ if (ampm === "pm" && hour24 !== 12) {
707
+ hour24 += 12;
708
+ } else if (ampm === "am" && hour24 === 12) {
709
+ hour24 = 0;
710
+ }
711
+ const etTime = dayjs_default.tz(
712
+ `${year}-${String(monthIndex + 1).padStart(2, "0")}-${String(day).padStart(2, "0")} ${String(hour24).padStart(2, "0")}:00:00`,
713
+ "America/New_York"
714
+ );
715
+ startTime = etTime.unix();
716
+ }
717
+ }
718
+ } else if (interval === "1d" /* D1 */) {
719
+ const match = lowerSlug.match(/-up-or-down-on-(\w+)-(\d+)$/);
720
+ if (match) {
721
+ const [, monthName, day] = match;
722
+ const monthIndex = MONTH_NAMES.indexOf(monthName);
723
+ if (monthIndex !== -1) {
724
+ const year = referenceYear ?? (/* @__PURE__ */ new Date()).getFullYear();
725
+ const utcTime = dayjs_default.utc(
726
+ `${year}-${String(monthIndex + 1).padStart(2, "0")}-${String(day).padStart(2, "0")} 00:00:00`
727
+ );
728
+ startTime = utcTime.unix();
729
+ }
730
+ }
731
+ }
732
+ if (startTime === null) {
733
+ return { startTime: null, endTime: null };
734
+ }
735
+ return {
736
+ startTime,
737
+ endTime: startTime + intervalSeconds
738
+ };
739
+ }
740
+ function parseSlug(slug, referenceYear) {
741
+ const { startTime, endTime } = parseTimeRangeFromSlug(slug, referenceYear);
686
742
  return {
687
743
  symbol: parseSymbolFromSlug(slug),
688
- interval: parseIntervalFromSlug(slug)
744
+ interval: parseIntervalFromSlug(slug),
745
+ startTime,
746
+ endTime
689
747
  };
690
748
  }
691
749
  export {
@@ -699,6 +757,7 @@ export {
699
757
  generateMarketUrl,
700
758
  getIntervalSeconds,
701
759
  parseIntervalFromSlug,
702
- parseSymbolAndIntervalFromSlug,
703
- parseSymbolFromSlug
760
+ parseSlug,
761
+ parseSymbolFromSlug,
762
+ parseTimeRangeFromSlug
704
763
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polymarbot/shared",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "type": "module",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",