diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c7a6458..2d42c78b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: lint: timeout-minutes: 10 name: lint - runs-on: ${{ github.repository == 'stainless-sdks/onlyfansapi-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -26,7 +26,7 @@ jobs: - name: Set up Node uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: '20' + node-version: '24' - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 @@ -42,7 +42,7 @@ jobs: build: timeout-minutes: 5 name: build - runs-on: ${{ github.repository == 'stainless-sdks/onlyfansapi-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') permissions: contents: read @@ -53,7 +53,7 @@ jobs: - name: Set up Node uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: '20' + node-version: '24' - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 @@ -87,7 +87,7 @@ jobs: test: timeout-minutes: 10 name: test - runs-on: ${{ github.repository == 'stainless-sdks/onlyfansapi-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -95,7 +95,7 @@ jobs: - name: Set up Node uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: '20' + node-version: '24' - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index 36638c43..9946a640 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Node uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 with: - node-version: '20' + node-version: '24' - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2be9c43c..0ee8c012 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.2.0" + ".": "0.3.0" } diff --git a/.stats.yml b/.stats.yml index 46252709..d44c6514 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 266 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/onlyfansapi/onlyfansapi-b9b67bf32f2b519e3230760d49e20c30e66107a6991f1a1f1a108f6c578c2fde.yml -openapi_spec_hash: da475361c28b843ddd1b45bbea333762 -config_hash: a522aab696c4535f715ae59ddfe8222f +configured_endpoints: 265 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/onlyfansapi/onlyfansapi-136aa659b2d54ff3c25f6b35164a84db20dba3a7b513bf2c72544bbdb13ce6c1.yml +openapi_spec_hash: 94a889e758a4baf8e3b699a6cbe17d01 +config_hash: 397c91e15c0024f8b5bbed9b82c2348c diff --git a/CHANGELOG.md b/CHANGELOG.md index fbadecd7..a85d2758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,314 @@ # Changelog +## 0.3.0 (2026-09-08) + +Full Changelog: [v0.2.0...v0.3.0](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/compare/v0.2.0...v0.3.0) + +### Features + +* **api:** api update ([bcb4333](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/bcb433306b894fa441069b82ada209f8b69cdaf0)) +* **api:** api update ([aba20a2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/aba20a2a3bb3ee1c0042d788444fd028177bbad2)) +* **api:** api update ([4f6a4b1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4f6a4b1123fbd30d6dea9fe29d8097c66dbd56b9)) +* **api:** api update ([e6a3744](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e6a3744a49c67c07a13b754da25f966dd575fb8f)) +* **api:** api update ([bea549c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/bea549cdb8bbc70102d7a003a34d7531267cf977)) +* **api:** api update ([5fcccc3](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5fcccc3983bc22bbed85d777bd3e531d001e158a)) +* **api:** api update ([b6faa83](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b6faa832a3256aff91e88d97f7f4a84010af5e8b)) +* **api:** api update ([42e360e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/42e360e01891aa83c6094b5818a20d47661c9c5b)) +* **api:** api update ([86dcb4a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/86dcb4aae6c967c4f3aed9042601d443afd669d2)) +* **api:** api update ([54d9204](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/54d9204d9e9b9f7dd0df69b1eefb7ffe9fd115c3)) +* **api:** api update ([26bfd2f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/26bfd2f4fa3ec0dac275ad7118b76c23e0ed6795)) +* **api:** api update ([d3a1a78](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d3a1a78dbe6800f3c034a2d8cce76b5ac5f087b1)) +* **api:** api update ([4ee500f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4ee500fa05f6b57589247227e377be2215b1665b)) +* **api:** api update ([a6414f2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a6414f263b35e28e282fcf7224441f0466c91a2d)) +* **api:** api update ([e3b66fe](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e3b66fe32d50aea4cb31cf3c38366b2b73800057)) +* **api:** api update ([4506117](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4506117f2093186adb059dff68bd87ea28a83d16)) +* **api:** api update ([6138edb](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/6138edbfd3ca4b4aa4849c256e25c822bb49d096)) +* **api:** api update ([83e3d6c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/83e3d6cfeca9fa359cc23e382a3b64246bda8850)) +* **api:** api update ([4e91ca8](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4e91ca8fa4a834aafc43098531fba13d3674c034)) +* **api:** api update ([aa4aa54](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/aa4aa540d93c20e31b576057e1e581310c3cfa69)) +* **api:** api update ([4fbb859](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4fbb859afb5187affb78d8da08e0e80ac9b88f08)) +* **api:** api update ([d038dcc](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d038dccb3bdfc62607294da36196ecb7ed63a345)) +* **api:** api update ([32a2de4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/32a2de499831f648826e8beddc398476bba76b38)) +* **api:** api update ([60a12b7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/60a12b7b75674ce51d75070e1099a5985ad0301f)) +* **api:** api update ([36aef4d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/36aef4d8ffb785813184c5c13ead1c0959ef7c46)) +* **api:** api update ([2c9a767](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2c9a767c308cefb16cdd1faabdc5732962dddee3)) +* **api:** api update ([87db0e8](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/87db0e87c1940c5a141ae30927935909075e2cc6)) +* **api:** api update ([8824606](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8824606bff272556da8254269911652611c6494f)) +* **api:** api update ([e123144](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e1231449cce515de8d5492124cfa72979810b298)) +* **api:** api update ([61713fa](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/61713fa30b530675bc926f819d2b9d2ed3e2b62b)) +* **api:** api update ([3844bbe](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3844bbe2ec05baae1dec0c56eb629ac7a5cf90f2)) +* **api:** api update ([970f3f4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/970f3f4d95b07dee453b6fa18a18cb5757f87d4e)) +* **api:** api update ([0b6215c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/0b6215cc98b68b7f505624c951cb03f99b8257ef)) +* **api:** api update ([c2841f3](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c2841f3ce1e2abfa30b7e781222c63b713693606)) +* **api:** api update ([f9a031e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f9a031ebc6dca5941112d5fb26aadea0322d8596)) +* **api:** api update ([e2dbf11](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e2dbf119a2686aa6eb23895b1b978cc17eb3d29a)) +* **api:** api update ([005cae9](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/005cae94d28d256cd957ef3814b8cf780465977c)) +* **api:** api update ([9f58d7d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9f58d7d2f16795ea0c8032507a888b1820aba184)) +* **api:** api update ([c4ae3cb](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c4ae3cb4ef846f5424a4b561a18273a39103e8d0)) +* **api:** api update ([a574d06](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a574d06c31db307fd5edf3e80eb6a77dc91ac7b1)) +* **api:** api update ([f889ebc](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f889ebc0653e173b528e13b32b7fcbb96bf83740)) +* **api:** api update ([f2a8182](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f2a81829408791c7ffa3a2ad47aa78dd3d67b280)) +* **api:** api update ([493f801](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/493f801f4b21bd5ee26815332f97c7f93abfbba8)) +* **api:** api update ([a7d36e3](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a7d36e3f72d5f916ed4521bdd378f41db8f384c4)) +* **api:** api update ([905eab1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/905eab1e668773fa567ce2d8cf8a83fc88841115)) +* **api:** api update ([a641d4f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a641d4f8fcaa58b4b6a7881042350c4ea21c6c78)) +* **api:** api update ([44b45d6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/44b45d61afec8819406fdd26cc993bc4092f91a8)) +* **api:** api update ([c68358e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c68358e391ce5e376e2cbc085657bba13fbd7aec)) +* **api:** api update ([58f7b05](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/58f7b05ddf001c0edf8cb69e384f39fe6bb38a46)) +* **api:** api update ([7b11647](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/7b11647efd4ba6b17397a296dcd6bb96ce6fa4df)) +* **api:** api update ([b6cf87a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b6cf87a37941f0680d384189070b5644a6b65b0c)) +* **api:** api update ([8f8fe16](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8f8fe16deb2de4e410c4979ff5bd248f9deab6df)) +* **api:** api update ([f00ecc3](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f00ecc30014ab7a63a181befc844c94237501f41)) +* **api:** api update ([9d1bb6a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9d1bb6ad180f82f8a5c66db91aeabb1ca2a553a7)) +* **api:** api update ([3d296db](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3d296dbdabc88d9cbc48cc7bf51f0f21862cc248)) +* **api:** api update ([a5222ce](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a5222cef4658f92d1ae7d43187ca41125be95d3c)) +* **api:** api update ([192f58c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/192f58c964898b8fb203ba707c3df8185274987c)) +* **api:** api update ([62a9f53](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/62a9f53e829445b3b556bc7293decbd358917437)) +* **api:** api update ([fb5c3df](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/fb5c3dfd7fa7624e9374447708c5d5e6855727b6)) +* **api:** api update ([69a949e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/69a949ec387188986067a1bdf170c493ff28c726)) +* **api:** api update ([337f7a2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/337f7a2125ea799932b78e9ed9ae1ccada65c579)) +* **api:** api update ([2cbabdb](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2cbabdb14ea2688c82f44997f135f0a72dc2d16e)) +* **api:** api update ([4c7a93f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4c7a93f8c606efc8af1526c6f48cb7c89c36be2e)) +* **api:** api update ([9ce2aa6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9ce2aa6f721ac0d29e9df40842d73b31e79ff1dd)) +* **api:** api update ([5cfd594](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5cfd59461d7c5dab03b9494ae7fed050d32245af)) +* **api:** api update ([fff8441](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/fff844158588c4f46f2852dde860146665c9fc3a)) +* **api:** api update ([1d9a0c5](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/1d9a0c5912229874240e0d908027166e3ecaaede)) +* **api:** api update ([38520d5](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/38520d5a53aee50ab5e63fd681dbe41f60975e32)) +* **api:** api update ([5aa4052](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5aa40521b3ce9da183fd4a085e212a9e9ceeb9dc)) +* **api:** api update ([2d64f1c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2d64f1c452749123bedd72bfa483ddc8581040a7)) +* **api:** api update ([b171312](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b1713128fa95a05720ed334d86b6857879d24e11)) +* **api:** api update ([417ad1b](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/417ad1be06dca832aaa46e36381283a7aafb0ee5)) +* **api:** api update ([5b06658](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5b0665890241f975296e598ba372798e2503c50e)) +* **api:** api update ([272c179](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/272c179ea75ee89878cdcb266cdab091da482665)) +* **api:** api update ([ec2634a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ec2634a995a791f6ccddc7b67f7d4c6d1bb8f7e6)) +* **api:** api update ([3e0a345](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3e0a345062bac966959f3b7721f0406ff69fdab5)) +* **api:** api update ([31ed287](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/31ed2877f1d4402b4754a182aa5879aab7bd385a)) +* **api:** api update ([689d233](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/689d233e300522110065ec175be643ca2ee4e8e0)) +* **api:** api update ([c750efd](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c750efdb9a5de976d683ae46f4eb413c99b93418)) +* **api:** api update ([bbd60e4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/bbd60e4b43b5ddb54f016d77f82257c518d5ebd6)) +* **api:** api update ([147758e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/147758e76eab39656b84c04d4ae34e603c5df1df)) +* **api:** api update ([a0e836d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a0e836d4ce3d6f281480a96f58fca44fd284396c)) +* **api:** api update ([89c5e42](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/89c5e42cef884a79b12f94e46ef57db7fbc0a7ff)) +* **api:** api update ([3afd696](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3afd6962de92809cc874cc9d7063a582cadeb249)) +* **api:** api update ([ce629ee](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ce629ee6c9301c4f995ecc6f759ec78d6bf0cb4b)) +* **api:** api update ([b788b3d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b788b3da30bf45bebfae380ea42df969e60ac239)) +* **api:** api update ([9f26b20](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9f26b20b4f33f4614f5f1d93be7af8d73db1aa19)) +* **api:** api update ([deed586](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/deed586cf07f491301b374e8e13ee7c2eb72c3c6)) +* **api:** api update ([86b81e9](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/86b81e920e43c914adbf33ef58cfd89d27a8f340)) +* **api:** api update ([af3ad4c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/af3ad4c1ebacff3450d4f5736a8ff8d9ae5bc00f)) +* **api:** api update ([56b70f4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/56b70f412fbc16fd91626258a24337328a2424a9)) +* **api:** api update ([e5bdf55](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e5bdf55f24d1119c700471c6c1a86e1796d4cb99)) +* **api:** api update ([580fdf8](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/580fdf8dc64588806a999891dd725c2a85b294d4)) +* **api:** api update ([fa1a596](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/fa1a596d5423fdb21a8d8ed08f7a3c0fe2fe9e5b)) +* **api:** api update ([782dc0d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/782dc0dbbf587cd1082c4ce1a6e0d3f64bb33e17)) +* **api:** api update ([024e41a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/024e41a0be2fce20ae5c917351a0bb588c7180d5)) +* **api:** api update ([0ef2e1a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/0ef2e1a40a856f93967721e3d6748bb778c83312)) +* **api:** api update ([5192b8b](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5192b8b5ecd9af3a7cc6fea97f9dd2c0f069a505)) +* **api:** api update ([2ef1c9c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2ef1c9ca97d00f839d2b618e6d79c1b2a95b059d)) +* **api:** api update ([cc79dff](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/cc79dff2e07c30103bf172515605cc1f8dfd1ec2)) +* **api:** api update ([495397f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/495397f34f312169309ee21c6ceefe6ef59e14e3)) +* **api:** api update ([e61ad5f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e61ad5f0e14e7991085277d49c3e875959b222d7)) +* **api:** api update ([2e8e9b1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2e8e9b181be5c729cc18568fec26ed15d1e6f99f)) +* **api:** api update ([270dc0a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/270dc0a17050b01c3be1bf3176bb2159fc586d9b)) +* **api:** api update ([37abcf7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/37abcf7ea60372babdf15da9e3ec8ff89f9645ba)) +* **api:** api update ([6f6a22f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/6f6a22f8841b6103b5e64218f87ba89928cd8c08)) +* **api:** api update ([56e07ec](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/56e07ec66b6dd86d20bf617e7d10a84a584863b2)) +* **api:** api update ([49ae0d6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/49ae0d642eed9ce0c95ab8c8ed5e537996ae348b)) +* **api:** api update ([88f35b7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/88f35b75602f27ba7892484e974ae39195226048)) +* **api:** api update ([3140ed0](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3140ed05e163af0634af8f1a7c9dbc389467e0b7)) +* **api:** api update ([cd234d7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/cd234d799b97aed2688b2b13f137f7322b68e2f0)) +* **api:** api update ([d09e999](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d09e99944b3226690bdf6b54fed70de72f04bd23)) +* **api:** api update ([b65da15](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b65da15c20c990c6fb8a4d5a925ea61ccae6c042)) +* **api:** api update ([f93f8b1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f93f8b18a19bf2eaf9f64f27105a1a75df13d008)) +* **api:** api update ([8624c42](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8624c42cc31061225991977ef151fdd9b1bf7085)) +* **api:** api update ([8969b09](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8969b09d7f36c441be1a0c117c375822ed957a0a)) +* **api:** api update ([60f7448](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/60f7448ee6c34b836224b7d1ee8041bcd0e8e3cd)) +* **api:** api update ([08ca129](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/08ca12910ff21d6af495d29ee1fdce75acefdcda)) +* **api:** api update ([e9b60e6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e9b60e6b381f666d18746007c2dd51550611e6a6)) +* **api:** api update ([aa0d198](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/aa0d19873f9c3a6b39ced1813d89e3919b743efa)) +* **api:** api update ([2a32b42](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2a32b4252053b9cd5ac680dd0296ed5732c46eea)) +* **api:** api update ([3ec4e50](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3ec4e503beaac3988ff69f19e283fbd69f6a8d6d)) +* **api:** api update ([869dee7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/869dee73823e8a6076f090742b8f6827dfc591d2)) +* **api:** api update ([987d63e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/987d63e4908c296387cd03b34ccd13fe8677d1fc)) +* **api:** api update ([6fc5b34](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/6fc5b34b7d825ddbfd22b842a413fd895b8393f6)) +* **api:** api update ([aeb9cd7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/aeb9cd7289ea350aed75a424f338fa7bc4dc04ab)) +* **api:** api update ([2c214c9](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2c214c977e81b568453bedfca9e20ba71eded732)) +* **api:** api update ([46bb310](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/46bb3108ad58222fabcfd3534a76b890c4bbad49)) +* **api:** api update ([d6863b6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d6863b6b734fab1c467e555b018920fac0076903)) +* **api:** api update ([d378396](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d378396db52989a50573241f9a856b0d973b3376)) +* **api:** api update ([27db2cf](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/27db2cf5729dbb3765e0afcb0175f5e6a1dc76de)) +* **api:** api update ([61fcffa](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/61fcffa48a2eaf0bfa164627b046647462480e5c)) +* **api:** api update ([873ac7b](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/873ac7b51bb7b008c5a97394f53caee5d5ec05d4)) +* **api:** api update ([f76a4bd](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f76a4bd2540fb40cb5d7e4db915d1872d97c9db8)) +* **api:** api update ([8f2145c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8f2145c25ae5cd41c17329a14316beb4eca2976b)) +* **api:** api update ([60fc089](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/60fc0896052523b9940304ab45e2715a77792075)) +* **api:** api update ([5847a3c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5847a3c64f544bdecb9d71e842d159845733eb9e)) +* **api:** api update ([56ece82](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/56ece823f9f9910690d12902501dd5b6dde76cfb)) +* **api:** api update ([8bce9f2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8bce9f27a81899c50c0b58b6c561fc365ad0ae64)) +* **api:** api update ([a641005](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a6410058d0a2b910ba4a5c164e587d880ef77847)) +* **api:** api update ([00d94b2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/00d94b24bb5fc7293f037723ed5cc24f729e6f0f)) +* **api:** api update ([a4d1f39](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a4d1f392afd9e3a2e3d642d7c1efcf0e0d5b3597)) +* **api:** api update ([44bece2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/44bece23d2e3864b19f6ef18f33357dba26bd391)) +* **api:** api update ([8d91b47](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8d91b47ac5079a7a3b6d4335fdd136cd8b37b465)) +* **api:** api update ([51c1702](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/51c1702a88ef83bf91f55c6233a08a733fb99182)) +* **api:** api update ([1a1c5d2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/1a1c5d2895fccf54710292faf345c839efc21910)) +* **api:** api update ([0729449](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/07294490fa8a639ae9cd7afae4e99cc6ad73716c)) +* **api:** api update ([1c8ed61](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/1c8ed614ee0a88bbaa8fd04da0c83be0b9e6086f)) +* **api:** api update ([09a7095](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/09a70956c32f0f132d7efc68eb3aa42719035ea7)) +* **api:** api update ([6110f07](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/6110f07a409b9fb1ea72f6947484295a4b6ec1cb)) +* **api:** api update ([ccab2a9](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ccab2a9e458023e5a5455d0e51a0f2792a4b7d6a)) +* **api:** api update ([c667de1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c667de1845506fe11beec46e6cea9acf9923d9e6)) +* **api:** api update ([ca3fa7d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ca3fa7ddbcd49c8605d373b58ba67b8274e15d12)) +* **api:** api update ([f69e7eb](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f69e7eb681f044222c5782ef01a64602fdf6c6ab)) +* **api:** api update ([ce1a135](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ce1a135817d04e5c3117460575c6020b04abffb1)) +* **api:** api update ([683e0b1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/683e0b105d4102f1bd666ae01daed62ac7c8790b)) +* **api:** api update ([fbf7e77](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/fbf7e77f0d648207ee5fc2d9bb71aee2b62a02e2)) +* **api:** api update ([838cd76](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/838cd7643d9b8deacf7791e53832be01e406b8b2)) +* **api:** api update ([b6c0885](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b6c0885f19707df9d98c54b6f373e6df0fe4a798)) +* **api:** api update ([de18ad7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/de18ad7686fff09d042877f87f0b6916ed9f850d)) +* **api:** api update ([1860995](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/186099583e86b9c51d6816952ec7b5e587868857)) +* **api:** api update ([057e021](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/057e021b08ec70e5fb1a0dc1c90e1ee893d9bdd9)) +* **api:** api update ([f219bef](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f219bef63b654d615304ee680f4fad139fbc049a)) +* **api:** api update ([9eb0b72](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9eb0b72e2dbd58b45ff9fb8dcc584d1c81df100f)) +* **api:** api update ([2e87746](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2e87746284c269b0315ccea719df1c52acf9e2ee)) +* **api:** api update ([a933eb6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a933eb65500d19109bedc378d3f3c1798bc27327)) +* **api:** api update ([78a6086](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/78a6086fd29d9f7f05a2aceb3398c98cd088662f)) +* **api:** api update ([6cfc271](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/6cfc2713a3bc70d590ae9108034fb0ef0cf91efd)) +* **api:** api update ([9fe6eae](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9fe6eaeca808b011253e00774430bc183c67f9e8)) +* **api:** api update ([5ddb40a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5ddb40a3dbd792ee33ab4e16d3bfa71459fdb0c0)) +* **api:** api update ([4760ed2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4760ed26064c793f74b4bf703af45d7fd29c87b1)) +* **api:** api update ([97fa1f7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/97fa1f7abc78795df6a97f76803ea98e0464f73a)) +* **api:** api update ([f64165c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f64165c927f64b9a71efa777cc9db3017b8be03b)) +* **api:** api update ([97c4d97](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/97c4d977ffa0de991bb420ab5227e0de2ce608f8)) +* **api:** api update ([148c5be](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/148c5be9ecaf607a045aaa8de69b445b32b42579)) +* **api:** api update ([66e3ff6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/66e3ff6099d06788a97beb18b25f81ace59f621a)) +* **api:** api update ([e4b6686](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e4b66860a66a2041ffbf5ea8a389e3f1381c812e)) +* **api:** api update ([3038a94](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3038a9435ec5a252da6402c6086a48de0f2f9e8a)) +* **api:** api update ([8b69c42](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8b69c4237e6944a1a70dab3bbdd860084565d8b7)) +* **api:** api update ([2afbb35](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2afbb351ea9dc6775eaf9d153287c5f2c0f3db8f)) +* **api:** api update ([56e0cc3](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/56e0cc3c3854b1d5c5b6c5bc4a7efb1374778459)) +* **api:** api update ([3238886](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/32388862eff60330248c922e532ab55ad96f56fb)) +* **api:** api update ([23a3de0](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/23a3de0f20ebb26e5f465052efa8b6150f23eee1)) +* **api:** api update ([2644339](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/264433997b883b834866128e11a1c82ccd34e029)) +* **api:** api update ([d9d3274](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d9d3274e6e95514d06931ce67e32857537395713)) +* **api:** api update ([955f228](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/955f228cb735459ac88dc456e0c3cc373875eba4)) +* **api:** api update ([8674431](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8674431ec34f4908501f16a06ca18e3578b62bb0)) +* **api:** api update ([2410b93](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2410b936bb45023df611d5d8413e00f1ee48f8c0)) +* **api:** api update ([abf8dba](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/abf8dba90fb21497883acf3603107a8eaec6181a)) +* **api:** api update ([98972c7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/98972c77e930a545b38bd36266cf4f698d6c54ea)) +* **api:** api update ([a613f4c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a613f4c7ef30e0ae4ba0535b69b09ddb1f9bcfbd)) +* **api:** api update ([c4e478e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c4e478e44edaa13dae27abc3d12c31efa90cee4d)) +* **api:** api update ([95f1dfb](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/95f1dfbb8dc2d031124c0cdd4a88f9b0b03fc7bf)) +* **api:** api update ([778f909](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/778f909697924ee12cde9d3e077b06d50be2e6c2)) +* **api:** api update ([8eb5a2c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8eb5a2cebf48c593a0bcb678f932079c9a21b40a)) +* **api:** api update ([a235e0f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a235e0f9f69796efa1dae6706a0aab68691d5e82)) +* **api:** api update ([f9a5724](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f9a5724970299d7be7ac5ed5e9f006413deb455f)) +* **api:** api update ([ee2c0d7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ee2c0d776f70e34442181bb355bccda787a756b9)) +* **api:** api update ([6b4c186](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/6b4c186dec4378e46c32c7f27948f5699c6a80fd)) +* **api:** api update ([86f8ba8](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/86f8ba812c11263ecd6c6e207ea255fcbc9d0ff0)) +* **api:** api update ([3b4c759](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3b4c759f314a0f6ca3dc79a0e7880db08bf0b02b)) +* **api:** api update ([316d824](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/316d82489708356f77ff704c63fd5130d9f8254e)) +* **api:** api update ([58d1f67](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/58d1f67f10575b1d9bc3fa50ae9dbb03c38ed255)) +* **api:** api update ([c55e299](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c55e2999f032401ef6cba186e6cfd05153b61e6a)) +* **api:** api update ([8829b3d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8829b3d3a3539a166c1cb62d1c350736121cf57c)) +* **api:** api update ([37d10c0](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/37d10c068743a3535f8677cd0903ba3fb74f1d29)) +* **api:** api update ([c4bd5b1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c4bd5b1fb739e27c9f3fc9fb56c023961f203598)) +* **api:** api update ([b7c1073](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b7c10733fedd5451641f86bb5110b4e961fc0d72)) +* **api:** api update ([4977171](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/497717178c8f21ac5d53cd649935e386943c7001)) +* **api:** api update ([c2716dd](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c2716dd0d249e110eda8fceacb15ecf62226c6a0)) +* **api:** api update ([e99b7a5](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e99b7a5e42bf4401462d1857df9c7dd2818259c6)) +* **api:** api update ([d40bc24](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d40bc248e2007524825da5e11411937106e84ae5)) +* **api:** api update ([ea37ee1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ea37ee11911649f40b998d54dd4a8b7ac584eef5)) +* **api:** api update ([38a5647](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/38a56478411ff2974e676c6d1ca82d16eff698a0)) +* **api:** api update ([f7ee288](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f7ee2880456193addd601b5c5688cdba838bc66e)) +* **api:** api update ([20e3d06](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/20e3d06c1ace9398301ba5453afe10f7304f524e)) +* **api:** api update ([8e3cd6f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8e3cd6f63633c2099203013eab8adfd00993b510)) +* **api:** api update ([16bb725](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/16bb72544eedd4aea207360fbafaef6b2a022984)) +* **api:** api update ([7e379ae](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/7e379ae329d208fb7dec30a45a90575e8b2556bb)) +* **api:** api update ([bf50100](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/bf50100ec625d9b035aa16871e9281b13cc2e037)) +* **api:** api update ([880fdc1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/880fdc106d2ffecd7d9167d24279707fbe4b141e)) +* **api:** api update ([9897ca1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9897ca1b62bc83e7275c43f960682253265cfd21)) +* **api:** api update ([203522d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/203522d703c42cdb8c03e1e2e134b1fb0b36790e)) +* **api:** api update ([c85defa](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c85defafcf6fcb645823f6af12b1df6dc3231f51)) +* **api:** api update ([37abea6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/37abea676a67e8b07ecdee2ae967bbbc57e328ec)) +* **api:** api update ([dc7480e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/dc7480e8cef2e141df3f6bbc1aae1d3da10d7b8c)) +* **api:** api update ([9aae0b0](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9aae0b0ce7271c4d0f37d9e42457cbed86552a17)) +* **api:** api update ([f3b60cf](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f3b60cf920fcdb2779315eaa49a94b3030b8bbb4)) +* **api:** api update ([d5a171e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/d5a171e03d462137a5b217891711ff938e5f1700)) +* **api:** api update ([85c1517](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/85c1517138e5dc37a56f405d31363d9b2a9dee89)) +* **api:** api update ([8bed78d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8bed78da3c4bd1f286aa441b65576dafbd985ae6)) +* **api:** api update ([e928819](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e9288199b8a3ea07445850bfb8ab109a5611f2ff)) +* **api:** api update ([e8f55e4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e8f55e499778343f80fc11b423598ea1148f0881)) +* **api:** api update ([b1d6f19](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b1d6f198688ba2d1b5aef8d12b65376ea431178f)) +* **api:** api update ([0e64ad9](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/0e64ad9145eab434d84cda92853ad4812e94f661)) +* **api:** api update ([5f32ddc](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5f32ddcd443c1de9485003e8a1e9661781903bee)) +* **api:** api update ([a2eea78](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a2eea789ebbd99a4e4869d3abb5a227e4f8d6629)) +* **api:** api update ([212f078](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/212f078a3fffc70ede17b3e4de23903d14178086)) +* **api:** api update ([41b02ef](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/41b02efb70098a498ae0639a9b75e5f5450f81f0)) +* **api:** api update ([2db03f5](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2db03f51d66f3af287a0a20fae080b38474ac952)) +* **api:** api update ([e4dd2dd](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/e4dd2ddb74ae17f1abdf3baea48da5ff680f3d40)) +* **api:** api update ([0073ccc](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/0073ccce57bb70a2a33ac9f25eaa3f02c5947143)) +* **api:** api update ([93b27d8](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/93b27d8d781b405d7bed40880c4552423dd2de9a)) +* **api:** api update ([c4048c4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c4048c43712afebfbf52d6afa8ff0d9f61fa65eb)) +* **api:** api update ([07e7142](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/07e7142105072534c10d8a6f293ddb1540200039)) +* **api:** api update ([14b9f56](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/14b9f56d6162a62e5555d6727b9bac9a75aab24a)) +* **api:** api update ([891a201](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/891a20154858e332f6965a897a11c1e3eb60d46d)) +* **api:** api update ([980ff36](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/980ff369e0ef08500ae478ded5a232da7f38b5ed)) +* **api:** api update ([b25bee6](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b25bee6f69bce712a4937386383ccec055309f39)) +* **api:** api update ([5a77418](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5a77418eb4f2058adb334944d241e7b91f3711c7)) +* **api:** api update ([4a111d4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4a111d4f097391fdc6dc920ba1606c0d8621708a)) +* **api:** api update ([a43dc12](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a43dc1250b1a5933fa4af5a965447b93fc14e793)) +* **api:** api update ([f0b9fb8](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f0b9fb8ad5624c01e220df4381cc37a1213a1692)) +* **api:** api update ([ca21354](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ca2135486d6ca505afe5c49142f29adc7e227fa3)) +* **api:** api update ([01c6418](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/01c6418872a4dc0595e42f781d03386a82bff9be)) +* **api:** api update ([057180b](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/057180b905228cbb29c753be8ecac5683c600dd0)) +* **api:** api update ([a48a7e2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a48a7e23be200f80b19c72e4b2c82f974cec1117)) +* **api:** api update ([f9977f2](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/f9977f213c80713606e9cfc600e15c7383e4644f)) +* **api:** api update ([aee1709](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/aee1709a9d39bd78be1db9aaaf0e3a2497a45f83)) +* **api:** api update ([66e39a4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/66e39a42bb0d0c4bb70d0450f0cbff98cc45fe5c)) +* **api:** api update ([9ca88c4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/9ca88c44a83eb4ab893c19c433044176fcc479d1)) +* **api:** api update ([59cc52a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/59cc52af2ecf36763f5d1f06c7bba9a55519141e)) +* **api:** api update ([bc7b763](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/bc7b763675ba43a49f8cab78a30255866c35e4b2)) +* **api:** api update ([710d78e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/710d78e95405788e056f3a338a2d8fd772a26eee)) +* **api:** api update ([3bdb33f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3bdb33f46ecd9a661a99ffbe1eeb4ce7ddfb57cb)) +* **api:** api update ([0d0c1dc](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/0d0c1dcf0720c6f4ef56779a1c4e6f2fad1a33c3)) +* **api:** api update ([8d3c93c](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8d3c93c186cb7a11fd84226957137a7505e045d7)) +* **api:** api update ([0017f6f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/0017f6f209548fe6a8ead615b86b913a6df7baf1)) +* **api:** api update ([1f119f5](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/1f119f566c1f540f8a466d371fb6956ceecce30a)) +* **api:** api update ([a79343d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a79343d9a35f5a31e3d29320e1588e1d3c529f10)) +* **api:** api update ([8ebf680](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8ebf680384a856aed45875ae4453bb594d8316c6)) +* **api:** api update ([8b449c4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/8b449c44c869ab90ada7acc26123d58bfc083f1f)) +* **api:** api update ([4b821d9](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4b821d974a38d50ae58321f62a83cd6c62998bb5)) +* **api:** api update ([3dbb7ca](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3dbb7ca5c9b27baa4a7be982f69394a683db7090)) +* **api:** api update ([4019fcb](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4019fcbe6b6fdcc117c6b8dabc174ab166498520)) +* **api:** api update ([ebdc5d4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ebdc5d46ba1bec74cc573fafff2d20ac4849db76)) +* **api:** api update ([1de2a95](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/1de2a952889d464577df810a8da0d7af3bbc1c7c)) +* **api:** api update ([b5ac8cc](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/b5ac8ccaa35aab1bfd6c8d391a9cb42302a4849a)) +* **api:** api update ([882ec77](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/882ec779a553bf8f0d1db0ca35ef2609c5a8078c)) +* **api:** api update ([4eec03f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4eec03ff386d8c64bd83285865c82bb061bf70a6)) +* **api:** api update ([3df5007](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3df5007c69007088fc11a9aa01fb31088d9b5206)) +* **api:** api update ([3d8f2c4](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3d8f2c4ca4509051e645536e656d82dadc9a20f2)) +* **api:** api update ([ac2d398](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ac2d39857ba083470553fab82c27f940926081b6)) +* **api:** api update ([5ffb97d](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/5ffb97d9f3802d47f115a57bee40f3581801a3cd)) +* **api:** api update ([c2bc00b](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/c2bc00b282aca8daa45b24e6f4dc0fe66a606af4)) +* **api:** api update ([864ab2a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/864ab2a56a9233228eb3053c0126794e1ae58182)) +* **api:** api update ([21aaa90](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/21aaa9051c98389cd43e3ed577b1a55dc90c1cdd)) +* **api:** api update ([a514bd1](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/a514bd1af8d12749bf37af858f70087126d6efbf)) +* **api:** api update ([83acb2e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/83acb2edc04277e8494e469cd596cec1faa4ed81)) +* **api:** api update ([ad300ac](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ad300ac3fb405cebd716bdd0e28d40b419ca6012)) +* **api:** api update ([3974622](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/39746225a5043e7b0861eda2ef1f491f6407da3a)) +* **api:** api update ([4dc96ad](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4dc96addfdd7e241dcfcb967cd4c237ad417b85a)) +* **api:** api update ([2ba0e5f](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/2ba0e5f5ee52365b833d6904268201f398aaa001)) +* **api:** api update ([1312108](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/131210835bbd489c99ed6056302e0e1c30b0de12)) +* **api:** api update ([ff87eb3](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/ff87eb31769d1fa7de42185fd8089f543809a6b5)) +* **stlc:** configurable CI runner and private-production-repo support in workflow templates ([4b430d7](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4b430d7c5fddde37e4130e8e9eed501d83400a5d)) + + +### Bug Fixes + +* **ci:** bump @arethetypeswrong/cli to ^0.18.0 and run CI workflows on Node 24 ([3547c2a](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/3547c2afac2f2460d46c51a0624868f7c5a8c111)) +* **client:** send content-type header for requests with an omitted optional body ([4f2d93e](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/commit/4f2d93e20ba3469807891876d90405abac984b85)) + ## 0.2.0 (2026-05-25) Full Changelog: [v0.1.1...v0.2.0](https://github.com/onlyfansapi/onlyfansapi-typescript-sdk/compare/v0.1.1...v0.2.0) diff --git a/api.md b/api.md index 3164dc40..43412799 100644 --- a/api.md +++ b/api.md @@ -192,14 +192,6 @@ Methods: # Messages -Types: - -- MessageAttachTagsResponse - -Methods: - -- client.messages.attachTags(messageID, { ...params }) -> MessageAttachTagsResponse - # ClientSessions Types: @@ -431,13 +423,12 @@ Methods: Types: -- MediaDownloadResponse - MediaScrapeResponse - MediaUploadResponse Methods: -- client.media.download(cdnURL, { ...params }) -> string +- client.media.download(cdnURL, { ...params }) -> void - client.media.scrape(account, { ...params }) -> MediaScrapeResponse - client.media.upload(account, { ...params }) -> MediaUploadResponse diff --git a/package.json b/package.json index 36a7c755..7dcb9bdf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@onlyfansapi/onlyfans-sdk", - "version": "0.2.0", + "version": "0.3.0", "description": "The official TypeScript library for the Only Fans API API", "author": "Only Fans API ", "types": "dist/index.d.ts", @@ -28,7 +28,7 @@ }, "dependencies": {}, "devDependencies": { - "@arethetypeswrong/cli": "^0.17.0", + "@arethetypeswrong/cli": "^0.18.0", "@swc/core": "^1.3.102", "@swc/jest": "^0.2.29", "@types/jest": "^29.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6497094d..a953c6f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,8 +11,8 @@ importers: .: devDependencies: '@arethetypeswrong/cli': - specifier: ^0.17.0 - version: 0.17.0 + specifier: ^0.18.0 + version: 0.18.4 '@swc/core': specifier: ^1.3.102 version: 1.4.16 @@ -78,20 +78,20 @@ packages: integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==, } - '@arethetypeswrong/cli@0.17.0': + '@arethetypeswrong/cli@0.18.4': resolution: { - integrity: sha512-xSMW7bfzVWpYw5JFgZqBXqr6PdR0/REmn3DkxCES5N0JTcB0CVgbIynJCvKBFmXaPc3hzmmTrb7+yPDRoOSZdA==, + integrity: sha512-kNWo6LTzGAuLYPpJ7Sgo63whSUeeSuKMlYx6IBgzs4ONEG807gW4hSSENvpeCHzO2H2wIzG5EFl0OKBbqGBAyA==, } - engines: { node: '>=18' } + engines: { node: '>=20' } hasBin: true - '@arethetypeswrong/core@0.17.0': + '@arethetypeswrong/core@0.18.4': resolution: { - integrity: sha512-FHyhFizXNetigTVsIhqXKGYLpazPS5YNojEPpZEUcBPt9wVvoEbNIvG+hybuBR+pjlRcbyuqhukHZm1fr+bDgA==, + integrity: sha512-M5F0ePyN6h2Z6XxRiyIPqjGbltotXLjR0CKA0uKspsDu0QmgTNYvRb4RSQPMUs2ZXZHCCYpbaZbFbYOXLxCjUA==, } - engines: { node: '>=18' } + engines: { node: '>=20' } '@babel/code-frame@7.28.6': resolution: @@ -363,6 +363,12 @@ packages: integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, } + '@braidai/lang@1.1.2': + resolution: + { + integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==, + } + '@colors/colors@1.5.0': resolution: { @@ -665,6 +671,12 @@ packages: integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, } + '@loaderkit/resolve@1.0.6': + resolution: + { + integrity: sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg==, + } + '@nodelib/fs.scandir@2.1.5': resolution: { @@ -1678,10 +1690,10 @@ packages: integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, } - fflate@0.8.2: + fflate@0.8.3: resolution: { - integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==, + integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==, } file-entry-cache@8.0.0: @@ -2366,11 +2378,12 @@ packages: integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, } - lru-cache@10.4.3: + lru-cache@11.5.2: resolution: { - integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==, } + engines: { node: 20 || >=22 } lru-cache@5.1.1: resolution: @@ -2852,14 +2865,6 @@ packages: } hasBin: true - semver@7.7.1: - resolution: - { - integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==, - } - engines: { node: '>=10' } - hasBin: true - semver@7.7.3: resolution: { @@ -3365,23 +3370,24 @@ packages: snapshots: '@andrewbranch/untar.js@1.0.3': {} - '@arethetypeswrong/cli@0.17.0': + '@arethetypeswrong/cli@0.18.4': dependencies: - '@arethetypeswrong/core': 0.17.0 + '@arethetypeswrong/core': 0.18.4 chalk: 4.1.2 cli-table3: 0.6.5 commander: 10.0.1 marked: 9.1.6 marked-terminal: 7.2.1(marked@9.1.6) - semver: 7.7.1 + semver: 7.7.3 - '@arethetypeswrong/core@0.17.0': + '@arethetypeswrong/core@0.18.4': dependencies: '@andrewbranch/untar.js': 1.0.3 + '@loaderkit/resolve': 1.0.6 cjs-module-lexer: 1.4.1 - fflate: 0.8.2 - lru-cache: 10.4.3 - semver: 7.7.1 + fflate: 0.8.3 + lru-cache: 11.5.2 + semver: 7.7.3 typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 @@ -3574,6 +3580,8 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@braidai/lang@1.1.2': {} + '@colors/colors@1.5.0': optional: true @@ -3849,6 +3857,10 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + '@loaderkit/resolve@1.0.6': + dependencies: + '@braidai/lang': 1.1.2 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4462,7 +4474,7 @@ snapshots: dependencies: bser: 2.1.1 - fflate@0.8.2: {} + fflate@0.8.3: {} file-entry-cache@8.0.0: dependencies: @@ -4909,7 +4921,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.1 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -5013,7 +5025,7 @@ snapshots: lodash.merge@4.6.2: {} - lru-cache@10.4.3: {} + lru-cache@11.5.2: {} lru-cache@5.1.1: dependencies: @@ -5254,8 +5266,6 @@ snapshots: semver@6.3.1: {} - semver@7.7.1: {} - semver@7.7.3: {} shebang-command@2.0.0: @@ -5512,7 +5522,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/src/client.ts b/src/client.ts index 249b1c38..5223d108 100644 --- a/src/client.ts +++ b/src/client.ts @@ -104,7 +104,7 @@ import { MeGetTopPercentageResponse, MeRetrieveResponse, } from './resources/me'; -import { MessageAttachTagsParams, MessageAttachTagsResponse, Messages } from './resources/messages'; +import { Messages } from './resources/messages'; import { PayoutListRequestsParams, PayoutListRequestsResponse, @@ -256,7 +256,6 @@ import { import { Media, MediaDownloadParams, - MediaDownloadResponse, MediaScrapeParams, MediaScrapeResponse, MediaUploadParams, @@ -1045,11 +1044,19 @@ export class OnlyFansAPI { return () => controller.abort(); } - private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): { + private buildBody({ options }: { options: FinalRequestOptions }): { bodyHeaders: HeadersLike; body: BodyInit | undefined; } { + const { body, headers: rawHeaders } = options; if (!body) { + // A resource method always passes a `body` key when its operation defines a + // request body, even if the caller omitted an optional body param. Keep the + // content-type for those, and only elide it for operations with no body at + // all (e.g. GET/DELETE). + if (body == null && 'body' in options) { + return this.#encoder({ body, headers: buildHeaders([rawHeaders]) }); + } return { bodyHeaders: undefined, body: undefined }; } const headers = buildHeaders([rawHeaders]); @@ -1147,7 +1154,7 @@ export class OnlyFansAPI { trialLinks: API.TrialLinks = new API.TrialLinks(this); giphy: API.Giphy = new API.Giphy(this); /** - * APIs for managing tags on free trial links and tracking links + * APIs for managing tags on free trial links, tracking links, and Smart Links */ linkTags: API.LinkTags = new API.LinkTags(this); massMessaging: API.MassMessaging = new API.MassMessaging(this); @@ -1314,11 +1321,7 @@ export declare namespace OnlyFansAPI { type ChatUnmuteParams as ChatUnmuteParams, }; - export { - Messages as Messages, - type MessageAttachTagsResponse as MessageAttachTagsResponse, - type MessageAttachTagsParams as MessageAttachTagsParams, - }; + export { Messages as Messages }; export { ClientSessions as ClientSessions, @@ -1430,7 +1433,6 @@ export declare namespace OnlyFansAPI { export { Media as Media, - type MediaDownloadResponse as MediaDownloadResponse, type MediaScrapeResponse as MediaScrapeResponse, type MediaUploadResponse as MediaUploadResponse, type MediaDownloadParams as MediaDownloadParams, diff --git a/src/resources/accounts.ts b/src/resources/accounts.ts index e8b821f8..48987d7b 100644 --- a/src/resources/accounts.ts +++ b/src/resources/accounts.ts @@ -29,7 +29,9 @@ export class Accounts extends APIResource { * * @example * ```ts - * const response = await client.accounts.disconnect('nobis'); + * const response = await client.accounts.disconnect( + * 'pariatur', + * ); * ``` */ disconnect(id: string, options?: RequestOptions): APIPromise { diff --git a/src/resources/analytics/financial/profitability.ts b/src/resources/analytics/financial/profitability.ts index ec20b645..3f9fd712 100644 --- a/src/resources/analytics/financial/profitability.ts +++ b/src/resources/analytics/financial/profitability.ts @@ -56,45 +56,87 @@ export class Profitability extends APIResource { } } -export type ProfitabilityGetHistoryResponse = - Array; +export interface ProfitabilityGetHistoryResponse { + data?: Array; +} export namespace ProfitabilityGetHistoryResponse { - export interface ProfitabilityGetHistoryResponseItem { - gross_revenue?: number; + export interface Data { + activeMilestones?: string | null; + + agencyEarnings?: string; + + commissionAmount?: string; + + commissionRate?: string; + + costs?: Array; + + creatorName?: string; - margin?: number; + hasCommissionForPeriod?: boolean; + + hasCostsForPeriod?: boolean; + + marginPercentage?: string; month?: number; - net_revenue?: number; + onlyFansUserId?: number; + + profit?: string; + + projectedNet?: string; + + ratePeriods?: Array; + + referralNote?: string | null; - profit?: number; + totalCosts?: string; year?: number; } } -export type ProfitabilityGetProfitabilityResponse = - Array; +export interface ProfitabilityGetProfitabilityResponse { + data?: Array; +} export namespace ProfitabilityGetProfitabilityResponse { - export interface ProfitabilityGetProfitabilityResponseItem { - commission?: number; + export interface Data { + activeMilestones?: string | null; + + agencyEarnings?: string; + + commissionAmount?: string; + + commissionRate?: string; + + costs?: Array; + + creatorName?: string; - creator_id?: number; + hasCommissionForPeriod?: boolean; - gross_revenue?: number; + hasCostsForPeriod?: boolean; - margin?: number; + marginPercentage?: string; - name?: string; + month?: number; + + onlyFansUserId?: number; + + profit?: string; - net_revenue?: number; + projectedNet?: string; - profit?: number; + ratePeriods?: Array; - total_costs?: number; + referralNote?: string | null; + + totalCosts?: string; + + year?: number; } } diff --git a/src/resources/authenticate.ts b/src/resources/authenticate.ts index d10eea6c..9d00c7a9 100644 --- a/src/resources/authenticate.ts +++ b/src/resources/authenticate.ts @@ -511,7 +511,7 @@ export interface AuthenticateStartParams { * The country of the managed proxy server you want to use. Eg. "us" for United * States. Cannot be used together with customProxy. */ - proxyCountry?: 'us' | 'uk'; + proxyCountry?: 'us' | 'uk' | 'gb'; /** * The browser User-Agent string. Required when auth_type is `raw_data`. diff --git a/src/resources/chats/chats.ts b/src/resources/chats/chats.ts index 77c97030..d8f32988 100644 --- a/src/resources/chats/chats.ts +++ b/src/resources/chats/chats.ts @@ -157,8 +157,8 @@ export class Chats extends APIResource { /** * Calling this endpoint will show the target fan a "Model is typing..." note in - * the chat for ~4 seconds. If you want to continue showing the indicator call this - * endpoint multiple times. Free - no credits charged. + * the chat for ~4 seconds. Duplicate calls for the same account and chat are + * coalesced during that window. * * @example * ```ts @@ -1273,7 +1273,8 @@ export interface ChatListParams { query?: string; /** - * Whether to skip user details in response (all or none). Default = all + * Whether to skip user details in the response (`all` or `none`). Defaults to + * `all`. */ skip_users?: 'all' | 'none'; } @@ -1309,8 +1310,8 @@ export interface ChatListMediaParams { offset?: string; /** - * Query param: Whether to skip user details in response (all or none). Default = - * all + * Query param: Whether to skip user details in the response (`all` or `none`). + * Defaults to `all`. */ skip_users?: string; diff --git a/src/resources/chats/messages.ts b/src/resources/chats/messages.ts index 1feab3f5..823071e0 100644 --- a/src/resources/chats/messages.ts +++ b/src/resources/chats/messages.ts @@ -2,6 +2,7 @@ import { APIResource } from '../../core/resource'; import { APIPromise } from '../../core/api-promise'; +import { buildHeaders } from '../../internal/headers'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; @@ -123,6 +124,30 @@ export class Messages extends APIResource { /** * Send a new message to a chat. * + * **Idempotency.** Pass an `Idempotency-Key` header to make retries safe. The + * first request with a given key is executed normally and its response is stored + * for **24 hours**; any later request with the same key returns that stored + * response, plus an `Idempotent-Replayed: true` header, without contacting + * OnlyFans and without consuming credits. The replayed body is the original + * response with its `_meta._credits` block rewritten to show `used: 0` and your + * current balance. + * + * Keys are scoped to your team, this endpoint and the account in the URL, so the + * same value can be reused safely against a different account. Use a fresh, unique + * value (a UUID works well) for each message you send; it must be 1-255 printable + * ASCII characters. + * + * - `400 IDEMPOTENCY_KEY_INVALID` — the header value is empty, too long, or + * contains non-ASCII characters. + * - `409 IDEMPOTENCY_CONFLICT` — an earlier request with this key is still + * running. Retry once it finishes. + * - `422 IDEMPOTENCY_KEY_MISMATCH` — this key was already used with a different + * request body or chat. + * + * Responses with a `5xx` status (and `408`/`429`) are never stored, so a failed + * send can be retried with the same key. The header is optional: omit it and the + * endpoint behaves exactly as before. + * * @example * ```ts * const response = await client.chats.messages.send('123', { @@ -131,8 +156,15 @@ export class Messages extends APIResource { * ``` */ send(chatID: string, params: MessageSendParams, options?: RequestOptions): APIPromise { - const { account, ...body } = params; - return this._client.post(path`/api/${account}/chats/${chatID}/messages`, { body, ...options }); + const { account, 'Idempotency-Key': idempotencyKey, ...body } = params; + return this._client.post(path`/api/${account}/chats/${chatID}/messages`, { + body, + ...options, + headers: buildHeaders([ + { ...(idempotencyKey != null ? { 'Idempotency-Key': idempotencyKey } : undefined) }, + options?.headers, + ]), + }); } /** @@ -853,7 +885,7 @@ export interface MessageListParams { order?: string; /** - * Query param: Whether to skip user details (all or none) + * Query param: Whether to skip user details (`all` or `none`). */ skip_users?: string; } @@ -912,6 +944,14 @@ export interface MessageSendParams { */ account: string; + /** + * Body param: Screen `text` for OnlyFans banned words and block the send if any + * are found (returns a 422 listing the offending words). `strict_ban` blocks all + * tiers, `risky` blocks Risky + Replace/soften, `replace_soften` blocks + * Replace/soften only. Omit to disable screening. + */ + blockBannedWords?: 'strict_ban' | 'risky' | 'replace_soften'; + /** * Body param: The ID of the Giphy GIF to attach to the message. Get IDs from the * Giphy listing endpoints (`/giphy/trending`, `/giphy/search`). @@ -937,8 +977,8 @@ export interface MessageSendParams { previews?: Array; /** - * Body param: Price for paid content (0 or between 3-200). In case this is not - * zero, **mediaFiles** is required + * Body param: Price for paid content in USD (0 or between 3-200). In case this is + * not zero, **mediaFiles** is required */ price?: number; @@ -967,6 +1007,11 @@ export interface MessageSendParams { * Body param: The message text content. Required unless a media file is present. */ text?: string; + + /** + * Header param + */ + 'Idempotency-Key'?: string; } export interface MessageUnlikeParams { diff --git a/src/resources/client-sessions.ts b/src/resources/client-sessions.ts index fa88e804..51ee2e89 100644 --- a/src/resources/client-sessions.ts +++ b/src/resources/client-sessions.ts @@ -82,7 +82,7 @@ export interface ClientSessionCreateParams { */ client_reference_id?: string; - proxy_country?: 'us' | 'uk' | null; + proxy_country?: 'us' | 'uk' | 'gb' | null; } export declare namespace ClientSessions { diff --git a/src/resources/data-exports.ts b/src/resources/data-exports.ts index 7655bbef..c88cdde2 100644 --- a/src/resources/data-exports.ts +++ b/src/resources/data-exports.ts @@ -230,6 +230,8 @@ export namespace DataExportRetrieveResponse { failed_at?: string | null; + failed_downloads?: number; + failed_reason?: string | null; file_type?: string; @@ -327,6 +329,8 @@ export namespace DataExportListResponse { failed_at?: string | null; + failed_downloads?: number; + failed_reason?: string | null; file_type?: string; @@ -532,8 +536,9 @@ export interface DataExportCreateParams { /** * The output file format. Supported formats vary by export type: `csv` or `xlsx` - * for transactions, chat_messages, trial_links, tracking_links, smart_links, - * payouts, chargebacks, public_profiles, fans, followings; `zip` for media_vault. + * for transactions, chat_messages, fansly_chat_messages, trial_links, + * tracking_links, smart_links, payouts, chargebacks, public_profiles, fans, + * followings, profile_visitors; `zip` for media_vault. */ file_type: 'csv' | 'xlsx' | 'zip'; @@ -543,7 +548,10 @@ export interface DataExportCreateParams { start_date: string; /** - * The type of data to export + * The type of data to export. Use `fansly_chat_messages` to export Fansly chat + * messages (all other types are OnlyFans). `profile_visitors` returns one row per + * account per day, scraped one day at a time so the daily numbers are not + * aggregated away by OnlyFans. */ type: | 'transactions' @@ -556,11 +564,14 @@ export interface DataExportCreateParams { | 'chargebacks' | 'public_profiles' | 'fans' - | 'followings'; + | 'followings' + | 'profile_visitors' + | 'fansly_chat_messages'; /** * Array of account prefixed IDs to export data from. Not required for - * `public_profiles` type. + * `public_profiles` type. For `fansly_chat_messages`, pass Fansly account prefixed + * IDs (`fansly_acct_...`); all other types take OnlyFans account IDs. */ account_ids?: Array; @@ -580,19 +591,23 @@ export interface DataExportCreateParams { * account, max 10,000,000), `maxChats` (optional per-account chat scrape limit), * `skipMassMessages` (optional, bool), `chatIds` (optional array of numeric * fan/chat IDs; filters output and can drastically reduce totals). For - * `media_vault`: `mediaType` (required, one of: `all`, `photo`, `gif`, `video`, - * `audio`). For `fans`: `type` (required, one of: `all`, `active`, `expired`, - * `latest`). For `followings`: `type` (required, one of: `all`, `active`, - * `expired`). For `public_profiles`: `query` (optional, full-text search), - * `gender` (optional, filter: male, female, trans, couple), `minSubscribePrice` - * (optional, USD), `maxSubscribePrice` (optional, USD), `location` (optional), - * `minPostsCount` (optional, minimum posts), `minPhotosCount` (optional, minimum - * photos), `minVideosCount` (optional, minimum videos), `minSubscribersCount` - * (optional, minimum subscribers), `minJoinDate` (optional, ISO 8601 date), - * `minLastSeenAt` (optional, ISO 8601 date), `createdAtFrom` (optional, ISO 8601 - * date, profile added to DB after), `createdAtTo` (optional, ISO 8601 date, - * profile added to DB before), `instagram` (optional), `twitter` (optional), - * `tiktok` (optional), `maxResults` (optional, limit results). + * `fansly_chat_messages`: `maxMessages` (required per account, max 10,000,000), + * `maxChats` (optional per-account chat scrape limit), `chatIds` (optional array + * of Fansly group ID strings; filters output and can drastically reduce totals). + * For `media_vault`: `mediaType` (required, one of: `all`, `photo`, `gif`, + * `video`, `audio`). For `fans`: `type` (required, one of: `all`, `active`, + * `expired`, `latest`). For `followings`: `type` (required, one of: `all`, + * `active`, `expired`). For `public_profiles`: `query` (optional, full-text + * search), `gender` (optional, filter: male, female, trans, couple), + * `minSubscribePrice` (optional, USD), `maxSubscribePrice` (optional, USD), + * `location` (optional), `minPostsCount` (optional, minimum posts), + * `minPhotosCount` (optional, minimum photos), `minVideosCount` (optional, minimum + * videos), `minSubscribersCount` (optional, minimum subscribers), + * `maxSubscribersCount` (optional, maximum subscribers), `minJoinDate` (optional, + * ISO 8601 date), `minLastSeenAt` (optional, ISO 8601 date), `createdAtFrom` + * (optional, ISO 8601 date, profile added to DB after), `createdAtTo` (optional, + * ISO 8601 date, profile added to DB before), `instagram` (optional), `twitter` + * (optional), `tiktok` (optional), `maxResults` (optional, limit results). */ options?: { [key: string]: unknown }; } @@ -642,9 +657,14 @@ export interface DataExportListParams { | 'media_vault' | 'trial_links' | 'tracking_links' + | 'smart_links' | 'payouts' | 'chargebacks' - | 'public_profiles'; + | 'public_profiles' + | 'fans' + | 'followings' + | 'profile_visitors' + | 'fansly_chat_messages'; } export declare namespace DataExports { diff --git a/src/resources/engagement/messages/direct-messages.ts b/src/resources/engagement/messages/direct-messages.ts index 94453029..9f617a42 100644 --- a/src/resources/engagement/messages/direct-messages.ts +++ b/src/resources/engagement/messages/direct-messages.ts @@ -329,8 +329,8 @@ export namespace DirectMessageChartResponse { export interface DirectMessageListParams { /** - * The latest message to retrieve. Keep empty to get all. MUST BE DATE AFTER - * `startDate`. This is also used for pagination. + * The latest message to retrieve. Keep empty to get all. It must be after + * `startDate` and is also used for pagination. */ endDate?: string; @@ -357,7 +357,7 @@ export interface DirectMessageListParams { export interface DirectMessageChartParams { /** - * End of the chart window in `Y-m-d H:i:s` format. Must be after `startDate`. + * End of the chart window in `Y-m-d H:i:s` format. It must be after `startDate`. */ endDate?: string; diff --git a/src/resources/engagement/messages/mass-messages.ts b/src/resources/engagement/messages/mass-messages.ts index 4cfff425..802d3272 100644 --- a/src/resources/engagement/messages/mass-messages.ts +++ b/src/resources/engagement/messages/mass-messages.ts @@ -231,8 +231,8 @@ export namespace MassMessageChartResponse { export interface MassMessageListParams { /** - * The latest message to retrieve. Keep empty to get all. MUST BE DATE AFTER - * `startDate`. This is also used for pagination. + * The latest message to retrieve. Keep empty to get all. It must be after + * `startDate` and is also used for pagination. */ endDate?: string; @@ -254,7 +254,7 @@ export interface MassMessageListParams { export interface MassMessageChartParams { /** - * End of the chart window in `Y-m-d H:i:s` format. Must be after `startDate`. + * End of the chart window in `Y-m-d H:i:s` format. It must be after `startDate`. */ endDate?: string; diff --git a/src/resources/engagement/messages/messages.ts b/src/resources/engagement/messages/messages.ts index 7e83f2ad..08a451d2 100644 --- a/src/resources/engagement/messages/messages.ts +++ b/src/resources/engagement/messages/messages.ts @@ -31,9 +31,10 @@ export class Messages extends APIResource { * @example * ```ts * const response = - * await client.engagement.messages.getMessageBuyers('et', { - * account: 'acct_XXXXXXXXXXXXXXX', - * }); + * await client.engagement.messages.getMessageBuyers( + * 'earum', + * { account: 'acct_XXXXXXXXXXXXXXX' }, + * ); * ``` */ getMessageBuyers( @@ -434,7 +435,7 @@ export interface MessageGetMessageBuyersParams { offset?: number; /** - * Query param: Optional flag for subsequent pages (example: all) + * Query param: Optional flag for subsequent pages (example: all). */ skip_users?: string; @@ -446,8 +447,8 @@ export interface MessageGetMessageBuyersParams { export interface MessageGetTopMessageParams { /** - * The end date for the period. Keep empty to retrieve until now. MUST BE DATE - * AFTER `startDate`. + * The end date for the period. Keep empty to retrieve until now. It must be after + * `startDate`. */ endDate?: string; diff --git a/src/resources/fans/fans.ts b/src/resources/fans/fans.ts index d5dc2438..82d81c3a 100644 --- a/src/resources/fans/fans.ts +++ b/src/resources/fans/fans.ts @@ -52,7 +52,19 @@ export class Fans extends APIResource { } /** - * Get a paginated list of fans for an Account. Newest fans are first. + * Get a paginated list of fans for an Account. Newest fans are first. Paginate by + * following `_pagination.next_page` until it is null (`data.hasMore` is the + * authoritative flag). Do NOT use the page's item count to detect the last page — + * OnlyFans occasionally returns fewer than `limit` items (e.g. 19 for limit=20) on + * a non-final page because it filters entries server-side; no fans are skipped. To + * track progress, GET `/{account}/me` returns data.subscribersCount (the current + * active-subscriber count) as a total. + * + * Supports `filter[max_total_spent]` (e.g. `filter[max_total_spent]=0` for fans + * who have never spent), which OnlyFans itself cannot do. Those requests are + * answered from OnlyFansAPI's own fan index rather than proxied, so the page is + * limited to fans we have already indexed for this account — see `data._source` in + * the response. * * @example * ```ts @@ -70,7 +82,17 @@ export class Fans extends APIResource { } /** - * Get a paginated list of fans for an Account. Newest fans are first. + * Get a paginated list of fans for an Account. Newest fans are first. Paginate by + * following `_pagination.next_page` until it is null (`data.hasMore` is the + * authoritative flag). Do NOT use the page's item count to detect the last page — + * OnlyFans occasionally returns fewer than `limit` items (e.g. 19 for limit=20) on + * a non-final page because it filters entries server-side; no fans are skipped. + * + * Supports `filter[max_total_spent]` (e.g. `filter[max_total_spent]=0` for fans + * who have never spent), which OnlyFans itself cannot do. Those requests are + * answered from OnlyFansAPI's own fan index rather than proxied, so the page is + * limited to fans we have already indexed for this account — see `data._source` in + * the response. * * @example * ```ts @@ -89,6 +111,17 @@ export class Fans extends APIResource { /** * Get a paginated list of expired fans for an Account. Newest fans are first. + * Paginate by following `_pagination.next_page` until it is null (`data.hasMore` + * is the authoritative flag). Do NOT use the page's item count to detect the last + * page — OnlyFans occasionally returns fewer than `limit` items (e.g. 19 for + * limit=20) on a non-final page because it filters entries server-side; no fans + * are skipped. + * + * Supports `filter[max_total_spent]` (e.g. `filter[max_total_spent]=0` for fans + * who have never spent), which OnlyFans itself cannot do. Those requests are + * answered from OnlyFansAPI's own fan index rather than proxied, so the page is + * limited to fans we have already indexed for this account — see `data._source` in + * the response. * * @example * ```ts @@ -1937,8 +1970,8 @@ export interface FanListActiveParams { filter?: FanListActiveParams.Filter; /** - * Number of fans to return (1-50). Must be at least 1. Must not be greater - * than 20. + * Number of fans to return (1-20). OnlyFans does not allow more than 20 per page. + * Must be at least 1. Must not be greater than 20. */ limit?: number; @@ -1961,22 +1994,56 @@ export interface FanListActiveParams { export namespace FanListActiveParams { export interface Filter { /** - * Filter by minimum subscription duration in months. Must be at least 0. + * Filter by minimum subscription duration in months. Must use bracket syntax: + * filter[duration]=1 — the dot form (filter.duration=1) is rejected with a 422, + * because PHP rewrites it to `filter_duration` and the filter could not be + * applied. Must be at least 0. */ duration?: number; /** - * Filter by online status (`1` for online fans). + * Filter by **maximum** amount total spent by a fan — use + * `filter[max_total_spent]=0` to isolate fans who have never spent. Combine with + * `filter[total_spent]` for a range. Must use bracket syntax: + * filter[max_total_spent]=0 — the dot form is rejected with a 422, because PHP + * rewrites it to `filter_max_total_spent` and the filter could not be applied. + * + * OnlyFans itself has no maximum-spend filter, so this one is resolved against + * OnlyFansAPI's own fan index instead of being proxied. The fan objects in + * `data.list` are still fetched live from OnlyFans and are re-checked against your + * filters before being returned, but only fans we have already indexed for this + * account can appear. Each response reports its own coverage under `data._source`; + * when `data._source.is_complete` is `false` a full-base backfill is queued + * automatically, so retry later for a complete answer. + * + * `data._source.omitted_from_page` counts fans that matched your filters but which + * OnlyFans returned no usable data for on that page (a deleted account, or a + * partial response). They are left out of `data.list` and not revisited later in + * the same walk, so a non-zero value means that page was short — start a fresh + * walk to retry them. Cannot be combined with `filter[online]`. Must be at + * least 0. + */ + max_total_spent?: number; + + /** + * Filter by online status (`1` for online fans). Must use bracket syntax: + * filter[online]=1 — the dot form (filter.online=1) is rejected with a 422, + * because PHP rewrites it to `filter_online` and the filter could not be applied. */ online?: 1 | 0 | null; /** - * Filter by minimum tips. Must be at least 0. + * Filter by minimum tips. Must use bracket syntax: filter[tips]=100 — the dot form + * (filter.tips=100) is rejected with a 422, because PHP rewrites it to + * `filter_tips` and the filter could not be applied. Must be at least 0. */ tips?: number; /** - * Filter by minimum amount total spent by a fan. Must be at least 0. + * Filter by minimum amount total spent by a fan. Must use bracket syntax: + * filter[total_spent]=100 — the dot form (filter.total_spent=100) is rejected with + * a 422, because PHP rewrites it to `filter_total_spent` and the filter could not + * be applied. Must be at least 0. */ total_spent?: number; } @@ -1986,8 +2053,8 @@ export interface FanListAllParams { filter?: FanListAllParams.Filter; /** - * Number of fans to return (1-50). Must be at least 1. Must not be greater - * than 20. + * Number of fans to return (1-20). OnlyFans does not allow more than 20 per page. + * Must be at least 1. Must not be greater than 20. */ limit?: number; @@ -2010,22 +2077,56 @@ export interface FanListAllParams { export namespace FanListAllParams { export interface Filter { /** - * Filter by minimum subscription duration in months. Must be at least 0. + * Filter by minimum subscription duration in months. Must use bracket syntax: + * filter[duration]=1 — the dot form (filter.duration=1) is rejected with a 422, + * because PHP rewrites it to `filter_duration` and the filter could not be + * applied. Must be at least 0. */ duration?: number; /** - * Filter by online status (`1` for online fans). + * Filter by **maximum** amount total spent by a fan — use + * `filter[max_total_spent]=0` to isolate fans who have never spent. Combine with + * `filter[total_spent]` for a range. Must use bracket syntax: + * filter[max_total_spent]=0 — the dot form is rejected with a 422, because PHP + * rewrites it to `filter_max_total_spent` and the filter could not be applied. + * + * OnlyFans itself has no maximum-spend filter, so this one is resolved against + * OnlyFansAPI's own fan index instead of being proxied. The fan objects in + * `data.list` are still fetched live from OnlyFans and are re-checked against your + * filters before being returned, but only fans we have already indexed for this + * account can appear. Each response reports its own coverage under `data._source`; + * when `data._source.is_complete` is `false` a full-base backfill is queued + * automatically, so retry later for a complete answer. + * + * `data._source.omitted_from_page` counts fans that matched your filters but which + * OnlyFans returned no usable data for on that page (a deleted account, or a + * partial response). They are left out of `data.list` and not revisited later in + * the same walk, so a non-zero value means that page was short — start a fresh + * walk to retry them. Cannot be combined with `filter[online]`. Must be at + * least 0. + */ + max_total_spent?: number; + + /** + * Filter by online status (`1` for online fans). Must use bracket syntax: + * filter[online]=1 — the dot form (filter.online=1) is rejected with a 422, + * because PHP rewrites it to `filter_online` and the filter could not be applied. */ online?: 1 | 0 | null; /** - * Filter by minimum tips. Must be at least 0. + * Filter by minimum tips. Must use bracket syntax: filter[tips]=100 — the dot form + * (filter.tips=100) is rejected with a 422, because PHP rewrites it to + * `filter_tips` and the filter could not be applied. Must be at least 0. */ tips?: number; /** - * Filter by minimum amount total spent by a fan. Must be at least 0. + * Filter by minimum amount total spent by a fan. Must use bracket syntax: + * filter[total_spent]=100 — the dot form (filter.total_spent=100) is rejected with + * a 422, because PHP rewrites it to `filter_total_spent` and the filter could not + * be applied. Must be at least 0. */ total_spent?: number; } @@ -2035,8 +2136,8 @@ export interface FanListExpiredParams { filter?: FanListExpiredParams.Filter; /** - * Number of fans to return (1-50). Must be at least 1. Must not be greater - * than 20. + * Number of fans to return (1-20). OnlyFans does not allow more than 20 per page. + * Must be at least 1. Must not be greater than 20. */ limit?: number; @@ -2059,22 +2160,56 @@ export interface FanListExpiredParams { export namespace FanListExpiredParams { export interface Filter { /** - * Filter by minimum subscription duration in months. Must be at least 0. + * Filter by minimum subscription duration in months. Must use bracket syntax: + * filter[duration]=1 — the dot form (filter.duration=1) is rejected with a 422, + * because PHP rewrites it to `filter_duration` and the filter could not be + * applied. Must be at least 0. */ duration?: number; /** - * Filter by online status (`1` for online fans). + * Filter by **maximum** amount total spent by a fan — use + * `filter[max_total_spent]=0` to isolate fans who have never spent. Combine with + * `filter[total_spent]` for a range. Must use bracket syntax: + * filter[max_total_spent]=0 — the dot form is rejected with a 422, because PHP + * rewrites it to `filter_max_total_spent` and the filter could not be applied. + * + * OnlyFans itself has no maximum-spend filter, so this one is resolved against + * OnlyFansAPI's own fan index instead of being proxied. The fan objects in + * `data.list` are still fetched live from OnlyFans and are re-checked against your + * filters before being returned, but only fans we have already indexed for this + * account can appear. Each response reports its own coverage under `data._source`; + * when `data._source.is_complete` is `false` a full-base backfill is queued + * automatically, so retry later for a complete answer. + * + * `data._source.omitted_from_page` counts fans that matched your filters but which + * OnlyFans returned no usable data for on that page (a deleted account, or a + * partial response). They are left out of `data.list` and not revisited later in + * the same walk, so a non-zero value means that page was short — start a fresh + * walk to retry them. Cannot be combined with `filter[online]`. Must be at + * least 0. + */ + max_total_spent?: number; + + /** + * Filter by online status (`1` for online fans). Must use bracket syntax: + * filter[online]=1 — the dot form (filter.online=1) is rejected with a 422, + * because PHP rewrites it to `filter_online` and the filter could not be applied. */ online?: 1 | 0 | null; /** - * Filter by minimum tips. Must be at least 0. + * Filter by minimum tips. Must use bracket syntax: filter[tips]=100 — the dot form + * (filter.tips=100) is rejected with a 422, because PHP rewrites it to + * `filter_tips` and the filter could not be applied. Must be at least 0. */ tips?: number; /** - * Filter by minimum amount total spent by a fan. Must be at least 0. + * Filter by minimum amount total spent by a fan. Must use bracket syntax: + * filter[total_spent]=100 — the dot form (filter.total_spent=100) is rejected with + * a 422, because PHP rewrites it to `filter_total_spent` and the filter could not + * be applied. Must be at least 0. */ total_spent?: number; } @@ -2082,14 +2217,14 @@ export namespace FanListExpiredParams { export interface FanListLatestParams { /** - * End date for filtering (required with start_date). This field is required when - * start_date is present. + * End date for filtering (required with start_date). Must be a valid date. Must + * not be greater than 255 characters. */ end_date?: string | null; /** * Number of fans to return (1-50). Must be at least 1. Must not be greater - * than 100. + * than 50. */ limit?: number; @@ -2099,8 +2234,8 @@ export interface FanListLatestParams { offset?: number; /** - * Start date for filtering (required with end_date). This field is required when - * end_date is present. + * Start date for filtering (required with end_date). Must be a valid date. Must + * not be greater than 255 characters. */ start_date?: string | null; @@ -2117,14 +2252,14 @@ export interface FanListTopParams { by?: 'total' | 'subscribes' | 'tips' | 'messages' | 'post' | 'streams' | null; /** - * End date for filtering (required with start_date). This field is required when - * start_date is present. + * End date for filtering (required with start_date). Must be a valid date. Must + * not be greater than 255 characters. */ end_date?: string | null; /** - * Start date for filtering (required with end_date). This field is required when - * end_date is present. + * Start date for filtering (required with end_date). Must be a valid date. Must + * not be greater than 255 characters. */ start_date?: string | null; } diff --git a/src/resources/fans/summary.ts b/src/resources/fans/summary.ts index 2dc63d98..db003eeb 100644 --- a/src/resources/fans/summary.ts +++ b/src/resources/fans/summary.ts @@ -62,19 +62,33 @@ export interface SummaryGenerateSummaryResponse { export interface SummaryGetSummaryResponse { analyzed_message_count?: number; + custom_fields?: Array; + error_message?: string | null; last_analyzed_at?: string; + last_buy_date?: string; + status?: string; summary_data?: SummaryGetSummaryResponse.SummaryData; } export namespace SummaryGetSummaryResponse { + export interface CustomField { + key?: string; + + label?: string; + } + export interface SummaryData { + content_dislikes?: string; + content_preferences?: string; + dos_and_donts?: string; + family_pets?: string; hobbies?: string; @@ -91,6 +105,8 @@ export namespace SummaryGetSummaryResponse { requests?: string; + spend_cadence?: string; + themes?: string; travel_plans?: string; diff --git a/src/resources/following.ts b/src/resources/following.ts index 86149cf8..8337b8c3 100644 --- a/src/resources/following.ts +++ b/src/resources/following.ts @@ -10,7 +10,16 @@ import { path } from '../internal/utils/path'; */ export class Following extends APIResource { /** - * Get a paginated list of followings for an Account. Newest followings are first. + * Get a paginated list of followings for an Account. By default OnlyFans returns + * this list newest-first, sorted by `subscribedByData.subscribeAt` descending. The + * expired list does not share this order, so do not assume it applies there. Pass + * `sort` (optionally with `sortDirection`) to reorder the list — see the parameter + * description for the caveat that OnlyFans persists the chosen order account-wide. + * An empty page is not the end of the list: OnlyFans applies `offset` to the whole + * following collection before filtering it down to the requested list, so a page + * can come back empty while more results follow. Keep following + * `_pagination.next_page` until it is `null` instead of stopping at the first + * empty page. * * @example * ```ts @@ -28,7 +37,16 @@ export class Following extends APIResource { } /** - * Get a paginated list of followings for an Account. Newest followings are first. + * Get a paginated list of followings for an Account. By default OnlyFans returns + * this list newest-first, sorted by `subscribedByData.subscribeAt` descending. The + * expired list does not share this order, so do not assume it applies there. Pass + * `sort` (optionally with `sortDirection`) to reorder the list — see the parameter + * description for the caveat that OnlyFans persists the chosen order account-wide. + * An empty page is not the end of the list: OnlyFans applies `offset` to the whole + * following collection before filtering it down to the requested list, so a page + * can come back empty while more results follow. Keep following + * `_pagination.next_page` until it is `null` instead of stopping at the first + * empty page. * * @example * ```ts @@ -46,8 +64,24 @@ export class Following extends APIResource { } /** - * Get a paginated list of expired followings for an Account. Newest followings are - * first. + * Get a paginated list of expired followings for an Account. This list has no + * order guarantee. Unlike the all and active lists, it is sorted by neither + * `subscribedByData.subscribeAt` nor `subscribedByData.expiredAt`. To poll for new + * expirations, page through the full list each cycle (`limit=50`, follow + * `_pagination.next_page` until it is null) and diff it against your own store + * using `subscribedByData.expiredAt`. Do NOT stop early at the first entry you + * have already seen, as that can silently skip real expirations. An empty page is + * not the end of the list either: OnlyFans applies `offset` to the whole following + * collection and only then filters that window down to expired subscriptions, so + * early pages can come back empty while hundreds of expired rows still follow. + * Keep following `_pagination.next_page` until it is `null` instead of stopping at + * the first empty page. Pass `sort=expire_date` (optionally with `sortDirection`) + * to get a deterministic order instead — see the parameter description for the + * caveat that OnlyFans persists the chosen order account-wide. Ordering by expiry + * descending puts the still-active subscriptions first and moves the expired rows + * to the tail of the collection, so prefer `sortDirection=asc` or + * `sort=is_expired` for expired-first results; for that reason `sort=expire_date` + * defaults to `asc` on this list when no `sortDirection` is given. * * @example * ```ts @@ -887,6 +921,35 @@ export interface FollowingListActiveParams { * Search within following name/username. */ query?: string | null; + + /** + * Order the list by `last_activity` (the followed creator's last activity), + * `expire_date` (subscription expiry), `subscribe_date` (subscription start) or + * `is_expired` (expired first — OnlyFans only offers this one on the expired + * list). Omit it to keep whichever order is currently stored for the account. + * **Note:** OnlyFans persists this order account-wide, so it also applies to later + * requests that omit `sort` and to the creator's own onlyfans.com UI, until it is + * changed again. **Expired list:** OnlyFans applies `offset` to the whole + * following collection and only then filters it down to expired subscriptions, so + * ordering by expiry descending puts the still-active subscriptions first and + * moves the expired rows to the tail of the collection — the first several hundred + * offsets then come back empty. Use `sortDirection=asc` or `sort=is_expired` to + * get expired-first results. For that reason `sort=expire_date` on the expired + * list defaults to `asc` instead of `desc` when you do not pass `sortDirection`. + * Whatever order you pick, an empty page is **not** the end of the list: keep + * following `_pagination.next_page` until it is `null` rather than stopping at the + * first empty page. This field is required when sortDirection is + * present. + */ + sort?: 'last_activity' | 'expire_date' | 'subscribe_date' | 'is_expired' | null; + + /** + * Direction for `sort`: `desc` (default) or `asc`. Requires `sort` to be set. + * Exception: `sort=expire_date` on the expired list defaults to `asc`, because + * `desc` moves the expired rows to the tail of the underlying collection and + * leaves the early pages empty. Passing `sortDirection` explicitly always wins. + */ + sortDirection?: 'asc' | 'desc' | null; } export namespace FollowingListActiveParams { @@ -921,6 +984,35 @@ export interface FollowingListAllParams { * Search within following name/username. */ query?: string | null; + + /** + * Order the list by `last_activity` (the followed creator's last activity), + * `expire_date` (subscription expiry), `subscribe_date` (subscription start) or + * `is_expired` (expired first — OnlyFans only offers this one on the expired + * list). Omit it to keep whichever order is currently stored for the account. + * **Note:** OnlyFans persists this order account-wide, so it also applies to later + * requests that omit `sort` and to the creator's own onlyfans.com UI, until it is + * changed again. **Expired list:** OnlyFans applies `offset` to the whole + * following collection and only then filters it down to expired subscriptions, so + * ordering by expiry descending puts the still-active subscriptions first and + * moves the expired rows to the tail of the collection — the first several hundred + * offsets then come back empty. Use `sortDirection=asc` or `sort=is_expired` to + * get expired-first results. For that reason `sort=expire_date` on the expired + * list defaults to `asc` instead of `desc` when you do not pass `sortDirection`. + * Whatever order you pick, an empty page is **not** the end of the list: keep + * following `_pagination.next_page` until it is `null` rather than stopping at the + * first empty page. This field is required when sortDirection is + * present. + */ + sort?: 'last_activity' | 'expire_date' | 'subscribe_date' | 'is_expired' | null; + + /** + * Direction for `sort`: `desc` (default) or `asc`. Requires `sort` to be set. + * Exception: `sort=expire_date` on the expired list defaults to `asc`, because + * `desc` moves the expired rows to the tail of the underlying collection and + * leaves the early pages empty. Passing `sortDirection` explicitly always wins. + */ + sortDirection?: 'asc' | 'desc' | null; } export namespace FollowingListAllParams { @@ -955,6 +1047,35 @@ export interface FollowingListExpiredParams { * Search within following name/username. */ query?: string | null; + + /** + * Order the list by `last_activity` (the followed creator's last activity), + * `expire_date` (subscription expiry), `subscribe_date` (subscription start) or + * `is_expired` (expired first — OnlyFans only offers this one on the expired + * list). Omit it to keep whichever order is currently stored for the account. + * **Note:** OnlyFans persists this order account-wide, so it also applies to later + * requests that omit `sort` and to the creator's own onlyfans.com UI, until it is + * changed again. **Expired list:** OnlyFans applies `offset` to the whole + * following collection and only then filters it down to expired subscriptions, so + * ordering by expiry descending puts the still-active subscriptions first and + * moves the expired rows to the tail of the collection — the first several hundred + * offsets then come back empty. Use `sortDirection=asc` or `sort=is_expired` to + * get expired-first results. For that reason `sort=expire_date` on the expired + * list defaults to `asc` instead of `desc` when you do not pass `sortDirection`. + * Whatever order you pick, an empty page is **not** the end of the list: keep + * following `_pagination.next_page` until it is `null` rather than stopping at the + * first empty page. This field is required when sortDirection is + * present. + */ + sort?: 'last_activity' | 'expire_date' | 'subscribe_date' | 'is_expired' | null; + + /** + * Direction for `sort`: `desc` (default) or `asc`. Requires `sort` to be set. + * Exception: `sort=expire_date` on the expired list defaults to `asc`, because + * `desc` moves the expired rows to the tail of the underlying collection and + * leaves the early pages empty. Passing `sortDirection` explicitly always wins. + */ + sortDirection?: 'asc' | 'desc' | null; } export namespace FollowingListExpiredParams { diff --git a/src/resources/index.ts b/src/resources/index.ts index 05009760..cf7a6854 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -134,14 +134,13 @@ export { } from './me'; export { Media, - type MediaDownloadResponse, type MediaScrapeResponse, type MediaUploadResponse, type MediaDownloadParams, type MediaScrapeParams, type MediaUploadParams, } from './media/media'; -export { Messages, type MessageAttachTagsResponse, type MessageAttachTagsParams } from './messages'; +export { Messages } from './messages'; export { Notifications, type NotificationListResponse, diff --git a/src/resources/link-tags.ts b/src/resources/link-tags.ts index 5489cf2d..104cf494 100644 --- a/src/resources/link-tags.ts +++ b/src/resources/link-tags.ts @@ -5,12 +5,12 @@ import { APIPromise } from '../core/api-promise'; import { RequestOptions } from '../internal/request-options'; /** - * APIs for managing tags on free trial links and tracking links + * APIs for managing tags on free trial links, tracking links, and Smart Links */ export class LinkTags extends APIResource { /** - * Get all existing tags that have been used on free trial links and/or tracking - * links for this account. This is a free endpoint. + * Get all existing tags that have been used on free trial links, tracking links, + * and/or Smart Links for this account. This is a free endpoint. * * @example * ```ts @@ -73,9 +73,9 @@ export namespace LinkTagListResponse { export interface LinkTagListParams { /** - * Filter by link type. If not provided, returns tags for both types. + * Filter by link type. If not provided, returns tags for all types. */ - type?: 'trial_links' | 'tracking_links'; + type?: 'trial_links' | 'tracking_links' | 'smart_links'; } export declare namespace LinkTags { diff --git a/src/resources/mass-messaging.ts b/src/resources/mass-messaging.ts index 93673373..afe1be74 100644 --- a/src/resources/mass-messaging.ts +++ b/src/resources/mass-messaging.ts @@ -7,7 +7,8 @@ import { path } from '../internal/utils/path'; export class MassMessaging extends APIResource { /** - * Get the content of a mass message. + * Get the content and settings of a mass message, including a message scheduled + * for later. * * @example * ```ts @@ -27,7 +28,8 @@ export class MassMessaging extends APIResource { } /** - * Update a mass message. + * Update the content, recipients, media, price, or scheduled send time of an + * existing mass message. * * @example * ```ts @@ -47,7 +49,8 @@ export class MassMessaging extends APIResource { } /** - * List the pending or recently sent mass messages in the message queue. + * List pending, scheduled, and recently sent mass messages. Use an item ID to + * retrieve, update, reschedule, delete, or unsend the message. * * @example * ```ts @@ -676,6 +679,14 @@ export interface MassMessagingUpdateParams { */ text: string; + /** + * Body param: Screen `text` for OnlyFans banned words and block the update if any + * are found (returns a 422 listing the offending words). `strict_ban` blocks all + * tiers, `risky` blocks Risky + Replace/soften, `replace_soften` blocks + * Replace/soften only. Omit to disable screening. + */ + blockBannedWords?: 'strict_ban' | 'risky' | 'replace_soften'; + /** * Body param: The ID of the Giphy GIF to attach to the message. Get IDs from the * Giphy listing endpoints (`/giphy/trending`, `/giphy/search`). @@ -701,8 +712,8 @@ export interface MassMessagingUpdateParams { previews?: Array; /** - * Body param: Price for paid content (0 or between 3-200). In case this is not - * zero, **mediaFiles** is required + * Body param: Price for paid content in USD (0 or between 3-200). In case this is + * not zero, **mediaFiles** is required */ price?: number; @@ -731,8 +742,8 @@ export interface MassMessagingDeleteParams { export interface MassMessagingRetrieveOverviewParams { /** - * The latest mass message to retrieve. Keep empty to get all. MUST BE DATE AFTER - * `startDate`. This is also used for pagination. + * The latest mass message to retrieve. Keep empty to get all. It must be after + * `startDate` and is also used for pagination. */ endDate?: string; @@ -758,6 +769,14 @@ export interface MassMessagingSendParams { */ text: string; + /** + * Screen `text` for OnlyFans banned words and block the send if any are found + * (returns a 422 listing the offending words). `strict_ban` blocks all tiers, + * `risky` blocks Risky + Replace/soften, `replace_soften` blocks Replace/soften + * only. Omit to disable screening. + */ + blockBannedWords?: 'strict_ban' | 'risky' | 'replace_soften'; + /** * Array of user list IDs that the mass message will NOT be sent to. */ @@ -788,7 +807,7 @@ export interface MassMessagingSendParams { previews?: Array; /** - * Price for paid content (0 or between 3-200). In case this is not zero, + * Price for paid content in USD (0 or between 3-200). In case this is not zero, * **mediaFiles** is required */ price?: number; @@ -818,6 +837,13 @@ export interface MassMessagingSendParams { */ scheduledDate?: string; + /** + * Only send to fans who subscribed within the last N calendar days (1-30, + * including today). Can be combined with `userLists` and `userIds`. Cannot be + * combined with `scheduledDate` or `saveForLater`. + */ + subscribedWithinLastDays?: number; + /** * Array of user IDs that the mass message will be sent to. */ diff --git a/src/resources/media/index.ts b/src/resources/media/index.ts index da4dede6..a471989a 100644 --- a/src/resources/media/index.ts +++ b/src/resources/media/index.ts @@ -2,7 +2,6 @@ export { Media, - type MediaDownloadResponse, type MediaScrapeResponse, type MediaUploadResponse, type MediaDownloadParams, diff --git a/src/resources/media/media.ts b/src/resources/media/media.ts index 08cee5e2..80790763 100644 --- a/src/resources/media/media.ts +++ b/src/resources/media/media.ts @@ -30,21 +30,22 @@ export class Media extends APIResource { * Downloads a file directly from a `https://cdn*.onlyfans.com/*` URL. When the * file is already cached on our CDN, this endpoint returns a `302` redirect to a * `https://cdn.fansapi.com/*` URL. Most HTTP clients follow redirects - * automatically (`curl` requires `-L`). Otherwise, the file is streamed through - * our proxies and queued for caching. + * automatically (`curl` requires `-L`). Otherwise, the file is redirected to + * `dl.fansapi.com`, which streams it through the account proxy and reports billing + * back to the API. * * @example * ```ts - * const response = await client.media.download('cdnUrl', { + * await client.media.download('cdnUrl', { * account: 'acct_XXXXXXXXXXXXXXX', * }); * ``` */ - download(cdnURL: string, params: MediaDownloadParams, options?: RequestOptions): APIPromise { + download(cdnURL: string, params: MediaDownloadParams, options?: RequestOptions): APIPromise { const { account } = params; return this._client.get(path`/api/${account}/media/download/${cdnURL}`, { ...options, - headers: buildHeaders([{ Accept: 'text/plain' }, options?.headers]), + headers: buildHeaders([{ Accept: '*/*' }, options?.headers]), }); } @@ -93,8 +94,6 @@ export class Media extends APIResource { } } -export type MediaDownloadResponse = string; - export interface MediaScrapeResponse { expiration_date?: string; @@ -173,7 +172,9 @@ export interface MediaScrapeParams { export interface MediaUploadParams { /** * Set to `true` to process uploads in the background. Returns a `polling_url` to - * check status. Recommended for large files. + * check status. Recommended for large files. Instead of polling, you can subscribe + * to the `media_uploads.completed` and `media_uploads.failed` webhook events — + * they only fire for async uploads. */ async?: boolean; @@ -201,7 +202,6 @@ Media.Vault = Vault; export declare namespace Media { export { - type MediaDownloadResponse as MediaDownloadResponse, type MediaScrapeResponse as MediaScrapeResponse, type MediaUploadResponse as MediaUploadResponse, type MediaDownloadParams as MediaDownloadParams, diff --git a/src/resources/media/uploads.ts b/src/resources/media/uploads.ts index a2c52d62..91c04eb5 100644 --- a/src/resources/media/uploads.ts +++ b/src/resources/media/uploads.ts @@ -17,6 +17,11 @@ export class Uploads extends APIResource { * - `completed` — Upload finished, `media` and `credits_used` are included * - `failed` — Upload failed, `error` is included * + * Instead of polling, you can subscribe to the `media_uploads.completed` and + * `media_uploads.failed` webhook events. They carry the same fields as this + * endpoint and are only sent for async (`async=true`) uploads — synchronous + * uploads return their result directly. + * * @example * ```ts * const response = await client.media.uploads.getStatus( @@ -42,7 +47,8 @@ export type UploadGetStatusResponse = | UploadGetStatusResponse.UnionMember0 | UploadGetStatusResponse.UnionMember1 | UploadGetStatusResponse.UnionMember2 - | UploadGetStatusResponse.UnionMember3; + | UploadGetStatusResponse.UnionMember3 + | UploadGetStatusResponse.UnionMember4; export namespace UploadGetStatusResponse { /** @@ -66,19 +72,30 @@ export namespace UploadGetStatusResponse { } /** - * Completed POST /media/vault upload + * Upload rejected by OnlyFans — `error` carries the upstream reason verbatim */ export interface UnionMember2 { + error?: string; + + prefixed_id?: string; + + status?: string; + } + + /** + * Completed POST /media/vault upload + */ + export interface UnionMember3 { credits_used?: number; - media?: UnionMember2.Media; + media?: UnionMember3.Media; prefixed_id?: string; status?: string; } - export namespace UnionMember2 { + export namespace UnionMember3 { export interface Media { id?: number; @@ -133,17 +150,17 @@ export namespace UploadGetStatusResponse { /** * Completed POST /media/upload upload */ - export interface UnionMember3 { + export interface UnionMember4 { credits_used?: number; - media?: UnionMember3.Media; + media?: UnionMember4.Media; prefixed_id?: string; status?: string; } - export namespace UnionMember3 { + export namespace UnionMember4 { export interface Media { additional?: Media.Additional; diff --git a/src/resources/media/vault/lists/lists.ts b/src/resources/media/vault/lists/lists.ts index 2161d5cb..736cea07 100644 --- a/src/resources/media/vault/lists/lists.ts +++ b/src/resources/media/vault/lists/lists.ts @@ -58,17 +58,32 @@ export class Lists extends APIResource { * ```ts * const list = await client.media.vault.lists.update('123', { * account: 'acct_XXXXXXXXXXXXXXX', + * name: 'My renamed list', * }); * ``` */ update(listID: string, params: ListUpdateParams, options?: RequestOptions): APIPromise { - const { account } = params; - return this._client.put(path`/api/${account}/media/vault/lists/${listID}`, options); + const { account, ...body } = params; + return this._client.put(path`/api/${account}/media/vault/lists/${listID}`, { body, ...options }); } /** * List your Vault lists (categories). * + * Every response carries an `ETag` computed over the `data` payload. Send it back + * as `If-None-Match` on your next call and you will get a `304 Not Modified` with + * an empty body when nothing changed, so you can keep serving your cached copy + * instead of re-parsing the full list. Credits are debited either way — we still + * have to ask OnlyFans for the current state to know whether it changed. + * + * The `ETag` covers `data` only, never `_meta` — your credits balance changes on + * every call, so including it would mean the `ETag` never matches. Because a `304` + * has no body, it also has no `_meta`: read the current credits and rate-limit + * counters from the `X-OFAPI-Credits-Used`, `X-OFAPI-Credits-Balance`, + * `X-Rate-Limit-Limit-Minute` and `X-Rate-Limit-Remaining-Minute` response + * headers, which are sent on `304` responses too. The `_meta` inside a body you + * cached earlier is stale by definition. + * * @example * ```ts * const lists = await client.media.vault.lists.list( @@ -298,104 +313,191 @@ export namespace ListUpdateResponse { } } -export interface ListListResponse { - _meta?: ListListResponse._Meta; - - data?: ListListResponse.Data; -} +/** + * Success + */ +export type ListListResponse = ListListResponse.UnionMember0 | ListListResponse.UnionMember1; export namespace ListListResponse { - export interface _Meta { - _cache?: _Meta._Cache; - - _credits?: _Meta._Credits; + /** + * Success + */ + export interface UnionMember0 { + _meta?: UnionMember0._Meta; - _rate_limits?: _Meta._RateLimits; + data?: UnionMember0.Data; } - export namespace _Meta { - export interface _Cache { - is_cached?: boolean; + export namespace UnionMember0 { + export interface _Meta { + _cache?: _Meta._Cache; - note?: string; + _credits?: _Meta._Credits; + + _rate_limits?: _Meta._RateLimits; } - export interface _Credits { - balance?: number; + export namespace _Meta { + export interface _Cache { + is_cached?: boolean; - note?: string; + note?: string; + } - used?: number; + export interface _Credits { + balance?: number; + + note?: string; + + used?: number; + } + + export interface _RateLimits { + limit_day?: number; + + limit_minute?: number; + + remaining_day?: number; + + remaining_minute?: number; + } } - export interface _RateLimits { - limit_day?: number; + export interface Data { + all?: Data.All; - limit_minute?: number; + canCreateVaultLists?: boolean; - remaining_day?: number; + hasMore?: boolean; - remaining_minute?: number; + list?: Array; + + order?: string; + + sort?: string; } - } - export interface Data { - all?: Data.All; + export namespace Data { + export interface All { + audiosCount?: number; + + gifsCount?: number; + + medias?: Array; - canCreateVaultLists?: boolean; + photosCount?: number; - hasMore?: boolean; + videosCount?: number; + } + + export namespace All { + export interface Media { + type?: string; + + url?: string; + } + } + + export interface List { + id?: number; + + audiosCount?: number; + + canDelete?: boolean; + + canUpdate?: boolean; + + gifsCount?: number; + + hasMedia?: boolean; + + medias?: Array; - list?: Array; + name?: string; - order?: string; + photosCount?: number; - sort?: string; + type?: string; + + videosCount?: number; + } + } } - export namespace Data { - export interface All { - audiosCount?: number; + /** + * Success (lightweight=true) + */ + export interface UnionMember1 { + _meta?: UnionMember1._Meta; - gifsCount?: number; + data?: UnionMember1.Data; + } - medias?: Array; + export namespace UnionMember1 { + export interface _Meta { + _cache?: _Meta._Cache; - photosCount?: number; + _credits?: _Meta._Credits; - videosCount?: number; + _rate_limits?: _Meta._RateLimits; } - export namespace All { - export interface Media { - type?: string; + export namespace _Meta { + export interface _Cache { + is_cached?: boolean; - url?: string; + note?: string; + } + + export interface _Credits { + balance?: number; + + note?: string; + + used?: number; + } + + export interface _RateLimits { + limit_day?: number; + + limit_minute?: number; + + remaining_day?: number; + + remaining_minute?: number; } } - export interface List { - id?: number; + export interface Data { + all?: Data.All; - audiosCount?: number; + canCreateVaultLists?: boolean; - canDelete?: boolean; + hasMore?: boolean; - canUpdate?: boolean; + list?: Array; - gifsCount?: number; + order?: string; - hasMedia?: boolean; + sort?: string; + } + + export namespace Data { + export interface All { + mediaCount?: number; + } - medias?: Array; + export interface List { + id?: number; - name?: string; + canUpdate?: boolean; - photosCount?: number; + mediaCount?: number; - type?: string; + name?: string; - videosCount?: number; + type?: string; + } } } } @@ -462,12 +564,25 @@ export interface ListRetrieveParams { export interface ListUpdateParams { /** - * The Account ID + * Path param: The Account ID */ account: string; + + /** + * Body param: The new name for the vault list. Must not be greater than 255 + * characters. + */ + name: string; } export interface ListListParams { + /** + * Set to `true` to return only `id`, `name`, `type`, `canUpdate` and a rolled-up + * `mediaCount` per list, dropping the `medias` previews. Much smaller payload — + * ideal for rendering a folder picker. Default: `false` + */ + lightweight?: boolean; + /** * Number of media to return per page. Default: `24` */ diff --git a/src/resources/media/vault/lists/media.ts b/src/resources/media/vault/lists/media.ts index 6f8aff53..d62bfa6c 100644 --- a/src/resources/media/vault/lists/media.ts +++ b/src/resources/media/vault/lists/media.ts @@ -12,7 +12,7 @@ export class Media extends APIResource { * @example * ```ts * const response = await client.media.vault.lists.media.add( - * 'nihil', + * 'voluptate', * { account: 'acct_XXXXXXXXXXXXXXX', mediaIds: ['string'] }, * ); * ``` @@ -28,7 +28,7 @@ export class Media extends APIResource { * @example * ```ts * const media = await client.media.vault.lists.media.remove( - * 'nihil', + * 'voluptate', * { account: 'acct_XXXXXXXXXXXXXXX', mediaIds: ['string'] }, * ); * ``` diff --git a/src/resources/media/vault/vault.ts b/src/resources/media/vault/vault.ts index dab8621a..43595d4d 100644 --- a/src/resources/media/vault/vault.ts +++ b/src/resources/media/vault/vault.ts @@ -573,7 +573,9 @@ export interface VaultDeleteParams { export interface VaultUploadParams { /** * Set to `true` to process uploads in the background. Returns a `polling_url` to - * check status. Recommended for large files. + * check status. Recommended for large files. Instead of polling, you can subscribe + * to the `media_uploads.completed` and `media_uploads.failed` webhook events — + * they only fire for async uploads. */ async?: boolean; diff --git a/src/resources/messages.ts b/src/resources/messages.ts index 7793d393..458bbdfc 100644 --- a/src/resources/messages.ts +++ b/src/resources/messages.ts @@ -1,105 +1,5 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../core/resource'; -import { APIPromise } from '../core/api-promise'; -import { RequestOptions } from '../internal/request-options'; -import { path } from '../internal/utils/path'; -export class Messages extends APIResource { - /** - * Attach Tags (Release Forms) to a message that has already been sent. Please - * note, that this is a "sync" operation - for example, if you provide empty - * `rfTag` it will remove all existing tags already attached to the message. - * - * @example - * ```ts - * const response = await client.messages.attachTags( - * '123456789', - * { account: 'acct_XXXXXXXXXXXXXXX' }, - * ); - * ``` - */ - attachTags( - messageID: string, - params: MessageAttachTagsParams, - options?: RequestOptions, - ): APIPromise { - const { account, ...body } = params; - return this._client.post(path`/api/${account}/messages/${messageID}/attach-tags`, { body, ...options }); - } -} - -export interface MessageAttachTagsResponse { - _meta?: MessageAttachTagsResponse._Meta; - - data?: MessageAttachTagsResponse.Data; -} - -export namespace MessageAttachTagsResponse { - export interface _Meta { - _cache?: _Meta._Cache; - - _credits?: _Meta._Credits; - - _rate_limits?: _Meta._RateLimits; - } - - export namespace _Meta { - export interface _Cache { - is_cached?: boolean; - - note?: string; - } - - export interface _Credits { - balance?: number; - - note?: string; - - used?: number; - } - - export interface _RateLimits { - limit_day?: number; - - limit_minute?: number; - - remaining_day?: number; - - remaining_minute?: number; - } - } - - export interface Data { - success?: boolean; - } -} - -export interface MessageAttachTagsParams { - /** - * Path param: The Account ID - */ - account: string; - - /** - * Body param: Array of OnlyFans Release Form Guest IDs to tag in your message - */ - rfGuest?: string; - - /** - * Body param: Array of OnlyFans Release Form Partners IDs to tag in your message - */ - rfPartner?: string; - - /** - * Body param: Array of OnlyFans Creator User IDs to tag in your message - */ - rfTag?: string; -} - -export declare namespace Messages { - export { - type MessageAttachTagsResponse as MessageAttachTagsResponse, - type MessageAttachTagsParams as MessageAttachTagsParams, - }; -} +export class Messages extends APIResource {} diff --git a/src/resources/notifications/notifications.ts b/src/resources/notifications/notifications.ts index f9106609..6e4c520a 100644 --- a/src/resources/notifications/notifications.ts +++ b/src/resources/notifications/notifications.ts @@ -623,7 +623,7 @@ export interface NotificationListParams { limit?: number; /** - * Whether to skip user details. Default `all` + * Whether to skip user details. Defaults to `all`. */ skip_users?: 'all' | 'none'; diff --git a/src/resources/posts/comments.ts b/src/resources/posts/comments.ts index 1da3469e..36ae6c40 100644 --- a/src/resources/posts/comments.ts +++ b/src/resources/posts/comments.ts @@ -12,7 +12,7 @@ export class Comments extends APIResource { * @example * ```ts * const comment = await client.posts.comments.create( - * 'impedit', + * 'repellat', * { * account: 'acct_XXXXXXXXXXXXXXX', * text: 'This is a comment.', @@ -38,7 +38,7 @@ export class Comments extends APIResource { * @example * ```ts * const comments = await client.posts.comments.list( - * 'impedit', + * 'repellat', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` diff --git a/src/resources/posts/posts.ts b/src/resources/posts/posts.ts index bea51422..281afd12 100644 --- a/src/resources/posts/posts.ts +++ b/src/resources/posts/posts.ts @@ -1126,6 +1126,14 @@ export interface PostCreateParams { */ text: string; + /** + * Screen `text` for OnlyFans banned words and block the post if any are found + * (returns a 422 listing the offending words). `strict_ban` blocks all tiers, + * `risky` blocks Risky + Replace/soften, `replace_soften` blocks Replace/soften + * only. Omit to disable screening. + */ + blockBannedWords?: 'strict_ban' | 'risky' | 'replace_soften'; + /** * Number of days after which the post will expire. Between 1 and 30 days. Keep * empty for no expiration. @@ -1217,6 +1225,14 @@ export interface PostUpdateParams { */ text: string; + /** + * Body param: Screen `text` for OnlyFans banned words and block the update if any + * are found (returns a 422 listing the offending words). `strict_ban` blocks all + * tiers, `risky` blocks Risky + Replace/soften, `replace_soften` blocks + * Replace/soften only. Omit to disable screening. + */ + blockBannedWords?: 'strict_ban' | 'risky' | 'replace_soften'; + /** * Body param: Number of days after which the post will expire. Between 1 and 30 * days. Keep empty for no expiration. diff --git a/src/resources/queue.ts b/src/resources/queue.ts index 86b5a584..4b2a6f2c 100644 --- a/src/resources/queue.ts +++ b/src/resources/queue.ts @@ -7,14 +7,14 @@ import { path } from '../internal/utils/path'; export class Queue extends APIResource { /** - * List posts and messages in the queue. + * List scheduled posts and mass messages for a date range. Use the type filter to + * return only posts, messages, or both. * * @example * ```ts * const queues = await client.queue.list( * 'acct_XXXXXXXXXXXXXXX', * { - * limit: 20, * publishDateEnd: '2025-01-01', * publishDateStart: '2025-01-01', * timezone: 'Europe/Prague', @@ -308,25 +308,31 @@ export namespace QueuePublishResponse { export interface QueueListParams { /** - * Maximum number of queue items to return (default = 20) - */ - limit: number; - - /** - * Latest publish date to return + * Latest publish date to return. Must be a valid date. Must be a valid date. Must + * be a date after or equal to publishDateStart. */ publishDateEnd: string; /** - * Earliest publish date to return (must be at least today) + * Earliest publish date to return (must be at least today). Must be a valid date. + * Must be a valid date. Must be a date after or equal to today. */ publishDateStart: string; /** - * Time timezone of the provided dates. - * [View available timezone values](https://www.php.net/manual/en/timezones.php) + * Timezone of the provided dates. + * [View available timezone values](https://www.php.net/manual/en/timezones.php). + * Must be a valid time zone, such as Africa/Accra. */ timezone: string; + + /** + * Maximum number of queue items to return (default 20). Must be at least 1. Must + * not be greater than 100. + */ + limit?: number; + + type?: Array<'chat' | 'post'>; } export interface QueueCountParams { diff --git a/src/resources/release-forms.ts b/src/resources/release-forms.ts index 13463acf..ca0b3863 100644 --- a/src/resources/release-forms.ts +++ b/src/resources/release-forms.ts @@ -55,7 +55,8 @@ export class ReleaseForms extends APIResource { /** * Get a paginated list of users that can be tagged in release forms. These are * verified creators who have signed release forms to appear in your content. Use - * `offset` and `limit` for pagination. + * `offset` and `limit` for pagination, following `_pagination.next_page` until it + * is `null`. * * @example * ```ts @@ -331,11 +332,11 @@ export namespace ReleaseFormListTaggableUsersResponse { export interface _Pagination { next_page?: string; + + notice?: string; } export interface Data { - hasMore?: boolean; - items?: Array; } diff --git a/src/resources/saved-for-later/messages/settings.ts b/src/resources/saved-for-later/messages/settings.ts index 599a9525..09d6973d 100644 --- a/src/resources/saved-for-later/messages/settings.ts +++ b/src/resources/saved-for-later/messages/settings.ts @@ -50,7 +50,7 @@ export class Settings extends APIResource { * const response = * await client.savedForLater.messages.settings.enableOrUpdateAutomaticMessaging( * 'acct_XXXXXXXXXXXXXXX', - * { period: 12 }, + * { period: 24 }, * ); * ``` */ diff --git a/src/resources/saved-for-later/posts/settings.ts b/src/resources/saved-for-later/posts/settings.ts index 2b04cbb2..41feb4c0 100644 --- a/src/resources/saved-for-later/posts/settings.ts +++ b/src/resources/saved-for-later/posts/settings.ts @@ -50,7 +50,7 @@ export class Settings extends APIResource { * const response = * await client.savedForLater.posts.settings.enableOrUpdateAutomaticPosting( * 'acct_XXXXXXXXXXXXXXX', - * { period: 12 }, + * { period: 24 }, * ); * ``` */ diff --git a/src/resources/shared-tracking-links/shared-tracking-links.ts b/src/resources/shared-tracking-links/shared-tracking-links.ts index 3dc886c1..a4071c4d 100644 --- a/src/resources/shared-tracking-links/shared-tracking-links.ts +++ b/src/resources/shared-tracking-links/shared-tracking-links.ts @@ -208,20 +208,41 @@ export namespace SharedTrackingLinkRevokeAccessResponse { export interface SharedTrackingLinkListParams { /** - * The number of shared tracking links to return. Default `10` + * The number of shared tracking links to return. Default `10`. Must be at least 1. + * Must not be greater than 100. */ limit?: number; /** - * The offset used for pagination. Default `0` + * The offset used for pagination. Default `0`. Must be at least 0. */ offset?: number; /** - * Wait for the database sync to finish, instead of running it in the background. - * **Will result in longer response times, use with caution**. Default `false` + * Whether pagination metadata is enabled. Default `1`. */ - synchronous?: boolean | null; + pagination?: 0 | 1; + + /** + * Whether deleted links participate in sorting. Default `1`. + */ + sorting_deleted?: 0 | 1; + + /** + * Whether statistics are included. Default `true`. Must not be greater than 10 + * characters. + */ + stats?: string; + + /** + * Wait for the database sync instead of processing it in the background. + */ + synchronous?: boolean; + + /** + * Whether to include deleted shared tracking links. Default `1`. + */ + with_deleted?: 0 | 1; } export interface SharedTrackingLinkRevokeAccessParams { diff --git a/src/resources/shared-trial-links/shared-trial-links.ts b/src/resources/shared-trial-links/shared-trial-links.ts index bf1fa6c3..2935a811 100644 --- a/src/resources/shared-trial-links/shared-trial-links.ts +++ b/src/resources/shared-trial-links/shared-trial-links.ts @@ -209,20 +209,22 @@ export namespace SharedTrialLinkRevokeAccessResponse { export interface SharedTrialLinkListParams { /** - * The number of shared trial links to return. Default `10` + * The number of shared trial links to return. Default `10`. Must be at least 1. + * Must not be greater than 100. */ limit?: number; /** - * The offset used for pagination. Default `0` + * The offset used for pagination. Default `0`. Must be at least 0. */ offset?: number; + pagination?: 0 | 1; + /** - * Wait for the database sync to finish, instead of running it in the background. - * **Will result in longer response times, use with caution**. Default `false` + * Wait for the database sync instead of processing it in the background. */ - synchronous?: boolean | null; + synchronous?: boolean; } export interface SharedTrialLinkRevokeAccessParams { diff --git a/src/resources/smart-link-postbacks.ts b/src/resources/smart-link-postbacks.ts index 82dbf90d..43a3ff0a 100644 --- a/src/resources/smart-link-postbacks.ts +++ b/src/resources/smart-link-postbacks.ts @@ -18,7 +18,7 @@ export class SmartLinkPostbacks extends APIResource { * await client.smartLinkPostbacks.create({ * conversion_types: ['new_subscriber', 'new_transaction'], * smart_link_scope: 'campaign_specific', - * url: 'https://example.com/postback?click={click_id}&type={conversion_type}&gclid={gclid}', + * url: 'https://example.com/postback?click={external_click_id}&type={conversion_type}&gclid={gclid}', * }); * ``` */ @@ -51,7 +51,7 @@ export class SmartLinkPostbacks extends APIResource { * await client.smartLinkPostbacks.update(123, { * conversion_types: ['new_subscriber'], * smart_link_scope: 'global', - * url: 'https://example.com/postback?click={click_id}&type={conversion_type}', + * url: 'https://example.com/postback?click={external_click_id}&type={conversion_type}', * }); * ``` */ @@ -122,10 +122,16 @@ export namespace SmartLinkPostbackCreateResponse { export interface Data { id?: number; + body?: string; + conversion_types?: Array; created_at?: string; + headers?: Array; + + http_method?: string; + latest_response?: string | null; smart_link_ids?: Array; @@ -134,10 +140,22 @@ export namespace SmartLinkPostbackCreateResponse { smart_links?: Array; + traffic_source_ids?: Array; + + traffic_sources?: Array; + updated_at?: string; url?: string; } + + export namespace Data { + export interface Header { + name?: string; + + value?: string; + } + } } export interface SmartLinkPostbackRetrieveResponse { @@ -172,10 +190,16 @@ export namespace SmartLinkPostbackRetrieveResponse { export interface Data { id?: number; + body?: string; + conversion_types?: Array; created_at?: string; + headers?: Array; + + http_method?: string; + latest_response?: string | null; smart_link_ids?: Array; @@ -184,12 +208,22 @@ export namespace SmartLinkPostbackRetrieveResponse { smart_links?: Array; + traffic_source_ids?: Array; + + traffic_sources?: Array; + updated_at?: string; url?: string; } export namespace Data { + export interface Header { + name?: string; + + value?: string; + } + export interface SmartLink { account_display_name?: string; @@ -234,10 +268,16 @@ export namespace SmartLinkPostbackUpdateResponse { export interface Data { id?: number; + body?: string; + conversion_types?: Array; created_at?: string; + headers?: Array; + + http_method?: string; + latest_response?: string | null; smart_link_ids?: Array; @@ -246,12 +286,22 @@ export namespace SmartLinkPostbackUpdateResponse { smart_links?: Array; + traffic_source_ids?: Array; + + traffic_sources?: Array; + updated_at?: string; url?: string; } export namespace Data { + export interface Header { + name?: string; + + value?: string; + } + export interface SmartLink { account_display_name?: string; @@ -296,10 +346,16 @@ export namespace SmartLinkPostbackListResponse { export interface Data { id?: number; + body?: string; + conversion_types?: Array; created_at?: string; + headers?: Array; + + http_method?: string; + latest_response?: Data.LatestResponse; smart_link_ids?: Array; @@ -308,12 +364,22 @@ export namespace SmartLinkPostbackListResponse { smart_links?: Array; + traffic_source_ids?: Array; + + traffic_sources?: Array; + updated_at?: string; url?: string; } export namespace Data { + export interface Header { + name?: string; + + value?: string; + } + export interface LatestResponse { id?: number; @@ -359,17 +425,50 @@ export interface SmartLinkPostbackCreateParams { smart_link_scope: 'global' | 'campaign_specific'; /** - * The destination URL. Variables such as `{click_id}`, `{fbclid}`, `{gclid}`, and - * `{ttclid}` are replaced when the postback is dispatched. + * The destination URL. Variables such as `{external_click_id}`, `{fbclid}`, + * `{gclid}`, `{gbraid}`, `{wbraid}`, `{ttclid}`, and `{sccid}` are replaced when + * the postback is dispatched. */ url: string; + /** + * Optional request body template for POST postbacks. Variables are replaced when + * the postback is dispatched. + */ + body?: string; + + /** + * Optional request headers. Header values may include postback variables. + */ + headers?: Array; + + /** + * HTTP method used for the postback request. Defaults to `GET` when omitted. + */ + http_method?: 'GET' | 'POST'; + /** * Smart Link ULIDs. Required when `smart_link_scope` is `campaign_specific`. */ smart_link_ids?: Array; } +export namespace SmartLinkPostbackCreateParams { + export interface Header { + /** + * This field is required when headers._.value is present. Must match + * the regex /\A[A-Za-z0-9!#$%&'_+.^\_`|~-]+\z/. Must not be greater than 100 + * characters. + */ + name?: string | null; + + /** + * Must not be greater than 2000 characters. + */ + value?: string | null; + } +} + export interface SmartLinkPostbackUpdateParams { /** * One or more Smart Link conversion types that should trigger this postback. @@ -386,12 +485,44 @@ export interface SmartLinkPostbackUpdateParams { */ url: string; + /** + * Optional request body template for POST postbacks. Variables are replaced when + * the postback is dispatched. + */ + body?: string; + + /** + * Optional request headers. Header values may include postback variables. + */ + headers?: Array; + + /** + * HTTP method used for the postback request. Existing value is kept when omitted. + */ + http_method?: 'GET' | 'POST'; + /** * Smart Link ULIDs. Required when `smart_link_scope` is `campaign_specific`. */ smart_link_ids?: Array; } +export namespace SmartLinkPostbackUpdateParams { + export interface Header { + /** + * This field is required when headers._.value is present. Must match + * the regex /\A[A-Za-z0-9!#$%&'_+.^\_`|~-]+\z/. Must not be greater than 100 + * characters. + */ + name?: string | null; + + /** + * Must not be greater than 2000 characters. + */ + value?: string | null; + } +} + export declare namespace SmartLinkPostbacks { export { type SmartLinkPostbackCreateResponse as SmartLinkPostbackCreateResponse, diff --git a/src/resources/smart-links.ts b/src/resources/smart-links.ts index 5d729c2f..36b175de 100644 --- a/src/resources/smart-links.ts +++ b/src/resources/smart-links.ts @@ -76,7 +76,7 @@ export class SmartLinks extends APIResource { * @example * ```ts * const response = await client.smartLinks.listClicks( - * 'rerum', + * 'dolorem', * ); * ``` */ @@ -95,7 +95,7 @@ export class SmartLinks extends APIResource { * @example * ```ts * const response = await client.smartLinks.listConversions( - * 'facilis', + * 'a', * ); * ``` */ @@ -113,9 +113,7 @@ export class SmartLinks extends APIResource { * * @example * ```ts - * const response = await client.smartLinks.listFans( - * 'ducimus', - * ); + * const response = await client.smartLinks.listFans('libero'); * ``` */ listFans( @@ -132,7 +130,7 @@ export class SmartLinks extends APIResource { * @example * ```ts * const response = await client.smartLinks.listSpenders( - * 'nam', + * 'sed', * ); * ``` */ @@ -149,7 +147,7 @@ export class SmartLinks extends APIResource { * * @example * ```ts - * await client.smartLinks.retrieveCohortArps('eaque'); + * await client.smartLinks.retrieveCohortArps('omnis'); * ``` */ retrieveCohortArps( @@ -171,7 +169,7 @@ export class SmartLinks extends APIResource { * @example * ```ts * const response = await client.smartLinks.retrieveStats( - * 'impedit', + * 'in', * ); * ``` */ @@ -244,7 +242,7 @@ export namespace SmartLinkCreateResponse { name?: string; - revenue?: string | null; + revenue?: string; subscribers_count?: number; @@ -609,6 +607,8 @@ export namespace SmartLinkListClicksResponse { fbclid?: string | null; + gbraid?: string | null; + gclid?: string; gross_clicks?: number; @@ -621,6 +621,8 @@ export namespace SmartLinkListClicksResponse { referrer?: string; + sccid?: string | null; + ttclid?: string; user_agent?: string; @@ -634,6 +636,8 @@ export namespace SmartLinkListClicksResponse { utm_source?: string; utm_term?: string; + + wbraid?: string | null; } export interface Summary { @@ -752,6 +756,8 @@ export namespace SmartLinkListConversionsResponse { fbclid?: string | null; + gbraid?: string | null; + gclid?: string; gross_clicks?: number; @@ -764,6 +770,8 @@ export namespace SmartLinkListConversionsResponse { referrer?: string; + sccid?: string | null; + ttclid?: string; user_agent?: string; @@ -777,6 +785,8 @@ export namespace SmartLinkListConversionsResponse { utm_source?: string; utm_term?: string; + + wbraid?: string | null; } export interface Fan { @@ -853,7 +863,11 @@ export namespace SmartLinkListFansResponse { offset?: number; + previously_subscribed?: string | null; + sort?: string; + + subscribed_using_promo?: string | null; } export interface Row { @@ -877,14 +891,46 @@ export namespace SmartLinkListFansResponse { revenue_net?: number; + subscription_insights?: Row.SubscriptionInsights; + tips_net?: number; username?: string; } + export namespace Row { + export interface SubscriptionInsights { + current_subscription?: SubscriptionInsights.CurrentSubscription; + + current_subscription_from_smart_link?: boolean; + + has_subscription_data?: boolean; + + previously_subscribed?: boolean; + + subscribed_using_promo?: boolean; + } + + export namespace SubscriptionInsights { + export interface CurrentSubscription { + action?: string; + + is_free?: boolean; + + price?: number; + + regular_price?: number; + + type?: string; + } + } + } + export interface Summary { fans_total?: number; + fans_with_1_plus_messages_total?: number; + fans_with_3_plus_messages_total?: number; revenue_net_total?: number; @@ -1043,17 +1089,14 @@ export interface SmartLinkListParams { */ account_ids?: string | null; + filter?: SmartLinkListParams.Filter; + /** * The number of Smart Links to return. Default `50`. Must be at least 1. Must not * be greater than 1000. */ limit?: number; - /** - * Comma-separated Meta Pixel IDs to include. - */ - meta_pixel_ids?: string | null; - /** * Filter Smart Links by name. Must not be greater than 255 characters. */ @@ -1063,6 +1106,20 @@ export interface SmartLinkListParams { * The offset used for pagination. Default `0`. Must be at least 0. */ offset?: number; + + /** + * Comma-separated ad platform Pixel IDs to include. + */ + pixel_ids?: string | null; +} + +export namespace SmartLinkListParams { + export interface Filter { + /** + * Must not be greater than 50 characters. + */ + tags?: Array; + } } export interface SmartLinkListClicksParams { @@ -1101,7 +1158,12 @@ export interface SmartLinkListConversionsParams { /** * Optional conversion type filter */ - conversion_type?: 'new_subscriber' | 'new_transaction' | 'message_received' | 'fan_sent_3_messages'; + conversion_type?: + | 'new_subscriber' + | 'new_transaction' + | 'message_received' + | 'fan_sent_1_message' + | 'fan_sent_3_messages'; /** * Optional report range end date @@ -1170,6 +1232,12 @@ export interface SmartLinkListFansParams { */ offset?: number; + /** + * Optional - Filter to returning subscribers (fans previously subscribed before + * this subscription) + */ + previously_subscribed?: boolean; + /** * Optional sort field. Default `-revenue_net` */ @@ -1182,6 +1250,11 @@ export interface SmartLinkListFansParams { | '-messages_sent_by_fan' | 'converted_at' | '-converted_at'; + + /** + * Optional - Filter to fans who subscribed via a promotion/offer + */ + subscribed_using_promo?: boolean; } export interface SmartLinkListSpendersParams { diff --git a/src/resources/statistics/reach.ts b/src/resources/statistics/reach.ts index f5fcbe46..1c97aae6 100644 --- a/src/resources/statistics/reach.ts +++ b/src/resources/statistics/reach.ts @@ -372,7 +372,7 @@ export interface ReachGetProfileVisitorsParams { end_date: string; /** - * The start date for the period + * The start date for the period. */ start_date: string; diff --git a/src/resources/statistics/statements.ts b/src/resources/statistics/statements.ts index 47b62523..50e6cdcf 100644 --- a/src/resources/statistics/statements.ts +++ b/src/resources/statistics/statements.ts @@ -14,7 +14,10 @@ export class Statements extends APIResource { * const response = * await client.statistics.statements.getEarnings( * 'acct_XXXXXXXXXXXXXXX', - * { start_date: '2025-01-01 00:00:00' }, + * { + * end_date: '2025-03-31 23:59:59', + * start_date: '2025-01-01 00:00:00', + * }, * ); * ``` */ @@ -103,14 +106,14 @@ export namespace StatementGetEarningsResponse { export interface StatementGetEarningsParams { /** - * The start date for the period + * The end date for the period. */ - start_date: string; + end_date: string; /** - * The end date for the period. + * The start date for the period. */ - end_date?: string; + start_date: string; /** * Filter by All / Subscriptions / Tips / Posts / Messages / Streams diff --git a/src/resources/statistics/statistics.ts b/src/resources/statistics/statistics.ts index e9efa4d3..9f91810e 100644 --- a/src/resources/statistics/statistics.ts +++ b/src/resources/statistics/statistics.ts @@ -21,16 +21,12 @@ export class Statistics extends APIResource { * const response = * await client.statistics.calculateTotalTransactions( * 'acct_XXXXXXXXXXXXXXX', - * { - * end_date: '2025-03-31 23:59:59', - * start_date: '2025-01-01 00:00:00', - * }, * ); * ``` */ calculateTotalTransactions( account: string, - query: StatisticCalculateTotalTransactionsParams, + query: StatisticCalculateTotalTransactionsParams | null | undefined = {}, options?: RequestOptions, ): APIPromise { return this._client.get(path`/api/${account}/statistics/total-transactions`, { query, ...options }); @@ -390,12 +386,12 @@ export interface StatisticCalculateTotalTransactionsParams { /** * The end date for the period. Keep empty to calculate everything. */ - end_date: string; + end_date?: string; /** * The start date for the period. Keep empty to calculate everything. */ - start_date: string; + start_date?: string; } export interface StatisticGetOverviewParams { @@ -432,6 +428,12 @@ export interface StatisticGetSubscriberMetricsParams { * time out if timeframe is too large. Default = `false` */ detailed?: boolean | null; + + /** + * Use only with `detailed=true` - otherwise, it has no effect. Filter the + * subscriber statistics (default = total) + */ + detailed_type?: 'total' | 'renew' | 'new' | null; } Statistics.Statements = Statements; diff --git a/src/resources/stories/highlights.ts b/src/resources/stories/highlights.ts index a61cc3b3..190efad0 100644 --- a/src/resources/stories/highlights.ts +++ b/src/resources/stories/highlights.ts @@ -121,7 +121,7 @@ export class Highlights extends APIResource { * @example * ```ts * const response = await client.stories.highlights.addStory( - * 'maxime', + * 'commodi', * { * account: 'acct_XXXXXXXXXXXXXXX', * highlight_id: 1234567890, @@ -148,7 +148,7 @@ export class Highlights extends APIResource { * @example * ```ts * const response = - * await client.stories.highlights.removeStory('maxime', { + * await client.stories.highlights.removeStory('commodi', { * account: 'acct_XXXXXXXXXXXXXXX', * highlight_id: 1234567890, * }); diff --git a/src/resources/stories/stories.ts b/src/resources/stories/stories.ts index 459671f8..5d920772 100644 --- a/src/resources/stories/stories.ts +++ b/src/resources/stories/stories.ts @@ -30,7 +30,9 @@ export class Stories extends APIResource { highlights: HighlightsAPI.Highlights = new HighlightsAPI.Highlights(this._client); /** - * Post a new media or vault file to your story. + * Post a new media or vault file to your story, optionally with text overlays, + * @mentions, and a question sticker. Overlay elements are rendered by OnlyFans on + * top of your story media at view time. * * @example * ```ts @@ -228,6 +230,10 @@ export namespace StoryCreateResponse { canDelete?: boolean; + canvasHeight?: number; + + canvasWidth?: number; + commentsCount?: number; createdAt?: string; @@ -246,9 +252,11 @@ export namespace StoryCreateResponse { media?: Array; - question?: string | null; + question?: Data.Question; - releaseForms?: Array; + releaseForms?: Array; + + texts?: Array; tipsAmount?: string; @@ -311,6 +319,114 @@ export namespace StoryCreateResponse { } } } + + export interface Question { + entity?: Question.Entity; + + positions?: Question.Positions; + + type?: string; + } + + export namespace Question { + export interface Entity { + id?: number; + + createdAt?: string; + + text?: string; + } + + export interface Positions { + angle?: number; + + color?: string; + + height?: number; + + left?: number; + + top?: number; + + width?: number; + + x?: string | null; + + y?: string | null; + + zIndex?: number; + } + } + + export interface ReleaseForm { + id?: number; + + name?: string; + + partnerSource?: string; + + type?: string; + + user?: ReleaseForm.User; + } + + export namespace ReleaseForm { + export interface User { + id?: number; + + avatar?: string | null; + + avatarThumbs?: string | null; + + isFromGuest?: boolean; + + isIdentityVerified?: boolean; + + ivStatus?: string; + + name?: string; + + username?: string; + + view?: string; + } + } + + export interface Text { + angle?: number; + + bgColor?: string; + + color?: string; + + fontFamily?: string; + + fontSize?: string; + + fontStyle?: string | null; + + fontWeight?: number; + + left?: number; + + scale?: number; + + text?: string; + + textAlign?: string; + + textHeight?: number; + + textWidth?: number; + + top?: number; + + type?: string; + + users?: Array; + + zIndex?: number; + } } } @@ -1232,10 +1348,160 @@ export namespace StoryRetrieveStatsResponse { export interface StoryCreateParams { /** - * Array of media file upload prefixed_ids, or OF media IDs (required if price is - * not 0). + * Array of media file upload prefixed_ids, or OF vault media IDs. */ mediaFiles: Array; + + /** + * Canvas height overlay positions are relative to. Default `1920`. + */ + canvasHeight?: number; + + /** + * Canvas width overlay positions are relative to. Default `1080`. + */ + canvasWidth?: number; + + /** + * Interactive question sticker viewers can answer. + */ + question?: StoryCreateParams.Question; + + /** + * Text and @mention overlays. + */ + texts?: Array; +} + +export namespace StoryCreateParams { + /** + * Interactive question sticker viewers can answer. + */ + export interface Question { + /** + * Sticker accent color (hex). Default `#FF51DC`. + */ + color?: string; + + /** + * Sticker height in canvas px. Default `160`. + */ + height?: number; + + /** + * Horizontal position as a percentage of the canvas width (0-100). Default `25`. + */ + left?: number; + + /** + * The question to ask. + */ + text?: string; + + /** + * Vertical position as a percentage of the canvas height (0-100). Default `30`. + */ + top?: number; + + /** + * Sticker width in canvas px. Default `257`. + */ + width?: number; + } + + export interface Text { + /** + * The overlay text. For mentions this must be the `@username` to mention (OnlyFans + * resolves the user and adds them to the story's release forms). + */ + text: string; + + /** + * Rotation in degrees. Default `0`. + */ + angle?: number; + + /** + * Background color (hex, `#00000000` = transparent). Native editor palette: + * #FFFFFF #000000 #69818C #FF51DC #FF4081 #FA3240 #FF8040 #FCA800 #70CF27 #00C864 + * #00B1CC #2196F3 #7953F5 #A832BF. Default: transparent for texts, white for + * mentions. + */ + bgColor?: string; + + /** + * Text color (hex). Defaults to the native editor behavior: white on a colored + * background, black on a white background (mentions: OnlyFans blue `#0091EA` on + * white). + */ + color?: string; + + /** + * Font family. Families support specific weights only: Roboto (400/500/700), + * PTMono (400), ShantellSans (400), SofiaSans (400, renders uppercase), + * YanoneKaffeesatz (700), RubikMedium (500), RubikBlack (700). Default `Roboto`. + * Ignored for mentions (always Roboto 500). + */ + fontFamily?: + | 'Roboto' + | 'PTMono' + | 'ShantellSans' + | 'SofiaSans' + | 'YanoneKaffeesatz' + | 'RubikMedium' + | 'RubikBlack'; + + /** + * Font size in canvas px (8-100). The native editor uses 9-36. Default `20`. + */ + fontSize?: number; + + /** + * Font weight; must match the chosen family (see `fontFamily`). + */ + fontWeight?: 400 | 500 | 700; + + /** + * Horizontal position as a percentage of the canvas width (0-100). Default `25`. + */ + left?: number; + + /** + * Scale factor. Default `1`. + */ + scale?: number; + + /** + * Text alignment. Default `left`. + */ + textAlign?: 'left' | 'center' | 'right'; + + /** + * Rendered text box height in canvas px. Estimated automatically when omitted. + */ + textHeight?: number; + + /** + * Rendered text box width in canvas px. Estimated automatically when omitted. + */ + textWidth?: number; + + /** + * Vertical position as a percentage of the canvas height (0-100). Defaults stagger + * each overlay below the previous one. + */ + top?: number; + + /** + * Overlay type. Default `text`. + */ + type?: 'text' | 'mention'; + + /** + * Stacking order. Defaults to placement order. + */ + zIndex?: number; + } } export interface StoryRetrieveParams { diff --git a/src/resources/tracking-links/tracking-links.ts b/src/resources/tracking-links/tracking-links.ts index d9224e62..6ed89cd0 100644 --- a/src/resources/tracking-links/tracking-links.ts +++ b/src/resources/tracking-links/tracking-links.ts @@ -47,7 +47,7 @@ export class TrackingLinks extends APIResource { * @example * ```ts * const trackingLink = await client.trackingLinks.retrieve( - * 'et', + * 'similique', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` @@ -85,7 +85,7 @@ export class TrackingLinks extends APIResource { * @example * ```ts * const trackingLink = await client.trackingLinks.delete( - * 'et', + * 'similique', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` @@ -104,7 +104,7 @@ export class TrackingLinks extends APIResource { * * @example * ```ts - * await client.trackingLinks.getCohortArps('et', { + * await client.trackingLinks.getCohortArps('repellat', { * account: 'acct_XXXXXXXXXXXXXXX', * }); * ``` @@ -134,7 +134,7 @@ export class TrackingLinks extends APIResource { * @example * ```ts * const response = await client.trackingLinks.getStats( - * 'voluptatem', + * 'explicabo', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` @@ -823,47 +823,49 @@ export interface TrackingLinkRetrieveParams { export interface TrackingLinkListParams { /** - * The end date for Tracking Links. Keep empty to get all. + * The end date for tracking links. Keep empty to get all. Must not be greater than + * 255 characters. */ endDate?: string | null; /** - * The number of tracking links to return. Default `3` + * The number of tracking links to return. Default `10`. Must be at least 1. Must + * not be greater than 100. */ - limit?: number | null; + limit?: number; /** - * The offset used for pagination. Default `0` + * The offset used for pagination. Default `0`. Must be at least 0. */ - offset?: number | null; + offset?: number; + + pagination?: 0 | 1; /** - * Sort the results. Default `desc` + * Sort direction. Default `desc`. */ - sort?: 'desc' | 'asc' | null; + sort?: 'asc' | 'desc'; /** - * Sort by subscriber count (claims), or creation date + * Sort by subscriber count (`claims`) or creation date (`created_date`). */ - sortby?: 'claims' | 'created_date' | null; + sortby?: 'claims' | 'created_date'; /** - * The start date for Tracking Links. Keep empty to get all. + * The start date for tracking links. Keep empty to get all. Must not be greater + * than 255 characters. */ startDate?: string | null; /** - * Wait for the revenue data to finish processing, instead of processing in the - * background. **Will result in longer response times, use with caution**. Default - * `false` + * Wait for revenue calculation instead of processing it in the background. */ - synchronous?: boolean | null; + synchronous?: boolean; /** - * Whether or not to include deleted tracking links in the response. Default - * `false` + * Whether to include deleted tracking links. Default `true`. */ - with_deleted?: boolean | null; + with_deleted?: 0 | 1; } export interface TrackingLinkDeleteParams { diff --git a/src/resources/transactions.ts b/src/resources/transactions.ts index af9a9107..8f558ab0 100644 --- a/src/resources/transactions.ts +++ b/src/resources/transactions.ts @@ -155,7 +155,7 @@ export interface TransactionListParams { marker?: string; /** - * The start date for transactions list. Default: `-30days` + * The start date for the transactions list. Defaults to 30 days ago. */ startDate?: string; diff --git a/src/resources/trial-links/trial-links.ts b/src/resources/trial-links/trial-links.ts index a13402e7..9cc790a5 100644 --- a/src/resources/trial-links/trial-links.ts +++ b/src/resources/trial-links/trial-links.ts @@ -51,7 +51,7 @@ export class TrialLinks extends APIResource { * @example * ```ts * const trialLink = await client.trialLinks.retrieve( - * 'officia', + * 'consectetur', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` @@ -72,13 +72,12 @@ export class TrialLinks extends APIResource { * ```ts * const trialLinks = await client.trialLinks.list( * 'acct_XXXXXXXXXXXXXXX', - * { limit: 10, offset: 0 }, * ); * ``` */ list( account: string, - query: TrialLinkListParams, + query: TrialLinkListParams | null | undefined = {}, options?: RequestOptions, ): APIPromise { return this._client.get(path`/api/${account}/trial-links`, { query, ...options }); @@ -90,7 +89,7 @@ export class TrialLinks extends APIResource { * @example * ```ts * const trialLink = await client.trialLinks.delete( - * 'officia', + * 'consectetur', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` @@ -130,7 +129,7 @@ export class TrialLinks extends APIResource { * @example * ```ts * const response = await client.trialLinks.listSubscribers( - * 'eum', + * 'incidunt', * { * account: 'acct_XXXXXXXXXXXXXXX', * limit: 10, @@ -156,7 +155,7 @@ export class TrialLinks extends APIResource { * * @example * ```ts - * await client.trialLinks.retrieveCohortArps('eius', { + * await client.trialLinks.retrieveCohortArps('dolore', { * account: 'acct_XXXXXXXXXXXXXXX', * }); * ``` @@ -181,7 +180,7 @@ export class TrialLinks extends APIResource { * @example * ```ts * const response = await client.trialLinks.retrieveStats( - * 'aut', + * 'autem', * { account: 'acct_XXXXXXXXXXXXXXX' }, * ); * ``` @@ -1077,31 +1076,42 @@ export interface TrialLinkRetrieveParams { export interface TrialLinkListParams { /** - * The number of trial links to return. Default `10` + * The end date for trial links. Keep empty to get all. Must not be greater than + * 255 characters. */ - limit: number; + endDate?: string | null; /** - * The offset used for pagination. Default `0` + * Field to sort by. Default `create_date`. */ - offset: number; + field?: 'create_date' | 'expire_date' | 'subscribe_counts' | 'subscribe_days' | 'claims_count'; + + /** + * The number of trial links to return. Default `10`. Must be at least 1. Must not + * be greater than 100. + */ + limit?: number; + + /** + * The offset used for pagination. Default `0`. Must be at least 0. + */ + offset?: number; /** - * Sort the results by a field. Default `create_date` + * Sort direction. Default `desc`. */ - field?: 'create_date' | 'expire_date' | 'subscribe_counts' | 'subscribe_days' | 'claims_count' | null; + sort?: 'asc' | 'desc'; /** - * Sort the results. Default `desc` + * The start date for trial links. Keep empty to get all. Must not be greater than + * 255 characters. */ - sort?: 'desc' | 'asc' | null; + startDate?: string | null; /** - * Wait for the revenue data to finish processing, instead of processing in the - * background. **Will result in longer response times, use with caution**. Default - * `false` + * Wait for revenue calculation instead of processing it in the background. */ - synchronous?: boolean | null; + synchronous?: boolean; } export interface TrialLinkDeleteParams { diff --git a/src/resources/user-lists/user-lists.ts b/src/resources/user-lists/user-lists.ts index f96c64b6..b2ca7853 100644 --- a/src/resources/user-lists/user-lists.ts +++ b/src/resources/user-lists/user-lists.ts @@ -31,7 +31,7 @@ export class UserLists extends APIResource { * ```ts * const userList = await client.userLists.create( * 'acct_XXXXXXXXXXXXXXX', - * { name: 'sdqtzwslsvoxbkxj' }, + * { name: 'pplc' }, * ); * ``` */ @@ -87,7 +87,8 @@ export class UserLists extends APIResource { } /** - * Get a list of OnlyFans Collections - User Lists + * Get a list of OnlyFans Collections - User Lists. If you only want to get User + * Lists available for sending a Mass-Message, use `?view=queue` * * @example * ```ts @@ -552,6 +553,12 @@ export interface UserListListParams { * Must be at least 0. */ offset?: number | null; + + /** + * How to return the results. `queue` returns the user lists that are available for + * Mass-Messaging. + */ + view?: 'queue'; } export interface UserListDeleteParams { diff --git a/src/resources/user-lists/users.ts b/src/resources/user-lists/users.ts index 16bd1e16..f805d454 100644 --- a/src/resources/user-lists/users.ts +++ b/src/resources/user-lists/users.ts @@ -491,49 +491,117 @@ export namespace UserListResponse { } } -export interface UserAddResponse { - _meta?: UserAddResponse._Meta; - - data?: UserAddResponse.Data; -} +/** + * Default: OnlyFans accepted every User ID + */ +export type UserAddResponse = UserAddResponse.UnionMember0 | UserAddResponse.UnionMember1; export namespace UserAddResponse { - export interface _Meta { - _cache?: _Meta._Cache; - - _credits?: _Meta._Credits; + /** + * Default: OnlyFans accepted every User ID + */ + export interface UnionMember0 { + _meta?: UnionMember0._Meta; - _rate_limits?: _Meta._RateLimits; + data?: UnionMember0.Data; } - export namespace _Meta { - export interface _Cache { - is_cached?: boolean; + export namespace UnionMember0 { + export interface _Meta { + _cache?: _Meta._Cache; - note?: string; + _credits?: _Meta._Credits; + + _rate_limits?: _Meta._RateLimits; } - export interface _Credits { - balance?: number; + export namespace _Meta { + export interface _Cache { + is_cached?: boolean; - note?: string; + note?: string; + } - used?: number; - } + export interface _Credits { + balance?: number; - export interface _RateLimits { - limit_day?: number; + note?: string; - limit_minute?: number; + used?: number; + } - remaining_day?: number; + export interface _RateLimits { + limit_day?: number; - remaining_minute?: number; + limit_minute?: number; + + remaining_day?: number; + + remaining_minute?: number; + } + } + + export interface Data { + '1224114714'?: Array; } } - export interface Data { - '1224114714'?: Array; + /** + * With `skip_invalid=true`: the rejected User IDs are reported instead of failing + * the batch + */ + export interface UnionMember1 { + _meta?: UnionMember1._Meta; + + data?: UnionMember1.Data; + } + + export namespace UnionMember1 { + export interface _Meta { + _cache?: _Meta._Cache; + + _credits?: _Meta._Credits; + + _rate_limits?: _Meta._RateLimits; + } + + export namespace _Meta { + export interface _Cache { + is_cached?: boolean; + + note?: string; + } + + export interface _Credits { + balance?: number; + + note?: string; + + used?: number; + } + + export interface _RateLimits { + limit_day?: number; + + limit_minute?: number; + + remaining_day?: number; + + remaining_minute?: number; + } + } + + export interface Data { + added?: Array; + + failed?: Data.Failed; + } + + export namespace Data { + export interface Failed { + '123456'?: string; + } + } } } @@ -1190,6 +1258,17 @@ export interface UserAddParams { * Body param: Array of OnlyFans User IDs to be added into the list */ ids: Array; + + /** + * Body param: Set to `true` to skip the User IDs OnlyFans refuses instead of + * failing the whole batch. We drop the rejected IDs and retry the remainder for + * you (up to 5 OnlyFans attempts, each costing 1 credit), then respond `200` with + * `data.added` (the IDs that made it in) and `data.failed` (an object mapping each + * rejected User ID to the reason OnlyFans gave). Note this changes the shape of + * `data` — see the example responses. Failures that are not about individual users + * (e.g. an invalid or inaccessible list ID) still return the regular `400`. + */ + skip_invalid?: boolean; } export interface UserClearParams { diff --git a/src/resources/webhooks.ts b/src/resources/webhooks.ts index 2aeeaea9..1c77a723 100644 --- a/src/resources/webhooks.ts +++ b/src/resources/webhooks.ts @@ -367,8 +367,9 @@ export namespace WebhookListEventsResponse { export interface WebhookCreateParams { /** - * The account scope for the webhook. Use "global" for all accounts, "inclusive" - * for only selected accounts, or "exclusive" for all except selected accounts. + * The account scope for the webhook (OnlyFans and Fansly webhooks alike). Use + * "global" for all accounts, "inclusive" for only selected accounts, or + * "exclusive" for all except selected accounts. */ account_scope: string; @@ -379,13 +380,15 @@ export interface WebhookCreateParams { /** * An array of webhook events to subscribe to. For all options, refer to our **List - * Available Events** endpoint. + * Available Events** endpoint. A webhook is single-platform: subscribe to either + * OnlyFans events or Fansly (`fansly.*`) events, never both in one webhook. */ events: Array; /** - * An array of account IDs to apply the scope to. Required unless account_scope is - * "global". + * An array of account IDs to apply the scope to. Use OnlyFans account IDs + * (`acct_...`) for OnlyFans webhooks and Fansly account IDs (`fansly_acct_...`) + * for Fansly webhooks. Required unless account_scope is "global". */ account_ids?: Array; @@ -397,8 +400,9 @@ export interface WebhookCreateParams { export interface WebhookUpdateParams { /** - * The account scope for the webhook. Use "global" for all accounts, "inclusive" - * for only selected accounts, or "exclusive" for all except selected accounts. + * The account scope for the webhook (OnlyFans and Fansly webhooks alike). Use + * "global" for all accounts, "inclusive" for only selected accounts, or + * "exclusive" for all except selected accounts. */ account_scope: string; @@ -409,13 +413,15 @@ export interface WebhookUpdateParams { /** * An array of webhook events to subscribe to. For all options, refer to our **List - * Available Events** endpoint. + * Available Events** endpoint. A webhook is single-platform: subscribe to either + * OnlyFans events or Fansly (`fansly.*`) events, never both in one webhook. */ events: Array; /** - * An array of account IDs to apply the scope to. Required unless account_scope is - * "global". + * An array of account IDs to apply the scope to. Use OnlyFans account IDs + * (`acct_...`) for OnlyFans webhooks and Fansly account IDs (`fansly_acct_...`) + * for Fansly webhooks. Required unless account_scope is "global". */ account_ids?: Array; diff --git a/src/version.ts b/src/version.ts index bade2ffc..88f4d403 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.2.0'; // x-release-please-version +export const VERSION = '0.3.0'; // x-release-please-version diff --git a/tests/api-resources/accounts.test.ts b/tests/api-resources/accounts.test.ts index 1e3be330..530921ea 100644 --- a/tests/api-resources/accounts.test.ts +++ b/tests/api-resources/accounts.test.ts @@ -37,7 +37,7 @@ describe('resource accounts', () => { // Mock server tests are disabled test.skip('disconnect', async () => { - const responsePromise = client.accounts.disconnect('nobis'); + const responsePromise = client.accounts.disconnect('pariatur'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; diff --git a/tests/api-resources/authenticate.test.ts b/tests/api-resources/authenticate.test.ts index a62f86a9..b383d593 100644 --- a/tests/api-resources/authenticate.test.ts +++ b/tests/api-resources/authenticate.test.ts @@ -62,22 +62,22 @@ describe('resource authenticate', () => { await expect( client.authenticate.start( { - auth_id: 'accusamus', - auth_type: 'email_password', - cookies: 'unde', + auth_id: 'nesciunt', + auth_type: 'mobile_app', + cookies: 'aperiam', customProxy: { host: 'proxy.example.com', - password: '}b2XD-AinlA~Cg9=', + password: '9<*H%e|y}d]=)bU1<', port: 8080, - username: 'et', + username: 'molestiae', }, - email: 'ismael91@example.com', - force_connect: false, - name: 'molestiae', - password: 'iRPp(K"M[C1Qv,f', - proxyCountry: 'us', - user_agent: 'velit', - xbc: 'suscipit', + email: 'labernathy@example.org', + force_connect: true, + name: 'debitis', + password: '#913++lRIwb', + proxyCountry: 'gb', + user_agent: 'explicabo', + xbc: 'officiis', }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/chats/messages.test.ts b/tests/api-resources/chats/messages.test.ts index d33a4619..617a9ab3 100644 --- a/tests/api-resources/chats/messages.test.ts +++ b/tests/api-resources/chats/messages.test.ts @@ -164,16 +164,18 @@ describe('resource messages', () => { test.skip('send: required and optional params', async () => { const response = await client.chats.messages.send('123', { account: 'acct_XXXXXXXXXXXXXXX', + blockBannedWords: 'strict_ban', giphyId: 'WAGC3LeqJvXglm5H7a', lockedText: true, mediaFiles: ['ofapi_media_abc123', 1234567890], previews: ['ofapi_media_abc123', 1234567890], - price: 10, + price: 6.97, replyToMessageId: 123456789, rfGuest: 'rfGuest', rfPartner: 'rfPartner', rfTag: 'rfTag', text: 'Hello!', + 'Idempotency-Key': 'a1b2c3d4-5e6f-4789-a0b1-c2d3e4f5a6b7', }); }); diff --git a/tests/api-resources/client-sessions.test.ts b/tests/api-resources/client-sessions.test.ts index 229de463..9c8f1bea 100644 --- a/tests/api-resources/client-sessions.test.ts +++ b/tests/api-resources/client-sessions.test.ts @@ -27,7 +27,7 @@ describe('resource clientSessions', () => { const response = await client.clientSessions.create({ display_name: 'STRLCxGLVC Agency / Model: Stella', client_reference_id: 'my_crm_model_12345', - proxy_country: 'uk', + proxy_country: 'gb', }); }); }); diff --git a/tests/api-resources/engagement/messages/messages.test.ts b/tests/api-resources/engagement/messages/messages.test.ts index 32dab22b..e9488683 100644 --- a/tests/api-resources/engagement/messages/messages.test.ts +++ b/tests/api-resources/engagement/messages/messages.test.ts @@ -10,7 +10,7 @@ const client = new OnlyFansAPI({ describe('resource messages', () => { // Mock server tests are disabled test.skip('getMessageBuyers: only required params', async () => { - const responsePromise = client.engagement.messages.getMessageBuyers('et', { + const responsePromise = client.engagement.messages.getMessageBuyers('earum', { account: 'acct_XXXXXXXXXXXXXXX', }); const rawResponse = await responsePromise.asResponse(); @@ -24,7 +24,7 @@ describe('resource messages', () => { // Mock server tests are disabled test.skip('getMessageBuyers: required and optional params', async () => { - const response = await client.engagement.messages.getMessageBuyers('et', { + const response = await client.engagement.messages.getMessageBuyers('earum', { account: 'acct_XXXXXXXXXXXXXXX', limit: 10, marker: 0, diff --git a/tests/api-resources/fans/fans.test.ts b/tests/api-resources/fans/fans.test.ts index 6745d44f..67f33c42 100644 --- a/tests/api-resources/fans/fans.test.ts +++ b/tests/api-resources/fans/fans.test.ts @@ -48,6 +48,7 @@ describe('resource fans', () => { { filter: { duration: 0, + max_total_spent: 0, online: null, tips: 0, total_spent: 0, @@ -83,6 +84,7 @@ describe('resource fans', () => { { filter: { duration: 0, + max_total_spent: 0, online: null, tips: 0, total_spent: 0, @@ -118,6 +120,7 @@ describe('resource fans', () => { { filter: { duration: 0, + max_total_spent: 0, online: null, tips: 0, total_spent: 0, diff --git a/tests/api-resources/following.test.ts b/tests/api-resources/following.test.ts index 0647920c..c2cb7d1f 100644 --- a/tests/api-resources/following.test.ts +++ b/tests/api-resources/following.test.ts @@ -31,6 +31,8 @@ describe('resource following', () => { limit: 10, offset: 0, query: 'john', + sort: 'subscribe_date', + sortDirection: 'desc', }, { path: '/_stainless_unknown_path' }, ), @@ -60,6 +62,8 @@ describe('resource following', () => { limit: 10, offset: 0, query: 'john', + sort: 'subscribe_date', + sortDirection: 'desc', }, { path: '/_stainless_unknown_path' }, ), @@ -89,6 +93,8 @@ describe('resource following', () => { limit: 10, offset: 0, query: 'john', + sort: 'subscribe_date', + sortDirection: 'desc', }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/mass-messaging.test.ts b/tests/api-resources/mass-messaging.test.ts index c1d69b78..090e9109 100644 --- a/tests/api-resources/mass-messaging.test.ts +++ b/tests/api-resources/mass-messaging.test.ts @@ -45,11 +45,12 @@ describe('resource massMessaging', () => { const response = await client.massMessaging.update('id', { account: 'acct_XXXXXXXXXXXXXXX', text: 'Hello!', + blockBannedWords: 'strict_ban', giphyId: 'WAGC3LeqJvXglm5H7a', lockedText: true, mediaFiles: ['ofapi_media_abc123', 'string'], previews: ['ofapi_media_abc123', 'string'], - price: 100, + price: 6.97, scheduledDate: '2025-01-01T00:00:00.000Z', userIds: ['string'], userLists: ['fans', 'recent', 'following', 'rebill_off', 'tagged', 'string'], @@ -130,17 +131,19 @@ describe('resource massMessaging', () => { test.skip('send: required and optional params', async () => { const response = await client.massMessaging.send('acct_XXXXXXXXXXXXXXX', { text: 'Hello!', + blockBannedWords: 'strict_ban', excludedLists: ['fans', 'recent', 'following', 'rebill_off', 'tagged', 'string'], giphyId: 'WAGC3LeqJvXglm5H7a', lockedText: true, mediaFiles: ['ofapi_media_abc123', 1234567890], previews: ['ofapi_media_abc123', 1234567890], - price: 100, + price: 6.97, rfGuest: 'rfGuest', rfPartner: 'rfPartner', rfTag: 'rfTag', saveForLater: true, scheduledDate: '2025-01-01T00:00:00.000Z', + subscribedWithinLastDays: 0, userIds: ['string'], userLists: ['fans', 'recent', 'following', 'rebill_off', 'tagged', 'string'], }); diff --git a/tests/api-resources/media/vault/lists/lists.test.ts b/tests/api-resources/media/vault/lists/lists.test.ts index e3f6929f..53b39cf1 100644 --- a/tests/api-resources/media/vault/lists/lists.test.ts +++ b/tests/api-resources/media/vault/lists/lists.test.ts @@ -44,7 +44,10 @@ describe('resource lists', () => { // Mock server tests are disabled test.skip('update: only required params', async () => { - const responsePromise = client.media.vault.lists.update('123', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.media.vault.lists.update('123', { + account: 'acct_XXXXXXXXXXXXXXX', + name: 'My renamed list', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -56,7 +59,10 @@ describe('resource lists', () => { // Mock server tests are disabled test.skip('update: required and optional params', async () => { - const response = await client.media.vault.lists.update('123', { account: 'acct_XXXXXXXXXXXXXXX' }); + const response = await client.media.vault.lists.update('123', { + account: 'acct_XXXXXXXXXXXXXXX', + name: 'My renamed list', + }); }); // Mock server tests are disabled @@ -78,6 +84,7 @@ describe('resource lists', () => { client.media.vault.lists.list( 'acct_XXXXXXXXXXXXXXX', { + lightweight: true, limit: 24, offset: 0, query: 'My list name', diff --git a/tests/api-resources/media/vault/lists/media.test.ts b/tests/api-resources/media/vault/lists/media.test.ts index 0195dda8..b67c2a66 100644 --- a/tests/api-resources/media/vault/lists/media.test.ts +++ b/tests/api-resources/media/vault/lists/media.test.ts @@ -10,7 +10,7 @@ const client = new OnlyFansAPI({ describe('resource media', () => { // Mock server tests are disabled test.skip('add: only required params', async () => { - const responsePromise = client.media.vault.lists.media.add('nihil', { + const responsePromise = client.media.vault.lists.media.add('voluptate', { account: 'acct_XXXXXXXXXXXXXXX', mediaIds: ['string'], }); @@ -25,7 +25,7 @@ describe('resource media', () => { // Mock server tests are disabled test.skip('add: required and optional params', async () => { - const response = await client.media.vault.lists.media.add('nihil', { + const response = await client.media.vault.lists.media.add('voluptate', { account: 'acct_XXXXXXXXXXXXXXX', mediaIds: ['string'], }); @@ -33,7 +33,7 @@ describe('resource media', () => { // Mock server tests are disabled test.skip('remove: only required params', async () => { - const responsePromise = client.media.vault.lists.media.remove('nihil', { + const responsePromise = client.media.vault.lists.media.remove('voluptate', { account: 'acct_XXXXXXXXXXXXXXX', mediaIds: ['string'], }); @@ -48,7 +48,7 @@ describe('resource media', () => { // Mock server tests are disabled test.skip('remove: required and optional params', async () => { - const response = await client.media.vault.lists.media.remove('nihil', { + const response = await client.media.vault.lists.media.remove('voluptate', { account: 'acct_XXXXXXXXXXXXXXX', mediaIds: ['string'], }); diff --git a/tests/api-resources/messages.test.ts b/tests/api-resources/messages.test.ts deleted file mode 100644 index 448c31ad..00000000 --- a/tests/api-resources/messages.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import OnlyFansAPI from '@onlyfansapi/onlyfans-sdk'; - -const client = new OnlyFansAPI({ - apiKey: 'My API Key', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource messages', () => { - // Mock server tests are disabled - test.skip('attachTags: only required params', async () => { - const responsePromise = client.messages.attachTags('123456789', { account: 'acct_XXXXXXXXXXXXXXX' }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // Mock server tests are disabled - test.skip('attachTags: required and optional params', async () => { - const response = await client.messages.attachTags('123456789', { - account: 'acct_XXXXXXXXXXXXXXX', - rfGuest: 'rfGuest', - rfPartner: 'rfPartner', - rfTag: 'rfTag', - }); - }); -}); diff --git a/tests/api-resources/notifications/notifications.test.ts b/tests/api-resources/notifications/notifications.test.ts index 7b042946..25333899 100644 --- a/tests/api-resources/notifications/notifications.test.ts +++ b/tests/api-resources/notifications/notifications.test.ts @@ -30,7 +30,7 @@ describe('resource notifications', () => { from_id: 123, limit: 10, skip_users: 'all', - type: 'comments', + type: 'subscriptions', }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/payouts.test.ts b/tests/api-resources/payouts.test.ts index aa2c6f83..57cd78fd 100644 --- a/tests/api-resources/payouts.test.ts +++ b/tests/api-resources/payouts.test.ts @@ -79,7 +79,7 @@ describe('resource payouts', () => { await expect( client.payouts.retrieveEarningStatistics( 'acct_XXXXXXXXXXXXXXX', - { endDate: '2025-01-01 00:00:00, +30days', startDate: '2025-01-01 00:00:00, -30days' }, + { endDate: '2025-01-31 23:59:59', startDate: '2025-01-01 00:00:00' }, { path: '/_stainless_unknown_path' }, ), ).rejects.toThrow(OnlyFansAPI.NotFoundError); diff --git a/tests/api-resources/posts/comments.test.ts b/tests/api-resources/posts/comments.test.ts index bf709685..0144bc2d 100644 --- a/tests/api-resources/posts/comments.test.ts +++ b/tests/api-resources/posts/comments.test.ts @@ -10,7 +10,7 @@ const client = new OnlyFansAPI({ describe('resource comments', () => { // Mock server tests are disabled test.skip('create: only required params', async () => { - const responsePromise = client.posts.comments.create('impedit', { + const responsePromise = client.posts.comments.create('repellat', { account: 'acct_XXXXXXXXXXXXXXX', text: 'This is a comment.', }); @@ -25,7 +25,7 @@ describe('resource comments', () => { // Mock server tests are disabled test.skip('create: required and optional params', async () => { - const response = await client.posts.comments.create('impedit', { + const response = await client.posts.comments.create('repellat', { account: 'acct_XXXXXXXXXXXXXXX', text: 'This is a comment.', answerTo: 123, @@ -35,7 +35,7 @@ describe('resource comments', () => { // Mock server tests are disabled test.skip('list: only required params', async () => { - const responsePromise = client.posts.comments.list('impedit', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.posts.comments.list('repellat', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -47,7 +47,7 @@ describe('resource comments', () => { // Mock server tests are disabled test.skip('list: required and optional params', async () => { - const response = await client.posts.comments.list('impedit', { + const response = await client.posts.comments.list('repellat', { account: 'acct_XXXXXXXXXXXXXXX', limit: 10, offset: 0, diff --git a/tests/api-resources/posts/posts.test.ts b/tests/api-resources/posts/posts.test.ts index 737eca89..ab96826e 100644 --- a/tests/api-resources/posts/posts.test.ts +++ b/tests/api-resources/posts/posts.test.ts @@ -24,6 +24,7 @@ describe('resource posts', () => { test.skip('create: required and optional params', async () => { const response = await client.posts.create('acct_XXXXXXXXXXXXXXX', { text: 'Hello!', + blockBannedWords: 'strict_ban', expireDays: 3, fundRaisingTargetAmount: 30, fundRaisingTipsPresets: ['string', 'string', 'string'], @@ -77,6 +78,7 @@ describe('resource posts', () => { const response = await client.posts.update(1234567890, { account: 'acct_XXXXXXXXXXXXXXX', text: 'Hello!', + blockBannedWords: 'strict_ban', expireDays: 3, fundRaisingTargetAmount: 30, fundRaisingTipsPresets: ['string', 'string', 'string'], diff --git a/tests/api-resources/queue.test.ts b/tests/api-resources/queue.test.ts index cc42819e..a80ba1da 100644 --- a/tests/api-resources/queue.test.ts +++ b/tests/api-resources/queue.test.ts @@ -11,7 +11,6 @@ describe('resource queue', () => { // Mock server tests are disabled test.skip('list: only required params', async () => { const responsePromise = client.queue.list('acct_XXXXXXXXXXXXXXX', { - limit: 20, publishDateEnd: '2025-01-01', publishDateStart: '2025-01-01', timezone: 'Europe/Prague', @@ -28,10 +27,11 @@ describe('resource queue', () => { // Mock server tests are disabled test.skip('list: required and optional params', async () => { const response = await client.queue.list('acct_XXXXXXXXXXXXXXX', { - limit: 20, publishDateEnd: '2025-01-01', publishDateStart: '2025-01-01', timezone: 'Europe/Prague', + limit: 20, + type: ['chat'], }); }); diff --git a/tests/api-resources/saved-for-later/messages/settings.test.ts b/tests/api-resources/saved-for-later/messages/settings.test.ts index 8e5b0566..e2edc676 100644 --- a/tests/api-resources/saved-for-later/messages/settings.test.ts +++ b/tests/api-resources/saved-for-later/messages/settings.test.ts @@ -37,7 +37,7 @@ describe('resource settings', () => { test.skip('enableOrUpdateAutomaticMessaging: only required params', async () => { const responsePromise = client.savedForLater.messages.settings.enableOrUpdateAutomaticMessaging( 'acct_XXXXXXXXXXXXXXX', - { period: 12 }, + { period: 24 }, ); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -52,7 +52,7 @@ describe('resource settings', () => { test.skip('enableOrUpdateAutomaticMessaging: required and optional params', async () => { const response = await client.savedForLater.messages.settings.enableOrUpdateAutomaticMessaging( 'acct_XXXXXXXXXXXXXXX', - { period: 12 }, + { period: 24 }, ); }); }); diff --git a/tests/api-resources/saved-for-later/posts/settings.test.ts b/tests/api-resources/saved-for-later/posts/settings.test.ts index 96d399de..c1510622 100644 --- a/tests/api-resources/saved-for-later/posts/settings.test.ts +++ b/tests/api-resources/saved-for-later/posts/settings.test.ts @@ -37,7 +37,7 @@ describe('resource settings', () => { test.skip('enableOrUpdateAutomaticPosting: only required params', async () => { const responsePromise = client.savedForLater.posts.settings.enableOrUpdateAutomaticPosting( 'acct_XXXXXXXXXXXXXXX', - { period: 12 }, + { period: 24 }, ); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -52,7 +52,7 @@ describe('resource settings', () => { test.skip('enableOrUpdateAutomaticPosting: required and optional params', async () => { const response = await client.savedForLater.posts.settings.enableOrUpdateAutomaticPosting( 'acct_XXXXXXXXXXXXXXX', - { period: 12 }, + { period: 24 }, ); }); }); diff --git a/tests/api-resources/settings/welcome-message.test.ts b/tests/api-resources/settings/welcome-message.test.ts index d13ad1ce..6b1dc2fd 100644 --- a/tests/api-resources/settings/welcome-message.test.ts +++ b/tests/api-resources/settings/welcome-message.test.ts @@ -39,7 +39,7 @@ describe('resource welcomeMessage', () => { client.settings.welcomeMessage.update( 'acct_XXXXXXXXXXXXXXX', { - isForward: true, + isForward: false, lockedText: false, mediaFiles: ['ofapi_media_abc123', 1234567890], previews: ['ofapi_media_abc123', 1234567890], diff --git a/tests/api-resources/shared-tracking-links/shared-tracking-links.test.ts b/tests/api-resources/shared-tracking-links/shared-tracking-links.test.ts index 7586ce3c..f3044576 100644 --- a/tests/api-resources/shared-tracking-links/shared-tracking-links.test.ts +++ b/tests/api-resources/shared-tracking-links/shared-tracking-links.test.ts @@ -29,7 +29,11 @@ describe('resource sharedTrackingLinks', () => { { limit: 10, offset: 0, + pagination: 1, + sorting_deleted: 1, + stats: 'true', synchronous: false, + with_deleted: 1, }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/shared-trial-links/shared-trial-links.test.ts b/tests/api-resources/shared-trial-links/shared-trial-links.test.ts index d72178e6..7233346f 100644 --- a/tests/api-resources/shared-trial-links/shared-trial-links.test.ts +++ b/tests/api-resources/shared-trial-links/shared-trial-links.test.ts @@ -29,6 +29,7 @@ describe('resource sharedTrialLinks', () => { { limit: 10, offset: 0, + pagination: 1, synchronous: false, }, { path: '/_stainless_unknown_path' }, diff --git a/tests/api-resources/smart-link-postbacks.test.ts b/tests/api-resources/smart-link-postbacks.test.ts index 9aec6406..09984bfe 100644 --- a/tests/api-resources/smart-link-postbacks.test.ts +++ b/tests/api-resources/smart-link-postbacks.test.ts @@ -13,7 +13,7 @@ describe('resource smartLinkPostbacks', () => { const responsePromise = client.smartLinkPostbacks.create({ conversion_types: ['new_subscriber', 'new_transaction'], smart_link_scope: 'campaign_specific', - url: 'https://example.com/postback?click={click_id}&type={conversion_type}&gclid={gclid}', + url: 'https://example.com/postback?click={external_click_id}&type={conversion_type}&gclid={gclid}', }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -29,7 +29,10 @@ describe('resource smartLinkPostbacks', () => { const response = await client.smartLinkPostbacks.create({ conversion_types: ['new_subscriber', 'new_transaction'], smart_link_scope: 'campaign_specific', - url: 'https://example.com/postback?click={click_id}&type={conversion_type}&gclid={gclid}', + url: 'https://example.com/postback?click={external_click_id}&type={conversion_type}&gclid={gclid}', + body: '{"click_id":"{click_id}","value":"{amount_gross}"}', + headers: [{ name: 'Authorization', value: 'Bearer token' }], + http_method: 'POST', smart_link_ids: ['01JTESTLINK000000000000001'], }); }); @@ -51,7 +54,7 @@ describe('resource smartLinkPostbacks', () => { const responsePromise = client.smartLinkPostbacks.update(123, { conversion_types: ['new_subscriber'], smart_link_scope: 'global', - url: 'https://example.com/postback?click={click_id}&type={conversion_type}', + url: 'https://example.com/postback?click={external_click_id}&type={conversion_type}', }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -67,7 +70,10 @@ describe('resource smartLinkPostbacks', () => { const response = await client.smartLinkPostbacks.update(123, { conversion_types: ['new_subscriber'], smart_link_scope: 'global', - url: 'https://example.com/postback?click={click_id}&type={conversion_type}', + url: 'https://example.com/postback?click={external_click_id}&type={conversion_type}', + body: '{"click_id":"{click_id}","value":"{amount_gross}"}', + headers: [{ name: 'Authorization', value: 'Bearer token' }], + http_method: 'POST', smart_link_ids: ['01JTESTLINK000000000000001'], }); }); diff --git a/tests/api-resources/smart-links.test.ts b/tests/api-resources/smart-links.test.ts index 5f67b788..108f5efa 100644 --- a/tests/api-resources/smart-links.test.ts +++ b/tests/api-resources/smart-links.test.ts @@ -65,10 +65,11 @@ describe('resource smartLinks', () => { client.smartLinks.list( { account_ids: 'acct_abc123,acct_def456', + filter: { tags: ['i'] }, limit: 50, - meta_pixel_ids: '1,2', name: 'Instagram', offset: 0, + pixel_ids: '1,2', }, { path: '/_stainless_unknown_path' }, ), @@ -89,7 +90,7 @@ describe('resource smartLinks', () => { // Mock server tests are disabled test.skip('listClicks', async () => { - const responsePromise = client.smartLinks.listClicks('rerum'); + const responsePromise = client.smartLinks.listClicks('dolorem'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -104,7 +105,7 @@ describe('resource smartLinks', () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( client.smartLinks.listClicks( - 'rerum', + 'dolorem', { date_end: '2026-01-07T23:59:59Z', date_start: '2026-01-01T00:00:00Z', @@ -120,7 +121,7 @@ describe('resource smartLinks', () => { // Mock server tests are disabled test.skip('listConversions', async () => { - const responsePromise = client.smartLinks.listConversions('facilis'); + const responsePromise = client.smartLinks.listConversions('a'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -135,7 +136,7 @@ describe('resource smartLinks', () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( client.smartLinks.listConversions( - 'facilis', + 'a', { conversion_type: 'new_transaction', date_end: '2026-01-07T23:59:59Z', @@ -153,7 +154,7 @@ describe('resource smartLinks', () => { // Mock server tests are disabled test.skip('listFans', async () => { - const responsePromise = client.smartLinks.listFans('ducimus'); + const responsePromise = client.smartLinks.listFans('libero'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -168,7 +169,7 @@ describe('resource smartLinks', () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( client.smartLinks.listFans( - 'ducimus', + 'libero', { has_messages: true, limit: 100, @@ -176,7 +177,9 @@ describe('resource smartLinks', () => { min_revenue_net: 25, min_tips_net: 10, offset: 0, + previously_subscribed: true, sort: '-revenue_net', + subscribed_using_promo: true, }, { path: '/_stainless_unknown_path' }, ), @@ -185,7 +188,7 @@ describe('resource smartLinks', () => { // Mock server tests are disabled test.skip('listSpenders', async () => { - const responsePromise = client.smartLinks.listSpenders('nam'); + const responsePromise = client.smartLinks.listSpenders('sed'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -200,7 +203,7 @@ describe('resource smartLinks', () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( client.smartLinks.listSpenders( - 'nam', + 'sed', { limit: 50, minSpend: 1, @@ -213,7 +216,7 @@ describe('resource smartLinks', () => { // Mock server tests are disabled test.skip('retrieveCohortArps', async () => { - const responsePromise = client.smartLinks.retrieveCohortArps('eaque'); + const responsePromise = client.smartLinks.retrieveCohortArps('omnis'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -228,7 +231,7 @@ describe('resource smartLinks', () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( client.smartLinks.retrieveCohortArps( - 'eaque', + 'omnis', { acquisition_end: '2026-01-31T23:59:59Z', acquisition_start: '2026-01-01T00:00:00Z', @@ -241,7 +244,7 @@ describe('resource smartLinks', () => { // Mock server tests are disabled test.skip('retrieveStats', async () => { - const responsePromise = client.smartLinks.retrieveStats('impedit'); + const responsePromise = client.smartLinks.retrieveStats('in'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -256,7 +259,7 @@ describe('resource smartLinks', () => { // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error await expect( client.smartLinks.retrieveStats( - 'impedit', + 'in', { date_end: '2026-01-31T23:59:59Z', date_start: '2026-01-01T00:00:00Z' }, { path: '/_stainless_unknown_path' }, ), diff --git a/tests/api-resources/statistics/statements.test.ts b/tests/api-resources/statistics/statements.test.ts index 291bfa14..7417a0da 100644 --- a/tests/api-resources/statistics/statements.test.ts +++ b/tests/api-resources/statistics/statements.test.ts @@ -11,6 +11,7 @@ describe('resource statements', () => { // Mock server tests are disabled test.skip('getEarnings: only required params', async () => { const responsePromise = client.statistics.statements.getEarnings('acct_XXXXXXXXXXXXXXX', { + end_date: '2025-03-31 23:59:59', start_date: '2025-01-01 00:00:00', }); const rawResponse = await responsePromise.asResponse(); @@ -25,8 +26,8 @@ describe('resource statements', () => { // Mock server tests are disabled test.skip('getEarnings: required and optional params', async () => { const response = await client.statistics.statements.getEarnings('acct_XXXXXXXXXXXXXXX', { - start_date: '2025-01-01 00:00:00', end_date: '2025-03-31 23:59:59', + start_date: '2025-01-01 00:00:00', type: 'total', }); }); diff --git a/tests/api-resources/statistics/statistics.test.ts b/tests/api-resources/statistics/statistics.test.ts index b464237e..5452ad63 100644 --- a/tests/api-resources/statistics/statistics.test.ts +++ b/tests/api-resources/statistics/statistics.test.ts @@ -9,11 +9,8 @@ const client = new OnlyFansAPI({ describe('resource statistics', () => { // Mock server tests are disabled - test.skip('calculateTotalTransactions: only required params', async () => { - const responsePromise = client.statistics.calculateTotalTransactions('acct_XXXXXXXXXXXXXXX', { - end_date: '2025-03-31 23:59:59', - start_date: '2025-01-01 00:00:00', - }); + test.skip('calculateTotalTransactions', async () => { + const responsePromise = client.statistics.calculateTotalTransactions('acct_XXXXXXXXXXXXXXX'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -24,11 +21,15 @@ describe('resource statistics', () => { }); // Mock server tests are disabled - test.skip('calculateTotalTransactions: required and optional params', async () => { - const response = await client.statistics.calculateTotalTransactions('acct_XXXXXXXXXXXXXXX', { - end_date: '2025-03-31 23:59:59', - start_date: '2025-01-01 00:00:00', - }); + test.skip('calculateTotalTransactions: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.statistics.calculateTotalTransactions( + 'acct_XXXXXXXXXXXXXXX', + { end_date: '2025-03-31 23:59:59', start_date: '2025-01-01 00:00:00' }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(OnlyFansAPI.NotFoundError); }); // Mock server tests are disabled @@ -80,6 +81,7 @@ describe('resource statistics', () => { end_date: '2025-03-31 23:59:59', start_date: '2025-01-01 00:00:00', detailed: false, + detailed_type: 'total', }); }); }); diff --git a/tests/api-resources/stored.test.ts b/tests/api-resources/stored.test.ts index 801e916b..d1fa49fe 100644 --- a/tests/api-resources/stored.test.ts +++ b/tests/api-resources/stored.test.ts @@ -27,7 +27,7 @@ describe('resource stored', () => { client.stored.listSharedTrackingLinks( 'acct_XXXXXXXXXXXXXXX', { - filter: { search: 'wjdlvaxlyadlqrwqppqxf', tags: ['eoekj'] }, + filter: { search: 'pgstt', tags: ['lesgwiehozbjtqubznijzetuq'] }, limit: 10, offset: 0, }, @@ -55,7 +55,7 @@ describe('resource stored', () => { client.stored.listSharedTrialLinks( 'acct_XXXXXXXXXXXXXXX', { - filter: { search: 'zeynkehufhzqvcaqjxnwtpibh', tags: ['vyjau'] }, + filter: { search: 'vnnufloxlvajlaldbxbpdhq', tags: ['gjf'] }, limit: 10, offset: 0, }, @@ -84,9 +84,9 @@ describe('resource stored', () => { 'acct_XXXXXXXXXXXXXXX', { filter: { - include_smart_links: true, - search: 'ycluqgbgiibws', - tags: ['eisqsclddcipdx'], + include_smart_links: false, + search: 'czleulihk', + tags: ['tykxnvkiggxelefwfyctwv'], }, limit: 10, offset: 0, @@ -116,9 +116,9 @@ describe('resource stored', () => { 'acct_XXXXXXXXXXXXXXX', { filter: { - include_smart_links: true, - search: 'dharcxleeeimxrrewpni', - tags: ['kwqzrpj'], + include_smart_links: false, + search: 'zyhaiutqpl', + tags: ['uddtuliiikxvhswkqz'], }, limit: 10, offset: 0, diff --git a/tests/api-resources/stories/highlights.test.ts b/tests/api-resources/stories/highlights.test.ts index 86025987..f2ac4a3b 100644 --- a/tests/api-resources/stories/highlights.test.ts +++ b/tests/api-resources/stories/highlights.test.ts @@ -124,7 +124,7 @@ describe('resource highlights', () => { // Mock server tests are disabled test.skip('addStory: only required params', async () => { - const responsePromise = client.stories.highlights.addStory('maxime', { + const responsePromise = client.stories.highlights.addStory('commodi', { account: 'acct_XXXXXXXXXXXXXXX', highlight_id: 1234567890, story_id: 2345678901, @@ -140,7 +140,7 @@ describe('resource highlights', () => { // Mock server tests are disabled test.skip('addStory: required and optional params', async () => { - const response = await client.stories.highlights.addStory('maxime', { + const response = await client.stories.highlights.addStory('commodi', { account: 'acct_XXXXXXXXXXXXXXX', highlight_id: 1234567890, story_id: 2345678901, @@ -149,7 +149,7 @@ describe('resource highlights', () => { // Mock server tests are disabled test.skip('removeStory: only required params', async () => { - const responsePromise = client.stories.highlights.removeStory('maxime', { + const responsePromise = client.stories.highlights.removeStory('commodi', { account: 'acct_XXXXXXXXXXXXXXX', highlight_id: 1234567890, }); @@ -164,7 +164,7 @@ describe('resource highlights', () => { // Mock server tests are disabled test.skip('removeStory: required and optional params', async () => { - const response = await client.stories.highlights.removeStory('maxime', { + const response = await client.stories.highlights.removeStory('commodi', { account: 'acct_XXXXXXXXXXXXXXX', highlight_id: 1234567890, }); diff --git a/tests/api-resources/stories/stories.test.ts b/tests/api-resources/stories/stories.test.ts index 32b2000d..b42de5a5 100644 --- a/tests/api-resources/stories/stories.test.ts +++ b/tests/api-resources/stories/stories.test.ts @@ -26,6 +26,35 @@ describe('resource stories', () => { test.skip('create: required and optional params', async () => { const response = await client.stories.create('acct_XXXXXXXXXXXXXXX', { mediaFiles: ['ofapi_media_abc123', 'string'], + canvasHeight: 1920, + canvasWidth: 1080, + question: { + color: '#FF51DC', + height: 160, + left: 25, + text: 'Ask me anything!', + top: 30, + width: 257, + }, + texts: [ + { + text: 'New drop today!', + angle: 0, + bgColor: '#FF51DC', + color: '#FFFFFF', + fontFamily: 'ShantellSans', + fontSize: 24, + fontWeight: 400, + left: 30.5, + scale: 1, + textAlign: 'center', + textHeight: 36, + textWidth: 140, + top: 60, + type: 'text', + zIndex: 8, + }, + ], }); }); diff --git a/tests/api-resources/tracking-links/tracking-links.test.ts b/tests/api-resources/tracking-links/tracking-links.test.ts index 3ad1eccd..b1bc125f 100644 --- a/tests/api-resources/tracking-links/tracking-links.test.ts +++ b/tests/api-resources/tracking-links/tracking-links.test.ts @@ -30,7 +30,7 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('retrieve: only required params', async () => { - const responsePromise = client.trackingLinks.retrieve('et', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trackingLinks.retrieve('similique', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -42,7 +42,7 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('retrieve: required and optional params', async () => { - const response = await client.trackingLinks.retrieve('et', { account: 'acct_XXXXXXXXXXXXXXX' }); + const response = await client.trackingLinks.retrieve('similique', { account: 'acct_XXXXXXXXXXXXXXX' }); }); // Mock server tests are disabled @@ -64,14 +64,15 @@ describe('resource trackingLinks', () => { client.trackingLinks.list( 'acct_XXXXXXXXXXXXXXX', { - endDate: '2025-01-01 00:00:00, now', - limit: 3, + endDate: '2025-01-31 23:59:59', + limit: 10, offset: 0, + pagination: 1, sort: 'desc', sortby: 'claims', - startDate: '2025-01-01 00:00:00, -30days', + startDate: '2025-01-01 00:00:00', synchronous: false, - with_deleted: false, + with_deleted: 1, }, { path: '/_stainless_unknown_path' }, ), @@ -80,7 +81,7 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('delete: only required params', async () => { - const responsePromise = client.trackingLinks.delete('et', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trackingLinks.delete('similique', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -92,12 +93,14 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('delete: required and optional params', async () => { - const response = await client.trackingLinks.delete('et', { account: 'acct_XXXXXXXXXXXXXXX' }); + const response = await client.trackingLinks.delete('similique', { account: 'acct_XXXXXXXXXXXXXXX' }); }); // Mock server tests are disabled test.skip('getCohortArps: only required params', async () => { - const responsePromise = client.trackingLinks.getCohortArps('et', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trackingLinks.getCohortArps('repellat', { + account: 'acct_XXXXXXXXXXXXXXX', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -109,7 +112,7 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('getCohortArps: required and optional params', async () => { - const response = await client.trackingLinks.getCohortArps('et', { + const response = await client.trackingLinks.getCohortArps('repellat', { account: 'acct_XXXXXXXXXXXXXXX', acquisition_end: '2026-01-31T23:59:59Z', acquisition_start: '2026-01-01T00:00:00Z', @@ -119,7 +122,7 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('getStats: only required params', async () => { - const responsePromise = client.trackingLinks.getStats('voluptatem', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trackingLinks.getStats('explicabo', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -131,7 +134,7 @@ describe('resource trackingLinks', () => { // Mock server tests are disabled test.skip('getStats: required and optional params', async () => { - const response = await client.trackingLinks.getStats('voluptatem', { + const response = await client.trackingLinks.getStats('explicabo', { account: 'acct_XXXXXXXXXXXXXXX', date_end: '2026-01-31T23:59:59Z', date_start: '2026-01-01T00:00:00Z', diff --git a/tests/api-resources/transactions.test.ts b/tests/api-resources/transactions.test.ts index 80f7709d..8712741f 100644 --- a/tests/api-resources/transactions.test.ts +++ b/tests/api-resources/transactions.test.ts @@ -29,7 +29,7 @@ describe('resource transactions', () => { { limit: 'limit', marker: '1739155047', - startDate: '2025-01-01 00:00:00, -30days', + startDate: '2025-01-01 00:00:00', tipsSource: 'post_all', type: 'tips', }, diff --git a/tests/api-resources/trial-links/trial-links.test.ts b/tests/api-resources/trial-links/trial-links.test.ts index e273b87d..84f79285 100644 --- a/tests/api-resources/trial-links/trial-links.test.ts +++ b/tests/api-resources/trial-links/trial-links.test.ts @@ -37,7 +37,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('retrieve: only required params', async () => { - const responsePromise = client.trialLinks.retrieve('officia', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trialLinks.retrieve('consectetur', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -49,12 +49,12 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('retrieve: required and optional params', async () => { - const response = await client.trialLinks.retrieve('officia', { account: 'acct_XXXXXXXXXXXXXXX' }); + const response = await client.trialLinks.retrieve('consectetur', { account: 'acct_XXXXXXXXXXXXXXX' }); }); // Mock server tests are disabled - test.skip('list: only required params', async () => { - const responsePromise = client.trialLinks.list('acct_XXXXXXXXXXXXXXX', { limit: 10, offset: 0 }); + test.skip('list', async () => { + const responsePromise = client.trialLinks.list('acct_XXXXXXXXXXXXXXX'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -65,19 +65,28 @@ describe('resource trialLinks', () => { }); // Mock server tests are disabled - test.skip('list: required and optional params', async () => { - const response = await client.trialLinks.list('acct_XXXXXXXXXXXXXXX', { - limit: 10, - offset: 0, - field: 'create_date', - sort: 'desc', - synchronous: false, - }); + test.skip('list: request options and params are passed correctly', async () => { + // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error + await expect( + client.trialLinks.list( + 'acct_XXXXXXXXXXXXXXX', + { + endDate: '2025-01-31 23:59:59', + field: 'create_date', + limit: 10, + offset: 0, + sort: 'desc', + startDate: '2025-01-01 00:00:00', + synchronous: false, + }, + { path: '/_stainless_unknown_path' }, + ), + ).rejects.toThrow(OnlyFansAPI.NotFoundError); }); // Mock server tests are disabled test.skip('delete: only required params', async () => { - const responsePromise = client.trialLinks.delete('officia', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trialLinks.delete('consectetur', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -89,7 +98,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('delete: required and optional params', async () => { - const response = await client.trialLinks.delete('officia', { account: 'acct_XXXXXXXXXXXXXXX' }); + const response = await client.trialLinks.delete('consectetur', { account: 'acct_XXXXXXXXXXXXXXX' }); }); // Mock server tests are disabled @@ -118,7 +127,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('listSubscribers: only required params', async () => { - const responsePromise = client.trialLinks.listSubscribers('eum', { + const responsePromise = client.trialLinks.listSubscribers('incidunt', { account: 'acct_XXXXXXXXXXXXXXX', limit: 10, offset: 0, @@ -134,7 +143,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('listSubscribers: required and optional params', async () => { - const response = await client.trialLinks.listSubscribers('eum', { + const response = await client.trialLinks.listSubscribers('incidunt', { account: 'acct_XXXXXXXXXXXXXXX', limit: 10, offset: 0, @@ -143,7 +152,9 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('retrieveCohortArps: only required params', async () => { - const responsePromise = client.trialLinks.retrieveCohortArps('eius', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trialLinks.retrieveCohortArps('dolore', { + account: 'acct_XXXXXXXXXXXXXXX', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -155,7 +166,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('retrieveCohortArps: required and optional params', async () => { - const response = await client.trialLinks.retrieveCohortArps('eius', { + const response = await client.trialLinks.retrieveCohortArps('dolore', { account: 'acct_XXXXXXXXXXXXXXX', acquisition_end: '2026-01-31T23:59:59Z', acquisition_start: '2026-01-01T00:00:00Z', @@ -165,7 +176,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('retrieveStats: only required params', async () => { - const responsePromise = client.trialLinks.retrieveStats('aut', { account: 'acct_XXXXXXXXXXXXXXX' }); + const responsePromise = client.trialLinks.retrieveStats('autem', { account: 'acct_XXXXXXXXXXXXXXX' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -177,7 +188,7 @@ describe('resource trialLinks', () => { // Mock server tests are disabled test.skip('retrieveStats: required and optional params', async () => { - const response = await client.trialLinks.retrieveStats('aut', { + const response = await client.trialLinks.retrieveStats('autem', { account: 'acct_XXXXXXXXXXXXXXX', date_end: '2026-01-31T23:59:59Z', date_start: '2026-01-01T00:00:00Z', diff --git a/tests/api-resources/user-lists/user-lists.test.ts b/tests/api-resources/user-lists/user-lists.test.ts index c1e9d27d..6828ffa8 100644 --- a/tests/api-resources/user-lists/user-lists.test.ts +++ b/tests/api-resources/user-lists/user-lists.test.ts @@ -10,7 +10,7 @@ const client = new OnlyFansAPI({ describe('resource userLists', () => { // Mock server tests are disabled test.skip('create: only required params', async () => { - const responsePromise = client.userLists.create('acct_XXXXXXXXXXXXXXX', { name: 'sdqtzwslsvoxbkxj' }); + const responsePromise = client.userLists.create('acct_XXXXXXXXXXXXXXX', { name: 'pplc' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -22,7 +22,7 @@ describe('resource userLists', () => { // Mock server tests are disabled test.skip('create: required and optional params', async () => { - const response = await client.userLists.create('acct_XXXXXXXXXXXXXXX', { name: 'sdqtzwslsvoxbkxj' }); + const response = await client.userLists.create('acct_XXXXXXXXXXXXXXX', { name: 'pplc' }); }); // Mock server tests are disabled @@ -84,7 +84,11 @@ describe('resource userLists', () => { await expect( client.userLists.list( 'acct_XXXXXXXXXXXXXXX', - { limit: 10, offset: 0 }, + { + limit: 10, + offset: 0, + view: 'queue', + }, { path: '/_stainless_unknown_path' }, ), ).rejects.toThrow(OnlyFansAPI.NotFoundError); diff --git a/tests/api-resources/user-lists/users.test.ts b/tests/api-resources/user-lists/users.test.ts index 0fe19b83..5a0babd9 100644 --- a/tests/api-resources/user-lists/users.test.ts +++ b/tests/api-resources/user-lists/users.test.ts @@ -49,6 +49,7 @@ describe('resource users', () => { const response = await client.userLists.users.add('userListId', { account: 'acct_XXXXXXXXXXXXXXX', ids: ['string', 'string', 'string'], + skip_invalid: true, }); });