beatsaber-bot-core 0.2.0-rc.13 → 0.2.0-rc.14

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.
Files changed (144) hide show
  1. package/dist/cjs/cmd/bind/bind-id-beatleader.js +1 -1
  2. package/dist/cjs/cmd/bind/bind-id-beatsaver.js +1 -1
  3. package/dist/cjs/cmd/bind/bind-scoresaber.js +1 -1
  4. package/dist/cjs/cmd/bind/index.js +4 -4
  5. package/dist/cjs/cmd/bsmap/id-search.js +2 -2
  6. package/dist/cjs/cmd/bsmap/key-search.js +1 -1
  7. package/dist/cjs/cmd/bsmap/latest.js +1 -1
  8. package/dist/cjs/cmd/deprecated/tmp.js +1 -1
  9. package/dist/cjs/cmd/index.js +11 -11
  10. package/dist/cjs/cmd/index.js.map +1 -1
  11. package/dist/cjs/cmd/rank.js +3 -3
  12. package/dist/cjs/cmd/score.js +5 -5
  13. package/dist/cjs/cmd/subscribe/beatleader.js +1 -1
  14. package/dist/cjs/cmd/subscribe/beatsaver.js +1 -1
  15. package/dist/cjs/cmd/subscribe/id-beatleader-score.js +1 -1
  16. package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +1 -1
  17. package/dist/cjs/cmd/subscribe/index.js +5 -5
  18. package/dist/cjs/cmd/subscribe/subjoin.js +2 -2
  19. package/dist/cjs/cmd/subscribe/subleave.js +1 -1
  20. package/dist/cjs/cmd/subscribe/unsubscribe.js +2 -2
  21. package/dist/cjs/components/components/RankDifficulty.js +1 -1
  22. package/dist/cjs/components/components/bl-rank-score-item.js +3 -3
  23. package/dist/cjs/components/components/bl-score-item.js +1 -1
  24. package/dist/cjs/components/components/bl-score-item.js.map +1 -1
  25. package/dist/cjs/components/components/flag.js +1 -1
  26. package/dist/cjs/components/components/icons/RankIcon.js +2 -2
  27. package/dist/cjs/components/components/scoreItem.js +1 -1
  28. package/dist/cjs/components/components/scoreItem.js.map +1 -1
  29. package/dist/cjs/components/components/scoregraph.js +2 -2
  30. package/dist/cjs/components/components/ss-rank-score-item.js +3 -3
  31. package/dist/cjs/components/components/ss-score-item.js +1 -1
  32. package/dist/cjs/components/components/ss-score-item.js.map +1 -1
  33. package/dist/cjs/components/index.js +1 -1
  34. package/dist/cjs/components/pages/bl-player.js +5 -5
  35. package/dist/cjs/components/pages/bl-score-with-rank.js +6 -6
  36. package/dist/cjs/components/pages/bl-score.js +2 -2
  37. package/dist/cjs/components/pages/bs-map.js +3 -3
  38. package/dist/cjs/components/pages/index.js +4 -4
  39. package/dist/cjs/components/pages/ss-player.js +2 -2
  40. package/dist/cjs/components/utils/format.js +4 -4
  41. package/dist/cjs/components/utils/format.js.map +1 -1
  42. package/dist/cjs/config.js +39 -0
  43. package/dist/cjs/config.js.map +1 -1
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/infra/index.js +3 -3
  46. package/dist/cjs/infra/index.js.map +1 -1
  47. package/dist/cjs/infra/s3/index.js +34 -3
  48. package/dist/cjs/infra/s3/index.js.map +1 -1
  49. package/dist/cjs/infra/support/fetch/index.js +13 -4
  50. package/dist/cjs/infra/support/fetch/index.js.map +1 -1
  51. package/dist/cjs/infra/support/fetch/ofetch.js +5 -12
  52. package/dist/cjs/infra/support/fetch/ofetch.js.map +1 -1
  53. package/dist/cjs/infra/support/render/index.js +48 -14
  54. package/dist/cjs/infra/support/render/index.js.map +1 -1
  55. package/dist/cjs/interface/cmd/builder.js +1 -1
  56. package/dist/cjs/schedules/index.js +3 -2
  57. package/dist/cjs/schedules/index.js.map +1 -1
  58. package/dist/cjs/service/api/base/aioclient.js +1 -1
  59. package/dist/cjs/service/api/base/blclient.js +1 -1
  60. package/dist/cjs/service/api/base/bsclient.js +2 -2
  61. package/dist/cjs/service/api/base/ssclient.js +2 -2
  62. package/dist/cjs/service/api/index.js +14 -5
  63. package/dist/cjs/service/api/index.js.map +1 -1
  64. package/dist/cjs/service/render/index.js +21 -8
  65. package/dist/cjs/service/render/index.js.map +1 -1
  66. package/dist/cjs/ws/beatsaver.js +1 -1
  67. package/dist/esm/cmd/bind/bind-id-beatleader.js +1 -1
  68. package/dist/esm/cmd/bind/bind-id-beatsaver.js +1 -1
  69. package/dist/esm/cmd/bind/bind-scoresaber.js +1 -1
  70. package/dist/esm/cmd/bind/index.js +5 -5
  71. package/dist/esm/cmd/bsmap/id-search.js +2 -2
  72. package/dist/esm/cmd/bsmap/key-search.js +1 -1
  73. package/dist/esm/cmd/bsmap/latest.js +1 -1
  74. package/dist/esm/cmd/deprecated/tmp.js +1 -1
  75. package/dist/esm/cmd/index.js +11 -11
  76. package/dist/esm/cmd/index.js.map +1 -1
  77. package/dist/esm/cmd/rank.js +3 -3
  78. package/dist/esm/cmd/score.js +5 -5
  79. package/dist/esm/cmd/subscribe/beatleader.js +1 -1
  80. package/dist/esm/cmd/subscribe/beatsaver.js +1 -1
  81. package/dist/esm/cmd/subscribe/id-beatleader-score.js +1 -1
  82. package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +1 -1
  83. package/dist/esm/cmd/subscribe/index.js +5 -5
  84. package/dist/esm/cmd/subscribe/subjoin.js +2 -2
  85. package/dist/esm/cmd/subscribe/subleave.js +1 -1
  86. package/dist/esm/cmd/subscribe/unsubscribe.js +2 -2
  87. package/dist/esm/components/components/RankDifficulty.js +1 -1
  88. package/dist/esm/components/components/bl-rank-score-item.js +2 -2
  89. package/dist/esm/components/components/bl-score-item.js +2 -2
  90. package/dist/esm/components/components/bl-score-item.js.map +1 -1
  91. package/dist/esm/components/components/icons/RankIcon.js +2 -2
  92. package/dist/esm/components/components/scoreItem.js +1 -1
  93. package/dist/esm/components/components/scoreItem.js.map +1 -1
  94. package/dist/esm/components/components/scoregraph.js +3 -3
  95. package/dist/esm/components/components/socre-badge.js +1 -1
  96. package/dist/esm/components/components/ss-rank-score-item.js +2 -2
  97. package/dist/esm/components/components/ss-score-item.js +2 -2
  98. package/dist/esm/components/components/ss-score-item.js.map +1 -1
  99. package/dist/esm/components/pages/bl-player.js +7 -7
  100. package/dist/esm/components/pages/bl-score-with-rank.js +6 -6
  101. package/dist/esm/components/pages/bl-score.js +3 -3
  102. package/dist/esm/components/pages/bs-map.js +5 -5
  103. package/dist/esm/components/pages/index.js +5 -5
  104. package/dist/esm/components/pages/ss-player.js +3 -3
  105. package/dist/esm/components/utils/bl/bsorReplayAcc.js +2 -2
  106. package/dist/esm/components/utils/format.js +3 -3
  107. package/dist/esm/components/utils/format.js.map +1 -1
  108. package/dist/esm/components/utils/index.js +2 -2
  109. package/dist/esm/config.js +31 -0
  110. package/dist/esm/config.js.map +1 -1
  111. package/dist/esm/index.js +10 -10
  112. package/dist/esm/index.js.map +1 -1
  113. package/dist/esm/infra/i18n/index.js +2 -2
  114. package/dist/esm/infra/index.js +5 -5
  115. package/dist/esm/infra/index.js.map +1 -1
  116. package/dist/esm/infra/s3/index.js +31 -1
  117. package/dist/esm/infra/s3/index.js.map +1 -1
  118. package/dist/esm/infra/support/fetch/index.js +16 -7
  119. package/dist/esm/infra/support/fetch/index.js.map +1 -1
  120. package/dist/esm/infra/support/fetch/ofetch.js +4 -10
  121. package/dist/esm/infra/support/fetch/ofetch.js.map +1 -1
  122. package/dist/esm/infra/support/render/index.js +47 -13
  123. package/dist/esm/infra/support/render/index.js.map +1 -1
  124. package/dist/esm/interface/cmd/builder.js +1 -1
  125. package/dist/esm/interface/index.js +4 -4
  126. package/dist/esm/schedules/index.js +4 -3
  127. package/dist/esm/schedules/index.js.map +1 -1
  128. package/dist/esm/service/api/base/aioclient.js +1 -1
  129. package/dist/esm/service/api/base/blclient.js +1 -1
  130. package/dist/esm/service/api/base/bsclient.js +2 -2
  131. package/dist/esm/service/api/base/index.js +4 -4
  132. package/dist/esm/service/api/base/ssclient.js +2 -2
  133. package/dist/esm/service/api/index.js +16 -7
  134. package/dist/esm/service/api/index.js.map +1 -1
  135. package/dist/esm/service/api/interfaces/beatleader/index.js +5 -5
  136. package/dist/esm/service/api/interfaces/beatsaver/index.js +5 -5
  137. package/dist/esm/service/api/interfaces/scoresaber/index.js +3 -3
  138. package/dist/esm/service/index.js +2 -2
  139. package/dist/esm/service/render/index.js +22 -9
  140. package/dist/esm/service/render/index.js.map +1 -1
  141. package/dist/esm/ws/beatsaver.js +1 -1
  142. package/dist/esm/ws/index.js +3 -3
  143. package/dist/types/index.d.ts +205 -123
  144. package/package.json +17 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/utils/format.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport zh from 'dayjs/locale/zh-cn'\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\nexport const formatDuration = (duration: number) => {\n const d = dayjs.duration(duration, 'second')\n return d.format('m[m]s[s]')\n}\n\n// export const formatDuration = (duration: number) => {\n// return dayjs.duration(duration,'seconds').format('mm:ss')\n// }\n\nexport const formatTime = (time: string) => {\n return dayjs(time).locale(zh).fromNow()\n}\n\nexport function formatRelativeTimeByDay(time: string | number | Date) {\n let res = dayjs().diff(dayjs(time), 'd')\n let unit = 'd'\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'h')\n unit = 'h'\n }\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'm')\n unit = 'm'\n }\n return `${res}${unit}`\n}\n\nexport const formatNumber = (number: number) => {\n // 1.11w\n try {\n if (number > 10000) {\n return `${(number / 10000.0).toFixed(2)}w`\n }\n // 1.11k\n if (number > 1000) {\n return `${(number / 1000.0).toFixed(2)}k`\n }\n return number.toString()\n } catch (e) {\n return '0'\n }\n}\n\nexport function numberWithCommas(x: number) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n}\nexport const formatDate = (time: Date | undefined, template?: string) => {\n if (!time) return undefined\n return dayjs(time).format(template ?? 'YYYY-MM-DD')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,sBAAqB;AACrB,0BAAyB;AACzB,mBAAe;AACf,aAAAA,QAAM,OAAO,gBAAAC,OAAQ;AACrB,aAAAD,QAAM,OAAO,oBAAAE,OAAY;AAClB,MAAM,iBAAiB,CAACD,cAAqB;AAClD,QAAM,IAAI,aAAAD,QAAM,SAASC,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,aAAO,aAAAD,SAAM,IAAI,EAAE,OAAO,aAAAG,OAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,UAAM,aAAAH,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,GAAG,GAAG,IAAI;AACtB;AAEO,MAAM,eAAe,CAAC,WAAmB;AAE9C,MAAI;AACF,QAAI,SAAS,KAAO;AAClB,aAAO,IAAI,SAAS,KAAS,QAAQ,CAAC,CAAC;AAAA,IACzC;AAEA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,SAAS,KAAQ,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,GAAW;AAC1C,SAAO,EAAE,SAAS,EAAE,QAAQ,yBAAyB,GAAG;AAC1D;AACO,MAAM,aAAa,CAAC,MAAwB,aAAsB;AACvE,MAAI,CAAC,KAAM,QAAO;AAClB,aAAO,aAAAA,SAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["dayjs","duration","relativeTime","zh"]}
1
+ {"version":3,"sources":["../../../../src/components/utils/format.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration.js'\nimport relativeTime from 'dayjs/plugin/relativeTime.js'\nimport zh from 'dayjs/locale/zh-cn.js'\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\nexport const formatDuration = (duration: number) => {\n const d = dayjs.duration(duration, 'second')\n return d.format('m[m]s[s]')\n}\n\n// export const formatDuration = (duration: number) => {\n// return dayjs.duration(duration,'seconds').format('mm:ss')\n// }\n\nexport const formatTime = (time: string) => {\n return dayjs(time).locale(zh).fromNow()\n}\n\nexport function formatRelativeTimeByDay(time: string | number | Date) {\n let res = dayjs().diff(dayjs(time), 'd')\n let unit = 'd'\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'h')\n unit = 'h'\n }\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'm')\n unit = 'm'\n }\n return `${res}${unit}`\n}\n\nexport const formatNumber = (number: number) => {\n // 1.11w\n try {\n if (number > 10000) {\n return `${(number / 10000.0).toFixed(2)}w`\n }\n // 1.11k\n if (number > 1000) {\n return `${(number / 1000.0).toFixed(2)}k`\n }\n return number.toString()\n } catch (e) {\n return '0'\n }\n}\n\nexport function numberWithCommas(x: number) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n}\nexport const formatDate = (time: Date | undefined, template?: string) => {\n if (!time) return undefined\n return dayjs(time).format(template ?? 'YYYY-MM-DD')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,sBAAqB;AACrB,0BAAyB;AACzB,mBAAe;AACf,aAAAA,QAAM,OAAO,gBAAAC,OAAQ;AACrB,aAAAD,QAAM,OAAO,oBAAAE,OAAY;AAClB,MAAM,iBAAiB,CAACD,cAAqB;AAClD,QAAM,IAAI,aAAAD,QAAM,SAASC,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,aAAO,aAAAD,SAAM,IAAI,EAAE,OAAO,aAAAG,OAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,UAAM,aAAAH,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,GAAG,GAAG,IAAI;AACtB;AAEO,MAAM,eAAe,CAAC,WAAmB;AAE9C,MAAI;AACF,QAAI,SAAS,KAAO;AAClB,aAAO,IAAI,SAAS,KAAS,QAAQ,CAAC,CAAC;AAAA,IACzC;AAEA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,SAAS,KAAQ,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,GAAW;AAC1C,SAAO,EAAE,SAAS,EAAE,QAAQ,yBAAyB,GAAG;AAC1D;AACO,MAAM,aAAa,CAAC,MAAwB,aAAsB;AACvE,MAAI,CAAC,KAAM,QAAO;AAClB,aAAO,aAAAA,SAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["dayjs","duration","relativeTime","zh"]}
@@ -2,6 +2,10 @@ var __defProp = Object.defineProperty;
2
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
5
9
  var __copyProps = (to, from, except, desc) => {
6
10
  if (from && typeof from === "object" || typeof from === "function") {
7
11
  for (let key of __getOwnPropNames(from))
@@ -12,5 +16,40 @@ var __copyProps = (to, from, except, desc) => {
12
16
  };
13
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
18
  var config_exports = {};
19
+ __export(config_exports, {
20
+ configSchema: () => configSchema
21
+ });
15
22
  module.exports = __toCommonJS(config_exports);
23
+ var import_infra = require("@/infra");
24
+ var import_v4 = require("zod/v4");
25
+ const cronSchema = import_v4.z.object({
26
+ enabled: import_v4.z.boolean().optional().default(false),
27
+ cron: import_v4.z.string().optional()
28
+ }).optional().default({ enabled: false });
29
+ const configSchema = import_v4.z.object({
30
+ s3: import_infra.s3ConfigSchema.default({ enabled: false }).optional(),
31
+ render: import_infra.renderSchema,
32
+ beatsaver: import_v4.z.object({
33
+ host: import_v4.z.string().default("https://api.beatsaver.com").optional(),
34
+ wsURL: import_v4.z.string().default("wss://ws.beatsaver.com/maps").optional(),
35
+ oauthClientId: import_v4.z.string().optional(),
36
+ oauthClientSecret: import_v4.z.string().optional()
37
+ }).default({
38
+ host: "https://api.beatsaver.com",
39
+ wsURL: "wss://ws.beatsaver.com/maps"
40
+ }).optional(),
41
+ beatleader: import_v4.z.object({
42
+ oauthClientId: import_v4.z.string().optional(),
43
+ oauthClientSecret: import_v4.z.string().optional()
44
+ }).default({}).optional(),
45
+ cron: import_v4.z.object({
46
+ temp: cronSchema
47
+ }).default({
48
+ temp: { enabled: false }
49
+ }).optional()
50
+ });
51
+ // Annotate the CommonJS export names for ESM import in node:
52
+ 0 && (module.exports = {
53
+ configSchema
54
+ });
16
55
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config.ts"],"sourcesContent":["import type { S3Config, RenderConfig } from \"@/infra\";\n\n\nexport interface Config {\n s3: {\n enabled: boolean\n } & S3Config\n render: RenderConfig\n minRawMatchMapIdLength: number\n\n beatSaverHost: string\n beatSaverWSURL: string\n bsOauthClientId: string\n bsOauthClientSecret: string\n\n blOauthClientId: string\n blOauthClientSecret: string\n bsNotifyMonitorCron: ScheduleTaskConfig\n tokenRefreshCron: ScheduleTaskConfig\n tempCron: ScheduleTaskConfig\n}\n\ninterface ScheduleTaskConfig {\n cron: string\n enabled: boolean\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/config.ts"],"sourcesContent":["import { renderSchema, s3ConfigSchema } from '@/infra'\nimport {z} from 'zod/v4'\n\nconst cronSchema = z.object({\n enabled: z.boolean().optional().default(false),\n cron: z.string().optional(),\n}).optional().default({ enabled: false })\n\nexport const configSchema = z.object({\n s3: s3ConfigSchema.default({ enabled: false }).optional(),\n render: renderSchema,\n beatsaver: z.object({\n host: z.string().default('https://api.beatsaver.com').optional(),\n wsURL: z.string().default('wss://ws.beatsaver.com/maps').optional(),\n oauthClientId: z.string().optional(),\n oauthClientSecret: z.string().optional(),\n }).default({\n host: 'https://api.beatsaver.com',\n wsURL: 'wss://ws.beatsaver.com/maps',\n }).optional(),\n beatleader: z.object({\n oauthClientId: z.string().optional(),\n oauthClientSecret: z.string().optional(),\n }).default({}).optional(),\n cron: z.object({\n temp: cronSchema,\n }).default({\n temp: {enabled: false},\n }).optional()\n})\n\nexport type Config = z.infer<typeof configSchema>\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA6C;AAC7C,gBAAgB;AAEhB,MAAM,aAAa,YAAE,OAAO;AAAA,EAC1B,SAAS,YAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC7C,MAAM,YAAE,OAAO,EAAE,SAAS;AAC5B,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,MAAM,CAAC;AAEjC,MAAM,eAAe,YAAE,OAAO;AAAA,EACnC,IAAI,4BAAe,QAAQ,EAAE,SAAS,MAAM,CAAC,EAAE,SAAS;AAAA,EACxD,QAAQ;AAAA,EACR,WAAW,YAAE,OAAO;AAAA,IAClB,MAAM,YAAE,OAAO,EAAE,QAAQ,2BAA2B,EAAE,SAAS;AAAA,IAC/D,OAAO,YAAE,OAAO,EAAE,QAAQ,6BAA6B,EAAE,SAAS;AAAA,IAClE,eAAe,YAAE,OAAO,EAAE,SAAS;AAAA,IACnC,mBAAmB,YAAE,OAAO,EAAE,SAAS;AAAA,EACzC,CAAC,EAAE,QAAQ;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT,CAAC,EAAE,SAAS;AAAA,EACZ,YAAY,YAAE,OAAO;AAAA,IACnB,eAAe,YAAE,OAAO,EAAE,SAAS;AAAA,IACnC,mBAAmB,YAAE,OAAO,EAAE,SAAS;AAAA,EACzC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AAAA,EACxB,MAAM,YAAE,OAAO;AAAA,IACb,MAAM;AAAA,EACR,CAAC,EAAE,QAAQ;AAAA,IACT,MAAM,EAAC,SAAS,MAAK;AAAA,EACvB,CAAC,EAAE,SAAS;AACd,CAAC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import {botCommands} from \"./cmd\";\nimport {getScheduleTasks} from \"./schedules\";\nimport {Config} from \"./config\";\n\nexport * from './interface'\nexport * from './schedules'\nexport * from './config'\nexport * from './cmd'\nexport * from './ws'\nexport * from './utils'\nexport * from './service'\nexport * from './infra'\n\nexport const getBot = <T>(config: Config) => ({\n commands: botCommands<T>(),\n schedule: getScheduleTasks(config),\n})\n\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA0B;AAC1B,uBAA+B;AAG/B,0BAAc,wBAJd;AAKA,0BAAc,wBALd;AAMA,0BAAc,qBANd;AAOA,0BAAc,kBAPd;AAQA,0BAAc,iBARd;AASA,0BAAc,oBATd;AAUA,0BAAc,sBAVd;AAWA,0BAAc,oBAXd;AAaO,MAAM,SAAS,CAAI,YAAoB;AAAA,EAC5C,cAAU,wBAAe;AAAA,EACzB,cAAU,mCAAiB,MAAM;AACnC;","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import {botCommands} from \"./cmd\";\nimport {getScheduleTasks} from \"./schedules\";\nimport type {Config} from \"./config\";\n\nexport * from './interface'\nexport * from './schedules'\nexport * from './config'\nexport * from './cmd'\nexport * from './ws'\nexport * from './utils'\nexport * from './service'\nexport * from './infra'\n\nexport const getBot = <T>(config: Config) => ({\n commands: botCommands<T>(),\n schedule: getScheduleTasks(config),\n})\n\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA0B;AAC1B,uBAA+B;AAG/B,0BAAc,wBAJd;AAKA,0BAAc,wBALd;AAMA,0BAAc,qBANd;AAOA,0BAAc,kBAPd;AAQA,0BAAc,iBARd;AASA,0BAAc,oBATd;AAUA,0BAAc,sBAVd;AAWA,0BAAc,oBAXd;AAaO,MAAM,SAAS,CAAI,YAAoB;AAAA,EAC5C,cAAU,wBAAe;AAAA,EACzB,cAAU,mCAAiB,MAAM;AACnC;","names":[]}
@@ -19,8 +19,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var infra_exports = {};
20
20
  __export(infra_exports, {
21
21
  I18nService: () => import_i18n.I18nService,
22
- S3Config: () => import_s3.S3Config,
23
- S3Service: () => import_s3.S3Service
22
+ S3Service: () => import_s3.S3Service,
23
+ s3ConfigSchema: () => import_s3.s3ConfigSchema
24
24
  });
25
25
  module.exports = __toCommonJS(infra_exports);
26
26
  __reExport(infra_exports, require("./support/render"), module.exports);
@@ -29,8 +29,8 @@ var import_s3 = require("./s3");
29
29
  // Annotate the CommonJS export names for ESM import in node:
30
30
  0 && (module.exports = {
31
31
  I18nService,
32
- S3Config,
33
32
  S3Service,
33
+ s3ConfigSchema,
34
34
  ...require("./support/render")
35
35
  });
36
36
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/infra/index.ts"],"sourcesContent":["export * from './support/render'\nexport { I18nService } from './i18n'\nexport { S3Service, S3Config } from './s3'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,kBAA4B;AAC5B,gBAAoC;","names":[]}
1
+ {"version":3,"sources":["../../../src/infra/index.ts"],"sourcesContent":["export * from './support/render'\nexport { I18nService } from './i18n'\nexport { S3Service, type S3Config, s3ConfigSchema } from './s3'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,kBAA4B;AAC5B,gBAAyD;","names":[]}
@@ -2,9 +2,22 @@ var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
6
  var __getProtoOf = Object.getPrototypeOf;
6
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
9
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
8
21
  var __export = (target, all) => {
9
22
  for (var name in all)
10
23
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -49,11 +62,27 @@ var __async = (__this, __arguments, generator) => {
49
62
  };
50
63
  var s3_exports = {};
51
64
  __export(s3_exports, {
52
- S3Service: () => S3Service
65
+ S3Service: () => S3Service,
66
+ s3ConfigSchema: () => s3ConfigSchema,
67
+ strictS3ConfigSchema: () => strictS3ConfigSchema
53
68
  });
54
69
  module.exports = __toCommonJS(s3_exports);
55
70
  var import_client_s3 = require("@aws-sdk/client-s3");
56
- var import_crypto = __toESM(require("crypto"));
71
+ var import_crypto = __toESM(require("crypto"), 1);
72
+ var import_v4 = require("zod/v4");
73
+ const strictS3ConfigSchema = import_v4.z.object({
74
+ s3AccessKey: import_v4.z.string(),
75
+ s3SecretKey: import_v4.z.string(),
76
+ endpoint: import_v4.z.string(),
77
+ baseURL: import_v4.z.string(),
78
+ bucketName: import_v4.z.string(),
79
+ region: import_v4.z.string().optional(),
80
+ keyPrefix: import_v4.z.string().optional()
81
+ });
82
+ const s3ConfigSchema = import_v4.z.discriminatedUnion("enabled", [
83
+ import_v4.z.object(__spreadValues({ enabled: import_v4.z.literal(true) }, strictS3ConfigSchema.shape)),
84
+ import_v4.z.object({ enabled: import_v4.z.literal(false) })
85
+ ]);
57
86
  class S3Service {
58
87
  constructor(config) {
59
88
  __publicField(this, "s3Client");
@@ -109,6 +138,8 @@ class S3Service {
109
138
  }
110
139
  // Annotate the CommonJS export names for ESM import in node:
111
140
  0 && (module.exports = {
112
- S3Service
141
+ S3Service,
142
+ s3ConfigSchema,
143
+ strictS3ConfigSchema
113
144
  });
114
145
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/infra/s3/index.ts"],"sourcesContent":["import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'\nimport crypto from 'crypto'\n\nexport interface S3Config {\n s3AccessKey: string\n s3SecretKey: string\n endpoint: string\n region: string | undefined\n bucketName: string\n keyPrefix: string\n baseURL: string\n}\n\nexport class S3Service {\n private s3Client: S3Client\n private readonly bucket: string\n private readonly keyPrefix: string = ''\n private readonly baseURL: string = ''\n constructor(config: S3Config) {\n const s3 = new S3Client({\n region: config.region ?? 'auto',\n endpoint: config.endpoint,\n credentials: {\n accessKeyId: config.s3AccessKey,\n secretAccessKey: config.s3SecretKey,\n },\n })\n this.bucket = config.bucketName\n this.keyPrefix = config.keyPrefix\n this.baseURL = config.baseURL\n this.s3Client = s3\n }\n async uploadImgWithUrl(url: string, mimeType?: string): Promise<string> {\n const res = await fetch(url).then((it) => it.arrayBuffer())\n const buf = Buffer.from(res)\n // @ts-ignore\n const md5 = crypto.createHash('md5').update(buf).digest('hex')\n const key = this.keyPrefix ? `${this.keyPrefix}-${md5}` : md5\n const params = {\n Bucket: this.bucket,\n Key: key,\n Body: buf,\n ContentType: mimeType ?? 'image/png',\n }\n const command = new PutObjectCommand(params)\n const data = await this.s3Client.send(command)\n return `${this.baseURL}${key}`\n }\n async uploadImg(buffer: Buffer, mimeType?: string): Promise<string> {\n // md5 digest\n // @ts-ignore\n const md5 = crypto.createHash('md5').update(buffer).digest('hex')\n const key = this.keyPrefix ? `${this.keyPrefix}-${md5}` : md5\n const params = {\n Bucket: this.bucket,\n Key: key,\n Body: buffer,\n ContentType: mimeType ?? 'image/png',\n }\n const command = new PutObjectCommand(params)\n const data = await this.s3Client.send(command)\n return `${this.baseURL}${key}`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2C;AAC3C,oBAAmB;AAYZ,MAAM,UAAU;AAAA,EAKrB,YAAY,QAAkB;AAJ9B,wBAAQ;AACR,wBAAiB;AACjB,wBAAiB,aAAoB;AACrC,wBAAiB,WAAkB;AAjBrC;AAmBI,UAAM,KAAK,IAAI,0BAAS;AAAA,MACtB,SAAQ,YAAO,WAAP,YAAiB;AAAA,MACzB,UAAU,OAAO;AAAA,MACjB,aAAa;AAAA,QACX,aAAa,OAAO;AAAA,QACpB,iBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,SAAK,SAAS,OAAO;AACrB,SAAK,YAAY,OAAO;AACxB,SAAK,UAAU,OAAO;AACtB,SAAK,WAAW;AAAA,EAClB;AAAA,EACM,iBAAiB,KAAa,UAAoC;AAAA;AACtE,YAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC;AAC1D,YAAM,MAAM,OAAO,KAAK,GAAG;AAE3B,YAAM,MAAM,cAAAA,QAAO,WAAW,KAAK,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AAC7D,YAAM,MAAM,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK;AAC1D,YAAM,SAAS;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa,8BAAY;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,kCAAiB,MAAM;AAC3C,YAAM,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAC7C,aAAO,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,IAC9B;AAAA;AAAA,EACM,UAAU,QAAgB,UAAoC;AAAA;AAGlE,YAAM,MAAM,cAAAA,QAAO,WAAW,KAAK,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK;AAChE,YAAM,MAAM,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK;AAC1D,YAAM,SAAS;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa,8BAAY;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,kCAAiB,MAAM;AAC3C,YAAM,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAC7C,aAAO,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,IAC9B;AAAA;AACF;","names":["crypto"]}
1
+ {"version":3,"sources":["../../../../src/infra/s3/index.ts"],"sourcesContent":["import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'\nimport crypto from 'crypto'\nimport {z} from \"zod/v4\";\n\nexport interface S3Config {\n s3AccessKey: string\n s3SecretKey: string\n endpoint: string\n region?: string\n bucketName: string\n keyPrefix?: string\n baseURL: string\n}\n\n\n\nexport const strictS3ConfigSchema = z.object({\n s3AccessKey: z.string(),\n s3SecretKey: z.string(),\n endpoint: z.string(),\n baseURL: z.string(),\n bucketName: z.string(),\n region: z.string().optional(),\n keyPrefix: z.string().optional(),\n})\n\nexport const s3ConfigSchema = z.discriminatedUnion('enabled', [\n z.object({ enabled: z.literal(true), ...strictS3ConfigSchema.shape }),\n z.object({ enabled: z.literal(false),}),\n])\n\nexport class S3Service {\n private s3Client: S3Client\n private readonly bucket: string\n private readonly keyPrefix: string = ''\n private readonly baseURL: string = ''\n constructor(config: S3Config) {\n const s3 = new S3Client({\n region: config.region ?? 'auto',\n endpoint: config.endpoint,\n credentials: {\n accessKeyId: config.s3AccessKey,\n secretAccessKey: config.s3SecretKey,\n },\n })\n this.bucket = config.bucketName\n this.keyPrefix = config.keyPrefix\n this.baseURL = config.baseURL\n this.s3Client = s3\n }\n async uploadImgWithUrl(url: string, mimeType?: string): Promise<string> {\n const res = await fetch(url).then((it) => it.arrayBuffer())\n const buf = Buffer.from(res)\n // @ts-ignore\n const md5 = crypto.createHash('md5').update(buf).digest('hex')\n const key = this.keyPrefix ? `${this.keyPrefix}-${md5}` : md5\n const params = {\n Bucket: this.bucket,\n Key: key,\n Body: buf,\n ContentType: mimeType ?? 'image/png',\n }\n const command = new PutObjectCommand(params)\n const data = await this.s3Client.send(command)\n return `${this.baseURL}${key}`\n }\n async uploadImg(buffer: Buffer, mimeType?: string): Promise<string> {\n // md5 digest\n // @ts-ignore\n const md5 = crypto.createHash('md5').update(buffer).digest('hex')\n const key = this.keyPrefix ? `${this.keyPrefix}-${md5}` : md5\n const params = {\n Bucket: this.bucket,\n Key: key,\n Body: buffer,\n ContentType: mimeType ?? 'image/png',\n }\n const command = new PutObjectCommand(params)\n const data = await this.s3Client.send(command)\n return `${this.baseURL}${key}`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2C;AAC3C,oBAAmB;AACnB,gBAAgB;AAcT,MAAM,uBAAuB,YAAE,OAAO;AAAA,EAC3C,aAAa,YAAE,OAAO;AAAA,EACtB,aAAa,YAAE,OAAO;AAAA,EACtB,UAAU,YAAE,OAAO;AAAA,EACnB,SAAS,YAAE,OAAO;AAAA,EAClB,YAAY,YAAE,OAAO;AAAA,EACrB,QAAQ,YAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,WAAW,YAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,MAAM,iBAAiB,YAAE,mBAAmB,WAAW;AAAA,EAC5D,YAAE,OAAO,iBAAE,SAAS,YAAE,QAAQ,IAAI,KAAM,qBAAqB,MAAO;AAAA,EACpE,YAAE,OAAO,EAAE,SAAS,YAAE,QAAQ,KAAK,EAAE,CAAC;AACxC,CAAC;AAEM,MAAM,UAAU;AAAA,EAKrB,YAAY,QAAkB;AAJ9B,wBAAQ;AACR,wBAAiB;AACjB,wBAAiB,aAAoB;AACrC,wBAAiB,WAAkB;AAnCrC;AAqCI,UAAM,KAAK,IAAI,0BAAS;AAAA,MACtB,SAAQ,YAAO,WAAP,YAAiB;AAAA,MACzB,UAAU,OAAO;AAAA,MACjB,aAAa;AAAA,QACX,aAAa,OAAO;AAAA,QACpB,iBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,SAAK,SAAS,OAAO;AACrB,SAAK,YAAY,OAAO;AACxB,SAAK,UAAU,OAAO;AACtB,SAAK,WAAW;AAAA,EAClB;AAAA,EACM,iBAAiB,KAAa,UAAoC;AAAA;AACtE,YAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC;AAC1D,YAAM,MAAM,OAAO,KAAK,GAAG;AAE3B,YAAM,MAAM,cAAAA,QAAO,WAAW,KAAK,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AAC7D,YAAM,MAAM,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK;AAC1D,YAAM,SAAS;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa,8BAAY;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,kCAAiB,MAAM;AAC3C,YAAM,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAC7C,aAAO,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,IAC9B;AAAA;AAAA,EACM,UAAU,QAAgB,UAAoC;AAAA;AAGlE,YAAM,MAAM,cAAAA,QAAO,WAAW,KAAK,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK;AAChE,YAAM,MAAM,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK;AAC1D,YAAM,SAAS;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa,8BAAY;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,kCAAiB,MAAM;AAC3C,YAAM,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAC7C,aAAO,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,IAC9B;AAAA;AACF;","names":["crypto"]}
@@ -31,20 +31,29 @@ const rofetch = (0, import_ofetch.createFetch)({
31
31
  retryDelay: 400
32
32
  }
33
33
  });
34
- const ofetch = new import_ofetch.Fetch(rofetch);
34
+ const ofetch = new import_ofetch.Fetch();
35
35
  const createFetch = (logger) => {
36
36
  return ofetch.extend({
37
37
  onRequest: (context) => {
38
38
  logger.debug(`[fetch -->] ${context.options.baseURL}${context.request}`);
39
+ logger.debug(`[fetch -->] ${JSON.stringify(context.options, null, 2)}`);
39
40
  },
40
41
  onResponse: (context) => {
41
42
  logger.debug(`[fetch <--] ${context.request} ${context.response.status}`);
43
+ switch (context.options.responseType) {
44
+ case "text":
45
+ logger.debug(`[fetch <--] ${context.response._data}`);
46
+ break;
47
+ case "json":
48
+ logger.debug(`[fetch -->] ${JSON.stringify(context.response._data, null, 2)}`);
49
+ break;
50
+ }
42
51
  },
43
- onResponseError: (context) => {
44
- if (context.response.status === 404) {
52
+ onResponseError({ request, response, options, error }) {
53
+ logger.debug(`response error ${response.statusText}`, error);
54
+ if (response.status === 404) {
45
55
  throw new import_error.NotFoundError();
46
56
  }
47
- throw context.error;
48
57
  },
49
58
  ignoreResponseError: false
50
59
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/fetch/index.ts"],"sourcesContent":["import { createFetch as c, Fetch } from './ofetch'\nimport { Logger } from '@/interface'\nimport { NotFoundError } from './error'\n\nconst rofetch = c({\n defaults: {\n retryStatusCodes: [400, 408, 409, 425, 429, 502, 503, 504],\n retry: 2,\n retryDelay: 400,\n },\n})\n\nconst ofetch = new Fetch(rofetch)\n\nexport const createFetch = (logger: Logger) => {\n return ofetch.extend({\n onRequest: (context) => {\n logger.debug(`[fetch -->] ${context.options.baseURL}${context.request}`)\n },\n onResponse: (context) => {\n logger.debug(`[fetch <--] ${context.request} ${context.response.status}`)\n },\n onResponseError: (context) => {\n if (context.response.status === 404) {\n throw new NotFoundError()\n }\n throw context.error\n },\n ignoreResponseError: false,\n })\n}\n\nexport { Fetch } from './ofetch'\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwC;AAExC,mBAA8B;AA8B9B,IAAAA,iBAAsB;AA5BtB,MAAM,cAAU,cAAAC,aAAE;AAAA,EAChB,UAAU;AAAA,IACR,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IACzD,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC;AAED,MAAM,SAAS,IAAI,oBAAM,OAAO;AAEzB,MAAM,cAAc,CAAC,WAAmB;AAC7C,SAAO,OAAO,OAAO;AAAA,IACnB,WAAW,CAAC,YAAY;AACtB,aAAO,MAAM,eAAe,QAAQ,QAAQ,OAAO,GAAG,QAAQ,OAAO,EAAE;AAAA,IACzE;AAAA,IACA,YAAY,CAAC,YAAY;AACvB,aAAO,MAAM,eAAe,QAAQ,OAAO,IAAI,QAAQ,SAAS,MAAM,EAAE;AAAA,IAC1E;AAAA,IACA,iBAAiB,CAAC,YAAY;AAC5B,UAAI,QAAQ,SAAS,WAAW,KAAK;AACnC,cAAM,IAAI,2BAAc;AAAA,MAC1B;AACA,YAAM,QAAQ;AAAA,IAChB;AAAA,IACA,qBAAqB;AAAA,EACvB,CAAC;AACH;","names":["import_ofetch","c"]}
1
+ {"version":3,"sources":["../../../../../src/infra/support/fetch/index.ts"],"sourcesContent":["import { createFetch as c, Fetch } from './ofetch'\nimport { Logger } from '@/interface'\nimport { NotFoundError } from './error'\n\nconst rofetch = c({\n defaults: {\n retryStatusCodes: [400, 408, 409, 425, 429, 502, 503, 504],\n retry: 2,\n retryDelay: 400,\n },\n})\n\nconst ofetch = new Fetch()\n\nexport const createFetch = (logger: Logger) => {\n return ofetch.extend({\n onRequest: (context) => {\n logger.debug(`[fetch -->] ${context.options.baseURL}${context.request}`)\n logger.debug(`[fetch -->] ${JSON.stringify(context.options, null, 2)}`)\n },\n onResponse: (context) => {\n logger.debug(`[fetch <--] ${context.request} ${context.response.status}`)\n switch (context.options.responseType) {\n case 'text':\n logger.debug(`[fetch <--] ${context.response._data}`)\n break\n case \"json\":\n logger.debug(`[fetch -->] ${JSON.stringify(context.response._data, null, 2)}`)\n break\n }\n },\n onResponseError({ request, response, options, error }) {\n logger.debug(`response error ${response.statusText}`, error)\n if (response.status === 404) {\n throw new NotFoundError()\n }\n },\n ignoreResponseError: false,\n })\n}\n\nexport { Fetch } from './ofetch'\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwC;AAExC,mBAA8B;AAuC9B,IAAAA,iBAAsB;AArCtB,MAAM,cAAU,cAAAC,aAAE;AAAA,EAChB,UAAU;AAAA,IACR,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IACzD,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC;AAED,MAAM,SAAS,IAAI,oBAAM;AAElB,MAAM,cAAc,CAAC,WAAmB;AAC7C,SAAO,OAAO,OAAO;AAAA,IACnB,WAAW,CAAC,YAAY;AACtB,aAAO,MAAM,eAAe,QAAQ,QAAQ,OAAO,GAAG,QAAQ,OAAO,EAAE;AACvE,aAAO,MAAM,eAAe,KAAK,UAAU,QAAQ,SAAS,MAAM,CAAC,CAAC,EAAE;AAAA,IACxE;AAAA,IACA,YAAY,CAAC,YAAY;AACvB,aAAO,MAAM,eAAe,QAAQ,OAAO,IAAI,QAAQ,SAAS,MAAM,EAAE;AACxE,cAAQ,QAAQ,QAAQ,cAAc;AAAA,QACpC,KAAK;AACH,iBAAO,MAAM,eAAe,QAAQ,SAAS,KAAK,EAAE;AACpD;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,eAAe,KAAK,UAAU,QAAQ,SAAS,OAAO,MAAM,CAAC,CAAC,EAAE;AAC7E;AAAA,MACJ;AAAA,IACF;AAAA,IACA,gBAAgB,EAAE,SAAS,UAAU,SAAS,MAAM,GAAG;AACrD,aAAO,MAAM,kBAAkB,SAAS,UAAU,IAAI,KAAK;AAC3D,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI,2BAAc;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,qBAAqB;AAAA,EACvB,CAAC;AACH;","names":["import_ofetch","c"]}
@@ -56,25 +56,18 @@ var __async = (__this, __arguments, generator) => {
56
56
  var ofetch_exports = {};
57
57
  __export(ofetch_exports, {
58
58
  Fetch: () => Fetch,
59
- createFetch: () => import_ofetch2.createFetch,
60
- rofetch: () => rofetch
59
+ createFetch: () => import_ofetch2.createFetch
61
60
  });
62
61
  module.exports = __toCommonJS(ofetch_exports);
63
62
  var import_ofetch = require("ofetch");
64
- var import_error = require("./error");
65
63
  var import_ofetch2 = require("ofetch");
66
64
  const rofetch = (0, import_ofetch.createFetch)({
67
65
  defaults: {
68
- retryStatusCodes: [400, 408, 409, 425, 429, 500, 502, 503, 504],
69
- retry: 3,
66
+ retryStatusCodes: [408, 409, 425, 429, 500, 502, 503, 504],
67
+ retry: 2,
70
68
  retryDelay: 800
71
69
  }
72
70
  }).create({
73
- onResponseError({ request, response, options }) {
74
- if (response.status === 404) {
75
- throw new import_error.NotFoundError();
76
- }
77
- },
78
71
  onRequestError({ request, error }) {
79
72
  }
80
73
  });
@@ -99,6 +92,7 @@ class Fetch {
99
92
  body: f
100
93
  });
101
94
  }
95
+ console.debug();
102
96
  const res = yield this.ofetchInstance(request, opt);
103
97
  return res;
104
98
  });
@@ -131,7 +125,6 @@ class Fetch {
131
125
  // Annotate the CommonJS export names for ESM import in node:
132
126
  0 && (module.exports = {
133
127
  Fetch,
134
- createFetch,
135
- rofetch
128
+ createFetch
136
129
  });
137
130
  //# sourceMappingURL=ofetch.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/fetch/ofetch.ts"],"sourcesContent":["import { $Fetch, createFetch, FetchOptions, ResponseType } from 'ofetch'\nimport { NotFoundError } from './error'\n\nexport const rofetch = createFetch({\n defaults: {\n retryStatusCodes: [400, 408, 409, 425, 429, 500, 502, 503, 504],\n retry: 3,\n retryDelay: 800,\n },\n}).create({\n onResponseError({ request, response, options }) {\n if (response.status === 404) {\n throw new NotFoundError()\n }\n },\n onRequestError({ request, error }) {},\n})\n\nexport type ExtendFetchOptions<R extends ResponseType = ResponseType, T = any> = {\n form?: Record<string, any>\n} & FetchOptions<R, T>\n\nexport class Fetch {\n private options?: FetchOptions\n private ofetchInstance: $Fetch\n constructor(fetchInstance?: $Fetch, options?: FetchOptions) {\n this.options = options\n this.ofetchInstance = fetchInstance ?? rofetch\n }\n async fetch<T, R extends ResponseType>(request: string, options?: ExtendFetchOptions<R, T>) {\n let opt = {\n ...options,\n ...this.options\n } as ExtendFetchOptions<R, T>\n if(opt.form) {\n const form = new FormData()\n let f = opt.form\n Object.entries(form).forEach(([key, value]) => form.append(key, value))\n opt = {\n ...opt,\n headers: {\n ...opt.headers,\n 'Content-Type': 'multipart/form-data'\n },\n body: f\n }\n }\n\n const res = await this.ofetchInstance<T, R>(request, opt)\n return res\n }\n get<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch<T, R>(request, { ...options, method: 'GET' })\n }\n post<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch<T, R>(request, { ...options, method: 'POST' })\n }\n put<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'PUT' })\n }\n patch<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'PATCH' })\n }\n delete<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'DELETE' })\n }\n head(request: string, options?: FetchOptions) {\n return this.fetch(request, { ...options, method: 'HEAD' })\n }\n\n extend(options: FetchOptions) {\n return new Fetch(this.ofetchInstance, { ...this.options, ...options })\n }\n baseUrl(url: string) {\n return this.extend({ baseURL: url })\n }\n}\n\nexport { createFetch } from 'ofetch'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgE;AAChE,mBAA8B;AA4F9B,IAAAA,iBAA4B;AA1FrB,MAAM,cAAU,2BAAY;AAAA,EACjC,UAAU;AAAA,IACR,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAC9D,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC,EAAE,OAAO;AAAA,EACR,gBAAgB,EAAE,SAAS,UAAU,QAAQ,GAAG;AAC9C,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI,2BAAc;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,eAAe,EAAE,SAAS,MAAM,GAAG;AAAA,EAAC;AACtC,CAAC;AAMM,MAAM,MAAM;AAAA,EAGjB,YAAY,eAAwB,SAAwB;AAF5D,wBAAQ;AACR,wBAAQ;AAEN,SAAK,UAAU;AACf,SAAK,iBAAiB,wCAAiB;AAAA,EACzC;AAAA,EACO,MAAiC,SAAiB,SAAoC;AAAA;AAC3F,UAAI,MAAM,kCACL,UACA,KAAK;AAEV,UAAG,IAAI,MAAM;AACX,cAAM,OAAO,IAAI,SAAS;AAC1B,YAAI,IAAI,IAAI;AACZ,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK,CAAC;AACtE,cAAM,iCACD,MADC;AAAA,UAEJ,SAAS,iCACJ,IAAI,UADA;AAAA,YAEP,gBAAgB;AAAA,UAClB;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF;AAEA,YAAM,MAAM,MAAM,KAAK,eAAqB,SAAS,GAAG;AACxD,aAAO;AAAA,IACT;AAAA;AAAA,EACA,IACE,SACA,SACA;AACA,WAAO,KAAK,MAAY,SAAS,iCAAK,UAAL,EAAc,QAAQ,MAAM,EAAC;AAAA,EAChE;AAAA,EACA,KACE,SACA,SACA;AACA,WAAO,KAAK,MAAY,SAAS,iCAAK,UAAL,EAAc,QAAQ,OAAO,EAAC;AAAA,EACjE;AAAA,EACA,IACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,MAAM,EAAC;AAAA,EAC1D;AAAA,EACA,MACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,QAAQ,EAAC;AAAA,EAC5D;AAAA,EACA,OACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,SAAS,EAAC;AAAA,EAC7D;AAAA,EACA,KAAK,SAAiB,SAAwB;AAC5C,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,OAAO,EAAC;AAAA,EAC3D;AAAA,EAEA,OAAO,SAAuB;AAC5B,WAAO,IAAI,MAAM,KAAK,gBAAgB,kCAAK,KAAK,UAAY,QAAS;AAAA,EACvE;AAAA,EACA,QAAQ,KAAa;AACnB,WAAO,KAAK,OAAO,EAAE,SAAS,IAAI,CAAC;AAAA,EACrC;AACF;","names":["import_ofetch"]}
1
+ {"version":3,"sources":["../../../../../src/infra/support/fetch/ofetch.ts"],"sourcesContent":["import { $Fetch, createFetch, FetchOptions, ResponseType } from 'ofetch'\n\n\nconst rofetch = createFetch({\n defaults: {\n retryStatusCodes: [408, 409, 425, 429, 500, 502, 503, 504],\n retry: 2,\n retryDelay: 800,\n },\n}).create({\n\n onRequestError({ request, error }) {\n\n },\n})\n\nexport type ExtendFetchOptions<R extends ResponseType = ResponseType, T = any> = {\n form?: Record<string, any>\n} & FetchOptions<R, T>\n\nexport class Fetch {\n private options?: FetchOptions\n private ofetchInstance: $Fetch\n constructor(fetchInstance?: $Fetch, options?: FetchOptions) {\n this.options = options\n this.ofetchInstance = fetchInstance ?? rofetch\n }\n async fetch<T, R extends ResponseType>(request: string, options?: ExtendFetchOptions<R, T>) {\n let opt = {\n ...options,\n ...this.options\n } as ExtendFetchOptions<R, T>\n if(opt.form) {\n const form = new FormData()\n let f = opt.form\n Object.entries(form).forEach(([key, value]) => form.append(key, value))\n opt = {\n ...opt,\n headers: {\n ...opt.headers,\n 'Content-Type': 'multipart/form-data'\n },\n body: f\n }\n }\n console.debug()\n const res = await this.ofetchInstance<T, R>(request, opt)\n return res\n }\n get<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch<T, R>(request, { ...options, method: 'GET' })\n }\n post<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch<T, R>(request, { ...options, method: 'POST' })\n }\n put<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'PUT' })\n }\n patch<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'PATCH' })\n }\n delete<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'DELETE' })\n }\n head(request: string, options?: FetchOptions) {\n return this.fetch(request, { ...options, method: 'HEAD' })\n }\n\n extend(options: FetchOptions) {\n return new Fetch(this.ofetchInstance, { ...this.options, ...options })\n }\n baseUrl(url: string) {\n return this.extend({ baseURL: url })\n }\n}\n\nexport { createFetch } from 'ofetch'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgE;AA2FhE,IAAAA,iBAA4B;AAxF5B,MAAM,cAAU,2BAAY;AAAA,EAC1B,UAAU;AAAA,IACR,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IACzD,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC,EAAE,OAAO;AAAA,EAER,eAAe,EAAE,SAAS,MAAM,GAAG;AAAA,EAEnC;AACF,CAAC;AAMM,MAAM,MAAM;AAAA,EAGjB,YAAY,eAAwB,SAAwB;AAF5D,wBAAQ;AACR,wBAAQ;AAEN,SAAK,UAAU;AACf,SAAK,iBAAiB,wCAAiB;AAAA,EACzC;AAAA,EACO,MAAiC,SAAiB,SAAoC;AAAA;AAC3F,UAAI,MAAM,kCACL,UACA,KAAK;AAEV,UAAG,IAAI,MAAM;AACX,cAAM,OAAO,IAAI,SAAS;AAC1B,YAAI,IAAI,IAAI;AACZ,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK,CAAC;AACtE,cAAM,iCACD,MADC;AAAA,UAEJ,SAAS,iCACJ,IAAI,UADA;AAAA,YAEP,gBAAgB;AAAA,UAClB;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF;AACA,cAAQ,MAAM;AACd,YAAM,MAAM,MAAM,KAAK,eAAqB,SAAS,GAAG;AACxD,aAAO;AAAA,IACT;AAAA;AAAA,EACA,IACE,SACA,SACA;AACA,WAAO,KAAK,MAAY,SAAS,iCAAK,UAAL,EAAc,QAAQ,MAAM,EAAC;AAAA,EAChE;AAAA,EACA,KACE,SACA,SACA;AACA,WAAO,KAAK,MAAY,SAAS,iCAAK,UAAL,EAAc,QAAQ,OAAO,EAAC;AAAA,EACjE;AAAA,EACA,IACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,MAAM,EAAC;AAAA,EAC1D;AAAA,EACA,MACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,QAAQ,EAAC;AAAA,EAC5D;AAAA,EACA,OACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,SAAS,EAAC;AAAA,EAC7D;AAAA,EACA,KAAK,SAAiB,SAAwB;AAC5C,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,OAAO,EAAC;AAAA,EAC3D;AAAA,EAEA,OAAO,SAAuB;AAC5B,WAAO,IAAI,MAAM,KAAK,gBAAgB,kCAAK,KAAK,UAAY,QAAS;AAAA,EACvE;AAAA,EACA,QAAQ,KAAa;AACnB,WAAO,KAAK,OAAO,EAAE,SAAS,IAAI,CAAC;AAAA,EACrC;AACF;","names":["import_ofetch"]}
@@ -19,6 +19,18 @@ var __spreadValues = (a, b) => {
19
19
  return a;
20
20
  };
21
21
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
+ var __objRest = (source, exclude) => {
23
+ var target = {};
24
+ for (var prop in source)
25
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
26
+ target[prop] = source[prop];
27
+ if (source != null && __getOwnPropSymbols)
28
+ for (var prop of __getOwnPropSymbols(source)) {
29
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
30
+ target[prop] = source[prop];
31
+ }
32
+ return target;
33
+ };
22
34
  var __export = (target, all) => {
23
35
  for (var name in all)
24
36
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -56,19 +68,37 @@ var __async = (__this, __arguments, generator) => {
56
68
  var render_exports = {};
57
69
  __export(render_exports, {
58
70
  CFBrowserRendering: () => CFBrowserRendering,
59
- PuppeteerOptions: () => import_puppeteer.RenderOptions,
60
71
  PuppeteerRendering: () => PuppeteerRendering,
61
72
  RemoteBrowserGetter: () => RemoteBrowserGetter,
62
- getImageRender: () => getImageRender
73
+ getImageRender: () => getImageRender,
74
+ renderSchema: () => renderSchema
63
75
  });
64
76
  module.exports = __toCommonJS(render_exports);
65
77
  var import_puppeteer = require("./puppeteer");
66
78
  var import_puppeteer_core = require("puppeteer-core");
67
- var import_fetch = require("../../../infra/support/fetch");
79
+ var import_fetch = require("@/infra/support/fetch");
80
+ var import_v4 = require("zod/v4");
81
+ const common = import_v4.z.object({
82
+ defaultWaitTimeout: import_v4.z.number().optional(),
83
+ waitTimeout: import_v4.z.number().optional()
84
+ });
85
+ const cfConfig = import_v4.z.object({
86
+ cfAccountId: import_v4.z.string().min(1, "Cloudflare account id is required"),
87
+ cfAPIKey: import_v4.z.string().min(1, "Cloudflare API key is required")
88
+ });
89
+ const puppeteerConfig = import_v4.z.object({
90
+ puppeteerURL: import_v4.z.string().describe("remote puppeteer url, eg: wss://browserless/xxx, https://browserless/xxx").optional()
91
+ });
92
+ const strictRenderConfig = import_v4.z.discriminatedUnion("mode", [
93
+ import_v4.z.object(__spreadValues(__spreadValues({ mode: import_v4.z.literal("cf") }, cfConfig.shape), common.shape)),
94
+ import_v4.z.object(__spreadValues(__spreadValues({ mode: import_v4.z.literal("puppeteer") }, puppeteerConfig.shape), common.shape)),
95
+ import_v4.z.object(__spreadValues({ mode: import_v4.z.literal("custom") }, common.shape))
96
+ ]);
97
+ const renderSchema = strictRenderConfig.and(import_v4.z.object(__spreadValues(__spreadValues(__spreadValues({}, cfConfig.shape), puppeteerConfig.shape), common.shape)).partial());
68
98
  class CFBrowserRendering {
69
- constructor(accountId, cfAPIKey) {
99
+ constructor(accountId, cfAPIKey, logger) {
70
100
  __publicField(this, "f");
71
- this.f = new import_fetch.Fetch().baseUrl(`https://api.cloudflare.com/client/v4/accounts/${accountId}`).extend({
101
+ this.f = (0, import_fetch.createFetch)(logger).baseUrl(`https://api.cloudflare.com/client/v4/accounts/${accountId}`).extend({
72
102
  headers: {
73
103
  Authorization: `Bearer ${cfAPIKey}`
74
104
  }
@@ -79,7 +109,8 @@ class CFBrowserRendering {
79
109
  responseType: "arrayBuffer",
80
110
  body: __spreadProps(__spreadValues({
81
111
  "screenshotOptions": {
82
- quality: 90
112
+ quality: 90,
113
+ type: "webp"
83
114
  }
84
115
  }, body), {
85
116
  "viewport": {
@@ -132,27 +163,30 @@ const RemoteBrowserGetter = (addr) => {
132
163
  }
133
164
  return () => p.connect(opt);
134
165
  };
135
- const getImageRender = (cfg) => {
166
+ const getImageRender = (config) => {
167
+ const _a = config, { logger, render, browserGetter } = _a, _cfg = __objRest(_a, ["logger", "render", "browserGetter"]);
168
+ const cfg = strictRenderConfig.parse(_cfg);
136
169
  if (cfg.mode === "cf") {
137
- return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey);
170
+ return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey, logger);
138
171
  }
139
172
  if (cfg.mode === "custom") {
140
- if (!cfg.render) throw new Error("please provide custom img render");
141
- return cfg.render;
173
+ if (!render) throw new Error("please provide custom img render");
174
+ return render;
142
175
  }
143
176
  if (cfg.puppeteerURL) {
144
177
  return new PuppeteerRendering(RemoteBrowserGetter(cfg.puppeteerURL));
145
178
  }
146
- if (cfg.browserGetter) {
147
- return new PuppeteerRendering(cfg.browserGetter);
179
+ if (browserGetter) {
180
+ return new PuppeteerRendering(browserGetter);
148
181
  }
182
+ return null;
149
183
  };
150
184
  // Annotate the CommonJS export names for ESM import in node:
151
185
  0 && (module.exports = {
152
186
  CFBrowserRendering,
153
- PuppeteerOptions,
154
187
  PuppeteerRendering,
155
188
  RemoteBrowserGetter,
156
- getImageRender
189
+ getImageRender,
190
+ renderSchema
157
191
  });
158
192
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/render/index.ts"],"sourcesContent":["import {html2imgBuffer, RenderOptions, url2imgBuffer} from \"./puppeteer\";\nimport {Browser, Puppeteer} from \"puppeteer-core\";\nimport {Fetch} from \"@/infra/support/fetch\";\nexport {RenderOptions as PuppeteerOptions}\nexport interface ImageRender {\n html2img: (html: string, opt: RenderOptions) => Promise<Buffer>\n url2img: (url: string, opt: RenderOptions) => Promise<Buffer>\n}\n\nexport type RenderConfig = {\n mode: 'cf' | 'puppeteer' | 'custom'\n puppeteerURL?: string\n defaultWaitTimeout?: number\n waitTimeout?: number\n cfAccountId?: string,\n cfAPIKey?: string,\n}\n\nexport class CFBrowserRendering implements ImageRender {\n f: Fetch\n constructor(accountId: string, cfAPIKey: string) {\n this.f = new Fetch()\n .baseUrl(`https://api.cloudflare.com/client/v4/accounts/${accountId}`)\n .extend({\n headers: {\n Authorization: `Bearer ${cfAPIKey}`\n },\n })\n }\n private post(body) {\n return this.f.post('/browser-rendering/screenshot', {\n responseType: 'arrayBuffer',\n body: {\n \"screenshotOptions\": {\n quality: 90\n },\n ...body,\n \"viewport\": {\n \"width\": 3840,\n \"height\": 2160,\n \"deviceScaleFactor\": 2,\n },\n \"gotoOptions\": {\n \"waitUntil\": \"networkidle0\",\n \"timeout\": 30000\n },\n }\n })\n }\n\n\n\n async html2img (html: string, opt: RenderOptions) {\n const buf = await this.post({html: html, ...opt})\n return Buffer.from(buf)\n }\n async url2img (url: string, opt: RenderOptions) {\n const buf = await this.post({url: url, ...opt})\n return Buffer.from(buf)\n }\n}\n\nexport class PuppeteerRendering implements ImageRender {\n constructor(private browserGetter: () => Promise<Browser>) {\n }\n async html2img (html: string, opt: RenderOptions) {\n return html2imgBuffer(this.browserGetter, html, opt)\n }\n async url2img (html: string, opt: RenderOptions) {\n return url2imgBuffer(this.browserGetter, html, opt)\n }\n}\n\n\nexport const RemoteBrowserGetter = (addr: string) => {\n const p = new Puppeteer()\n let opt = {}\n if(addr.startsWith('ws')) {\n opt = { browserWSEndpoint: addr }\n }else if(addr.startsWith('http')) {\n opt = { browserURL: addr }\n }\n return () => p.connect(opt)\n}\n\n\n\nexport const getImageRender = (cfg: RenderConfig & {render?: ImageRender,browserGetter?: () => Promise<Browser>}) => {\n if(cfg.mode === 'cf') {\n return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey)\n }\n if(cfg.mode === 'custom') {\n if(!cfg.render) throw new Error(\"please provide custom img render\")\n return cfg.render\n }\n if(cfg.puppeteerURL) {\n return new PuppeteerRendering(RemoteBrowserGetter(cfg.puppeteerURL))\n }\n if(cfg.browserGetter) {\n return new PuppeteerRendering(cfg.browserGetter)\n }\n}\n\nexport type CreateImageRenderOption = Parameters<typeof getImageRender>[0]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2D;AAC3D,4BAAiC;AACjC,mBAAoB;AAgBb,MAAM,mBAA0C;AAAA,EAErD,YAAY,WAAmB,UAAkB;AADjD;AAEE,SAAK,IAAI,IAAI,mBAAM,EAChB,QAAQ,iDAAiD,SAAS,EAAE,EACpE,OAAO;AAAA,MACN,SAAS;AAAA,QACP,eAAe,UAAU,QAAQ;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EACQ,KAAK,MAAM;AACjB,WAAO,KAAK,EAAE,KAAK,iCAAiC;AAAA,MAClD,cAAc;AAAA,MACd,MAAM;AAAA,QACJ,qBAAqB;AAAA,UACnB,SAAS;AAAA,QACX;AAAA,SACG,OAJC;AAAA,QAKJ,YAAY;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,qBAAqB;AAAA,QACvB;AAAA,QACA,eAAe;AAAA,UACb,aAAa;AAAA,UACb,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAIM,SAAU,MAAc,KAAoB;AAAA;AAChD,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,QAAe,IAAI;AAChD,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AAAA,EACM,QAAS,KAAa,KAAoB;AAAA;AAC9C,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,OAAa,IAAI;AAC9C,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AACF;AAEO,MAAM,mBAA0C;AAAA,EACrD,YAAoB,eAAuC;AAAvC;AAAA,EACpB;AAAA,EACM,SAAU,MAAc,KAAoB;AAAA;AAChD,iBAAO,iCAAe,KAAK,eAAe,MAAM,GAAG;AAAA,IACrD;AAAA;AAAA,EACM,QAAS,MAAc,KAAoB;AAAA;AAC/C,iBAAO,gCAAc,KAAK,eAAe,MAAM,GAAG;AAAA,IACpD;AAAA;AACF;AAGO,MAAM,sBAAsB,CAAC,SAAiB;AACnD,QAAM,IAAI,IAAI,gCAAU;AACxB,MAAI,MAAM,CAAC;AACX,MAAG,KAAK,WAAW,IAAI,GAAG;AACxB,UAAM,EAAE,mBAAmB,KAAK;AAAA,EAClC,WAAS,KAAK,WAAW,MAAM,GAAG;AAChC,UAAM,EAAE,YAAY,KAAK;AAAA,EAC3B;AACA,SAAO,MAAM,EAAE,QAAQ,GAAG;AAC5B;AAIO,MAAM,iBAAiB,CAAC,QAAsF;AACnH,MAAG,IAAI,SAAS,MAAM;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa,IAAI,QAAQ;AAAA,EAC7D;AACA,MAAG,IAAI,SAAS,UAAU;AACxB,QAAG,CAAC,IAAI,OAAQ,OAAM,IAAI,MAAM,kCAAkC;AAClE,WAAQ,IAAI;AAAA,EACd;AACA,MAAG,IAAI,cAAc;AACnB,WAAO,IAAI,mBAAmB,oBAAoB,IAAI,YAAY,CAAC;AAAA,EACrE;AACA,MAAG,IAAI,eAAe;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa;AAAA,EACjD;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/infra/support/render/index.ts"],"sourcesContent":["import {html2imgBuffer, type RenderOptions, url2imgBuffer} from \"./puppeteer\";\nimport {Browser, Puppeteer} from \"puppeteer-core\";\nimport {Fetch, createFetch} from \"@/infra/support/fetch\";\nimport {Logger} from \"@/interface\";\nimport {z} from \"zod/v4\";\nexport type {RenderOptions as PuppeteerOptions}\nexport interface ImageRender {\n html2img: (html: string, opt: RenderOptions) => Promise<Buffer>\n url2img: (url: string, opt: RenderOptions) => Promise<Buffer>\n}\n\nconst common = z.object({\n defaultWaitTimeout: z.number().optional(),\n waitTimeout: z.number().optional(),\n})\n\nconst cfConfig = z.object({\n cfAccountId: z.string().min(1, \"Cloudflare account id is required\"),\n cfAPIKey: z.string().min(1, \"Cloudflare API key is required\"),\n})\n\nconst puppeteerConfig = z.object({\n puppeteerURL: z.string().describe(\"remote puppeteer url, eg: wss://browserless/xxx, https://browserless/xxx\").optional(),\n})\n\nconst strictRenderConfig = z.discriminatedUnion('mode', [\n z.object({ mode: z.literal('cf'), ...cfConfig.shape, ...common.shape }),\n z.object({ mode: z.literal('puppeteer'), ...puppeteerConfig.shape, ...common.shape }),\n z.object({ mode: z.literal('custom'), ...common.shape }),\n])\n\nexport const renderSchema = strictRenderConfig\n .and(z.object({\n ...cfConfig.shape,\n ...puppeteerConfig.shape,\n ...common.shape\n }).partial())\n\nexport type RenderConfig = z.infer<typeof renderSchema>\n\ntype StrictRenderConfig = z.infer<typeof strictRenderConfig>\n\n\n\n\nexport class CFBrowserRendering implements ImageRender {\n f: Fetch\n constructor(accountId: string, cfAPIKey: string, logger: Logger) {\n this.f = createFetch(logger)\n .baseUrl(`https://api.cloudflare.com/client/v4/accounts/${accountId}`)\n .extend({\n headers: {\n Authorization: `Bearer ${cfAPIKey}`\n },\n })\n }\n private post(body) {\n return this.f.post('/browser-rendering/screenshot', {\n responseType: 'arrayBuffer',\n body: {\n \"screenshotOptions\": {\n quality: 90,\n type: 'webp'\n },\n ...body,\n \"viewport\": {\n \"width\": 3840,\n \"height\": 2160,\n \"deviceScaleFactor\": 2,\n },\n \"gotoOptions\": {\n \"waitUntil\": \"networkidle0\",\n \"timeout\": 30000\n },\n }\n })\n }\n\n\n\n async html2img (html: string, opt: RenderOptions) {\n const buf = await this.post({html: html, ...opt})\n return Buffer.from(buf)\n }\n async url2img (url: string, opt: RenderOptions) {\n const buf = await this.post({url: url, ...opt})\n return Buffer.from(buf)\n }\n}\n\nexport class PuppeteerRendering implements ImageRender {\n constructor(private browserGetter: () => Promise<Browser>) {\n }\n async html2img (html: string, opt: RenderOptions) {\n return html2imgBuffer(this.browserGetter, html, opt)\n }\n async url2img (html: string, opt: RenderOptions) {\n return url2imgBuffer(this.browserGetter, html, opt)\n }\n}\n\n\nexport const RemoteBrowserGetter = (addr: string) => {\n const p = new Puppeteer()\n let opt = {}\n if(addr.startsWith('ws')) {\n opt = { browserWSEndpoint: addr }\n }else if(addr.startsWith('http')) {\n opt = { browserURL: addr }\n }\n return () => p.connect(opt)\n}\n\ntype ImageRenderCreateOptions = StrictRenderConfig & {\n logger: Logger,\n render?: ImageRender,\n browserGetter?: () => Promise<Browser>\n}\n\n\nexport const getImageRender = (config: ImageRenderCreateOptions) => {\n const { logger, render, browserGetter, ..._cfg} = config\n const cfg = strictRenderConfig.parse(_cfg)\n if(cfg.mode === 'cf') {\n return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey, logger)\n }\n if(cfg.mode === 'custom') {\n if(!render) throw new Error(\"please provide custom img render\")\n return render\n }\n if(cfg.puppeteerURL) {\n return new PuppeteerRendering(RemoteBrowserGetter(cfg.puppeteerURL))\n }\n if(browserGetter) {\n return new PuppeteerRendering(browserGetter)\n }\n return null\n}\n\nexport type CreateImageRenderOption = Parameters<typeof getImageRender>[0]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAgE;AAChE,4BAAiC;AACjC,mBAAiC;AAEjC,gBAAgB;AAOhB,MAAM,SAAS,YAAE,OAAO;AAAA,EACtB,oBAAoB,YAAE,OAAO,EAAE,SAAS;AAAA,EACxC,aAAa,YAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAED,MAAM,WAAW,YAAE,OAAO;AAAA,EACxB,aAAa,YAAE,OAAO,EAAE,IAAI,GAAG,mCAAmC;AAAA,EAClE,UAAU,YAAE,OAAO,EAAE,IAAI,GAAG,gCAAgC;AAC9D,CAAC;AAED,MAAM,kBAAkB,YAAE,OAAO;AAAA,EAC/B,cAAc,YAAE,OAAO,EAAE,SAAS,0EAA0E,EAAE,SAAS;AACzH,CAAC;AAED,MAAM,qBAAqB,YAAE,mBAAmB,QAAQ;AAAA,EACtD,YAAE,OAAO,gCAAE,MAAM,YAAE,QAAQ,IAAI,KAAM,SAAS,QAAU,OAAO,MAAO;AAAA,EACtE,YAAE,OAAO,gCAAE,MAAM,YAAE,QAAQ,WAAW,KAAM,gBAAgB,QAAU,OAAO,MAAO;AAAA,EACpF,YAAE,OAAO,iBAAE,MAAM,YAAE,QAAQ,QAAQ,KAAM,OAAO,MAAO;AACzD,CAAC;AAEM,MAAM,eAAe,mBACzB,IAAI,YAAE,OAAO,iDACT,SAAS,QACT,gBAAgB,QAChB,OAAO,MACX,EAAE,QAAQ,CAAC;AASP,MAAM,mBAA0C;AAAA,EAErD,YAAY,WAAmB,UAAkB,QAAgB;AADjE;AAEE,SAAK,QAAI,0BAAY,MAAM,EACxB,QAAQ,iDAAiD,SAAS,EAAE,EACpE,OAAO;AAAA,MACN,SAAS;AAAA,QACP,eAAe,UAAU,QAAQ;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EACQ,KAAK,MAAM;AACjB,WAAO,KAAK,EAAE,KAAK,iCAAiC;AAAA,MAClD,cAAc;AAAA,MACd,MAAM;AAAA,QACJ,qBAAqB;AAAA,UACnB,SAAS;AAAA,UACT,MAAM;AAAA,QACR;AAAA,SACG,OALC;AAAA,QAMJ,YAAY;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,qBAAqB;AAAA,QACvB;AAAA,QACA,eAAe;AAAA,UACb,aAAa;AAAA,UACb,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAIM,SAAU,MAAc,KAAoB;AAAA;AAChD,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,QAAe,IAAI;AAChD,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AAAA,EACM,QAAS,KAAa,KAAoB;AAAA;AAC9C,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,OAAa,IAAI;AAC9C,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AACF;AAEO,MAAM,mBAA0C;AAAA,EACrD,YAAoB,eAAuC;AAAvC;AAAA,EACpB;AAAA,EACM,SAAU,MAAc,KAAoB;AAAA;AAChD,iBAAO,iCAAe,KAAK,eAAe,MAAM,GAAG;AAAA,IACrD;AAAA;AAAA,EACM,QAAS,MAAc,KAAoB;AAAA;AAC/C,iBAAO,gCAAc,KAAK,eAAe,MAAM,GAAG;AAAA,IACpD;AAAA;AACF;AAGO,MAAM,sBAAsB,CAAC,SAAiB;AACnD,QAAM,IAAI,IAAI,gCAAU;AACxB,MAAI,MAAM,CAAC;AACX,MAAG,KAAK,WAAW,IAAI,GAAG;AACxB,UAAM,EAAE,mBAAmB,KAAK;AAAA,EAClC,WAAS,KAAK,WAAW,MAAM,GAAG;AAChC,UAAM,EAAE,YAAY,KAAK;AAAA,EAC3B;AACA,SAAO,MAAM,EAAE,QAAQ,GAAG;AAC5B;AASO,MAAM,iBAAiB,CAAC,WAAqC;AAClE,QAAkD,aAA1C,UAAQ,QAAQ,cAzH1B,IAyHoD,IAAR,iBAAQ,IAAR,CAAlC,UAAQ,UAAQ;AACxB,QAAM,MAAM,mBAAmB,MAAM,IAAI;AACzC,MAAG,IAAI,SAAS,MAAM;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa,IAAI,UAAU,MAAM;AAAA,EACrE;AACA,MAAG,IAAI,SAAS,UAAU;AACxB,QAAG,CAAC,OAAQ,OAAM,IAAI,MAAM,kCAAkC;AAC9D,WAAO;AAAA,EACT;AACA,MAAG,IAAI,cAAc;AACnB,WAAO,IAAI,mBAAmB,oBAAoB,IAAI,YAAY,CAAC;AAAA,EACrE;AACA,MAAG,eAAe;AAChB,WAAO,IAAI,mBAAmB,aAAa;AAAA,EAC7C;AACA,SAAO;AACT;","names":[]}
@@ -42,7 +42,7 @@ __export(builder_exports, {
42
42
  CommandBuilder: () => CommandBuilder
43
43
  });
44
44
  module.exports = __toCommonJS(builder_exports);
45
- var import_errors = require("../../infra/errors");
45
+ var import_errors = require("@/infra/errors");
46
46
  class CommandBuilder {
47
47
  constructor() {
48
48
  __publicField(this, "name");
@@ -22,12 +22,13 @@ __export(schedules_exports, {
22
22
  module.exports = __toCommonJS(schedules_exports);
23
23
  var import_temp = require("./temp");
24
24
  const getScheduleTasks = (config) => {
25
+ var _a, _b, _c, _d, _e;
25
26
  return [
26
27
  {
27
28
  name: "lb-rank-notifier",
28
29
  handler: import_temp.LBScoreMonitor,
29
- cron: config.tempCron.cron,
30
- enabled: config.tempCron.enabled
30
+ cron: (_b = (_a = config.cron) == null ? void 0 : _a.temp) == null ? void 0 : _b.cron,
31
+ enabled: (_e = (_d = (_c = config.cron) == null ? void 0 : _c.temp) == null ? void 0 : _d.enabled) != null ? _e : false
31
32
  }
32
33
  ];
33
34
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schedules/index.ts"],"sourcesContent":["import { Config } from '@/config'\nimport { LBScoreMonitor } from './temp'\n\n\nexport const getScheduleTasks = (config: Config) => {\n return [\n {\n name: 'lb-rank-notifier',\n handler: LBScoreMonitor,\n cron: config.tempCron.cron,\n enabled: config.tempCron.enabled,\n },\n ]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA+B;AAGxB,MAAM,mBAAmB,CAAC,WAAmB;AAClD,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,OAAO,SAAS;AAAA,MACtB,SAAS,OAAO,SAAS;AAAA,IAC3B;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/schedules/index.ts"],"sourcesContent":["import { Config } from '@/config'\nimport { LBScoreMonitor } from './temp'\n\n\nexport const getScheduleTasks = (config: Config) => {\n return [\n {\n name: 'lb-rank-notifier',\n handler: LBScoreMonitor,\n cron: config.cron?.temp?.cron,\n enabled: config.cron?.temp?.enabled ?? false,\n },\n ]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA+B;AAGxB,MAAM,mBAAmB,CAAC,WAAmB;AAJpD;AAKE,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAM,kBAAO,SAAP,mBAAa,SAAb,mBAAmB;AAAA,MACzB,UAAS,wBAAO,SAAP,mBAAa,SAAb,mBAAmB,YAAnB,YAA8B;AAAA,IACzC;AAAA,EACF;AACF;","names":[]}
@@ -42,7 +42,7 @@ __export(aioclient_exports, {
42
42
  AIOSaberClient: () => AIOSaberClient
43
43
  });
44
44
  module.exports = __toCommonJS(aioclient_exports);
45
- var import_fetch = require("../../../infra/support/fetch");
45
+ var import_fetch = require("@/infra/support/fetch");
46
46
  class AIOSaberClient {
47
47
  constructor(logger) {
48
48
  __publicField(this, "f");
@@ -42,7 +42,7 @@ __export(blclient_exports, {
42
42
  BeatLeaderClient: () => BeatLeaderClient
43
43
  });
44
44
  module.exports = __toCommonJS(blclient_exports);
45
- var import_fetch = require("../../../infra/support/fetch");
45
+ var import_fetch = require("@/infra/support/fetch");
46
46
  class BeatLeaderClient {
47
47
  constructor(opt) {
48
48
  __publicField(this, "f");
@@ -55,8 +55,8 @@ __export(bsclient_exports, {
55
55
  BeatSaverClient: () => BeatSaverClient
56
56
  });
57
57
  module.exports = __toCommonJS(bsclient_exports);
58
- var import_fetch = require("../../../infra/support/fetch");
59
- var import_error = require("../../../infra/support/fetch/error");
58
+ var import_fetch = require("@/infra/support/fetch");
59
+ var import_error = require("@/infra/support/fetch/error");
60
60
  class BeatSaverClient {
61
61
  constructor(opt) {
62
62
  __publicField(this, "f");
@@ -42,8 +42,8 @@ __export(ssclient_exports, {
42
42
  ScoreSaberClient: () => ScoreSaberClient
43
43
  });
44
44
  module.exports = __toCommonJS(ssclient_exports);
45
- var import_fetch = require("../../../infra/support/fetch");
46
- var import_error = require("../../../infra/support/fetch/error");
45
+ var import_fetch = require("@/infra/support/fetch");
46
+ var import_error = require("@/infra/support/fetch/error");
47
47
  class ScoreSaberClient {
48
48
  constructor(logger) {
49
49
  __publicField(this, "f");
@@ -56,18 +56,27 @@ __export(api_exports, {
56
56
  });
57
57
  module.exports = __toCommonJS(api_exports);
58
58
  var import_base = require("./base");
59
- var import_errors = require("../../infra/errors");
60
- var import_error = require("../../infra/support/fetch/error");
59
+ var import_errors = require("@/infra/errors");
60
+ var import_error = require("@/infra/support/fetch/error");
61
61
  var import_sortScore = require("./sortScore");
62
- var import_bsorDecoder = require("../../components/utils/bl/bsorDecoder");
62
+ var import_bsorDecoder = require("@/components/utils/bl/bsorDecoder");
63
63
  class APIService {
64
64
  constructor(cfg, logger) {
65
65
  __publicField(this, "BeatLeader");
66
66
  __publicField(this, "ScoreSaber");
67
67
  __publicField(this, "BeatSaver");
68
68
  __publicField(this, "AIOSaber");
69
- this.BeatSaver = new import_base.BeatSaverClient({ logger });
70
- this.BeatLeader = new import_base.BeatLeaderClient({ logger });
69
+ this.BeatSaver = new import_base.BeatSaverClient({
70
+ logger,
71
+ host: cfg.beatsaver.host,
72
+ client_id: cfg.beatsaver.oauthClientId,
73
+ client_secret: cfg.beatsaver.oauthClientSecret
74
+ });
75
+ this.BeatLeader = new import_base.BeatLeaderClient({
76
+ logger,
77
+ client_id: cfg.beatleader.oauthClientId,
78
+ client_secret: cfg.beatleader.oauthClientSecret
79
+ });
71
80
  this.ScoreSaber = new import_base.ScoreSaberClient(logger);
72
81
  this.AIOSaber = new import_base.AIOSaberClient(logger);
73
82
  }