{"_id":"@bernierllc/social-media-content-type-mastodon","_rev":"9-7f2eb834ce50240bf8e6c4631fa537a5","name":"@bernierllc/social-media-content-type-mastodon","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.0.0","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.0.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"ecf1be41fad43524494c32b4408f77839cb3b380","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.0.0.tgz","fileCount":46,"integrity":"sha512-8vVdG+wA18XCNCslnkGnwnxxJtDerPPa5lRHze87huUcGmyNO7nzLZG59GCFsCaI52ufF3b7E1xP5r1h30TOEw==","signatures":[{"sig":"MEUCIQDcKcSwapGTbJp2cCezTBwhJ1FFAMmuXCrXyppHxP+fHQIgfmb3z5SYGPht98sE5FYQzHlTw8KoTkWIyV4KS9bqGSk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205184},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"736d29de7f8d4f0803194817f8eb5d4d7b03cda7","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.4.2","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.0.0_1760368360062_0.8172959537268538","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.0.1","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"b78ee1591621fefd5978ac9f209e58d410ca08b5","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.0.1.tgz","fileCount":47,"integrity":"sha512-Wcx6yoqKykkJjMypaffHidXmhHrgsaXvx/UxygpL80IgFrbHBgxoHq7vLiC8YXQYD75gh/5DXLcoFHiRmqgaRg==","signatures":[{"sig":"MEUCIEaxUrRin6+d9+6D5uLFoyi6cY3bNDY3ylXnE6M6SJ1jAiEAoRIOxznzdtp/Wq6hlEuEOj0jddqZqrPf8yVB/G9TpPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207481},"main":"dist/index.js","_from":"file:bernierllc-social-media-content-type-mastodon-1.0.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/8571b6e3f8290b8c542912c2c047d249/bernierllc-social-media-content-type-mastodon-1.0.1.tgz","_integrity":"sha512-Wcx6yoqKykkJjMypaffHidXmhHrgsaXvx/UxygpL80IgFrbHBgxoHq7vLiC8YXQYD75gh/5DXLcoFHiRmqgaRg==","bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.7.0","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.0.1_1766276716263_0.3452400746227362","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.0.2","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"2bb4a700ce81047c38b794ffb746542050059d66","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.0.2.tgz","fileCount":47,"integrity":"sha512-blYhv7vAEgxO3m50uimydeLnQm7PeHDK9qgLQWmgF9fhtE0GrxlluxHXyUwznK/It/n+y6+KOP2f1SHwAVZnXQ==","signatures":[{"sig":"MEUCIHewTSWeYZAlQEklVXiVS0ti8HIDxpHJncIAQ/8O79RjAiEAhUmazvJHt8qA6BvKkTbvUBw6LSOylvllqQGZBxeDAdE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207669},"main":"dist/index.js","_from":"file:bernierllc-social-media-content-type-mastodon-1.0.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/bf21335fcd132c0143da89f271143c5c/bernierllc-social-media-content-type-mastodon-1.0.2.tgz","_integrity":"sha512-blYhv7vAEgxO3m50uimydeLnQm7PeHDK9qgLQWmgF9fhtE0GrxlluxHXyUwznK/It/n+y6+KOP2f1SHwAVZnXQ==","bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.7.0","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.0.2_1766283498220_0.1895264332775417","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.0.4","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.0.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"49f8860a875fa1f57f9bd75320c24ae073c16b7d","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.0.4.tgz","fileCount":47,"integrity":"sha512-A1eGKu6wNYLChP+4yeCM2ew5dWDqtlQ3dccKOhz89G4TDw4YrRYFsR5zSSKuU1PovLrC22G8XOycWh2xi2O+6g==","signatures":[{"sig":"MEUCIA+L47dXDlprMI2kmxJrTqpgoZ/Fx9uYTC4NjyuxwFHGAiEAvEfCNy8yAWsbRrAOJvRSw/TApxlNI3cBc6uPrE8F6Ss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209425},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d72a0b1a-46f0-451b-b09e-f8587a657851"}},"bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.0.6"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.0.4_1767642389157_0.13619893839063457","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.0.5","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.0.5","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"378f8d6f6b8ef627ac5a11fc2dff6cce25bdf37d","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.0.5.tgz","fileCount":47,"integrity":"sha512-WB0tWMPhPkovX1g+8gDmtblntqUVdT5sldwPKrZ+CL6zLG8Q01AX9/5DKpHJvp5z7oVsdt84h3v8kS5Yn8kG5w==","signatures":[{"sig":"MEUCIBrKMjPsoIIp0WWbvkcaCng9lkjaFDtbAAPp5JQQixvfAiEA+P3yc7GzJrwXu/NOUKNs5uXYl8na6+oXixbEuARH9v0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209637},"main":"dist/index.js","_from":"file:bernierllc-social-media-content-type-mastodon-1.0.5.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d72a0b1a-46f0-451b-b09e-f8587a657851"}},"_resolved":"/tmp/24d3da34d20b5fd3b85549682517c8dc/bernierllc-social-media-content-type-mastodon-1.0.5.tgz","_integrity":"sha512-WB0tWMPhPkovX1g+8gDmtblntqUVdT5sldwPKrZ+CL6zLG8Q01AX9/5DKpHJvp5z7oVsdt84h3v8kS5Yn8kG5w==","bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.11.0","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.0.7"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.0.5_1773078203683_0.02380183055953866","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.0.6","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.0.6","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"6d3d4616f7dcb463f0744830cb7b1e86f4880f75","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.0.6.tgz","fileCount":47,"integrity":"sha512-I0q3spIoGUjgtadNVhuOxRPW08HkfWuECXgfeExFTUCyFPfoNbd7zOcR7o8oPeJi7ls9QRLtPfiGXg7ZxqJeyQ==","signatures":[{"sig":"MEUCIQDtDcqfF4iRQ/QE1SAWqLA3FM3RyIs71c3sRcAY+ZYhUQIgQ4s1pjTzPsYFMFEEYcBGJRwfete3g9Ii6YrmPQKz8VA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209907},"main":"dist/index.js","_from":"file:bernierllc-social-media-content-type-mastodon-1.0.6.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d72a0b1a-46f0-451b-b09e-f8587a657851"}},"_resolved":"/home/runner/work/tools/tools/packages/core/social-media-content-type-mastodon/bernierllc-social-media-content-type-mastodon-1.0.6.tgz","_integrity":"sha512-I0q3spIoGUjgtadNVhuOxRPW08HkfWuECXgfeExFTUCyFPfoNbd7zOcR7o8oPeJi7ls9QRLtPfiGXg7ZxqJeyQ==","bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.11.0","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.0.6_1773163314034_0.9613188148709142","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.1.0","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"76658bc595c628ad16d314984a7e1fd5f944c3ab","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.1.0.tgz","fileCount":47,"integrity":"sha512-zh9dUsSB0Fq4ERGOSKsXZ8UsORToZPj7i1yh01ag7EqZEKNejXjOt0yYO2uoxsYUOqkv8q4+mxsPHeRuFl0zxQ==","signatures":[{"sig":"MEYCIQCPbgkf8CeY0i3g81GvqsbE4L9L7YvH7E77G5gO/KNNZQIhAMqFeXjanGgtZ/+tBEQduq6XTERlXeB2Pn5vFvL/eHpq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210122},"main":"dist/index.js","_from":"file:bernierllc-social-media-content-type-mastodon-1.1.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d72a0b1a-46f0-451b-b09e-f8587a657851"}},"_resolved":"/home/runner/work/tools/tools/packages/core/social-media-content-type-mastodon/bernierllc-social-media-content-type-mastodon-1.1.0.tgz","_integrity":"sha512-zh9dUsSB0Fq4ERGOSKsXZ8UsORToZPj7i1yh01ag7EqZEKNejXjOt0yYO2uoxsYUOqkv8q4+mxsPHeRuFl0zxQ==","bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.14.1","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.20.2","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.1.0_1779221446782_0.8801469972006675","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.3.0","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/social-media-content-type-mastodon@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"c65024f74e959bf3dff18d4bd1735bb60045b1fa","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.3.0.tgz","fileCount":28,"integrity":"sha512-n5OLBI1zZJ7DBT1qb0w4V40osn4+jn+nleOKVD2lYvPbJQ+u1JHTVCAjEMIttvKIs0MkDW8f9H2qUwbUyOnAdg==","signatures":[{"sig":"MEQCIDnW0bsoQODeNlTxi08D5A686LNdm6Km8I9eWeAuALtmAiAn9uvr8O6EzApUeaDJkpKrBpiU6tTSfLyhLKzp4IgL7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110181},"main":"dist/index.js","_from":"file:bernierllc-social-media-content-type-mastodon-1.3.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d72a0b1a-46f0-451b-b09e-f8587a657851"}},"_resolved":"/home/runner/work/tools/tools/packages/core/social-media-content-type-mastodon/bernierllc-social-media-content-type-mastodon-1.3.0.tgz","_integrity":"sha512-n5OLBI1zZJ7DBT1qb0w4V40osn4+jn+nleOKVD2lYvPbJQ+u1JHTVCAjEMIttvKIs0MkDW8f9H2qUwbUyOnAdg==","bernierllc":{"tags":["social","content-type","mastodon","federated","decentralized"],"category":"core","integration":{"neverhub":"optional"}},"_npmVersion":"11.14.1","description":"Mastodon-specific content type definition and validation","directories":{},"_nodeVersion":"20.20.2","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/social-media-content-type-mastodon_1.3.0_1779241434890_0.2809293040845573","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/social-media-content-type-mastodon","version":"1.4.0","description":"Mastodon-specific content type definition and validation","main":"dist/index.js","types":"dist/index.d.ts","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","dependencies":{"validator":"^13.12.0","@bernierllc/crypto-utils":"1.4.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@types/validator":"^13.11.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.0"},"bernierllc":{"integration":{"neverhub":"optional"},"category":"core","tags":["social","content-type","mastodon","federated","decentralized"]},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","test":"jest --watch","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","clean":"rm -rf dist"},"_id":"@bernierllc/social-media-content-type-mastodon@1.4.0","_integrity":"sha512-YZoamHO4iil4rSaiym+kvWb/iNhhcwPtpIF407z6aJH3eR8cMDALaycuQnAkfrzuixR9fHn9CHY4dXcKzNDzXQ==","_resolved":"/home/runner/work/tools/tools/packages/core/social-media-content-type-mastodon/bernierllc-social-media-content-type-mastodon-1.4.0.tgz","_from":"file:bernierllc-social-media-content-type-mastodon-1.4.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-YZoamHO4iil4rSaiym+kvWb/iNhhcwPtpIF407z6aJH3eR8cMDALaycuQnAkfrzuixR9fHn9CHY4dXcKzNDzXQ==","shasum":"084e2e6a70adcacf21c326deb0c56983c2006b7e","tarball":"https://registry.npmjs.org/@bernierllc/social-media-content-type-mastodon/-/social-media-content-type-mastodon-1.4.0.tgz","fileCount":28,"unpackedSize":110181,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDrSwpZGVdTzyVgfrCS3aVuB84sYC6yYpBRoi18apEzNQIhAKeJPsRl9fQSOQEkEFZvcDNuLk17UYVE6L6FnWfX81mq"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d72a0b1a-46f0-451b-b09e-f8587a657851"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/social-media-content-type-mastodon_1.4.0_1779250181872_0.8125027756992877"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-13T15:12:39.937Z","modified":"2026-05-20T04:09:42.190Z","1.0.0":"2025-10-13T15:12:40.257Z","1.0.1":"2025-12-21T00:25:16.399Z","1.0.2":"2025-12-21T02:18:18.354Z","1.0.4":"2026-01-05T19:46:29.295Z","1.0.5":"2026-03-09T17:43:23.829Z","1.0.6":"2026-03-10T17:21:54.172Z","1.1.0":"2026-05-19T20:10:46.947Z","1.3.0":"2026-05-20T01:43:55.043Z","1.4.0":"2026-05-20T04:09:42.020Z"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","keywords":["mastodon","social-media","content-type","validation","federated","decentralized","activitypub"],"description":"Mastodon-specific content type definition and validation","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/social-media-content-type-mastodon\n\nMastodon-specific content type definition and validation for the BernierLLC Content Management Suite.\n\n## Features\n\n- Instance-specific configuration fetching and caching\n- Content warning (CW) auto-detection and generation\n- Cross-instance mention parsing (@user@instance.social)\n- Media focal point support\n- Character counting with URL normalization (23 chars per URL)\n- Thread generation for long content\n- Four visibility levels (public, unlisted, private, direct)\n- Poll support (2-4 options, 5min-30days expiry)\n- Custom emoji support\n\n## Installation\n\n```bash\nnpm install @bernierllc/social-media-content-type-mastodon\n```\n\n## Usage\n\nThe package provides three main classes for working with Mastodon content:\n\n1. **MastodonContentBuilder** - Fluent API for building Mastodon posts\n2. **MastodonContentValidator** - Validate content against Mastodon's rules\n3. **MastodonContentTransformer** - Convert content from other formats\n\n## Quick Start\n\n```typescript\nimport {\n  MastodonContentBuilder,\n  MastodonContentValidator,\n  MastodonInstanceConfigFetcher\n} from '@bernierllc/social-media-content-type-mastodon';\n\n// Fetch instance configuration\nconst fetcher = new MastodonInstanceConfigFetcher();\nconst config = await fetcher.fetchConfig('mastodon.social');\n\n// Build content\nconst builder = new MastodonContentBuilder();\nconst content = builder\n  .setStatus('Hello from @bernierllc! #Mastodon')\n  .setVisibility('public')\n  .setSensitive(false)\n  .build();\n\n// Validate\nconst validator = new MastodonContentValidator();\nconst result = validator.validate(content, config);\n\nconsole.log(`Valid: ${result.valid}`);\nconsole.log(`Character count: ${result.characterCount.status}`);\n```\n\n## Core API\n\n### MastodonContentBuilder\n\nFluent builder for creating Mastodon content:\n\n```typescript\nconst content = new MastodonContentBuilder()\n  .setStatus('My post text')\n  .addMedia({ type: 'image', file: '/path/to/image.jpg', description: 'Alt text' })\n  .addHashtag('mastodon')\n  .addMention('@friend')\n  .setVisibility('public')\n  .setSpoilerText('NSFW')  // Content warning\n  .build();\n```\n\n### MastodonContentValidator\n\nValidates content against platform constraints:\n\n```typescript\nconst validator = new MastodonContentValidator();\nconst result = validator.validate(content, instanceConfig);\n\nif (!result.valid) {\n  console.error('Validation errors:', result.errors);\n}\n```\n\n### MastodonInstanceConfigFetcher\n\nFetches instance-specific limits from Mastodon API:\n\n```typescript\nconst fetcher = new MastodonInstanceConfigFetcher();\n\n// Fetches from /api/v1/instance\nconst config = await fetcher.fetchConfig('mastodon.social');\nconsole.log(`Max status length: ${config.maxStatusLength}`);  // Often 500, can be 5000+\n\n// Cached for 1 hour\nconst cached = fetcher.getCachedConfig('mastodon.social');\n```\n\n### Character Counting\n\nMastodon counts URLs as 23 characters regardless of actual length:\n\n```typescript\nimport { countCharacters, isWithinCharacterLimit } from '@bernierllc/social-media-content-type-mastodon';\n\nconst status = 'Check out https://example.com/very/long/url';\nconst count = countCharacters(status);\n\nconsole.log(`Total: ${count.total}`); // \"Check out \" (10) + 23 (URL) = 33\nconsole.log(`URLs: ${count.urlCount}`); // 1\n\nconst withinLimit = isWithinCharacterLimit(status, 500); // true\n```\n\n### Mention Parsing\n\nSupports local and cross-instance mentions:\n\n```typescript\nimport { parseMention, extractMentionsFromStatus } from '@bernierllc/social-media-content-type-mastodon';\n\n// Local mention\nconst local = parseMention('@alice');\nconsole.log(local.isLocal); // true\nconsole.log(local.formatted); // \"@alice\"\n\n// Cross-instance mention\nconst remote = parseMention('@bob@mastodon.social');\nconsole.log(remote.isLocal); // false\nconsole.log(remote.instance); // \"mastodon.social\"\n\n// Extract from status\nconst status = '@alice and @bob@mastodon.social are friends';\nconst mentions = extractMentionsFromStatus(status);\nconsole.log(mentions.length); // 2\n```\n\n### Content Warning Generation\n\nAuto-detect sensitive content and suggest warnings:\n\n```typescript\nimport { detectContentWarning, autoGenerateContentWarning } from '@bernierllc/social-media-content-type-mastodon';\n\nconst status = 'Discussion about violence and politics';\nconst detection = detectContentWarning(status);\n\nconsole.log(detection.suggested); // true\nconsole.log(detection.suggestedText); // \"Violence, Politics\"\nconsole.log(detection.confidence); // \"medium\" or \"high\"\n\n// Auto-generate (only for medium/high confidence, skips if explicit CW exists)\nconst cw = autoGenerateContentWarning(status);\nconsole.log(cw); // \"Violence, Politics\"\n```\n\n### Thread Generation\n\nSplit long content into multiple posts:\n\n```typescript\nimport { generateThread } from '@bernierllc/social-media-content-type-mastodon';\n\nconst longContent = 'A'.repeat(800); // Exceeds 500 char limit\nconst thread = generateThread(longContent, instanceConfig, {\n  numberPosts: true,  // Add \"1/3\", \"2/3\", etc.\n  preserveHashtags: 'both',  // Keep hashtags in first and last post\n  splitStrategy: 'sentence'  // Split at sentence boundaries\n});\n\nconsole.log(`Posts: ${thread.posts.length}`);\nconsole.log(thread.posts[0]); // \"1/3 First part...\"\n```\n\n### Content Transformation\n\nTransform between content types:\n\n```typescript\nimport { MastodonContentTransformer } from '@bernierllc/social-media-content-type-mastodon';\n\nconst transformer = new MastodonContentTransformer();\n\n// From Twitter\nconst twitterContent = {\n  text: 'Hello Twitter!',\n  media: [{ type: 'photo', file: 'image.jpg', description: 'Alt text' }]\n};\nconst mastodonContent = transformer.fromTwitter(twitterContent);\n\n// From blog post (creates thread if needed)\nconst blogContent = {\n  title: 'My Blog Post',\n  excerpt: 'This is the excerpt...',\n  url: 'https://myblog.com/post',\n  featuredImage: 'cover.jpg',\n  tags: ['tech', 'mastodon']\n};\nconst thread = transformer.fromBlogPost(blogContent, instanceConfig);\n```\n\n## Platform Constraints\n\nDefault constraints (instance-specific, fetchable from API):\n\n- **Max status length**: 500 chars (default), up to 10,000+ on some instances\n- **Max media**: 4 attachments\n- **Max poll options**: 4 (2 minimum)\n- **Poll expiry**: 5 minutes to 30 days\n- **Max media description**: 1,500 chars\n- **Focal point range**: -1.0 to 1.0 (x/y coordinates)\n\n```typescript\nimport { MASTODON_CONSTRAINTS } from '@bernierllc/social-media-content-type-mastodon';\n\nconsole.log(MASTODON_CONSTRAINTS.maxStatusLength); // 500\nconsole.log(MASTODON_CONSTRAINTS.maxMediaAttachments); // 4\n```\n\n## Visibility Levels\n\n- **public**: Visible to all, appears in public timelines, federates\n- **unlisted**: Visible to all, but not in public timelines, federates\n- **private**: Followers only, federates to followers' instances\n- **direct**: Mentioned users only, doesn't federate to public\n\n## Integration Status\n\n### Logger Integration\n**Status**: Not applicable\n\n**Justification**: This is a pure content type definition package with no runtime operations, side effects, or error conditions that require logging. The MastodonContentValidator, MastodonContentBuilder, and MastodonContentTransformer classes are stateless utility classes that perform validation, building, and transformation operations. All errors are thrown as exceptions that calling code can handle, and there are no background operations, network calls, or state changes that would benefit from structured logging.\n\n**Pattern**: Pure functional utility - no logger integration needed. Logging is handled by consuming packages that use this content type.\n\n### NeverHub Integration\n**Status**: Optional\n\n**Justification**: This package can optionally register itself with NeverHub for service discovery. Content type packages can register themselves with NeverHub so that services can discover available content types at runtime. This enables dynamic content type discovery and allows services to adapt to available content types without hard-coded dependencies.\n\n**Pattern**: Optional service discovery integration - package can register content type with NeverHub for runtime discovery.\n\n**Example Integration**:\n```typescript\nimport { registerMastodonContentType } from '@bernierllc/social-media-content-type-mastodon/neverhub-registration';\n\n// Register with NeverHub (if available)\nif (typeof detectNeverHub === 'function') {\n  registerMastodonContentType();\n}\n```\n\n### Docs-Suite Integration\n**Status**: Ready\n\n**Format**: TypeDoc-compatible JSDoc comments are included throughout the source code. All public APIs are documented with examples and type information.\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\n## See Also\n\n- [@bernierllc/social-media-mastodon](https://www.npmjs.com/package/@bernierllc/social-media-mastodon) - Service layer for posting\n- [@bernierllc/social-media-manager](https://www.npmjs.com/package/@bernierllc/social-media-manager) - Multi-platform orchestrator\n- [@bernierllc/content-management-suite](https://www.npmjs.com/package/@bernierllc/content-management-suite) - Complete CMS\n","readmeFilename":"README.md"}