{"_id":"@flyrank/dna","_rev":"26-6f2cec4b402aa95270e9038916d8a86c","name":"@flyrank/dna","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.1":{"name":"@flyrank/dna","version":"1.0.1","_id":"@flyrank/dna@1.0.1","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"81bbd3983304193bb988de6c6793e9b733b4377b","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.1.tgz","fileCount":161,"integrity":"sha512-tgMK496gzehJnqoQMDItAJ3CvzdcL9+4SjfurSU7SJ7N71f3EHMr3FVV/PQrzEfMfs5xqw2/C1Tku83Yate8OA==","signatures":[{"sig":"MEQCIHz5E0MDSpiC9PVXq6KBLLf4DPv2YRdKPj6c1iJDavbOAiBC1lFsWRfQ8bro/uhwwZwX3T/RHMJj8fyLYlR9iTufqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":820485},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ddf6e67b0156fd81a2049941e69f4192ae431ab7","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"Install the dependencies:","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.1_1778207629697_0.7191278966785977","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@flyrank/dna","version":"1.0.2","_id":"@flyrank/dna@1.0.2","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"e43007660d84763ad478f85b3ef2f4c7e0319fdf","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.2.tgz","fileCount":162,"integrity":"sha512-vdhhJNJBZoG4p+ZMcNGNzqVWdItVNw1XoWpzDVPGOp1EXdyhF0kNSpHtV2i1bzTd/L/YUltGO0QfapL6PXvzrg==","signatures":[{"sig":"MEQCID4YXk+F3HB/TTi4XsFuiCxlP/36nVf/FJYwzph1RHj4AiACk63KliEWeZSMIJi3gxOZCRbp7JxbJqQ4tLg9ie6yzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":828765},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ddf6e67b0156fd81a2049941e69f4192ae431ab7","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"Install the dependencies:","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.2_1778208961401_0.9951958647584973","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@flyrank/dna","version":"1.0.3","_id":"@flyrank/dna@1.0.3","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"abf5ec5ddf81e8bece8f50080bbbf346eb010239","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.3.tgz","fileCount":162,"integrity":"sha512-5DafbSv55ZWzxHjxjN0RL3QPK5G69LY/N/XfSDn2O+EWVMIy45XN8bsopt7bEBzKU+crgB9VgCOu6ETi3zJchg==","signatures":[{"sig":"MEUCIDjFpuCBBQHdcvcXGMsDLy7okCb+RDseDueb3JrRzljHAiEAovP2BUEcCRvAyJ5UlMmdWfGlscfpPEORuwz582z3si0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":866983},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ddf6e67b0156fd81a2049941e69f4192ae431ab7","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"Install the dependencies:","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.3_1778210046280_0.4602678656120296","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@flyrank/dna","version":"1.0.4","_id":"@flyrank/dna@1.0.4","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"8f508ba3b9bea62d7042abd6a39dca9d16e3ada9","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.4.tgz","fileCount":162,"integrity":"sha512-8NkS/BIf+rrtNpYkund3hj3UDXkxN726w/zoTTv4ynxb/0C+N/YgCEBDPmACclQVLwtlMcRWJI10fXQl5x3TBw==","signatures":[{"sig":"MEQCICNjHmpemRMHpUFIcBsGW7uPunLh34iFvXvmvmgVTURvAiA+tsL0sey0B+XYLYulgmQVkpL4Pee9hYYrtP6RWwjIdA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":867568},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ddf6e67b0156fd81a2049941e69f4192ae431ab7","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"Install the dependencies:","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.4_1778210094985_0.885112380666043","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@flyrank/dna","version":"1.0.5","_id":"@flyrank/dna@1.0.5","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"4c6a86ddac93760165876768002f2c7f8070213e","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.5.tgz","fileCount":162,"integrity":"sha512-W0cItabp3BLJ0gaQ6pE0m1qwDnBoQ/UWOFytYuunGPqpSMPjYaWHJuiukNuUg/5mGpayBF3g+z++ko8eGLFGsQ==","signatures":[{"sig":"MEUCIQDhCFhnJiLZAJu2UW1713hOlZRQ1IDhilG9S273wvsYjQIgIivbztW6Wy8ye6QYT5ZASTfo7G4VqwgaTavOfPblU8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":867374},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ddf6e67b0156fd81a2049941e69f4192ae431ab7","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"Install the dependencies:","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.5_1778210267251_0.9656243699009885","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@flyrank/dna","version":"1.0.6","_id":"@flyrank/dna@1.0.6","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"f40eff9d8fca86487173a8516264e165e1008acb","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.6.tgz","fileCount":162,"integrity":"sha512-1Z0mxpzCcqmyStfTr19iuNX0WxT2lDTQWwormYkCKkph7UdQwjJRIrfXeVijSSyEz+ShOhK32JaM3bV2v6m2QA==","signatures":[{"sig":"MEQCIEVAXQYnC19gSlZEjRIOL8jdYcx5yyXfVvhrsdOz1dsMAiBWpZL4nz4T96XqjwGHXQ99tIMgTivGODgEKvBcqGPVdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002186},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"bfd46cfae2950c26b1c57124a4b8bc5f255bdcc9","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"`@flyrank/dna` is a code-first visual intelligence package for extracting and operating on website design systems.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.6_1778212513110_0.5674325159016154","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@flyrank/dna","version":"1.0.7","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.7","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"cbbf835c7cedeef579a1e7989b396c721f5aa8f0","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.7.tgz","fileCount":192,"integrity":"sha512-0GSWGmiXT5Dn/D59j0Y09y2bLK9DT3ZcBccEBulMsslbCBcXEzzzuXGKv6zuK61W8+vsvQfVFV8sZFYFWOLwyA==","signatures":[{"sig":"MEQCIDPktVcYdMjbdlz6KRerIMdcPnq1oNZq2EXUGDX+brgdAiAGPkXcUeFPLo8CcYzX76rnG/8D6UMP4SC5QaJFISS0Wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1249224},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"bfd46cfae2950c26b1c57124a4b8bc5f255bdcc9","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^5.6.2","openai":"^6.37.0","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.7_1778216493347_0.168141175757758","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@flyrank/dna","version":"1.0.8","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.8","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"938272d5e01a05736d71f3534a979d968496e7c1","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.8.tgz","fileCount":200,"integrity":"sha512-r5OfcFOPxh42PFfXXvkSub2Z4C7X5VdEEa0HcTuzzjIN+miLk4/26ox5JfHqD0JYT3rmFRI6/GRIB6ZXGlWohA==","signatures":[{"sig":"MEUCIDzfmAzbh979S0QXFy61y4yZihJ+mQQj+thY1Xg0wPkCAiEA31os1DpyT046RcKX652r8crS4em3aHqv/xdoeQegSnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1386051},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"878643e066a6060d89421d0b4736391fa73baaef","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.8_1778230600429_0.9140646489585866","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@flyrank/dna","version":"1.0.9","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.9","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"2424b90d968d3d192e6a3c57fa245ecbde3064c1","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.9.tgz","fileCount":200,"integrity":"sha512-+aattixRnQBc5+PVOXYunGC99X5WqgEkylRdLChHhr66LwAn199RbMdElURN/CvxuTow3M7eTM0evYEuA3874Q==","signatures":[{"sig":"MEUCIAFuB15CEXl+BMXfp4x63WKbdmqJltQiERmsWMrvT3IsAiEAgnxbrkwcT01CJG3fHOw8T+peBTnRejc8zSljw4DatLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1413109},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b1ba5efabdd2cc1c0fe05b70c30669822644984b","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright":"^1.59.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.9_1778232921611_0.5866846090119007","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@flyrank/dna","version":"1.0.10","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.10","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"088211f7f479318c1d2eca628e7427af79dc8560","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.10.tgz","fileCount":201,"integrity":"sha512-kqUu4SYeqgwkgP8wTvpnTfFkNZXd24ySWYi9cy3Us/EzO/CtCRo9FpT56Z54uBpFfOOTIqhRfELg2eju22qwIA==","signatures":[{"sig":"MEQCIGaa2C7WVgnQs5d014QlVLzWVYAYtmis2tf2qd0e2LIAAiA/9u/uR8ro8EE6bj2eStBps7Iyh4HQ1uMQheZ5yCu9bw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1415580},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e08a475b346db18fa5c3af1f6a13a9be8ac5de9f","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.10_1778247688000_0.7767085836436212","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@flyrank/dna","version":"1.0.11","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.11","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"a708f08a94b2f6f4ea03b98952d8f6e94d56c670","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.11.tgz","fileCount":201,"integrity":"sha512-zC96mDo9buDZHvTIgGqy+PZ70BYI82Oev3LvKWGOCZvriEDkF+1YWAuX/P5qy2a1lvVWtiWDtGQLHS7RaYNCxg==","signatures":[{"sig":"MEUCIH3788cfZAE2nrNaX1EZhPlYc0JoePz3IMHBbXo6EpggAiEAoDr7zts52nz/8o+FFt+AsDR/31LyTdlO0M2i+INjx7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1417944},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e08a475b346db18fa5c3af1f6a13a9be8ac5de9f","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.11_1778249263033_0.7841420341962893","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@flyrank/dna","version":"1.0.13","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.13","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"b5162f54aaee7ee829eb7256d196a05774b19daf","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.13.tgz","fileCount":201,"integrity":"sha512-82JSfB/U8f1q0RuNUeUuejHRfpOvXHtR6qrgbzWobTg4cZ9vcXqQfaXG92VgbzT6d7t71pJ1VBLD/0iBDatS0A==","signatures":[{"sig":"MEUCIFkIwKdSXYwtGkP/HPbS992YqWX3Nd4m4JCsI8GXW3/FAiEAuoAl2oAp0f5qB2whoVNlTBzXdA0KdfliIBkN6wp0KQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1424216},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e08a475b346db18fa5c3af1f6a13a9be8ac5de9f","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.13_1778252739200_0.3409749514126805","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@flyrank/dna","version":"1.0.14","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.14","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"c17bc971bb6857a37e85b02663b144370eea0f49","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.14.tgz","fileCount":201,"integrity":"sha512-nSNxpv+eeaEtbed1DyTYxX7v+DWN+Tjb4jRrsg/xJ2KCe6A3XLqPdmLVY6Y0+0sdVOOZXviRPibRuX21VE+HKA==","signatures":[{"sig":"MEYCIQD5ZVJ/RXNnUEe3Scp+d9/g6hFl46q2xAWk5F1xOWJ66QIhAIPScjWLWneKr16JtzAPln28Kt8Nekz+h4Xr0K5uHmi3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1426120},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"e08a475b346db18fa5c3af1f6a13a9be8ac5de9f","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.14_1778254484386_0.7360507112465167","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@flyrank/dna","version":"1.0.15","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.15","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"390cf8e430656b553d4fbd4d4a3e1a3f33ba3d12","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.15.tgz","fileCount":202,"integrity":"sha512-CfEinS+9BcNs6x+mSzXI7NWnSr/XHddsqq1clL9j4oRLghv+0/h+0X+eB4PDJwcw3ii5bYb7vAuWUzLPYEoWcg==","signatures":[{"sig":"MEQCIDpDC7te2y1+o8E/FN28tf/GPOxrRJNroVmlKyTAEo8eAiAYa5Pc4WKNpKj3GSsmZ69oCnvZbjxWnvPeZBuuvgp3Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1427379},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"c17ddcd4530b4d80706f11607823ef8105c64bcc","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.15_1778491103211_0.2141944056321341","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@flyrank/dna","version":"1.0.16","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.16","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"aabd7a597e5c5649af291d9a9ac1aea2b6931883","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.16.tgz","fileCount":202,"integrity":"sha512-+aqAmEj6xFbF9yeus3b+f6QtHoBcjHZ/O8UEUpY/yTBb5Gg1YZ1+9aaA7wJooKeI4ExLEHioH/CzyE2rkqq5HA==","signatures":[{"sig":"MEUCIBPf/VmuguMJHw94fizL9QRXelI+dwqwdkrVKbyBRotwAiEAyM45Wn9V97Pz2q6mcD6eoRYHQlbOR3DCrh0A+UeQXf4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1427379},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0ea16d01a81be1bef9e0fe9cf96361e6a12a501c","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.16_1778670604865_0.7938683336357939","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"@flyrank/dna","version":"1.0.17","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.17","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"388f660719f42f77103093eb95139cdb63b40a8a","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.17.tgz","fileCount":202,"integrity":"sha512-21k26VQSqucE/1cZZlLz8d+EibbTFJDZ6mFOYKA4ukka1A9TXcHVnY2DOpQUCFkJlKlXb/tSs46gsUdh4HynvA==","signatures":[{"sig":"MEUCIQCo92uQxulSmkWt9o8ZKICKvi/PNfIEngd2dtTtID3xLQIgaGhut6yZ5Cbl/AXVuUp0Oo8X7py34ovYs03gdoWfI+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1427379},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0ea16d01a81be1bef9e0fe9cf96361e6a12a501c","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^132.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.17_1778672626290_0.785374773487739","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"@flyrank/dna","version":"1.0.18","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.18","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"8c4e0741093ee07232987d2a3bc40e9670a3656a","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.18.tgz","fileCount":202,"integrity":"sha512-24ca6gShU3XJTpGZaIeoTYK929HBdhfqjGveF1w6lPbGuWYTx6+hBo05WpjA2RhKh/S4L+QAbl1jdvow2rB1pQ==","signatures":[{"sig":"MEQCID3X1Vh3mX4oTvk/nvnR2nRAW6sPnusacJUhJVYo7XCMAiAr1YjZL3NNVr5Mt9Kb0F7ejdGGIPNtlyoTm5ZyLCE+VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1427817},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b04a5b9907b2b42298635b7962c6318c8a7a81dc","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.18_1778681104107_0.29796091348476694","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"@flyrank/dna","version":"1.0.19","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.19","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"bbb5e1829b8717381e0524577ec826b167f310b1","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.19.tgz","fileCount":202,"integrity":"sha512-a8ONNE37RUpfNKM/33U6AghCxYxS2Dw32GsV93W8OX/Sr++PAFEpddLUO8uP7F4D1FgNxG752FJkeY2nqn+NvQ==","signatures":[{"sig":"MEYCIQCEjD+xhPv6WnsK89F3CWLn2CG++drKGJ8kWVuFwcQnXgIhAKUXiy+/gmVPdgfVHVw3As9GZPAO1fdb38TKEM6xRjHO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1423070},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b04a5b9907b2b42298635b7962c6318c8a7a81dc","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.19_1778682478607_0.8618314815585637","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"@flyrank/dna","version":"1.0.20","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.20","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"bf4c7d3e9e925f852118bd2f2d68fa4f28e97e33","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.20.tgz","fileCount":202,"integrity":"sha512-ZprX4q8MS5wTr1yz70RxDXSHefD+Hqz0G7FwB3lmUjH72IT2RgBOxiArgYu/aHOX+09AsBVf1YaCSNjRCVNmlQ==","signatures":[{"sig":"MEUCICxLbX5Eh3uyQhD0x/MzWdS3Db8prfjUEJSHbALY/8FUAiEA/u2EL4jdH2X1oWfAzwq+bWs+yD568aygAErpOp+3pL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1423074},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b04a5b9907b2b42298635b7962c6318c8a7a81dc","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.20_1778803045331_0.6170340421829335","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"@flyrank/dna","version":"1.0.21","author":{"name":"admirsaheta"},"_id":"@flyrank/dna@1.0.21","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"dist":{"shasum":"7b92059e09c255e44d97f213994f7daeedeaac78","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.21.tgz","fileCount":202,"integrity":"sha512-MvhWNDxwopIddXJOcVNPL8KgWbcLoueVRvQXmuExXmktOokUwmscqEQeQkdisRXFwXn13AEYNc4LuammR6GlaA==","signatures":[{"sig":"MEQCIBQ7N7KVDQOPqo56YemgK11xSi3bu0ARa13wJBiJOQarAiASp8QY2rJWl8rnKrDJpFz3QobAHrLAAQ6Pcey+YIvHPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1423108},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9c720ab03eb7954506b3715b3a46fced3470358d","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.21_1778804726972_0.3651802135855007","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"@flyrank/dna","version":"1.0.22","keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"author":{"name":"admirsaheta"},"license":"MIT","_id":"@flyrank/dna@1.0.22","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"homepage":"https://github.com/flyrank-bih/dna#readme","bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"url":"https://github.com/flyrank-bih/dna","dist":{"shasum":"ba0c86b9adc98082645aad482c164abe5f6c969f","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.22.tgz","fileCount":202,"integrity":"sha512-6Xhg2IhiIMHmXkwyKBXhaeStn3E230w4cK8tZOQY+2AlrGaxDkAkmrK71ije2LDQSGeCfagkLUbY8HJfWdBQZA==","signatures":[{"sig":"MEUCIGgXZAh3Fh4k52o/UUARty8kgjV8POG5XCDix7R8f5NDAiEA/Zp4TAl9zEdhuh848LYY1xymbt8V8cPBNVZzf+hQ1n0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1424498},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6ac42aff0fa9c45dc73e473c62d1ee5fb26c9a7f","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"repository":{"url":"git+https://github.com/flyrank-bih/dna.git","type":"git"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.22_1779365917533_0.10229046466118219","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"@flyrank/dna","version":"1.0.23","keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"author":{"name":"admirsaheta"},"license":"MIT","_id":"@flyrank/dna@1.0.23","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"homepage":"https://github.com/flyrank-bih/dna#readme","bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"url":"https://github.com/flyrank-bih/dna","dist":{"shasum":"d8f0d53f02265fffbd95dbc0e8c277d5c3a32e32","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.23.tgz","fileCount":202,"integrity":"sha512-wzC5JaufWIfIBxQ0pJkvsLsisEY6M80yHXxD9h7w3SIHdUbFVAvGqTp7OoHBJJBiOeO0egkDnauNhggoF6LYuQ==","signatures":[{"sig":"MEUCIAhADEZjIk0ujC902S9uOvCvuQcM99W9tM/fTI6CGjamAiEA7uk5+Us+PnlSlh9Yr2088mEqRxwgiKk6R2uXnmWvn8E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1424640},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6ac42aff0fa9c45dc73e473c62d1ee5fb26c9a7f","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"repository":{"url":"git+https://github.com/flyrank-bih/dna.git","type":"git"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.23_1780310352750_0.1788380804889358","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"@flyrank/dna","version":"1.0.24","keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"author":{"name":"admirsaheta"},"license":"MIT","_id":"@flyrank/dna@1.0.24","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"homepage":"https://github.com/flyrank-bih/dna#readme","bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"url":"https://github.com/flyrank-bih/dna","dist":{"shasum":"769f5547f5c7f77368c7809ef956bd71c915cc85","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.24.tgz","fileCount":202,"integrity":"sha512-qo18MOh0fYay1QXKzt4MTvPo5sW2CBUnpb14pDjbDoD6DtfHtrtVBnjZD43EFE/+aU+RHbpilCv+4Udh5vTtkw==","signatures":[{"sig":"MEYCIQDxaiGhHNNbCnKB1bdwWHBRPvyHR0cZ17jxqWSDldKBkwIhAIvIOP+j8ngctNiDKWTv5xyBZcVqmqOmHREIdYMOUW9y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1424640},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b63898598f1a6d6916d46ddf36c9b9468dd7c2f4","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"repository":{"url":"git+https://github.com/flyrank-bih/dna.git","type":"git"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.24_1782137567574_0.5865914446235996","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"@flyrank/dna","version":"1.0.25","keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"author":{"name":"admirsaheta"},"license":"MIT","_id":"@flyrank/dna@1.0.25","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"homepage":"https://github.com/flyrank-bih/dna#readme","bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"url":"https://github.com/flyrank-bih/dna","dist":{"shasum":"5722cb885f563c28b45d3e6116946f97f020d9a7","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.0.25.tgz","fileCount":202,"integrity":"sha512-LogQ27yv6M28PZhaKCtI+LF07CnmKtmAGIr3LuddYvWb/JotJOqiYHZ1oFuYJMsOo4fW4GQIZNNdI38WBtvp1Q==","signatures":[{"sig":"MEUCIQDfEBViFulrjGI642q54XuKC6yfQo5ss2WiQwOITQrWAAIgPWyX0+nXg8jmyFzVT6HFM2Dfqmn7aAC+vcTde/Av484=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1424640},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"587fd7912586382d34d9b08fc799d21e8797fbf9","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"repository":{"url":"git+https://github.com/flyrank-bih/dna.git","type":"git"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.0.25_1782157053922_0.9558887812147319","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@flyrank/dna","version":"1.1.0","keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"author":{"name":"admirsaheta"},"license":"MIT","_id":"@flyrank/dna@1.1.0","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"homepage":"https://github.com/flyrank-bih/dna#readme","bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"url":"https://github.com/flyrank-bih/dna","dist":{"shasum":"25f9a6efbffe813327ed2a05354757a260c50a06","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.1.0.tgz","fileCount":206,"integrity":"sha512-ZaUHK5ufSBWTMA4b680Ay66/z0nRQrlupGL/HJ9XijQL49R3U7pM0g5nw42V+pP4jLhRIfH0mEPYK7pNnrIujQ==","signatures":[{"sig":"MEUCIQD1pjK3wVx9AROQD25NQWk2PaMeGkv6MXr4LziQp3qQ7AIgMMBGbYQJO12uRPsVN1WdYGCVFWG11KyfgpAb2HdzNMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1501971},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0bfb761e7dce18f1742711f2f34b04976dd021e9","scripts":{"dev":"rslib --watch","lint":"rslint","test":"rstest","build":"rslib","publish":"npm publish --access public"},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"repository":{"url":"git+https://github.com/flyrank-bih/dna.git","type":"git"},"_npmVersion":"11.6.2","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","directories":{},"_nodeVersion":"24.12.0","dependencies":{"openai":"^6.37.0","playwright-core":"^1.59.1","@sparticuz/chromium-min":"^148.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@rslib/core":"^0.21.4","@types/node":"^24.12.2","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@changesets/cli":"^2.31.0"},"_npmOperationalInternal":{"tmp":"tmp/dna_1.1.0_1782361907485_0.46086368474074346","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@flyrank/dna","description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","author":{"name":"admirsaheta"},"url":"https://github.com/flyrank-bih/dna","repository":{"type":"git","url":"git+https://github.com/flyrank-bih/dna.git"},"keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"license":"MIT","version":"1.1.1","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.cjs","types":"./dist/index.d.ts","scripts":{"build":"rslib","dev":"rslib --watch","lint":"rslint","test":"rstest","publish":"npm publish --access public"},"devDependencies":{"@changesets/cli":"^2.31.0","@rslib/core":"^0.21.4","@rslint/core":"^0.5.2","@rstest/core":"^0.9.10","@types/node":"^24.12.2","typescript":"^6.0.3"},"dependencies":{"@sparticuz/chromium-min":"^148.0.0","openai":"^6.37.0","playwright-core":"^1.59.1"},"gitHead":"0d0a82fb80608506892156911c6f4d6f5d16b007","_id":"@flyrank/dna@1.1.1","bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"homepage":"https://github.com/flyrank-bih/dna#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-mOOZObc+lEENepNnBAnchXsrGh/x4DlC5mZ+ASjKuhhu9rKLsd1Jhsw3+8SJQSS3ogP+as6KaRo9XF0UYgQn9g==","shasum":"e0726299184f8f85618aef3aedab8f2089d4a26b","tarball":"https://registry.npmjs.org/@flyrank/dna/-/dna-1.1.1.tgz","fileCount":206,"unpackedSize":1501971,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCuCKyUdk0CWa9NlVGnnE9lhxeugLaLDNjhiJv5+7fB6QIhAM7UAF/CkC8xQ7Rot9GNz31e/r5qiGAIzccJ8BhOD/+B"}]},"_npmUser":{"name":"flyrank","email":"admir@flyrank.com"},"directories":{},"maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dna_1.1.1_1782511561588_0.5692215839411106"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-08T02:33:49.597Z","modified":"2026-06-26T22:06:01.914Z","1.0.1":"2026-05-08T02:33:49.948Z","1.0.2":"2026-05-08T02:56:01.641Z","1.0.3":"2026-05-08T03:14:06.462Z","1.0.4":"2026-05-08T03:14:55.170Z","1.0.5":"2026-05-08T03:17:47.482Z","1.0.6":"2026-05-08T03:55:13.288Z","1.0.7":"2026-05-08T05:01:33.569Z","1.0.8":"2026-05-08T08:56:40.630Z","1.0.9":"2026-05-08T09:35:21.766Z","1.0.10":"2026-05-08T13:41:28.259Z","1.0.11":"2026-05-08T14:07:43.267Z","1.0.13":"2026-05-08T15:05:39.379Z","1.0.14":"2026-05-08T15:34:44.573Z","1.0.15":"2026-05-11T09:18:23.434Z","1.0.16":"2026-05-13T11:10:05.024Z","1.0.17":"2026-05-13T11:43:46.500Z","1.0.18":"2026-05-13T14:05:04.477Z","1.0.19":"2026-05-13T14:27:58.822Z","1.0.20":"2026-05-14T23:57:25.556Z","1.0.21":"2026-05-15T00:25:27.179Z","1.0.22":"2026-05-21T12:18:37.691Z","1.0.23":"2026-06-01T10:39:12.913Z","1.0.24":"2026-06-22T14:12:47.752Z","1.0.25":"2026-06-22T19:37:34.149Z","1.1.0":"2026-06-25T04:31:47.658Z","1.1.1":"2026-06-26T22:06:01.817Z"},"bugs":{"url":"https://github.com/flyrank-bih/dna/issues"},"author":{"name":"admirsaheta"},"license":"MIT","homepage":"https://github.com/flyrank-bih/dna#readme","keywords":["dna","identity","extraction","toolbox","ai-design","brand-identity","brand-design","brand-identity-extraction","brand-design-extraction"],"repository":{"type":"git","url":"git+https://github.com/flyrank-bih/dna.git"},"description":"The All-In One Brand DNA Identity Extraction Toolbox SDK","maintainers":[{"name":"flyrank","email":"admir@flyrank.com"}],"readme":"# @flyrank/dna\n\n`@flyrank/dna` is a code-first visual intelligence package for extracting and operating on website design systems.\n\nUse it to:\n- extract design language (colors, type, spacing, motion, components, voice, intent, stack intel),\n- return focused outputs by mode (`overview`, `stack`, `dna`, `voice`, `design-language`),\n- compare brands, benchmark a category, export competitive packs, diff designs, drift-check tokens, lint token files,\n- generate prompt packs for Claude, Cursor, Lovable, v0, and Codex.\n\n## Install\n\n```bash\nnpm i @flyrank/dna\n```\n\nor\n\n```bash\nbun add @flyrank/dna\n```\n\n## Runtime Requirements\n\n- Node.js runtime (server-side only).\n- Playwright is used internally for crawling/screenshot extraction.\n- Not intended for browser/client-side execution.\n\nFor Next.js, call it in:\n- route handlers (`app/api/.../route.ts`)\n- server actions\n- backend jobs/workers\n\n## Quick Start\n\n```ts\nimport { init } from \"@flyrank/dna\";\n\nconst dl = init({\n  cache: true,\n  screenshots: true,\n  outputDir: \".flydesign\",\n  emitFiles: true,\n  pages: 5,\n  responsive: true,\n  interact: true,\n  platforms: [\"web\", \"ios\"],\n});\n\nconst design = await dl.extract(\"https://stripe.com\");\n\nif (design.ok) {\n  console.log(design.data);\n}\n\nconst overview = await dl.extract(\"https://stripe.com\", { mode: \"overview\" });\nconst dna = await dl.extract(\"https://stripe.com\", { mode: \"dna\" });\nconst layout = await dl.extract(\"https://stripe.com\", {\n  mode: \"layout\",\n  aiInsights: true,\n});\n```\n\nAll public SDK methods now return a standardized envelope:\n\n```ts\ntype SdkResponse<T> =\n  | { ok: true; data: T; error: null; meta: { requestId: string; durationMs: number; version: string; source: string } }\n  | { ok: false; data: null; error: { code: string; message: string; source: string; retryable: boolean }; meta: { requestId: string; durationMs: number; version: string; source: string } };\n```\n\n## Init Options\n\n```ts\ninterface FlyDesignInitOptions {\n  cache?: boolean;          // default: true\n  screenshots?: boolean;    // capture component screenshots\n  screenshot?: boolean;     // alias of screenshots\n  outputDir?: string;       // default: \".flydesign\"\n  emitFiles?: boolean;      // default: true (write md/json artifacts)\n  artifactMode?: \"disk\" | \"memory\" | \"both\";\n  pages?: number;           // crawl N internal pages for reconciliation\n  responsive?: boolean;     // capture multiple breakpoints\n  interact?: boolean;       // auto-interaction pass\n  deepInteract?: boolean;   // alias of interact\n  platforms?: (\"web\" | \"ios\" | \"android\" | \"flutter\" | \"wordpress\" | \"all\")[];\n  mode?: ExtractMode;       // default extract mode\n  profile?: \"default\" | \"local\" | \"serverless\" | \"remote\" | string;\n  wsEndpoint?: string;      // connect to a remote Playwright/CDP browser\n  browserArgs?: string[];   // extra Chromium args for local launch\n  serverless?: boolean;     // prefer bundled Sparticuz Chromium on Linux/serverless\n  timeoutMs?: number;       // browser launch/connect timeout, default: 30000\n  features?: {\n    responsive?: boolean;\n    dark?: boolean;\n    screenshots?: boolean;\n    assetHeavy?: boolean;\n  };\n  aiInsights?: boolean | {\n    areas?: (\"layout\" | \"palette\" | \"typography\" | \"voice\" | \"brand-scaling\")[];\n    ai?: {\n      mode?: \"inline\" | \"deferred\" | \"off\";\n      fetch?: typeof fetch;\n      maxRetries?: number;\n    };\n  };\n  ignore?: string[];\n}\n```\n\nPer-call overrides are supported:\n\n```ts\nconst result = await dl.extract(\"https://flyrank.com\", {\n  mode: \"design-language\",\n  pages: 6,\n  responsive: true,\n  interact: true,\n  screenshot: true,\n  platforms: [\"all\"],\n  outputDir: \".flydesign\",\n  emitFiles: true,\n});\n```\n\nAdvanced `init()` configuration also supports grouped config:\n\n```ts\nconst dl = init({\n  profile: \"serverless\",\n  crawl: {\n    pages: 2,\n    responsive: false,\n  },\n  artifacts: {\n    outputDir: \".flydesign\",\n    artifactMode: \"memory\",\n    emitFiles: false,\n  },\n  profiles: {\n    serverless: {\n      timeoutMs: 20_000,\n      features: {\n        assetHeavy: false,\n      },\n    },\n  },\n  ai: {\n    enabled: true,\n    provider: \"openai\",\n    apiKey: process.env.OPENAI_API_KEY,\n    mode: \"deferred\",\n    maxRetries: 2,\n  },\n});\n```\n\n## Runtime Profiles\n\nProfiles let you set browser/runtime defaults once and reuse them across calls.\n\nBuilt-in profiles:\n\n| Profile | Built-in defaults | Typical use |\n|---|---|---|\n| `default` | no extra overrides | existing behavior |\n| `local` | `serverless: false` | local development with Playwright-managed Chromium |\n| `serverless` | `serverless: true`, `emitFiles: false` | Lambda/serverless workers |\n| `remote` | `emitFiles: false` | Browserless/remote Playwright connections |\n\nPrecedence is deterministic:\n\n1. `profile` defaults\n2. `init(...)` values, including `crawl` / `artifacts`\n3. per-call `extract(url, options)`\n\nYou can also add custom named profiles:\n\n```ts\nconst dl = init({\n  profile: \"ci\",\n  profiles: {\n    ci: {\n      timeoutMs: 45_000,\n      browserArgs: [\"--disable-dev-shm-usage\"],\n      artifactMode: \"memory\",\n      features: {\n        screenshots: false,\n        assetHeavy: false,\n      },\n    },\n  },\n});\n```\n\n## Browser Runtime Options\n\nThese options are available both at `init(...)` time and per `extract(...)` call:\n\n| Option | What it does |\n|---|---|\n| `profile` | selects a built-in or custom runtime profile |\n| `wsEndpoint` | switches execution to a remote Playwright/CDP browser |\n| `browserArgs` | passes extra launch args to local Chromium runs |\n| `serverless` | prefers bundled Sparticuz Chromium on Linux/serverless targets |\n| `timeoutMs` | controls browser launch/connect timeout |\n| `artifactMode` | controls disk vs in-memory artifact delivery |\n| `features.responsive` | enables or skips responsive capture work |\n| `features.dark` | enables or skips dark-mode crawl work |\n| `features.screenshots` | enables or skips screenshot-heavy work |\n| `features.assetHeavy` | enables or skips expensive asset-heavy passes |\n\nRuntime details are exposed on successful responses in `result.meta.runtime`, and mode/design results also preserve runtime metadata in `result.data.meta.runtime`.\n\nNotes:\n\n- `wsEndpoint` changes browser mode to remote and uses `browserTarget: \"remote-cdp\"`.\n- `browserArgs` only affect local launches.\n- `serverless: true` is mainly for Linux/serverless deployments. On macOS local development, the SDK falls back to the Playwright-managed browser because the bundled Sparticuz binary is Linux-only.\n\n## Runtime Examples\n\n### Local Chromium\n\n```ts\nconst dl = init({\n  profile: \"local\",\n  browserArgs: [\"--disable-dev-shm-usage\"],\n  timeoutMs: 45_000,\n});\n\nconst result = await dl.extract(\"https://stripe.com\", {\n  mode: \"overview\",\n});\n```\n\n### Bundled Serverless Chromium\n\n```ts\nconst dl = init({\n  profile: \"serverless\",\n  artifactMode: \"memory\",\n  emitFiles: false,\n  timeoutMs: 20_000,\n  features: {\n    responsive: false,\n    dark: false,\n    screenshots: false,\n    assetHeavy: false,\n  },\n});\n\nconst result = await dl.extract(\"https://stripe.com\", {\n  mode: \"design-language\",\n});\n\nif (result.ok) {\n  console.log(result.meta.runtime);\n  console.log(result.data.artifacts?.files.length);\n}\n```\n\n### Remote Browser Execution\n\n```ts\nconst dl = init({\n  profile: \"remote\",\n  wsEndpoint: process.env.PLAYWRIGHT_WS_ENDPOINT,\n  artifactMode: \"both\",\n  outputDir: \".flydesign/remote\",\n  timeoutMs: 25_000,\n});\n\nconst result = await dl.extract(\"https://stripe.com\", {\n  mode: \"stack\",\n});\n\nif (result.ok) {\n  console.log(result.meta.runtime?.browserMode);   // \"remote\"\n  console.log(result.meta.runtime?.browserTarget); // \"remote-cdp\"\n}\n```\n\n## Extract Modes\n\nPass mode on `extract(url, { mode })` to get focused payloads.\n\n- `standard`: full design extraction object\n- `overview`: concise DESIGN-style summary (intent/material/library/tokens/score)\n- `stack`: CMS/analytics/experimentation intel\n- `dna`: material language + imagery style + background patterns\n- `voice`: tone/pronoun/CTA verbs/button patterns/headings\n- `layout`: layout pattern, hero treatment, grid structure, rhythm, and overall feel\n- `palette`: palette-only response with brand palette score\n- `fonts`: font-family response with usage/source/provider links\n- `assets`: logo/font/image asset links with metadata\n- `design-language`: rich structured design-language response for deep UI/documentation use\n\nExample:\n\n```ts\nconst stack = await dl.extract(\"https://flyrank.com\", { mode: \"stack\" });\nconst voice = await dl.extract(\"https://flyrank.com\", { mode: \"voice\" });\nconst layout = await dl.extract(\"https://flyrank.com\", { mode: \"layout\" });\nconst deep = await dl.extract(\"https://flyrank.com\", { mode: \"design-language\" });\n```\n\n## AI Insights In Extract\n\nAI insights are optional and additive. When enabled, `extract()` uses the deterministic extraction as the baseline and appends an `aiInsights` field.\n\n```ts\nconst result = await dl.extract(\"https://stripe.com\", {\n  mode: \"design-language\",\n  aiInsights: true,\n});\n```\n\nYou can also scope AI enrichment to specific areas:\n\n```ts\nconst result = await dl.extract(\"https://stripe.com\", {\n  aiInsights: {\n    areas: [\"layout\", \"palette\", \"typography\", \"brand-scaling\"],\n  },\n});\n```\n\n## Output Artifacts\n\nArtifact delivery keeps the legacy file-writing behavior by default:\n\n- default: `emitFiles: true` with no `artifactMode` writes artifacts to disk only\n- `artifactMode: \"disk\"` always writes files to disk\n- `artifactMode: \"memory\"` returns artifact contents in the extraction response\n- `artifactMode: \"both\"` writes files to disk and returns in-memory artifact contents\n\nEffective behavior:\n\n| `artifactMode` | `emitFiles` | Result |\n|---|---|---|\n| omitted | `true` / omitted | disk only |\n| omitted | `false` | no artifacts written or returned |\n| `\"disk\"` | any | disk only |\n| `\"memory\"` | `false` / omitted | memory only |\n| `\"memory\"` | `true` | promoted to `\"both\"` |\n| `\"both\"` | any | disk + memory |\n\nWhen disk writing is enabled, extraction writes files into `outputDir`:\n\n- `<site>-design-language.md`\n- `<site>-DESIGN.md`\n- `<site>-design-language.json`\n- `<site>-stack-intel.json`\n- `<site>-visual-dna.json`\n- `<site>-voice.json`\n- `<site>-library.json`\n\nWhen `pages > 0`, it also emits route reconciliation artifacts:\n\n- `<site>-tokens-shared.json`\n- `<site>-tokens-routes/<slug>.json`\n- `<site>-routes-report.md`\n\nDisable file emission:\n\n```ts\nconst dl = init({ emitFiles: false });\nconst inMemory = await dl.extract(\"https://stripe.com\", { emitFiles: false });\n```\n\nReturn artifacts in memory instead:\n\n```ts\nconst dl = init({\n  artifactMode: \"memory\",\n  emitFiles: false,\n});\n\nconst result = await dl.extract(\"https://stripe.com\");\n\nif (result.ok) {\n  console.log(result.data.artifacts?.mode); // \"memory\"\n  console.log(result.data.artifacts?.files[0]?.relativePath);\n  console.log(result.meta.artifacts);\n}\n```\n\nWrite to disk and keep a copy in memory:\n\n```ts\nconst result = await init({\n  artifactMode: \"both\",\n  outputDir: \".flydesign/artifacts\",\n}).extract(\"https://stripe.com\");\n```\n\n## Core API\n\nCreate a client:\n\n```ts\nimport { init } from \"@flyrank/dna\";\nconst dl = init();\n```\n\nMethods:\n\n- `extract(url, options?)`\n- `analyze(input)`\n- `grade(input)`\n- `remix(input, options?)`\n- `clone(input, options?)`\n- `apply(input, options?)`\n- `brands(urls, options?)`\n- `benchmark(urls, options?)`\n- `packCategory(urls, options?)`\n- `analyzeBrandIdentity(input)`\n- `analyzeDesignConsistency(input)`\n- `analyzeVisualSystem(input)`\n- `suggestEnhancements(input, options?)`\n- `generateBrandContent(input, options?)`\n- `analyzeAssets(input)`\n- `extractDesignPalette(input, options?)`\n- `extractFontFamilies(input, options?)`\n- `extractAssets(input, options?)`\n- `extractBrandVoice(input, options?)`\n- `extractTechStack(input, options?)`\n- `extractAiInsights(input, options?)`\n- `suggestBrandScaling(input, options?)`\n- `suggestPaletteEvolution(input, options?)`\n- `suggestTypographySystem(input, options?)`\n- `suggestLayoutDirections(input, options?)`\n- `runCombinedAiMethods(input, options?)`\n- `extractScreenshots(input, options?)`\n- `createSnapshot(input)`\n- `compareSnapshots(current, previous)`\n- `monitorBrand(input, previous?)`\n- `drift(url, { tokens, tolerance?, options? })`\n- `lint(file)`\n- `diff(left, right, options?)`\n- `visualDiff(beforeUrl, afterUrl, options?)`\n- `makePrompt(input)`\n\n`input` can be:\n- a URL string, or\n- a previously extracted standard design object.\n\n## Prompt Generation\n\nGenerate cloning/build prompts for multiple coding agents:\n\n```ts\nconst prompts = await dl.makePrompt(\"https://apple.com\");\n\nif (prompts.ok) {\n  console.log(prompts.data.claude);\n  console.log(prompts.data.cursor);\n  console.log(prompts.data.lovable);\n  console.log(prompts.data.v0);\n  console.log(prompts.data.codex);\n}\n```\n\nTop-level helper is also exported:\n\n```ts\nimport { makePrompt } from \"@flyrank/dna\";\n\nconst prompts = await makePrompt(\"https://linear.app\", {\n  cache: true,\n  screenshots: true,\n});\n```\n\n## Modular Mini Methods\n\nUse focused methods when you do not need the full design dossier:\n\n```ts\nconst palette = await dl.extractDesignPalette(\"https://stripe.com\");\nconst fonts = await dl.extractFontFamilies(\"https://stripe.com\");\nconst assets = await dl.extractAssets(\"https://stripe.com\");\nconst voice = await dl.extractBrandVoice(\"https://stripe.com\");\nconst stack = await dl.extractTechStack(\"https://stripe.com\");\nconst ai = await dl.extractAiInsights(\"https://stripe.com\", { ai: true });\n```\n\nAI-focused mini methods:\n\n```ts\nconst scaling = await dl.suggestBrandScaling(\"https://stripe.com\", { ai: true });\nconst paletteEvolution = await dl.suggestPaletteEvolution(\"https://stripe.com\", { ai: true });\nconst typographySystem = await dl.suggestTypographySystem(\"https://stripe.com\", { ai: true });\nconst layoutDirections = await dl.suggestLayoutDirections(\"https://stripe.com\", { ai: true });\nconst aiBundle = await dl.runCombinedAiMethods(\"https://stripe.com\", { ai: true });\n```\n\n`runCombinedAiMethods(...)` performs a single AI insights generation pass and returns merged method-shaped results for:\n- `suggestEnhancements`\n- `extractAiInsights`\n- `suggestPaletteEvolution`\n- `suggestBrandScaling`\n- `suggestTypographySystem`\n\n## Screenshot Extraction\n\nCapture reusable screenshots for downstream prompting, auditing, or cloning:\n\n```ts\nconst shots = await dl.extractScreenshots(\"https://stripe.com\", {\n  components: true,\n  fullPage: true,\n  responsive: true,\n  includeDark: true,\n  outputDir: \".flydesign\",\n});\n```\n\nThe screenshot response includes:\n\n- component screenshots with cluster labels and size metadata\n- full-page screenshots\n- responsive screenshots by breakpoint and color scheme\n\n## Next.js Example (Route Handler)\n\n```ts\n// app/api/design/route.ts\nimport { init } from \"@flyrank/dna\";\n\nexport const runtime = \"nodejs\";\n\nexport async function POST(req: Request) {\n  const { url, mode = \"overview\" } = await req.json();\n\n  const dl = init({\n    cache: true,\n    screenshot: true,\n    outputDir: \".flydesign\",\n    emitFiles: true,\n  });\n\n  const result = await dl.extract(url, {\n    mode,\n    pages: 5,\n    responsive: true,\n    interact: true,\n    platforms: [\"web\", \"ios\", \"android\"],\n  });\n  const prompts = await dl.makePrompt(url);\n\n  return Response.json({ result, prompts });\n}\n```\n\n## Common Workflows\n\n### 1) Grade one site\n\n```ts\nconst dl = init();\nconst grade = await dl.grade(\"https://stripe.com\");\n```\n\n### 2) Compare two sites\n\n```ts\nconst dl = init();\nconst diff = await dl.diff(\"https://apple.com\", \"https://linear.app\");\n```\n\n### 3) Multi-brand matrix\n\n```ts\nconst dl = init();\nconst brands = await dl.brands([\n  \"https://stripe.com\",\n  \"https://apple.com\",\n  \"https://linear.app\",\n]);\n```\n\n### 4) Competitive benchmark\n\n```ts\nconst dl = init({ outputDir: \".flydesign\" });\nconst benchmark = await dl.benchmark([\n  \"https://stripe.com\",\n  \"https://linear.app\",\n  \"https://vercel.com\",\n  \"https://supabase.com\",\n]);\n\nif (benchmark.ok) {\n  console.log(benchmark.data.baseline);\n  console.log(benchmark.data.whitespace);\n  console.log(benchmark.data.topUniqueSignals);\n}\n```\n\n### 5) Brand audit\n\n```ts\nconst audit = await dl.analyzeBrandIdentity(\"https://stripe.com\");\n\nif (audit.ok) {\n  console.log(audit.data.summary);\n  console.log(audit.data.strengths);\n  console.log(audit.data.risks);\n}\n```\n\n### 6) AI suggestions with optional OpenAI adapter\n\nThe core package keeps AI optional. Configure it only when needed:\n\n```ts\nconst dl = init({\n  ai: {\n    enabled: true,\n    provider: \"openai\",\n    apiKey: process.env.OPENAI_API_KEY,\n    model: \"gpt-5-mini\",\n  },\n});\n\nconst suggestions = await dl.suggestEnhancements(\"https://stripe.com\", {\n  ai: true,\n});\n```\n\nWithout an AI provider, the SDK still returns deterministic non-AI suggestions.\n\nRuntime AI controls:\n\n- `ai.mode: \"inline\"` calls the configured provider immediately\n- `ai.mode: \"deferred\"` keeps the API deterministic and skips provider execution\n- `ai.mode: \"off\"` disables provider execution and returns deterministic fallbacks\n- `ai.fetch` injects a custom `fetch` implementation\n- `ai.maxRetries` controls adapter retry behavior\n\nConfigure them globally:\n\n```ts\nconst dl = init({\n  ai: {\n    enabled: true,\n    provider: \"openai\",\n    apiKey: process.env.OPENAI_API_KEY,\n    model: \"gpt-5-mini\",\n    mode: \"inline\",\n    fetch: fetch,\n    maxRetries: 3,\n  },\n});\n```\n\nOr override per call:\n\n```ts\nconst insights = await dl.extractAiInsights(\"https://stripe.com\", {\n  ai: {\n    mode: \"deferred\",\n    maxRetries: 1,\n  },\n});\n\nconst enrichedExtract = await dl.extract(\"https://stripe.com\", {\n  aiInsights: {\n    areas: [\"layout\", \"palette\"],\n    ai: {\n      mode: \"inline\",\n      maxRetries: 2,\n    },\n  },\n});\n```\n\n### 7) Asset analysis\n\n```ts\nconst assets = await dl.analyzeAssets(\"https://linear.app\");\n\nif (assets.ok) {\n  console.log(assets.data.findings);\n  console.log(assets.data.optimizations);\n}\n```\n\n### 8) Scheduled monitoring snapshot flow\n\n```ts\nconst previous = await dl.createSnapshot(\"https://stripe.com\");\nconst current = await dl.monitorBrand(\"https://stripe.com\", previous.ok ? previous.data : undefined);\n\nif (current.ok) {\n  console.log(current.data.diff);\n  console.log(current.data.alerts);\n}\n```\n\nThis monitoring model is intended for cron jobs, workers, or route-triggered backend tasks, not a persistent in-process service.\n\nThe benchmark result includes:\n\n- `brands`: per-brand summaries, archetypes, positioning, fingerprints, distinctiveness\n- `similarityMatrix`: pairwise similarity scores\n- `baseline`: category dominant patterns and crowded lanes\n- `whitespace`: underused lanes and differentiation opportunities\n- `topSharedPatterns`: patterns common across the category\n- `topUniqueSignals`: strongest brand-specific signals\n\n### 9) Export a category pack\n\n```ts\nconst dl = init({ outputDir: \".flydesign\" });\nconst pack = await dl.packCategory(\n  [\n    \"https://stripe.com\",\n    \"https://linear.app\",\n    \"https://vercel.com\",\n  ],\n  { outDir: \".flydesign/category-benchmark\" },\n);\n\nconsole.log(pack.dir);\nconsole.log(pack.files);\n```\n\nThis writes:\n\n- `benchmark-overview.json`\n- `similarity-matrix.json`\n- `category-baseline.json`\n- `whitespace-opportunities.json`\n- `brand-positioning-map.json`\n- `competitive-summary.md`\n- `competitive-summary.html`\n- `brand-cards/<brand>.json`\n\n### 6) Token drift check\n\n```ts\nconst dl = init();\nconst drift = await dl.drift(\"https://flyrank.com\", {\n  tokens: \"./tokens.json\",\n  tolerance: 8,\n});\n```\n\n## Build, Lint, Test (Contributors)\n\n```bash\nbun install\nbun run lint\nbun run build\nbun run test\n```\n\n## Open Source\n\n- License: MIT (see `LICENSE`)\n- Contribution guide: `CONTRIBUTING.md`\n- Code of Conduct: `CODE_OF_CONDUCT.md`\n- Security policy: `SECURITY.md`\n- Support guide: `SUPPORT.md`\n\n## Stack Intel\n\n`stack` mode now surfaces broader deterministic detection categories including:\n\n- CMS\n- analytics\n- experimentation\n- hosting/deployment\n- frontend/runtime\n- design system hints\n- commerce tooling\n- observability\n- support/chat tooling\n- evidence snippets from scripts, metas, and class samples\n\n## Notes\n\n- Keep calls on backend/server runtime.\n- If using mode outputs, prefer passing URLs into downstream operations (`grade`, `diff`, `clone`) for best compatibility.\n- Use `outputDir` to isolate artifacts per project/environment.\n- Competitive benchmark flows are package-first and build on the same extraction pipeline as `extract()`, so they inherit `pages`, `responsive`, `interact`, and screenshot options.\n- OpenAI integration is optional by design; standard extraction and analysis workflows do not require it.<mccoremem id=\"03g35nwenue6gk9yt1uxc89vr\" />\n","readmeFilename":"README.md"}