{"_id":"fiftyone.pipeline.did","_rev":"35-8e345c87b6d192463041aa19fb67dd8e","name":"fiftyone.pipeline.did","dist-tags":{"latest":"4.5.53"},"versions":{"4.5.25":{"name":"fiftyone.pipeline.did","version":"4.5.25","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.25","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"5d8cb84ab59c6685fef0b8020527463ed263c344","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.25.tgz","fileCount":8,"integrity":"sha512-spmUH3N76ABnh9CCuDGYfHWfHAFRRniqaddRirqTmGLOd0eNKYmnTUwk28N5WeGK8+0VI4Bj9OhpHNUARMFgLA==","signatures":[{"sig":"MEQCIFNDA45IrHHpA/Ve/he6ipatL2UBEUdK/RBBMnqXFA4XAiBmvh+R9tVHhz6abWm7n2/fKGACIwFzrr+M/MvENU8Xiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35542},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.25.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.25.tgz","_integrity":"sha512-spmUH3N76ABnh9CCuDGYfHWfHAFRRniqaddRirqTmGLOd0eNKYmnTUwk28N5WeGK8+0VI4Bj9OhpHNUARMFgLA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.25_1783521518210_0.9727121024508347","host":"s3://npm-registry-packages-npm-production"}},"4.5.26":{"name":"fiftyone.pipeline.did","version":"4.5.26","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.26","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"b647b2f84b9c0392b10a68c060e7d5a7df4b22e5","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.26.tgz","fileCount":8,"integrity":"sha512-fhSYyX7UiLlYgDv/FpayQo6FyKHLaMN7Td8FSUkogoyh6muSwdUTp2Gk4b2F8YjK1L8Bq9C4CY95yGiGGFJhrA==","signatures":[{"sig":"MEUCIDn5YU7axtrijBPsPUgW8EtlTX28EBRAXqQNH1GHH2MOAiEAwxX03saZajFmaKpX8IWt9YHoHKtye7LgVmFsCaCV1Sg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.26.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.26.tgz","_integrity":"sha512-fhSYyX7UiLlYgDv/FpayQo6FyKHLaMN7Td8FSUkogoyh6muSwdUTp2Gk4b2F8YjK1L8Bq9C4CY95yGiGGFJhrA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.26_1783527382841_0.39606490385437954","host":"s3://npm-registry-packages-npm-production"}},"4.5.27":{"name":"fiftyone.pipeline.did","version":"4.5.27","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.27","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"fd5d955e4f1f24de9e85a67bdaa5f4216c1af6f1","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.27.tgz","fileCount":8,"integrity":"sha512-MCytehDnndKE2pYuK7vDDIGjYhkZHdh52APZxkr9rS2+xmtLBfsfMa26dTIUgFA4zUShpEnVU9yA0Gs/P+Nd3g==","signatures":[{"sig":"MEQCIG3z9RzweVzcd36g8f+LCY/D0is6iXH62m/S0dICBst5AiA7iMLNNu7VdICIs62OFTJ9LYQkTHlto7lR3VcYYoWRmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.27.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.27.tgz","_integrity":"sha512-MCytehDnndKE2pYuK7vDDIGjYhkZHdh52APZxkr9rS2+xmtLBfsfMa26dTIUgFA4zUShpEnVU9yA0Gs/P+Nd3g==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.27_1783930659156_0.6841437982181175","host":"s3://npm-registry-packages-npm-production"}},"4.5.28":{"name":"fiftyone.pipeline.did","version":"4.5.28","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.28","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"2b1ec2fe21c09765a8cb2ee4f545c61ce93709cd","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.28.tgz","fileCount":8,"integrity":"sha512-K/Q0ixflx2pHpXMuAqfwEovfpISQ22jMpsiuNdSIWXvRz0x2g1tj4J8bDCQKi85C09wxCMxtWqQGvwVAhwJsZg==","signatures":[{"sig":"MEUCIQDGFwxEZjTjZzxDY7xYda6ne5TogViTnCOJZTJrcFHBqgIgJaBkKVdEFhIMaCFTgM7OURMV2qhvmLK3cauXJlL+1GA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.28.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.28.tgz","_integrity":"sha512-K/Q0ixflx2pHpXMuAqfwEovfpISQ22jMpsiuNdSIWXvRz0x2g1tj4J8bDCQKi85C09wxCMxtWqQGvwVAhwJsZg==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.28_1784085963684_0.6270023339682658","host":"s3://npm-registry-packages-npm-production"}},"4.5.29":{"name":"fiftyone.pipeline.did","version":"4.5.29","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.29","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"03bce4fadd2acf727686b6a68867fb8c02a1ea77","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.29.tgz","fileCount":8,"integrity":"sha512-ETp5t5uXZLKPi8L/pDdLfns34v9wHmpCkpDy1jR2OegTc9+9jnoqhN1yxkSWxwXkrZeI9rVZnjYyvDV2BReqsA==","signatures":[{"sig":"MEUCIQCRp5D34B+7XVRsP999l13OCS/drvWfjMKKKUiX5eO2UQIgIOnU5cIpT7NcBpHei+ZUIVjvHR7bfoXrZ3bekK0lmeA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.29.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.29.tgz","_integrity":"sha512-ETp5t5uXZLKPi8L/pDdLfns34v9wHmpCkpDy1jR2OegTc9+9jnoqhN1yxkSWxwXkrZeI9rVZnjYyvDV2BReqsA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.29_1784258672859_0.4691145964592538","host":"s3://npm-registry-packages-npm-production"}},"4.5.30":{"name":"fiftyone.pipeline.did","version":"4.5.30","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.30","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"0e9ca58446084f42616bf268db7ab4c9a19e4586","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.30.tgz","fileCount":8,"integrity":"sha512-sC9lT1CiLFs6iLwE9heGhcei/RIBwQL8Lm+Kj+hn1cuqNsj8b6X1SWkYaVuFp93aObufO9IbIHoOMBbzq5x74g==","signatures":[{"sig":"MEUCIQCtIkSdNqmZZZSNRIB+41GyHcdQAVqwe/v3B6Yp57F5vgIgPF6xqkitM8ILsdTIPMhzbvvURkE0/w9mL8Gbq4CBbHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.30.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.30.tgz","_integrity":"sha512-sC9lT1CiLFs6iLwE9heGhcei/RIBwQL8Lm+Kj+hn1cuqNsj8b6X1SWkYaVuFp93aObufO9IbIHoOMBbzq5x74g==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.30_1785746175315_0.826687854713972","host":"s3://npm-registry-packages-npm-production"}},"4.5.31":{"name":"fiftyone.pipeline.did","version":"4.5.31","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.31","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"9ddbb4341abe6806269a15235e868d7feacb2618","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.31.tgz","fileCount":8,"integrity":"sha512-7trBgt0XW2tsNIk5YuNdFgx9ChWBf3uWWTmmjH7NsY4jWE+4YkYuJjgJ4k7OSYCVR56r7wdacS3za/sgAPR4QQ==","signatures":[{"sig":"MEQCICFx/7d/t/lvirhjOBg378k4wTk1VHk7Cp4m89BvhT7SAiAB0Ix3/+J01VZotiDYrspnJfNqZSy8S1oj29uN4q2TlQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.31.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.31.tgz","_integrity":"sha512-7trBgt0XW2tsNIk5YuNdFgx9ChWBf3uWWTmmjH7NsY4jWE+4YkYuJjgJ4k7OSYCVR56r7wdacS3za/sgAPR4QQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.31_1785813970320_0.7321195559971585","host":"s3://npm-registry-packages-npm-production"}},"4.5.32":{"name":"fiftyone.pipeline.did","version":"4.5.32","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.32","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"d2407133cde9834ef00574b85e678cc85587e41e","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.32.tgz","fileCount":8,"integrity":"sha512-gTeFF340+ddhXTsNMCihABl1/wIT1pGPTqVcesAA9zzq7uccHtYIF0k7ecflcJBu8nCgQTgo5+1YXSqukiCqCA==","signatures":[{"sig":"MEYCIQCUAuwS4PPnJvYMFUVgENsECRBee2MD0jdkvXqa4yLmwwIhAKE9JNeZdw37i/gxK/jxajCNXW0QjaxWoMqYI/L8yLQn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.32.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.32.tgz","_integrity":"sha512-gTeFF340+ddhXTsNMCihABl1/wIT1pGPTqVcesAA9zzq7uccHtYIF0k7ecflcJBu8nCgQTgo5+1YXSqukiCqCA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.32_1785900567976_0.5932079039983058","host":"s3://npm-registry-packages-npm-production"}},"4.5.33":{"name":"fiftyone.pipeline.did","version":"4.5.33","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.33","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"2b96a511fe0d9ec1b6a8abc5220f49f7353307ae","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.33.tgz","fileCount":8,"integrity":"sha512-zsZNMWx0Jjz4v+tZdWJ3nL8DHyk3wfdtqXqr+ffCjhhyupodYzykNbtvAgMU8OpXc48ueSVnRs4Hl33vtEdsfg==","signatures":[{"sig":"MEUCIA10T1ve8JPkLtbCKDGJjLJw437q+n2kpyNdNt9/mHZXAiEA2ICF7IShdRScwT4BQQMIuT6sJqm4MUcOnicbb99ayLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.33.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.33.tgz","_integrity":"sha512-zsZNMWx0Jjz4v+tZdWJ3nL8DHyk3wfdtqXqr+ffCjhhyupodYzykNbtvAgMU8OpXc48ueSVnRs4Hl33vtEdsfg==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.33_1785986811452_0.4361119611693869","host":"s3://npm-registry-packages-npm-production"}},"4.5.34":{"name":"fiftyone.pipeline.did","version":"4.5.34","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.34","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"96a1033a76a2039081fe744393dcb72eb5a291b1","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.34.tgz","fileCount":8,"integrity":"sha512-8A8tm8LM2krrWRrqgZRPfe5mvlAqHFi+NgyiJtYVKBR8KGhF0ch3mhS62BGwTqdWVL7GLJKDarQTBrf2VAeMDg==","signatures":[{"sig":"MEQCIBcf+STzsdslOUFe3kUrOX4fJnO+vviothf9gfmkkfPJAiBTFc6+hDEhI1bBkn0bb7Al13BiLegSpCRENDQBhka8uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36250},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.34.tgz","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.34.tgz","_integrity":"sha512-8A8tm8LM2krrWRrqgZRPfe5mvlAqHFi+NgyiJtYVKBR8KGhF0ch3mhS62BGwTqdWVL7GLJKDarQTBrf2VAeMDg==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and value (Hash) plus the identifier type. Compare values, never envelopes.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"owid":"github:51Degrees/owid-js#main"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.34_1786158061883_0.08430818600349155","host":"s3://npm-registry-packages-npm-production"}},"4.5.35":{"name":"fiftyone.pipeline.did","version":"4.5.35","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.35","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"2c792636e551e6599617f4f141b85221d1abfed1","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.35.tgz","fileCount":36,"integrity":"sha512-nR8FxJOnCfHj/ISQJdnOX9oxKerwwQWrP0IUCiuz2/lGp65Fy16A5lQ/R3WCwZmd7ae/tZAdqbR79P4Jafqz2w==","signatures":[{"sig":"MEQCIG9uDTM4tlqjAls34+08d70jvBqEcU4nGolPLSqx87eSAiBdTps+3ORxRWwOnJvYqm/nnCtlSoflLXmfCR+cytnA1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464561},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.35.tgz","types":"types/index.d.ts","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.35.tgz","_integrity":"sha512-nR8FxJOnCfHj/ISQJdnOX9oxKerwwQWrP0IUCiuz2/lGp65Fy16A5lQ/R3WCwZmd7ae/tZAdqbR79P4Jafqz2w==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and match key plus the identifier type. Compare match keys, never envelopes.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#8363541e"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.35_1788317771338_0.7299577521373795","host":"s3://npm-registry-packages-npm-production"}},"4.5.36":{"name":"fiftyone.pipeline.did","version":"4.5.36","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.36","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"f04c26193f287ba7622821d88e554f59ee812b69","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.36.tgz","fileCount":36,"integrity":"sha512-klZ/0fQdC05H8kTd3qVWtclfIht9IlmIClLxP8zxj2dJaSstA/vC74mJaS9v9HrtSc5tTjDDeW8BhFY3bGsCFA==","signatures":[{"sig":"MEUCID0+zzxilWthwaaIPFDAJ2ca+hoL2rm0E70wpTEic7oXAiEAwg8Z+KaLaQ6nZqYUtW2qOgcvSeQzGTlfasWcUf8Nfs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466545},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.36.tgz","types":"types/index.d.ts","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.36.tgz","_integrity":"sha512-klZ/0fQdC05H8kTd3qVWtclfIht9IlmIClLxP8zxj2dJaSstA/vC74mJaS9v9HrtSc5tTjDDeW8BhFY3bGsCFA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and match key plus the identifier type. Compare match keys, never envelopes.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#8363541e"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.36_1788355326773_0.026372783093715713","host":"s3://npm-registry-packages-npm-production"}},"4.5.37":{"name":"fiftyone.pipeline.did","version":"4.5.37","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.37","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"2d3977f1f46192fd58b0f56b65d552a568a78064","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.37.tgz","fileCount":36,"integrity":"sha512-uk+Rb4oSSJIRwKsORyakj6vTSdM3ZlgsNPnyTNAVlqHcRDA2NqSJDz5WrEdBiA4Noleg7BO78wVx4bOhCbAFuQ==","signatures":[{"sig":"MEQCIHXhdiOioP3nZTYPesHAqRh112Xm0JzL8aO4GLbeT77CAiASuMao5mlWbU/EGkWFsRX7Zop87bkxDd1sEU5mHrqHmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":467529},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.37.tgz","types":"types/index.d.ts","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.37.tgz","_integrity":"sha512-uk+Rb4oSSJIRwKsORyakj6vTSdM3ZlgsNPnyTNAVlqHcRDA2NqSJDz5WrEdBiA4Noleg7BO78wVx4bOhCbAFuQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and match key plus the identifier type. Compare match keys, never envelopes.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#8363541e"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.37_1788447892163_0.7851248498413252","host":"s3://npm-registry-packages-npm-production"}},"4.5.38":{"name":"fiftyone.pipeline.did","version":"4.5.38","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.38","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"7d3720fe747093e0c1d72a121d00a83710731d6a","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.38.tgz","fileCount":39,"integrity":"sha512-Sx/wKlfJRXO5VDRKckQCicVOVZZpOeVh31aql97Sj8os3lV+fZGCSpefm9noypLXZaUk692PXp0bQx9N4xnFNw==","signatures":[{"sig":"MEQCIB1M0H+fKCBklb3VTTkVNdQ4XssPZutWqAtJKHNnZWznAiBNjEuC/Qv4UrwgbwLLy2WvuXlaP9IICEnrLYKzCFwpWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDXHC1ThSchy2svcePPNpNWxY0jsGjrGQW2Ge7y3dLPXAiBbszr7ugnlvOdXN0fxJoATc/Ev9ZU1S12d80DGpE2tQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":492467},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.38.tgz","types":"types/index.d.ts","scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.38.tgz","_integrity":"sha512-Sx/wKlfJRXO5VDRKckQCicVOVZZpOeVh31aql97Sj8os3lV+fZGCSpefm9noypLXZaUk692PXp0bQx9N4xnFNw==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the Flags, License Id and match key plus the identifier type. Compare match keys, never envelopes.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#9aeb0d24"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.38_1788662659551_0.4738807430144645","host":"s3://npm-registry-packages-npm-production"}},"4.5.39":{"name":"fiftyone.pipeline.did","version":"4.5.39","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.39","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"e3bfa40521539aa1b8b4ed255cd6a5a05bd22f1e","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.39.tgz","fileCount":43,"integrity":"sha512-Qs4eHRZGomyF+0YgWMUnrUUMC8upTykEQPPkB3nFPh9OZGV6Ac6CbQEJMo61uzkp9855kEQ3WMF8h3la4Q1lbw==","signatures":[{"sig":"MEUCIQCHOqn8GKFYBvJW6oG+lBaquRaxfZ2fbpJYOHpFp54BcAIgLlsvgU22tx6PzWR6EJaLFsZcVHInp2cLnuOpkwzvv0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID9TWODwI6Lrg2oQJ8a4rqzr07PVwgwTbAfWRtJHaw10AiBmC9vRXcOouSHRIkbK+05uGQDjB8w0azNmAHO+0p7W/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507054},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.39.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.39.tgz","_integrity":"sha512-Qs4eHRZGomyF+0YgWMUnrUUMC8upTykEQPPkB3nFPh9OZGV6Ac6CbQEJMo61uzkp9855kEQ3WMF8h3la4Q1lbw==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id and match key plus the identifier type. Compare match keys, never envelopes.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.39_1788749003379_0.9932611799671005","host":"s3://npm-registry-packages-npm-production"}},"4.5.40":{"name":"fiftyone.pipeline.did","version":"4.5.40","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.40","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"304342605bc1a61075ef6b6f29f5f15434999b6e","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.40.tgz","fileCount":45,"integrity":"sha512-hse+OGypCFV2UM0RUmgxvog76UdZO2HKmeSuw7iedg4keTfPvFS0KsbY0ZL/Vpb11IKShYbIbbW8E2vgSMZgOQ==","signatures":[{"sig":"MEUCIQD5LnyJe1WPWHcboU4Sm4WyKAokKhp4x7NfmfdbaQe4qQIgQYFl4Tg32u91TVvXAVt4NJ1neD2WDZpzOsb9I26xDyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHf2fCRGgZaipdn3d5fSham05A10DIT9UU1BmvP1mtcCAiA7qLivAxo6EoCYohckQsuoAtmHKgLISpmX4OCUcjhj0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":542538},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.40.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.40.tgz","_integrity":"sha512-hse+OGypCFV2UM0RUmgxvog76UdZO2HKmeSuw7iedg4keTfPvFS0KsbY0ZL/Vpb11IKShYbIbbW8E2vgSMZgOQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.40_1789134176264_0.888394886979663","host":"s3://npm-registry-packages-npm-production"}},"4.5.41":{"name":"fiftyone.pipeline.did","version":"4.5.41","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.41","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"a885544dd3b76f19979360df23c687a45006d742","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.41.tgz","fileCount":45,"integrity":"sha512-/kiH4d/U01L0K1It9b3NzwAy8LN5IEzo7oBBylzocesHKTsvz468GwlH579RuYpkQ2zbMBCY6iofbO0w+8tvmA==","signatures":[{"sig":"MEQCIEhMBPkeVMrN+aY186YyyRdi9/tcKXnw+Zgrd4NwPhPmAiAB4kkvojn9U//pfog94MD5vhC0CiqUKlKS7Ooav0hB2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCgP5Qx/ZLdoIgxKyBUoa4G3tJApJrFHvMjL9qS1uQoLAIgQPPRgWM4iyoLt/2f5UffdlYEz9K4cTe1LVuqpR6UnHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.41.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.41.tgz","_integrity":"sha512-/kiH4d/U01L0K1It9b3NzwAy8LN5IEzo7oBBylzocesHKTsvz468GwlH579RuYpkQ2zbMBCY6iofbO0w+8tvmA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.41_1789354044044_0.5826423351237411","host":"s3://npm-registry-packages-npm-production"}},"4.5.42":{"name":"fiftyone.pipeline.did","version":"4.5.42","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.42","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"42b7a1fca7428b45f0985428269d3c67b74b81a7","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.42.tgz","fileCount":45,"integrity":"sha512-JvSGNfbj56lft6sQvdYF58GgZrGkmI+EYsGFCcgJmQXq9Dwww2mJxpB/Qxcvxq50no7eFqao2Un7S70xixMpxA==","signatures":[{"sig":"MEUCIELD5x+1VtphDrooGPS5aUsdyYVgVgx5JfIhAvpu2RBqAiEAv1x6OF3y+s3IUuqkSdgmOJzU+jhL6J67xwq3N20/OB4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCrHv2CQOufuKxq0mKbPaJkEfYXGkJJEoGE7r0vH2XfEAIhAMRpSNenZCbLT0sQ+NJKaxEAIu/tDFAEG3N9CQyDlEit","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.42.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.42.tgz","_integrity":"sha512-JvSGNfbj56lft6sQvdYF58GgZrGkmI+EYsGFCcgJmQXq9Dwww2mJxpB/Qxcvxq50no7eFqao2Un7S70xixMpxA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.42_1789579084660_0.5842780744223177","host":"s3://npm-registry-packages-npm-production"}},"4.5.43":{"name":"fiftyone.pipeline.did","version":"4.5.43","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.43","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"a0f13ae373468c5daac5988684be1220449ccf80","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.43.tgz","fileCount":45,"integrity":"sha512-eMF9ea8O4Stl2eM4ntk0ahSL5iliy9ZpMo9AP10xYhR/+z8cVqK+7gyXkWZS9MWBIr9xwbnS2wYsOasw7s/usA==","signatures":[{"sig":"MEUCIQDp3sxLYw7aDxDXzwJUT56WbfDwL5TyGgbxR1+tDo3BMQIgYadSHD6fpd3CQinyVw7tSEUoeimaVoR3svKK1t5j7C4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICSo3iKbOTIfkGureG1XUp6dfZaGC7bOQ5e0BcF8h29kAiAObwXSvOT64goxoGkEnCloBFSik6cGE32wYiMHpCxtKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.43.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.43.tgz","_integrity":"sha512-eMF9ea8O4Stl2eM4ntk0ahSL5iliy9ZpMo9AP10xYhR/+z8cVqK+7gyXkWZS9MWBIr9xwbnS2wYsOasw7s/usA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.43_1789580003036_0.9943340126954527","host":"s3://npm-registry-packages-npm-production"}},"4.5.44":{"name":"fiftyone.pipeline.did","version":"4.5.44","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.44","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"ca186cece7c6ac7ad01cb86419169c79a60539ea","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.44.tgz","fileCount":45,"integrity":"sha512-EjJSARDJ37z/wwwmI2EiPgZeiurWjvWfBXIsreSoldZT6Q7rbV/yYnLF+RLgIN3+w3s080tIPy8s/7RmV/pumw==","signatures":[{"sig":"MEUCIQDTnCeprRpwpC1SKK+p1AgLiw7x6N2qRL8iAVWex247fwIgDFaXgwHUOLUJj6JwWQft3bXMdVvsJspuBGa0D73MnNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGJHZFL7e3Lj5le7TOGefoPQyaymg4paQeFCRGTd32R/AiEAgqQ0EXSTC3bq8IBzWrj/W9QsCYYDmEONRY2OCNf5f34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.44.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.44.tgz","_integrity":"sha512-EjJSARDJ37z/wwwmI2EiPgZeiurWjvWfBXIsreSoldZT6Q7rbV/yYnLF+RLgIN3+w3s080tIPy8s/7RmV/pumw==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.44_1789580699614_0.9276673584747193","host":"s3://npm-registry-packages-npm-production"}},"4.5.45":{"name":"fiftyone.pipeline.did","version":"4.5.45","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.45","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"051d5dfb2035e53f5b6bc4962ee43bdf676e9919","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.45.tgz","fileCount":45,"integrity":"sha512-0qI0jpb4Cj9iWtx+bkhN8/j5xVRUDc5/EUUqTl6jwK2WuYbWqxFwcMPM7OZaJ0i8WGg8Skd2MMr2eru98piUpw==","signatures":[{"sig":"MEQCICGUW+O3PuOPT61ZUEC7is251j1+7sIcD9H7x55qNQTJAiB1AF/r8DQw+EVvEknGE6UP4WV9kyAx4QGaWv1V8giEVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCGuC9/ZYiy+n8/D96NHiNk+jpV24DGrO14Ez1bol0neAIhANkfRuDSqoSTFfYjP/HJBIfvAy0BfqwnQzpQIggsnetQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.45.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.45.tgz","_integrity":"sha512-0qI0jpb4Cj9iWtx+bkhN8/j5xVRUDc5/EUUqTl6jwK2WuYbWqxFwcMPM7OZaJ0i8WGg8Skd2MMr2eru98piUpw==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.45_1789613798862_0.8792575206054563","host":"s3://npm-registry-packages-npm-production"}},"4.5.46":{"name":"fiftyone.pipeline.did","version":"4.5.46","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.46","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"ac5f079c9d6fd58f84d5274e17fd5ca7dac82749","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.46.tgz","fileCount":45,"integrity":"sha512-ffYjJSjTfPfyvAgBGQ26ElGiWFk8IDzoTcz3zJCQJRqU3AOjc42YEdKRdaWr3JgUspcRiOUyG6Q8aMkHLd2+dQ==","signatures":[{"sig":"MEUCICTQytPjIeYreUU3U21UasFwFUWnFE1CYmMgbl0aNLyLAiEA06cjJ/m60r7iEr32yEg7nReNSrc4aYDORkvnTzbOoRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD9/B1MhFymaGG0okb7b6xMlUR/frKbhoISz66xMxq+GQIgXWbfhG31gC48z2vgJTdUEW4n2ivIb4Rs8O0fdtBrNks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.46.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.46.tgz","_integrity":"sha512-ffYjJSjTfPfyvAgBGQ26ElGiWFk8IDzoTcz3zJCQJRqU3AOjc42YEdKRdaWr3JgUspcRiOUyG6Q8aMkHLd2+dQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.46_1789664214742_0.04713740783486231","host":"s3://npm-registry-packages-npm-production"}},"4.5.47":{"name":"fiftyone.pipeline.did","version":"4.5.47","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.47","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"90651fa9f7a4f0d2ba5c9373241a623fb9d5bab4","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.47.tgz","fileCount":45,"integrity":"sha512-j7J/v7gWtAkt1eJW6yygClVP57rHjNSayOU0yXPASL0mvhIA+nO/wUcfngTDkDl/RhBybA4rdWDVjdiV2n+cQg==","signatures":[{"sig":"MEQCICSao0YW/AAWopEcITfz9hDu4CGBLL073IeSMTORsuj3AiAIK1OdRsj4oMBpOCYmUu87Bmhcifoczugoci6IGo8mtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD7mYEhiJC9eT1tLFDbRqLcaAZo3VZfqYhKRwVxvFFF6QIhAJhvMpWZVsuj7SlT4bjNGkoquHFxOXaRic4MADoclGoE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548285},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.47.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.47.tgz","_integrity":"sha512-j7J/v7gWtAkt1eJW6yygClVP57rHjNSayOU0yXPASL0mvhIA+nO/wUcfngTDkDl/RhBybA4rdWDVjdiV2n+cQg==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.47_1789665463739_0.5228264330927483","host":"s3://npm-registry-packages-npm-production"}},"4.5.48":{"name":"fiftyone.pipeline.did","version":"4.5.48","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.48","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"b987a6dbdb63cfb4ae05467bbf08f3dea8f69433","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.48.tgz","fileCount":47,"integrity":"sha512-tc1lFcZpJSHEROyNVWAgofKUhsp0Vg0RxO20kan+zv73eGPo6FVmfCgHb/QF0chlhWsYqAyR4TSDRQUbaOvZEQ==","signatures":[{"sig":"MEYCIQDtrgnj49YaYXw0qQbYUb1KQVXm2vmrJ05P/4NkQqTp6wIhAMDn7QwrRojhprYLlTl+R/Xn6rWRGZXK30eRVLsEjvGq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDedzEjK+ShzCcXy6CDWPPJAkl5bCoMg/zwiAm3fKykmgIgMImwYBc0SeBw1Q53hKM6MdEwSyzAlcE8xTxq2hgsWGc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565918},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.48.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.48.tgz","_integrity":"sha512-tc1lFcZpJSHEROyNVWAgofKUhsp0Vg0RxO20kan+zv73eGPo6FVmfCgHb/QF0chlhWsYqAyR4TSDRQUbaOvZEQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.48_1789701024241_0.12440266901901875","host":"s3://npm-registry-packages-npm-production"}},"4.6.0":{"name":"fiftyone.pipeline.did","version":"4.6.0","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.6.0","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"724ef03f5d66efc2cfa98337c43b5fcc50a3eb33","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.6.0.tgz","fileCount":47,"integrity":"sha512-hPsSaWDkUk1U6gQ4Klrkyt5885/DN6fqU2fTbr0mbZkqk8bFtNaFb2FoHK3PcX4GCTkuhZ3/dZL0wUYCe0Qn7A==","signatures":[{"sig":"MEYCIQDbSjhpsYQdVGWH4wU3VOF8rc10l3nob6JdeRDJrHUHBQIhAM32Xco1sAtKBQgxps4rAIFZ5acNr/fnb4xYK+KdvunU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCmQ18bJATlZnSeQRygI+y5YLcS6wm/3+3C4VQOuPjtBgIgNCv4u8DI5ZoinSW7LEGdTu5cRkfCq2reZOn0cjyXkGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":577726},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.6.0.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.6.0.tgz","_integrity":"sha512-hPsSaWDkUk1U6gQ4Klrkyt5885/DN6fqU2fTbr0mbZkqk8bFtNaFb2FoHK3PcX4GCTkuhZ3/dZL0wUYCe0Qn7A==","deprecated":"Published eagerly, not yet a supported release. Use 4.5.48.","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.6.0_1789785841489_0.3999229628442931","host":"s3://npm-registry-packages-npm-production"}},"4.6.1":{"name":"fiftyone.pipeline.did","version":"4.6.1","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.6.1","maintainers":[{"name":"51d","email":"engineering@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"10ef75fe9a62eaac0f74021c093c9e621e2fb4cf","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.6.1.tgz","fileCount":47,"integrity":"sha512-kYu9HMMjZ/P1lR/kXuzEt0XXmmChDasaNUqA78lfXJ1cEIHgkhB19HflbcPtW7Xob7vddhk4Df2s2Ej/Y1vV0w==","signatures":[{"sig":"MEUCIGmDiZpBmp2yurnjcXDbNMe4tbOV0RL2aL0WH8z/tlsVAiEAkdjTUE/K17C88mU8ucEy6ElGdwvClqqdigtbn/4OL+4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICVBsqSqwKISLplH58rSzVCHsWnIYUEWlvBqAAm004xGAiEA/q2yK0SAlS0Ywqd+Rrvv5MomvRGhgmgxZo6V7pwVJfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":577726},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.6.1.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"51d","email":"engineering@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.6.1.tgz","_integrity":"sha512-kYu9HMMjZ/P1lR/kXuzEt0XXmmChDasaNUqA78lfXJ1cEIHgkhB19HflbcPtW7Xob7vddhk4Df2s2Ej/Y1vV0w==","deprecated":"Published eagerly, not yet a supported release. Use 4.5.48.","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.6.1_1789805540897_0.2681242603883356","host":"s3://npm-registry-packages-npm-production"}},"4.5.50":{"name":"fiftyone.pipeline.did","version":"4.5.50","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.50","maintainers":[{"name":"eugenedorfman","email":"eugene.dorfman@postindustria.com"},{"name":"roman.s","email":"roman.sertsov@postindustria.com"},{"name":"jwrosewell","email":"james@51degrees.com"},{"name":"jamesr51d","email":"jamesr@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"8bfd0fca2cdbd46bd73b3e7fb549c0de524794ea","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.50.tgz","fileCount":50,"integrity":"sha512-fmaeRQRXg6DFFKxarf/HN+jCJkk/5PA5imRpk/cUiKKDoeFGYDnFrOdVevuqe0iwuzj1+tLaz8RsGVGJ6z+0mA==","signatures":[{"sig":"MEQCIALpjoYVjeGrbs03AQRER3bcCDcEaOtQi9P1bbnOcst0AiA2ktLWhTaOI8MS/HEfWrZg0kDyMs7uyZCiMA7caJaitQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDTKgv8lOfLonoIoCBa/AuZQ0Xy/xCcnO8H3oRAGqLlpAIhANF6QGlLI7jGq7SCwqaM0UemDz+ucd4bEnZfLY1fxbYF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":652508},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.50.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"jwrosewell","email":"james@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.50.tgz","_integrity":"sha512-fmaeRQRXg6DFFKxarf/HN+jCJkk/5PA5imRpk/cUiKKDoeFGYDnFrOdVevuqe0iwuzj1+tLaz8RsGVGJ6z+0mA==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.50_1790524571235_0.456188019733915","host":"s3://npm-registry-packages-npm-production"}},"4.5.51":{"name":"fiftyone.pipeline.did","version":"4.5.51","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.51","maintainers":[{"name":"eugenedorfman","email":"eugene.dorfman@postindustria.com"},{"name":"roman.s","email":"roman.sertsov@postindustria.com"},{"name":"jwrosewell","email":"james@51degrees.com"},{"name":"jamesr51d","email":"jamesr@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"7905b6e78aaa433724d375ed1d403943535fa54d","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.51.tgz","fileCount":50,"integrity":"sha512-0djb3fH1Y4KiHSqXgscjK9813J+RMSJhn4quH8J34OOy5MoOhE4PlGyKOmtyVi81WQprIXIWe9/NiCcKGaoRaQ==","signatures":[{"sig":"MEUCIQDzj0jxL9alRVloBMzH10Vaw43RYcbf6j7VtAKfNqpzAwIgSrRhnoozcdZWBKRnnW7LeNhruJfY6qwCh173WrVI4Wc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC1U4jBaoJ38GhQFdqbpYnvg66s4i4ktokLTIUQm5pNBAIgBbHaZHyGGiRyV1Xk+/yrdnVKJT/Tr+m8rj75UHj+PH4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":670404},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.51.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"jwrosewell","email":"james@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.51.tgz","_integrity":"sha512-0djb3fH1Y4KiHSqXgscjK9813J+RMSJhn4quH8J34OOy5MoOhE4PlGyKOmtyVi81WQprIXIWe9/NiCcKGaoRaQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.51_1790675134283_0.9209048258677246","host":"s3://npm-registry-packages-npm-production"}},"4.5.52":{"name":"fiftyone.pipeline.did","version":"4.5.52","keywords":["51degrees","51did","fodid","owid","pipeline"],"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","_id":"fiftyone.pipeline.did@4.5.52","maintainers":[{"name":"eugenedorfman","email":"eugene.dorfman@postindustria.com"},{"name":"roman.s","email":"roman.sertsov@postindustria.com"},{"name":"jwrosewell","email":"james@51degrees.com"},{"name":"jamesr51d","email":"jamesr@51degrees.com"}],"homepage":"https://github.com/51Degrees/pipeline-node#readme","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"e97781428e479514e257384144262fded725c87d","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.52.tgz","fileCount":50,"integrity":"sha512-Hvz5xImoGri193iMmCiQgt14vFleeolHGLvhWbH98ontkag1NW39LFB+BEEMNUAenWz61rtPpPmOIfQrC7OypQ==","signatures":[{"sig":"MEQCIFMDFvwAMPpWz6Jf7SmbWyrzwE24abVp8dxd3vaDmFJsAiBggPGp2TYSVT+pS0NPWgPjchd9weJy0t/LyTRa7Y2ViA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBMY3ofPwINjVhbjQRCkqqrV3U55FK9qkfTmjtObDveeAiEA0dO5w9iD+0zyui2yLyoQrqWm3AbGU0EzNBgJVzXu5Eo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":671095},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.52.tgz","types":"types/index.d.ts","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"scripts":{"test":"jest"},"_npmUser":{"name":"jwrosewell","email":"james@51degrees.com"},"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.52.tgz","_integrity":"sha512-Hvz5xImoGri193iMmCiQgt14vFleeolHGLvhWbH98ontkag1NW39LFB+BEEMNUAenWz61rtPpPmOIfQrC7OypQ==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.8","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"_nodeVersion":"22.23.2","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"tmp":"tmp/fiftyone.pipeline.did_4.5.52_1790736887330_0.8786207276952427","host":"s3://npm-registry-packages-npm-production"}},"4.5.53":{"_id":"fiftyone.pipeline.did@4.5.53","bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"dist":{"shasum":"b58059e8a2c66dc640bbe449bbde13d498fdbbbb","tarball":"https://registry.npmjs.org/fiftyone.pipeline.did/-/fiftyone.pipeline.did-4.5.53.tgz","fileCount":50,"integrity":"sha512-tXRWF9OU5EecOxM/nNqZ+99nr9nFOStRvUnTHfIO+VW6x0KDIphEAzQ7yE3INyY9FTXRUgjr5cTSL5zsfeZdBw==","signatures":[{"sig":"MEUCIQCGrI+TiI+koseljb3tkOaJpZ+MF7xR4GI5ItMfhkPzegIgDfgnijKW83tSUN+8EnQqWLJrfaUhwxzj8IhhgRxJmX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFrMe98YowWF7j2IDENsajj53SaJnEvdQetQtYQetUoyAiBLZejgF6d5yPFa6xW4xPTbc017TyXLfKby/ds7eK2MzA=="}],"unpackedSize":672276},"jest":{"setupFiles":["./tests/setup.js"]},"main":"index.js","name":"fiftyone.pipeline.did","_from":"file:/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.53.tgz","types":"types/index.d.ts","author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"exports":{".":{"types":"./types/index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"license":"EUPL-1.2","scripts":{"test":"jest"},"version":"4.5.53","_npmUser":{"name":"jwrosewell","email":"james@51degrees.com"},"homepage":"https://github.com/51Degrees/pipeline-node#readme","keywords":["51degrees","51did","fodid","owid","pipeline"],"_resolved":"/home/runner/work/pipeline-node/pipeline-node/package/fiftyone.pipeline.did-4.5.53.tgz","_integrity":"sha512-tXRWF9OU5EecOxM/nNqZ+99nr9nFOStRvUnTHfIO+VW6x0KDIphEAzQ7yE3INyY9FTXRUgjr5cTSL5zsfeZdBw==","repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"_npmVersion":"10.9.9","description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","directories":{},"maintainers":[{"name":"eugenedorfman","email":"eugene.dorfman@postindustria.com"},{"name":"roman.s","email":"roman.sertsov@postindustria.com"},{"name":"jwrosewell","email":"james@51degrees.com"},{"name":"jamesr51d","email":"jamesr@51degrees.com"}],"_nodeVersion":"22.23.3","dependencies":{"owid":"github:51Degrees/owid-js#148763cb"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","typescript":"^5.9.3"},"bundleDependencies":["owid"],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fiftyone.pipeline.did_4.5.53_1790823742428_0.5753823621065797"}}},"time":{"created":"2026-07-08T14:38:38.015Z","modified":"2026-10-01T03:02:22.767Z","4.5.25":"2026-07-08T14:38:38.348Z","4.5.26":"2026-07-08T16:16:23.004Z","4.5.27":"2026-07-13T08:17:39.329Z","4.5.28":"2026-07-15T03:26:03.822Z","4.5.29":"2026-07-17T03:24:32.977Z","4.5.30":"2026-08-03T08:36:15.458Z","4.5.31":"2026-08-04T03:26:10.484Z","4.5.32":"2026-08-05T03:29:28.148Z","4.5.33":"2026-08-06T03:26:51.599Z","4.5.34":"2026-08-08T03:01:02.043Z","4.5.35":"2026-09-02T02:56:11.479Z","4.5.36":"2026-09-02T13:22:06.939Z","4.5.37":"2026-09-03T15:04:52.320Z","4.5.38":"2026-09-06T02:44:19.664Z","4.5.39":"2026-09-07T02:43:23.494Z","4.5.40":"2026-09-11T13:42:56.351Z","4.5.41":"2026-09-14T02:47:24.142Z","4.5.42":"2026-09-16T17:18:04.748Z","4.5.43":"2026-09-16T17:33:23.142Z","4.5.44":"2026-09-16T17:44:59.705Z","4.5.45":"2026-09-17T02:56:39.019Z","4.5.46":"2026-09-17T16:56:54.846Z","4.5.47":"2026-09-17T17:17:43.862Z","4.5.48":"2026-09-18T03:10:24.335Z","4.6.0":"2026-09-19T02:44:01.577Z","4.6.1":"2026-09-19T08:12:21.039Z","4.5.50":"2026-09-27T15:56:11.331Z","4.5.51":"2026-09-29T09:45:34.381Z","4.5.52":"2026-09-30T02:54:47.420Z","4.5.53":"2026-10-01T03:02:22.512Z"},"bugs":{"url":"https://github.com/51Degrees/pipeline-node/issues"},"author":{"name":"51Degrees Engineering","email":"engineering@51degrees.com"},"license":"EUPL-1.2","homepage":"https://github.com/51Degrees/pipeline-node#readme","keywords":["51degrees","51did","fodid","owid","pipeline"],"repository":{"url":"git+https://github.com/51Degrees/pipeline-node.git","type":"git"},"description":"Strongly typed reader for the 51Did (51Degrees Identifier) value returned by the 51Degrees Cloud service. Parses the OWID envelope and exposes the usage, licence id, match key and terms document plus the identifier type. Compare match keys, never envelope","maintainers":[{"name":"eugenedorfman","email":"eugene.dorfman@postindustria.com"},{"name":"roman.s","email":"roman.sertsov@postindustria.com"},{"name":"jwrosewell","email":"james@51degrees.com"},{"name":"jamesr51d","email":"jamesr@51degrees.com"}],"readme":"# fiftyone.pipeline.did\n\nStrongly typed Node.js reader for the 51Did (51Degrees Identifier) returned by\nthe 51Degrees Cloud service, and a client for everything a server does with a\n51Did against the cloud. Mirrors the .NET `FiftyOne.Did` package.\n\n## Terminology\n\n- The **51Did** (51Degrees Identifier) is the identifier as a whole.\n- The **envelope** is the data model that carries it: a signed OWID holding the\n  version, domain, date, payload and signature. It changes byte-for-byte every\n  time the cloud issues one.\n- The **match key** is the stable, comparable part of the payload after the\n  Flags and License Id, a 32-byte SHA-256 for Probabilistic and HashedEmail\n  identifiers, or 16 GUID bytes for Random. Two 51Dids for the same inputs\n  share the same match key even though their envelopes differ.\n\n**Comparing two 51Dids means comparing their match keys, never their\nenvelopes.**\n\n## Payload layout\n\nThe byte layout is specified once for every language in the 51Did\nspecification, and that specification is the authority for it:\n\n- [Identifier layout](https://github.com/51Degrees/specifications/blob/main/did-specification/identifier-layout.md)\n- [Package surface](https://github.com/51Degrees/specifications/blob/main/did-specification/package-surface.md)\n\nYour code never needs the offsets, because every field has a named accessor,\nso the offsets and the lengths are internal to this package. Reading the flags\nbyte by hand is the mistake they are kept internal to prevent, because the\nusage bits are cumulative and a mask for one of them answers the wrong\nquestion. The summary here explains what the accessors report, and the\nspecification governs wherever the two differ.\n\nThe payload carries a one byte Flags field, a four byte little-endian\nLicenseId, the match key and then a one byte Terms. Bits 6 and 7 of the\nflags name the identifier type, which decides how long the match key is,\nand so where the Terms byte sits.\n\n| Bits 7-6 | `IdType`        | Match key length | Least payload accepted |\n|---------:|-----------------|-----------------:|-----------------------:|\n|     `00` | `PROBABILISTIC` |               32 |                     37 |\n|     `01` | `RANDOM`        |               16 |                     21 |\n|     `10` | `HASHED_EMAIL`  |               32 |                     37 |\n|     `11` | `RESERVED`      |        remainder |                      5 |\n\nIdentifiers issued before the type tag existed have bits 6-7 zeroed and decode\nas `PROBABILISTIC`.\n\nOn an identifier carrying a creator context (which binds the identifier to the\nbrowser and connection it was created on) the four bytes at offset 1 hold an\nencrypted value that only 51Degrees can turn back into a licence identifier.\n`licenseId` is then the field's raw value and identifies nothing outside\n51Degrees. A payload longer than the least length carries the creator context\nafter the match key, and the reader accepts it as it accepts the base length. The\nlengths of a context section belong to the cloud, so the reader checks only\nthe lower bound for the identifier type, holds no upper bound of its own, and\nleaves anything longer for the cloud to judge. A reader built before a longer\ncontext section existed therefore still reads the identifier.\n\nThe Terms byte sits between the match key and the creator context. An\nidentifier whose payload ends at the match key carries no terms byte, and\nthe reader answers with a terms index of zero for one.\n\n## The payload version\n\nBits 4 and 5 of the flags byte say which payload layout the identifier\nfollows, and this package reads version 0. A payload naming version 1, 2 or\n3 is refused with `ParseStatus.UNSUPPORTED_PAYLOAD_VERSION`, and the errors\nthe throwing surfaces raise name the version they found.\n\nNo field is read under the layout this package knows once the version says\notherwise. A later version exists precisely because a field moved, so\nreading such a payload here would answer with values that are wrong rather\nthan absent, which is worse than refusing. A version that nothing checks\nprotects nothing.\n\nThe version is not exposed. Either this package read the layout, in which\ncase the accessors are the answer, or it did not, in which case there is no\nidentifier to read fields from.\n\n## The usage a 51Did was created for\n\nEvery 51Did says what it was created for, and `fodId.usage` reports it as one\nof the `Usage` values. The usage decides where the identifier may go, so it is\nread before the identifier is passed anywhere.\n\n| `Usage` | The cloud's `id.usage` | Meaning |\n| --- | --- | --- |\n| `NON_MARKETING` | `non-marketing` | Created for use that is not marketing. Must never be passed to a demand source |\n| `STANDARD` | `standard` | Created for standard marketing, being targeting unrelated to browsing history |\n| `PERSONALIZED` | `personalized` | Created for personalized marketing, being targeting related to browsing history |\n\nThe three usages are cumulative in the flags byte rather than exclusive.\nNon-marketing sets one bit, standard sets two and personalized sets three, so\nevery marketing identifier also carries the non-marketing bit. Code masking\nthe byte for that bit alone would read every marketing identifier as\nnon-marketing, which is the wrong way round for a rule that turns on it.\n`fodId.usage` answers with the highest usage granted, so that mistake cannot\nbe made, and it is the only supported way to read the usage.\n\nThere are exactly these three values. A payload whose usage bits are all\nclear is not given a fourth value, and is refused with\n`ParseStatus.NO_USAGE` instead, because the cloud never writes such a flags\nbyte and the only safe answer to one is not to pass the identifier on, which\nthe refusal already gives.\n\n`fodId.usageIsIndirect` says whether the usage is indirect, being worked out\nby the issuer from a signal other than the caller stating it, or direct,\nbeing stated by the caller. A consent string is the only indirect signal\ntoday, so today it is true only where the usage was derived from an IAB\nconsent string the caller sent. Both are legitimate ways to arrive at a\nusage, and it says nothing about which usage it is. It was called\n`usageFromConsent` before the field was restated as direct against\nindirect, and the old name has been removed.\n\n`Usage.name(usage)` gives the cross language name, for example\n`\"NonMarketing\"`, and `Usage.idUsage(usage)` gives the cloud's own `id.usage`\nvalue, for example `\"non-marketing\"`. Both answer `null` for a value that\nis not a `Usage`.\n\n## The terms a 51Did was created under\n\nA 51Did created for marketing may only be used by a receiver that has\naccepted the terms it was created under, so the terms travel inside the\nidentifier rather than beside it. An identifier passed as a query string\nparameter arrives on its own, and any hop can drop what was sent alongside it\nwithout the identifier looking any different.\n\nThe byte after the match key is an index into a table in the specification\nand is not a version number, so that a later document can live at any address\nrather than only at an address a number could be turned into. An index is\nnever reused or repointed once published, because repointing one would\nrewrite what a past identifier says it agreed to.\n\n| Index | Document | `fodId.terms` |\n| ---: | --- | --- |\n| `0` | Not stated in the identifier | `null` |\n| `1` | Model Terms for Marketing, version 2 | `https://m4ow.uk/mtm/2.txt` |\n| anything else | One this package cannot name | `null` |\n\n`fodId.terms` is the address of the document. The package turns the index\ninto the address, so you never handle the byte. Nothing here fetches the\naddress, because what to do with the document is your decision.\n\n**No address is ever built from an index this package cannot name**, because\nthat would name a document nobody wrote and a receiver would record having\naccepted terms that do not exist. An index of zero and an index added after\nthis package was released therefore give the same answer, which you cannot\ntell apart, and that is deliberate, since both say the identifier does not\ngive the terms and the answer has to come from somewhere else.\n\nNo address does not mean the identifier is unrestricted. It means only that\nthe identifier does not carry the answer, so the answer has to come from the\ndata accompanying it, being the Terms Document Locator in an OpenRTB request\nor whatever the surrounding protocol offers. Carrying the terms does not\nremove the need to carry a Terms Document Locator where a protocol has one,\nand where both are present and they disagree the identifier's own value is\nthe one that describes the identifier, because it is inside the signature and\nthe accompanying data is not.\n\nThe usage says where an identifier may go and the terms say which document it\nwas created under, so both are needed. An identifier created for\nnon-marketing carries `NOT_STATED`, since the Model Terms govern marketing\nuse, and it stays barred from a demand source by its usage.\n\nAn identifier whose payload ends at the match key, and one of the\n`RESERVED` type, both read as `NOT_STATED`. The first carries no byte after\nthe match key and the second exposes every byte after the header as the\nmatch key, so neither leaves a byte for the reader to find, and no terms\nare stated in either.\n\n## Reading a 51Did\n\nA 51Did arrives from outside, from a page, a link or a log line, so a value\nthat is not one is an ordinary outcome rather than an error. `FodId.tryParse`\nand `FodId.tryFromByteArray` never throw. Each returns a frozen result\nreporting the same three facts:\n\n| Field | Type | Meaning |\n| --- | --- | --- |\n| `ok` | boolean | True when the input was a structurally valid 51Did |\n| `value` | `FodId` or `null` | The identifier on success and `null` on failure, never a half read identifier |\n| `status` | string | `FodId.ParseStatus.PARSED` on success, otherwise the specific reason |\n\n```js\nconst { FodId } = require('fiftyone.pipeline.did');\n\nconst result = FodId.tryParse(untrusted);\nif (result.ok) {\n  use(result.value);\n} else {\n  console.log('not a 51Did: ' + result.status);\n}\n```\n\nReading and verifying are two questions with two answers. A successful read\nsays the bytes are a structurally valid 51Did and nothing more. No read\nfetches a key or checks a signature, so a parsed 51Did is not necessarily\ngenuine, and a structurally valid identifier whose signature does not match\nreads successfully and then fails verification. Verify with\n`fodId.verify(publicKeyPem)`, `fodId.checkSignature(publicKeyPem)` or\n`DidClient.verifySignature(fodId)`, described below.\n\n### Read statuses\n\n`FodId.ParseStatus` is a frozen object of stable string values. Compare\nagainst its members rather than against the text of any message. The\nvocabulary is the OWID library's own, carried through unchanged, plus three\nmembers for the 51Did payload. A failure the OWID library reported keeps the\nOWID library's status, so a specific reason is never reduced to a general one.\n\n| Status | Reported by | Meaning |\n| --- | --- | --- |\n| `PARSED` | both | The input is a structurally valid 51Did. Says nothing about the signature |\n| `MISSING_INPUT` | OWID | Nothing was supplied, being `null`, `undefined`, an empty or whitespace-only string, or a buffer of no bytes |\n| `INVALID_INPUT_TYPE` | OWID | The input was not a string (`tryParse`) or not a byte array (`tryFromByteArray`) |\n| `INVALID_BASE64` | OWID | The string is not base64 in either alphabet, so there are no bytes to read |\n| `UNSUPPORTED_VERSION` | OWID | The first byte names an envelope version the OWID library does not know |\n| `ABSENT_NODE` | OWID | The bytes are the OWID absent node marker, which stands for no identifier |\n| `UNEXPECTED_END` | OWID | The data stopped part way through a field |\n| `INVALID_DOMAIN_ENCODING` | OWID | The creator domain is not terminated or is longer than a domain name can be |\n| `BYTE_COUNT_MISMATCH` | OWID | The declared payload byte count disagrees with the bytes present |\n| `IMPLEMENTATION_CAPACITY_EXCEEDED` | OWID | The envelope is consistent but larger than this runtime can hold |\n| `MALFORMED_ENVELOPE` | OWID | Malformed in a way none of the above describes |\n| `PAYLOAD_TOO_SHORT` | 51Did | The payload is shorter than the 5 byte header (flags and licence id), so the type cannot be read |\n| `INVALID_TYPE_PAYLOAD_LENGTH` | 51Did | The header named a type and the payload is shorter than that type's match key needs, being 21 bytes for Random and 37 for Probabilistic and HashedEmail |\n| `UNSUPPORTED_PAYLOAD_VERSION` | 51Did | Bits 4 and 5 of the flags byte name a payload layout version this package does not know, so no field is read |\n| `NO_USAGE` | 51Did | Bits 0 to 2 of the flags byte are all clear, which is not a usage. The cloud never writes such a flags byte, so the identifier is damaged or forged |\n\nA Reserved type is not yet assigned, so the reader accepts it at any length\nfrom the header up and exposes whatever follows the header as the match key.\n\n### The throwing surface\n\n`FodId.fromBase64(base64)`, `FodId.fromByteArray(bytes)`, `FodId.fromOwid(owid)`\nand `new FodId(owid)` are the same read for a caller who prefers an\nexception. They run the same checks, in the same order, and throw:\n\n| Thrown | When |\n| --- | --- |\n| `TypeError` | The argument is the wrong kind of thing, being `null`, `undefined`, a non-string to `fromBase64`, or a non-`Uint8Array` to `fromByteArray` |\n| `RangeError` | The payload is `PAYLOAD_TOO_SHORT`, `INVALID_TYPE_PAYLOAD_LENGTH`, `UNSUPPORTED_PAYLOAD_VERSION` or `NO_USAGE`, being the four statuses the 51Did payload rules produce. The error carries `status` |\n| `FodIdParseError` | The OWID library refused the envelope for any other status. The error carries `status` |\n\nA wrong argument type is a programming error and stays exceptional on every\nsurface. Everything else is a fact about the data, which the non-throwing\nsurfaces report as a result and the throwing surfaces report as one of the\ntwo errors above.\n\n### Migrating from the removed OWID API\n\nThe OWID library this package builds on no longer has a public constructor\nand no longer throws from a read (see the next section). A caller who reached\nthe OWID library through this package changes as follows.\n\n| Before | After |\n| --- | --- |\n| `FodId.fromOwid(new owid(s))` | `FodId.fromBase64(s)`, or `FodId.tryParse(s)` for a result |\n| `try { FodId.fromBase64(s) } catch (e) { /* e was a string */ }` | `const r = FodId.tryParse(s); if (!r.ok) { /* r.status */ }` |\n| `catch (e)` on `fromBase64` reading `e.message` | `catch (e)` reading `e.status`, one of `FodId.ParseStatus` |\n| `fodId.date` read as a signed number | `fodId.date` is now unsigned |\n| `fodId.verify(pem)` resolving `false` for a key that could not be imported | `verify` rejects when the question could not be answered, and `checkSignature(pem)` reports `INVALID_KEY` |\n\n### Migrating from the removed raw surface\n\nThe raw byte and the offsets were the way to read by hand a field that already\nhas a name, so they have gone. `fodId.flags`, `fodId.dateMinutes`, the\ndeprecated `fodId.hash`, and the layout constants `FLAGS_OFFSET`,\n`LICENSE_ID_OFFSET`, `LICENSE_ID_LENGTH`, `MATCH_KEY_OFFSET`,\n`MATCH_KEY_LENGTH`, `HEADER_LENGTH`, `GUID_LENGTH`, `RANDOM_PAYLOAD_LENGTH`\nand `PAYLOAD_LENGTH` are no longer part of the package.\n\n| Before | After |\n| --- | --- |\n| `fodId.flags` masked for a usage bit | `fodId.usage`, and `fodId.usageIsIndirect` for bit 3 |\n| `fodId.flags` masked for the type bits | `fodId.type` |\n| `fodId.hash` | `fodId.matchKey`, the same bytes under the name the Model Terms for Marketing use |\n| `fodId.dateMinutes` | `fodId.date`, which reports the same unsigned value |\n| `FodId.PAYLOAD_LENGTH` and the other layout constants | Nothing. Every field has a named accessor, and the layout is in the specification linked above |\n\n## OWID dependency\n\n`FodId` builds on the OWID envelope library\n([SWAN-community/owid-js](https://github.com/SWAN-community/owid-js)). The\nlibrary is read and verify only, so `FodId` **composes** the OWID the library\nread, delegates the envelope fields to it, and keeps the standard base64 for\n`asBase64()`.\n\nThe library was hardened so that an OWID reaches calling code by one route\nonly, which is a successful read through `owid.parse` or `owid.parseBytes`.\nThose reads answer with `{ ok, owid, status }` and never throw, `new owid()`\nthrows naming what to use instead, and an OWID that has been read is frozen\nand hands out its byte arrays as copies. This package follows the same shape,\nwhich is why `tryParse` and `tryFromByteArray` exist and why the OWID statuses\nappear in `FodId.ParseStatus` unchanged. The library also offers an offline\n`verifyWithPublicKey(pem, others)` and `checkSignatureWithPublicKey(pem,\nothers)` that work in Node and the browser (Web Crypto), so `FodId.verify()`\nand `FodId.checkSignature()` run without contacting a network endpoint.\n\nThe library is not on the npm registry, so `package.json` names it as a\nGitHub reference, which npm resolves by cloning the repository. The reference\nis `github:51Degrees/owid-js#148763cb`, the commit on `main` that carries the key selection fix and refuses redirects when fetching a key\nof the [51Degrees/owid-js](https://github.com/51Degrees/owid-js) fork. That\napplies only when working in this repository, because the published\n`fiftyone.pipeline.did` package carries the OWID source inside its own\ntarball under `node_modules/owid`, named in `bundleDependencies`. Anyone\ninstalling the package from npm needs neither git nor reachable GitHub, and\ngets the same OWID code every time, whatever the referenced branch happens\nto hold on the day. owid-js is Apache-2.0 and its `LICENSE` file travels in\nthe bundle alongside the source.\n\n## Install / build\n\n```bash\nnpm install   # needs git on the PATH to fetch owid-js\nnpm test\n```\n\n## Usage\n\n```js\nconst { FodId, IdType, Usage } = require('fiftyone.pipeline.did');\n\n// Either base64 alphabet is accepted, the standard one the cloud issues and\n// the URL-safe one a page puts in a link, with or without padding.\nconst fodId = FodId.fromBase64(base64FromCloudService);\n\nconst usage = fodId.usage;        // Usage.NON_MARKETING / STANDARD / PERSONALIZED\nconst indirect = fodId.usageIsIndirect;\nconst type = fodId.type;          // IdType.PROBABILISTIC / RANDOM / HASHED_EMAIL\nconst licenseId = fodId.licenseId;\nconst matchKey = fodId.matchKey;  // Uint8Array: SHA-256 or GUID bytes, see type\nconst terms = fodId.terms;        // address of the terms document it was\n                                  // created under, null where it names none\n                                  // this package knows\n\nconst domain = fodId.domain;\nconst minutes = fodId.date;       // minutes since 2020-01-01T00:00:00Z\nconst verified = await fodId.verify(publicKeyPem);   // async (Web Crypto)\nconst base64 = fodId.asBase64();      // standard alphabet with padding\nconst inLink = fodId.asBase64Url();   // URL-safe alphabet, no padding\n```\n\n`date` is the envelope's own date as the unsigned 32-bit count of minutes\nsince 2020-01-01T00:00:00Z, exactly as the wire carries it, and it is the\ninteger to compare when asking which of two identifiers was issued first.\n\nWhere the value may not be a 51Did at all, read it without throwing.\n\n```js\nconst result = FodId.tryParse(valueFromOutside);\nif (!result.ok) {\n  // result.status is one of FodId.ParseStatus, and result.value is null.\n  return;\n}\nconst fodId = result.value;\n```\n\n`fodId.checkSignature(publicKeyPem)` reports the signature outcome as one of\n`FodId.SignatureStatus` (the OWID library's own frozen object), so that \"could\nnot check\" stays apart from \"does not match\". Only `SIGNATURE_INVALID` means\nthe identifier should be distrusted, and `KEY_UNAVAILABLE`, `INVALID_KEY` and\n`VERIFICATION_ERROR` mean the question was never answered. The boolean\n`verify(publicKeyPem)` resolves only for the two statuses that judge the\nsignature and rejects for the rest, because a caller told `false` would treat\nan outage as a forgery.\n\n```js\nconst check = await fodId.checkSignature(publicKeyPem);\nif (check.status === FodId.SignatureStatus.SIGNATURE_INVALID) {\n  // The identifier should be distrusted.\n} else if (!check.ok) {\n  // The signature was never judged. Do not treat this as a forgery.\n  console.log(check.status + ': ' + check.message);\n}\n```\n\n## Comparing two 51Dids\n\n```js\nconst a = FodId.fromBase64(idprobglobalA);\nconst b = FodId.fromBase64(idprobglobalB);\n\n// The envelope (date, signature, base64) differs across reissues.\n// The match key inside the payload is stable, and is what you compare.\nconst sameMatchKey = Buffer.from(a.matchKey).equals(Buffer.from(b.matchKey));\n```\n\n## Verifying on your server\n\n`DidClient` handles every manipulation of a 51Did a server needs against the\ncloud, so server code never builds a cloud URL or handles a key itself. One\ninstance serves a whole server. It needs Node 18 or later for the built-in\n`fetch`, or a `fetch` function passed in, and it runs in a page as well, as\n[Verifying in a browser](#verifying-in-a-browser) describes. A caller that\nholds the published key list already, and fetches it on its own terms,\nchooses a key with `PublicKeys` instead, described under step 2a below.\n\n```js\nconst { FodId, DidClient } = require('fiftyone.pipeline.did');\n\nconst client = new DidClient({\n  resourceKey: process.env._51DEGREES_RESOURCE_KEY,\n  licenceKey: process.env._51DEGREES_LICENSE_KEY   // optional, see below\n  // endpoint: defaults to FOD_CLOUD_API_URL, then the public cloud\n});\n```\n\n| Option | Meaning |\n| --- | --- |\n| `resourceKey` | Required for the public cloud. The page's resource key, public by nature. It travels in the route of the key and verify requests and in the form body of the redeem request. A private cloud serves those routes with no resource key, so a client for one is built without it |\n| `licenceKey` | Optional. A licence key of the same account, server side only. Needed to redeem where the account holds licence keys. Sent only in the body of the redeem request, never in a URL |\n| `endpoint` | Optional. The API base including the `/api/v4/` segment. Defaults to the `FOD_CLOUD_API_URL` environment variable where the runtime has environment variables, the same variable the cloud request engine honours, then to `https://cloud.51degrees.com/api/v4/`. A value without a trailing slash gains one |\n| `fetch` | Optional. The HTTP transport, defaulting to the global `fetch`, on Node and in a browser alike. Tests inject one |\n\nOn Node every request carries a `User-Agent` naming this package and its\nversion. A browser sends its own, as\n[Verifying in a browser](#verifying-in-a-browser) explains.\n\nEvery client method takes either a `FodId` or the identifier's base64 in\neither alphabet. A string is read before anything else happens. The client\nfirst turns away an encoded value longer than 4096 characters with a\n`DidArgumentError`, which is client policy on the size of input the client\nis willing to look at, deliberately generous and unrelated to how long a\n51Did is, and it is not a limit of the 51Did format. A string under that\nlength that does not read as a 51Did is refused with a `DidArgumentError`\nnaming the read status, and in both cases no key is fetched and no request\nis made. A key list that cannot be fetched is a `DidClientError`, never an\ninvalid signature.\n\n**1. Parse.** The identifier arrives from a page in the URL-safe alphabet and\nfrom the cloud in the standard one. `tryParse` and `fromBase64` take either.\n\n```js\nconst read = FodId.tryParse(fiftyOneDid);\nif (!read.ok) {\n  // Answer the page with read.status. Nothing has been fetched.\n}\nconst fodId = read.value;\n```\n\n**2. Verify the signature offline.** The client fetches the published signing\npublic keys from the cloud and picks the key in force when the identifier was\ncreated, being the entry whose start is latest on or before the identifier's\ndate. Every entry carries `startsAt` and `endsAt`, its scheduled end, which is\nthe next key's start, and the newest entry carries one too although the next\nkey is not yet published. A key stays in force until its `endsAt`, or until\nthe next one starts where a service sends no `endsAt`. Near a period boundary\nthe neighbouring key is tried as well, and no earlier key is tried. The\nenvelope version must be the one the cloud signs and the payload at least the\nbase length for its type.\n\nThe cloud publishes each key only from fifteen minutes before its period\nstarts, so the client verifies offline until the newest key it holds ends. It\nfetches the whole list on first use and again once the list is a day old. In\nbetween, it fetches the keys from the newest start it holds onwards for an\nidentifier dated close to the end of the list or past it, and the keys from\nthe start of the key in force at the identifier's date onwards when no key it\nholds verifies a signature, because a key can be replaced before its `endsAt`.\nEach answer is merged into the list, so no older key is dropped, and those two\nreasons cause at most one fetch a minute.\n\n```js\nconst valid = await client.verifySignature(fodId);        // boolean\nconst detail = await client.verifySignatureDetailed(fodId);\n// { valid: false, reason: 'nokey' } when no key held covers the date\nconst keys = await client.publicKeys();\n// [{ startsAt: Date, endsAt: Date, publicKey: PEM }], endsAt where sent\nconst key = await client.publicKeyFor(fodId); // the entry in force, or null\n```\n\n`verifySignatureDetailed` answers `{ valid: false, reason: 'signature' }` only\nwhen every candidate key was tried and none matched. Where that happens with\nthe list held, the client fetches once more, at most once a minute, and checks\nagain before answering. A date no key held covers, such as one past the end of\nevery published key, is `'nokey'`, and a key list that could not be fetched\nrejects with a `DidClientError`, so an outage never reads as a forgery.\n\n**2a. Choose the key from a list you already hold.** The rule the client\napplies is offered on its own as `PublicKeys`, for a caller that holds the\npublished list already and fetches it on its own terms. Such a caller\nchooses the same key the client would and never works the rule out for\nitself. Nothing in `PublicKeys` fetches or checks a signature.\n\n```js\nconst { FodId, PublicKeys } = require('fiftyone.pipeline.did');\n\n// The list exactly as the id/key/{resource} endpoint answered it, or as it\n// was stored. Read once into frozen entries, oldest start first.\nlet keys = PublicKeys.fromList(JSON.parse(body));\n\nconst created = PublicKeys.createdAt(fodId);   // Date, from the envelope date\n\n// Fetch first when the list may not reach the identifier's date. The\n// request is your own, to id/key/{resource} with the newest startsAt held\n// as ?datetime=, so only that entry and later ones come back. Merging keeps\n// every older entry.\nif (!PublicKeys.covers(keys, created)) {\n  keys = PublicKeys.merge(keys, PublicKeys.fromList(await fetchKeysSince(keys)));\n}\n\nconst key = PublicKeys.inForceFor(keys, fodId); // the entry in force, or null\nconst atMoment = PublicKeys.inForceAt(keys, new Date('2026-08-10T00:00:00Z'));\n\n// The entries to try in order, being the one in force and, within fifteen\n// minutes of a period boundary, the neighbour. Empty when no entry covers\n// the date. No earlier key is ever tried.\nfor (const candidate of PublicKeys.candidatesFor(keys, fodId)) {\n  if (await fodId.verify(candidate.publicKey)) {\n    // Genuine.\n    break;\n  }\n}\n```\n\n`fromList` reads `startsAt`, or `created` where an entry carries no\n`startsAt`, `endsAt` where an entry carries it, and `publicKey`, and ignores\neverything else. It throws a `TypeError` for a value that is not a list, an\nentry that lacks a start or a key, or an `endsAt` that is not a date after the\nentry's start, so nothing from such an answer should be merged. `inForceFor`,\n`candidatesFor` and `createdAt` take a `FodId` or its base64 in either\nalphabet, and a string that does not read as a 51Did throws the reader's own\nerror, as `FodId.fromBase64` does.\n\n`covers` is false when the list must be fetched before it can answer for a\nmoment, which is when the moment is past the end of the list or close enough\nto it that the next key may have signed the identifier. The end is the newest\nentry's `endsAt`, or its start where the cloud sent no `endsAt`. Fetch for\nthat reason at most once a minute, so a 51Did dated where no key is published\nyet cannot make every check call the cloud. `merge` adds each entry of the\nanswer, or puts it in place of the held entry with the same start, and never\ndrops an older entry, because an old 51Did verifies against the key of its own\nperiod. A key can be replaced before its `endsAt`, so when no candidate\nverifies, fetch the keys from the start of the key in force at the\nidentifier's date onwards, within the same limit, merge them in and try the\ncandidates once more before treating the signature as failed. Fetch the whole\nlist, with no `datetime`, at least once a day as well and merge it in, which\nbounds how long a replaced key is still trusted.\n\n**3. Verify the signature through the cloud.** The open `verify` endpoint,\none use against the resource key and no licence key needed. A value that does\nnot read as a 51Did is refused before the request with a `DidArgumentError`\nnaming the status, and a value the cloud refuses raises `DidArgumentError`\nwith the cloud's message.\n\n```js\nconst valid = await client.verify(fodId);   // boolean\n```\n\n**4. Redeem a sealed creator context result.** The verify-context and\nverify-full endpoints are browser calls, because the creator context describes\nthe browser's own connection, and they return the verdict only as an encrypted\n`result` the browser cannot read or forge. The party that acts on it redeems it\non the server, with the licence key, against the 51Did it knows independently.\n\n```js\nconst redeemed = await client.redeem(fodId, result, challenge);\nredeemed.context      // ContextResult: 'verified', 'mismatch', 'nocontext',\n                      // 'misconfigured', 'invaliddate', 'notcheckable',\n                      // 'expired', 'replayed', 'unreadable', 'unconfirmed'\nredeemed.signature    // SignatureResult: 'verified', 'invalid' or 'unknown'\nredeemed.factors      // on a mismatch, on a misconfigured result where the\n                      //   transport was compared, and whenever any factor is\n                      //   'notrecorded', whatever the overall result:\n                      //   { transport, device, browserip, connectionip,\n                      //   asn, platformname, platformversion,\n                      //   browsername, browserversion } each 'verified',\n                      //   'mismatch', 'misconfigured', 'notrecorded', or\n                      //   null where nothing was compared\nredeemed.verifiedAt   // Date, on the redeemed and expired outcomes\nredeemed.secondsSinceVerified\nredeemed.statusCode   // 200, or 503 for 'unconfirmed', which may be retried\nredeemed.raw          // the body as received\nredeemed.toJSON()     // the cloud's own response shape, for relaying to a page\n```\n\nThe factor names are in `Factor`, in the order the cloud lists them. From\ncloud release 4.4.38 the operating system and the browser each have a name\nand a version, replacing the single `browser` factor, so a version mismatch\nbeside a verified name reads as an upgrade and a mismatched name reads as a\ndifferent operating system or browser. `factors` keeps every name exactly as\nthe cloud sent it, including a name that is not in `Factor`, so a factor the\ncloud adds later reaches the caller without a new release of this package,\nand an older service's `browser` key stays under its own name rather than\nfilling any of the four. Neither `misconfigured` nor `notrecorded` is a\nmismatch, and neither must ever be read as one, but they say different\nthings, because `misconfigured` means the checking service could not\ndetermine the factor whilst `notrecorded` means the creating service\nrecorded no value for it, so the identifier says nothing about it. A\n`notrecorded` factor is left out of the overall result, so `verified` can\narrive beside factors that are `notrecorded`, and `factors` is sent whenever\nany factor is, so a receiver of `verified` sees how many factors it rests on.\n\nA context string this package does not know maps to `unreadable`, so an\nunrecognised outcome is never mistaken for a good one, and `contextRaw` keeps\nthe string as sent. Every cryptographic failure comes back from the cloud as\nthe one word `unreadable` by design, a missing licence key included, so the\nclient does not try to tell them apart either. A value that does not read as\na 51Did is refused before the request with a `DidArgumentError` naming the\nstatus, a cloud that refuses the 51Did raises `DidArgumentError` (HTTP 400),\na host that does not offer the creator context raises `DidNotSupportedError`\n(HTTP 404), and any other status raises `DidClientError` carrying\n`statusCode` and `body`. A transport failure raises the error `fetch` raised.\n\n## Verifying in a browser\n\n`DidClient` runs in a page with only `resourceKey`. There it reads no\nenvironment variable, uses the page's own `fetch`, and sends no `User-Agent`\nheader, because a browser sends its own and one set by a page can make the\nbrowser ask the cloud's permission with a preflight request first.\n\n```js\nconst { DidClient } = require('fiftyone.pipeline.did');\n\nconst client = new DidClient({ resourceKey: 'your resource key' });\nconst valid = await client.verifySignature(fiftyOneDid);\n```\n\nA page served by a private cloud, whose routes carry no resource key, builds\nthe client with the endpoint alone, as\n`new DidClient({ endpoint: 'https://your-cloud.example/api/v4/' })`.\n\nA page builds a new client on each view, so the client's own copy of the key\nlist lasts one view. The browser's HTTP cache can keep the list across views\ninstead, for as long as the `Cache-Control` header the cloud sends with the\nkey list allows, which is at most half an hour and never past the moment the\nnext key is published, so a view within that time can be answered without a\nrequest to the cloud. The OWID library this package builds on fetches a\ncreator's key through the browser's cache in the same way and keeps no copy\nof its own. An answer from the cache can be as old as that header allows, so\na key the cloud replaces early reaches a page a little later than it reaches\na server.\n\nCallers must not re-implement the key handling. The client decides when to\nfetch the list, what to ask the cloud for, how to merge each answer, how\noften it may ask and which keys to try, and those rules change with the\ncloud, so a page that fetches, keeps or chooses keys itself carries a copy of\nthe rules that will not change when they do.\n\nThe package is CommonJS and uses no Node built-ins, so a bundler includes it\nin a page. The client reads its version from the package's own\n`package.json`, so the bundler must include JSON files, which esbuild does\nwithout any setting.\n\n## Non-goals\n\n- **No signature verification on read.** Call `verify(publicKeyPem)`,\n  `checkSignature(publicKeyPem)` or `DidClient.verifySignature(fodId)` when\n  needed (all are asynchronous).\n- **No creation of new 51Dids.** Creation is the cloud `json` endpoint through\n  the cloud request engine and pipeline, and a page creates from the browser\n  because the identifier describes the browser's own connection.\n- **No upper bound on the payload.** The lengths of a creator context section\n  belong to the cloud.\n\n## Examples\n\n`examples/fodIdExample.js` is the offline reader example described above. The\nweb demo below calls the 51Degrees cloud, which attaches a creator context to\nevery 51Did it issues, binding the identifier to the browser and connection it\nwas created on. The creator context only makes sense from a browser, because\na process verifying its own connection checks itself against itself, so the\ndemo is a page served by a small server. It needs Node 18 or later for the\nbuilt-in `fetch` and depends only on this package, reached by path so the demo\nruns against the code beside it.\n\n### Creator context web demo\n\n`examples/creator-context-web/` holds a small demo web app, `server.js`\nserving `page.html`, that runs the full 51Did flow the way production does.\n\n1. **Create.** The browser loads the 51Degrees client script, which runs the\n   snippets the service asks for, sends what they collected, and hands the\n   page the answer with the 51Did in it, created for the browser's own\n   connection. The service issues an identifier only once those values are\n   in, so a page asking for one by itself is told the page has not finished\n   and is given nothing.\n2. **Verify.** The browser calls `verify-full`, the first verification step,\n   so the cloud observes the browser's live connection, and sends what the\n   snippets collected with the call so that this browser can be compared\n   with the creator. Both the signature\n   outcome and the creator context verdict return only as an encrypted\n   `result` that the browser cannot read or forge. (A deployment holding no\n   context secret answers in the open instead.) The page then hands the\n   encrypted result to its own server.\n3. **Redeem.** The server parses the 51Did, checks its signature offline\n   against the published public keys, then calls `redeem` with the 51Did, the\n   encrypted result and the account's licence key as the second step, and\n   receives the signature outcome, the true creator context verdict, when the\n   verification happened (`verifiedAt`) and how long ago that was\n   (`secondsSinceVerified`).\n\nA fresh `challenge` is issued per page load and bound through both steps by\nthe cloud. A production server would also remember the value it issued and\nreject a redemption carrying any other, which this demo keeps out of scope.\n\nThe page carries the licensed probabilistic identifier (`idproblic`) through\nverification where the cloud returned it, otherwise the global one\n(`idprobglobal`). An account holding no licence keys gets no licensed\nidentifier at all, and the global one carries the creator context just the\nsame.\n\nA verdict of `nocontext` is a normal outcome and not an error. A self-hosted\ncontainer can be configured not to emit the creator context, so an identifier\nit issued redeems as `nocontext`, which the page shows the way it shows any\nverdict. Only a transport failure, a status outside 2xx, a body that is not\nJSON, or an `errors` answer from the service is a failure, which the page\nshows as one naming the status and the start of the body. A 404 from\n`verify-full` or `redeem` is different again, because the host answering does\nnot offer the creator context at all, so the page reports the step as not\nsupported by this host.\n\n**The part that belongs on your server.** Everything the browser does is in\n`page.html`. The one server-side piece is the redeem call, which is where the\nlicence key is added, and only there, so the browser never sees it. The\n`/redeem` route in `server.js` is that piece, and these are its essential\nlines, which a developer copies into their own server.\n\n```js\nconst { FodId, DidClient } = require('fiftyone.pipeline.did');\n\n// Once, at start-up.\nconst client = new DidClient({ resourceKey, licenceKey });\n\n// In the /redeem route, with 51did, result and challenge from the page.\nconst read = FodId.tryParse(fiftyOneDid);\nif (!read.ok) {\n  response.writeHead(400, { 'Content-Type': 'application/json' });\n  response.end(JSON.stringify({\n    errors: ['51did is not a valid 51Did (' + read.status + ').']\n  }));\n  return;\n}\nconst fodId = read.value;\nconst signatureValid = await client.verifySignature(fodId);\nconst redeemed = await client.redeem(fodId, result, challenge);\nconst body = redeemed.toJSON();\nbody.serverSignature = signatureValid ? 'verified' : 'invalid';\nresponse.writeHead(redeemed.statusCode, { 'Content-Type': 'application/json' });\nresponse.end(JSON.stringify(body));\n```\n\nThe route answers with the cloud's status and a body in the cloud's own shape\n(`signature`, `context`, `factors` when present, `verifiedAt`,\n`secondsSinceVerified`) built from the typed result, plus `serverSignature`,\nthe server's own offline check of the identifier's signature. The page ignores\nfields it does not know, so `page.html` is the same for every language. A\nhost without the creator context answers 404 with a text body, which the page\nreports as not supported by this host, and an unreachable cloud answers 502\nwith `{ \"error\": ... }`.\n\nThe creation call requests every 51Did identifier in one request, and the page\nshows all six in a table: the probabilistic pair (`IdProbGlobal` and\n`IdProbLic`) derived from the connection, the deterministic hashed-email pair\n(`IdHemGlobal` and `IdHemLic`) derived from email evidence supplied as\n`id.email` (the demo sends `demo@51did.example`, so the pair is the same on\nevery device that email appears on), and the random pair (`IdRandGlobal` and\n`IdRandLic`). Global identifiers are shared across customers, licensed ones are\nscoped to the licence key.\n\n```bash\ncd examples/creator-context-web\n_51DEGREES_RESOURCE_KEY=<resource key> node server.js\n```\n\nThen open `http://localhost:5100/`. To demonstrate across two devices, serve\non an address both can reach and open the copied link on the second device.\n\n**The copy-and-paste proof.** Once the 51Did has fully validated, the page\nshows a copy-and-paste section with a link carrying the same 51Did, and an\nexplanation of what will happen next. Open that link in a **different\nbrowser** and the same page loads with the same identifier: the signature\nstill verifies and the identifier unpacks, because it is genuine, but the\ncreator context does **not** validate, because the context binds the\nidentifier to the browser and connection it was created on. That visible\nfailure is the demonstration that matters, a copied or stolen identifier\ncaught at presentation with nothing stored server side. Opening the link in\nthe same browser is not the demonstration, since the same browser presents the\nsame context and may still verify.\n\nThe stylesheet `examples-main.min.css` beside the demo is the design system\nbuild and is refreshed by common-ci's `update-example-assets` step.\n\n### Environment variables\n\n| Variable | Meaning |\n| --- | --- |\n| `_51DEGREES_RESOURCE_KEY`, then `RESOURCE_KEY` | The resource key. Required. Public by nature, it is what the page carries |\n| `_51DEGREES_LICENSE_KEY`, then `LICENSE_KEY` | A licence key of the same account. Optional. Server-side only. Only an account that holds licence keys needs one to redeem, because the licence key is what keeps redemption to the acting party's own servers, and an account holding none has nothing to check against |\n| `FOD_CLOUD_API_URL` | Optional. The cloud API base including the `/api/v4/` segment, defaulting to `https://cloud.51degrees.com/api/v4/`. The same variable the cloud request engine and `DidClient` honour, so setting it once points every 51Degrees example at the same place. A host other than `cloud.51degrees.com` would be used to (a) use an on premise web server, or (b) use a privately hosted version of the 51Degrees cloud for performance reasons. This is the private hosting option of the 51Degrees cloud service. Both run the same service, so the examples work unchanged |\n| `PORT` | Web demo only. Defaults to `5100` |\n\n### What a run costs\n\nEvery call the demo makes to the cloud is one use against the subscription\nbehind the resource key. Checking a 51Did from the browser makes two,\nverify-full from the page and redeem from the server, so a browser-based\ncontext check is two uses every time. Checking only the signature with\n`verify` is one use. The public key list the offline check needs is one use\neach time it is fetched, which is on first use, when the list is a day old,\nand at most once a minute when a 51Did is dated close to the end of the list\nor past it, or fails its signature check.\n\n## Tests\n\n`npm test` runs the unit tests, which use an injected transport and touch no\nnetwork. `tests/didClient.integration.test.js` runs against the live cloud\nonly when `_51DEGREES_RESOURCE_KEY` (or `RESOURCE_KEY`) is set, and is skipped\notherwise.\n","readmeFilename":"readme.md"}