koishi-plugin-warframe 1.7.10 → 1.8.0

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/lib/index.d.ts CHANGED
@@ -34,7 +34,7 @@ declare module "warframe/types/ocr" {
34
34
  }
35
35
  }
36
36
  declare module "warframe/types/warframe-result" {
37
- export const warframeErrorCodes: readonly ["common.fetchFailed", "relic.invalidName", "relic.dataLoading", "relic.notFound", "arbitration.invalidDayRange", "voidTrader.drifting", "voidTrader.arriving", "riven.imageFetchFailed", "riven.imageParseFailed", "riven.weaponNotFound", "riven.dispositionError", "riven.weaponTypeError", "riven.statTypeError", "wfm.inputItemName", "wfm.itemNotFound", "wfm.orderFetchFailed", "wfm.noOnlineSeller", "wfm.rivenWeaponNotFound", "wfm.rivenOrderFetchFailed", "wfm.noOnlineRivenSeller", "miscs.hotRiven.noData", "miscs.hotRiven.fetchFailed"];
37
+ export const warframeErrorCodes: readonly ["common.fetchFailed", "relic.invalidName", "relic.dataLoading", "relic.notFound", "arbitration.invalidDayRange", "bounty.unavailable", "voidTrader.drifting", "voidTrader.arriving", "riven.imageFetchFailed", "riven.imageParseFailed", "riven.weaponNotFound", "riven.dispositionError", "riven.weaponTypeError", "riven.statTypeError", "wfm.inputItemName", "wfm.itemNotFound", "wfm.orderFetchFailed", "wfm.noOnlineSeller", "wfm.rivenWeaponNotFound", "wfm.rivenOrderFetchFailed", "wfm.noOnlineRivenSeller", "miscs.hotRiven.noData", "miscs.hotRiven.fetchFailed"];
38
38
  export type WarframeErrorCode = typeof warframeErrorCodes[number];
39
39
  export type WarframeErrorParams = Record<string, string | number>;
40
40
  export interface WarframeError {
@@ -92,6 +92,81 @@ declare module "warframe/types/wf/arbitration" {
92
92
  rewards: number;
93
93
  }
94
94
  }
95
+ declare module "warframe/types/wf/bounty" {
96
+ export type BountyLocation = 'cetus' | 'fortuna' | 'deimos' | 'zariman' | 'cavia' | 'hex';
97
+ /** 掉落稀有度:probability 同阶段内最高→铜,中间→银,最低→金 */
98
+ export type BountyRewardRarity = 'bronze' | 'silver' | 'gold';
99
+ export type BountyStandingUnit = 'standing' | 'vq';
100
+ export interface RawSyndicateJob {
101
+ jobType?: string;
102
+ rewards: string;
103
+ masteryReq?: number;
104
+ minEnemyLevel: number;
105
+ maxEnemyLevel: number;
106
+ xpAmounts: number[];
107
+ isVault?: boolean;
108
+ locationTag?: string;
109
+ }
110
+ export interface RawSyndicateMission {
111
+ Tag: string;
112
+ Activation?: {
113
+ $date?: {
114
+ $numberLong?: string;
115
+ };
116
+ };
117
+ Expiry?: {
118
+ $date?: {
119
+ $numberLong?: string;
120
+ };
121
+ };
122
+ Jobs?: RawSyndicateJob[];
123
+ }
124
+ /** browse.wf Oracle `/bounty-cycle` response */
125
+ export interface OracleBountyEntry {
126
+ node: string;
127
+ challenge: string;
128
+ ally?: string;
129
+ }
130
+ export interface OracleBountyCycle {
131
+ expiry: number;
132
+ rot: string;
133
+ vaultRot: string;
134
+ zarimanFaction: string;
135
+ bounties: Record<string, OracleBountyEntry[]>;
136
+ }
137
+ export interface BountyReward {
138
+ name: string;
139
+ rarity: BountyRewardRarity;
140
+ }
141
+ export interface BountyJob {
142
+ name: string;
143
+ enemyLevels: [number, number];
144
+ standingStages: number[];
145
+ minMR: number;
146
+ isVault?: boolean;
147
+ locationTag?: string;
148
+ isNarmer?: boolean;
149
+ /** 各阶段奖励池(对应 ExportRewards 的各层);Oracle 赏金无此信息 */
150
+ stages: BountyReward[][];
151
+ /** Oracle 挑战描述 */
152
+ challenge?: string;
153
+ /** Hex 盟友显示名 */
154
+ ally?: string;
155
+ /** 声望单位:扎里曼为虚空余烬(VQ) */
156
+ standingUnit?: BountyStandingUnit;
157
+ }
158
+ export interface BountyBoard {
159
+ location: BountyLocation;
160
+ title: string;
161
+ expiry: number;
162
+ jobs: BountyJob[];
163
+ /** worldstate Jobs vs browse.wf Oracle */
164
+ source?: 'worldstate' | 'oracle';
165
+ rotation?: string;
166
+ vaultRotation?: string;
167
+ zarimanFaction?: string;
168
+ }
169
+ }
95
170
  declare module "warframe/types/wf/fissure" {
96
171
  import type { WFRegionShort } from "warframe/types/wf/region";
97
172
  export interface Fissure {
@@ -168,7 +243,7 @@ declare module "warframe/types/wfm" {
168
243
  onlineMin: number;
169
244
  }
170
245
  export type RivenAttributeShortInternal = RivenOrder['item']['attributes'][number] & {
171
- attribute: RivenAttribute;
246
+ attribute?: RivenAttribute;
172
247
  };
173
248
  export type RivenOrderInternal = Omit<RivenOrder, 'item'> & {
174
249
  item: Omit<RivenOrder['item'], 'attributes'> & {
@@ -272,6 +347,7 @@ declare module "warframe/types/index" {
272
347
  export type { OcrAPISecret } from "warframe/types/ocr";
273
348
  export type { WarframeError, WarframeErrorCode, WarframeErrorParams, WarframeFailure, WarframeResult, } from "warframe/types/warframe-result";
274
349
  export type { Arbitration, ArbitrationShort } from "warframe/types/wf/arbitration";
350
+ export type { BountyBoard, BountyJob, BountyLocation, BountyReward, BountyRewardRarity, BountyStandingUnit, OracleBountyCycle, OracleBountyEntry, RawSyndicateJob, RawSyndicateMission, } from "warframe/types/wf/bounty";
275
351
  export type { Fissure } from "warframe/types/wf/fissure";
276
352
  export type { WFRegion, WFRegionShort } from "warframe/types/wf/region";
277
353
  export type { ExternalRelic, ExternalRelicReward, OutputRelic, OutputRelicReward, Relic, RelicQuality, RelicReward, RelicRewardRarity, RelicTier, } from "warframe/types/wf/relic";
@@ -378,6 +454,11 @@ declare module "warframe/data/wf/arbitrationSchedule" {
378
454
  }
379
455
  declare module "warframe/infrastructure/wf/wf-api" {
380
456
  import type WorldState from 'warframe-worldstate-parser';
457
+ import type { OracleBountyCycle, RawSyndicateMission } from "warframe/types/index";
458
+ export function extractSyndicateMissionsRaw(json: string): RawSyndicateMission[];
459
+ export function fetchWorldStateJson(): Promise<string | undefined>;
460
+ /** browse.wf Oracle bounty cycle (Zariman / Cavia / Hex). */
461
+ export function fetchOracleBountyCycle(): Promise<OracleBountyCycle | undefined>;
381
462
  export function getWorldState(json?: string): Promise<WorldState>;
382
463
  export function getVoidTraderHistory(data?: string): Promise<VoidTraderData | undefined>;
383
464
  interface VoidTraderItem {
@@ -395,6 +476,11 @@ declare module "warframe/infrastructure/wf/wf-api" {
395
476
  [itemName: string]: VoidTraderItem;
396
477
  }
397
478
  }
479
+ declare module "warframe/data/wf/globalOracleBountyCycle" {
480
+ import type { AsyncCache, OracleBountyCycle } from "warframe/types/index";
481
+ export let globalOracleBountyCycle: AsyncCache<OracleBountyCycle | undefined>;
482
+ export function overrideGlobalOracleBountyCycle(cache: AsyncCache<OracleBountyCycle | undefined>): void;
483
+ }
398
484
  declare module "warframe/infrastructure/wf/wf-export-adapter" {
399
485
  import type { IRegion } from 'warframe-public-export-plus';
400
486
  import type { RelicQuality, WFRegionShort } from "warframe/types/index";
@@ -440,11 +526,12 @@ declare module "warframe/infrastructure/wf/wfcd-adapter" {
440
526
  }
441
527
  declare module "warframe/data/wf/globalWorldState" {
442
528
  import type WorldState from 'warframe-worldstate-parser';
443
- import type { Fissure } from "warframe/types/index";
529
+ import type { Fissure, RawSyndicateMission } from "warframe/types/index";
444
530
  type ParsedFissure = WorldState['fissures'][number];
445
531
  export function adaptFissure(fissure: ParsedFissure): Promise<Fissure>;
446
532
  export const globalWorldState: import("warframe").AsyncCache<{
447
533
  raw: WorldState;
534
+ syndicateMissionsRaw: RawSyndicateMission[];
448
535
  fissures: Fissure[];
449
536
  spFissures: Fissure[];
450
537
  rjFissures: Fissure[];
@@ -466,23 +553,92 @@ declare module "warframe/data/wf/rivenStatData" {
466
553
  export const rivenStatFixFactor: RivenStatFixFactorMap;
467
554
  }
468
555
  declare module "warframe/infrastructure/wfm-client" {
556
+ import type { WfmApiClient, WfmFetcher, WfmPlugin } from 'wfm-api-client';
557
+ /** Warframe-local: map request failures to `undefined` (not part of upstream client). */
558
+ export function softFailPlugin(): WfmPlugin;
559
+ /** `fetcher` is a test injection seam only; production uses the client default. */
560
+ export function createPluginWfmClient(fetcher?: WfmFetcher): WfmApiClient;
469
561
  export const wfmClient: {
470
- items: {
471
- getList: () => Promise<import("wfm-api-client").ItemShort[] | undefined>;
472
- getStatistics: (itemId: string) => Promise<import("wfm-api-client").StatisticsCollection | undefined>;
473
- getOrders: (itemId: string) => Promise<import("wfm-api-client").OrderWithUser[] | undefined>;
474
- };
475
- rivens: {
476
- getItems: () => Promise<import("wfm-api-client").RivenItem[] | undefined>;
477
- getOrders: (itemId: string) => Promise<import("wfm-api-client").RivenOrder[] | undefined>;
478
- getAttributes: () => Promise<import("wfm-api-client").RivenAttribute[] | undefined>;
479
- };
480
- tools: {
481
- getDucatnator: () => Promise<{
562
+ auth: ReturnType<(request: import("wfm-api-client").WfmRequest, hooks?: {
563
+ onTokens?: (tokens: import("wfm-api-client").AuthTokens) => void;
564
+ onSignOut?: () => void;
565
+ }) => ReturnType<(request: import("wfm-api-client").WfmRequest, hooks?: {
566
+ onTokens?: (tokens: import("wfm-api-client").AuthTokens) => void;
567
+ onSignOut?: () => void;
568
+ }) => {
569
+ refresh: (body: import("wfm-api-client").RefreshSessionBody, options?: import("wfm-api-client").RefreshSessionOptions) => Promise<import("wfm-api-client").AuthTokens>;
570
+ signOut: (options?: import("wfm-api-client").CallOptions) => Promise<void>;
571
+ }>>;
572
+ items: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
573
+ list: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Item[]>;
574
+ get: (ref: import("wfm-api-client").ItemRef, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Item>;
575
+ getSet: (ref: import("wfm-api-client").ItemRef, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").ItemSet>;
576
+ }> & ReturnType<(request: import("wfm-api-client").WfmRequest) => {
577
+ getStatistics: (slug: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").StatisticsCollection>;
578
+ }>>;
579
+ rivens: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
580
+ listWeapons: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").RivenItem[]>;
581
+ getWeapon: (slug: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").RivenItem>;
582
+ listAttributes: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").RivenAttribute[]>;
583
+ }> & ReturnType<(request: import("wfm-api-client").WfmRequest) => {
584
+ getOrders: (weaponUrlName: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").RivenOrder[]>;
585
+ }>>;
586
+ orders: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
587
+ getRecent: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order[]>;
588
+ listByItem: (ref: import("wfm-api-client").ItemRef, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order[]>;
589
+ getTopByItem: (ref: import("wfm-api-client").ItemRef, query?: import("wfm-api-client").TopOrdersQuery, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").TopOrders>;
590
+ listByUser: (ref: import("wfm-api-client").UserRef, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order[]>;
591
+ listMine: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order[]>;
592
+ get: (id: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order>;
593
+ create: (body: import("wfm-api-client").CreateOrderBody, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order>;
594
+ update: (id: string, body: import("wfm-api-client").UpdateOrderBody, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order>;
595
+ delete: (id: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Order>;
596
+ close: (id: string, body: import("wfm-api-client").CloseOrderBody, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Transaction>;
597
+ updateGroupVisibility: (id: string, body: import("wfm-api-client").UpdateOrderGroupVisibilityBody, options?: import("wfm-api-client").CallOptions) => Promise<{
598
+ updated: number;
599
+ }>;
600
+ }>>;
601
+ users: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
602
+ getMe: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").UserPrivate>;
603
+ updateMe: (body: import("wfm-api-client").UpdateMeBody, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").UserPrivate>;
604
+ uploadAvatar: (file: import("wfm-api-client").UploadBody, filename?: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").UserPrivate>;
605
+ uploadBackground: (file: import("wfm-api-client").UploadBody, filename?: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").UserPrivate>;
606
+ get: (ref: import("wfm-api-client").UserRef, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").User>;
607
+ }>>;
608
+ liches: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
609
+ listWeapons: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").LichWeapon[]>;
610
+ getWeapon: (slug: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").LichWeapon>;
611
+ listEphemeras: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").LichEphemera[]>;
612
+ listQuirks: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").LichQuirk[]>;
613
+ }>>;
614
+ sisters: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
615
+ listWeapons: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").SisterWeapon[]>;
616
+ getWeapon: (slug: string, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").SisterWeapon>;
617
+ listEphemeras: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").SisterEphemera[]>;
618
+ listQuirks: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").SisterQuirk[]>;
619
+ }>>;
620
+ manifests: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
621
+ getVersions: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Versions>;
622
+ listLocations: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Location[]>;
623
+ listNpcs: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Npc[]>;
624
+ listMissions: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Mission[]>;
625
+ }>>;
626
+ achievements: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
627
+ list: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Achievement[]>;
628
+ listByUser: (ref: import("wfm-api-client").UserRef, query?: {
629
+ featured?: boolean;
630
+ }, options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").Achievement[]>;
631
+ }>>;
632
+ dashboard: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
633
+ getShowcase: (options?: import("wfm-api-client").CallOptions) => Promise<import("wfm-api-client").DashboardShowcase>;
634
+ }>>;
635
+ tools: ReturnType<(request: import("wfm-api-client").WfmRequest) => ReturnType<(request: import("wfm-api-client").WfmRequest) => {
636
+ getDucatnator: (options?: import("wfm-api-client").CallOptions) => Promise<{
482
637
  day: import("wfm-api-client").Ducatnator[];
483
638
  hour: import("wfm-api-client").Ducatnator[];
484
- } | undefined>;
485
- };
639
+ }>;
640
+ }>>;
641
+ setAccessToken: (token: string | undefined) => void;
486
642
  };
487
643
  }
488
644
  declare module "warframe/data/wfm/globalRivenAttribute" {
@@ -532,9 +688,26 @@ declare module "warframe/infrastructure/ocr-api" {
532
688
  import type { OcrAPISecret } from "warframe/types/index";
533
689
  export function extractTextFromImage(image: string | Blob, secret: OcrAPISecret): Promise<string[] | undefined>;
534
690
  }
691
+ declare module "warframe/infrastructure/wf/bounty-adapter" {
692
+ import type { BountyBoard, BountyLocation, BountyRewardRarity, OracleBountyCycle, RawSyndicateMission } from "warframe/types/index";
693
+ export const bountyLocationTag: Record<BountyLocation, string>;
694
+ /** Locations whose Jobs are empty in official WorldState; use browse.wf Oracle. */
695
+ export const oracleBountyLocations: Set<BountyLocation>;
696
+ /**
697
+ * Map drop probability to 铜/银/金 within one stage.
698
+ * Highest unique probability → bronze, lowest → gold, middle → silver.
699
+ * With only two buckets: highest → bronze, lower → silver.
700
+ */
701
+ export function rarityFromStageProbabilities(probability: number, uniqueSortedDesc: number[]): BountyRewardRarity;
702
+ export function resolveExportItemNameZh(sourceKey: string): string;
703
+ export function adaptBountyBoard(location: BountyLocation, mission: RawSyndicateMission | undefined): BountyBoard | undefined;
704
+ export function findRawSyndicateMission(missions: RawSyndicateMission[], location: BountyLocation): RawSyndicateMission | undefined;
705
+ export function formatOracleChallenge(challengePath: string): string;
706
+ export function adaptOracleBountyBoard(location: 'zariman' | 'cavia' | 'hex', cycle: OracleBountyCycle | undefined): BountyBoard | undefined;
707
+ }
535
708
  declare module "warframe/services/wf-service" {
536
709
  import type { WeeklyRiven } from 'warframe-weekly-rivens';
537
- import type { Arbitration, ArchiMedea, ArchonHunt, Fissure, OcrAPISecret, Relic, RivenAttribute, RivenStatAnalyzeResult, RivenStatResult, VoidTrader, WarframeResult } from "warframe/types/index";
710
+ import type { Arbitration, ArchiMedea, ArchonHunt, BountyBoard, BountyLocation, Fissure, OcrAPISecret, Relic, RivenAttribute, RivenStatAnalyzeResult, RivenStatResult, VoidTrader, WarframeResult } from "warframe/types/index";
538
711
  import { weaponRivenDispositionDict } from "warframe/data/wf/rivenDisposition";
539
712
  export function getRelic(input: string): Promise<WarframeResult<Relic>>;
540
713
  export function getArbitrations(day?: number): WarframeResult<Arbitration[]>;
@@ -544,6 +717,7 @@ declare module "warframe/services/wf-service" {
544
717
  temporalArchimedea: ArchiMedea;
545
718
  }>>;
546
719
  export function getEnvironment(): Promise<string>;
720
+ export function getBounty(location: BountyLocation): Promise<WarframeResult<BountyBoard>>;
547
721
  export function getCircuitWeek(): {
548
722
  currentIncarnons: number;
549
723
  currentWarframes: number;
@@ -758,6 +932,7 @@ declare module "i18n" {
758
932
  readonly 'relic.dataLoading': "遗物数据未加载完成,请稍后再试";
759
933
  readonly 'relic.notFound': "未找到对应遗物信息";
760
934
  readonly 'arbitration.invalidDayRange': "天数需小于等于14且大于0";
935
+ readonly 'bounty.unavailable': "当前该地点暂无可用赏金";
761
936
  readonly 'voidTrader.drifting': "虚空商人仍在未知地带漂流...";
762
937
  readonly 'voidTrader.arriving': "距离虚空商人到达还有: {time}";
763
938
  readonly 'riven.imageNotFound': "未检测到图片";
@@ -819,10 +994,11 @@ declare module "utils/index" {
819
994
  declare module "components/wf" {
820
995
  import type { Element } from 'koishi';
821
996
  import type { WeeklyRiven } from 'warframe-weekly-rivens';
822
- import type { Arbitration, ArchiMedea, ArchonHunt, Fissure, OutputRelic, RivenStatAnalyzeResult, RivenStatResult, VoidTrader } from "warframe/index";
997
+ import type { Arbitration, ArchiMedea, ArchonHunt, BountyBoard, Fissure, OutputRelic, RivenStatAnalyzeResult, RivenStatResult, VoidTrader } from "warframe/index";
823
998
  export function ArbitrationComponent(arbi: Arbitration[]): Element;
824
999
  export function CircuitComponent(currentIncarnons: number, currentWarframes: number, allIncarnons: string[][], allWarframes: string[][]): Element;
825
1000
  export function FissureComponent(fissures: Fissure[], type: 'fissure' | 'sp-fissure' | 'rj-fissure'): Element;
1001
+ export function BountyComponent(board: BountyBoard): Element;
826
1002
  export function WeeklyRivenComponent(items: WeeklyRiven[], minPrice: number): Element;
827
1003
  export function WeeklyComponent(archon: ArchonHunt, deepArchimedea: ArchiMedea, temporalArchimedea: ArchiMedea): Element;
828
1004
  export function RelicComponent(relic: OutputRelic): Element;
@@ -846,6 +1022,12 @@ declare module "commands/wf" {
846
1022
  weeklyCommand: (_action: Argv) => Promise<string>;
847
1023
  weeklyRivenCommand: (_action: Argv, minPrice?: number) => Promise<string>;
848
1024
  environmentCommand: () => Promise<string>;
1025
+ bountyCetusCommand: () => Promise<string>;
1026
+ bountyFortunaCommand: () => Promise<string>;
1027
+ bountyDeimosCommand: () => Promise<string>;
1028
+ bountyZarimanCommand: () => Promise<string>;
1029
+ bountyCaviaCommand: () => Promise<string>;
1030
+ bountyHexCommand: () => Promise<string>;
849
1031
  };
850
1032
  }
851
1033
  declare module "components/render" {