@book000/pixivts 0.60.2 → 0.61.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/dist/index.cjs CHANGED
@@ -1098,12 +1098,14 @@ var IllustResource = class {
1098
1098
  recommended(params = {}) {
1099
1099
  return PaginatedResultAsync.fromResultAsync(this.#http.get("/v1/illust/recommended", buildParams({
1100
1100
  filter: params.filter ?? "for_ios",
1101
- includeRankingLabel: true,
1101
+ contentType: params.contentType,
1102
+ includeRankingLabel: params.includeRankingLabel ?? true,
1102
1103
  includeRankingIllusts: true,
1103
1104
  includePrivacyPolicy: true,
1104
1105
  offset: params.offset,
1105
1106
  maxBookmarkIdForRecommend: params.maxBookmarkIdForRecommend,
1106
- minBookmarkIdForRecentIllust: params.minBookmarkIdForRecentIllust
1107
+ minBookmarkIdForRecentIllust: params.minBookmarkIdForRecentIllust,
1108
+ ...params.viewed ? { viewed: params.viewed } : {}
1107
1109
  })), this.#http, (page) => page.illusts);
1108
1110
  }
1109
1111
  /**
package/dist/index.d.cts CHANGED
@@ -684,10 +684,18 @@ interface PrivacyPolicy {
684
684
  /** URL to the full privacy-policy page. */
685
685
  url?: string;
686
686
  }
687
- /** Original-image URL for a single-page illust. */
687
+ /**
688
+ * Original-image URL for a single-page illust.
689
+ *
690
+ * For manga works the API returns `meta_single_page` as an empty object `{}`,
691
+ * so `originalImageUrl` may be absent even when the enclosing object is present.
692
+ */
688
693
  interface MetaSinglePage {
689
- /** Direct URL to the original-resolution image. */
690
- originalImageUrl: string;
694
+ /**
695
+ * Direct URL to the original-resolution image.
696
+ * Absent for manga works where `meta_single_page` is returned as `{}`.
697
+ */
698
+ originalImageUrl?: string;
691
699
  }
692
700
  /** Per-page image URLs for a multi-page work (manga). */
693
701
  interface MetaPages {
@@ -740,7 +748,7 @@ interface PixivIllustItem {
740
748
  series: Series | null;
741
749
  /**
742
750
  * For single-page works: `{ originalImageUrl: string }`.
743
- * For multi-page works: `{}` (empty object).
751
+ * For multi-page works (manga): `{}` (empty object; `originalImageUrl` will be `undefined`).
744
752
  */
745
753
  metaSinglePage: MetaSinglePage | Record<string, never>;
746
754
  /** Per-page image URLs for multi-page works (empty array for single-page). */
@@ -1245,6 +1253,24 @@ interface IllustRecommendedParams {
1245
1253
  * value extracted from a previous page's `next_url` via {@link parseNextUrl}.
1246
1254
  */
1247
1255
  minBookmarkIdForRecentIllust?: number;
1256
+ /**
1257
+ * Content type filter for recommended works.
1258
+ * - `"illust"` — illustration works only
1259
+ * - `"manga"` — manga works only
1260
+ * Omit to receive both types.
1261
+ */
1262
+ contentType?: 'illust' | 'manga';
1263
+ /**
1264
+ * Whether to include ranking label information in the response.
1265
+ * Defaults to `true` when omitted.
1266
+ */
1267
+ includeRankingLabel?: boolean;
1268
+ /**
1269
+ * IDs of illusts already seen by the user.
1270
+ * The API will exclude these from the recommendations.
1271
+ * Serialised as repeated `viewed[]=<id>` query parameters.
1272
+ */
1273
+ viewed?: number[];
1248
1274
  }
1249
1275
  /** Parameters for fetching an illust series. */
1250
1276
  interface IllustSeriesParams {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/result.ts","../src/auth.ts","../src/interceptor.ts","../src/errors.ts","../src/http.ts","../src/paginated.ts","../src/params.ts","../src/options.ts","../src/types.ts","../src/resources/illusts.ts","../src/resources/novels.ts","../src/resources/users.ts","../src/resources/manga.ts","../src/resources/ugoira.ts","../src/resources/images.ts","../src/client.ts"],"mappings":"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C;EQmGZ,SAAA;ERnG2B;EQqG3B,cAAA;ERjGU;EQmGV,YAAA;ERnGgB;EQqGhB,OAAA;ERrGyB;EQuGzB,OAAA;ERvGuC;EQyGvC,aAAA;ERzGgD;EQ2GhD,YAAA;ER3GoB;EQ6GpB,eAAA;ER7GkC;EQ+GlC,oBAAA;ER/GiD;EQiHjD,qBAAA;AAAA;AR9CF;AAAA,UQkDiB,kBAAA;ERlDC;EQoDhB,EAAA;ERpDwC;EQsDxC,KAAA;ERtDuC;EQwDvC,OAAA;ERxDiB;EQ0DjB,cAAA;IAAkB,MAAA;EAAA;ER1DsB;EQ4DxC,eAAA;ER5DyC;EQ8DzC,UAAA;ERrDiB;EQuDjB,KAAA;ERvD4B;EQyD5B,MAAA;ERzDgC;EQ2DhC,IAAA,EAAM,SAAS;ER3D0B;EQ6DzC,cAAA;AAAA;;;;;AR7D2C;UQyE5B,cAAA;ERrDO;;;;;;EQ4DtB,EAAA;ERzD6B;EQ2D7B,KAAA;ERrDuB;EQuDvB,OAAA;ERvDgB;EQyDhB,QAAA;ERvDyB;EQyDzB,SAAA;ERzDgC;EQ2DhC,UAAA;ER3D2C;EQ6D3C,SAAA,EAAW,SAAA;ER3DiD;EQ6D5D,UAAA;ER5De;EQ8Df,IAAA,EAAM,GAAA;ER9DH;EQgEH,SAAA;ERlDW;EQoDX,UAAA;ERlDe;EQoDf,IAAA,EAAM,SAAA;ERpDH;;;;;EQ0DH,MAAA,EAAQ,MAAA,GAAS,MAAA;ER5C8B;EQ8C/C,YAAA;ERnCyB;EQqCzB,cAAA;ERrC4C;EQuC5C,SAAA;ERzBsB;EQ2BtB,OAAA;ER3B4C;EQ6B5C,aAAA;ER7BgC;EQ+BhC,OAAA;ERjBgC;EQmBhC,aAAA;ERnBoB;EQqBpB,aAAA;ERrBkD;EQuBlD,WAAA;ERtBe;EQwBf,oBAAA;AAAA;;UAIe,iBAAA;ERPO;EQStB,EAAA;ERT0B;EQW1B,KAAA;ERVuB;EQYvB,OAAA;ERZ2B;EQc3B,UAAA;ERbG;EQeH,WAAA;ERJqC;EQMrC,YAAA;ER5HwC;EQ8HxC,mBAAA;ER9HmD;EQgInD,IAAA,EAAM,SAAS;ERhIW;EQkI1B,WAAA;ERlIoD;EQoIpD,WAAA;ERpI8D;EQsI9D,cAAA;AAAA;;KAQU,aAAA,GAAgB,SAAS;ER3IC,qDQ6IpC,OAAO;AAAA;;KAIG,SAAA;;UAGK,gBAAA;ER9IW;EQgJ1B,OAAA;ER9Ie;EQgJf,MAAA;ERhJyB;EQkJzB,KAAA;ERlJgC;EQoJhC,QAAA;ERpJuD;EQsJvD,SAAA;ERpJiB;EQsJjB,MAAA;ERtJgD;EQwJhD,SAAA;ERxJE;EQ0JF,WAAA;ERzJe;EQ2Jf,GAAA;ER9IO;EQgJP,KAAA;ERhJsB;EQkJtB,gBAAA;ERjJmB;EQmJnB,iBAAA;ERlJY;EQoJZ,YAAA;ERpJE;EQsJF,UAAA;ERrJe;EQuJf,WAAA;ERzIO;EQ2IP,0BAAA;ER3IqB;EQ6IrB,iBAAA;ER7IuC;EQ+IvC,gBAAA;ER/IwB;EQiJxB,kBAAA;ERjJ2D;EQmJ3D,cAAA;ERxIA;EQ0IA,UAAA;ER1ImB;EQ4InB,QAAA;ER5IyB;EQ8IzB,SAAA;ER9I6B;EQgJ7B,yBAAA;AAAA;;UAIe,yBAAA;ERtIO;EQwItB,MAAA,EAAQ,SAAA;ERxIoB;EQ0I5B,MAAA,EAAQ,SAAA;ER1IwB;EQ4IhC,QAAA,EAAU,SAAA;ER5IqC;EQ8I/C,SAAA,EAAW,SAAA;ERjIH;EQmIR,GAAA,EAAK,SAAA;ERlIS;EQoId,KAAA;AAAA;;UAIe,yBAAA;ERxIyB;EQ0IxC,EAAA;ER1IkD;EQ4IlD,OAAA;ER3IG;EQ6IH,IAAA;ER7IkB;EQ+IlB,OAAA;ER3HM;EQ6HN,MAAA;ER5HgB;EQ8HhB,KAAA;ER9HsB;EQgItB,OAAA;ERhIkC;EQkIlC,OAAA;ERjIiB;EQmIjB,KAAA;ERnIuB;EQqIvB,IAAA;ERrImC;EQuInC,KAAA;ERtIG;EQwIH,OAAA;ER7HM;EQ+HN,iBAAA;AAAA;;;;AR/HsC;;UQuIvB,oBAAA;;EAEf,IAAA,EAAM,SAAA;EPpZwB;EOsZ9B,OAAA,EAAS,eAAA;EPtZqB;EOwZ9B,MAAA,EAAQ,cAAA;EPpZR;EOsZA,OAAA;AAAA;APpZY;AAAA,UO4ZG,OAAA;EPpQO;EOsQtB,MAAM;AAAA;;UAIS,KAAA;EP/L2B;EOiM1C,IAAA;EPjMiD;EOmMjD,KAAK;AAAA;;UAIU,eAAA;EP7QH;EO+QZ,OAAA,EAAS,OAAA;EPnQL;EOqQJ,MAAA,EAAQ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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/result.ts","../src/auth.ts","../src/interceptor.ts","../src/errors.ts","../src/http.ts","../src/paginated.ts","../src/params.ts","../src/options.ts","../src/types.ts","../src/resources/illusts.ts","../src/resources/novels.ts","../src/resources/users.ts","../src/resources/manga.ts","../src/resources/ugoira.ts","../src/resources/images.ts","../src/client.ts"],"mappings":"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AAA,EAAW,SAAA;ERrGc;EQuGzB,SAAA;ERvGuC;EQyGvC,cAAA;ERzGgD;EQ2GhD,YAAA;ER3GoB;EQ6GpB,OAAA;ER7GkC;EQ+GlC,OAAA;ER/GiD;EQiHjD,aAAA;ERjHkD;EQmHlD,YAAA;ERhDgB;EQkDhB,eAAA;ERlD2B;EQoD3B,oBAAA;ERpD+B;EQsD/B,qBAAA;AAAA;;UAIe,kBAAA;ER1DK;EQ4DpB,EAAA;ER5DwC;EQ8DxC,KAAA;ER9DyC;EQgEzC,OAAA;ERvDiB;EQyDjB,cAAA;IAAkB,MAAA;EAAA;ERzDc;EQ2DhC,eAAA;ER3DyC;EQ6DzC,UAAA;ER7D4B;EQ+D5B,KAAA;ER/DgC;EQiEhC,MAAA;ERjE2C;EQmE3C,IAAA,EAAM,SAAS;ER/CJ;EQiDX,cAAA;AAAA;;;;;;UAYe,cAAA;ER1DM;;;;;;EQiErB,EAAA;ERzDgC;EQ2DhC,KAAA;ER3D2C;EQ6D3C,OAAA;ER3D4D;EQ6D5D,QAAA;ER5De;EQ8Df,SAAA;ER9DG;EQgEH,UAAA;ERlDW;EQoDX,SAAA,EAAW,SAAA;ERlDI;EQoDf,UAAA;ERpDG;EQsDH,IAAA,EAAM,GAAA;ERxCoC;EQ0C1C,SAAA;ER1C2D;EQ4C3D,UAAA;ER5C+C;EQ8C/C,IAAA,EAAM,SAAA;ERnCmB;;;;;EQyCzB,MAAA,EAAQ,MAAA,GAAS,MAAA;ER3B2B;EQ6B5C,YAAA;ER7BgC;EQ+BhC,cAAA;ERjBgC;EQmBhC,SAAA;ERnBoB;EQqBpB,OAAA;ERrBkD;EQuBlD,aAAA;ERtBe;EQwBf,OAAA;ERxBsB;EQ0BtB,aAAA;ERLgB;EQOhB,aAAA;ERPkC;EQSlC,WAAA;ERRiB;EQUjB,oBAAA;AAAA;;UAIe,iBAAA;ERbZ;EQeH,EAAA;ERJqC;EQMrC,KAAA;ER5HwC;EQ8HxC,OAAA;ER9HmD;EQgInD,UAAA;ERhI0B;EQkI1B,WAAA;ERlIoD;EQoIpD,YAAA;ERpI8D;EQsI9D,mBAAA;;EAEA,IAAA,EAAM,SAAS;ERrIc;EQuI7B,WAAA;ERvIuC;EQyIvC,WAAA;ERnIA;EQqIA,cAAA;AAAA;;KAQU,aAAA,GAAgB,SAAS;ER7IL,qDQ+I9B,OAAO;AA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"}
package/dist/index.d.ts CHANGED
@@ -684,10 +684,18 @@ interface PrivacyPolicy {
684
684
  /** URL to the full privacy-policy page. */
685
685
  url?: string;
686
686
  }
687
- /** Original-image URL for a single-page illust. */
687
+ /**
688
+ * Original-image URL for a single-page illust.
689
+ *
690
+ * For manga works the API returns `meta_single_page` as an empty object `{}`,
691
+ * so `originalImageUrl` may be absent even when the enclosing object is present.
692
+ */
688
693
  interface MetaSinglePage {
689
- /** Direct URL to the original-resolution image. */
690
- originalImageUrl: string;
694
+ /**
695
+ * Direct URL to the original-resolution image.
696
+ * Absent for manga works where `meta_single_page` is returned as `{}`.
697
+ */
698
+ originalImageUrl?: string;
691
699
  }
692
700
  /** Per-page image URLs for a multi-page work (manga). */
693
701
  interface MetaPages {
@@ -740,7 +748,7 @@ interface PixivIllustItem {
740
748
  series: Series | null;
741
749
  /**
742
750
  * For single-page works: `{ originalImageUrl: string }`.
743
- * For multi-page works: `{}` (empty object).
751
+ * For multi-page works (manga): `{}` (empty object; `originalImageUrl` will be `undefined`).
744
752
  */
745
753
  metaSinglePage: MetaSinglePage | Record<string, never>;
746
754
  /** Per-page image URLs for multi-page works (empty array for single-page). */
@@ -1245,6 +1253,24 @@ interface IllustRecommendedParams {
1245
1253
  * value extracted from a previous page's `next_url` via {@link parseNextUrl}.
1246
1254
  */
1247
1255
  minBookmarkIdForRecentIllust?: number;
1256
+ /**
1257
+ * Content type filter for recommended works.
1258
+ * - `"illust"` — illustration works only
1259
+ * - `"manga"` — manga works only
1260
+ * Omit to receive both types.
1261
+ */
1262
+ contentType?: 'illust' | 'manga';
1263
+ /**
1264
+ * Whether to include ranking label information in the response.
1265
+ * Defaults to `true` when omitted.
1266
+ */
1267
+ includeRankingLabel?: boolean;
1268
+ /**
1269
+ * IDs of illusts already seen by the user.
1270
+ * The API will exclude these from the recommendations.
1271
+ * Serialised as repeated `viewed[]=<id>` query parameters.
1272
+ */
1273
+ viewed?: number[];
1248
1274
  }
1249
1275
  /** Parameters for fetching an illust series. */
1250
1276
  interface IllustSeriesParams {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/result.ts","../src/auth.ts","../src/interceptor.ts","../src/errors.ts","../src/http.ts","../src/paginated.ts","../src/params.ts","../src/options.ts","../src/types.ts","../src/resources/illusts.ts","../src/resources/novels.ts","../src/resources/users.ts","../src/resources/manga.ts","../src/resources/ugoira.ts","../src/resources/images.ts","../src/client.ts"],"mappings":"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C;EQmGZ,SAAA;ERnG2B;EQqG3B,cAAA;ERjGU;EQmGV,YAAA;ERnGgB;EQqGhB,OAAA;ERrGyB;EQuGzB,OAAA;ERvGuC;EQyGvC,aAAA;ERzGgD;EQ2GhD,YAAA;ER3GoB;EQ6GpB,eAAA;ER7GkC;EQ+GlC,oBAAA;ER/GiD;EQiHjD,qBAAA;AAAA;AR9CF;AAAA,UQkDiB,kBAAA;ERlDC;EQoDhB,EAAA;ERpDwC;EQsDxC,KAAA;ERtDuC;EQwDvC,OAAA;ERxDiB;EQ0DjB,cAAA;IAAkB,MAAA;EAAA;ER1DsB;EQ4DxC,eAAA;ER5DyC;EQ8DzC,UAAA;ERrDiB;EQuDjB,KAAA;ERvD4B;EQyD5B,MAAA;ERzDgC;EQ2DhC,IAAA,EAAM,SAAS;ER3D0B;EQ6DzC,cAAA;AAAA;;;;;AR7D2C;UQyE5B,cAAA;ERrDO;;;;;;EQ4DtB,EAAA;ERzD6B;EQ2D7B,KAAA;ERrDuB;EQuDvB,OAAA;ERvDgB;EQyDhB,QAAA;ERvDyB;EQyDzB,SAAA;ERzDgC;EQ2DhC,UAAA;ER3D2C;EQ6D3C,SAAA,EAAW,SAAA;ER3DiD;EQ6D5D,UAAA;ER5De;EQ8Df,IAAA,EAAM,GAAA;ER9DH;EQgEH,SAAA;ERlDW;EQoDX,UAAA;ERlDe;EQoDf,IAAA,EAAM,SAAA;ERpDH;;;;;EQ0DH,MAAA,EAAQ,MAAA,GAAS,MAAA;ER5C8B;EQ8C/C,YAAA;ERnCyB;EQqCzB,cAAA;ERrC4C;EQuC5C,SAAA;ERzBsB;EQ2BtB,OAAA;ER3B4C;EQ6B5C,aAAA;ER7BgC;EQ+BhC,OAAA;ERjBgC;EQmBhC,aAAA;ERnBoB;EQqBpB,aAAA;ERrBkD;EQuBlD,WAAA;ERtBe;EQwBf,oBAAA;AAAA;;UAIe,iBAAA;ERPO;EQStB,EAAA;ERT0B;EQW1B,KAAA;ERVuB;EQYvB,OAAA;ERZ2B;EQc3B,UAAA;ERbG;EQeH,WAAA;ERJqC;EQMrC,YAAA;ER5HwC;EQ8HxC,mBAAA;ER9HmD;EQgInD,IAAA,EAAM,SAAS;ERhIW;EQkI1B,WAAA;ERlIoD;EQoIpD,WAAA;ERpI8D;EQsI9D,cAAA;AAAA;;KAQU,aAAA,GAAgB,SAAS;ER3IC,qDQ6IpC,OAAO;AAAA;;KAIG,SAAA;;UAGK,gBAAA;ER9IW;EQgJ1B,OAAA;ER9Ie;EQgJf,MAAA;ERhJyB;EQkJzB,KAAA;ERlJgC;EQoJhC,QAAA;ERpJuD;EQsJvD,SAAA;ERpJiB;EQsJjB,MAAA;ERtJgD;EQwJhD,SAAA;ERxJE;EQ0JF,WAAA;ERzJe;EQ2Jf,GAAA;ER9IO;EQgJP,KAAA;ERhJsB;EQkJtB,gBAAA;ERjJmB;EQmJnB,iBAAA;ERlJY;EQoJZ,YAAA;ERpJE;EQsJF,UAAA;ERrJe;EQuJf,WAAA;ERzIO;EQ2IP,0BAAA;ER3IqB;EQ6IrB,iBAAA;ER7IuC;EQ+IvC,gBAAA;ER/IwB;EQiJxB,kBAAA;ERjJ2D;EQmJ3D,cAAA;ERxIA;EQ0IA,UAAA;ER1ImB;EQ4InB,QAAA;ER5IyB;EQ8IzB,SAAA;ER9I6B;EQgJ7B,yBAAA;AAAA;;UAIe,yBAAA;ERtIO;EQwItB,MAAA,EAAQ,SAAA;ERxIoB;EQ0I5B,MAAA,EAAQ,SAAA;ER1IwB;EQ4IhC,QAAA,EAAU,SAAA;ER5IqC;EQ8I/C,SAAA,EAAW,SAAA;ERjIH;EQmIR,GAAA,EAAK,SAAA;ERlIS;EQoId,KAAA;AAAA;;UAIe,yBAAA;ERxIyB;EQ0IxC,EAAA;ER1IkD;EQ4IlD,OAAA;ER3IG;EQ6IH,IAAA;ER7IkB;EQ+IlB,OAAA;ER3HM;EQ6HN,MAAA;ER5HgB;EQ8HhB,KAAA;ER9HsB;EQgItB,OAAA;ERhIkC;EQkIlC,OAAA;ERjIiB;EQmIjB,KAAA;ERnIuB;EQqIvB,IAAA;ERrImC;EQuInC,KAAA;ERtIG;EQwIH,OAAA;ER7HM;EQ+HN,iBAAA;AAAA;;;;AR/HsC;;UQuIvB,oBAAA;;EAEf,IAAA,EAAM,SAAA;EPpZwB;EOsZ9B,OAAA,EAAS,eAAA;EPtZqB;EOwZ9B,MAAA,EAAQ,cAAA;EPpZR;EOsZA,OAAA;AAAA;APpZY;AAAA,UO4ZG,OAAA;EPpQO;EOsQtB,MAAM;AAAA;;UAIS,KAAA;EP/L2B;EOiM1C,IAAA;EPjMiD;EOmMjD,KAAK;AAAA;;UAIU,eAAA;EP7QH;EO+QZ,OAAA,EAAS,OAAA;EPnQL;EOqQJ,MAAA,EAAQ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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/result.ts","../src/auth.ts","../src/interceptor.ts","../src/errors.ts","../src/http.ts","../src/paginated.ts","../src/params.ts","../src/options.ts","../src/types.ts","../src/resources/illusts.ts","../src/resources/novels.ts","../src/resources/users.ts","../src/resources/manga.ts","../src/resources/ugoira.ts","../src/resources/images.ts","../src/client.ts"],"mappings":"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AAA,EAAW,SAAA;ERrGc;EQuGzB,SAAA;ERvGuC;EQyGvC,cAAA;ERzGgD;EQ2GhD,YAAA;ER3GoB;EQ6GpB,OAAA;ER7GkC;EQ+GlC,OAAA;ER/GiD;EQiHjD,aAAA;ERjHkD;EQmHlD,YAAA;ERhDgB;EQkDhB,eAAA;ERlD2B;EQoD3B,oBAAA;ERpD+B;EQsD/B,qBAAA;AAAA;;UAIe,kBAAA;ER1DK;EQ4DpB,EAAA;ER5DwC;EQ8DxC,KAAA;ER9DyC;EQgEzC,OAAA;ERvDiB;EQyDjB,cAAA;IAAkB,MAAA;EAAA;ERzDc;EQ2DhC,eAAA;ER3DyC;EQ6DzC,UAAA;ER7D4B;EQ+D5B,KAAA;ER/DgC;EQiEhC,MAAA;ERjE2C;EQmE3C,IAAA,EAAM,SAAS;ER/CJ;EQiDX,cAAA;AAAA;;;;;;UAYe,cAAA;ER1DM;;;;;;EQiErB,EAAA;ERzDgC;EQ2DhC,KAAA;ER3D2C;EQ6D3C,OAAA;ER3D4D;EQ6D5D,QAAA;ER5De;EQ8Df,SAAA;ER9DG;EQgEH,UAAA;ERlDW;EQoDX,SAAA,EAAW,SAAA;ERlDI;EQoDf,UAAA;ERpDG;EQsDH,IAAA,EAAM,GAAA;ERxCoC;EQ0C1C,SAAA;ER1C2D;EQ4C3D,UAAA;ER5C+C;EQ8C/C,IAAA,EAAM,SAAA;ERnCmB;;;;;EQyCzB,MAAA,EAAQ,MAAA,GAAS,MAAA;ER3B2B;EQ6B5C,YAAA;ER7BgC;EQ+BhC,cAAA;ERjBgC;EQmBhC,SAAA;ERnBoB;EQqBpB,OAAA;ERrBkD;EQuBlD,aAAA;ERtBe;EQwBf,OAAA;ERxBsB;EQ0BtB,aAAA;ERLgB;EQOhB,aAAA;ERPkC;EQSlC,WAAA;ERRiB;EQUjB,oBAAA;AAAA;;UAIe,iBAAA;ERbZ;EQeH,EAAA;ERJqC;EQMrC,KAAA;ER5HwC;EQ8HxC,OAAA;ER9HmD;EQgInD,UAAA;ERhI0B;EQkI1B,WAAA;ERlIoD;EQoIpD,YAAA;ERpI8D;EQsI9D,mBAAA;;EAEA,IAAA,EAAM,SAAS;ERrIc;EQuI7B,WAAA;ERvIuC;EQyIvC,WAAA;ERnIA;EQqIA,cAAA;AAAA;;KAQU,aAAA,GAAgB,SAAS;ER7IL,qDQ+I9B,OAAO;AA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"}
package/dist/index.js CHANGED
@@ -1097,12 +1097,14 @@ var IllustResource = class {
1097
1097
  recommended(params = {}) {
1098
1098
  return PaginatedResultAsync.fromResultAsync(this.#http.get("/v1/illust/recommended", buildParams({
1099
1099
  filter: params.filter ?? "for_ios",
1100
- includeRankingLabel: true,
1100
+ contentType: params.contentType,
1101
+ includeRankingLabel: params.includeRankingLabel ?? true,
1101
1102
  includeRankingIllusts: true,
1102
1103
  includePrivacyPolicy: true,
1103
1104
  offset: params.offset,
1104
1105
  maxBookmarkIdForRecommend: params.maxBookmarkIdForRecommend,
1105
- minBookmarkIdForRecentIllust: params.minBookmarkIdForRecentIllust
1106
+ minBookmarkIdForRecentIllust: params.minBookmarkIdForRecentIllust,
1107
+ ...params.viewed ? { viewed: params.viewed } : {}
1106
1108
  })), this.#http, (page) => page.illusts);
1107
1109
  }
1108
1110
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#http","#getItems","#accessToken","#refreshToken","#auth","#retry","#interceptor","#send","#sendWithRetry","#http","#http","#http","#http","#http","#http","#auth"],"sources":["../src/result.ts","../src/errors.ts","../src/paginated.ts","../src/params.ts","../src/options.ts","../src/auth.ts","../src/http.ts","../src/resources/illusts.ts","../src/resources/novels.ts","../src/resources/users.ts","../src/resources/manga.ts","../src/resources/ugoira.ts","../src/resources/images.ts","../src/client.ts"],"sourcesContent":["/**\n * Zero-dependency Result / ResultAsync implementation.\n *\n * Ergonomics are intentionally close to neverthrow so the patterns feel\n * familiar without pulling in an external dependency.\n *\n * @example\n * ```ts\n * const r = ok(42)\n * if (r.isOk) console.log(r.value) // 42\n *\n * const a = ResultAsync.fromPromise(fetch('/api'), (e) => networkError(e))\n * const text = await a\n * .andThen((res) => ResultAsync.fromPromise(res.text(), networkError))\n * .unwrapOr('fallback')\n * ```\n */\n\n// ---------------------------------------------------------------------------\n// Result<T, E>\n// ---------------------------------------------------------------------------\n\n/** Successful result carrying `value`. */\nexport interface OkResult<T> {\n /** Always `true` — use this to narrow the union to `OkResult<T>`. */\n readonly isOk: true\n /** Always `false` — use this to narrow the union to `OkResult<T>`. */\n readonly isErr: false\n /** The success value. */\n readonly value: T\n /** Returns an `OkResult` with `fn(value)`. */\n map<U>(fn: (value: T) => U): OkResult<U>\n /** Returns `this` unchanged. */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- F is part of the public API contract, symmetric with ErrResult.mapErr<F>\n mapErr<F>(_fn: (error: never) => F): OkResult<T>\n /** Calls `fn(value)` and returns its Result. */\n andThen<U, F>(fn: (value: T) => Result<U, F>): Result<U, F>\n /** Calls `onOk` and returns its result. */\n match<U>(onOk: (value: T) => U, _onErr: (error: never) => U): U\n /** Returns `value`. */\n unwrapOr(_fallback: T): T\n}\n\n/** Failed result carrying `error`. */\nexport interface ErrResult<E> {\n /** Always `false` — use this to narrow the union to `ErrResult<E>`. */\n readonly isOk: false\n /** Always `true` — use this to narrow the union to `ErrResult<E>`. */\n readonly isErr: true\n /** The error value. */\n readonly error: E\n /** Returns `this` unchanged. */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- U is part of the public API contract, symmetric with OkResult.map<U>\n map<U>(_fn: (value: never) => U): ErrResult<E>\n /** Returns an `ErrResult` with `fn(error)`. */\n mapErr<F>(fn: (error: E) => F): ErrResult<F>\n /** Returns `this` unchanged. */\n andThen<U, F>(_fn: (value: never) => Result<U, F>): ErrResult<E>\n /** Calls `onErr` and returns its result. */\n match<U>(_onOk: (value: never) => U, onErr: (error: E) => U): U\n /** Returns `fallback`. */\n unwrapOr<T>(fallback: T): T\n}\n\n/** A value that is either `OkResult<T>` or `ErrResult<E>`. */\nexport type Result<T, E> = OkResult<T> | ErrResult<E>\n\nclass OkResultImpl<T> implements OkResult<T> {\n readonly isOk = true as const\n readonly isErr = false as const\n\n constructor(readonly value: T) {}\n\n map<U>(fn: (value: T) => U): OkResult<U> {\n return new OkResultImpl(fn(this.value))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters, @typescript-eslint/no-unused-vars -- F is part of the public API contract; _fn is intentionally unused (OkResult.mapErr is a no-op)\n mapErr<F>(_fn: (error: never) => F): OkResult<T> {\n return this\n }\n\n andThen<U, F>(fn: (value: T) => Result<U, F>): Result<U, F> {\n return fn(this.value)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _onErr is intentionally unused: OkResult.match always calls onOk\n match<U>(onOk: (value: T) => U, _onErr: (error: never) => U): U {\n return onOk(this.value)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _fallback is intentionally unused: OkResult.unwrapOr always returns value\n unwrapOr(_fallback: T): T {\n return this.value\n }\n}\n\nclass ErrResultImpl<E> implements ErrResult<E> {\n readonly isOk = false as const\n readonly isErr = true as const\n\n // eslint-disable-next-line n/handle-callback-err -- 'error' is a stored value, not a Node.js callback error parameter\n constructor(readonly error: E) {}\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters, @typescript-eslint/no-unused-vars -- U is part of the public API contract; _fn is intentionally unused (ErrResult.map is a no-op)\n map<U>(_fn: (value: never) => U): ErrResult<E> {\n return this\n }\n\n mapErr<F>(fn: (error: E) => F): ErrResult<F> {\n return new ErrResultImpl(fn(this.error))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _fn is intentionally unused: ErrResult.andThen is a no-op (the success path does not apply)\n andThen<U, F>(_fn: (value: never) => Result<U, F>): ErrResult<E> {\n return this\n }\n\n match<U>(_onOk: (value: never) => U, onErr: (error: E) => U): U {\n return onErr(this.error)\n }\n\n unwrapOr<T>(fallback: T): T {\n return fallback\n }\n}\n\n/**\n * Creates a successful `Result<T, never>`.\n *\n * @param value - The success value\n */\nexport function ok<T>(value: T): OkResult<T> {\n return new OkResultImpl(value)\n}\n\n/**\n * Creates a failed `Result<never, E>`.\n *\n * @param error - The error value\n */\nexport function err<E>(error: E): ErrResult<E> {\n return new ErrResultImpl(error)\n}\n\n// ---------------------------------------------------------------------------\n// ResultAsync<T, E>\n// ---------------------------------------------------------------------------\n\n/**\n * A `PromiseLike<Result<T, E>>` that is directly `await`-able and supports\n * chainable `map / mapErr / andThen` operators.\n *\n * @example\n * ```ts\n * const result = await ResultAsync.fromPromise(fetch('/api'), networkError)\n * .andThen((res) =>\n * ResultAsync.fromPromise(res.json() as Promise<unknown>, networkError)\n * )\n * ```\n */\nexport class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {\n private readonly _promise: Promise<Result<T, E>>\n\n constructor(promise: Promise<Result<T, E>>) {\n this._promise = promise\n }\n\n // PromiseLike contract — makes `await resultAsync` work\n // eslint-disable-next-line unicorn/no-thenable -- ResultAsync intentionally implements PromiseLike to be directly awaitable\n then<TResult1 = Result<T, E>, TResult2 = never>(\n onfulfilled?:\n | ((value: Result<T, E>) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n\n return this._promise.then(onfulfilled, onrejected as any)\n }\n\n /**\n * Wraps a `Promise<T>` into a `ResultAsync<T, E>`.\n *\n * If the promise rejects, `onError` maps the rejection reason to `E`.\n *\n * @param promise - The promise to wrap\n * @param onError - Error mapper\n */\n static fromPromise<T, E>(\n promise: Promise<T>,\n onError: (reason: unknown) => E\n ): ResultAsync<T, E> {\n return new ResultAsync(\n promise.then(\n (v) => ok(v) as Result<T, E>,\n (error: unknown) => err(onError(error)) as Result<T, E>\n )\n )\n }\n\n /**\n * Wraps an already-resolved `Result<T, E>` into a `ResultAsync<T, E>`.\n *\n * @param result - The result to wrap\n */\n static fromResult<T, E>(result: Result<T, E>): ResultAsync<T, E> {\n return new ResultAsync(Promise.resolve(result))\n }\n\n /**\n * Transforms the success value.\n *\n * If the inner result is `Err`, `fn` is not called.\n *\n * @param fn - Synchronous mapper\n */\n map<U>(fn: (value: T) => U): ResultAsync<U, E> {\n return new ResultAsync(\n // eslint-disable-next-line unicorn/no-array-callback-reference -- r.map(fn) is safe here; fn is a user-supplied mapper, not a DOM/Array method reference\n this._promise.then((r) => r.map(fn) as Result<U, E>)\n )\n }\n\n /**\n * Transforms the error value.\n *\n * If the inner result is `Ok`, `fn` is not called.\n *\n * @param fn - Synchronous error mapper\n */\n mapErr<F>(fn: (error: E) => F): ResultAsync<T, F> {\n return new ResultAsync(\n this._promise.then((r) => r.mapErr(fn) as Result<T, F>)\n )\n }\n\n /**\n * Chains another async operation that may fail.\n *\n * If the inner result is `Err`, `fn` is not called.\n *\n * @param fn - Async mapper that returns a `ResultAsync<U, F>`\n */\n andThen<U, F>(\n fn: (value: T) => ResultAsync<U, F> | Result<U, F>\n ): ResultAsync<U, E | F> {\n return new ResultAsync(\n this._promise.then(async (r): Promise<Result<U, E | F>> => {\n if (r.isErr) return r\n const next = fn(r.value)\n if (next instanceof ResultAsync) {\n return next._promise\n }\n return next\n })\n )\n }\n\n /**\n * Pattern-matches on success / failure.\n *\n * @param onOk - Called with the success value\n * @param onErr - Called with the error value\n * @returns A `Promise<U>`\n */\n async match<U>(\n onOk: (value: T) => U | Promise<U>,\n onErr: (error: E) => U | Promise<U>\n ): Promise<U> {\n const r = await this._promise\n if (r.isOk) return onOk(r.value)\n return onErr(r.error)\n }\n\n /**\n * Returns the success value, or `fallback` if the result is `Err`.\n *\n * @param fallback - The fallback value\n */\n async unwrapOr(fallback: T): Promise<T> {\n const r = await this._promise\n // Avoid calling r.unwrapOr(fallback) directly to work around TypeScript 6\n // Awaited<T> inference issues with union method signatures.\n if (r.isOk) return r.value\n return fallback\n }\n}\n","/**\n * Discriminated union of all errors that can occur when using the pixiv API client.\n *\n * Use the `type` field to discriminate:\n * ```ts\n * if (result.isErr) {\n * const err = result.error\n * if (err.type === 'rate_limit') { ... }\n * }\n * ```\n */\nexport type PixivError =\n | {\n /** The request hit the rate limit and exhausted all retries. */\n type: 'rate_limit'\n /** Retry-After duration parsed from the last 429 response (milliseconds). */\n retryAfter: number\n }\n | {\n /** Authentication failed (401 response that could not be refreshed). */\n type: 'auth_failed'\n /** HTTP status code (always 401). */\n status: number\n }\n | {\n /** A network-level error occurred (fetch threw). */\n type: 'network'\n /** The underlying error thrown by fetch. */\n cause: unknown\n }\n | {\n /** The API returned a non-2xx status code other than 401/429. */\n type: 'api_error'\n /** HTTP status code. */\n status: number\n /** Parsed response body (object if JSON, string otherwise). */\n body: unknown\n }\n\n// ---------------------------------------------------------------------------\n// PixivFetchError — a proper Error subclass wrapping PixivError\n// ---------------------------------------------------------------------------\n\n/**\n * An `Error` subclass that wraps a `PixivError` for use in thrown contexts\n * (e.g. async generators that must throw proper `Error` objects).\n *\n * All `PixivError` properties are spread directly onto this instance so that\n * callers can use `instanceof PixivFetchError` or access `error.type` etc.\n *\n * @example\n * ```ts\n * try {\n * for await (const page of result.pages()) { ... }\n * } catch (e) {\n * if (e instanceof PixivFetchError) {\n * console.error(e.pixivError.type)\n * }\n * }\n * ```\n */\nexport class PixivFetchError extends Error {\n /** The underlying structured `PixivError`. */\n readonly pixivError: PixivError\n\n constructor(pixivError: PixivError) {\n super(`pixiv API error: ${pixivError.type}`)\n this.name = 'PixivFetchError'\n this.pixivError = pixivError\n // Spread PixivError fields onto this instance for backwards compatibility\n // with code that matches thrown values via { type, status, ... }.\n Object.assign(this, pixivError)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Constructor helpers (not strictly required but improve call-sites)\n// ---------------------------------------------------------------------------\n\n/** Creates a rate-limit error. */\nexport function rateLimitError(retryAfter: number): PixivError {\n return { type: 'rate_limit', retryAfter }\n}\n\n/** Creates an auth-failed error. */\nexport function authFailedError(status: number): PixivError {\n return { type: 'auth_failed', status }\n}\n\n/** Creates a network error. */\nexport function networkError(cause: unknown): PixivError {\n return { type: 'network', cause }\n}\n\n/** Creates an API error. */\nexport function apiError(status: number, body: unknown): PixivError {\n return { type: 'api_error', status, body }\n}\n","/**\n * PaginatedResultAsync — pagination support for the pixiv API.\n *\n * Extends `ResultAsync<TPage, PixivError>` so that:\n * - `await paginated` returns the first-page `Result<TPage, PixivError>` directly\n * - `.pages()` is an async generator that yields each page\n * - `.items()` is an async generator that yields individual items across all pages\n *\n * Pagination uses the `nextUrl` field returned by list endpoints. The URL is\n * fetched via `HttpClient.getAbsolute()` which reuses the same auth / retry /\n * interceptor pipeline as regular requests.\n */\n\nimport type { HttpClient } from './http'\nimport type { PixivError } from './errors'\nimport { PixivFetchError } from './errors'\nimport { err } from './result'\nimport type { Result } from './result'\nimport { ResultAsync } from './result'\n\n/**\n * A page returned by a pixiv list endpoint.\n *\n * Must have a `nextUrl` field (null when there are no more pages).\n */\nexport interface PagedResponse {\n /** URL to the next page, or `null` when there are no more pages. */\n nextUrl: string | null\n}\n\n/**\n * A `ResultAsync<TPage, PixivError>` with additional `.pages()` / `.items()`\n * async generators for consuming paginated pixiv list responses.\n *\n * Returned by all resource methods that produce a `nextUrl` field.\n */\nexport class PaginatedResultAsync<\n TPage extends PagedResponse,\n TItem,\n> extends ResultAsync<TPage, PixivError> {\n readonly #http: HttpClient\n readonly #getItems: (page: TPage) => TItem[]\n\n constructor(\n promise: Promise<Result<TPage, PixivError>>,\n http: HttpClient,\n getItems: (page: TPage) => TItem[]\n ) {\n super(promise)\n this.#http = http\n this.#getItems = getItems\n }\n\n /**\n * Creates a `PaginatedResultAsync` from a `ResultAsync`.\n *\n * @param inner - The first-page result\n * @param http - HTTP client for fetching subsequent pages\n * @param getItems - Extracts item array from a page\n */\n static fromResultAsync<TPage extends PagedResponse, TItem>(\n inner: ResultAsync<TPage, PixivError>,\n http: HttpClient,\n getItems: (page: TPage) => TItem[]\n ): PaginatedResultAsync<TPage, TItem> {\n // Access the inner promise via the PromiseLike contract (await the ResultAsync)\n const promise = Promise.resolve(inner)\n return new PaginatedResultAsync<TPage, TItem>(promise, http, getItems)\n }\n\n /**\n * Async generator that yields each page starting from the first.\n *\n * If any page fetch fails, the generator throws a `PixivFetchError`.\n *\n * @example\n * ```ts\n * for await (const page of client.illusts.search({ word: 'cat' }).pages()) {\n * console.log(page.illusts.length)\n * }\n * ```\n */\n async *pages(): AsyncGenerator<TPage, void, unknown> {\n // Yield first page\n const first = await Promise.resolve(this)\n if (first.isErr) throw new PixivFetchError(first.error)\n yield first.value\n\n // Follow nextUrl chain\n let nextUrl: string | null = first.value.nextUrl\n while (nextUrl !== null) {\n const pageResult = await this.#http.getAbsolute<TPage>(nextUrl)\n if (pageResult.isErr) throw new PixivFetchError(pageResult.error)\n yield pageResult.value\n nextUrl = pageResult.value.nextUrl\n }\n }\n\n /**\n * Async generator that yields individual items across all pages.\n *\n * If any page fetch fails, the generator throws a `PixivFetchError`.\n *\n * @example\n * ```ts\n * for await (const illust of client.illusts.search({ word: 'cat' }).items()) {\n * console.log(illust.title)\n * }\n * ```\n */\n async *items(): AsyncGenerator<TItem, void, unknown> {\n for await (const page of this.pages()) {\n for (const item of this.#getItems(page)) {\n yield item\n }\n }\n }\n}\n\n/**\n * Creates an immediately-failed `PaginatedResultAsync`.\n *\n * Useful when validation or auth fails before any HTTP request is made.\n *\n * @param error - The error to return\n * @param http - HTTP client (used for signature compatibility)\n * @param getItems - Item extractor (used for signature compatibility)\n */\nexport function failedPaginated<TPage extends PagedResponse, TItem>(\n error: PixivError,\n http: HttpClient,\n getItems: (page: TPage) => TItem[]\n): PaginatedResultAsync<TPage, TItem> {\n return new PaginatedResultAsync(\n Promise.resolve(err(error)),\n http,\n getItems\n )\n}\n","/**\n * Parameter building utilities.\n *\n * Provides camelCase → snake_case conversion and a URLSearchParams builder\n * that replicates the behaviour of the `qs` library used in the legacy code\n * (without the `qs` runtime dependency).\n */\n\n/**\n * Converts a camelCase string to snake_case.\n *\n * @example\n * camelToSnake('illustId') // 'illust_id'\n * camelToSnake('searchAiType') // 'search_ai_type'\n *\n * @param key - camelCase string\n * @returns snake_case string\n */\nexport function camelToSnake(key: string): string {\n return key.replaceAll(/([A-Z])/g, (m) => `_${m.toLowerCase()}`)\n}\n\n/**\n * Converts all keys of a plain object from camelCase to snake_case, shallow.\n *\n * Values are preserved as-is; nested objects are NOT recursed into.\n *\n * @param obj - Object with camelCase keys\n * @returns New object with snake_case keys\n */\nexport function toSnakeKeys(obj: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(obj)) {\n out[camelToSnake(key)] = obj[key]\n }\n return out\n}\n\ntype ParamValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | string[]\n | number[]\n\n/**\n * Serialises a record of query parameters into a `URLSearchParams` instance.\n *\n * Rules:\n * - `null` / `undefined` values are skipped.\n * - Arrays are appended with a `[]` suffix: `foo[]=1&foo[]=2` (Rails/pixiv convention).\n * - Booleans are serialised as `'true'` / `'false'`.\n * - Numbers are serialised via `.toString()`.\n *\n * @param params - Key/value pairs to serialise\n * @returns Populated `URLSearchParams`\n */\nexport function buildSearchParams(\n params: Record<string, ParamValue>\n): URLSearchParams {\n const usp = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === null || value === undefined) continue\n if (Array.isArray(value)) {\n // The pixiv API (Rails backend) expects bracket-suffixed keys for arrays:\n // e.g. seed_illust_ids[]=1&seed_illust_ids[]=2, not seed_illust_ids=1&seed_illust_ids=2\n for (const item of value) usp.append(`${key}[]`, String(item))\n } else {\n usp.set(key, String(value))\n }\n }\n return usp\n}\n\n/**\n * Merges camelCase→snake_case conversion with URLSearchParams building.\n *\n * Convenience wrapper used by resource methods.\n *\n * @param params - camelCase record\n * @returns Populated `URLSearchParams` with snake_case keys\n */\nexport function buildParams(\n params: Record<string, ParamValue>\n): URLSearchParams {\n return buildSearchParams(toSnakeKeys(params) as Record<string, ParamValue>)\n}\n\n/**\n * Converts a snake_case string to lowerCamelCase.\n *\n * Already-camelCase keys pass through unchanged (idempotent).\n *\n * @example\n * snakeToCamel('image_urls') // 'imageUrls'\n * snakeToCamel('x_restrict') // 'xRestrict'\n * snakeToCamel('imageUrls') // 'imageUrls' (no-op)\n *\n * @param key - snake_case string\n * @returns lowerCamelCase string\n */\nexport function snakeToCamel(key: string): string {\n return key.replaceAll(/_([a-z0-9])/g, (_m, c: string) => c.toUpperCase())\n}\n\n/**\n * Recursively converts all object keys from snake_case to lowerCamelCase.\n *\n * - Plain objects: keys are converted, values are recursed.\n * - Arrays: each element is recursed.\n * - Primitives / null: returned as-is.\n *\n * All keys are converted uniformly — no path-based exclusions.\n *\n * @param value - Any JSON-compatible value\n * @returns Deep copy with all object keys in lowerCamelCase\n */\nexport function camelizeKeys(value: unknown): unknown {\n if (value === null || typeof value !== 'object') return value\n if (Array.isArray(value)) return value.map((v) => camelizeKeys(v))\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[snakeToCamel(k)] = camelizeKeys(v)\n }\n return out\n}\n\n// ---------------------------------------------------------------------------\n// parseNextUrl\n// ---------------------------------------------------------------------------\n\n/**\n * Typed cursor parameters extracted from a pixiv `next_url`.\n *\n * Different endpoints use different cursor fields; only the fields present\n * in the URL will be defined.\n *\n * | Field | Endpoint(s) |\n * |---|---|\n * | `maxBookmarkId` | `GET /v1/user/bookmarks/illust` |\n * | `maxBookmarkIdForRecommend` | `GET /v1/illust/recommended`, `GET /v1/novel/recommended` |\n * | `minBookmarkIdForRecentIllust` | `GET /v1/illust/recommended` |\n * | `offset` | search, ranking, recommended, user lists, … |\n * | `lastOrder` | `GET /v2/novel/series` |\n */\nexport interface ParsedNextUrl {\n /** Cursor for `GET /v1/user/bookmarks/illust`. */\n maxBookmarkId?: number\n /** Cursor for `GET /v1/illust/recommended` and `GET /v1/novel/recommended`. */\n maxBookmarkIdForRecommend?: number\n /** Secondary cursor for `GET /v1/illust/recommended`. */\n minBookmarkIdForRecentIllust?: number\n /** Zero-based offset for general list endpoints. */\n offset?: number\n /** Cursor for `GET /v2/novel/series`. */\n lastOrder?: number\n}\n\n/**\n * Parses a pixiv `next_url` into a typed cursor object.\n *\n * Pass the `next_url` field from any paginated response to extract the\n * cursor parameters needed to resume pagination from a saved position.\n *\n * @example\n * ```ts\n * const page = await client.users.bookmarks.illusts({ userId: client.userId })\n * if (page.isOk && page.value.nextUrl) {\n * const cursor = parseNextUrl(page.value.nextUrl)\n * // Resume later:\n * const next = await client.users.bookmarks.illusts({\n * userId: client.userId,\n * maxBookmarkId: cursor.maxBookmarkId,\n * })\n * }\n * ```\n *\n * @param url - The `next_url` string returned by a pixiv list endpoint\n * @returns Typed cursor parameters; fields absent in the URL are `undefined`\n */\nexport function parseNextUrl(url: string): ParsedNextUrl {\n const usp = new URL(url).searchParams\n const result: ParsedNextUrl = {}\n\n const toNum = (key: string): number | undefined => {\n const v = usp.get(key)\n if (v === null || v === '') return undefined\n const n = Number(v)\n return Number.isNaN(n) ? undefined : n\n }\n\n const maxBookmarkId = toNum('max_bookmark_id')\n if (maxBookmarkId !== undefined) result.maxBookmarkId = maxBookmarkId\n\n const maxBookmarkIdForRecommend = toNum('max_bookmark_id_for_recommend')\n if (maxBookmarkIdForRecommend !== undefined)\n result.maxBookmarkIdForRecommend = maxBookmarkIdForRecommend\n\n const minBookmarkIdForRecentIllust = toNum('min_bookmark_id_for_recent_illust')\n if (minBookmarkIdForRecentIllust !== undefined)\n result.minBookmarkIdForRecentIllust = minBookmarkIdForRecentIllust\n\n const offset = toNum('offset')\n if (offset !== undefined) result.offset = offset\n\n const lastOrder = toNum('last_order')\n if (lastOrder !== undefined) result.lastOrder = lastOrder\n\n return result\n}\n","/**\n * Public option constants for @book000/pixivts.\n *\n * Each option is exported as a runtime `const` object for enum-like access\n * (e.g. `BookmarkRestrict.PUBLIC`). Plain string literals are also accepted\n * wherever these values are used as parameters.\n *\n * @example\n * ```ts\n * // Enum-like usage\n * await client.illusts.bookmarkAdd({ illustId: 123, restrict: BookmarkRestrict.PUBLIC })\n *\n * // Plain string literal — also valid\n * await client.illusts.bookmarkAdd({ illustId: 123, restrict: 'public' })\n * ```\n */\n\n/**\n * Search match target for illust / novel searches.\n *\n * - `partial_match_for_tags` — tags contain the word (default)\n * - `exact_match_for_tags` — tags exactly equal the word\n * - `title_and_caption` — title or caption contains the word\n * - `keyword` — general keyword search (novel only)\n */\nexport const SearchTarget = {\n PARTIAL_MATCH_FOR_TAGS: 'partial_match_for_tags',\n EXACT_MATCH_FOR_TAGS: 'exact_match_for_tags',\n TITLE_AND_CAPTION: 'title_and_caption',\n KEYWORD: 'keyword',\n} as const\n\n/**\n * Sort order for search results.\n *\n * - `date_desc` — newest first (default)\n * - `date_asc` — oldest first\n * - `popular_desc` — most bookmarks first (premium only)\n */\nexport const SearchSort = {\n DATE_DESC: 'date_desc',\n DATE_ASC: 'date_asc',\n POPULAR_DESC: 'popular_desc',\n} as const\n\n/**\n * Date range filter for search results.\n *\n * - `within_last_day` — past 24 hours\n * - `within_last_week` — past 7 days\n * - `within_last_month` — past 30 days\n */\nexport const SearchDuration = {\n WITHIN_LAST_DAY: 'within_last_day',\n WITHIN_LAST_WEEK: 'within_last_week',\n WITHIN_LAST_MONTH: 'within_last_month',\n} as const\n\n/**\n * Ranking mode for illust rankings.\n *\n * R-18 modes require a premium account with R-18 content enabled.\n */\nexport const RankingMode = {\n DAY: 'day',\n DAY_MALE: 'day_male',\n DAY_FEMALE: 'day_female',\n WEEK_ORIGINAL: 'week_original',\n WEEK_ROOKIE: 'week_rookie',\n WEEK: 'week',\n MONTH: 'month',\n DAY_AI: 'day_ai',\n DAY_R18: 'day_r18',\n WEEK_R18: 'week_r18',\n DAY_MALE_R18: 'day_male_r18',\n DAY_FEMALE_R18: 'day_female_r18',\n DAY_R18_AI: 'day_r18_ai',\n} as const\n\n/**\n * Ranking mode for novel rankings.\n *\n * R-18 modes require a premium account with R-18 content enabled.\n */\nexport const NovelRankingMode = {\n DAY: 'day',\n WEEK: 'week',\n DAY_MALE: 'day_male',\n DAY_FEMALE: 'day_female',\n WEEK_ROOKIE: 'week_rookie',\n DAY_R18: 'day_r18',\n WEEK_R18: 'week_r18',\n DAY_R18_AI: 'day_r18_ai',\n} as const\n\n/**\n * Visibility restriction for bookmarks.\n *\n * - `public` — publicly visible (default)\n * - `private` — visible only to the owner\n */\nexport const BookmarkRestrict = {\n PUBLIC: 'public',\n PRIVATE: 'private',\n} as const\n\n/**\n * Visibility restriction for follows.\n *\n * - `public` — publicly visible (default)\n * - `private` — visible only to the owner\n */\nexport const FollowRestrict = {\n PUBLIC: 'public',\n PRIVATE: 'private',\n} as const\n\n/**\n * OS filter used to request works compatible with the given platform.\n *\n * - `for_ios` — iOS-compatible works (default)\n * - `for_android` — Android-compatible works\n */\nexport const OSFilter = {\n FOR_IOS: 'for_ios',\n FOR_ANDROID: 'for_android',\n} as const\n\n/**\n * Work type filter for user illust listings.\n *\n * - `illust` — illustrations only\n * - `manga` — manga only\n */\nexport const UserIllustType = {\n ILLUST: 'illust',\n MANGA: 'manga',\n} as const\n","/**\n * Authentication manager for the pixiv API.\n *\n * Handles the OAuth 2.0 token refresh flow and generates the\n * x-client-hash header required by the pixiv iOS app API.\n *\n * The MD5 implementation is pure TypeScript to ensure Edge/browser compatibility —\n * Node's `crypto.createHash('md5')` is unavailable in Edge runtimes, and\n * `crypto.subtle` does not support MD5 (non-cryptographic hash).\n */\n\n/** Auth credentials returned by the pixiv token endpoint. */\nexport interface AuthCredentials {\n /** Numeric user ID returned as a string by the token endpoint. */\n userId: string\n /** Short-lived bearer token for API requests. */\n accessToken: string\n /** Long-lived token used to obtain new access tokens. */\n refreshToken: string\n}\n\n// ---------------------------------------------------------------------------\n// Pure-TS MD5 for x-client-hash\n// ---------------------------------------------------------------------------\n\n// Per-round constants derived from sin (Table T in RFC 1321)\nconst T: number[] = Array.from({ length: 64 }, (_, i) =>\n Math.floor(Math.abs(Math.sin(i + 1)) * 2 ** 32)\n)\n\n// Shift amounts per round\nconst S = [\n 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5,\n 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11,\n 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10,\n 15, 21,\n]\n\nfunction md5Bytes(bytes: number[]): string {\n const len = bytes.length\n // Append bit 1 (0x80 byte)\n bytes.push(0x80)\n // Pad to 56 mod 64 bytes\n while (bytes.length % 64 !== 56) bytes.push(0)\n // Append original length in bits as little-endian 64-bit\n const bitLen = len * 8\n for (let i = 0; i < 8; i++) {\n bytes.push(i < 4 ? (bitLen >>> (i * 8)) & 0xff : 0)\n }\n\n // Initial hash state\n let a = 0x67_45_23_01\n let b = 0xef_cd_ab_89\n let c = 0x98_ba_dc_fe\n let d = 0x10_32_54_76\n\n // Process each 64-byte chunk\n for (let chunk = 0; chunk < bytes.length; chunk += 64) {\n // Read chunk as 16 little-endian 32-bit words\n const M: number[] = []\n for (let w = 0; w < 16; w++) {\n const off = chunk + w * 4\n M.push(\n bytes[off] |\n (bytes[off + 1] << 8) |\n (bytes[off + 2] << 16) |\n (bytes[off + 3] << 24)\n )\n }\n\n let aa = a\n let bb = b\n let cc = c\n let dd = d\n\n for (let i = 0; i < 64; i++) {\n let f: number\n let g: number\n if (i < 16) {\n f = (bb & cc) | (~bb & dd)\n g = i\n } else if (i < 32) {\n f = (dd & bb) | (~dd & cc)\n g = (5 * i + 1) % 16\n } else if (i < 48) {\n f = bb ^ cc ^ dd\n g = (3 * i + 5) % 16\n } else {\n f = cc ^ (bb | ~dd)\n g = (7 * i) % 16\n }\n\n const tmp = dd\n dd = cc\n cc = bb\n const sum = Math.trunc(aa + f + M[g] + T[i])\n const rotated = (sum << S[i]) | (sum >>> (32 - S[i]))\n bb = Math.trunc(bb + rotated)\n aa = tmp\n }\n\n a = Math.trunc(a + aa)\n b = Math.trunc(b + bb)\n c = Math.trunc(c + cc)\n d = Math.trunc(d + dd)\n }\n\n // Convert the state to a hex string (little-endian)\n return [a, b, c, d]\n .map((n) =>\n [n & 0xff, (n >>> 8) & 0xff, (n >>> 16) & 0xff, (n >>> 24) & 0xff]\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')\n )\n .join('')\n}\n\n/**\n * Produces a hex-encoded MD5 digest of `input`.\n *\n * This is a minimal, spec-compliant implementation (RFC 1321) that avoids\n * any runtime platform dependency.\n *\n * @param input - UTF-8 string to hash\n * @returns Lowercase hex-encoded MD5 digest\n */\nexport function md5(input: string): string {\n // Encode the input string as a sequence of bytes (UTF-8)\n const bytes: number[] = []\n for (let i = 0; i < input.length; i++) {\n const code = input.codePointAt(i) ?? 0\n if (code < 0x80) {\n bytes.push(code)\n } else if (code < 0x8_00) {\n bytes.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f))\n } else {\n bytes.push(\n 0xe0 | (code >> 12),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f)\n )\n }\n }\n\n return md5Bytes(bytes)\n}\n\n\n// ---------------------------------------------------------------------------\n// AuthManager\n// ---------------------------------------------------------------------------\n\nconst CLIENT_ID = 'MOBrBDS8blbauoSck0ZfDbtuzpyT'\nconst CLIENT_SECRET = 'lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj'\nconst HASH_SECRET =\n '28c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c'\nconst AUTH_URL = 'https://oauth.secure.pixiv.net/auth/token'\n\n/** Builds the x-client-hash header value for a given UTC timestamp string. */\nexport function buildClientHash(localTime: string): string {\n return md5(localTime + HASH_SECRET)\n}\n\n/**\n * Manages access tokens for the pixiv API.\n *\n * Holds the current access token and refresh token in memory.\n * The refresh() method exchanges the refresh token for a new access token\n * via the pixiv OAuth endpoint.\n */\nexport class AuthManager {\n #accessToken: string\n #refreshToken: string\n userId: string\n\n constructor(credentials: AuthCredentials) {\n this.#accessToken = credentials.accessToken\n this.#refreshToken = credentials.refreshToken\n this.userId = credentials.userId\n }\n\n /** Returns the current access token. */\n get accessToken(): string {\n return this.#accessToken\n }\n\n /** Returns the current refresh token. */\n get refreshToken(): string {\n return this.#refreshToken\n }\n\n /**\n * Exchanges the stored refresh token for a fresh access token.\n *\n * Updates the internal credentials on success.\n * Throws if the token endpoint returns a non-200 response.\n */\n async refresh(): Promise<void> {\n const localTime = new Date().toISOString().replace(/Z$/, '+00:00')\n\n const headers: Record<string, string> = {\n 'x-client-time': localTime,\n 'x-client-hash': buildClientHash(localTime),\n 'app-os': 'ios',\n 'app-os-version': '16.4.1',\n 'user-agent': 'PixivIOSApp/7.16.9 (iOS 16.4.1; iPad13,4)',\n 'Content-Type': 'application/x-www-form-urlencoded',\n }\n\n const body = new URLSearchParams({\n client_id: CLIENT_ID,\n client_secret: CLIENT_SECRET,\n get_secure_url: '1',\n grant_type: 'refresh_token',\n refresh_token: this.#refreshToken,\n }).toString()\n\n const response = await fetch(AUTH_URL, {\n method: 'POST',\n headers,\n body,\n })\n\n if (response.status !== 200) {\n throw new Error(\n `Failed to refresh pixiv token: HTTP ${response.status}`\n )\n }\n\n const data = (await response.json()) as {\n user: { id: string }\n response: { access_token: string; refresh_token: string }\n }\n\n this.#accessToken = data.response.access_token\n this.#refreshToken = data.response.refresh_token\n this.userId = data.user.id\n }\n\n /**\n * Creates an `AuthManager` by performing the initial token refresh.\n *\n * @param refreshToken - Pixiv refresh token\n * @returns Initialized `AuthManager`\n */\n static async login(refreshToken: string): Promise<AuthManager> {\n const manager = new AuthManager({\n userId: '',\n accessToken: '',\n refreshToken,\n })\n await manager.refresh()\n return manager\n }\n}\n","/**\n * HTTP client for the pixiv API.\n *\n * Wraps the global `fetch` API and adds:\n * - 429 retry with Retry-After header parsing\n * - 401 → token refresh → single retry\n * - Response interceptor hook (for optional DB recording)\n * - Image fetch helper (browser UA, Referer, no auth)\n */\n\nimport type { AuthManager } from './auth'\nimport { apiError, authFailedError, networkError, rateLimitError } from './errors'\nimport type { ResponseInterceptor } from './interceptor'\nimport { type HttpMethod, type ResponseRecord } from './interceptor'\nimport { camelizeKeys } from './params'\nimport { err, ok, ResultAsync } from './result'\nimport type { PixivError } from './errors'\nimport type { Result } from './result'\n\n/** Options for controlling retry behaviour on rate-limited requests. */\nexport interface RateLimitRetryOptions {\n /** Maximum number of retries when a 429 response is received. Defaults to 3. */\n maxRetries: number\n /** Default wait time (ms) used when no Retry-After header is present. Defaults to 10_000. */\n waitMs: number\n}\n\n/** Raw response data returned by the HTTP client. */\nexport interface HttpResponse<T> {\n /** Parsed response body. */\n data: T\n /** HTTP response status code. */\n status: number\n /** Response headers. */\n headers: Record<string, string>\n /** Request headers that were sent. */\n requestHeaders: Record<string, string>\n /** URL-encoded request body (null for GET requests). */\n requestBody: string | null\n /** Final URL after any redirects (may be undefined if unavailable). */\n responseUrl: string | undefined\n /** API endpoint path (e.g. `/v1/illust/detail`). */\n endpoint: string\n}\n\nconst DEFAULT_RETRY: RateLimitRetryOptions = { maxRetries: 3, waitMs: 10_000 }\n\nconst BASE_URL = 'https://app-api.pixiv.net'\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n Host: 'app-api.pixiv.net',\n 'App-OS': 'ios',\n 'App-OS-Version': '14.6',\n 'User-Agent': 'PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)',\n 'Accept-Language': 'ja',\n}\n\n/**\n * Parses the `Retry-After` header value into milliseconds.\n *\n * Supports delay-seconds format and HTTP-date format.\n * Falls back to `defaultMs` if the header is absent or unparseable.\n *\n * @param retryAfter - Header value (null if not present)\n * @param defaultMs - Fallback wait time in milliseconds\n * @returns Wait time in milliseconds (clamped to ≥ 0)\n */\nexport function parseRetryAfter(\n retryAfter: string | null,\n defaultMs: number\n): number {\n if (!retryAfter) return defaultMs\n\n // delay-seconds format\n if (/^\\d+$/.test(retryAfter.trim())) {\n return Number.parseInt(retryAfter, 10) * 1000\n }\n\n // HTTP-date format (e.g. \"Wed, 21 Oct 2026 07:28:00 GMT\")\n const retryDate = Date.parse(retryAfter)\n if (!Number.isNaN(retryDate)) {\n return Math.max(0, retryDate - Date.now())\n }\n\n return defaultMs\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of headers) {\n result[key] = value\n }\n return result\n}\n\n/**\n * HTTP client for the pixiv API.\n *\n * All methods return `ResultAsync<T, PixivError>` — no throws.\n * A 429 → retry loop and a 401 → refresh → retry are handled internally.\n */\nexport class HttpClient {\n readonly #auth: AuthManager\n readonly #retry: RateLimitRetryOptions\n readonly #interceptor: ResponseInterceptor | undefined\n\n constructor(\n auth: AuthManager,\n options?: {\n retry?: Partial<RateLimitRetryOptions>\n onResponse?: ResponseInterceptor\n }\n ) {\n this.#auth = auth\n this.#retry = {\n maxRetries: options?.retry?.maxRetries ?? DEFAULT_RETRY.maxRetries,\n waitMs: options?.retry?.waitMs ?? DEFAULT_RETRY.waitMs,\n }\n this.#interceptor = options?.onResponse\n }\n\n /**\n * Sends a GET request to the pixiv API.\n *\n * @param path - API endpoint path (e.g. \"/v1/illust/detail\")\n * @param params - Query parameters as a URLSearchParams instance\n * @returns `ResultAsync<T, PixivError>`\n */\n get<T>(path: string, params?: URLSearchParams): ResultAsync<T, PixivError> {\n const qs = params ? `?${params.toString()}` : ''\n const url = `${BASE_URL}${path}${qs}`\n return this.#send<T>(url, 'GET', path, undefined)\n }\n\n /**\n * Sends a POST request to the pixiv API.\n *\n * @param path - API endpoint path (e.g. \"/v2/illust/bookmark/add\")\n * @param body - URL-encoded request body string\n * @returns `ResultAsync<T, PixivError>`\n */\n post<T>(path: string, body: string): ResultAsync<T, PixivError> {\n const url = `${BASE_URL}${path}`\n return this.#send<T>(url, 'POST', path, body)\n }\n\n /**\n * Fetches a pixiv image URL without an Authorization header.\n *\n * Uses a browser User-Agent and the pixiv Referer, which are required for\n * image CDN access. Retry and interceptor are not applied here.\n *\n * @param imageUrl - Full image URL\n * @returns `ResultAsync<Response, PixivError>`\n */\n fetchImage(imageUrl: string): ResultAsync<Response, PixivError> {\n return ResultAsync.fromPromise(\n fetch(imageUrl, {\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',\n Referer: 'https://www.pixiv.net/',\n },\n }),\n networkError\n ).andThen((response) => {\n if (!response.ok) {\n return ResultAsync.fromResult(\n err(apiError(response.status, null))\n )\n }\n return ResultAsync.fromResult(ok(response) as Result<Response, PixivError>)\n })\n }\n\n /**\n * Sends a request to an absolute URL returned in a `next_url` field.\n *\n * Applies the same retry / interceptor / auth logic as `get()`.\n *\n * @param absoluteUrl - Full URL including query string\n * @returns `ResultAsync<T, PixivError>`\n */\n getAbsolute<T>(absoluteUrl: string): ResultAsync<T, PixivError> {\n // Extract the endpoint path for the interceptor record\n let endpoint: string\n try {\n endpoint = new URL(absoluteUrl).pathname\n } catch {\n endpoint = absoluteUrl\n }\n return this.#send<T>(absoluteUrl, 'GET', endpoint, undefined)\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n #send<T>(\n url: string,\n method: HttpMethod,\n endpoint: string,\n body: string | undefined\n ): ResultAsync<T, PixivError> {\n return new ResultAsync(this.#sendWithRetry(url, method, endpoint, body))\n }\n\n async #sendWithRetry<T>(\n url: string,\n method: HttpMethod,\n endpoint: string,\n body: string | undefined,\n allowRefresh = true\n ): Promise<Result<T, PixivError>> {\n const maxRetries = Math.max(0, this.#retry.maxRetries)\n const waitMs = Math.max(0, this.#retry.waitMs)\n\n let lastRetryAfterMs = 0\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const requestHeaders: Record<string, string> = {\n ...DEFAULT_HEADERS,\n Authorization: `Bearer ${this.#auth.accessToken}`,\n ...(method === 'POST'\n ? { 'Content-Type': 'application/x-www-form-urlencoded' }\n : {}),\n }\n\n let response: Response\n try {\n response = await fetch(url, {\n method,\n headers: requestHeaders,\n body: method === 'POST' ? body : undefined,\n })\n } catch (fetchError: unknown) {\n return err(networkError(fetchError))\n }\n\n // 429 Rate limit\n if (response.status === 429) {\n await response.body?.cancel()\n const retryAfterMs = parseRetryAfter(\n response.headers.get('Retry-After'),\n waitMs\n )\n lastRetryAfterMs = retryAfterMs\n\n if (attempt < maxRetries) {\n await new Promise((resolve) => setTimeout(resolve, retryAfterMs))\n continue\n }\n\n return err(rateLimitError(lastRetryAfterMs))\n }\n\n // 401 Auth failed → try token refresh once\n if (response.status === 401) {\n await response.body?.cancel()\n if (allowRefresh) {\n try {\n await this.#auth.refresh()\n } catch {\n return err(authFailedError(401))\n }\n // Retry once with the new token (no further refresh allowed)\n return this.#sendWithRetry<T>(url, method, endpoint, body, false)\n }\n return err(authFailedError(401))\n }\n\n // Parse response body\n const contentType = response.headers.get('content-type') ?? ''\n const text = await response.text()\n let data: T\n const isJson = contentType.includes('application/json')\n if (isJson) {\n try {\n data = camelizeKeys(JSON.parse(text)) as T\n } catch {\n data = text as unknown as T\n }\n } else {\n data = text as unknown as T\n }\n\n const responseHeaders = headersToRecord(response.headers)\n\n // Non-2xx errors\n if (!response.ok) {\n return err(apiError(response.status, data))\n }\n\n const httpResponse: HttpResponse<T> = {\n data,\n status: response.status,\n headers: responseHeaders,\n requestHeaders,\n requestBody: body ?? null,\n responseUrl: response.url || undefined,\n endpoint,\n }\n\n // Notify interceptor (fire-and-forget, errors do not fail the request)\n if (this.#interceptor) {\n const record: ResponseRecord = {\n method,\n endpoint,\n url: response.url || url,\n requestHeaders: JSON.stringify(requestHeaders),\n requestBody: body ?? null,\n responseType: isJson ? 'JSON' : 'TEXT',\n statusCode: response.status,\n responseHeaders: JSON.stringify(responseHeaders),\n responseBody: text,\n }\n Promise.resolve(this.#interceptor(record)).catch(() => undefined)\n }\n\n return ok(httpResponse.data)\n }\n\n return err(rateLimitError(lastRetryAfterMs))\n }\n}\n","/**\n * IllustResource — methods for the illust API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport type { ResultAsync } from '../result'\nimport {\n BookmarkRestrict,\n OSFilter,\n RankingMode,\n SearchDuration,\n SearchSort,\n SearchTarget,\n} from '../options'\nimport type {\n IllustDetailResponse,\n IllustListPage,\n IllustRecommendedPage,\n IllustSeriesPage,\n} from '../types'\n\n// === Request param types ===\n\n/** Parameters for fetching a single illust by ID. */\nexport interface IllustDetailParams {\n /** ID of the illust to fetch. */\n illustId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for fetching related illusts. */\nexport interface IllustRelatedParams {\n /** ID of the illust for which to fetch related works. */\n illustId: number\n /** Additional seed illust IDs to influence recommendations. */\n seedIllustIds?: number[]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for searching illusts. */\nexport interface IllustSearchParams {\n /** Search keyword. */\n word: string\n /** How to match the keyword against works (default: `\"partial_match_for_tags\"`). */\n searchTarget?: (typeof SearchTarget)[keyof typeof SearchTarget]\n /** Sort order for results (default: `\"date_desc\"`). */\n sort?: (typeof SearchSort)[keyof typeof SearchSort]\n /** Date range preset filter (omit for no restriction). */\n duration?: (typeof SearchDuration)[keyof typeof SearchDuration]\n /** Start date for a custom date range (YYYY-MM-DD; requires `endDate`). */\n startDate?: string\n /** End date for a custom date range (YYYY-MM-DD; requires `startDate`). */\n endDate?: string\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** AI-generated content filter: `0` = hide AI works, `1` = show only AI works. */\n searchAiType?: 0 | 1\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching the illust ranking. */\nexport interface IllustRankingParams {\n /** Ranking category (default: `\"day\"`). */\n mode?: (typeof RankingMode)[keyof typeof RankingMode]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Specific date to fetch rankings for (YYYY-MM-DD; omit for the latest). */\n date?: string\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching recommended illusts. */\nexport interface IllustRecommendedParams {\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n /**\n * Cursor for resuming pagination: the `maxBookmarkIdForRecommend` value\n * extracted from a previous page's `next_url` via {@link parseNextUrl}.\n */\n maxBookmarkIdForRecommend?: number\n /**\n * Secondary cursor for resuming pagination: the `minBookmarkIdForRecentIllust`\n * value extracted from a previous page's `next_url` via {@link parseNextUrl}.\n */\n minBookmarkIdForRecentIllust?: number\n}\n\n/** Parameters for fetching an illust series. */\nexport interface IllustSeriesParams {\n /** ID of the illust series to fetch. */\n illustSeriesId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for adding an illust bookmark. */\nexport interface IllustBookmarkAddParams {\n /** ID of the illust to bookmark. */\n illustId: number\n /** Bookmark visibility (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** Tags to attach to the bookmark. */\n tags?: string[]\n}\n\n/** Parameters for removing an illust bookmark. */\nexport interface IllustBookmarkDeleteParams {\n /** ID of the illust to remove from bookmarks. */\n illustId: number\n}\n\n/** Methods for the illust API namespace. */\nexport class IllustResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a single illust by ID.\n * GET /v1/illust/detail\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * const result = await client.illusts.detail({ illustId: 12345 })\n * if (result.isOk) {\n * console.log(result.value.illust.title)\n * } else {\n * console.error(result.error)\n * }\n * ```\n */\n detail(\n params: IllustDetailParams\n ): ResultAsync<IllustDetailResponse, PixivError> {\n return this.#http.get<IllustDetailResponse>(\n '/v1/illust/detail',\n buildParams({ illustId: params.illustId, filter: params.filter ?? 'for_ios' })\n )\n }\n\n /**\n * Fetches related illusts for a given illust.\n * GET /v2/illust/related\n *\n * @param params - Request parameters\n */\n related(\n params: IllustRelatedParams\n ): PaginatedResultAsync<IllustListPage, IllustListPage['illusts'][number]> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustListPage>(\n '/v2/illust/related',\n buildParams({\n illustId: params.illustId,\n filter: params.filter ?? 'for_ios',\n ...(params.seedIllustIds\n ? { seedIllustIds: params.seedIllustIds }\n : {}),\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Searches for illusts.\n * GET /v1/search/illust\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all results across pages\n * for await (const illust of client.illusts.search({ word: 'cat' }).items()) {\n * console.log(illust.title)\n * }\n *\n * // Fetch only the first page\n * const page = await client.illusts.search({ word: 'cat' })\n * if (page.isOk) {\n * console.log(page.value.illusts.length)\n * }\n * ```\n */\n search(\n params: IllustSearchParams\n ): PaginatedResultAsync<IllustListPage, IllustListPage['illusts'][number]> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustListPage>(\n '/v1/search/illust',\n buildParams({\n word: params.word,\n searchTarget: params.searchTarget ?? 'partial_match_for_tags',\n sort: params.sort ?? 'date_desc',\n filter: params.filter ?? 'for_ios',\n duration: params.duration,\n startDate: params.startDate,\n endDate: params.endDate,\n searchAiType: params.searchAiType,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches the illust ranking.\n * GET /v1/illust/ranking\n *\n * @param params - Request parameters\n */\n ranking(\n params: IllustRankingParams = {}\n ): PaginatedResultAsync<IllustListPage, IllustListPage['illusts'][number]> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustListPage>(\n '/v1/illust/ranking',\n buildParams({\n mode: params.mode ?? 'day',\n filter: params.filter ?? 'for_ios',\n date: params.date,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches recommended illusts.\n * GET /v1/illust/recommended\n *\n * @param params - Request parameters\n */\n recommended(\n params: IllustRecommendedParams = {}\n ): PaginatedResultAsync<\n IllustRecommendedPage,\n IllustRecommendedPage['illusts'][number]\n > {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustRecommendedPage>(\n '/v1/illust/recommended',\n buildParams({\n filter: params.filter ?? 'for_ios',\n includeRankingLabel: true,\n includeRankingIllusts: true,\n includePrivacyPolicy: true,\n offset: params.offset,\n maxBookmarkIdForRecommend: params.maxBookmarkIdForRecommend,\n minBookmarkIdForRecentIllust: params.minBookmarkIdForRecentIllust,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches an illust series.\n * GET /v1/illust/series\n *\n * @param params - Request parameters\n */\n series(\n params: IllustSeriesParams\n ): PaginatedResultAsync<\n IllustSeriesPage,\n IllustSeriesPage['illusts'][number]\n > {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustSeriesPage>(\n '/v1/illust/series',\n buildParams({\n illustSeriesId: params.illustSeriesId,\n filter: params.filter ?? 'for_ios',\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Adds an illust bookmark.\n * POST /v2/illust/bookmark/add\n *\n * @param params - Request parameters\n */\n bookmarkAdd(\n params: IllustBookmarkAddParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({\n illustId: params.illustId,\n restrict: params.restrict ?? 'public',\n ...(params.tags ? { tags: params.tags } : {}),\n })\n return this.#http.post<Record<string, never>>(\n '/v2/illust/bookmark/add',\n body.toString()\n )\n }\n\n /**\n * Removes an illust bookmark.\n * POST /v1/illust/bookmark/delete\n *\n * @param params - Request parameters\n */\n bookmarkDelete(\n params: IllustBookmarkDeleteParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({ illustId: String(params.illustId) })\n return this.#http.post<Record<string, never>>(\n '/v1/illust/bookmark/delete',\n body.toString()\n )\n }\n}\n","/**\n * NovelResource — methods for the novel API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport type { ResultAsync } from '../result'\nimport {\n BookmarkRestrict,\n NovelRankingMode,\n OSFilter,\n SearchDuration,\n SearchSort,\n SearchTarget,\n} from '../options'\nimport type {\n NovelDetailResponse,\n NovelListPage,\n NovelRecommendedPage,\n NovelSeriesPage,\n PixivNovelItem,\n} from '../types'\n\n// === Request param types ===\n\n/** Parameters for fetching a single novel by ID. */\nexport interface NovelDetailParams {\n /** ID of the novel to fetch. */\n novelId: number\n}\n\n/** Parameters for fetching the WebView HTML of a novel. */\nexport interface NovelTextParams {\n /** ID of the novel whose WebView HTML to fetch. */\n novelId: number\n}\n\n/** Parameters for fetching related novels. */\nexport interface NovelRelatedParams {\n /** ID of the novel for which to fetch related works. */\n novelId: number\n}\n\n/** Parameters for searching novels. */\nexport interface NovelSearchParams {\n /** Search keyword. */\n word: string\n /** How to match the keyword against works (default: `\"partial_match_for_tags\"`). */\n searchTarget?: (typeof SearchTarget)[keyof typeof SearchTarget]\n /** Sort order for results (default: `\"date_desc\"`). */\n sort?: (typeof SearchSort)[keyof typeof SearchSort]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Date range preset filter (omit for no restriction). */\n duration?: (typeof SearchDuration)[keyof typeof SearchDuration]\n /** Start date for a custom date range (YYYY-MM-DD; requires `endDate`). */\n startDate?: string\n /** End date for a custom date range (YYYY-MM-DD; requires `startDate`). */\n endDate?: string\n /** AI-generated content filter: `0` = hide AI works, `1` = show only AI works. */\n searchAiType?: 0 | 1\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching the novel ranking. */\nexport interface NovelRankingParams {\n /** Ranking category (default: `\"day\"`). */\n mode?: (typeof NovelRankingMode)[keyof typeof NovelRankingMode]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Specific date to fetch rankings for (YYYY-MM-DD; omit for the latest). */\n date?: string\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching recommended novels. */\nexport interface NovelRecommendedParams {\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n /**\n * Cursor for resuming pagination: the `maxBookmarkIdForRecommend` value\n * extracted from a previous page's `next_url` via {@link parseNextUrl}.\n */\n maxBookmarkIdForRecommend?: number\n}\n\n/** Parameters for fetching a novel series. */\nexport interface NovelSeriesParams {\n /** ID of the novel series to fetch. */\n seriesId: number\n /** Order of the last novel already seen; used for cursor-based pagination. */\n lastOrder?: number\n}\n\n/** Parameters for adding a novel bookmark. */\nexport interface NovelBookmarkAddParams {\n /** ID of the novel to bookmark. */\n novelId: number\n /** Bookmark visibility (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** Tags to attach to the bookmark. */\n tags?: string[]\n}\n\n/** Parameters for removing a novel bookmark. */\nexport interface NovelBookmarkDeleteParams {\n /** ID of the novel to remove from bookmarks. */\n novelId: number\n}\n\n/** Methods for the novel API namespace. */\nexport class NovelResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a single novel by ID.\n * GET /v2/novel/detail\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * const result = await client.novels.detail({ novelId: 67890 })\n * if (result.isOk) {\n * console.log(result.value.novel.title)\n * } else {\n * console.error(result.error)\n * }\n * ```\n */\n detail(\n params: NovelDetailParams\n ): ResultAsync<NovelDetailResponse, PixivError> {\n return this.#http.get<NovelDetailResponse>(\n '/v2/novel/detail',\n buildParams({ novelId: params.novelId })\n )\n }\n\n /**\n * Fetches the WebView HTML for a novel.\n * GET /webview/v2/novel\n *\n * Returns the raw HTML page that the pixiv app renders in a WebView.\n * To extract the plain text, parse the returned HTML (e.g. strip tags).\n *\n * @param params - Request parameters\n */\n text(params: NovelTextParams): ResultAsync<string, PixivError> {\n return this.#http.get<string>(\n '/webview/v2/novel',\n // The webview endpoint uses the query parameter 'id', not 'novel_id'\n buildParams({ id: params.novelId })\n )\n }\n\n /**\n * Fetches related novels for a given novel.\n * GET /v1/novel/related\n *\n * @param params - Request parameters\n */\n related(\n params: NovelRelatedParams\n ): PaginatedResultAsync<NovelListPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelListPage>(\n '/v1/novel/related',\n buildParams({ novelId: params.novelId })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Searches for novels.\n * GET /v1/search/novel\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all results across pages\n * for await (const novel of client.novels.search({ word: 'fantasy' }).items()) {\n * console.log(novel.title)\n * }\n *\n * // Fetch only the first page\n * const page = await client.novels.search({ word: 'fantasy' })\n * if (page.isOk) {\n * console.log(page.value.novels.length)\n * }\n * ```\n */\n search(\n params: NovelSearchParams\n ): PaginatedResultAsync<NovelListPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelListPage>(\n '/v1/search/novel',\n buildParams({\n word: params.word,\n searchTarget: params.searchTarget ?? 'partial_match_for_tags',\n sort: params.sort ?? 'date_desc',\n filter: params.filter ?? 'for_ios',\n duration: params.duration,\n startDate: params.startDate,\n endDate: params.endDate,\n searchAiType: params.searchAiType,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches the novel ranking.\n * GET /v1/novel/ranking\n *\n * @param params - Request parameters\n */\n ranking(\n params: NovelRankingParams = {}\n ): PaginatedResultAsync<NovelListPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelListPage>(\n '/v1/novel/ranking',\n buildParams({\n mode: params.mode ?? 'day',\n filter: params.filter ?? 'for_ios',\n date: params.date,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches recommended novels.\n * GET /v1/novel/recommended\n *\n * @param params - Request parameters\n */\n recommended(\n params: NovelRecommendedParams = {}\n ): PaginatedResultAsync<NovelRecommendedPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelRecommendedPage>(\n '/v1/novel/recommended',\n buildParams({\n filter: params.filter ?? 'for_ios',\n includeRankingNovels: true,\n includePrivacyPolicy: true,\n offset: params.offset,\n maxBookmarkIdForRecommend: params.maxBookmarkIdForRecommend,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches a novel series.\n * GET /v2/novel/series\n *\n * @param params - Request parameters\n */\n series(\n params: NovelSeriesParams\n ): PaginatedResultAsync<NovelSeriesPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelSeriesPage>(\n '/v2/novel/series',\n buildParams({ seriesId: params.seriesId, lastOrder: params.lastOrder })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Adds a novel bookmark.\n * POST /v2/novel/bookmark/add\n *\n * @param params - Request parameters\n */\n bookmarkAdd(\n params: NovelBookmarkAddParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({\n novelId: params.novelId,\n restrict: params.restrict ?? 'public',\n ...(params.tags ? { tags: params.tags } : {}),\n })\n return this.#http.post<Record<string, never>>(\n '/v2/novel/bookmark/add',\n body.toString()\n )\n }\n\n /**\n * Removes a novel bookmark.\n * POST /v1/novel/bookmark/delete\n *\n * @param params - Request parameters\n */\n bookmarkDelete(\n params: NovelBookmarkDeleteParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({ novelId: String(params.novelId) })\n return this.#http.post<Record<string, never>>(\n '/v1/novel/bookmark/delete',\n body.toString()\n )\n }\n}\n","/**\n * UserResource — methods for the user API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport type { ResultAsync } from '../result'\nimport {\n BookmarkRestrict,\n FollowRestrict,\n OSFilter,\n UserIllustType,\n} from '../options'\nimport type {\n PixivIllustItem,\n PixivNovelItem,\n PixivUserPreviewItem,\n UserBookmarksIllustPage,\n UserBookmarksNovelPage,\n UserDetailResponse,\n UserFollowingPage,\n UserIllustsPage,\n UserNovelsPage,\n} from '../types'\n\n// === Request param types ===\n\n/** Parameters for fetching a user's bookmarked illusts. */\nexport interface UserBookmarksIllustParams {\n /** ID of the user whose bookmarks to fetch. */\n userId: number\n /** Visibility of the bookmarks to return (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Limit results to bookmarks with this tag. */\n tag?: string\n /** Fetch bookmarks older than this bookmark ID (cursor-based pagination). */\n maxBookmarkId?: number\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's bookmarked novels. */\nexport interface UserBookmarksNovelParams {\n /** ID of the user whose bookmarks to fetch. */\n userId: number\n /** Visibility of the bookmarks to return (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Limit results to bookmarks with this tag. */\n tag?: string\n /** Fetch bookmarks older than this bookmark ID (cursor-based pagination). */\n maxBookmarkId?: number\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's detail. */\nexport interface UserDetailParams {\n /** ID of the user to fetch. */\n userId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for fetching a user's illusts. */\nexport interface UserIllustsParams {\n /** ID of the user whose illusts to fetch. */\n userId: number\n /** Work type to filter by (omit to return both illusts and manga). */\n type?: (typeof UserIllustType)[keyof typeof UserIllustType]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's novels. */\nexport interface UserNovelsParams {\n /** ID of the user whose novels to fetch. */\n userId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's following list. */\nexport interface UserFollowingParams {\n /** ID of the user whose following list to fetch. */\n userId: number\n /** Visibility of the follows to return (default: `\"public\"`). */\n restrict?: (typeof FollowRestrict)[keyof typeof FollowRestrict]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for following a user. */\nexport interface UserFollowAddParams {\n /** ID of the user to follow. */\n userId: number\n /** Visibility of the follow (default: `\"public\"`). */\n restrict?: (typeof FollowRestrict)[keyof typeof FollowRestrict]\n}\n\n/** Parameters for unfollowing a user. */\nexport interface UserFollowDeleteParams {\n /** ID of the user to unfollow. */\n userId: number\n}\n\n/** Methods for the user bookmarks sub-namespace. */\nexport class UserBookmarksResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a user's bookmarked illusts.\n * GET /v1/user/bookmarks/illust\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all bookmarked illusts across pages\n * for await (const illust of client.users.bookmarks.illusts({ userId: client.userId }).items()) {\n * console.log(illust.title)\n * }\n *\n * // Resume from a saved cursor\n * import { parseNextUrl } from '@book000/pixivts'\n * const page = await client.users.bookmarks.illusts({ userId: client.userId })\n * if (page.isOk && page.value.nextUrl) {\n * const cursor = parseNextUrl(page.value.nextUrl)\n * const next = await client.users.bookmarks.illusts({\n * userId: client.userId,\n * maxBookmarkId: cursor.maxBookmarkId,\n * })\n * }\n * ```\n */\n illusts(\n params: UserBookmarksIllustParams\n ): PaginatedResultAsync<UserBookmarksIllustPage, PixivIllustItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserBookmarksIllustPage>(\n '/v1/user/bookmarks/illust',\n buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n filter: params.filter ?? 'for_ios',\n tag: params.tag,\n maxBookmarkId: params.maxBookmarkId,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches a user's bookmarked novels.\n * GET /v1/user/bookmarks/novel\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all bookmarked novels across pages\n * for await (const novel of client.users.bookmarks.novels({ userId: client.userId }).items()) {\n * console.log(novel.title)\n * }\n * ```\n */\n novels(\n params: UserBookmarksNovelParams\n ): PaginatedResultAsync<UserBookmarksNovelPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserBookmarksNovelPage>(\n '/v1/user/bookmarks/novel',\n buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n filter: params.filter ?? 'for_ios',\n tag: params.tag,\n maxBookmarkId: params.maxBookmarkId,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n}\n\n/** Methods for the user API namespace. */\nexport class UserResource {\n /** User bookmarks sub-namespace. */\n readonly bookmarks: UserBookmarksResource\n\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n this.bookmarks = new UserBookmarksResource(http)\n }\n\n /**\n * Fetches detailed profile information for a user.\n * GET /v1/user/detail\n *\n * @param params - Request parameters\n */\n detail(\n params: UserDetailParams\n ): ResultAsync<UserDetailResponse, PixivError> {\n return this.#http.get<UserDetailResponse>(\n '/v1/user/detail',\n buildParams({ userId: params.userId, filter: params.filter ?? 'for_ios' })\n )\n }\n\n /**\n * Fetches illusts posted by a user.\n * GET /v1/user/illusts\n *\n * @param params - Request parameters\n */\n illusts(\n params: UserIllustsParams\n ): PaginatedResultAsync<UserIllustsPage, PixivIllustItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserIllustsPage>(\n '/v1/user/illusts',\n buildParams({\n userId: params.userId,\n type: params.type,\n filter: params.filter ?? 'for_ios',\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches novels posted by a user.\n * GET /v1/user/novels\n *\n * @param params - Request parameters\n */\n novels(\n params: UserNovelsParams\n ): PaginatedResultAsync<UserNovelsPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserNovelsPage>(\n '/v1/user/novels',\n buildParams({\n userId: params.userId,\n filter: params.filter ?? 'for_ios',\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches the list of users that a user is following.\n * GET /v1/user/following\n *\n * @param params - Request parameters\n */\n following(\n params: UserFollowingParams\n ): PaginatedResultAsync<UserFollowingPage, PixivUserPreviewItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserFollowingPage>(\n '/v1/user/following',\n buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.userPreviews\n )\n }\n\n /**\n * Follows a user.\n * POST /v1/user/follow/add\n *\n * @param params - Request parameters\n */\n followAdd(\n params: UserFollowAddParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n })\n return this.#http.post<Record<string, never>>(\n '/v1/user/follow/add',\n body.toString()\n )\n }\n\n /**\n * Unfollows a user.\n * POST /v1/user/follow/delete\n *\n * @param params - Request parameters\n */\n followDelete(\n params: UserFollowDeleteParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({ userId: String(params.userId) })\n return this.#http.post<Record<string, never>>(\n '/v1/user/follow/delete',\n body.toString()\n )\n }\n}\n","/**\n * MangaResource — methods for the manga API namespace.\n */\nimport type { HttpClient } from '../http'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport { OSFilter } from '../options'\nimport type { MangaRecommendedPage, PixivIllustItem } from '../types'\n\n/** Parameters for fetching recommended manga. */\nexport interface MangaRecommendedParams {\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Methods for the manga API namespace. */\nexport class MangaResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches recommended manga.\n * GET /v1/manga/recommended\n *\n * @param params - Request parameters\n */\n recommended(\n params: MangaRecommendedParams = {}\n ): PaginatedResultAsync<MangaRecommendedPage, PixivIllustItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<MangaRecommendedPage>(\n '/v1/manga/recommended',\n buildParams({\n filter: params.filter ?? 'for_ios',\n includeRankingIllusts: true,\n includePrivacyPolicy: true,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n}\n","/**\n * UgoiraResource — methods for the ugoira API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport type { ResultAsync } from '../result'\nimport type { UgoiraMetadataResponse } from '../types'\n\n/** Parameters for fetching ugoira metadata. */\nexport interface UgoiraMetadataParams {\n /** ID of the ugoira illust whose metadata to fetch. */\n illustId: number\n}\n\n/** Methods for the ugoira API namespace. */\nexport class UgoiraResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches ugoira metadata (ZIP URL and per-frame timings).\n * GET /v1/ugoira/metadata\n *\n * @param params - Request parameters\n */\n metadata(\n params: UgoiraMetadataParams\n ): ResultAsync<UgoiraMetadataResponse, PixivError> {\n return this.#http.get<UgoiraMetadataResponse>(\n '/v1/ugoira/metadata',\n buildParams({ illustId: params.illustId })\n )\n }\n}\n","/**\n * ImageResource — helpers for fetching pixiv CDN images.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport type { ResultAsync } from '../result'\n\n/** Methods for fetching pixiv images. */\nexport class ImageResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a pixiv image.\n *\n * Uses a browser User-Agent and Referer (required for pixiv CDN).\n * No Authorization header is sent.\n *\n * @param imageUrl - Full CDN image URL\n */\n fetch(imageUrl: string): ResultAsync<Response, PixivError> {\n return this.#http.fetchImage(imageUrl)\n }\n}\n","/**\n * PixivClient — main entry point for the @book000/pixivts library.\n *\n * @example\n * ```ts\n * const client = await PixivClient.of(process.env.PIXIV_REFRESH_TOKEN!)\n * const result = await client.illusts.detail({ illustId: 12345 })\n * if (result.isOk) console.log(result.value.illust.title)\n * ```\n */\n\nimport { AuthManager } from './auth'\nimport { HttpClient } from './http'\nimport type { ResponseInterceptor } from './interceptor'\nimport type { RateLimitRetryOptions } from './http'\nimport { IllustResource } from './resources/illusts'\nimport { NovelResource } from './resources/novels'\nimport { UserResource } from './resources/users'\nimport { MangaResource } from './resources/manga'\nimport { UgoiraResource } from './resources/ugoira'\nimport { ImageResource } from './resources/images'\n\n/** Options for constructing a {@link PixivClient}. */\nexport interface PixivClientOptions {\n /** Rate-limit retry configuration. */\n retry?: Partial<RateLimitRetryOptions>\n /** Optional interceptor called after each successful response (DB seam). */\n onResponse?: ResponseInterceptor\n}\n\n/**\n * Main client for the pixiv API.\n *\n * Create an instance via {@link PixivClient.of} — the constructor is private\n * because initialisation requires an async token refresh.\n */\nexport class PixivClient {\n /** Illust API namespace. */\n readonly illusts: IllustResource\n /** Novel API namespace. */\n readonly novels: NovelResource\n /** User API namespace. */\n readonly users: UserResource\n /** Manga API namespace. */\n readonly manga: MangaResource\n /** Ugoira API namespace. */\n readonly ugoira: UgoiraResource\n /** Image fetch helpers. */\n readonly images: ImageResource\n\n readonly #auth: AuthManager\n\n private constructor(auth: AuthManager, http: HttpClient) {\n this.#auth = auth\n this.illusts = new IllustResource(http)\n this.novels = new NovelResource(http)\n this.users = new UserResource(http)\n this.manga = new MangaResource(http)\n this.ugoira = new UgoiraResource(http)\n this.images = new ImageResource(http)\n }\n\n /**\n * Numeric user ID of the authenticated account.\n *\n * Available immediately after {@link PixivClient.of} resolves.\n * The pixiv OAuth endpoint returns the ID as a string; this getter\n * normalises it to `number` for consistency with resource method params\n * (e.g. `UserBookmarksIllustParams.userId`).\n *\n * @example\n * ```ts\n * const client = await PixivClient.of(refreshToken)\n * const bookmarks = await client.users.bookmarks.illusts({ userId: client.userId })\n * ```\n */\n get userId(): number {\n const id = Number(this.#auth.userId)\n if (Number.isNaN(id)) {\n throw new TypeError(`Invalid userId: \"${this.#auth.userId}\"`)\n }\n return id\n }\n\n /**\n * Returns the current OAuth access token.\n *\n * The access token is short-lived and changes after each call to\n * {@link PixivClient.of} and after each automatic token refresh triggered\n * by a 401 response.\n *\n * @returns The current bearer access token string\n */\n getAccessToken(): string {\n return this.#auth.accessToken\n }\n\n /**\n * Returns the current OAuth refresh token.\n *\n * The refresh token is long-lived and is used to obtain new access tokens.\n * It may rotate after a successful token refresh.\n *\n * @returns The current refresh token string\n */\n getRefreshToken(): string {\n return this.#auth.refreshToken\n }\n\n /**\n * Creates a PixivClient by refreshing the given token.\n *\n * @param refreshToken - Pixiv refresh token\n * @param options - Optional retry and response interceptor configuration\n * @returns A fully initialised {@link PixivClient}\n */\n static async of(\n refreshToken: string,\n options?: PixivClientOptions\n ): Promise<PixivClient> {\n const auth = await AuthManager.login(refreshToken)\n const http = new HttpClient(auth, options)\n return new PixivClient(auth, http)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["#http","#getItems","#accessToken","#refreshToken","#auth","#retry","#interceptor","#send","#sendWithRetry","#http","#http","#http","#http","#http","#http","#auth"],"sources":["../src/result.ts","../src/errors.ts","../src/paginated.ts","../src/params.ts","../src/options.ts","../src/auth.ts","../src/http.ts","../src/resources/illusts.ts","../src/resources/novels.ts","../src/resources/users.ts","../src/resources/manga.ts","../src/resources/ugoira.ts","../src/resources/images.ts","../src/client.ts"],"sourcesContent":["/**\n * Zero-dependency Result / ResultAsync implementation.\n *\n * Ergonomics are intentionally close to neverthrow so the patterns feel\n * familiar without pulling in an external dependency.\n *\n * @example\n * ```ts\n * const r = ok(42)\n * if (r.isOk) console.log(r.value) // 42\n *\n * const a = ResultAsync.fromPromise(fetch('/api'), (e) => networkError(e))\n * const text = await a\n * .andThen((res) => ResultAsync.fromPromise(res.text(), networkError))\n * .unwrapOr('fallback')\n * ```\n */\n\n// ---------------------------------------------------------------------------\n// Result<T, E>\n// ---------------------------------------------------------------------------\n\n/** Successful result carrying `value`. */\nexport interface OkResult<T> {\n /** Always `true` — use this to narrow the union to `OkResult<T>`. */\n readonly isOk: true\n /** Always `false` — use this to narrow the union to `OkResult<T>`. */\n readonly isErr: false\n /** The success value. */\n readonly value: T\n /** Returns an `OkResult` with `fn(value)`. */\n map<U>(fn: (value: T) => U): OkResult<U>\n /** Returns `this` unchanged. */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- F is part of the public API contract, symmetric with ErrResult.mapErr<F>\n mapErr<F>(_fn: (error: never) => F): OkResult<T>\n /** Calls `fn(value)` and returns its Result. */\n andThen<U, F>(fn: (value: T) => Result<U, F>): Result<U, F>\n /** Calls `onOk` and returns its result. */\n match<U>(onOk: (value: T) => U, _onErr: (error: never) => U): U\n /** Returns `value`. */\n unwrapOr(_fallback: T): T\n}\n\n/** Failed result carrying `error`. */\nexport interface ErrResult<E> {\n /** Always `false` — use this to narrow the union to `ErrResult<E>`. */\n readonly isOk: false\n /** Always `true` — use this to narrow the union to `ErrResult<E>`. */\n readonly isErr: true\n /** The error value. */\n readonly error: E\n /** Returns `this` unchanged. */\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- U is part of the public API contract, symmetric with OkResult.map<U>\n map<U>(_fn: (value: never) => U): ErrResult<E>\n /** Returns an `ErrResult` with `fn(error)`. */\n mapErr<F>(fn: (error: E) => F): ErrResult<F>\n /** Returns `this` unchanged. */\n andThen<U, F>(_fn: (value: never) => Result<U, F>): ErrResult<E>\n /** Calls `onErr` and returns its result. */\n match<U>(_onOk: (value: never) => U, onErr: (error: E) => U): U\n /** Returns `fallback`. */\n unwrapOr<T>(fallback: T): T\n}\n\n/** A value that is either `OkResult<T>` or `ErrResult<E>`. */\nexport type Result<T, E> = OkResult<T> | ErrResult<E>\n\nclass OkResultImpl<T> implements OkResult<T> {\n readonly isOk = true as const\n readonly isErr = false as const\n\n constructor(readonly value: T) {}\n\n map<U>(fn: (value: T) => U): OkResult<U> {\n return new OkResultImpl(fn(this.value))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters, @typescript-eslint/no-unused-vars -- F is part of the public API contract; _fn is intentionally unused (OkResult.mapErr is a no-op)\n mapErr<F>(_fn: (error: never) => F): OkResult<T> {\n return this\n }\n\n andThen<U, F>(fn: (value: T) => Result<U, F>): Result<U, F> {\n return fn(this.value)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _onErr is intentionally unused: OkResult.match always calls onOk\n match<U>(onOk: (value: T) => U, _onErr: (error: never) => U): U {\n return onOk(this.value)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _fallback is intentionally unused: OkResult.unwrapOr always returns value\n unwrapOr(_fallback: T): T {\n return this.value\n }\n}\n\nclass ErrResultImpl<E> implements ErrResult<E> {\n readonly isOk = false as const\n readonly isErr = true as const\n\n // eslint-disable-next-line n/handle-callback-err -- 'error' is a stored value, not a Node.js callback error parameter\n constructor(readonly error: E) {}\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters, @typescript-eslint/no-unused-vars -- U is part of the public API contract; _fn is intentionally unused (ErrResult.map is a no-op)\n map<U>(_fn: (value: never) => U): ErrResult<E> {\n return this\n }\n\n mapErr<F>(fn: (error: E) => F): ErrResult<F> {\n return new ErrResultImpl(fn(this.error))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _fn is intentionally unused: ErrResult.andThen is a no-op (the success path does not apply)\n andThen<U, F>(_fn: (value: never) => Result<U, F>): ErrResult<E> {\n return this\n }\n\n match<U>(_onOk: (value: never) => U, onErr: (error: E) => U): U {\n return onErr(this.error)\n }\n\n unwrapOr<T>(fallback: T): T {\n return fallback\n }\n}\n\n/**\n * Creates a successful `Result<T, never>`.\n *\n * @param value - The success value\n */\nexport function ok<T>(value: T): OkResult<T> {\n return new OkResultImpl(value)\n}\n\n/**\n * Creates a failed `Result<never, E>`.\n *\n * @param error - The error value\n */\nexport function err<E>(error: E): ErrResult<E> {\n return new ErrResultImpl(error)\n}\n\n// ---------------------------------------------------------------------------\n// ResultAsync<T, E>\n// ---------------------------------------------------------------------------\n\n/**\n * A `PromiseLike<Result<T, E>>` that is directly `await`-able and supports\n * chainable `map / mapErr / andThen` operators.\n *\n * @example\n * ```ts\n * const result = await ResultAsync.fromPromise(fetch('/api'), networkError)\n * .andThen((res) =>\n * ResultAsync.fromPromise(res.json() as Promise<unknown>, networkError)\n * )\n * ```\n */\nexport class ResultAsync<T, E> implements PromiseLike<Result<T, E>> {\n private readonly _promise: Promise<Result<T, E>>\n\n constructor(promise: Promise<Result<T, E>>) {\n this._promise = promise\n }\n\n // PromiseLike contract — makes `await resultAsync` work\n // eslint-disable-next-line unicorn/no-thenable -- ResultAsync intentionally implements PromiseLike to be directly awaitable\n then<TResult1 = Result<T, E>, TResult2 = never>(\n onfulfilled?:\n | ((value: Result<T, E>) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n\n return this._promise.then(onfulfilled, onrejected as any)\n }\n\n /**\n * Wraps a `Promise<T>` into a `ResultAsync<T, E>`.\n *\n * If the promise rejects, `onError` maps the rejection reason to `E`.\n *\n * @param promise - The promise to wrap\n * @param onError - Error mapper\n */\n static fromPromise<T, E>(\n promise: Promise<T>,\n onError: (reason: unknown) => E\n ): ResultAsync<T, E> {\n return new ResultAsync(\n promise.then(\n (v) => ok(v) as Result<T, E>,\n (error: unknown) => err(onError(error)) as Result<T, E>\n )\n )\n }\n\n /**\n * Wraps an already-resolved `Result<T, E>` into a `ResultAsync<T, E>`.\n *\n * @param result - The result to wrap\n */\n static fromResult<T, E>(result: Result<T, E>): ResultAsync<T, E> {\n return new ResultAsync(Promise.resolve(result))\n }\n\n /**\n * Transforms the success value.\n *\n * If the inner result is `Err`, `fn` is not called.\n *\n * @param fn - Synchronous mapper\n */\n map<U>(fn: (value: T) => U): ResultAsync<U, E> {\n return new ResultAsync(\n // eslint-disable-next-line unicorn/no-array-callback-reference -- r.map(fn) is safe here; fn is a user-supplied mapper, not a DOM/Array method reference\n this._promise.then((r) => r.map(fn) as Result<U, E>)\n )\n }\n\n /**\n * Transforms the error value.\n *\n * If the inner result is `Ok`, `fn` is not called.\n *\n * @param fn - Synchronous error mapper\n */\n mapErr<F>(fn: (error: E) => F): ResultAsync<T, F> {\n return new ResultAsync(\n this._promise.then((r) => r.mapErr(fn) as Result<T, F>)\n )\n }\n\n /**\n * Chains another async operation that may fail.\n *\n * If the inner result is `Err`, `fn` is not called.\n *\n * @param fn - Async mapper that returns a `ResultAsync<U, F>`\n */\n andThen<U, F>(\n fn: (value: T) => ResultAsync<U, F> | Result<U, F>\n ): ResultAsync<U, E | F> {\n return new ResultAsync(\n this._promise.then(async (r): Promise<Result<U, E | F>> => {\n if (r.isErr) return r\n const next = fn(r.value)\n if (next instanceof ResultAsync) {\n return next._promise\n }\n return next\n })\n )\n }\n\n /**\n * Pattern-matches on success / failure.\n *\n * @param onOk - Called with the success value\n * @param onErr - Called with the error value\n * @returns A `Promise<U>`\n */\n async match<U>(\n onOk: (value: T) => U | Promise<U>,\n onErr: (error: E) => U | Promise<U>\n ): Promise<U> {\n const r = await this._promise\n if (r.isOk) return onOk(r.value)\n return onErr(r.error)\n }\n\n /**\n * Returns the success value, or `fallback` if the result is `Err`.\n *\n * @param fallback - The fallback value\n */\n async unwrapOr(fallback: T): Promise<T> {\n const r = await this._promise\n // Avoid calling r.unwrapOr(fallback) directly to work around TypeScript 6\n // Awaited<T> inference issues with union method signatures.\n if (r.isOk) return r.value\n return fallback\n }\n}\n","/**\n * Discriminated union of all errors that can occur when using the pixiv API client.\n *\n * Use the `type` field to discriminate:\n * ```ts\n * if (result.isErr) {\n * const err = result.error\n * if (err.type === 'rate_limit') { ... }\n * }\n * ```\n */\nexport type PixivError =\n | {\n /** The request hit the rate limit and exhausted all retries. */\n type: 'rate_limit'\n /** Retry-After duration parsed from the last 429 response (milliseconds). */\n retryAfter: number\n }\n | {\n /** Authentication failed (401 response that could not be refreshed). */\n type: 'auth_failed'\n /** HTTP status code (always 401). */\n status: number\n }\n | {\n /** A network-level error occurred (fetch threw). */\n type: 'network'\n /** The underlying error thrown by fetch. */\n cause: unknown\n }\n | {\n /** The API returned a non-2xx status code other than 401/429. */\n type: 'api_error'\n /** HTTP status code. */\n status: number\n /** Parsed response body (object if JSON, string otherwise). */\n body: unknown\n }\n\n// ---------------------------------------------------------------------------\n// PixivFetchError — a proper Error subclass wrapping PixivError\n// ---------------------------------------------------------------------------\n\n/**\n * An `Error` subclass that wraps a `PixivError` for use in thrown contexts\n * (e.g. async generators that must throw proper `Error` objects).\n *\n * All `PixivError` properties are spread directly onto this instance so that\n * callers can use `instanceof PixivFetchError` or access `error.type` etc.\n *\n * @example\n * ```ts\n * try {\n * for await (const page of result.pages()) { ... }\n * } catch (e) {\n * if (e instanceof PixivFetchError) {\n * console.error(e.pixivError.type)\n * }\n * }\n * ```\n */\nexport class PixivFetchError extends Error {\n /** The underlying structured `PixivError`. */\n readonly pixivError: PixivError\n\n constructor(pixivError: PixivError) {\n super(`pixiv API error: ${pixivError.type}`)\n this.name = 'PixivFetchError'\n this.pixivError = pixivError\n // Spread PixivError fields onto this instance for backwards compatibility\n // with code that matches thrown values via { type, status, ... }.\n Object.assign(this, pixivError)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Constructor helpers (not strictly required but improve call-sites)\n// ---------------------------------------------------------------------------\n\n/** Creates a rate-limit error. */\nexport function rateLimitError(retryAfter: number): PixivError {\n return { type: 'rate_limit', retryAfter }\n}\n\n/** Creates an auth-failed error. */\nexport function authFailedError(status: number): PixivError {\n return { type: 'auth_failed', status }\n}\n\n/** Creates a network error. */\nexport function networkError(cause: unknown): PixivError {\n return { type: 'network', cause }\n}\n\n/** Creates an API error. */\nexport function apiError(status: number, body: unknown): PixivError {\n return { type: 'api_error', status, body }\n}\n","/**\n * PaginatedResultAsync — pagination support for the pixiv API.\n *\n * Extends `ResultAsync<TPage, PixivError>` so that:\n * - `await paginated` returns the first-page `Result<TPage, PixivError>` directly\n * - `.pages()` is an async generator that yields each page\n * - `.items()` is an async generator that yields individual items across all pages\n *\n * Pagination uses the `nextUrl` field returned by list endpoints. The URL is\n * fetched via `HttpClient.getAbsolute()` which reuses the same auth / retry /\n * interceptor pipeline as regular requests.\n */\n\nimport type { HttpClient } from './http'\nimport type { PixivError } from './errors'\nimport { PixivFetchError } from './errors'\nimport { err } from './result'\nimport type { Result } from './result'\nimport { ResultAsync } from './result'\n\n/**\n * A page returned by a pixiv list endpoint.\n *\n * Must have a `nextUrl` field (null when there are no more pages).\n */\nexport interface PagedResponse {\n /** URL to the next page, or `null` when there are no more pages. */\n nextUrl: string | null\n}\n\n/**\n * A `ResultAsync<TPage, PixivError>` with additional `.pages()` / `.items()`\n * async generators for consuming paginated pixiv list responses.\n *\n * Returned by all resource methods that produce a `nextUrl` field.\n */\nexport class PaginatedResultAsync<\n TPage extends PagedResponse,\n TItem,\n> extends ResultAsync<TPage, PixivError> {\n readonly #http: HttpClient\n readonly #getItems: (page: TPage) => TItem[]\n\n constructor(\n promise: Promise<Result<TPage, PixivError>>,\n http: HttpClient,\n getItems: (page: TPage) => TItem[]\n ) {\n super(promise)\n this.#http = http\n this.#getItems = getItems\n }\n\n /**\n * Creates a `PaginatedResultAsync` from a `ResultAsync`.\n *\n * @param inner - The first-page result\n * @param http - HTTP client for fetching subsequent pages\n * @param getItems - Extracts item array from a page\n */\n static fromResultAsync<TPage extends PagedResponse, TItem>(\n inner: ResultAsync<TPage, PixivError>,\n http: HttpClient,\n getItems: (page: TPage) => TItem[]\n ): PaginatedResultAsync<TPage, TItem> {\n // Access the inner promise via the PromiseLike contract (await the ResultAsync)\n const promise = Promise.resolve(inner)\n return new PaginatedResultAsync<TPage, TItem>(promise, http, getItems)\n }\n\n /**\n * Async generator that yields each page starting from the first.\n *\n * If any page fetch fails, the generator throws a `PixivFetchError`.\n *\n * @example\n * ```ts\n * for await (const page of client.illusts.search({ word: 'cat' }).pages()) {\n * console.log(page.illusts.length)\n * }\n * ```\n */\n async *pages(): AsyncGenerator<TPage, void, unknown> {\n // Yield first page\n const first = await Promise.resolve(this)\n if (first.isErr) throw new PixivFetchError(first.error)\n yield first.value\n\n // Follow nextUrl chain\n let nextUrl: string | null = first.value.nextUrl\n while (nextUrl !== null) {\n const pageResult = await this.#http.getAbsolute<TPage>(nextUrl)\n if (pageResult.isErr) throw new PixivFetchError(pageResult.error)\n yield pageResult.value\n nextUrl = pageResult.value.nextUrl\n }\n }\n\n /**\n * Async generator that yields individual items across all pages.\n *\n * If any page fetch fails, the generator throws a `PixivFetchError`.\n *\n * @example\n * ```ts\n * for await (const illust of client.illusts.search({ word: 'cat' }).items()) {\n * console.log(illust.title)\n * }\n * ```\n */\n async *items(): AsyncGenerator<TItem, void, unknown> {\n for await (const page of this.pages()) {\n for (const item of this.#getItems(page)) {\n yield item\n }\n }\n }\n}\n\n/**\n * Creates an immediately-failed `PaginatedResultAsync`.\n *\n * Useful when validation or auth fails before any HTTP request is made.\n *\n * @param error - The error to return\n * @param http - HTTP client (used for signature compatibility)\n * @param getItems - Item extractor (used for signature compatibility)\n */\nexport function failedPaginated<TPage extends PagedResponse, TItem>(\n error: PixivError,\n http: HttpClient,\n getItems: (page: TPage) => TItem[]\n): PaginatedResultAsync<TPage, TItem> {\n return new PaginatedResultAsync(\n Promise.resolve(err(error)),\n http,\n getItems\n )\n}\n","/**\n * Parameter building utilities.\n *\n * Provides camelCase → snake_case conversion and a URLSearchParams builder\n * that replicates the behaviour of the `qs` library used in the legacy code\n * (without the `qs` runtime dependency).\n */\n\n/**\n * Converts a camelCase string to snake_case.\n *\n * @example\n * camelToSnake('illustId') // 'illust_id'\n * camelToSnake('searchAiType') // 'search_ai_type'\n *\n * @param key - camelCase string\n * @returns snake_case string\n */\nexport function camelToSnake(key: string): string {\n return key.replaceAll(/([A-Z])/g, (m) => `_${m.toLowerCase()}`)\n}\n\n/**\n * Converts all keys of a plain object from camelCase to snake_case, shallow.\n *\n * Values are preserved as-is; nested objects are NOT recursed into.\n *\n * @param obj - Object with camelCase keys\n * @returns New object with snake_case keys\n */\nexport function toSnakeKeys(obj: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const key of Object.keys(obj)) {\n out[camelToSnake(key)] = obj[key]\n }\n return out\n}\n\ntype ParamValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | string[]\n | number[]\n\n/**\n * Serialises a record of query parameters into a `URLSearchParams` instance.\n *\n * Rules:\n * - `null` / `undefined` values are skipped.\n * - Arrays are appended with a `[]` suffix: `foo[]=1&foo[]=2` (Rails/pixiv convention).\n * - Booleans are serialised as `'true'` / `'false'`.\n * - Numbers are serialised via `.toString()`.\n *\n * @param params - Key/value pairs to serialise\n * @returns Populated `URLSearchParams`\n */\nexport function buildSearchParams(\n params: Record<string, ParamValue>\n): URLSearchParams {\n const usp = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === null || value === undefined) continue\n if (Array.isArray(value)) {\n // The pixiv API (Rails backend) expects bracket-suffixed keys for arrays:\n // e.g. seed_illust_ids[]=1&seed_illust_ids[]=2, not seed_illust_ids=1&seed_illust_ids=2\n for (const item of value) usp.append(`${key}[]`, String(item))\n } else {\n usp.set(key, String(value))\n }\n }\n return usp\n}\n\n/**\n * Merges camelCase→snake_case conversion with URLSearchParams building.\n *\n * Convenience wrapper used by resource methods.\n *\n * @param params - camelCase record\n * @returns Populated `URLSearchParams` with snake_case keys\n */\nexport function buildParams(\n params: Record<string, ParamValue>\n): URLSearchParams {\n return buildSearchParams(toSnakeKeys(params) as Record<string, ParamValue>)\n}\n\n/**\n * Converts a snake_case string to lowerCamelCase.\n *\n * Already-camelCase keys pass through unchanged (idempotent).\n *\n * @example\n * snakeToCamel('image_urls') // 'imageUrls'\n * snakeToCamel('x_restrict') // 'xRestrict'\n * snakeToCamel('imageUrls') // 'imageUrls' (no-op)\n *\n * @param key - snake_case string\n * @returns lowerCamelCase string\n */\nexport function snakeToCamel(key: string): string {\n return key.replaceAll(/_([a-z0-9])/g, (_m, c: string) => c.toUpperCase())\n}\n\n/**\n * Recursively converts all object keys from snake_case to lowerCamelCase.\n *\n * - Plain objects: keys are converted, values are recursed.\n * - Arrays: each element is recursed.\n * - Primitives / null: returned as-is.\n *\n * All keys are converted uniformly — no path-based exclusions.\n *\n * @param value - Any JSON-compatible value\n * @returns Deep copy with all object keys in lowerCamelCase\n */\nexport function camelizeKeys(value: unknown): unknown {\n if (value === null || typeof value !== 'object') return value\n if (Array.isArray(value)) return value.map((v) => camelizeKeys(v))\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[snakeToCamel(k)] = camelizeKeys(v)\n }\n return out\n}\n\n// ---------------------------------------------------------------------------\n// parseNextUrl\n// ---------------------------------------------------------------------------\n\n/**\n * Typed cursor parameters extracted from a pixiv `next_url`.\n *\n * Different endpoints use different cursor fields; only the fields present\n * in the URL will be defined.\n *\n * | Field | Endpoint(s) |\n * |---|---|\n * | `maxBookmarkId` | `GET /v1/user/bookmarks/illust` |\n * | `maxBookmarkIdForRecommend` | `GET /v1/illust/recommended`, `GET /v1/novel/recommended` |\n * | `minBookmarkIdForRecentIllust` | `GET /v1/illust/recommended` |\n * | `offset` | search, ranking, recommended, user lists, … |\n * | `lastOrder` | `GET /v2/novel/series` |\n */\nexport interface ParsedNextUrl {\n /** Cursor for `GET /v1/user/bookmarks/illust`. */\n maxBookmarkId?: number\n /** Cursor for `GET /v1/illust/recommended` and `GET /v1/novel/recommended`. */\n maxBookmarkIdForRecommend?: number\n /** Secondary cursor for `GET /v1/illust/recommended`. */\n minBookmarkIdForRecentIllust?: number\n /** Zero-based offset for general list endpoints. */\n offset?: number\n /** Cursor for `GET /v2/novel/series`. */\n lastOrder?: number\n}\n\n/**\n * Parses a pixiv `next_url` into a typed cursor object.\n *\n * Pass the `next_url` field from any paginated response to extract the\n * cursor parameters needed to resume pagination from a saved position.\n *\n * @example\n * ```ts\n * const page = await client.users.bookmarks.illusts({ userId: client.userId })\n * if (page.isOk && page.value.nextUrl) {\n * const cursor = parseNextUrl(page.value.nextUrl)\n * // Resume later:\n * const next = await client.users.bookmarks.illusts({\n * userId: client.userId,\n * maxBookmarkId: cursor.maxBookmarkId,\n * })\n * }\n * ```\n *\n * @param url - The `next_url` string returned by a pixiv list endpoint\n * @returns Typed cursor parameters; fields absent in the URL are `undefined`\n */\nexport function parseNextUrl(url: string): ParsedNextUrl {\n const usp = new URL(url).searchParams\n const result: ParsedNextUrl = {}\n\n const toNum = (key: string): number | undefined => {\n const v = usp.get(key)\n if (v === null || v === '') return undefined\n const n = Number(v)\n return Number.isNaN(n) ? undefined : n\n }\n\n const maxBookmarkId = toNum('max_bookmark_id')\n if (maxBookmarkId !== undefined) result.maxBookmarkId = maxBookmarkId\n\n const maxBookmarkIdForRecommend = toNum('max_bookmark_id_for_recommend')\n if (maxBookmarkIdForRecommend !== undefined)\n result.maxBookmarkIdForRecommend = maxBookmarkIdForRecommend\n\n const minBookmarkIdForRecentIllust = toNum('min_bookmark_id_for_recent_illust')\n if (minBookmarkIdForRecentIllust !== undefined)\n result.minBookmarkIdForRecentIllust = minBookmarkIdForRecentIllust\n\n const offset = toNum('offset')\n if (offset !== undefined) result.offset = offset\n\n const lastOrder = toNum('last_order')\n if (lastOrder !== undefined) result.lastOrder = lastOrder\n\n return result\n}\n","/**\n * Public option constants for @book000/pixivts.\n *\n * Each option is exported as a runtime `const` object for enum-like access\n * (e.g. `BookmarkRestrict.PUBLIC`). Plain string literals are also accepted\n * wherever these values are used as parameters.\n *\n * @example\n * ```ts\n * // Enum-like usage\n * await client.illusts.bookmarkAdd({ illustId: 123, restrict: BookmarkRestrict.PUBLIC })\n *\n * // Plain string literal — also valid\n * await client.illusts.bookmarkAdd({ illustId: 123, restrict: 'public' })\n * ```\n */\n\n/**\n * Search match target for illust / novel searches.\n *\n * - `partial_match_for_tags` — tags contain the word (default)\n * - `exact_match_for_tags` — tags exactly equal the word\n * - `title_and_caption` — title or caption contains the word\n * - `keyword` — general keyword search (novel only)\n */\nexport const SearchTarget = {\n PARTIAL_MATCH_FOR_TAGS: 'partial_match_for_tags',\n EXACT_MATCH_FOR_TAGS: 'exact_match_for_tags',\n TITLE_AND_CAPTION: 'title_and_caption',\n KEYWORD: 'keyword',\n} as const\n\n/**\n * Sort order for search results.\n *\n * - `date_desc` — newest first (default)\n * - `date_asc` — oldest first\n * - `popular_desc` — most bookmarks first (premium only)\n */\nexport const SearchSort = {\n DATE_DESC: 'date_desc',\n DATE_ASC: 'date_asc',\n POPULAR_DESC: 'popular_desc',\n} as const\n\n/**\n * Date range filter for search results.\n *\n * - `within_last_day` — past 24 hours\n * - `within_last_week` — past 7 days\n * - `within_last_month` — past 30 days\n */\nexport const SearchDuration = {\n WITHIN_LAST_DAY: 'within_last_day',\n WITHIN_LAST_WEEK: 'within_last_week',\n WITHIN_LAST_MONTH: 'within_last_month',\n} as const\n\n/**\n * Ranking mode for illust rankings.\n *\n * R-18 modes require a premium account with R-18 content enabled.\n */\nexport const RankingMode = {\n DAY: 'day',\n DAY_MALE: 'day_male',\n DAY_FEMALE: 'day_female',\n WEEK_ORIGINAL: 'week_original',\n WEEK_ROOKIE: 'week_rookie',\n WEEK: 'week',\n MONTH: 'month',\n DAY_AI: 'day_ai',\n DAY_R18: 'day_r18',\n WEEK_R18: 'week_r18',\n DAY_MALE_R18: 'day_male_r18',\n DAY_FEMALE_R18: 'day_female_r18',\n DAY_R18_AI: 'day_r18_ai',\n} as const\n\n/**\n * Ranking mode for novel rankings.\n *\n * R-18 modes require a premium account with R-18 content enabled.\n */\nexport const NovelRankingMode = {\n DAY: 'day',\n WEEK: 'week',\n DAY_MALE: 'day_male',\n DAY_FEMALE: 'day_female',\n WEEK_ROOKIE: 'week_rookie',\n DAY_R18: 'day_r18',\n WEEK_R18: 'week_r18',\n DAY_R18_AI: 'day_r18_ai',\n} as const\n\n/**\n * Visibility restriction for bookmarks.\n *\n * - `public` — publicly visible (default)\n * - `private` — visible only to the owner\n */\nexport const BookmarkRestrict = {\n PUBLIC: 'public',\n PRIVATE: 'private',\n} as const\n\n/**\n * Visibility restriction for follows.\n *\n * - `public` — publicly visible (default)\n * - `private` — visible only to the owner\n */\nexport const FollowRestrict = {\n PUBLIC: 'public',\n PRIVATE: 'private',\n} as const\n\n/**\n * OS filter used to request works compatible with the given platform.\n *\n * - `for_ios` — iOS-compatible works (default)\n * - `for_android` — Android-compatible works\n */\nexport const OSFilter = {\n FOR_IOS: 'for_ios',\n FOR_ANDROID: 'for_android',\n} as const\n\n/**\n * Work type filter for user illust listings.\n *\n * - `illust` — illustrations only\n * - `manga` — manga only\n */\nexport const UserIllustType = {\n ILLUST: 'illust',\n MANGA: 'manga',\n} as const\n","/**\n * Authentication manager for the pixiv API.\n *\n * Handles the OAuth 2.0 token refresh flow and generates the\n * x-client-hash header required by the pixiv iOS app API.\n *\n * The MD5 implementation is pure TypeScript to ensure Edge/browser compatibility —\n * Node's `crypto.createHash('md5')` is unavailable in Edge runtimes, and\n * `crypto.subtle` does not support MD5 (non-cryptographic hash).\n */\n\n/** Auth credentials returned by the pixiv token endpoint. */\nexport interface AuthCredentials {\n /** Numeric user ID returned as a string by the token endpoint. */\n userId: string\n /** Short-lived bearer token for API requests. */\n accessToken: string\n /** Long-lived token used to obtain new access tokens. */\n refreshToken: string\n}\n\n// ---------------------------------------------------------------------------\n// Pure-TS MD5 for x-client-hash\n// ---------------------------------------------------------------------------\n\n// Per-round constants derived from sin (Table T in RFC 1321)\nconst T: number[] = Array.from({ length: 64 }, (_, i) =>\n Math.floor(Math.abs(Math.sin(i + 1)) * 2 ** 32)\n)\n\n// Shift amounts per round\nconst S = [\n 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5,\n 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11,\n 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10,\n 15, 21,\n]\n\nfunction md5Bytes(bytes: number[]): string {\n const len = bytes.length\n // Append bit 1 (0x80 byte)\n bytes.push(0x80)\n // Pad to 56 mod 64 bytes\n while (bytes.length % 64 !== 56) bytes.push(0)\n // Append original length in bits as little-endian 64-bit\n const bitLen = len * 8\n for (let i = 0; i < 8; i++) {\n bytes.push(i < 4 ? (bitLen >>> (i * 8)) & 0xff : 0)\n }\n\n // Initial hash state\n let a = 0x67_45_23_01\n let b = 0xef_cd_ab_89\n let c = 0x98_ba_dc_fe\n let d = 0x10_32_54_76\n\n // Process each 64-byte chunk\n for (let chunk = 0; chunk < bytes.length; chunk += 64) {\n // Read chunk as 16 little-endian 32-bit words\n const M: number[] = []\n for (let w = 0; w < 16; w++) {\n const off = chunk + w * 4\n M.push(\n bytes[off] |\n (bytes[off + 1] << 8) |\n (bytes[off + 2] << 16) |\n (bytes[off + 3] << 24)\n )\n }\n\n let aa = a\n let bb = b\n let cc = c\n let dd = d\n\n for (let i = 0; i < 64; i++) {\n let f: number\n let g: number\n if (i < 16) {\n f = (bb & cc) | (~bb & dd)\n g = i\n } else if (i < 32) {\n f = (dd & bb) | (~dd & cc)\n g = (5 * i + 1) % 16\n } else if (i < 48) {\n f = bb ^ cc ^ dd\n g = (3 * i + 5) % 16\n } else {\n f = cc ^ (bb | ~dd)\n g = (7 * i) % 16\n }\n\n const tmp = dd\n dd = cc\n cc = bb\n const sum = Math.trunc(aa + f + M[g] + T[i])\n const rotated = (sum << S[i]) | (sum >>> (32 - S[i]))\n bb = Math.trunc(bb + rotated)\n aa = tmp\n }\n\n a = Math.trunc(a + aa)\n b = Math.trunc(b + bb)\n c = Math.trunc(c + cc)\n d = Math.trunc(d + dd)\n }\n\n // Convert the state to a hex string (little-endian)\n return [a, b, c, d]\n .map((n) =>\n [n & 0xff, (n >>> 8) & 0xff, (n >>> 16) & 0xff, (n >>> 24) & 0xff]\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')\n )\n .join('')\n}\n\n/**\n * Produces a hex-encoded MD5 digest of `input`.\n *\n * This is a minimal, spec-compliant implementation (RFC 1321) that avoids\n * any runtime platform dependency.\n *\n * @param input - UTF-8 string to hash\n * @returns Lowercase hex-encoded MD5 digest\n */\nexport function md5(input: string): string {\n // Encode the input string as a sequence of bytes (UTF-8)\n const bytes: number[] = []\n for (let i = 0; i < input.length; i++) {\n const code = input.codePointAt(i) ?? 0\n if (code < 0x80) {\n bytes.push(code)\n } else if (code < 0x8_00) {\n bytes.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f))\n } else {\n bytes.push(\n 0xe0 | (code >> 12),\n 0x80 | ((code >> 6) & 0x3f),\n 0x80 | (code & 0x3f)\n )\n }\n }\n\n return md5Bytes(bytes)\n}\n\n\n// ---------------------------------------------------------------------------\n// AuthManager\n// ---------------------------------------------------------------------------\n\nconst CLIENT_ID = 'MOBrBDS8blbauoSck0ZfDbtuzpyT'\nconst CLIENT_SECRET = 'lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj'\nconst HASH_SECRET =\n '28c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c'\nconst AUTH_URL = 'https://oauth.secure.pixiv.net/auth/token'\n\n/** Builds the x-client-hash header value for a given UTC timestamp string. */\nexport function buildClientHash(localTime: string): string {\n return md5(localTime + HASH_SECRET)\n}\n\n/**\n * Manages access tokens for the pixiv API.\n *\n * Holds the current access token and refresh token in memory.\n * The refresh() method exchanges the refresh token for a new access token\n * via the pixiv OAuth endpoint.\n */\nexport class AuthManager {\n #accessToken: string\n #refreshToken: string\n userId: string\n\n constructor(credentials: AuthCredentials) {\n this.#accessToken = credentials.accessToken\n this.#refreshToken = credentials.refreshToken\n this.userId = credentials.userId\n }\n\n /** Returns the current access token. */\n get accessToken(): string {\n return this.#accessToken\n }\n\n /** Returns the current refresh token. */\n get refreshToken(): string {\n return this.#refreshToken\n }\n\n /**\n * Exchanges the stored refresh token for a fresh access token.\n *\n * Updates the internal credentials on success.\n * Throws if the token endpoint returns a non-200 response.\n */\n async refresh(): Promise<void> {\n const localTime = new Date().toISOString().replace(/Z$/, '+00:00')\n\n const headers: Record<string, string> = {\n 'x-client-time': localTime,\n 'x-client-hash': buildClientHash(localTime),\n 'app-os': 'ios',\n 'app-os-version': '16.4.1',\n 'user-agent': 'PixivIOSApp/7.16.9 (iOS 16.4.1; iPad13,4)',\n 'Content-Type': 'application/x-www-form-urlencoded',\n }\n\n const body = new URLSearchParams({\n client_id: CLIENT_ID,\n client_secret: CLIENT_SECRET,\n get_secure_url: '1',\n grant_type: 'refresh_token',\n refresh_token: this.#refreshToken,\n }).toString()\n\n const response = await fetch(AUTH_URL, {\n method: 'POST',\n headers,\n body,\n })\n\n if (response.status !== 200) {\n throw new Error(\n `Failed to refresh pixiv token: HTTP ${response.status}`\n )\n }\n\n const data = (await response.json()) as {\n user: { id: string }\n response: { access_token: string; refresh_token: string }\n }\n\n this.#accessToken = data.response.access_token\n this.#refreshToken = data.response.refresh_token\n this.userId = data.user.id\n }\n\n /**\n * Creates an `AuthManager` by performing the initial token refresh.\n *\n * @param refreshToken - Pixiv refresh token\n * @returns Initialized `AuthManager`\n */\n static async login(refreshToken: string): Promise<AuthManager> {\n const manager = new AuthManager({\n userId: '',\n accessToken: '',\n refreshToken,\n })\n await manager.refresh()\n return manager\n }\n}\n","/**\n * HTTP client for the pixiv API.\n *\n * Wraps the global `fetch` API and adds:\n * - 429 retry with Retry-After header parsing\n * - 401 → token refresh → single retry\n * - Response interceptor hook (for optional DB recording)\n * - Image fetch helper (browser UA, Referer, no auth)\n */\n\nimport type { AuthManager } from './auth'\nimport { apiError, authFailedError, networkError, rateLimitError } from './errors'\nimport type { ResponseInterceptor } from './interceptor'\nimport { type HttpMethod, type ResponseRecord } from './interceptor'\nimport { camelizeKeys } from './params'\nimport { err, ok, ResultAsync } from './result'\nimport type { PixivError } from './errors'\nimport type { Result } from './result'\n\n/** Options for controlling retry behaviour on rate-limited requests. */\nexport interface RateLimitRetryOptions {\n /** Maximum number of retries when a 429 response is received. Defaults to 3. */\n maxRetries: number\n /** Default wait time (ms) used when no Retry-After header is present. Defaults to 10_000. */\n waitMs: number\n}\n\n/** Raw response data returned by the HTTP client. */\nexport interface HttpResponse<T> {\n /** Parsed response body. */\n data: T\n /** HTTP response status code. */\n status: number\n /** Response headers. */\n headers: Record<string, string>\n /** Request headers that were sent. */\n requestHeaders: Record<string, string>\n /** URL-encoded request body (null for GET requests). */\n requestBody: string | null\n /** Final URL after any redirects (may be undefined if unavailable). */\n responseUrl: string | undefined\n /** API endpoint path (e.g. `/v1/illust/detail`). */\n endpoint: string\n}\n\nconst DEFAULT_RETRY: RateLimitRetryOptions = { maxRetries: 3, waitMs: 10_000 }\n\nconst BASE_URL = 'https://app-api.pixiv.net'\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n Host: 'app-api.pixiv.net',\n 'App-OS': 'ios',\n 'App-OS-Version': '14.6',\n 'User-Agent': 'PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)',\n 'Accept-Language': 'ja',\n}\n\n/**\n * Parses the `Retry-After` header value into milliseconds.\n *\n * Supports delay-seconds format and HTTP-date format.\n * Falls back to `defaultMs` if the header is absent or unparseable.\n *\n * @param retryAfter - Header value (null if not present)\n * @param defaultMs - Fallback wait time in milliseconds\n * @returns Wait time in milliseconds (clamped to ≥ 0)\n */\nexport function parseRetryAfter(\n retryAfter: string | null,\n defaultMs: number\n): number {\n if (!retryAfter) return defaultMs\n\n // delay-seconds format\n if (/^\\d+$/.test(retryAfter.trim())) {\n return Number.parseInt(retryAfter, 10) * 1000\n }\n\n // HTTP-date format (e.g. \"Wed, 21 Oct 2026 07:28:00 GMT\")\n const retryDate = Date.parse(retryAfter)\n if (!Number.isNaN(retryDate)) {\n return Math.max(0, retryDate - Date.now())\n }\n\n return defaultMs\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of headers) {\n result[key] = value\n }\n return result\n}\n\n/**\n * HTTP client for the pixiv API.\n *\n * All methods return `ResultAsync<T, PixivError>` — no throws.\n * A 429 → retry loop and a 401 → refresh → retry are handled internally.\n */\nexport class HttpClient {\n readonly #auth: AuthManager\n readonly #retry: RateLimitRetryOptions\n readonly #interceptor: ResponseInterceptor | undefined\n\n constructor(\n auth: AuthManager,\n options?: {\n retry?: Partial<RateLimitRetryOptions>\n onResponse?: ResponseInterceptor\n }\n ) {\n this.#auth = auth\n this.#retry = {\n maxRetries: options?.retry?.maxRetries ?? DEFAULT_RETRY.maxRetries,\n waitMs: options?.retry?.waitMs ?? DEFAULT_RETRY.waitMs,\n }\n this.#interceptor = options?.onResponse\n }\n\n /**\n * Sends a GET request to the pixiv API.\n *\n * @param path - API endpoint path (e.g. \"/v1/illust/detail\")\n * @param params - Query parameters as a URLSearchParams instance\n * @returns `ResultAsync<T, PixivError>`\n */\n get<T>(path: string, params?: URLSearchParams): ResultAsync<T, PixivError> {\n const qs = params ? `?${params.toString()}` : ''\n const url = `${BASE_URL}${path}${qs}`\n return this.#send<T>(url, 'GET', path, undefined)\n }\n\n /**\n * Sends a POST request to the pixiv API.\n *\n * @param path - API endpoint path (e.g. \"/v2/illust/bookmark/add\")\n * @param body - URL-encoded request body string\n * @returns `ResultAsync<T, PixivError>`\n */\n post<T>(path: string, body: string): ResultAsync<T, PixivError> {\n const url = `${BASE_URL}${path}`\n return this.#send<T>(url, 'POST', path, body)\n }\n\n /**\n * Fetches a pixiv image URL without an Authorization header.\n *\n * Uses a browser User-Agent and the pixiv Referer, which are required for\n * image CDN access. Retry and interceptor are not applied here.\n *\n * @param imageUrl - Full image URL\n * @returns `ResultAsync<Response, PixivError>`\n */\n fetchImage(imageUrl: string): ResultAsync<Response, PixivError> {\n return ResultAsync.fromPromise(\n fetch(imageUrl, {\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',\n Referer: 'https://www.pixiv.net/',\n },\n }),\n networkError\n ).andThen((response) => {\n if (!response.ok) {\n return ResultAsync.fromResult(\n err(apiError(response.status, null))\n )\n }\n return ResultAsync.fromResult(ok(response) as Result<Response, PixivError>)\n })\n }\n\n /**\n * Sends a request to an absolute URL returned in a `next_url` field.\n *\n * Applies the same retry / interceptor / auth logic as `get()`.\n *\n * @param absoluteUrl - Full URL including query string\n * @returns `ResultAsync<T, PixivError>`\n */\n getAbsolute<T>(absoluteUrl: string): ResultAsync<T, PixivError> {\n // Extract the endpoint path for the interceptor record\n let endpoint: string\n try {\n endpoint = new URL(absoluteUrl).pathname\n } catch {\n endpoint = absoluteUrl\n }\n return this.#send<T>(absoluteUrl, 'GET', endpoint, undefined)\n }\n\n // ---------------------------------------------------------------------------\n // Private helpers\n // ---------------------------------------------------------------------------\n\n #send<T>(\n url: string,\n method: HttpMethod,\n endpoint: string,\n body: string | undefined\n ): ResultAsync<T, PixivError> {\n return new ResultAsync(this.#sendWithRetry(url, method, endpoint, body))\n }\n\n async #sendWithRetry<T>(\n url: string,\n method: HttpMethod,\n endpoint: string,\n body: string | undefined,\n allowRefresh = true\n ): Promise<Result<T, PixivError>> {\n const maxRetries = Math.max(0, this.#retry.maxRetries)\n const waitMs = Math.max(0, this.#retry.waitMs)\n\n let lastRetryAfterMs = 0\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const requestHeaders: Record<string, string> = {\n ...DEFAULT_HEADERS,\n Authorization: `Bearer ${this.#auth.accessToken}`,\n ...(method === 'POST'\n ? { 'Content-Type': 'application/x-www-form-urlencoded' }\n : {}),\n }\n\n let response: Response\n try {\n response = await fetch(url, {\n method,\n headers: requestHeaders,\n body: method === 'POST' ? body : undefined,\n })\n } catch (fetchError: unknown) {\n return err(networkError(fetchError))\n }\n\n // 429 Rate limit\n if (response.status === 429) {\n await response.body?.cancel()\n const retryAfterMs = parseRetryAfter(\n response.headers.get('Retry-After'),\n waitMs\n )\n lastRetryAfterMs = retryAfterMs\n\n if (attempt < maxRetries) {\n await new Promise((resolve) => setTimeout(resolve, retryAfterMs))\n continue\n }\n\n return err(rateLimitError(lastRetryAfterMs))\n }\n\n // 401 Auth failed → try token refresh once\n if (response.status === 401) {\n await response.body?.cancel()\n if (allowRefresh) {\n try {\n await this.#auth.refresh()\n } catch {\n return err(authFailedError(401))\n }\n // Retry once with the new token (no further refresh allowed)\n return this.#sendWithRetry<T>(url, method, endpoint, body, false)\n }\n return err(authFailedError(401))\n }\n\n // Parse response body\n const contentType = response.headers.get('content-type') ?? ''\n const text = await response.text()\n let data: T\n const isJson = contentType.includes('application/json')\n if (isJson) {\n try {\n data = camelizeKeys(JSON.parse(text)) as T\n } catch {\n data = text as unknown as T\n }\n } else {\n data = text as unknown as T\n }\n\n const responseHeaders = headersToRecord(response.headers)\n\n // Non-2xx errors\n if (!response.ok) {\n return err(apiError(response.status, data))\n }\n\n const httpResponse: HttpResponse<T> = {\n data,\n status: response.status,\n headers: responseHeaders,\n requestHeaders,\n requestBody: body ?? null,\n responseUrl: response.url || undefined,\n endpoint,\n }\n\n // Notify interceptor (fire-and-forget, errors do not fail the request)\n if (this.#interceptor) {\n const record: ResponseRecord = {\n method,\n endpoint,\n url: response.url || url,\n requestHeaders: JSON.stringify(requestHeaders),\n requestBody: body ?? null,\n responseType: isJson ? 'JSON' : 'TEXT',\n statusCode: response.status,\n responseHeaders: JSON.stringify(responseHeaders),\n responseBody: text,\n }\n Promise.resolve(this.#interceptor(record)).catch(() => undefined)\n }\n\n return ok(httpResponse.data)\n }\n\n return err(rateLimitError(lastRetryAfterMs))\n }\n}\n","/**\n * IllustResource — methods for the illust API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport type { ResultAsync } from '../result'\nimport {\n BookmarkRestrict,\n OSFilter,\n RankingMode,\n SearchDuration,\n SearchSort,\n SearchTarget,\n} from '../options'\nimport type {\n IllustDetailResponse,\n IllustListPage,\n IllustRecommendedPage,\n IllustSeriesPage,\n} from '../types'\n\n// === Request param types ===\n\n/** Parameters for fetching a single illust by ID. */\nexport interface IllustDetailParams {\n /** ID of the illust to fetch. */\n illustId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for fetching related illusts. */\nexport interface IllustRelatedParams {\n /** ID of the illust for which to fetch related works. */\n illustId: number\n /** Additional seed illust IDs to influence recommendations. */\n seedIllustIds?: number[]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for searching illusts. */\nexport interface IllustSearchParams {\n /** Search keyword. */\n word: string\n /** How to match the keyword against works (default: `\"partial_match_for_tags\"`). */\n searchTarget?: (typeof SearchTarget)[keyof typeof SearchTarget]\n /** Sort order for results (default: `\"date_desc\"`). */\n sort?: (typeof SearchSort)[keyof typeof SearchSort]\n /** Date range preset filter (omit for no restriction). */\n duration?: (typeof SearchDuration)[keyof typeof SearchDuration]\n /** Start date for a custom date range (YYYY-MM-DD; requires `endDate`). */\n startDate?: string\n /** End date for a custom date range (YYYY-MM-DD; requires `startDate`). */\n endDate?: string\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** AI-generated content filter: `0` = hide AI works, `1` = show only AI works. */\n searchAiType?: 0 | 1\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching the illust ranking. */\nexport interface IllustRankingParams {\n /** Ranking category (default: `\"day\"`). */\n mode?: (typeof RankingMode)[keyof typeof RankingMode]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Specific date to fetch rankings for (YYYY-MM-DD; omit for the latest). */\n date?: string\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching recommended illusts. */\nexport interface IllustRecommendedParams {\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n /**\n * Cursor for resuming pagination: the `maxBookmarkIdForRecommend` value\n * extracted from a previous page's `next_url` via {@link parseNextUrl}.\n */\n maxBookmarkIdForRecommend?: number\n /**\n * Secondary cursor for resuming pagination: the `minBookmarkIdForRecentIllust`\n * value extracted from a previous page's `next_url` via {@link parseNextUrl}.\n */\n minBookmarkIdForRecentIllust?: number\n /**\n * Content type filter for recommended works.\n * - `\"illust\"` — illustration works only\n * - `\"manga\"` — manga works only\n * Omit to receive both types.\n */\n contentType?: 'illust' | 'manga'\n /**\n * Whether to include ranking label information in the response.\n * Defaults to `true` when omitted.\n */\n includeRankingLabel?: boolean\n /**\n * IDs of illusts already seen by the user.\n * The API will exclude these from the recommendations.\n * Serialised as repeated `viewed[]=<id>` query parameters.\n */\n viewed?: number[]\n}\n\n/** Parameters for fetching an illust series. */\nexport interface IllustSeriesParams {\n /** ID of the illust series to fetch. */\n illustSeriesId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for adding an illust bookmark. */\nexport interface IllustBookmarkAddParams {\n /** ID of the illust to bookmark. */\n illustId: number\n /** Bookmark visibility (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** Tags to attach to the bookmark. */\n tags?: string[]\n}\n\n/** Parameters for removing an illust bookmark. */\nexport interface IllustBookmarkDeleteParams {\n /** ID of the illust to remove from bookmarks. */\n illustId: number\n}\n\n/** Methods for the illust API namespace. */\nexport class IllustResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a single illust by ID.\n * GET /v1/illust/detail\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * const result = await client.illusts.detail({ illustId: 12345 })\n * if (result.isOk) {\n * console.log(result.value.illust.title)\n * } else {\n * console.error(result.error)\n * }\n * ```\n */\n detail(\n params: IllustDetailParams\n ): ResultAsync<IllustDetailResponse, PixivError> {\n return this.#http.get<IllustDetailResponse>(\n '/v1/illust/detail',\n buildParams({ illustId: params.illustId, filter: params.filter ?? 'for_ios' })\n )\n }\n\n /**\n * Fetches related illusts for a given illust.\n * GET /v2/illust/related\n *\n * @param params - Request parameters\n */\n related(\n params: IllustRelatedParams\n ): PaginatedResultAsync<IllustListPage, IllustListPage['illusts'][number]> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustListPage>(\n '/v2/illust/related',\n buildParams({\n illustId: params.illustId,\n filter: params.filter ?? 'for_ios',\n ...(params.seedIllustIds\n ? { seedIllustIds: params.seedIllustIds }\n : {}),\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Searches for illusts.\n * GET /v1/search/illust\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all results across pages\n * for await (const illust of client.illusts.search({ word: 'cat' }).items()) {\n * console.log(illust.title)\n * }\n *\n * // Fetch only the first page\n * const page = await client.illusts.search({ word: 'cat' })\n * if (page.isOk) {\n * console.log(page.value.illusts.length)\n * }\n * ```\n */\n search(\n params: IllustSearchParams\n ): PaginatedResultAsync<IllustListPage, IllustListPage['illusts'][number]> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustListPage>(\n '/v1/search/illust',\n buildParams({\n word: params.word,\n searchTarget: params.searchTarget ?? 'partial_match_for_tags',\n sort: params.sort ?? 'date_desc',\n filter: params.filter ?? 'for_ios',\n duration: params.duration,\n startDate: params.startDate,\n endDate: params.endDate,\n searchAiType: params.searchAiType,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches the illust ranking.\n * GET /v1/illust/ranking\n *\n * @param params - Request parameters\n */\n ranking(\n params: IllustRankingParams = {}\n ): PaginatedResultAsync<IllustListPage, IllustListPage['illusts'][number]> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustListPage>(\n '/v1/illust/ranking',\n buildParams({\n mode: params.mode ?? 'day',\n filter: params.filter ?? 'for_ios',\n date: params.date,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches recommended illusts.\n * GET /v1/illust/recommended\n *\n * @param params - Request parameters\n */\n recommended(\n params: IllustRecommendedParams = {}\n ): PaginatedResultAsync<\n IllustRecommendedPage,\n IllustRecommendedPage['illusts'][number]\n > {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustRecommendedPage>(\n '/v1/illust/recommended',\n buildParams({\n filter: params.filter ?? 'for_ios',\n contentType: params.contentType,\n includeRankingLabel: params.includeRankingLabel ?? true,\n includeRankingIllusts: true,\n includePrivacyPolicy: true,\n offset: params.offset,\n maxBookmarkIdForRecommend: params.maxBookmarkIdForRecommend,\n minBookmarkIdForRecentIllust: params.minBookmarkIdForRecentIllust,\n ...(params.viewed ? { viewed: params.viewed } : {}),\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches an illust series.\n * GET /v1/illust/series\n *\n * @param params - Request parameters\n */\n series(\n params: IllustSeriesParams\n ): PaginatedResultAsync<\n IllustSeriesPage,\n IllustSeriesPage['illusts'][number]\n > {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<IllustSeriesPage>(\n '/v1/illust/series',\n buildParams({\n illustSeriesId: params.illustSeriesId,\n filter: params.filter ?? 'for_ios',\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Adds an illust bookmark.\n * POST /v2/illust/bookmark/add\n *\n * @param params - Request parameters\n */\n bookmarkAdd(\n params: IllustBookmarkAddParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({\n illustId: params.illustId,\n restrict: params.restrict ?? 'public',\n ...(params.tags ? { tags: params.tags } : {}),\n })\n return this.#http.post<Record<string, never>>(\n '/v2/illust/bookmark/add',\n body.toString()\n )\n }\n\n /**\n * Removes an illust bookmark.\n * POST /v1/illust/bookmark/delete\n *\n * @param params - Request parameters\n */\n bookmarkDelete(\n params: IllustBookmarkDeleteParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({ illustId: String(params.illustId) })\n return this.#http.post<Record<string, never>>(\n '/v1/illust/bookmark/delete',\n body.toString()\n )\n }\n}\n","/**\n * NovelResource — methods for the novel API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport type { ResultAsync } from '../result'\nimport {\n BookmarkRestrict,\n NovelRankingMode,\n OSFilter,\n SearchDuration,\n SearchSort,\n SearchTarget,\n} from '../options'\nimport type {\n NovelDetailResponse,\n NovelListPage,\n NovelRecommendedPage,\n NovelSeriesPage,\n PixivNovelItem,\n} from '../types'\n\n// === Request param types ===\n\n/** Parameters for fetching a single novel by ID. */\nexport interface NovelDetailParams {\n /** ID of the novel to fetch. */\n novelId: number\n}\n\n/** Parameters for fetching the WebView HTML of a novel. */\nexport interface NovelTextParams {\n /** ID of the novel whose WebView HTML to fetch. */\n novelId: number\n}\n\n/** Parameters for fetching related novels. */\nexport interface NovelRelatedParams {\n /** ID of the novel for which to fetch related works. */\n novelId: number\n}\n\n/** Parameters for searching novels. */\nexport interface NovelSearchParams {\n /** Search keyword. */\n word: string\n /** How to match the keyword against works (default: `\"partial_match_for_tags\"`). */\n searchTarget?: (typeof SearchTarget)[keyof typeof SearchTarget]\n /** Sort order for results (default: `\"date_desc\"`). */\n sort?: (typeof SearchSort)[keyof typeof SearchSort]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Date range preset filter (omit for no restriction). */\n duration?: (typeof SearchDuration)[keyof typeof SearchDuration]\n /** Start date for a custom date range (YYYY-MM-DD; requires `endDate`). */\n startDate?: string\n /** End date for a custom date range (YYYY-MM-DD; requires `startDate`). */\n endDate?: string\n /** AI-generated content filter: `0` = hide AI works, `1` = show only AI works. */\n searchAiType?: 0 | 1\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching the novel ranking. */\nexport interface NovelRankingParams {\n /** Ranking category (default: `\"day\"`). */\n mode?: (typeof NovelRankingMode)[keyof typeof NovelRankingMode]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Specific date to fetch rankings for (YYYY-MM-DD; omit for the latest). */\n date?: string\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching recommended novels. */\nexport interface NovelRecommendedParams {\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n /**\n * Cursor for resuming pagination: the `maxBookmarkIdForRecommend` value\n * extracted from a previous page's `next_url` via {@link parseNextUrl}.\n */\n maxBookmarkIdForRecommend?: number\n}\n\n/** Parameters for fetching a novel series. */\nexport interface NovelSeriesParams {\n /** ID of the novel series to fetch. */\n seriesId: number\n /** Order of the last novel already seen; used for cursor-based pagination. */\n lastOrder?: number\n}\n\n/** Parameters for adding a novel bookmark. */\nexport interface NovelBookmarkAddParams {\n /** ID of the novel to bookmark. */\n novelId: number\n /** Bookmark visibility (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** Tags to attach to the bookmark. */\n tags?: string[]\n}\n\n/** Parameters for removing a novel bookmark. */\nexport interface NovelBookmarkDeleteParams {\n /** ID of the novel to remove from bookmarks. */\n novelId: number\n}\n\n/** Methods for the novel API namespace. */\nexport class NovelResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a single novel by ID.\n * GET /v2/novel/detail\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * const result = await client.novels.detail({ novelId: 67890 })\n * if (result.isOk) {\n * console.log(result.value.novel.title)\n * } else {\n * console.error(result.error)\n * }\n * ```\n */\n detail(\n params: NovelDetailParams\n ): ResultAsync<NovelDetailResponse, PixivError> {\n return this.#http.get<NovelDetailResponse>(\n '/v2/novel/detail',\n buildParams({ novelId: params.novelId })\n )\n }\n\n /**\n * Fetches the WebView HTML for a novel.\n * GET /webview/v2/novel\n *\n * Returns the raw HTML page that the pixiv app renders in a WebView.\n * To extract the plain text, parse the returned HTML (e.g. strip tags).\n *\n * @param params - Request parameters\n */\n text(params: NovelTextParams): ResultAsync<string, PixivError> {\n return this.#http.get<string>(\n '/webview/v2/novel',\n // The webview endpoint uses the query parameter 'id', not 'novel_id'\n buildParams({ id: params.novelId })\n )\n }\n\n /**\n * Fetches related novels for a given novel.\n * GET /v1/novel/related\n *\n * @param params - Request parameters\n */\n related(\n params: NovelRelatedParams\n ): PaginatedResultAsync<NovelListPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelListPage>(\n '/v1/novel/related',\n buildParams({ novelId: params.novelId })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Searches for novels.\n * GET /v1/search/novel\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all results across pages\n * for await (const novel of client.novels.search({ word: 'fantasy' }).items()) {\n * console.log(novel.title)\n * }\n *\n * // Fetch only the first page\n * const page = await client.novels.search({ word: 'fantasy' })\n * if (page.isOk) {\n * console.log(page.value.novels.length)\n * }\n * ```\n */\n search(\n params: NovelSearchParams\n ): PaginatedResultAsync<NovelListPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelListPage>(\n '/v1/search/novel',\n buildParams({\n word: params.word,\n searchTarget: params.searchTarget ?? 'partial_match_for_tags',\n sort: params.sort ?? 'date_desc',\n filter: params.filter ?? 'for_ios',\n duration: params.duration,\n startDate: params.startDate,\n endDate: params.endDate,\n searchAiType: params.searchAiType,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches the novel ranking.\n * GET /v1/novel/ranking\n *\n * @param params - Request parameters\n */\n ranking(\n params: NovelRankingParams = {}\n ): PaginatedResultAsync<NovelListPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelListPage>(\n '/v1/novel/ranking',\n buildParams({\n mode: params.mode ?? 'day',\n filter: params.filter ?? 'for_ios',\n date: params.date,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches recommended novels.\n * GET /v1/novel/recommended\n *\n * @param params - Request parameters\n */\n recommended(\n params: NovelRecommendedParams = {}\n ): PaginatedResultAsync<NovelRecommendedPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelRecommendedPage>(\n '/v1/novel/recommended',\n buildParams({\n filter: params.filter ?? 'for_ios',\n includeRankingNovels: true,\n includePrivacyPolicy: true,\n offset: params.offset,\n maxBookmarkIdForRecommend: params.maxBookmarkIdForRecommend,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches a novel series.\n * GET /v2/novel/series\n *\n * @param params - Request parameters\n */\n series(\n params: NovelSeriesParams\n ): PaginatedResultAsync<NovelSeriesPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<NovelSeriesPage>(\n '/v2/novel/series',\n buildParams({ seriesId: params.seriesId, lastOrder: params.lastOrder })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Adds a novel bookmark.\n * POST /v2/novel/bookmark/add\n *\n * @param params - Request parameters\n */\n bookmarkAdd(\n params: NovelBookmarkAddParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({\n novelId: params.novelId,\n restrict: params.restrict ?? 'public',\n ...(params.tags ? { tags: params.tags } : {}),\n })\n return this.#http.post<Record<string, never>>(\n '/v2/novel/bookmark/add',\n body.toString()\n )\n }\n\n /**\n * Removes a novel bookmark.\n * POST /v1/novel/bookmark/delete\n *\n * @param params - Request parameters\n */\n bookmarkDelete(\n params: NovelBookmarkDeleteParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({ novelId: String(params.novelId) })\n return this.#http.post<Record<string, never>>(\n '/v1/novel/bookmark/delete',\n body.toString()\n )\n }\n}\n","/**\n * UserResource — methods for the user API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport type { ResultAsync } from '../result'\nimport {\n BookmarkRestrict,\n FollowRestrict,\n OSFilter,\n UserIllustType,\n} from '../options'\nimport type {\n PixivIllustItem,\n PixivNovelItem,\n PixivUserPreviewItem,\n UserBookmarksIllustPage,\n UserBookmarksNovelPage,\n UserDetailResponse,\n UserFollowingPage,\n UserIllustsPage,\n UserNovelsPage,\n} from '../types'\n\n// === Request param types ===\n\n/** Parameters for fetching a user's bookmarked illusts. */\nexport interface UserBookmarksIllustParams {\n /** ID of the user whose bookmarks to fetch. */\n userId: number\n /** Visibility of the bookmarks to return (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Limit results to bookmarks with this tag. */\n tag?: string\n /** Fetch bookmarks older than this bookmark ID (cursor-based pagination). */\n maxBookmarkId?: number\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's bookmarked novels. */\nexport interface UserBookmarksNovelParams {\n /** ID of the user whose bookmarks to fetch. */\n userId: number\n /** Visibility of the bookmarks to return (default: `\"public\"`). */\n restrict?: (typeof BookmarkRestrict)[keyof typeof BookmarkRestrict]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Limit results to bookmarks with this tag. */\n tag?: string\n /** Fetch bookmarks older than this bookmark ID (cursor-based pagination). */\n maxBookmarkId?: number\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's detail. */\nexport interface UserDetailParams {\n /** ID of the user to fetch. */\n userId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n}\n\n/** Parameters for fetching a user's illusts. */\nexport interface UserIllustsParams {\n /** ID of the user whose illusts to fetch. */\n userId: number\n /** Work type to filter by (omit to return both illusts and manga). */\n type?: (typeof UserIllustType)[keyof typeof UserIllustType]\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's novels. */\nexport interface UserNovelsParams {\n /** ID of the user whose novels to fetch. */\n userId: number\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for fetching a user's following list. */\nexport interface UserFollowingParams {\n /** ID of the user whose following list to fetch. */\n userId: number\n /** Visibility of the follows to return (default: `\"public\"`). */\n restrict?: (typeof FollowRestrict)[keyof typeof FollowRestrict]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Parameters for following a user. */\nexport interface UserFollowAddParams {\n /** ID of the user to follow. */\n userId: number\n /** Visibility of the follow (default: `\"public\"`). */\n restrict?: (typeof FollowRestrict)[keyof typeof FollowRestrict]\n}\n\n/** Parameters for unfollowing a user. */\nexport interface UserFollowDeleteParams {\n /** ID of the user to unfollow. */\n userId: number\n}\n\n/** Methods for the user bookmarks sub-namespace. */\nexport class UserBookmarksResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a user's bookmarked illusts.\n * GET /v1/user/bookmarks/illust\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all bookmarked illusts across pages\n * for await (const illust of client.users.bookmarks.illusts({ userId: client.userId }).items()) {\n * console.log(illust.title)\n * }\n *\n * // Resume from a saved cursor\n * import { parseNextUrl } from '@book000/pixivts'\n * const page = await client.users.bookmarks.illusts({ userId: client.userId })\n * if (page.isOk && page.value.nextUrl) {\n * const cursor = parseNextUrl(page.value.nextUrl)\n * const next = await client.users.bookmarks.illusts({\n * userId: client.userId,\n * maxBookmarkId: cursor.maxBookmarkId,\n * })\n * }\n * ```\n */\n illusts(\n params: UserBookmarksIllustParams\n ): PaginatedResultAsync<UserBookmarksIllustPage, PixivIllustItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserBookmarksIllustPage>(\n '/v1/user/bookmarks/illust',\n buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n filter: params.filter ?? 'for_ios',\n tag: params.tag,\n maxBookmarkId: params.maxBookmarkId,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches a user's bookmarked novels.\n * GET /v1/user/bookmarks/novel\n *\n * @param params - Request parameters\n *\n * @example\n * ```ts\n * // Iterate all bookmarked novels across pages\n * for await (const novel of client.users.bookmarks.novels({ userId: client.userId }).items()) {\n * console.log(novel.title)\n * }\n * ```\n */\n novels(\n params: UserBookmarksNovelParams\n ): PaginatedResultAsync<UserBookmarksNovelPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserBookmarksNovelPage>(\n '/v1/user/bookmarks/novel',\n buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n filter: params.filter ?? 'for_ios',\n tag: params.tag,\n maxBookmarkId: params.maxBookmarkId,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n}\n\n/** Methods for the user API namespace. */\nexport class UserResource {\n /** User bookmarks sub-namespace. */\n readonly bookmarks: UserBookmarksResource\n\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n this.bookmarks = new UserBookmarksResource(http)\n }\n\n /**\n * Fetches detailed profile information for a user.\n * GET /v1/user/detail\n *\n * @param params - Request parameters\n */\n detail(\n params: UserDetailParams\n ): ResultAsync<UserDetailResponse, PixivError> {\n return this.#http.get<UserDetailResponse>(\n '/v1/user/detail',\n buildParams({ userId: params.userId, filter: params.filter ?? 'for_ios' })\n )\n }\n\n /**\n * Fetches illusts posted by a user.\n * GET /v1/user/illusts\n *\n * @param params - Request parameters\n */\n illusts(\n params: UserIllustsParams\n ): PaginatedResultAsync<UserIllustsPage, PixivIllustItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserIllustsPage>(\n '/v1/user/illusts',\n buildParams({\n userId: params.userId,\n type: params.type,\n filter: params.filter ?? 'for_ios',\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n\n /**\n * Fetches novels posted by a user.\n * GET /v1/user/novels\n *\n * @param params - Request parameters\n */\n novels(\n params: UserNovelsParams\n ): PaginatedResultAsync<UserNovelsPage, PixivNovelItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserNovelsPage>(\n '/v1/user/novels',\n buildParams({\n userId: params.userId,\n filter: params.filter ?? 'for_ios',\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.novels\n )\n }\n\n /**\n * Fetches the list of users that a user is following.\n * GET /v1/user/following\n *\n * @param params - Request parameters\n */\n following(\n params: UserFollowingParams\n ): PaginatedResultAsync<UserFollowingPage, PixivUserPreviewItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<UserFollowingPage>(\n '/v1/user/following',\n buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.userPreviews\n )\n }\n\n /**\n * Follows a user.\n * POST /v1/user/follow/add\n *\n * @param params - Request parameters\n */\n followAdd(\n params: UserFollowAddParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({\n userId: params.userId,\n restrict: params.restrict ?? 'public',\n })\n return this.#http.post<Record<string, never>>(\n '/v1/user/follow/add',\n body.toString()\n )\n }\n\n /**\n * Unfollows a user.\n * POST /v1/user/follow/delete\n *\n * @param params - Request parameters\n */\n followDelete(\n params: UserFollowDeleteParams\n ): ResultAsync<Record<string, never>, PixivError> {\n const body = buildParams({ userId: String(params.userId) })\n return this.#http.post<Record<string, never>>(\n '/v1/user/follow/delete',\n body.toString()\n )\n }\n}\n","/**\n * MangaResource — methods for the manga API namespace.\n */\nimport type { HttpClient } from '../http'\nimport { buildParams } from '../params'\nimport { PaginatedResultAsync } from '../paginated'\nimport { OSFilter } from '../options'\nimport type { MangaRecommendedPage, PixivIllustItem } from '../types'\n\n/** Parameters for fetching recommended manga. */\nexport interface MangaRecommendedParams {\n /** OS filter to apply (default: `\"for_ios\"`). */\n filter?: (typeof OSFilter)[keyof typeof OSFilter]\n /** Zero-based offset for pagination. */\n offset?: number\n}\n\n/** Methods for the manga API namespace. */\nexport class MangaResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches recommended manga.\n * GET /v1/manga/recommended\n *\n * @param params - Request parameters\n */\n recommended(\n params: MangaRecommendedParams = {}\n ): PaginatedResultAsync<MangaRecommendedPage, PixivIllustItem> {\n return PaginatedResultAsync.fromResultAsync(\n this.#http.get<MangaRecommendedPage>(\n '/v1/manga/recommended',\n buildParams({\n filter: params.filter ?? 'for_ios',\n includeRankingIllusts: true,\n includePrivacyPolicy: true,\n offset: params.offset,\n })\n ),\n this.#http,\n (page) => page.illusts\n )\n }\n}\n","/**\n * UgoiraResource — methods for the ugoira API namespace.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport { buildParams } from '../params'\nimport type { ResultAsync } from '../result'\nimport type { UgoiraMetadataResponse } from '../types'\n\n/** Parameters for fetching ugoira metadata. */\nexport interface UgoiraMetadataParams {\n /** ID of the ugoira illust whose metadata to fetch. */\n illustId: number\n}\n\n/** Methods for the ugoira API namespace. */\nexport class UgoiraResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches ugoira metadata (ZIP URL and per-frame timings).\n * GET /v1/ugoira/metadata\n *\n * @param params - Request parameters\n */\n metadata(\n params: UgoiraMetadataParams\n ): ResultAsync<UgoiraMetadataResponse, PixivError> {\n return this.#http.get<UgoiraMetadataResponse>(\n '/v1/ugoira/metadata',\n buildParams({ illustId: params.illustId })\n )\n }\n}\n","/**\n * ImageResource — helpers for fetching pixiv CDN images.\n */\nimport type { HttpClient } from '../http'\nimport type { PixivError } from '../errors'\nimport type { ResultAsync } from '../result'\n\n/** Methods for fetching pixiv images. */\nexport class ImageResource {\n readonly #http: HttpClient\n\n constructor(http: HttpClient) {\n this.#http = http\n }\n\n /**\n * Fetches a pixiv image.\n *\n * Uses a browser User-Agent and Referer (required for pixiv CDN).\n * No Authorization header is sent.\n *\n * @param imageUrl - Full CDN image URL\n */\n fetch(imageUrl: string): ResultAsync<Response, PixivError> {\n return this.#http.fetchImage(imageUrl)\n }\n}\n","/**\n * PixivClient — main entry point for the @book000/pixivts library.\n *\n * @example\n * ```ts\n * const client = await PixivClient.of(process.env.PIXIV_REFRESH_TOKEN!)\n * const result = await client.illusts.detail({ illustId: 12345 })\n * if (result.isOk) console.log(result.value.illust.title)\n * ```\n */\n\nimport { AuthManager } from './auth'\nimport { HttpClient } from './http'\nimport type { ResponseInterceptor } from './interceptor'\nimport type { RateLimitRetryOptions } from './http'\nimport { IllustResource } from './resources/illusts'\nimport { NovelResource } from './resources/novels'\nimport { UserResource } from './resources/users'\nimport { MangaResource } from './resources/manga'\nimport { UgoiraResource } from './resources/ugoira'\nimport { ImageResource } from './resources/images'\n\n/** Options for constructing a {@link PixivClient}. */\nexport interface PixivClientOptions {\n /** Rate-limit retry configuration. */\n retry?: Partial<RateLimitRetryOptions>\n /** Optional interceptor called after each successful response (DB seam). */\n onResponse?: ResponseInterceptor\n}\n\n/**\n * Main client for the pixiv API.\n *\n * Create an instance via {@link PixivClient.of} — the constructor is private\n * because initialisation requires an async token refresh.\n */\nexport class PixivClient {\n /** Illust API namespace. */\n readonly illusts: IllustResource\n /** Novel API namespace. */\n readonly novels: NovelResource\n /** User API namespace. */\n readonly users: UserResource\n /** Manga API namespace. */\n readonly manga: MangaResource\n /** Ugoira API namespace. */\n readonly ugoira: UgoiraResource\n /** Image fetch helpers. */\n readonly images: ImageResource\n\n readonly #auth: AuthManager\n\n private constructor(auth: AuthManager, http: HttpClient) {\n this.#auth = auth\n this.illusts = new IllustResource(http)\n this.novels = new NovelResource(http)\n this.users = new UserResource(http)\n this.manga = new MangaResource(http)\n this.ugoira = new UgoiraResource(http)\n this.images = new ImageResource(http)\n }\n\n /**\n * Numeric user ID of the authenticated account.\n *\n * Available immediately after {@link PixivClient.of} resolves.\n * The pixiv OAuth endpoint returns the ID as a string; this getter\n * normalises it to `number` for consistency with resource method params\n * (e.g. `UserBookmarksIllustParams.userId`).\n *\n * @example\n * ```ts\n * const client = await PixivClient.of(refreshToken)\n * const bookmarks = await client.users.bookmarks.illusts({ userId: client.userId })\n * ```\n */\n get userId(): number {\n const id = Number(this.#auth.userId)\n if (Number.isNaN(id)) {\n throw new TypeError(`Invalid userId: \"${this.#auth.userId}\"`)\n }\n return id\n }\n\n /**\n * Returns the current OAuth access token.\n *\n * The access token is short-lived and changes after each call to\n * {@link PixivClient.of} and after each automatic token refresh triggered\n * by a 401 response.\n *\n * @returns The current bearer access token string\n */\n getAccessToken(): string {\n return this.#auth.accessToken\n }\n\n /**\n * Returns the current OAuth refresh token.\n *\n * The refresh token is long-lived and is used to obtain new access tokens.\n * It may rotate after a successful token refresh.\n *\n * @returns The current refresh token string\n */\n getRefreshToken(): string {\n return this.#auth.refreshToken\n }\n\n /**\n * Creates a PixivClient by refreshing the given token.\n *\n * @param refreshToken - Pixiv refresh token\n * @param options - Optional retry and response interceptor configuration\n * @returns A fully initialised {@link PixivClient}\n */\n static async of(\n refreshToken: string,\n options?: PixivClientOptions\n ): Promise<PixivClient> {\n const auth = await AuthManager.login(refreshToken)\n const http = new HttpClient(auth, options)\n return new PixivClient(auth, http)\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@book000/pixivts",
3
- "version": "0.60.2",
3
+ "version": "0.61.0",
4
4
  "description": "pixiv Unofficial API Library for TypeScript",
5
5
  "keywords": [
6
6
  "pixiv",