{"_id":"@codybrom/denim","_rev":"13-9f5899a464754d332a446e050fe7a14f","name":"@codybrom/denim","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.2":{"name":"@codybrom/denim","version":"1.0.2","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.0.2","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"e495cb5b3a7406e23ce38961fc01cba33df08340","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.0.2.tgz","fileCount":9,"integrity":"sha512-xTeYM8t4CBlQBQ5ywl2FzUDM8W/49nMhoWmQxCwD+ekt62LkCxyn5w9veWmz9f/zzPxBd1EAFqiMT8EK2gGk0g==","signatures":[{"sig":"MEQCIAE2rf+71hWFW2pV71U8G/zCRKHb7IaIkfgpdj7rRlZkAiBpGlEfWry8w/f4OBX5fCZNQd+VL6oe4JtCzmFKHc6DYw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20579},"main":"mod.ts","gitHead":"f5c75df0feb24df8059fdca3316231f01bf129dc","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.1","description":"Typescript/Deno module to simplify posting to Threads with text, images, or videos","directories":{"example":"examples"},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.0.2_1722746521539_0.13635802287209087","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@codybrom/denim","version":"1.1.0","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.1.0","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"3cdbb037e77364cd733106fc4713eca3ccb1817f","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.1.0.tgz","fileCount":10,"integrity":"sha512-Xff1zA1El16Xz0GeOxh43KFf0ts3kzgElz+P3k73MGMtJyxdvZKWdS8A+d2mGOJ5NZHMtoOG6O2/bQUR/XZMaQ==","signatures":[{"sig":"MEUCIQD7sImr4EB05MXwC1KoWIyp6Ubv5Vhxqg0i4IfH8CNa8QIgaxDb/cLnohU63Ob/SXhdH9trLJIngaFWPcgsSEM5R/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44711},"main":"mod.ts","gitHead":"6035fb8d82d4ce1c7aceb32d5abbcdc2511bf244","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads with text, images, or videos","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.1.0_1726253497625_0.27324830566647607","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@codybrom/denim","version":"1.2.0","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.2.0","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"293c156da50fff3c942b8b940fd9e13d88bcf7b7","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.2.0.tgz","fileCount":10,"integrity":"sha512-GRgy028HooKXf0CPRpmpIUJAM8Tk4qydhp6LHF9T8csXtBaZpwjotj1zXWzC/QpmieliUL8b+BSEML1V8t6YPw==","signatures":[{"sig":"MEQCIG1wpWHiGwZg81sohsKQunjYm9jB82QZBXNUb5sWYCP3AiA3mEQ7h4Ae+OvcYNraktd20ssUsPv55H7eFHKfNKw5Bg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42938},"main":"mod.ts","gitHead":"0ab24448eab2f127ff58042d3c7e403e398c0867","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads with text, images, or videos","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.2.0_1726256699159_0.3246826480626399","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@codybrom/denim","version":"1.3.0","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.0","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"466058e075c0ad75f2b8a72928107586888f5fc8","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.0.tgz","fileCount":10,"integrity":"sha512-Y7IUsAJaVNHNSRxNCVxn2w/R8wYFzl1l+aA5GLdxNfkeIkcEtpgcFc9c0GFv+VJk104bt/k4GdAW06AtFj0BgQ==","signatures":[{"sig":"MEUCIQDjVabaXkUySRdgGfKk9OCTnfseW10XlasDhI3v8hK7hwIgfKrlUF4AdjVk3JIQFHNb6O3rIqhJP+oXgWUCa7X0kW0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46502},"main":"mod.ts","gitHead":"754271113af73fd0066157cebdee7075607e4ba7","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads with text, images, or videos","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.0_1726258998342_0.6185848381370838","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"@codybrom/denim","version":"1.3.1","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.1","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"3c7ad4c993497b2441aefd2a7a2fa475c75a9802","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.1.tgz","fileCount":10,"integrity":"sha512-4RMqLlfF7m0tdnwz5RA/S3aExOORkA4YKcQ/Yw2227JAKAP9WpVWIXtwThDVwsz2bGrT0kkGIR9lL+opWo8bwQ==","signatures":[{"sig":"MEUCIFHh9pajBpWhPC98sHZmTp7yw20oxQCD4WMt2KAwHN95AiEA3axBRAHMrNrpvUmpn5SZsw0WHA6/J3d/B5c+KsQ5E+k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":45371},"main":"mod.ts","gitHead":"29aa3de801d2da42e50cde7b0d586b62de41c585","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads with text, images, or videos","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.1_1726259481193_0.9752053511015066","host":"s3://npm-registry-packages"}},"1.3.2":{"name":"@codybrom/denim","version":"1.3.2","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.2","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"c967f241c7f693175651842ed4a3ec4c4bc51bb9","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.2.tgz","fileCount":10,"integrity":"sha512-HWP0WSQ6p9GuiM0U+PfgCQhT3L1ewnMlWux9huiGherOVenRHy+qFNG3lBgYkDFT+D20ZxXI7PHNyhoJkFk4ZQ==","signatures":[{"sig":"MEUCIQDAXx8Q7TiaP5vG3/MqRyeoQ/+KxUbts0e5d3TuCsfFDgIgLQ5uiXr85sQNJBgQ82sqQQM8pCnmJDlwNJjbN1rQl0g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46535},"main":"mod.ts","gitHead":"ac711864f08c483774358807f1e0915888e69de1","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.2_1726260101964_0.7589480563948137","host":"s3://npm-registry-packages"}},"1.3.3":{"name":"@codybrom/denim","version":"1.3.3","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.3","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"e89add8e6bfb1f2310eb981605e0fc7803378d7a","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.3.tgz","fileCount":10,"integrity":"sha512-IxUTiF3dy5tHydtB7tBl8KAEJPvewniZI+oFDn30vWsn6Y24ETUWeaaiXeQpZNdW0lrB6++/zMehCrw5tE9M2g==","signatures":[{"sig":"MEYCIQCXao/N2YPLE05Ms7mFtSR5DcZM5u3HOuVYwnXM1a8v+QIhAJbJHOK1xOusCLbYgWXXZ+HHYwu3n9B9N+aJPUL24ecs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46794},"main":"mod.ts","gitHead":"46a21df2cb9aa3ca4ac02981aae970412f5fd6bf","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.3_1726260310161_0.04388036976053855","host":"s3://npm-registry-packages"}},"1.3.4":{"name":"@codybrom/denim","version":"1.3.4","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.4","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"1e07faff1d7388b541e830b58ce3453fda4e0fda","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.4.tgz","fileCount":10,"integrity":"sha512-M+c15LAP/yt9+tgWnms7LibkHIAXgyFXAuVMyh7UnZG4bxdUkRg2yIJnLZF3WX5bblFwQbxT5gRB/WjW530yAA==","signatures":[{"sig":"MEUCIEDGQ9zVA9JoJLO9p6P0QJVpbf8Ok/+bHLbEcBqguPi2AiEAg+hMATaDnqJLx9oTYqgCwueGuMII8eY2oX4xiJAFXoY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46445},"main":"mod.ts","gitHead":"4d0561fabe45013dad6bb8a1266dce01b0f73708","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.4_1726260736142_0.08067400501435817","host":"s3://npm-registry-packages"}},"1.3.5":{"name":"@codybrom/denim","version":"1.3.5","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.5","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"22f3735bf0103fd15830c0b895bb4a2d6e62e3e9","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.5.tgz","fileCount":12,"integrity":"sha512-wdUDnWsLGYo7S2SCzDeUZzYIUhrg+Sq/3+FjNjjJbNANb0uzyk8eOqCAMmEdloqnk8YQQi9gF0vYQsdEfVPbgQ==","signatures":[{"sig":"MEUCIQDTieSqtD/Oj/mw81Ux37Y57WkS0jPc8lqmn26dKLyhrQIgQqEOTNWilFcBKRuOm2YOOQQeSrFiSerxt6E2vQYhazM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66907},"main":"mod.ts","gitHead":"f76e53ed4d11b08fd8bb0cbd1e0ab070f2ad105d","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.5_1727121382457_0.09320757708143801","host":"s3://npm-registry-packages"}},"1.3.6":{"name":"@codybrom/denim","version":"1.3.6","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@1.3.6","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"9cf2a0eb9ca29e30f92709d56bdea8c4916e4f5d","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-1.3.6.tgz","fileCount":12,"integrity":"sha512-KW09eeMrJQHYiVPSQVmQQYPj+PkO2JJFKUZl1nL1uY/Ord062AjQoOtnc6Zy63QB7aRmVwIQ14ScydFnEXCx5w==","signatures":[{"sig":"MEQCIF2SX+nhEaBZ8amuVw7IG8+pXazu7owuaD9N4ncxtUkaAiBGByBF0u/MFNKWqyby6mGRZWIBrj7ssUGWTl+yCpWN2A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@1.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":67953},"main":"mod.ts","gitHead":"3674dfc37380647c3cc2842ce337d802b15441b7","_npmUser":{"name":"codybrom","email":"codybromley@gmail.com"},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"10.8.2","description":"Typescript/Deno module to simplify posting to Threads","directories":{"example":"examples"},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_1.3.6_1727122747646_0.5461445856780172","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@codybrom/denim","version":"2.0.0","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@2.0.0","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"248a7e61fc34dfeb5a755144d4c946dd4b9bfa55","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-2.0.0.tgz","fileCount":45,"integrity":"sha512-ywl3vaL9jPSEFe9IQiMZMqZBxnGYNv/UtqWQs1QoSVu6hUMG2ltmrFPCQZtWg6YJN2VwQFHoxxOvmIh3S1w1iA==","signatures":[{"sig":"MEYCIQC6K6xBuYlQZbNsntzWLUVGExAi8aUbg7Sl8mvomYdPIwIhAICWOoxuMHRAQkT1ULY0EIHP61Yaaxof+ZiT9OVxeauu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":163013},"main":"mod.ts","gitHead":"68932a04216f0bb6496a07f236b0e946476a1c5d","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:37b150e3-5b0c-47e8-8b10-f9fc1c7ccee9"}},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"11.6.2","description":"A Deno/TypeScript library for the Threads API","directories":{"example":"examples"},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_2.0.0_1770612726562_0.7100858856892576","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@codybrom/denim","version":"2.0.1","keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","_id":"@codybrom/denim@2.0.1","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"homepage":"https://github.com/codybrom/denim#readme","bugs":{"url":"https://github.com/codybrom/denim/issues"},"dist":{"shasum":"4f7e5a0c0bda829e7be17920bff5e5eed1b618e9","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-2.0.1.tgz","fileCount":45,"integrity":"sha512-ovcEqNbvByKKDnb9IuhWyxqCtG3rPm9t9ELy6H4p2evmx5me8Hc1lUMQORge1UgxvG86bi3mo9J7cp8VQmR4cQ==","signatures":[{"sig":"MEUCIDa7dpVHQwUaULg0A4zniddRKS2iuL7U4Z61p0F0SY4EAiEAtk1AkrqkCOAd/sOSpLUP+l3O54kCPnzpoC2JQFeAltY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":163285},"main":"mod.ts","gitHead":"29c03495d1b06e185dcfd5b501925a86bd0b446b","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:37b150e3-5b0c-47e8-8b10-f9fc1c7ccee9"}},"repository":{"url":"git+https://github.com/codybrom/denim.git","type":"git"},"_npmVersion":"11.11.0","description":"A Deno/TypeScript library for the Threads API","directories":{"example":"examples"},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/denim_2.0.1_1776485414652_0.5571667054802008","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@codybrom/denim","version":"2.0.2","description":"A Deno/TypeScript library for the Threads API","main":"mod.ts","directories":{"example":"examples"},"repository":{"type":"git","url":"git+https://github.com/codybrom/denim.git"},"keywords":["threads","threads-api"],"author":{"name":"Cody Bromley"},"license":"MIT","bugs":{"url":"https://github.com/codybrom/denim/issues"},"homepage":"https://github.com/codybrom/denim#readme","gitHead":"0de04749ca629cb27df58fde68ea4325342e31f2","_id":"@codybrom/denim@2.0.2","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-KYrtGA7P8sTwT/QS1ZVodYSztsgT5RZ4mMYFVoau6UaP8JOmSVVFuOnPAbbItJZqNmP1bAgwxf7DquDl0PU35w==","shasum":"fff4c85a80acc0af4f5b64ef255bcc0ba3856f0e","tarball":"https://registry.npmjs.org/@codybrom/denim/-/denim-2.0.2.tgz","fileCount":45,"unpackedSize":163664,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codybrom%2fdenim@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCuCZ5a1rAOLefYbgZUdoIEh5QsdH2J7qVWCuuisU0CvgIgHYsKfAgFwE2a7k2IGY8d3e6CEqaOJRPUm/LukR57gWw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:37b150e3-5b0c-47e8-8b10-f9fc1c7ccee9"}},"maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/denim_2.0.2_1783815211897_0.5752461688719344"},"_hasShrinkwrap":false}},"time":{"created":"2024-08-04T04:42:01.182Z","modified":"2026-07-12T00:13:32.335Z","1.0.2":"2024-08-04T04:42:01.675Z","1.1.0":"2024-09-13T18:51:37.813Z","1.2.0":"2024-09-13T19:44:59.337Z","1.3.0":"2024-09-13T20:23:18.544Z","1.3.1":"2024-09-13T20:31:21.403Z","1.3.2":"2024-09-13T20:41:42.099Z","1.3.3":"2024-09-13T20:45:10.349Z","1.3.4":"2024-09-13T20:52:16.338Z","1.3.5":"2024-09-23T19:56:22.638Z","1.3.6":"2024-09-23T20:19:07.932Z","2.0.0":"2026-02-09T04:52:06.694Z","2.0.1":"2026-04-18T04:10:14.803Z","2.0.2":"2026-07-12T00:13:32.046Z"},"bugs":{"url":"https://github.com/codybrom/denim/issues"},"author":{"name":"Cody Bromley"},"license":"MIT","homepage":"https://github.com/codybrom/denim#readme","keywords":["threads","threads-api"],"repository":{"type":"git","url":"git+https://github.com/codybrom/denim.git"},"description":"A Deno/TypeScript library for the Threads API","maintainers":[{"name":"codybrom","email":"codybromley@gmail.com"}],"readme":"# Denim\n\n[![JSR](https://jsr.io/badges/@codybrom/denim)](https://jsr.io/@codybrom/denim)\n[![JSR Score](https://jsr.io/badges/@codybrom/denim/score)](https://jsr.io/@codybrom/denim)\n\nA Deno/TypeScript wrapper for the\n[Threads API](https://developers.facebook.com/docs/threads). Covers posting,\nretrieval, replies, profiles, insights, search, locations, tokens, and oEmbed.\n\nYou'll need a Threads app with an access token from\n[Meta's developer portal](https://developers.facebook.com/apps/). See the\n[Threads API docs](https://developers.facebook.com/docs/threads/get-started) for\nsetup.\n\n```bash\ndeno add @codybrom/denim\n```\n\n## Publishing\n\nThreads publishing is two steps: create a container, then publish it.\n\n```typescript\nimport {\n\tcreateThreadsContainer,\n\tpublishThreadsContainer,\n} from \"@codybrom/denim\";\n\nconst containerId = await createThreadsContainer({\n\tuserId: \"YOUR_USER_ID\",\n\taccessToken: \"YOUR_ACCESS_TOKEN\",\n\tmediaType: \"TEXT\",\n\ttext: \"Hello from Denim!\",\n});\n\nawait publishThreadsContainer(\"YOUR_USER_ID\", \"YOUR_ACCESS_TOKEN\", containerId);\n```\n\n`createThreadsContainer(request)` takes a `ThreadsPostRequest` and returns the\ncontainer ID string. The request requires `userId`, `accessToken`, `mediaType`,\nand usually `text`. Optional fields control the post type:\n\n| Field                     | Type       | Purpose                                                                                                       |\n| ------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------- |\n| `imageUrl`                | `string`   | Image URL (for `IMAGE` or `CAROUSEL` items)                                                                   |\n| `videoUrl`                | `string`   | Video URL (for `VIDEO` or `CAROUSEL` items)                                                                   |\n| `altText`                 | `string`   | Alt text for images and videos                                                                                |\n| `linkAttachment`          | `string`   | URL to attach to a `TEXT` post                                                                                |\n| `replyControl`            | `string`   | `\"everyone\"`, `\"accounts_you_follow\"`, `\"mentioned_only\"`, `\"parent_post_author_only\"`, or `\"followers_only\"` |\n| `allowlistedCountryCodes` | `string[]` | ISO country codes to restrict post visibility                                                                 |\n| `replyToId`               | `string`   | Post ID to reply to                                                                                           |\n| `quotePostId`             | `string`   | Post ID to quote                                                                                              |\n| `pollAttachment`          | `object`   | `{ option_a, option_b, option_c?, option_d? }`                                                                |\n| `topicTag`                | `string`   | Topic tag for the post                                                                                        |\n| `isGhostPost`             | `boolean`  | Make a ghost post (text only, expires in 24h)                                                                 |\n| `isSpoilerMedia`          | `boolean`  | Hide media behind a spoiler overlay                                                                           |\n| `textEntities`            | `array`    | Text spoiler ranges: `[{ entity_type, offset, length }]`                                                      |\n| `textAttachment`          | `object`   | Long-form text: `{ plaintext, link_attachment_url? }`                                                         |\n| `gifAttachment`           | `object`   | GIF: `{ gif_id, provider: \"GIPHY\" }`                                                                          |\n| `locationId`              | `string`   | Location ID from `searchLocations`                                                                            |\n| `children`                | `string[]` | Carousel item IDs from `createCarouselItem`                                                                   |\n| `autoPublishText`         | `boolean`  | Skip the publish step for text posts                                                                          |\n\n`publishThreadsContainer(userId, accessToken, containerId, getPermalink?)`\npublishes a container. Pass `true` for `getPermalink` to get `{ id, permalink }`\ninstead of just the ID string.\n\n`createCarouselItem(request)` creates individual items for a carousel post.\nTakes the same request shape but `mediaType` must be `\"IMAGE\"` or `\"VIDEO\"`.\n\n`repost(mediaId, accessToken)` reposts an existing thread. Returns `{ id }`.\n\n`deleteThread(mediaId, accessToken)` deletes a thread. Returns\n`{ success: boolean, deleted_id?: string }`.\n\n## Retrieval\n\nAll retrieval functions accept an optional `fields` string array to request\nspecific fields, and an optional `PaginationOptions` object\n(`{ since?, until?, limit?, before?, after? }`).\n\n`getThreadsList(userId, accessToken, options?, fields?)` returns a user's\nthreads as `{ data: ThreadsPost[], paging }`.\n\n`getSingleThread(mediaId, accessToken, fields?)` returns a single `ThreadsPost`.\n\n`getGhostPosts(userId, accessToken, options?, fields?)` returns a user's ghost\nposts.\n\n## Profiles\n\n`getProfile(userId, accessToken, fields?)` returns the authenticated user's\n`ThreadsProfile` (username, name, bio, profile picture, verification status).\n\n`lookupProfile(accessToken, username, fields?)` looks up any public profile by\nusername. Returns a `PublicProfile` with follower counts and engagement stats.\nRequires `threads_profile_discovery` permission.\n\n`getProfilePosts(accessToken, username, options?, fields?)` returns a public\nprofile's posts.\n\n## Replies\n\n`getReplies(mediaId, accessToken, options?, fields?, reverse?)` returns direct\nreplies to a post. Pass `reverse: false` for chronological order (default is\nreverse chronological).\n\n`getConversation(mediaId, accessToken, options?, fields?, reverse?)` returns the\nfull conversation thread (replies and nested replies). Pass `reverse: false` for\nchronological order.\n\n`getUserReplies(userId, accessToken, options?, fields?)` returns all replies\nmade by a user.\n\n`manageReply(replyId, accessToken, hide)` hides or unhides a reply. Pass `true`\nto hide, `false` to unhide.\n\n## Insights\n\n`getMediaInsights(mediaId, accessToken, metrics)` returns metrics for a post.\nPass metric names as a string array: `\"views\"`, `\"likes\"`, `\"replies\"`,\n`\"reposts\"`, `\"quotes\"`, `\"shares\"`.\n\n```typescript\nconst insights = await getMediaInsights(postId, token, [\"views\", \"likes\"]);\n// insights.data[0].values[0].value => 42\n```\n\n`getUserInsights(userId, accessToken, metrics, options?)` returns user-level\nmetrics. Accepts an options object with `since`/`until` timestamps and\n`breakdown` for demographics.\n\n## Search & Locations\n\n`searchKeyword(accessToken, options, fields?)` searches posts by keyword or\ntopic tag. Options:\n`{ q, search_type?, search_mode?, media_type?, author_username?,\n...pagination }`.\nRequires `threads_keyword_search` permission for searching beyond your own\nposts.\n\n`searchLocations(accessToken, options, fields?)` searches for locations by name\nor coordinates. Options: `{ query?, latitude?, longitude? }`. Returns location\nobjects with IDs you can pass to `createThreadsContainer` as `locationId`.\n\n`getLocation(locationId, accessToken, fields?)` returns details for a location\n(name, address, city, country, coordinates).\n\n## Tokens\n\n`exchangeCodeForToken(clientId, clientSecret, code, redirectUri)` exchanges an\nOAuth authorization code for a short-lived access token. Returns\n`{ access_token, user_id }`.\n\n`getAppAccessToken(clientId, clientSecret)` gets an app-level access token via\nclient credentials. Returns `{ access_token, token_type }`.\n\n`exchangeToken(clientSecret, accessToken)` exchanges a short-lived token for a\nlong-lived one (60 days). Returns `{ access_token, token_type, expires_in }`.\n\n`refreshToken(accessToken)` refreshes a long-lived token before it expires. Same\nreturn shape.\n\n`debugToken(accessToken, inputToken)` returns metadata about a token: app ID,\nscopes, expiry, validity.\n\n## Other\n\n`getPublishingLimit(userId, accessToken, fields?)` returns rate limit info: post\nquota, reply quota, and remaining usage.\n\n`getMentions(userId, accessToken, options?, fields?)` returns posts that mention\nthe authenticated user.\n\n`getOEmbed(accessToken, url, maxWidth?)` returns embeddable HTML for a Threads\npost URL. Returns `{ html, provider_name, type, version, width }`.\n\n## Utilities\n\n`validateRequest(request)` checks a `ThreadsPostRequest` for invalid\ncombinations (wrong media type for polls, too many text entities, etc.) and\nthrows descriptive errors. Called automatically by `createThreadsContainer`.\n\n`checkContainerStatus(containerId, accessToken)` polls a container's publishing\nstatus. Returns `{ status, error_message? }` where `status` is `\"FINISHED\"`,\n`\"IN_PROGRESS\"`, `\"EXPIRED\"`, `\"ERROR\"`, or `\"PUBLISHED\"`.\n\n## Testing\n\nDenim ships a `MockThreadsAPI` interface for testing without network requests.\nSet an implementation on `globalThis.threadsAPI` and all functions route through\nit instead of calling the Threads API:\n\n```typescript\nimport { MockThreadsAPIImpl } from \"@codybrom/denim\";\n\nconst mock = new MockThreadsAPIImpl();\n(globalThis as any).threadsAPI = mock;\n\n// Now all denim functions use the mock\nconst container = await createThreadsContainer({ ... });\n\n// Enable error mode to test failure paths\nmock.setErrorMode(true);\n```\n\nSee `mod_test.ts` for more examples.\n\n```bash\ndeno task test\n```\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"readme.md"}