torn-client 0.1.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/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/index.d.mts +5238 -0
- package/dist/index.d.ts +5238 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +73 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var a=class{requester;constructor(e){this.requester=e;}async applications(e){let t="/faction/applications",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async attacks(e){let t="/faction/attacks",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async attacksfull(e){let t="/faction/attacksfull",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async balance(e){let t="/faction/balance",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async basic(e){let t="/faction/basic",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async chain(e){let t="/faction/chain",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async chains(e){let t="/faction/chains",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async chainreport(e){let t="/faction/chainreport",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async contributors(e){let t="/faction/contributors",s={...e?.stat!==void 0&&{stat:e.stat},...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async crimes(e){let t="/faction/crimes",s={...e?.cat!==void 0&&{cat:e.cat},...e?.filters!==void 0&&{filters:e.filters},...e?.offset!==void 0&&{offset:e.offset},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async hof(e){let t="/faction/hof",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async members(e){let t="/faction/members",s={...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async news(e){let t="/faction/news",s={...e?.striptags!==void 0&&{striptags:e.striptags},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async positions(e){let t="/faction/positions",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async rackets(e){let t="/faction/rackets",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async raids(e){let t="/faction/raids",s={...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async rankedwars(e){let t="/faction/rankedwars",s={...e?.cat!==void 0&&{cat:e.cat},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async reports(e){let t="/faction/reports",s={...e?.cat!==void 0&&{cat:e.cat},...e?.target!==void 0&&{target:e.target},...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async revives(e){let t="/faction/revives",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async revivesfull(e){let t="/faction/revivesFull",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async search(e){let t="/faction/search",s={...e?.name!==void 0&&{name:e.name},...e?.filters&&{filters:e.filters.join(",")},...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async stats(e){let t="/faction/stats",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async territory(e){let t="/faction/territory",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async territoryownership(e){let t="/faction/territoryownership",s={...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async territorywars(e){let t="/faction/territorywars",s={...e?.cat!==void 0&&{cat:e.cat},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.sort!==void 0&&{sort:e.sort},...e?.limit!==void 0&&{limit:e.limit},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async upgrades(e){let t="/faction/upgrades",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async warfare(e){let t="/faction/warfare",s={...e?.cat!==void 0&&{cat:e.cat},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async wars(e){let t="/faction/wars",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async lookup(e){let t="/faction/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/faction/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/faction",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.limit!==void 0&&{limit:e.limit},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.cat!==void 0&&{cat:e.cat},...e?.stat!==void 0&&{stat:e.stat},...e?.filters!==void 0&&{filters:e.filters},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.sort!==void 0&&{sort:e.sort},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}withId(e){return new F(this.requester,e)}withChainId(e){return new T(this.requester,e)}withCrimeId(e){return new k(this.requester,e)}withRaidWarId(e){return new I(this.requester,e)}withRankedWarId(e){return new C(this.requester,e)}withTerritoryWarId(e){return new x(this.requester,e)}},F=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async basic(e){let t=`/faction/${this.contextId}/basic`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async chain(e){let t=`/faction/${this.contextId}/chain`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async chains(e){let t=`/faction/${this.contextId}/chains`,s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async hof(e){let t=`/faction/${this.contextId}/hof`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async members(e){let t=`/faction/${this.contextId}/members`,s={...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async raids(e){let t=`/faction/${this.contextId}/raids`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async rankedwars(e){let t=`/faction/${this.contextId}/rankedwars`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async territory(e){let t=`/faction/${this.contextId}/territory`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async territorywars(e){let t=`/faction/${this.contextId}/territorywars`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async wars(e){let t=`/faction/${this.contextId}/wars`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(){let e=`/faction/${this.contextId}`,t={};return this.requester(e,t)}},T=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async chainreport(e){let t=`/faction/${this.contextId}/chainreport`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},k=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async crime(e){let t=`/faction/${this.contextId}/crime`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},I=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async raidreport(e){let t=`/faction/${this.contextId}/raidreport`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},C=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async rankedwarreport(e){let t=`/faction/${this.contextId}/rankedwarreport`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},x=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async territorywarreport(e){let t=`/faction/${this.contextId}/territorywarreport`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var f=class{requester;constructor(e){this.requester=e;}async categories(e){let t="/forum/categories",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async threads(e){let t="/forum/threads",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async lookup(e){let t="/forum/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/forum/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/forum",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}withThreadId(e){return new v(this.requester,e)}withCategoryIds(e){return new S(this.requester,e)}},v=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async posts(e){let t=`/forum/${this.contextId}/posts`,s={...e?.offset!==void 0&&{offset:e.offset},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async thread(e){let t=`/forum/${this.contextId}/thread`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},S=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async threads(e){let t=`/forum/${this.contextId}/threads`,s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var l=class{requester;constructor(e){this.requester=e;}async log(e){let t="/key/log",s={...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async info(e){let t="/key/info",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/key",s={...e?.selections&&{selections:e.selections.join(",")},...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var h=class{requester;constructor(e){this.requester=e;}async bazaar(e){let t="/market/bazaar",s={...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async lookup(e){let t="/market/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/market/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/market",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.cat!==void 0&&{cat:e.cat},...e?.bonus!==void 0&&{bonus:e.bonus},...e?.sort!==void 0&&{sort:e.sort},...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}withId(e){return new w(this.requester,e)}withPropertyTypeId(e){return new E(this.requester,e)}},w=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async bazaar(e){let t=`/market/${this.contextId}/bazaar`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async itemmarket(e){let t=`/market/${this.contextId}/itemmarket`,s={...e?.bonus!==void 0&&{bonus:e.bonus},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},E=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async properties(e){let t=`/market/${this.contextId}/properties`,s={...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async rentals(e){let t=`/market/${this.contextId}/rentals`,s={...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var y=class{requester;constructor(e){this.requester=e;}withId(e){return new U(this.requester,e)}async lookup(e){let t="/property/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/property/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/property",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},U=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async get(e){let t=`/property/${this.contextId}/property`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var R=class{requester;constructor(e){this.requester=e;}async cars(e){let t="/racing/cars",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async carupgrades(e){let t="/racing/carupgrades",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async races(e){let t="/racing/races",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async tracks(e){let t="/racing/tracks",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async lookup(e){let t="/racing/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/racing/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/racing",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.cat!==void 0&&{cat:e.cat},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}withRaceId(e){return new A(this.requester,e)}withTrackId(e){return new M(this.requester,e)}},A=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async race(e){let t=`/racing/${this.contextId}/race`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},M=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async records(e){let t=`/racing/${this.contextId}/records`,s={...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var g=class{requester;constructor(e){this.requester=e;}async attacklog(e){let t="/torn/attacklog",s={...e?.log!==void 0&&{log:e.log},...e?.offset!==void 0&&{offset:e.offset},...e?.sort!==void 0&&{sort:e.sort},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async bounties(e){let t="/torn/bounties",s={...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async calendar(e){let t="/torn/calendar",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async crimes(e){let t="/torn/crimes",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async education(e){let t="/torn/education",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async factionhof(e){let t="/torn/factionhof",s={...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async factiontree(e){let t="/torn/factiontree",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async hof(e){let t="/torn/hof",s={...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async itemammo(e){let t="/torn/itemammo",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async itemmods(e){let t="/torn/itemmods",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async items(e){let t="/torn/items",s={...e?.cat!==void 0&&{cat:e.cat},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async logcategories(e){let t="/torn/logcategories",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async logtypes(e){let t="/torn/logtypes",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async organizedcrimes(e){let t="/torn/organizedcrimes",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async properties(e){let t="/torn/properties",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async territory(e){let t="/torn/territory",s={...e?.ids&&{ids:e.ids.join(",")},...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async lookup(e){let t="/torn/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/torn/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/torn",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.limit!==void 0&&{limit:e.limit},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.sort!==void 0&&{sort:e.sort},...e?.cat!==void 0&&{cat:e.cat},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}withIds(e){return new L(this.requester,e)}withLogCategoryId(e){return new K(this.requester,e)}withCrimeId(e){return new D(this.requester,e)}},L=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async items(e){let t=`/torn/${this.contextId}/items`,s={...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},K=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async logtypes(e){let t=`/torn/${this.contextId}/logtypes`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}},D=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async subcrimes(e){let t=`/torn/${this.contextId}/subcrimes`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var b=class{requester;constructor(e){this.requester=e;}async attacks(e){let t="/user/attacks",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async attacksfull(e){let t="/user/attacksfull",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async bounties(e){let t="/user/bounties",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async calendar(e){let t="/user/calendar",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async education(e){let t="/user/education",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async enlistedcars(e){let t="/user/enlistedcars",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async factionbalance(e){let t="/user/factionbalance",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumfeed(e){let t="/user/forumfeed",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumfriends(e){let t="/user/forumfriends",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumposts(e){let t="/user/forumposts",s={...e?.striptags!==void 0&&{striptags:e.striptags},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumsubscribedthreads(e){let t="/user/forumsubscribedthreads",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumthreads(e){let t="/user/forumthreads",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async hof(e){let t="/user/hof",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async itemmarket(e){let t="/user/itemmarket",s={...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async jobranks(e){let t="/user/jobranks",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async list(e){let t="/user/list",s={...e?.cat!==void 0&&{cat:e.cat},...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.sort!==void 0&&{sort:e.sort},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async organizedcrime(e){let t="/user/organizedcrime",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async personalstats(e){let t="/user/personalstats",s={...e?.cat!==void 0&&{cat:e.cat},...e?.stat&&{stat:e.stat.join(",")},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async properties(e){let t="/user/properties",s={...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async property(e){let t="/user/property",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async races(e){let t="/user/races",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.cat!==void 0&&{cat:e.cat},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async racingrecords(e){let t="/user/racingrecords",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async reports(e){let t="/user/reports",s={...e?.cat!==void 0&&{cat:e.cat},...e?.target!==void 0&&{target:e.target},...e?.limit!==void 0&&{limit:e.limit},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async revives(e){let t="/user/revives",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async revivesfull(e){let t="/user/revivesFull",s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.to!==void 0&&{to:e.to},...e?.from!==void 0&&{from:e.from},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async lookup(e){let t="/user/lookup",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async timestamp(e){let t="/user/timestamp",s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(e){let t="/user",s={...e?.selections&&{selections:e.selections.join(",")},...e?.id!==void 0&&{id:e.id},...e?.limit!==void 0&&{limit:e.limit},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.sort!==void 0&&{sort:e.sort},...e?.cat!==void 0&&{cat:e.cat},...e?.stat&&{stat:e.stat.join(",")},...e?.striptags!==void 0&&{striptags:e.striptags},...e?.offset!==void 0&&{offset:e.offset},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}withId(e){return new W(this.requester,e)}withCrimeId(e){return new $(this.requester,e)}},W=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async bounties(e){let t=`/user/${this.contextId}/bounties`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumposts(e){let t=`/user/${this.contextId}/forumposts`,s={...e?.striptags!==void 0&&{striptags:e.striptags},...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async forumthreads(e){let t=`/user/${this.contextId}/forumthreads`,s={...e?.limit!==void 0&&{limit:e.limit},...e?.sort!==void 0&&{sort:e.sort},...e?.from!==void 0&&{from:e.from},...e?.to!==void 0&&{to:e.to},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async hof(e){let t=`/user/${this.contextId}/hof`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async personalstats(e){let t=`/user/${this.contextId}/personalstats`,s={...e?.cat!==void 0&&{cat:e.cat},...e?.stat&&{stat:e.stat.join(",")},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async properties(e){let t=`/user/${this.contextId}/properties`,s={...e?.offset!==void 0&&{offset:e.offset},...e?.limit!==void 0&&{limit:e.limit},...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async property(e){let t=`/user/${this.contextId}/property`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}async get(){let e=`/user/${this.contextId}`,t={};return this.requester(e,t)}},$=class{requester;contextId;constructor(e,t){this.requester=e,this.contextId=t;}async crimes(e){let t=`/user/${this.contextId}/crimes`,s={...e?.timestamp!==void 0&&{timestamp:e.timestamp}};return this.requester(t,s)}};var c=class extends Error{code;constructor(e){super(e.error),this.name="TornApiError",this.code=e.code;}},d=class extends Error{constructor(e){super(e),this.name="TornRateLimitError";}};var q=class{nextUrl;prevUrl;requester;constructor(e,t,s,r){Object.assign(this,e),this.nextUrl=t,this.prevUrl=s,this.requester=r;}async fetchPage(e){if(!e)return null;let t=new URL(e),s=t.pathname.substring(3),r={};for(let[u,n]of t.searchParams.entries())r[u]=n;return this.requester(s,r)}next(){return this.fetchPage(this.nextUrl)}prev(){return this.fetchPage(this.prevUrl)}};var z=i=>i instanceof Error,N=i=>typeof i=="object"&&i!==null&&"error"in i&&typeof i.error=="object"&&i.error!==null&&"code"in i.error&&"error"in i.error,j=i=>typeof i=="object"&&i!==null&&"_metadata"in i&&typeof i._metadata=="object"&&i._metadata!==null&&"links"in i._metadata,P=class{apiKeys;rateLimitMode;comment;headers;apiUrl;apiKeyBalancing;verbose;apiKeyIndex=0;requestTimestamps=new Map;constructor(e){if(!e.apiKeys||e.apiKeys.length===0)throw new Error("At least one API key must be provided.");this.apiKeys=e.apiKeys,this.rateLimitMode=e.rateLimitMode??"autoDelay",this.comment=e.comment,this.headers=e.headers??{},this.apiUrl=e.apiUrl??"https://api.torn.com/v2",this.apiKeyBalancing=e.apiKeyBalancing??"roundRobin",this.verbose=!!e.verbose;for(let t of this.apiKeys)this.requestTimestamps.set(t,[]);}log(...e){this.verbose&&console.log("[TornClient]",...e);}requester=this.makeRequest.bind(this);isKeyAvailable(e){if(this.rateLimitMode==="ignore")return true;let s=Date.now()-6e4,r=(this.requestTimestamps.get(e)??[]).filter(u=>u>s);return this.requestTimestamps.set(e,r),r.length<100}findAvailableKey(){for(let e=0;e<this.apiKeys.length;e++){let t=this.getApiKey();if(this.isKeyAvailable(t))return t}return null}getMinWaitTime(){let e=Date.now(),t=60100;for(let s of this.apiKeys){let r=this.requestTimestamps.get(s)??[];if(r.length>=100){let u=r[0],n=6e4-(e-u)+100;n<t&&(t=n);}}return Math.max(0,t)}getApiKey(){if(this.apiKeys.length===1)return this.apiKeys[0];if(this.apiKeyBalancing==="random"){let t=Math.floor(Math.random()*this.apiKeys.length);return this.apiKeys[t]}let e=this.apiKeys[this.apiKeyIndex];return this.apiKeyIndex=(this.apiKeyIndex+1)%this.apiKeys.length,e}async makeRequest(e,t){this.log("Request received:",e,t);let s=this.findAvailableKey();if(!s){if(this.rateLimitMode==="autoDelay"){let n=this.getMinWaitTime();this.log(`All keys are on cooldown. Delaying for ${n}ms...`),await new Promise(o=>setTimeout(o,n)),s=this.findAvailableKey();}if(!s){let n=new d("Rate limit of 100 requests/minute exceeded for all available keys");throw this.log("Rate limit exceeded for all keys"),n}}this.log(`Using API key: ${s.slice(0,5)}...`);let r=new URL(`${this.apiUrl}${e}`);for(let[n,o]of Object.entries(t))o!=null&&n!=="key"&&n!=="comment"&&r.searchParams.set(n,String(o));this.comment&&r.searchParams.set("comment",this.comment);let u={headers:{Accept:"application/json",Authorization:`ApiKey ${s}`,...this.headers}};try{this.log("Fetching:",r.toString());let n=await fetch(r.toString(),u);if(this.rateLimitMode!=="ignore"){let p=this.requestTimestamps.get(s)??[];p.push(Date.now()),this.requestTimestamps.set(s,p);}if(!n.ok)throw new Error(`Request failed with status ${n.status}: ${n.statusText}`);let o=await n.json();if(N(o))throw new c(o.error);let m;return j(o)?m=new q(o,o._metadata.links.next,o._metadata.links.prev,this.requester):m=o,this.log("Response data:",m),m}catch(n){let o=z(n)?n:new Error("An unknown error occurred");throw this.log("Request failed:",o.message),o}}getRateLimitInfo(){let e=Date.now(),t=e-6e4,s={};for(let r of this.apiKeys){let u=(this.requestTimestamps.get(r)??[]).filter(H=>H>t),n=u.length,o=Math.max(0,100-n),m=u[0]??null,p=m?Math.max(0,6e4-(e-m)):0;s[r.slice(0,5)]={used:n,remaining:o,resetInMs:p};}return s}};var B=class{user;faction;market;property;racing;forum;key;torn;rateLimitMode;requestHandler;constructor(e){if(!e.apiKeys||e.apiKeys.length===0)throw new Error("At least one API key is required to initialize the client.");this.rateLimitMode=e.rateLimitMode??"autoDelay",this.requestHandler=new P(e);let t=this.requestHandler.requester;this.user=new b(t),this.faction=new a(t),this.market=new h(t),this.property=new y(t),this.racing=new R(t),this.forum=new f(t),this.torn=new g(t),this.key=new l(t);}getRateLimitInfo(){return this.requestHandler.getRateLimitInfo()}};
|
|
2
|
+
exports.FactionChainIdContext=T;exports.FactionCrimeIdContext=k;exports.FactionEndpoint=a;exports.FactionIdContext=F;exports.FactionRaidWarIdContext=I;exports.FactionRankedWarIdContext=C;exports.FactionTerritoryWarIdContext=x;exports.ForumCategoryIdsContext=S;exports.ForumEndpoint=f;exports.ForumThreadIdContext=v;exports.KeyEndpoint=l;exports.MarketEndpoint=h;exports.MarketIdContext=w;exports.MarketPropertyTypeIdContext=E;exports.PaginatedResponse=q;exports.PropertyEndpoint=y;exports.PropertyIdContext=U;exports.RacingEndpoint=R;exports.RacingRaceIdContext=A;exports.RacingTrackIdContext=M;exports.TornAPI=B;exports.TornApiError=c;exports.TornCrimeIdContext=D;exports.TornEndpoint=g;exports.TornIdsContext=L;exports.TornLogCategoryIdContext=K;exports.TornRateLimitError=d;exports.UserCrimeIdContext=$;exports.UserEndpoint=b;exports.UserIdContext=W;//# sourceMappingURL=index.js.map
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/generated/endpoints/faction.ts","../src/generated/endpoints/forum.ts","../src/generated/endpoints/key.ts","../src/generated/endpoints/market.ts","../src/generated/endpoints/property.ts","../src/generated/endpoints/racing.ts","../src/generated/endpoints/torn.ts","../src/generated/endpoints/user.ts","../src/client/errors.ts","../src/client/paginated.ts","../src/client/requester.ts","../src/client/index.ts"],"names":["FactionEndpoint","requester","params","path","query","id","FactionIdContext","chainId","FactionChainIdContext","crimeId","FactionCrimeIdContext","raidWarId","FactionRaidWarIdContext","rankedWarId","FactionRankedWarIdContext","territoryWarId","FactionTerritoryWarIdContext","contextId","ForumEndpoint","threadId","ForumThreadIdContext","categoryIds","ForumCategoryIdsContext","KeyEndpoint","MarketEndpoint","MarketIdContext","propertyTypeId","MarketPropertyTypeIdContext","PropertyEndpoint","PropertyIdContext","RacingEndpoint","raceId","RacingRaceIdContext","trackId","RacingTrackIdContext","TornEndpoint","ids","TornIdsContext","logCategoryId","TornLogCategoryIdContext","TornCrimeIdContext","UserEndpoint","UserIdContext","UserCrimeIdContext","TornApiError","errorResponse","TornRateLimitError","message","PaginatedResponse","data","nextUrl","prevUrl","url","parsedUrl","key","value","isError","error","isApiError","isApiPaginatedResponse","RequestHandler","options","args","apiKey","oneMinuteAgo","timestamps","ts","i","now","minWaitTime","oldestRequestTimestamp","keyWaitTime","idx","waitTime","resolve","requestOptions","response","resultData","err","info","used","remaining","oldestRequest","resetInMs","TornAPI"],"mappings":"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","file":"index.js","sourcesContent":["import type { Requester } from \"../../client/types\";\nimport { PaginatedResponse } from \"../../client/paginated\";\nimport type {\n ChainId,\n Faction,\n FactionApplicationsResponse,\n FactionAttacksFullResponse,\n FactionAttacksResponse,\n FactionBalanceResponse,\n FactionBasicResponse,\n FactionChainReportResponse,\n FactionChainsResponse,\n FactionContributorsResponse,\n FactionCrimeId,\n FactionCrimeResponse,\n FactionCrimesResponse,\n FactionHofResponse,\n FactionId,\n FactionLookupResponse,\n FactionMembersResponse,\n FactionNewsCategory,\n FactionNewsResponse,\n FactionOngoingChainResponse,\n FactionPositionsResponse,\n FactionRacketsResponse,\n FactionRaidWarReportResponse,\n FactionRaidsResponse,\n FactionRankedWarReportResponse,\n FactionRankedWarResponse,\n FactionRankedWarsCategoryEnum,\n FactionResponse,\n FactionSearchResponse,\n FactionSelectionName,\n FactionStatEnum,\n FactionStatsResponse,\n FactionTerritoriesOwnershipResponse,\n FactionTerritoriesResponse,\n FactionTerritoryWarReportResponse,\n FactionTerritoryWarsCategoryEnum,\n FactionTerritoryWarsHistoryResponse,\n FactionTerritoryWarsResponse,\n FactionUpgradesResponse,\n FactionWarfareResponse,\n FactionWarfareTypeEnum,\n FactionWarsResponse,\n RaidWarId,\n RankedWarId,\n ReportTypeEnum,\n ReportsResponse,\n RevivesFullResponse,\n RevivesResponse,\n TerritoryWarId,\n TimestampResponse,\n UserId,\n} from \"../models\";\n\n/**\n * Access the Faction API endpoints\n * @category Endpoints\n */\nexport class FactionEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get your faction's applications\n * @param params - Optional query parameters\n */\n public async applications(params?: {\n timestamp?: string;\n }): Promise<FactionApplicationsResponse> {\n const path = `/faction/applications`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's detailed attacks\n * @param params - Optional query parameters\n */\n public async attacks(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionAttacksResponse> & FactionAttacksResponse\n > {\n const path = `/faction/attacks`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's simplified attacks\n * @param params - Optional query parameters\n */\n public async attacksfull(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionAttacksFullResponse> & FactionAttacksFullResponse\n > {\n const path = `/faction/attacksfull`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's & member's balance details\n * @param params - Optional query parameters\n */\n public async balance(params?: {\n timestamp?: string;\n }): Promise<FactionBalanceResponse> {\n const path = `/faction/balance`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's basic details\n * @param params - Optional query parameters\n */\n public async basic(params?: {\n timestamp?: string;\n }): Promise<FactionBasicResponse> {\n const path = `/faction/basic`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's current chain\n * @param params - Optional query parameters\n */\n public async chain(params?: {\n timestamp?: string;\n }): Promise<FactionOngoingChainResponse> {\n const path = `/faction/chain`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of your faction's completed chains\n * @param params - Optional query parameters\n */\n public async chains(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionChainsResponse> & FactionChainsResponse\n > {\n const path = `/faction/chains`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's latest chain report\n * @param params - Optional query parameters\n */\n public async chainreport(params?: {\n timestamp?: string;\n }): Promise<FactionChainReportResponse> {\n const path = `/faction/chainreport`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's challenge contributors\n * @param params - Optional query parameters\n */\n public async contributors(params?: {\n stat?: FactionStatEnum;\n cat?: \"all\" | \"current\";\n timestamp?: string;\n }): Promise<FactionContributorsResponse> {\n const path = `/faction/contributors`;\n const query = {\n ...(params?.stat !== undefined && { stat: params.stat }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's organized crimes\n * @param params - Optional query parameters\n */\n public async crimes(params?: {\n cat?:\n | \"all\"\n | \"recruiting\"\n | \"planning\"\n | \"failure\"\n | \"successful\"\n | \"expired\"\n | \"available\"\n | \"completed\";\n filters?: \"created_at\" | \"executed_at\" | \"ready_at\" | \"expired_at\";\n offset?: number;\n from?: number;\n to?: number;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionCrimesResponse> & FactionCrimesResponse\n > {\n const path = `/faction/crimes`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.filters !== undefined && { filters: params.filters }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's hall of fame rankings.\n * @param params - Optional query parameters\n */\n public async hof(params?: {\n timestamp?: string;\n }): Promise<FactionHofResponse> {\n const path = `/faction/hof`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of your faction's members\n * @param params - Optional query parameters\n */\n public async members(params?: {\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<FactionMembersResponse> {\n const path = `/faction/members`;\n const query = {\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's news details\n * @param params - Optional query parameters\n */\n public async news(params?: {\n striptags?: \"true\" | \"false\";\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n cat?: FactionNewsCategory;\n timestamp?: string;\n }): Promise<PaginatedResponse<FactionNewsResponse> & FactionNewsResponse> {\n const path = `/faction/news`;\n const query = {\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's positions details\n * @param params - Optional query parameters\n */\n public async positions(params?: {\n timestamp?: string;\n }): Promise<FactionPositionsResponse> {\n const path = `/faction/positions`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of current rackets\n * @param params - Optional query parameters\n */\n public async rackets(params?: {\n timestamp?: string;\n }): Promise<FactionRacketsResponse> {\n const path = `/faction/rackets`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get raids history for your faction\n * @param params - Optional query parameters\n */\n public async raids(params?: {\n from?: number;\n to?: number;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<PaginatedResponse<FactionRaidsResponse> & FactionRaidsResponse> {\n const path = `/faction/raids`;\n const query = {\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get ranked wars history for your faction\n * @param params - Optional query parameters\n */\n public async rankedwars(params?: {\n cat?: FactionRankedWarsCategoryEnum;\n from?: number;\n to?: number;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionRankedWarResponse> & FactionRankedWarResponse\n > {\n const path = `/faction/rankedwars`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get faction reports\n * @param params - Optional query parameters\n */\n public async reports(params?: {\n cat?: ReportTypeEnum;\n target?: UserId;\n limit?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<PaginatedResponse<ReportsResponse> & ReportsResponse> {\n const path = `/faction/reports`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.target !== undefined && { target: params.target }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's detailed revives\n * @param params - Optional query parameters\n */\n public async revives(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<PaginatedResponse<RevivesResponse> & RevivesResponse> {\n const path = `/faction/revives`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's simplified revives\n * @param params - Optional query parameters\n */\n public async revivesfull(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<PaginatedResponse<RevivesFullResponse> & RevivesFullResponse> {\n const path = `/faction/revivesFull`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Search factions by name or other criteria\n * @param params - Optional query parameters\n */\n public async search(params?: {\n name?: string;\n filters?: (\n | \"destroyed\"\n | \"notDestroyed\"\n | \"recruiting\"\n | \"notRecruiting\"\n | string\n )[];\n limit?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionSearchResponse> & FactionSearchResponse\n > {\n const path = `/faction/search`;\n const query = {\n ...(params?.name !== undefined && { name: params.name }),\n ...(params?.filters && { filters: params.filters.join(\",\") }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's challenges stats\n * @param params - Optional query parameters\n */\n public async stats(params?: {\n timestamp?: string;\n }): Promise<FactionStatsResponse> {\n const path = `/faction/stats`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of your faction's territories\n * @param params - Optional query parameters\n */\n public async territory(params?: {\n timestamp?: string;\n }): Promise<FactionTerritoriesResponse> {\n const path = `/faction/territory`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of your faction's territories\n * @param params - Optional query parameters\n */\n public async territoryownership(params?: {\n offset?: number;\n limit?: number;\n timestamp?: string;\n }): Promise<FactionTerritoriesOwnershipResponse> {\n const path = `/faction/territoryownership`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get territory wars history for your faction\n * @param params - Optional query parameters\n */\n public async territorywars(params?: {\n cat?: FactionTerritoryWarsCategoryEnum;\n from?: number;\n to?: number;\n sort?: \"DESC\" | \"ASC\";\n limit?: number;\n timestamp?: string;\n }): Promise<FactionTerritoryWarsResponse> {\n const path = `/faction/territorywars`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's upgrades\n * @param params - Optional query parameters\n */\n public async upgrades(params?: {\n timestamp?: string;\n }): Promise<FactionUpgradesResponse> {\n const path = `/faction/upgrades`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get faction warfare\n * @param params - Optional query parameters\n */\n public async warfare(params?: {\n cat?: FactionWarfareTypeEnum;\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionWarfareResponse> & FactionWarfareResponse\n > {\n const path = `/faction/warfare`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your faction's wars & pacts details\n * @param params - Optional query parameters\n */\n public async wars(params?: {\n timestamp?: string;\n }): Promise<FactionWarsResponse> {\n const path = `/faction/wars`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * No summary available\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<FactionLookupResponse> {\n const path = `/faction/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/faction/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any Faction selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: FactionSelectionName[];\n id?:\n | FactionId\n | FactionCrimeId\n | ChainId\n | RankedWarId\n | TerritoryWarId\n | RaidWarId;\n limit?: number;\n from?: number;\n to?: number;\n cat?:\n | \"all\"\n | \"current\"\n | \"all\"\n | \"recruiting\"\n | \"planning\"\n | \"failure\"\n | \"successful\"\n | \"expired\"\n | \"available\"\n | \"completed\"\n | FactionNewsCategory\n | FactionRankedWarsCategoryEnum\n | ReportTypeEnum\n | FactionWarfareTypeEnum\n | FactionTerritoryWarsCategoryEnum;\n stat?: FactionStatEnum;\n filters?: \"created_at\" | \"executed_at\" | \"ready_at\" | \"expired_at\";\n striptags?: \"true\" | \"false\";\n sort?: \"DESC\" | \"ASC\";\n offset?: number;\n timestamp?: string;\n }): Promise<FactionResponse> {\n const path = `/faction`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.stat !== undefined && { stat: params.stat }),\n ...(params?.filters !== undefined && { filters: params.filters }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** @param id - The ID for this context */\n public withId(id: string | number): FactionIdContext {\n return new FactionIdContext(this.requester, id);\n }\n\n /** @param chainId - The ID for this context */\n public withChainId(chainId: string | number): FactionChainIdContext {\n return new FactionChainIdContext(this.requester, chainId);\n }\n\n /** @param crimeId - The ID for this context */\n public withCrimeId(crimeId: string | number): FactionCrimeIdContext {\n return new FactionCrimeIdContext(this.requester, crimeId);\n }\n\n /** @param raidWarId - The ID for this context */\n public withRaidWarId(raidWarId: string | number): FactionRaidWarIdContext {\n return new FactionRaidWarIdContext(this.requester, raidWarId);\n }\n\n /** @param rankedWarId - The ID for this context */\n public withRankedWarId(\n rankedWarId: string | number,\n ): FactionRankedWarIdContext {\n return new FactionRankedWarIdContext(this.requester, rankedWarId);\n }\n\n /** @param territoryWarId - The ID for this context */\n public withTerritoryWarId(\n territoryWarId: string | number,\n ): FactionTerritoryWarIdContext {\n return new FactionTerritoryWarIdContext(this.requester, territoryWarId);\n }\n}\n\n/**\n * Context class for Faction API endpoints that require a 'id'\n * @category Endpoints\n */\nexport class FactionIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get a faction's basic details\n * @param params - Optional query parameters\n */\n public async basic(params?: {\n timestamp?: string;\n }): Promise<FactionBasicResponse> {\n const path = `/faction/${this.contextId}/basic`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a faction's current chain\n * @param params - Optional query parameters\n */\n public async chain(params?: {\n timestamp?: string;\n }): Promise<FactionOngoingChainResponse> {\n const path = `/faction/${this.contextId}/chain`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of a faction's completed chains\n * @param params - Optional query parameters\n */\n public async chains(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionChainsResponse> & FactionChainsResponse\n > {\n const path = `/faction/${this.contextId}/chains`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a faction's hall of fame rankings.\n * @param params - Optional query parameters\n */\n public async hof(params?: {\n timestamp?: string;\n }): Promise<FactionHofResponse> {\n const path = `/faction/${this.contextId}/hof`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of a faction's members\n * @param params - Optional query parameters\n */\n public async members(params?: {\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<FactionMembersResponse> {\n const path = `/faction/${this.contextId}/members`;\n const query = {\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a faction's raids history\n * @param params - Optional query parameters\n */\n public async raids(params?: {\n timestamp?: string;\n }): Promise<PaginatedResponse<FactionRaidsResponse> & FactionRaidsResponse> {\n const path = `/faction/${this.contextId}/raids`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a faction's ranked wars history\n * @param params - Optional query parameters\n */\n public async rankedwars(params?: {\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionRankedWarResponse> & FactionRankedWarResponse\n > {\n const path = `/faction/${this.contextId}/rankedwars`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a list of a faction's territories\n * @param params - Optional query parameters\n */\n public async territory(params?: {\n timestamp?: string;\n }): Promise<FactionTerritoriesResponse> {\n const path = `/faction/${this.contextId}/territory`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a faction's territory wars history\n * @param params - Optional query parameters\n */\n public async territorywars(params?: {\n timestamp?: string;\n }): Promise<FactionTerritoryWarsHistoryResponse> {\n const path = `/faction/${this.contextId}/territorywars`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a faction's wars & pacts details\n * @param params - Optional query parameters\n */\n public async wars(params?: {\n timestamp?: string;\n }): Promise<FactionWarsResponse> {\n const path = `/faction/${this.contextId}/wars`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** Get faction by ID */\n public async get(): Promise<Faction> {\n const path = `/faction/${this.contextId}`;\n const query = {};\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Faction API endpoints that require a 'chainId'\n * @category Endpoints\n */\nexport class FactionChainIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get a chain report\n * @param params - Optional query parameters\n */\n public async chainreport(params?: {\n timestamp?: string;\n }): Promise<FactionChainReportResponse> {\n const path = `/faction/${this.contextId}/chainreport`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Faction API endpoints that require a 'crimeId'\n * @category Endpoints\n */\nexport class FactionCrimeIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get a specific organized crime\n * @param params - Optional query parameters\n */\n public async crime(params?: {\n timestamp?: string;\n }): Promise<FactionCrimeResponse> {\n const path = `/faction/${this.contextId}/crime`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Faction API endpoints that require a 'raidWarId'\n * @category Endpoints\n */\nexport class FactionRaidWarIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get raid war details\n * @param params - Optional query parameters\n */\n public async raidreport(params?: {\n timestamp?: string;\n }): Promise<FactionRaidWarReportResponse> {\n const path = `/faction/${this.contextId}/raidreport`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Faction API endpoints that require a 'rankedWarId'\n * @category Endpoints\n */\nexport class FactionRankedWarIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get ranked war details\n * @param params - Optional query parameters\n */\n public async rankedwarreport(params?: {\n timestamp?: string;\n }): Promise<FactionRankedWarReportResponse> {\n const path = `/faction/${this.contextId}/rankedwarreport`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Faction API endpoints that require a 'territoryWarId'\n * @category Endpoints\n */\nexport class FactionTerritoryWarIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get territory war details\n * @param params - Optional query parameters\n */\n public async territorywarreport(params?: {\n timestamp?: string;\n }): Promise<FactionTerritoryWarReportResponse> {\n const path = `/faction/${this.contextId}/territorywarreport`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport { PaginatedResponse } from \"../../client/paginated\";\nimport type {\n ForumCategoriesResponse,\n ForumId,\n ForumLookupResponse,\n ForumPostsResponse,\n ForumResponse,\n ForumSelectionName,\n ForumThreadId,\n ForumThreadResponse,\n ForumThreadsResponse,\n TimestampResponse,\n} from \"../models\";\n\n/**\n * Access the Forum API endpoints\n * @category Endpoints\n */\nexport class ForumEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get publicly available forum categories\n * @param params - Optional query parameters\n */\n public async categories(params?: {\n timestamp?: string;\n }): Promise<ForumCategoriesResponse> {\n const path = `/forum/categories`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get threads across all forum categories\n * @param params - Optional query parameters\n */\n public async threads(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<PaginatedResponse<ForumThreadsResponse> & ForumThreadsResponse> {\n const path = `/forum/threads`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all available forum selections\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<ForumLookupResponse> {\n const path = `/forum/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/forum/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any Forum selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: ForumSelectionName[];\n id?: ForumThreadId | ForumId[];\n striptags?: \"true\" | \"false\";\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<ForumResponse> {\n const path = `/forum`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** @param threadId - The ID for this context */\n public withThreadId(threadId: string | number): ForumThreadIdContext {\n return new ForumThreadIdContext(this.requester, threadId);\n }\n\n /** @param categoryIds - The ID for this context */\n public withCategoryIds(\n categoryIds: string | number,\n ): ForumCategoryIdsContext {\n return new ForumCategoryIdsContext(this.requester, categoryIds);\n }\n}\n\n/**\n * Context class for Forum API endpoints that require a 'threadId'\n * @category Endpoints\n */\nexport class ForumThreadIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get specific forum thread posts\n * @param params - Optional query parameters\n */\n public async posts(params?: {\n offset?: number;\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<PaginatedResponse<ForumPostsResponse> & ForumPostsResponse> {\n const path = `/forum/${this.contextId}/posts`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get specific thread details\n * @param params - Optional query parameters\n */\n public async thread(params?: {\n timestamp?: string;\n }): Promise<ForumThreadResponse> {\n const path = `/forum/${this.contextId}/thread`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Forum API endpoints that require a 'categoryIds'\n * @category Endpoints\n */\nexport class ForumCategoryIdsContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get threads for specific public forum category or categories\n * @param params - Optional query parameters\n */\n public async threads(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<PaginatedResponse<ForumThreadsResponse> & ForumThreadsResponse> {\n const path = `/forum/${this.contextId}/threads`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport type {\n KeyInfoResponse,\n KeyLogResponse,\n KeyResponse,\n KeySelectionName,\n} from \"../models\";\n\n/**\n * Access the Key API endpoints\n * @category Endpoints\n */\nexport class KeyEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get current key log history\n * @param params - Optional query parameters\n */\n public async log(params?: {\n limit?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<KeyLogResponse> {\n const path = `/key/log`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current key info\n * @param params - Optional query parameters\n */\n public async info(params?: { timestamp?: string }): Promise<KeyInfoResponse> {\n const path = `/key/info`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any Key selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: KeySelectionName[];\n limit?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<KeyResponse> {\n const path = `/key`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport { PaginatedResponse } from \"../../client/paginated\";\nimport type {\n BazaarResponse,\n BazaarResponseSpecialized,\n ItemId,\n MarketItemMarketResponse,\n MarketLookupResponse,\n MarketPropertiesResponse,\n MarketRentalsResponse,\n MarketResponse,\n MarketSelectionName,\n MarketSpecializedBazaarCategoryEnum,\n PropertyTypeId,\n TimestampResponse,\n WeaponBonusEnum,\n} from \"../models\";\n\n/**\n * Access the Market API endpoints\n * @category Endpoints\n */\nexport class MarketEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get bazaar directory\n * @param params - Optional query parameters\n */\n public async bazaar(params?: {\n cat?: MarketSpecializedBazaarCategoryEnum;\n timestamp?: string;\n }): Promise<BazaarResponse> {\n const path = `/market/bazaar`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all available market selections\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<MarketLookupResponse> {\n const path = `/market/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/market/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any Market selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: MarketSelectionName[];\n id?: ItemId | PropertyTypeId;\n cat?: MarketSpecializedBazaarCategoryEnum;\n bonus?: WeaponBonusEnum;\n sort?: \"DESC\" | \"ASC\";\n offset?: number;\n limit?: number;\n timestamp?: string;\n }): Promise<MarketResponse> {\n const path = `/market`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.bonus !== undefined && { bonus: params.bonus }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** @param id - The ID for this context */\n public withId(id: string | number): MarketIdContext {\n return new MarketIdContext(this.requester, id);\n }\n\n /** @param propertyTypeId - The ID for this context */\n public withPropertyTypeId(\n propertyTypeId: string | number,\n ): MarketPropertyTypeIdContext {\n return new MarketPropertyTypeIdContext(this.requester, propertyTypeId);\n }\n}\n\n/**\n * Context class for Market API endpoints that require a 'id'\n * @category Endpoints\n */\nexport class MarketIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get item specialized bazaar directory\n * @param params - Optional query parameters\n */\n public async bazaar(params?: {\n timestamp?: string;\n }): Promise<BazaarResponseSpecialized> {\n const path = `/market/${this.contextId}/bazaar`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get item market listings\n * @param params - Optional query parameters\n */\n public async itemmarket(params?: {\n bonus?: WeaponBonusEnum;\n offset?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<MarketItemMarketResponse> & MarketItemMarketResponse\n > {\n const path = `/market/${this.contextId}/itemmarket`;\n const query = {\n ...(params?.bonus !== undefined && { bonus: params.bonus }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Market API endpoints that require a 'propertyTypeId'\n * @category Endpoints\n */\nexport class MarketPropertyTypeIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get properties market listings\n * @param params - Optional query parameters\n */\n public async properties(params?: {\n offset?: number;\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<\n PaginatedResponse<MarketPropertiesResponse> & MarketPropertiesResponse\n > {\n const path = `/market/${this.contextId}/properties`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get properties rental listings\n * @param params - Optional query parameters\n */\n public async rentals(params?: {\n offset?: number;\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<\n PaginatedResponse<MarketRentalsResponse> & MarketRentalsResponse\n > {\n const path = `/market/${this.contextId}/rentals`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport type {\n PropertyId,\n PropertyLookupResponse,\n PropertyResponse,\n PropertySelectionName,\n TimestampResponse,\n UserPropertyResponse,\n} from \"../models\";\n\n/**\n * Access the Property API endpoints\n * @category Endpoints\n */\nexport class PropertyEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /** @param id - The ID for this context */\n public withId(id: string | number): PropertyIdContext {\n return new PropertyIdContext(this.requester, id);\n }\n\n /**\n * Get all available property selections\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<PropertyLookupResponse> {\n const path = `/property/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/property/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any property selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: PropertySelectionName[];\n id?: PropertyId;\n timestamp?: string;\n }): Promise<PropertyResponse> {\n const path = `/property`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Property API endpoints that require a 'id'\n * @category Endpoints\n */\nexport class PropertyIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get a specific property\n * @param params - Optional query parameters\n */\n public async get(params?: {\n timestamp?: string;\n }): Promise<UserPropertyResponse> {\n const path = `/property/${this.contextId}/property`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport { PaginatedResponse } from \"../../client/paginated\";\nimport type {\n RaceClassEnum,\n RaceId,\n RaceTrackId,\n RacingCarUpgradesResponse,\n RacingCarsResponse,\n RacingLookupResponse,\n RacingRaceDetailsResponse,\n RacingRaceTypeEnum,\n RacingRacesResponse,\n RacingResponse,\n RacingSelectionName,\n RacingTrackRecordsResponse,\n RacingTracksResponse,\n TimestampResponse,\n} from \"../models\";\n\n/**\n * Access the Racing API endpoints\n * @category Endpoints\n */\nexport class RacingEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get cars and their racing stats\n * @param params - Optional query parameters\n */\n public async cars(params?: {\n timestamp?: string;\n }): Promise<RacingCarsResponse> {\n const path = `/racing/cars`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all possible car upgrades\n * @param params - Optional query parameters\n */\n public async carupgrades(params?: {\n timestamp?: string;\n }): Promise<RacingCarUpgradesResponse> {\n const path = `/racing/carupgrades`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get races\n * @param params - Optional query parameters\n */\n public async races(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n cat?: RacingRaceTypeEnum;\n timestamp?: string;\n }): Promise<PaginatedResponse<RacingRacesResponse> & RacingRacesResponse> {\n const path = `/racing/races`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get race tracks and descriptions\n * @param params - Optional query parameters\n */\n public async tracks(params?: {\n timestamp?: string;\n }): Promise<RacingTracksResponse> {\n const path = `/racing/tracks`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all available racing selections\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<RacingLookupResponse> {\n const path = `/racing/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/racing/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any Racing selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: RacingSelectionName[];\n id?: RaceId | RaceTrackId;\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n cat?: RacingRaceTypeEnum | RaceClassEnum;\n offset?: number;\n timestamp?: string;\n }): Promise<RacingResponse> {\n const path = `/racing`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** @param raceId - The ID for this context */\n public withRaceId(raceId: string | number): RacingRaceIdContext {\n return new RacingRaceIdContext(this.requester, raceId);\n }\n\n /** @param trackId - The ID for this context */\n public withTrackId(trackId: string | number): RacingTrackIdContext {\n return new RacingTrackIdContext(this.requester, trackId);\n }\n}\n\n/**\n * Context class for Racing API endpoints that require a 'raceId'\n * @category Endpoints\n */\nexport class RacingRaceIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get specific race details\n * @param params - Optional query parameters\n */\n public async race(params?: {\n timestamp?: string;\n }): Promise<RacingRaceDetailsResponse> {\n const path = `/racing/${this.contextId}/race`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Racing API endpoints that require a 'trackId'\n * @category Endpoints\n */\nexport class RacingTrackIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get track records\n * @param params - Optional query parameters\n */\n public async records(params?: {\n cat?: RaceClassEnum;\n timestamp?: string;\n }): Promise<RacingTrackRecordsResponse> {\n const path = `/racing/${this.contextId}/records`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport { PaginatedResponse } from \"../../client/paginated\";\nimport type {\n AttackCode,\n AttackLogResponse,\n FactionTerritoryEnum,\n ItemId,\n LogCategoryId,\n TimestampResponse,\n TornBountiesResponse,\n TornCalendarResponse,\n TornCrimeId,\n TornCrimesResponse,\n TornEducationResponse,\n TornFactionHofCategory,\n TornFactionHofResponse,\n TornFactionTreeResponse,\n TornHofCategory,\n TornHofResponse,\n TornItemAmmoResponse,\n TornItemCategory,\n TornItemModsResponse,\n TornItemsResponse,\n TornLogCategoriesResponse,\n TornLogTypesResponse,\n TornLookupResponse,\n TornOrganizedCrimeResponse,\n TornProperties,\n TornResponse,\n TornSelectionName,\n TornSubcrimesResponse,\n TornTerritoriesResponse,\n} from \"../models\";\n\n/**\n * Access the Torn API endpoints\n * @category Endpoints\n */\nexport class TornEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get attack log details\n * @param params - Optional query parameters\n */\n public async attacklog(params?: {\n log?: AttackCode;\n offset?: number;\n sort?: \"DESC\" | \"ASC\";\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<PaginatedResponse<AttackLogResponse> & AttackLogResponse> {\n const path = `/torn/attacklog`;\n const query = {\n ...(params?.log !== undefined && { log: params.log }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get bounties\n * @param params - Optional query parameters\n */\n public async bounties(params?: {\n limit?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<PaginatedResponse<TornBountiesResponse> & TornBountiesResponse> {\n const path = `/torn/bounties`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get calendar information\n * @param params - Optional query parameters\n */\n public async calendar(params?: {\n timestamp?: string;\n }): Promise<TornCalendarResponse> {\n const path = `/torn/calendar`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get crimes information\n * @param params - Optional query parameters\n */\n public async crimes(params?: {\n timestamp?: string;\n }): Promise<TornCrimesResponse> {\n const path = `/torn/crimes`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get education information\n * @param params - Optional query parameters\n */\n public async education(params?: {\n timestamp?: string;\n }): Promise<TornEducationResponse> {\n const path = `/torn/education`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get faction hall of fame positions for a specific category\n * @param params - Optional query parameters\n */\n public async factionhof(params?: {\n limit?: number;\n offset?: number;\n cat?: TornFactionHofCategory;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<TornFactionHofResponse> & TornFactionHofResponse\n > {\n const path = `/torn/factionhof`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get full faction tree\n * @param params - Optional query parameters\n */\n public async factiontree(params?: {\n timestamp?: string;\n }): Promise<TornFactionTreeResponse> {\n const path = `/torn/factiontree`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get player hall of fame positions for a specific category\n * @param params - Optional query parameters\n */\n public async hof(params?: {\n limit?: number;\n offset?: number;\n cat?: TornHofCategory;\n timestamp?: string;\n }): Promise<PaginatedResponse<TornHofResponse> & TornHofResponse> {\n const path = `/torn/hof`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get information about ammo\n * @param params - Optional query parameters\n */\n public async itemammo(params?: {\n timestamp?: string;\n }): Promise<TornItemAmmoResponse> {\n const path = `/torn/itemammo`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get information about weapon upgrades\n * @param params - Optional query parameters\n */\n public async itemmods(params?: {\n timestamp?: string;\n }): Promise<TornItemModsResponse> {\n const path = `/torn/itemmods`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get information about items\n * @param params - Optional query parameters\n */\n public async items(params?: {\n cat?: TornItemCategory;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<TornItemsResponse> {\n const path = `/torn/items`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get available log categories\n * @param params - Optional query parameters\n */\n public async logcategories(params?: {\n timestamp?: string;\n }): Promise<TornLogCategoriesResponse> {\n const path = `/torn/logcategories`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all available log ids\n * @param params - Optional query parameters\n */\n public async logtypes(params?: {\n timestamp?: string;\n }): Promise<TornLogTypesResponse> {\n const path = `/torn/logtypes`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get organized crimes information\n * @param params - Optional query parameters\n */\n public async organizedcrimes(params?: {\n timestamp?: string;\n }): Promise<TornOrganizedCrimeResponse> {\n const path = `/torn/organizedcrimes`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get properties details\n * @param params - Optional query parameters\n */\n public async properties(params?: {\n timestamp?: string;\n }): Promise<TornProperties> {\n const path = `/torn/properties`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get territory details\n * @param params - Optional query parameters\n */\n public async territory(params?: {\n ids?: FactionTerritoryEnum[];\n offset?: number;\n limit?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<TornTerritoriesResponse> & TornTerritoriesResponse\n > {\n const path = `/torn/territory`;\n const query = {\n ...(params?.ids && { ids: params.ids.join(\",\") }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all available torn selections\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<TornLookupResponse> {\n const path = `/torn/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/torn/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any Torn selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: TornSelectionName[];\n id?: LogCategoryId | TornCrimeId | ItemId[] | FactionTerritoryEnum[];\n striptags?: \"true\" | \"false\";\n limit?: number;\n to?: number;\n from?: number;\n sort?: \"DESC\" | \"ASC\";\n cat?: TornFactionHofCategory | TornHofCategory | TornItemCategory;\n offset?: number;\n timestamp?: string;\n }): Promise<TornResponse> {\n const path = `/torn`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** @param ids - The ID for this context */\n public withIds(ids: string | number): TornIdsContext {\n return new TornIdsContext(this.requester, ids);\n }\n\n /** @param logCategoryId - The ID for this context */\n public withLogCategoryId(\n logCategoryId: string | number,\n ): TornLogCategoryIdContext {\n return new TornLogCategoryIdContext(this.requester, logCategoryId);\n }\n\n /** @param crimeId - The ID for this context */\n public withCrimeId(crimeId: string | number): TornCrimeIdContext {\n return new TornCrimeIdContext(this.requester, crimeId);\n }\n}\n\n/**\n * Context class for Torn API endpoints that require a 'ids'\n * @category Endpoints\n */\nexport class TornIdsContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get information about items\n * @param params - Optional query parameters\n */\n public async items(params?: {\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<TornItemsResponse> {\n const path = `/torn/${this.contextId}/items`;\n const query = {\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Torn API endpoints that require a 'logCategoryId'\n * @category Endpoints\n */\nexport class TornLogCategoryIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get available log ids for a specific log category\n * @param params - Optional query parameters\n */\n public async logtypes(params?: {\n timestamp?: string;\n }): Promise<TornLogTypesResponse> {\n const path = `/torn/${this.contextId}/logtypes`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for Torn API endpoints that require a 'crimeId'\n * @category Endpoints\n */\nexport class TornCrimeIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get Subcrimes information\n * @param params - Optional query parameters\n */\n public async subcrimes(params?: {\n timestamp?: string;\n }): Promise<TornSubcrimesResponse> {\n const path = `/torn/${this.contextId}/subcrimes`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","import type { Requester } from \"../../client/types\";\nimport { PaginatedResponse } from \"../../client/paginated\";\nimport type {\n FactionAttacksFullResponse,\n FactionAttacksResponse,\n PersonalStatsCategoryEnum,\n PersonalStatsStatName,\n RacingRaceTypeEnum,\n ReportTypeEnum,\n ReportsResponse,\n RevivesFullResponse,\n RevivesResponse,\n TimestampResponse,\n TornCrimeId,\n User,\n UserBountiesResponse,\n UserCalendarResponse,\n UserCrimesResponse,\n UserEducationResponse,\n UserEnlistedCarsResponse,\n UserFactionBalanceResponse,\n UserForumFeedResponse,\n UserForumFriendsResponse,\n UserForumPostsResponse,\n UserForumSubscribedThreadsResponse,\n UserForumThreadsResponse,\n UserHofResponse,\n UserId,\n UserItemMarketResponse,\n UserJobRanksResponse,\n UserListEnum,\n UserListResponse,\n UserLookupResponse,\n UserOrganizedCrimeResponse,\n UserPersonalStatsResponse,\n UserPropertiesResponse,\n UserPropertyResponse,\n UserRacesResponse,\n UserRacingRecordsResponse,\n UserResponse,\n UserSelectionName,\n} from \"../models\";\n\n/**\n * Access the User API endpoints\n * @category Endpoints\n */\nexport class UserEndpoint {\n private readonly requester: Requester;\n\n constructor(requester: Requester) {\n this.requester = requester;\n }\n\n /**\n * Get your detailed attacks\n * @param params - Optional query parameters\n */\n public async attacks(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionAttacksResponse> & FactionAttacksResponse\n > {\n const path = `/user/attacks`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your simplified attacks\n * @param params - Optional query parameters\n */\n public async attacksfull(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<FactionAttacksFullResponse> & FactionAttacksFullResponse\n > {\n const path = `/user/attacksfull`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get bounties placed on you\n * @param params - Optional query parameters\n */\n public async bounties(params?: {\n timestamp?: string;\n }): Promise<UserBountiesResponse> {\n const path = `/user/bounties`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your competition's event start time\n * @param params - Optional query parameters\n */\n public async calendar(params?: {\n timestamp?: string;\n }): Promise<UserCalendarResponse> {\n const path = `/user/calendar`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your education information\n * @param params - Optional query parameters\n */\n public async education(params?: {\n timestamp?: string;\n }): Promise<UserEducationResponse> {\n const path = `/user/education`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get user enlisted cars\n * @param params - Optional query parameters\n */\n public async enlistedcars(params?: {\n timestamp?: string;\n }): Promise<UserEnlistedCarsResponse> {\n const path = `/user/enlistedcars`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your current faction balance\n * @param params - Optional query parameters\n */\n public async factionbalance(params?: {\n timestamp?: string;\n }): Promise<UserFactionBalanceResponse> {\n const path = `/user/factionbalance`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get updates on your threads and posts\n * @param params - Optional query parameters\n */\n public async forumfeed(params?: {\n timestamp?: string;\n }): Promise<UserForumFeedResponse> {\n const path = `/user/forumfeed`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get updates on your friends' activity\n * @param params - Optional query parameters\n */\n public async forumfriends(params?: {\n timestamp?: string;\n }): Promise<UserForumFriendsResponse> {\n const path = `/user/forumfriends`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your posts\n * @param params - Optional query parameters\n */\n public async forumposts(params?: {\n striptags?: \"true\" | \"false\";\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserForumPostsResponse> & UserForumPostsResponse\n > {\n const path = `/user/forumposts`;\n const query = {\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get updates on threads you subscribed to\n * @param params - Optional query parameters\n */\n public async forumsubscribedthreads(params?: {\n timestamp?: string;\n }): Promise<UserForumSubscribedThreadsResponse> {\n const path = `/user/forumsubscribedthreads`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your threads\n * @param params - Optional query parameters\n */\n public async forumthreads(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserForumThreadsResponse> & UserForumThreadsResponse\n > {\n const path = `/user/forumthreads`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your hall of fame rankings\n * @param params - Optional query parameters\n */\n public async hof(params?: { timestamp?: string }): Promise<UserHofResponse> {\n const path = `/user/hof`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your item market listings for a specific item\n * @param params - Optional query parameters\n */\n public async itemmarket(params?: {\n offset?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserItemMarketResponse> & UserItemMarketResponse\n > {\n const path = `/user/itemmarket`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your starter job positions\n * @param params - Optional query parameters\n */\n public async jobranks(params?: {\n timestamp?: string;\n }): Promise<UserJobRanksResponse> {\n const path = `/user/jobranks`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your friends, enemies or targets list\n * @param params - Optional query parameters\n */\n public async list(params?: {\n cat?: UserListEnum;\n limit?: number;\n offset?: number;\n sort?: \"DESC\" | \"ASC\";\n timestamp?: string;\n }): Promise<PaginatedResponse<UserListResponse> & UserListResponse> {\n const path = `/user/list`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your current ongoing organized crime\n * @param params - Optional query parameters\n */\n public async organizedcrime(params?: {\n timestamp?: string;\n }): Promise<UserOrganizedCrimeResponse> {\n const path = `/user/organizedcrime`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your personal stats\n * @param params - Optional query parameters\n */\n public async personalstats(params?: {\n cat?: PersonalStatsCategoryEnum;\n stat?: PersonalStatsStatName[];\n timestamp?: number;\n }): Promise<UserPersonalStatsResponse> {\n const path = `/user/personalstats`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.stat && { stat: params.stat.join(\",\") }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your own properties\n * @param params - Optional query parameters\n */\n public async properties(params?: {\n offset?: number;\n limit?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserPropertiesResponse> & UserPropertiesResponse\n > {\n const path = `/user/properties`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your current property\n * @param params - Optional query parameters\n */\n public async property(params?: {\n timestamp?: string;\n }): Promise<UserPropertyResponse> {\n const path = `/user/property`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get user races\n * @param params - Optional query parameters\n */\n public async races(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n cat?: RacingRaceTypeEnum;\n timestamp?: string;\n }): Promise<PaginatedResponse<UserRacesResponse> & UserRacesResponse> {\n const path = `/user/races`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your current racing records\n * @param params - Optional query parameters\n */\n public async racingrecords(params?: {\n timestamp?: string;\n }): Promise<UserRacingRecordsResponse> {\n const path = `/user/racingrecords`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your reports\n * @param params - Optional query parameters\n */\n public async reports(params?: {\n cat?: ReportTypeEnum;\n target?: UserId;\n limit?: number;\n offset?: number;\n timestamp?: string;\n }): Promise<PaginatedResponse<ReportsResponse> & ReportsResponse> {\n const path = `/user/reports`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.target !== undefined && { target: params.target }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your detailed revives\n * @param params - Optional query parameters\n */\n public async revives(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<PaginatedResponse<RevivesResponse> & RevivesResponse> {\n const path = `/user/revives`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get your simplified revives\n * @param params - Optional query parameters\n */\n public async revivesfull(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n to?: number;\n from?: number;\n striptags?: \"true\" | \"false\";\n timestamp?: string;\n }): Promise<PaginatedResponse<RevivesFullResponse> & RevivesFullResponse> {\n const path = `/user/revivesFull`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get all available user selections\n * @param params - Optional query parameters\n */\n public async lookup(params?: {\n timestamp?: string;\n }): Promise<UserLookupResponse> {\n const path = `/user/lookup`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get current server time\n * @param params - Optional query parameters\n */\n public async timestamp(params?: {\n timestamp?: string;\n }): Promise<TimestampResponse> {\n const path = `/user/timestamp`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get any User selection\n * @param params - Optional query parameters\n */\n public async get(params?: {\n selections?: UserSelectionName[];\n id?: UserId | TornCrimeId | string;\n limit?: number;\n from?: number;\n to?: number;\n sort?: \"DESC\" | \"ASC\";\n cat?:\n | ReportTypeEnum\n | UserListEnum\n | PersonalStatsCategoryEnum\n | RacingRaceTypeEnum;\n stat?: PersonalStatsStatName[];\n striptags?: \"true\" | \"false\";\n offset?: number;\n timestamp?: string;\n }): Promise<UserResponse> {\n const path = `/user`;\n const query = {\n ...(params?.selections && { selections: params.selections.join(\",\") }),\n ...(params?.id !== undefined && { id: params.id }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.stat && { stat: params.stat.join(\",\") }),\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** @param id - The ID for this context */\n public withId(id: string | number): UserIdContext {\n return new UserIdContext(this.requester, id);\n }\n\n /** @param crimeId - The ID for this context */\n public withCrimeId(crimeId: string | number): UserCrimeIdContext {\n return new UserCrimeIdContext(this.requester, crimeId);\n }\n}\n\n/**\n * Context class for User API endpoints that require a 'id'\n * @category Endpoints\n */\nexport class UserIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get bounties placed on a specific user\n * @param params - Optional query parameters\n */\n public async bounties(params?: {\n timestamp?: string;\n }): Promise<UserBountiesResponse> {\n const path = `/user/${this.contextId}/bounties`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get posts for a specific player\n * @param params - Optional query parameters\n */\n public async forumposts(params?: {\n striptags?: \"true\" | \"false\";\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserForumPostsResponse> & UserForumPostsResponse\n > {\n const path = `/user/${this.contextId}/forumposts`;\n const query = {\n ...(params?.striptags !== undefined && { striptags: params.striptags }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get threads for a specific player\n * @param params - Optional query parameters\n */\n public async forumthreads(params?: {\n limit?: number;\n sort?: \"DESC\" | \"ASC\";\n from?: number;\n to?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserForumThreadsResponse> & UserForumThreadsResponse\n > {\n const path = `/user/${this.contextId}/forumthreads`;\n const query = {\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.sort !== undefined && { sort: params.sort }),\n ...(params?.from !== undefined && { from: params.from }),\n ...(params?.to !== undefined && { to: params.to }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get hall of fame rankings for a specific player\n * @param params - Optional query parameters\n */\n public async hof(params?: { timestamp?: string }): Promise<UserHofResponse> {\n const path = `/user/${this.contextId}/hof`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get a player's personal stats\n * @param params - Optional query parameters\n */\n public async personalstats(params?: {\n cat?: PersonalStatsCategoryEnum;\n stat?: PersonalStatsStatName[];\n timestamp?: number;\n }): Promise<UserPersonalStatsResponse> {\n const path = `/user/${this.contextId}/personalstats`;\n const query = {\n ...(params?.cat !== undefined && { cat: params.cat }),\n ...(params?.stat && { stat: params.stat.join(\",\") }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get specific user's properties\n * @param params - Optional query parameters\n */\n public async properties(params?: {\n offset?: number;\n limit?: number;\n timestamp?: string;\n }): Promise<\n PaginatedResponse<UserPropertiesResponse> & UserPropertiesResponse\n > {\n const path = `/user/${this.contextId}/properties`;\n const query = {\n ...(params?.offset !== undefined && { offset: params.offset }),\n ...(params?.limit !== undefined && { limit: params.limit }),\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /**\n * Get specific user's property\n * @param params - Optional query parameters\n */\n public async property(params?: {\n timestamp?: string;\n }): Promise<UserPropertyResponse> {\n const path = `/user/${this.contextId}/property`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n\n /** Get user by ID */\n public async get(): Promise<User> {\n const path = `/user/${this.contextId}`;\n const query = {};\n return this.requester(path, query);\n }\n}\n\n/**\n * Context class for User API endpoints that require a 'crimeId'\n * @category Endpoints\n */\nexport class UserCrimeIdContext {\n private readonly requester: Requester;\n private readonly contextId: string | number;\n\n constructor(requester: Requester, contextId: string | number) {\n this.requester = requester;\n this.contextId = contextId;\n }\n\n /**\n * Get your crime statistics\n * @param params - Optional query parameters\n */\n public async crimes(params?: {\n timestamp?: string;\n }): Promise<UserCrimesResponse> {\n const path = `/user/${this.contextId}/crimes`;\n const query = {\n ...(params?.timestamp !== undefined && { timestamp: params.timestamp }),\n };\n return this.requester(path, query);\n }\n}\n","/**\n * An error returned by the Torn API\n * It contains an error code and a message from the API\n * @category Core\n */\nexport class TornApiError extends Error {\n public readonly code: number;\n\n constructor(errorResponse: { code: number; error: string }) {\n super(errorResponse.error);\n this.name = \"TornApiError\";\n this.code = errorResponse.code;\n }\n}\n\n/**\n * An error thrown when the request limit (100 per minute) is exceeded\n * This check is performed on the client side before the request is sent\n * @category Core\n */\nexport class TornRateLimitError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"TornRateLimitError\";\n }\n}\n","import type { Requester } from \"./types\";\n\n/**\n * Wraps a paginated API response, providing methods to navigate between pages\n *\n * The properties of the current page's data are directly accessible on instances of this class\n *\n * @template T The type of the data within the paginated response\n */\nexport class PaginatedResponse<T> {\n private readonly nextUrl: string | null;\n private readonly prevUrl: string | null;\n private readonly requester: Requester;\n\n constructor(\n data: T,\n nextUrl: string | null,\n prevUrl: string | null,\n requester: Requester,\n ) {\n Object.assign(this, data);\n\n this.nextUrl = nextUrl;\n this.prevUrl = prevUrl;\n this.requester = requester;\n }\n\n /**\n * Fetches a page of results from a given URL\n * @param url The full URL of the page to fetch\n * @returns A new combined response object if the page exists, otherwise null\n */\n private async fetchPage(\n url: string | null,\n ): Promise<(PaginatedResponse<T> & T) | null> {\n if (!url) {\n return null;\n }\n\n const parsedUrl = new URL(url);\n const path = parsedUrl.pathname.substring(3);\n const params: Record<string, string> = {};\n for (const [key, value] of parsedUrl.searchParams.entries()) {\n params[key] = value;\n }\n\n return this.requester(path, params);\n }\n\n /**\n * Fetches the next page of results\n * @returns A promise that resolves to the next page, or null if there is no next page\n */\n public next(): Promise<(PaginatedResponse<T> & T) | null> {\n return this.fetchPage(this.nextUrl);\n }\n\n /**\n * Fetches the previous page of results\n * @returns A promise that resolves to the previous page, or null if there is no next page\n */\n public prev(): Promise<(PaginatedResponse<T> & T) | null> {\n return this.fetchPage(this.prevUrl);\n }\n}\n","import { TornApiError, TornRateLimitError } from \"./errors\";\nimport { PaginatedResponse } from \"./paginated\";\nimport type { Requester, RateLimitMode, ApiKeyBalancing } from \"./types\";\n\n/**\n * Checks if an unknown value is an instance of the Error class\n * @param {unknown} error - The value to check\n * @returns {boolean} True if the value is an Error, false otherwise\n */\nconst isError = (error: unknown): error is Error => error instanceof Error;\n\n/**\n * Type definition for the raw error structure returned by the Torn API\n */\ntype ApiErrorPayload = {\n error: {\n code: number;\n error: string;\n };\n};\n\n/**\n * Type guard to determine if a given response object is a Torn API error\n * @param {unknown} data - The response data to check\n * @returns {boolean} True if the data matches the TornApiError structure\n */\nconst isApiError = (data: unknown): data is ApiErrorPayload => {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"error\" in data &&\n typeof (data as { error: unknown }).error === \"object\" &&\n (data as { error: object | null }).error !== null &&\n \"code\" in (data as { error: { code: unknown } }).error &&\n \"error\" in (data as { error: { error: unknown } }).error\n );\n};\n\n/**\n * Type definition for the raw paginated response structure from the Torn API,\n * which contains metadata for navigation\n */\ntype ApiPaginatedResponse = {\n _metadata: {\n links: {\n next: string | null;\n prev: string | null;\n };\n };\n};\n\n/**\n * Type guard to determine if a given response object is a paginated response\n * @param {unknown} data - The response data to check\n * @returns {boolean} True if the data matches the paginated response structure\n */\nconst isApiPaginatedResponse = (\n data: unknown,\n): data is ApiPaginatedResponse => {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"_metadata\" in data &&\n typeof (data as { _metadata: unknown })._metadata === \"object\" &&\n (data as { _metadata: object | null })._metadata !== null &&\n \"links\" in (data as { _metadata: { links: unknown } })._metadata\n );\n};\n\n/**\n * Defines the configuration options for the RequestHandler\n * @category Core\n */\nexport interface RequestHandlerOptions {\n /** An array of one or more Torn API keys */\n apiKeys: string[];\n /** Strategy for handling the 100 requests/minute rate limit. Defaults to 'autoDelay' */\n rateLimitMode?: RateLimitMode;\n /** A comment to include with every API request */\n comment?: string;\n /** Custom headers to send with every request */\n headers?: Record<string, string>;\n /** The base URL for the Torn API. Defaults to the official v2 URL */\n apiUrl?: string;\n /** The strategy for balancing requests across multiple API keys. Defaults to 'roundRobin' */\n apiKeyBalancing?: ApiKeyBalancing;\n /** If true, logs detailed information about requests, responses, and rate limiting to the console */\n verbose?: boolean;\n}\n\n/**\n * Manages the entire lifecycle of an API request, including rate limiting, key balancing,\n * authentication and error handling\n */\nexport class RequestHandler {\n private readonly apiKeys: string[];\n private readonly rateLimitMode: RateLimitMode;\n private readonly comment: string | undefined;\n private readonly headers: Record<string, string>;\n private readonly apiUrl: string;\n private readonly apiKeyBalancing: ApiKeyBalancing;\n private readonly verbose: boolean;\n private apiKeyIndex = 0;\n private readonly requestTimestamps: Map<string, number[]> = new Map();\n\n constructor(options: RequestHandlerOptions) {\n if (!options.apiKeys || options.apiKeys.length === 0) {\n throw new Error(\"At least one API key must be provided.\");\n }\n this.apiKeys = options.apiKeys;\n this.rateLimitMode = options.rateLimitMode ?? \"autoDelay\";\n this.comment = options.comment;\n this.headers = options.headers ?? {};\n this.apiUrl = options.apiUrl ?? \"https://api.torn.com/v2\";\n this.apiKeyBalancing = options.apiKeyBalancing ?? \"roundRobin\";\n this.verbose = !!options.verbose;\n\n for (const key of this.apiKeys) {\n this.requestTimestamps.set(key, []);\n }\n }\n\n /**\n * Logs messages to the console if verbose mode is enabled\n * @param {...unknown[]} args - The messages or objects to log\n */\n private log(...args: unknown[]) {\n if (this.verbose) {\n console.log(\"[TornClient]\", ...args);\n }\n }\n\n /**\n * The core requester function, bound to the class instance\n * This is passed to endpoint classes to make their API calls\n */\n public readonly requester: Requester = this.makeRequest.bind(this);\n\n /**\n * Checks if a specific API key is within its rate limit and can be used immediately\n *\n * Prunes timestamps older than one minute from the tracking array\n * @param {string} apiKey - The API key to check\n * @returns {boolean} True if the key is available for use, otherwise false\n */\n private isKeyAvailable(apiKey: string): boolean {\n if (this.rateLimitMode === \"ignore\") {\n return true;\n }\n const now = Date.now();\n const oneMinuteAgo = now - 60_000;\n const timestamps = (this.requestTimestamps.get(apiKey) ?? []).filter(\n (ts) => ts > oneMinuteAgo,\n );\n this.requestTimestamps.set(apiKey, timestamps);\n return timestamps.length < 100;\n }\n\n /**\n * Finds the next available API key\n * @returns {string | null} An available API key, or null if all keys are currently rate-limited\n */\n private findAvailableKey(): string | null {\n for (let i = 0; i < this.apiKeys.length; i++) {\n const key = this.getApiKey();\n if (this.isKeyAvailable(key)) {\n return key;\n }\n }\n return null;\n }\n\n /**\n * Calculates the minimum time to wait until any key in the pool becomes available again\n * @returns {number} The minimum wait time in milliseconds\n */\n private getMinWaitTime(): number {\n const now = Date.now();\n let minWaitTime = 60_100;\n\n for (const key of this.apiKeys) {\n const timestamps = this.requestTimestamps.get(key) ?? [];\n if (timestamps.length >= 100) {\n const oldestRequestTimestamp = timestamps[0];\n const keyWaitTime = 60_000 - (now - oldestRequestTimestamp) + 100;\n if (keyWaitTime < minWaitTime) {\n minWaitTime = keyWaitTime;\n }\n }\n }\n return Math.max(0, minWaitTime);\n }\n\n /**\n * Retrieves the next API key based on the configured balancing strategy\n *\n * This method handles the selection logic (`roundRobin` or `random`)\n * and does not check for rate limits\n * @returns {string} The selected API key\n */\n private getApiKey(): string {\n if (this.apiKeys.length === 1) {\n return this.apiKeys[0];\n }\n if (this.apiKeyBalancing === \"random\") {\n const idx = Math.floor(Math.random() * this.apiKeys.length);\n return this.apiKeys[idx];\n }\n const key = this.apiKeys[this.apiKeyIndex];\n this.apiKeyIndex = (this.apiKeyIndex + 1) % this.apiKeys.length;\n return key;\n }\n\n /**\n * The core method for executing a single API request\n *\n * It handles key selection, rate limiting, request creation, middleware, and response parsing\n * @template T - The expected type of the successful response data\n * @param {string} path - The API endpoint path (e.g., \"/user/1234\")\n * @param {Record<string, unknown>} query - The query parameters for the request\n * @returns {Promise<T>} A promise that resolves with the fetched data\n */\n private async makeRequest<T = unknown>(\n path: string,\n query: Record<string, unknown>,\n ): Promise<T> {\n this.log(\"Request received:\", path, query);\n\n let apiKey = this.findAvailableKey();\n\n if (!apiKey) {\n if (this.rateLimitMode === \"autoDelay\") {\n const waitTime = this.getMinWaitTime();\n this.log(`All keys are on cooldown. Delaying for ${waitTime}ms...`);\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n apiKey = this.findAvailableKey();\n }\n\n if (!apiKey) {\n const error = new TornRateLimitError(\n \"Rate limit of 100 requests/minute exceeded for all available keys\",\n );\n this.log(\"Rate limit exceeded for all keys\");\n throw error;\n }\n }\n\n this.log(`Using API key: ${apiKey.slice(0, 5)}...`);\n\n const url = new URL(`${this.apiUrl}${path}`);\n for (const [key, value] of Object.entries(query)) {\n if (\n value !== undefined &&\n value !== null &&\n key !== \"key\" &&\n key !== \"comment\"\n ) {\n url.searchParams.set(key, String(value));\n }\n }\n if (this.comment) url.searchParams.set(\"comment\", this.comment);\n\n const requestOptions: RequestInit = {\n headers: {\n Accept: \"application/json\",\n Authorization: `ApiKey ${apiKey}`,\n ...this.headers,\n },\n };\n\n try {\n this.log(\"Fetching:\", url.toString());\n const response = await fetch(url.toString(), requestOptions);\n\n if (this.rateLimitMode !== \"ignore\") {\n const timestamps = this.requestTimestamps.get(apiKey) ?? [];\n timestamps.push(Date.now());\n this.requestTimestamps.set(apiKey, timestamps);\n }\n\n if (!response.ok) {\n throw new Error(\n `Request failed with status ${response.status}: ${response.statusText}`,\n );\n }\n\n const data: unknown = await response.json();\n\n if (isApiError(data)) {\n throw new TornApiError(data.error);\n }\n\n let resultData: T;\n\n if (isApiPaginatedResponse(data)) {\n resultData = new PaginatedResponse<T>(\n data as T,\n data._metadata.links.next,\n data._metadata.links.prev,\n this.requester,\n ) as unknown as T;\n } else {\n resultData = data as T;\n }\n\n this.log(\"Response data:\", resultData);\n\n return resultData;\n } catch (error) {\n const err = isError(error)\n ? error\n : new Error(\"An unknown error occurred\");\n this.log(\"Request failed:\", err.message);\n\n throw err;\n }\n }\n\n /**\n * Returns real-time rate limit information for each API key\n * @returns {Record<string, { used: number; remaining: number; resetInMs: number }>} An object where keys are partial API keys\n * and values contain usage details\n */\n public getRateLimitInfo(): Record<\n string,\n { used: number; remaining: number; resetInMs: number }\n > {\n const now = Date.now();\n const oneMinuteAgo = now - 60_000;\n const info: Record<\n string,\n { used: number; remaining: number; resetInMs: number }\n > = {};\n\n for (const key of this.apiKeys) {\n const timestamps = (this.requestTimestamps.get(key) ?? []).filter(\n (ts) => ts > oneMinuteAgo,\n );\n const used = timestamps.length;\n const remaining = Math.max(0, 100 - used);\n const oldestRequest = timestamps[0] ?? null;\n const resetInMs = oldestRequest\n ? Math.max(0, 60_000 - (now - oldestRequest))\n : 0;\n\n info[key.slice(0, 5)] = {\n used,\n remaining,\n resetInMs,\n };\n }\n return info;\n }\n}\n","import {\n UserEndpoint,\n FactionEndpoint,\n MarketEndpoint,\n TornEndpoint,\n PropertyEndpoint,\n KeyEndpoint,\n RacingEndpoint,\n ForumEndpoint,\n} from \"../generated\";\n\nimport { RequestHandler, RequestHandlerOptions } from \"./requester\";\nimport type { Requester, RateLimitMode } from \"./types\";\n\n/**\n * Configuration options for the TornAPI client\n * @category Core\n */\nexport interface TornAPIOptions extends Omit<RequestHandlerOptions, \"apiKeys\"> {\n /**\n * An array of your Torn API keys. At least one key is required\n */\n apiKeys: string[];\n}\n\n/**\n * Main class\n *\n * Provides access to all API sections\n *\n * ## Example\n * ```\n * const client = new TornAPI({\n * apiKeys: ['YOUR_API_KEY1', 'YOUR_API_KEY2'],\n * comment: 'my-app',\n * rateLimitMode: 'autoDelay',\n * verbose: true,\n * });\n *\n * const userProfile = await client.user.withId(12345).get();\n * ```\n * ## Configuration\n *\n * The `TornAPI` constructor accepts the following options:\n *\n * | Option | Type | Default | Description |\n * | :--- | :--- | :--- | :--- |\n * | `apiKeys` | `string[]` | **Required** | An array of one or more Torn API keys |\n * | `rateLimitMode` | `'autoDelay' │ 'throwOnLimit' │ 'ignore'` | `'autoDelay'` | How to handle the 100 requests/minute limit |\n * | `apiKeyBalancing` | `'roundRobin' │ 'random'` | `'roundRobin'` | Strategy for distributing requests across multiple keys |\n * | `comment` | `string` | `undefined` | A comment to include in the `comment` query parameter for your requests |\n * | `headers` | `Record<string, string>` | `{}` | Custom headers to send with each request |\n * | `verbose` | `boolean` | `false` | If `true`, logs all outgoing requests, responses, and rate limit events |\n *\n * ## Core Concepts\n *\n * ### API Endpoints\n *\n * The client is organized by API categories:\n *\n * - `client.user`\n * - `client.faction`\n * - `client.market`\n * - `client.property`\n * - `client.racing`\n * - `client.forum`\n * - `client.key`\n * - `client.torn`\n *\n * ### Pagination\n *\n * Endpoints that return lists are paginated\n *\n * The response object is a special `PaginatedResponse` class that **always** includes `.next()` and `.prev()` methods to easily fetch adjacent pages\n *\n * If a page does not exist, these methods return `null`\n *\n * ### Rate Limiting\n *\n * - **`autoDelay` (Default)**: Automatically queues requests to ensure you do not exceed the 100 req/min limit\n * - **`throwOnLimit`**: Throws a `TornRateLimitError` if a request would exceed the limit\n * - **`ignore`**: Disables rate limiting. Not recommended unless you have your own external limiter\n *\n * @category Core\n */\nexport class TornAPI {\n public readonly user: UserEndpoint;\n public readonly faction: FactionEndpoint;\n public readonly market: MarketEndpoint;\n public readonly property: PropertyEndpoint;\n public readonly racing: RacingEndpoint;\n public readonly forum: ForumEndpoint;\n public readonly key: KeyEndpoint;\n public readonly torn: TornEndpoint;\n\n public readonly rateLimitMode: RateLimitMode;\n private readonly requestHandler: RequestHandler;\n\n /**\n * Creates an instance of the TornAPI client\n * @param {TornAPIOptions} options - Configuration options for the client\n */\n constructor(options: TornAPIOptions) {\n if (!options.apiKeys || options.apiKeys.length === 0) {\n throw new Error(\n \"At least one API key is required to initialize the client.\",\n );\n }\n\n this.rateLimitMode = options.rateLimitMode ?? \"autoDelay\";\n this.requestHandler = new RequestHandler(options);\n const requester: Requester = this.requestHandler.requester;\n\n this.user = new UserEndpoint(requester);\n this.faction = new FactionEndpoint(requester);\n this.market = new MarketEndpoint(requester);\n this.property = new PropertyEndpoint(requester);\n this.racing = new RacingEndpoint(requester);\n this.forum = new ForumEndpoint(requester);\n this.torn = new TornEndpoint(requester);\n this.key = new KeyEndpoint(requester);\n }\n\n /**\n * Returns real-time rate limit information for each API key\n * and values contain usage details\n */\n public getRateLimitInfo(): Record<\n string,\n { used: number; remaining: number; resetInMs: number }\n > {\n return this.requestHandler.getRateLimitInfo();\n }\n}\n"]}
|