From cf8fbe0965378a3658b6c151b7afc63b09a35ad7 Mon Sep 17 00:00:00 2001 From: Sebastian Hugentobler Date: Wed, 3 Jul 2024 12:32:47 +0200 Subject: [PATCH] rewrite so webdriver is only used for the login --- .gitignore | 4 +- COPYING | 661 ++++++++++++ Cargo.lock | 2017 +++++++++++++++++++++++++++++++++++++ Cargo.toml | 16 + LICENCE | 373 ------- README.md | 91 +- cookie/Cargo.toml | 15 + cookie/src/cli.rs | 12 + cookie/src/geckodriver.rs | 33 + cookie/src/lib.rs | 79 ++ cookie/src/main.rs | 24 + download/Cargo.lock | 1859 ++++++++++++++++++++++++++++++++++ download/Cargo.toml | 20 + download/src/cli.rs | 31 + download/src/date.rs | 27 + download/src/download.rs | 52 + download/src/lib.rs | 19 + download/src/main.rs | 29 + download/src/nzz.rs | 198 ++++ download/src/pdf.rs | 177 ++++ flake.lock | 55 +- flake.nix | 13 +- nzz.js | 335 ------ package-lock.json | 528 ---------- package.json | 13 - screenshot.jpg | Bin 40688 -> 187385 bytes 26 files changed, 5385 insertions(+), 1296 deletions(-) create mode 100644 COPYING create mode 100644 Cargo.lock create mode 100644 Cargo.toml delete mode 100644 LICENCE create mode 100644 cookie/Cargo.toml create mode 100644 cookie/src/cli.rs create mode 100644 cookie/src/geckodriver.rs create mode 100644 cookie/src/lib.rs create mode 100644 cookie/src/main.rs create mode 100644 download/Cargo.lock create mode 100644 download/Cargo.toml create mode 100644 download/src/cli.rs create mode 100644 download/src/date.rs create mode 100644 download/src/download.rs create mode 100644 download/src/lib.rs create mode 100644 download/src/main.rs create mode 100644 download/src/nzz.rs create mode 100644 download/src/pdf.rs delete mode 100755 nzz.js delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.gitignore b/.gitignore index f3c2b39..88939a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *~ .DS_Store *.swp -node_modules \ No newline at end of file +node_modules +/target +nzz/ diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/COPYING @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..48c8eb6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2017 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cc" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.5", +] + +[[package]] +name = "clap" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fantoccini" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65f0fbe245d714b596ba5802b46f937f5ce68dcae0f32f9a70b5c3b04d3c6f64" +dependencies = [ + "base64 0.13.1", + "cookie", + "futures-core", + "futures-util", + "http 0.2.12", + "hyper 0.14.29", + "hyper-tls 0.5.0", + "mime", + "serde", + "serde_json", + "time", + "tokio", + "url", + "webdriver", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4fe55fb7a772d59a5ff1dfbff4fe0258d19b89fec4b233e75d35d5d2316badc" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.0", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.29", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.4.0", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lopdf" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e775e4ee264e8a87d50a9efef7b67b4aa988cf94e75630859875fc347e6c872b" +dependencies = [ + "chrono", + "encoding_rs", + "flate2", + "itoa", + "linked-hash-map", + "log", + "md5", + "nom", + "rayon", + "time", + "weezl", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "nzz-cookie" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "fantoccini", + "serde_json", + "tokio", +] + +[[package]] +name = "nzz-download" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "lopdf", + "reqwest", + "serde", + "serde_json", + "tempfile", + "time", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.4.0", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.102.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webdriver" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9973cb72c8587d5ad5efdb91e663d36177dc37725e6c90ca86c626b0cc45c93f" +dependencies = [ + "base64 0.13.1", + "bytes", + "cookie", + "http 0.2.12", + "log", + "serde", + "serde_derive", + "serde_json", + "time", + "unicode-segmentation", + "url", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a8a28da --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,16 @@ +[workspace] +resolver = "2" +members = [ + "cookie", "download", +] + +[workspace.dependencies] +anyhow = "1.0.86" +clap = { version = "4.5.8", features = ["env", "derive"] } +serde_json = "1.0.120" +tokio = { version = "1", features = ["full"] } + +[workspace.package] +license = "AGPL-3.0" +authors = ["Sebastian Hugentobler "] +repository = "https://code.vanwa.ch/shu/nzz-downloader" diff --git a/LICENCE b/LICENCE deleted file mode 100644 index a612ad9..0000000 --- a/LICENCE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md index da40a92..198e3ad 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,79 @@ # NZZ Downloader The [NZZ](https://en.wikipedia.org/wiki/Neue_Z%C3%BCrcher_Zeitung) is the Swiss -Swiss newspaper of record. Its first issue was all the way back in 1780. It's -even better that you can download every single issue ever released (if you have -a subscription of course). +Swiss newspaper of record. Its first issue was all the way back in 1780. Even +better you can download every single issue ever released (if you have a +subscription of course). -This little tool helps you with downloading all released issues in a specified -time span. +This little tool helps with downloading all released issues in a specified time +span. -It was written because the archive website is not very friendly in the author's -opinion and of course because it is not possible to download everything in a -time span. - -Because the archive website makes heavy use of javascript this is done with -[selenium](https://www.selenium.dev/) to remote control a browser (firefox in -this case). This is also why it is not all that fast but that is ok. - -Please only use this with your own credentials, the journalists deserve to be -paid for their work. +It was written because the archive website is not very friendly and because it +is not possible to download everything within a specified time span. ![screenshot](screenshot.jpg) ## Installation You need to be comfortable with the command line to use the nzz downloader and -it has only been tested on linux systems though it should work fine on Windows -or macOS. +it has only been tested on *nix systems though it should work fine on Windows or +macOS. + +### Prerequisites -- [NodeJS](https://nodejs.org/en/download/) (the LTS version is fine) - [Firefox](https://www.mozilla.org/en-US/firefox/download/thanks/) - [geckodriver](https://github.com/mozilla/geckodriver/releases) -- [nzz.js](https://code.vanwa.ch/sebastian/nzz-downloader/-/releases) +- [rust](https://www.rust-lang.org/learn/get-started) + +Build the binaries with cargo: `cargo build --release` (they are created as +`target/release/{nzz-cookie,nzz-download}`). ## Usage +### Authentication + +The downloader needs an authentication cookie to work. With the binary +`nzz-cookie` (and the huge help of the webdriver api + geckodriver) this can be +generated. + ``` -Usage: nzz.js -f [date] -t [date] -o [path] -u [usernane] -p [password] +Usage: nzz-cookie --username Options: - --version Show version number [boolean] - -h, --help Show help [boolean] - -f, --from Earliest issue to download. [default: "2020-12-23"] - -t, --to Latest issue to download. [default: "2020-12-23"] - -o, --out Download directory. [default: "./nzz"] - -u, --user Username for the nzz archive. [required] - -p, --password Password for the user. [required] + -u, --username Username [env: USERNAME=] + -h, --help Print help + -V, --version Print version + +Provide the password from stdin. ``` -### Examples +The resulting cookie is printed to stdout. -Download all existing issues from 1780-01-01 until 1780-02-30 to the default -directory "./nzz" +### Download ``` -./nzz.js -u 'myuser@example.com' -p 'mypassword' -f 1780-01-01 -t 1780-02-30 +Usage: nzz-download [OPTIONS] --from --to + +Options: + -f, --from Earliest issue to download (like 1780-12-31) [env: FROM=] + -t, --to Latest issue to download (like 1780-12-31) [env: TO=] + -o, --output-dir Output directory [env: OUTPUT_DIR=] [default: ./nzz] + -h, --help Print help + -V, --version Print version + +Provide the authentication cookie from stdin. ``` -## Caveats +### Example -You need a good internet connection, as the program only waits a couple seconds -until a download of an issue can start. This is something that is hard to solve -unfortunately. +Login and use the resulting cookie to download all issues from 2024-06-01 until +2024-06-05 to the default directory "./nzz", reading the password from the file +`pw`: -If you get strange errors about elements not being visible, wait a bit and try -again, it's usually a network problem. +``` +nzz-cookie -u 'myuser@example.com' ) -> Result>> { + if TcpStream::connect_timeout(&GECKODRIVER_HOST.parse()?, Duration::from_secs(2)).is_err() { + let handle = spawn(async move { + let mut child = Command::new(GECKODRIVER_BINARY) + .stdout(Stdio::null()) + .spawn() + .expect("failed to run binary"); + tokio::select! { + _ = stop_rx => { + child.kill().await.expect("Failed to kill process"); + } + result = child.wait() => { + result.expect("Child process wasn't running"); + } + } + }); + Ok(Some(handle)) + } else { + Ok(None) + } +} diff --git a/cookie/src/lib.rs b/cookie/src/lib.rs new file mode 100644 index 0000000..974d374 --- /dev/null +++ b/cookie/src/lib.rs @@ -0,0 +1,79 @@ +//! Login to the NZZ archive and print the authentication cookie for further usage. +//! +//! Leveraging webdriver + geckodriver. + +use std::time::Duration; + +use anyhow::Result; +use cli::Config; +use fantoccini::{elements::Element, Client, ClientBuilder, Locator}; +use serde_json::json; +use tokio::{sync::oneshot, time::sleep}; + +use crate::geckodriver::GECKODRIVER_HOST; + +pub mod cli; +pub mod geckodriver; + +const LOGIN_URL: &str = "https://zeitungsarchiv.nzz.ch/"; + +/// Entrypoint to login to the NZZ archive. +pub async fn run(args: Config, pw: &str) -> Result<()> { + let (stop_tx, stop_rx) = oneshot::channel(); + let driver_handle = geckodriver::run(stop_rx).await?; + + let driver_args = json!({ "moz:firefoxOptions": {"args": ["-headless"]} }); + + let client = ClientBuilder::native() + .capabilities(driver_args.as_object().unwrap().clone()) + .connect(&format!("http://{GECKODRIVER_HOST}")) + .await?; + + client.goto(LOGIN_URL).await?; + let login_button: Element = element_from_css(&client, ".fup-menu-login-container").await?; + sleep(Duration::from_millis(500)).await; + login_button.click().await?; + + let login_iframe = element_from_css(&client, r#"iframe[id^="piano""#).await?; + login_iframe.enter_frame().await?; + + let email_input = element_from_css(&client, r#"input[name="email"]"#).await?; + email_input.send_keys(&args.username).await?; + + let pw_input: Element = element_from_css(&client, r#"input[type="password"]"#).await?; + pw_input.send_keys(pw).await?; + + let submit = element_from_css(&client, r#"button[class="btn prime"]"#).await?; + submit.click().await?; + + let main_frame = client.window().await?; + client.switch_to_window(main_frame).await?; + + element_from_css(&client, ".fup-login-open.fup-button.fup-s-menu-login-open").await?; + + let cookies = client.get_all_cookies().await?; + let cobbled_cookies = cookies + .into_iter() + .map(|cookie| format!("{}={}", cookie.name(), cookie.value())) + .fold(String::new(), |mut acc, word| { + if !acc.is_empty() { + acc.push(';'); + } + acc.push_str(&word); + acc + }); + println!("{cobbled_cookies}"); + + client.close().await?; + + if let Some(driver_handle) = driver_handle { + let _ = stop_tx.send(()); + driver_handle.abort(); + } + + Ok(()) +} + +async fn element_from_css(client: &Client, selector: &str) -> Result { + Ok(client.wait().for_element(Locator::Css(selector)).await?) +} diff --git a/cookie/src/main.rs b/cookie/src/main.rs new file mode 100644 index 0000000..e199540 --- /dev/null +++ b/cookie/src/main.rs @@ -0,0 +1,24 @@ +use std::io::{self, Read}; + +use anyhow::Result; +use clap::Parser; +use nzz_cookie::cli::Config; + +#[tokio::main] +async fn main() -> Result<()> { + let args = Config::parse(); + + let pw = read_pw().unwrap_or_else(|_| panic!("Provide the password via stdin")); + nzz_cookie::run(args, &pw).await?; + Ok(()) +} + +/// Read password from stdin. +fn read_pw() -> Result { + let stdin = io::stdin(); + let mut buffer = String::new(); + + stdin.lock().read_to_string(&mut buffer)?; + let cookie = buffer.trim(); + Ok(cookie.to_string()) +} diff --git a/download/Cargo.lock b/download/Cargo.lock new file mode 100644 index 0000000..c03c291 --- /dev/null +++ b/download/Cargo.lock @@ -0,0 +1,1859 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cc" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.5", +] + +[[package]] +name = "clap" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "hyper" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4fe55fb7a772d59a5ff1dfbff4fe0258d19b89fec4b233e75d35d5d2316badc" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lopdf" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e775e4ee264e8a87d50a9efef7b67b4aa988cf94e75630859875fc347e6c872b" +dependencies = [ + "chrono", + "encoding_rs", + "flate2", + "itoa", + "linked-hash-map", + "log", + "md5", + "nom", + "rayon", + "time", + "weezl", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "nzz-download" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "lopdf", + "reqwest", + "serde", + "serde_json", + "tempfile", + "time", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "openssl" +version = "0.10.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.102.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/download/Cargo.toml b/download/Cargo.toml new file mode 100644 index 0000000..2982116 --- /dev/null +++ b/download/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "nzz-download" +version = "0.1.0" +edition = "2021" +license = { workspace = true } +authors = { workspace = true } +repository = { workspace = true } + +[dependencies] +anyhow = { workspace = true } +clap = { workspace = true } +lopdf = "0.32.0" +reqwest = { version = "0.12.5", features = ["json"] } +serde = { version = "1.0.203", features = ["derive"] } +serde_json = { workspace = true } +tempfile = "3.10.1" +tokio = { workspace = true } +time = { version = "0.3.36", features = ["macros", "serde", "formatting", "parsing" ] } +tracing = "0.1.40" +tracing-subscriber = "0.3.18" diff --git a/download/src/cli.rs b/download/src/cli.rs new file mode 100644 index 0000000..d68456a --- /dev/null +++ b/download/src/cli.rs @@ -0,0 +1,31 @@ +//! Cli interface. + +use std::path::PathBuf; + +use clap::Parser; +use time::error::Parse; +use time::Date; + +use crate::date::FORMAT; + +/// Parse a date prvided a a cli argument. +fn parse_date(input: &str) -> Result { + Date::parse(input, FORMAT) +} + +/// Download issues of the NZZ newspaper +#[derive(Parser)] +#[command(version, about, long_about = None, after_help = "Provide the authentication cookie from stdin.")] +pub struct Config { + /// Earliest issue to download (like 1780-12-31) + #[arg(short, long, env, value_parser=parse_date)] + pub from: Date, + + /// Latest issue to download (like 1780-12-31) + #[arg(short, long, env, value_parser=parse_date)] + pub to: Date, + + /// Output directory. + #[arg(short, long, env, default_value = "./nzz")] + pub output_dir: PathBuf, +} diff --git a/download/src/date.rs b/download/src/date.rs new file mode 100644 index 0000000..1c020df --- /dev/null +++ b/download/src/date.rs @@ -0,0 +1,27 @@ +//! Utilities for handling dates. + +use serde::{Deserialize, Deserializer, Serializer}; +use time::format_description::FormatItem; +use time::macros::format_description; +use time::Date; + +/// Date format for newspaper issues (YYYY-mm-dd) +pub const FORMAT: &[FormatItem<'_>] = format_description!("[year]-[month]-[day]"); + +/// Serialize a date to a String with serde. +pub fn serialize(value: &Date, serializer: S) -> Result +where + S: Serializer, +{ + let formated = value.format(&FORMAT).unwrap(); + serializer.serialize_str(&formated) +} + +/// Deserialize a String to a Date with serde. +pub fn deserialize<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let s: &str = Deserialize::deserialize(deserializer)?; + Date::parse(s, FORMAT).map_err(serde::de::Error::custom) +} diff --git a/download/src/download.rs b/download/src/download.rs new file mode 100644 index 0000000..2885cdc --- /dev/null +++ b/download/src/download.rs @@ -0,0 +1,52 @@ +//! Handle downloads of newspaper issues. + +use std::{ + fs::{self}, + io::{Cursor, Read}, + path::Path, +}; + +use anyhow::Result; +use tracing::{debug, info}; + +use crate::{nzz::Issue, pdf}; + +/// Download all pages of the provided `issues` and save them merged to the directory `output_dir`. +/// +/// Create `output_dir` if it does not exist. +pub async fn fetch(issues: Vec, output_dir: &Path) -> Result<()> { + debug!("ensuring {output_dir:?} exists"); + fs::create_dir_all(output_dir)?; + + for issue in issues { + info!("saving issue {}", issue.publication_date); + + let tmp_dir = tempfile::tempdir()?; + let mut pages = Vec::new(); + for (i, page) in issue.pages.into_iter().enumerate() { + debug!( + "fetching issue {}, page {}: {page}", + issue.publication_date, + i + 1 + ); + + let response = reqwest::Client::new().get(page).send().await?; + let mut content = Cursor::new(response.bytes().await?); + let mut page_data = Vec::new(); + content.read_to_end(&mut page_data)?; + + let tmp_page = tmp_dir.path().join(i.to_string()); + fs::write(&tmp_page, page_data)?; + pages.push(tmp_page); + } + + let issue_name = format!("nzz_{}.pdf", issue.publication_date); + let issue_path = output_dir.join(issue_name); + let issue_title = format!("NZZ {}", issue.publication_date); + + pdf::merge(pages, &issue_path, &issue_title)?; + debug!("issue {} saved", issue.publication_date); + } + + Ok(()) +} diff --git a/download/src/lib.rs b/download/src/lib.rs new file mode 100644 index 0000000..419724f --- /dev/null +++ b/download/src/lib.rs @@ -0,0 +1,19 @@ +//! A small utility to download issues of the NZZ newspaper. + +use anyhow::Result; + +use cli::Config; + +pub mod cli; +pub mod date; +pub mod download; +pub mod nzz; +pub mod pdf; + +/// Entry point to download nzz issues. +pub async fn run(args: Config, cookie: &str) -> Result<()> { + let issues = nzz::fetch(cookie, args.from, args.to).await?; + download::fetch(issues, &args.output_dir).await?; + + Ok(()) +} diff --git a/download/src/main.rs b/download/src/main.rs new file mode 100644 index 0000000..3c8b88c --- /dev/null +++ b/download/src/main.rs @@ -0,0 +1,29 @@ +use std::io::{self, Read}; + +use anyhow::Result; +use clap::Parser; +use nzz_download::cli::Config; + +#[tokio::main] +async fn main() -> Result<()> { + if std::env::var_os("RUST_LOG").is_none() { + std::env::set_var("RUST_LOG", "info"); + } + + tracing_subscriber::fmt::init(); + + let args = Config::parse(); + let cookie = read_cookie().expect("Provide the authentication cookie via stdin"); + + nzz_download::run(args, &cookie).await +} + +/// read authentication cookie from stdin. +fn read_cookie() -> Result { + let stdin = io::stdin(); + let mut buffer = String::new(); + + stdin.lock().read_to_string(&mut buffer)?; + let cookie = buffer.trim(); + Ok(cookie.to_string()) +} diff --git a/download/src/nzz.rs b/download/src/nzz.rs new file mode 100644 index 0000000..4b1f88a --- /dev/null +++ b/download/src/nzz.rs @@ -0,0 +1,198 @@ +//! Handle information relating to NZZ issues. + +use anyhow::Result; +use serde::{Deserialize, Serialize}; +use time::Date; +use tracing::info; + +const SEARCH_URL: &str = "https://zeitungsarchiv.nzz.ch/solr-epaper-search/1.0/search"; +const ISSUE_URL: &str = "https://zeitungsarchiv.nzz.ch/archive/1.0/getPages"; + +#[derive(Debug, Serialize, Deserialize)] +struct SearchData { + query: String, + offset: u32, + #[serde(rename = "sortField")] + sort_field: String, + #[serde(rename = "sortOrder")] + sort_order: String, + #[serde( + rename = "startDate", + serialize_with = "crate::date::serialize", + deserialize_with = "crate::date::deserialize" + )] + start_date: Date, + #[serde( + rename = "endDate", + serialize_with = "crate::date::serialize", + deserialize_with = "crate::date::deserialize" + )] + end_date: Date, +} + +#[derive(Debug, Serialize, Deserialize)] +struct SearchResult { + data: SearchInfo, +} + +#[derive(Debug, Serialize, Deserialize)] +struct SearchInfo { + total: u32, + offset: u32, + #[serde(rename = "pageSize")] + page_size: u32, + #[serde(rename = "resData")] + res_data: Vec, +} + +#[derive(Debug, Serialize, Deserialize)] +struct IssueData { + #[serde(rename = "editionId")] + edition_id: u32, + #[serde(rename = "pageNumber")] + page_nr: u32, + #[serde( + rename = "publicationDate", + deserialize_with = "crate::date::deserialize" + )] + publication_date: Date, +} + +#[derive(Debug, Serialize, Deserialize)] +struct PagesResult { + data: PagesInfo, +} + +#[derive(Debug, Serialize, Deserialize)] +struct PagesInfo { + pages: Vec, +} + +#[derive(Debug, Serialize, Deserialize)] +struct Page { + #[serde(rename = "pmPageNumber")] + page_nr: u32, + #[serde(rename = "pageDocUrl")] + doc: PageDoc, +} + +#[derive(Debug, Serialize, Deserialize)] +struct PageDoc { + #[serde(rename = "HIGHRES")] + link: PageHighRes, +} + +#[derive(Debug, Serialize, Deserialize)] +struct PageHighRes { + url: String, +} + +/// A single NZZ issue. +#[derive(Debug, Clone)] +pub struct Issue { + /// Date of publication. + pub publication_date: Date, + /// ordered vector of page urls in the issue. + pub pages: Vec, +} + +impl SearchData { + pub fn new(offset: u32, start_date: Date, end_date: Date) -> Self { + Self { + query: "".to_string(), + offset, + sort_field: "media_ts".to_string(), + sort_order: "desc".to_string(), + start_date, + end_date, + } + } +} + +/// Search all issues between `from` and `to` (inclusive) using an `offset` into the results. +async fn offset_search(offset: u32, cookie: &str, from: Date, to: Date) -> Result { + let data = SearchData::new(offset, from, to); + let result: SearchResult = reqwest::Client::new() + .post(SEARCH_URL) + .header("Cookie", cookie) + .json(&data) + .send() + .await? + .json() + .await?; + Ok(result.data) +} + +/// Only keep first pages, they are enough to get the edition id. +fn filter_issues(unfiltered_issues: Vec) -> Vec { + unfiltered_issues + .into_iter() + .filter(|info| info.page_nr == 1) + .collect() +} + +/// Search all issues between `from` and `to` (inclusive) respecting pagination. +async fn search(cookie: &str, from: Date, to: Date) -> Result> { + info!("looking for issues between {from} to {to}"); + let mut result = offset_search(0, cookie, from, to).await?; + let mut issues: Vec = filter_issues(result.res_data); + + while result.offset + result.page_size < result.total { + result = offset_search(result.offset + result.page_size, cookie, from, to).await?; + issues.extend(filter_issues(result.res_data)); + } + + Ok(issues) +} + +/// Fetch all page urls for the issue with eddition id `edition_id` and order them by page number. +async fn build_pages(cookie: &str, edition_id: u32) -> Result> { + let result: PagesResult = reqwest::Client::new() + .post(ISSUE_URL) + .header("Cookie", cookie) + .json(&serde_json::json!({ + "editionId": edition_id, + })) + .send() + .await? + .json() + .await?; + + let mut pages: Vec<(u32, String)> = result + .data + .pages + .into_iter() + .map(|page| (page.page_nr, page.doc.link.url)) + .collect(); + pages.sort_by(|a, b| a.0.cmp(&b.0)); + let pages = pages.into_iter().map(|page| page.1).collect(); + + Ok(pages) +} + +/// Fetch all page urls for `issues`. +async fn build_issues(cookie: &str, issues: Vec) -> Result> { + let mut hydrated_issues = Vec::new(); + for issue in issues { + info!( + "fetching page information for issue {}", + issue.publication_date + ); + let pages = build_pages(cookie, issue.edition_id).await?; + hydrated_issues.push(Issue { + publication_date: issue.publication_date, + pages, + }); + } + + Ok(hydrated_issues) +} + +/// Fetch issue information in the date range `from`- `to` (inclusive) using `cookie`for +/// authentication. +pub async fn fetch(cookie: &str, from: Date, to: Date) -> Result> { + let issues = search(cookie, from, to).await?; + let issues = build_issues(cookie, issues).await?; + + Ok(issues) +} diff --git a/download/src/pdf.rs b/download/src/pdf.rs new file mode 100644 index 0000000..b5135c9 --- /dev/null +++ b/download/src/pdf.rs @@ -0,0 +1,177 @@ +//! Manipulate pdf documents. + +use std::{ + collections::BTreeMap, + path::{Path, PathBuf}, +}; + +use anyhow::Result; +use lopdf::{Dictionary, Document, Object, ObjectId}; + +const METADATA_TITLE: &str = "Title"; +const METADATA_PRODUCER: &str = "Producer"; +const PDF_VERSION: &str = "1.8"; +const PRODUCER: &str = "NZZ Downloader"; + +/// Merge the provided pdfs in the `input` vector to one pdf in `out`, setting its title to +/// `title`. +/// +/// The code is from https://github.com/J-F-Liu/lopdf/blob/6b04581640e061bfeb39b585e50a7e9d102b8fe2/examples/merge.rs +/// with some modifications. I have no clue about PDF structure and this is still a bit of a +/// mistery to me. +pub fn merge(input: Vec, out: &Path, title: &str) -> Result<()> { + let mut max_id = 1; + let mut documents_pages = BTreeMap::new(); + let mut documents_objects = BTreeMap::new(); + let mut merged_doc = Document::with_version(PDF_VERSION); + + for pdf in input { + let mut doc = Document::load(pdf)?; + + doc.renumber_objects_with(max_id); + + max_id = doc.max_id + 1; + + documents_pages.extend( + doc.get_pages() + .into_values() + .map(|object_id| (object_id, doc.get_object(object_id).unwrap().to_owned())) + .collect::>(), + ); + documents_objects.extend(doc.objects); + } + + let mut catalog_object: Option<(ObjectId, Object)> = None; + let mut pages_object: Option<(ObjectId, Object)> = None; + + // Process all objects except "Page" type + for (object_id, object) in documents_objects.iter() { + // We have to ignore "Page" (as are processed later), "Outlines" and "Outline" objects + // All other objects should be collected and inserted into the main Document + match object.type_name().unwrap_or("") { + "Catalog" => { + // Collect a first "Catalog" object and use it for the future "Pages" + catalog_object = Some(( + if let Some((id, _)) = catalog_object { + id + } else { + *object_id + }, + object.clone(), + )); + } + "Pages" => { + // Collect and update a first "Pages" object and use it for the future "Catalog" + // We have also to merge all dictionaries of the old and the new "Pages" object + if let Ok(dictionary) = object.as_dict() { + let mut dictionary = dictionary.clone(); + if let Some((_, ref object)) = pages_object { + if let Ok(old_dictionary) = object.as_dict() { + dictionary.extend(old_dictionary); + } + } + + pages_object = Some(( + if let Some((id, _)) = pages_object { + id + } else { + *object_id + }, + Object::Dictionary(dictionary), + )); + } + } + "Page" => {} // Ignored, processed later and separately + "Outlines" => {} // Ignored, not supported yet + "Outline" => {} // Ignored, not supported yet + _ => { + merged_doc.max_id += 1; + merged_doc.objects.insert(*object_id, object.clone()); + } + } + } + + for (object_id, object) in documents_pages.iter() { + if let Ok(dictionary) = object.as_dict() { + let mut dictionary = dictionary.clone(); + dictionary.set("Parent", pages_object.as_ref().unwrap().0); + + merged_doc + .objects + .insert(*object_id, Object::Dictionary(dictionary)); + } + } + + let catalog_object = catalog_object.unwrap(); + let pages_object = pages_object.unwrap(); + + // Build a new "Pages" with updated fields + if let Ok(dictionary) = pages_object.1.as_dict() { + let mut dictionary = dictionary.clone(); + + // Set new pages count + dictionary.set("Count", documents_pages.len() as u32); + + // Set new "Kids" list (collected from documents pages) for "Pages" + dictionary.set( + "Kids", + documents_pages + .into_keys() + .map(Object::Reference) + .collect::>(), + ); + + merged_doc + .objects + .insert(pages_object.0, Object::Dictionary(dictionary)); + } + + // Build a new "Catalog" with updated fields + if let Ok(dictionary) = catalog_object.1.as_dict() { + let mut dictionary = dictionary.clone(); + dictionary.set("Pages", pages_object.0); + dictionary.remove(b"Outlines"); // Outlines not supported in merged PDFs + + merged_doc + .objects + .insert(catalog_object.0, Object::Dictionary(dictionary)); + } + + merged_doc.trailer.set("Root", catalog_object.0); + + set_metadata(METADATA_TITLE, title, &mut merged_doc); + set_metadata(METADATA_PRODUCER, PRODUCER, &mut merged_doc); + + // Update the max internal ID as wasn't updated before due to direct objects insertion + merged_doc.max_id = merged_doc.objects.len() as u32; + + // Reorder all new Document objects + merged_doc.renumber_objects(); + + merged_doc.compress(); + merged_doc.save(out)?; + + Ok(()) +} + +/// Set metadata `key` to `value`. +/// +/// Add the `Info trailer to the pdf document if it does not yet exist.` +fn set_metadata(key: &str, value: &str, doc: &mut Document) { + let info_dict_id = match doc.trailer.get(b"Info") { + Ok(&Object::Reference(id)) => id, + _ => { + // without this the following add_object call overwrites an existing + // object at max_id + doc.max_id += 1; + + let id = doc.add_object(Dictionary::new()); + doc.trailer.set("Info", Object::Reference(id)); + id + } + }; + + if let Some(Object::Dictionary(ref mut info_dict)) = doc.objects.get_mut(&info_dict_id) { + info_dict.set(key, Object::string_literal(value)); + } +} diff --git a/flake.lock b/flake.lock index f1b9252..6998b46 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,24 @@ { "nodes": { + "fenix": { + "inputs": { + "nixpkgs": "nixpkgs", + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1719901701, + "narHash": "sha256-7yztwIit3Ei6wySJDmRjhrP2VWwfoYifofwJPRXdjDQ=", + "owner": "nix-community", + "repo": "fenix", + "rev": "b7a33f57c6756e4c50f9c46189f8374841c764e8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -19,6 +38,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1719690277, + "narHash": "sha256-0xSej1g7eP2kaUF+JQp8jdyNmpmCJKRpO12mKl/36Kc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2741b4b489b55df32afac57bc4bfd220e8bf617e", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1719075281, "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", @@ -36,8 +71,26 @@ }, "root": { "inputs": { + "fenix": "fenix", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1719842244, + "narHash": "sha256-QMWaT8yN6AeyUpbLMakahwdZhiNdYvlUVOd07zbi7ss=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "1b283db47f8de1412c851c92bb4ce4ef039ff8ff", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" } }, "systems": { diff --git a/flake.nix b/flake.nix index 0bf17dc..72fa8d3 100644 --- a/flake.nix +++ b/flake.nix @@ -3,14 +3,21 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; + fenix.url = "github:nix-community/fenix"; }; outputs = - { nixpkgs, flake-utils, ... }: + { + nixpkgs, + flake-utils, + fenix, + ... + }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = import nixpkgs { inherit system; }; + rust = fenix.packages.${system}.stable; in { devShells.default = @@ -18,7 +25,9 @@ mkShell { buildInputs = [ geckodriver - nodejs_22 + rust.toolchain + cargo-deny + rust-analyzer ]; }; } diff --git a/nzz.js b/nzz.js deleted file mode 100755 index fd84830..0000000 --- a/nzz.js +++ /dev/null @@ -1,335 +0,0 @@ -#!/usr/bin/env node -/* Copyright (c) Sebastian Hugentobler 2024. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ - -const tmp = require("tmp"); -const path = require("path"); -const fs = require("fs"); -const { Builder, By, Capabilities, Key, until } = require("selenium-webdriver"); -const fx = require("selenium-webdriver/firefox"); -const yargs = require("yargs/yargs"); -const { hideBin } = require("yargs/helpers"); - -const URL = "https://zeitungsarchiv.nzz.ch/"; -const WAIT_TIMEOUT = 10000; -const TIMEOUT_MSG = `Timeout after ${WAIT_TIMEOUT / 1000} seconds.`; -const SEARCH_WAIT_TIMEOUT = 15000; -const SEARCH_TIMEOUT_MSG = `Timeout after ${SEARCH_WAIT_TIMEOUT / 1000} seconds.`; -const DOWNLOAD_TIMEOUT = 20000; -const USER_AGENT = - "Mozilla/5.0 (X11; Linux x86_64; rv:127.0) Gecko/20100101 Firefox/127.0"; - -Date.prototype.isoDate = function () { - return `${this.getFullYear()}-${String(this.getMonth() + 1).padStart(2, "0")}-${String(this.getDate()).padStart(2, "0")}`; -}; - -Date.prototype.nzzDate = function () { - return `${String(this.getDate()).padStart(2, "0")}.${String(this.getMonth() + 1).padStart(2, "0")}.${this.getFullYear()}`; -}; - -Date.prototype.addDays = function (days) { - const date = new Date(this.valueOf()); - date.setDate(date.getDate() + days); - return date; -}; - -function sleep(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -/** - * Wait for an in progress download to finish and move the file to the correct - * destination. - * - * @param {fs.PathLike} tmpDir Download directory. - * @param {fs.PathLike} outDir Final destination directory. - * @param {Date} date Date of the issue. - */ -function moveDownload(tmpDir, outDir, date) { - return new Promise((resolve) => { - const srcFile = path.join( - tmpDir, - `Gesamtausgabe_NZZ_-_Neue_Zürcher_Zeitung_${date.isoDate()}.pdf`, - ); - - if (!fs.existsSync(srcFile)) { - setTimeout(() => moveDownload(tmpDir, outDir, date), 2000); - } - - const destFile = path.join(outDir, `${date.isoDate()}.pdf`); - try { - fs.copyFileSync(srcFile, destFile); - } catch { - // this means we tried to download a wrong issue - } - resolve(); - }); -} - -/** - * Enter the dates of the issue to download. - * - * @param {WebDriver} driver Selenium driver to use. - * @param {Date} date Date of the issue. - */ -async function enterDate(driver, date) { - const dateString = date.nzzDate(); - - const startDate = await driver.wait( - until.elementLocated(By.css("input.fup-s-date-start")), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await driver.wait(until.elementIsVisible(startDate), WAIT_TIMEOUT); - await driver.actions().scroll(0, 0, 0, 0, startDate).perform(); - await startDate.clear(); - await startDate.sendKeys(dateString); - - const endDate = await driver.wait( - until.elementLocated(By.css("input.fup-s-date-end")), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await endDate.clear(); - await endDate.sendKeys(dateString + Key.ENTER); - await sleep(500); -} - -/** - * Login to the NZZ archive. - * - * @param {WebDriver} driver Selenium driver to use. - * @param {String} user Username for the login. - * @param {String} password Password for the user. - */ -async function login(driver, user, password) { - console.log("logging in..."); - - await driver.get(URL); - await sleep(500); - - const loginButton = await driver.findElement( - By.css(".fup-menu-login-container"), - ); - await driver.wait(until.elementIsVisible(loginButton), WAIT_TIMEOUT); - await loginButton.click(); - - const iframe = await driver.findElement(By.css('iframe[id^="piano"]')); - await driver.switchTo().frame(iframe); - - const emailField = await driver.wait( - until.elementLocated(By.css('input[name="email"]')), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - - await driver.wait(until.elementIsVisible(emailField), WAIT_TIMEOUT); - await emailField.sendKeys(user); - - const pwField = await driver.wait( - until.elementLocated(By.css('input[type="password"]')), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await pwField.sendKeys(password); - - const submitButton = await driver.wait( - until.elementLocated(By.css('button[class="btn prime"]')), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await driver.wait(until.elementIsVisible(submitButton), WAIT_TIMEOUT); - await submitButton.click(); - await driver.switchTo().defaultContent(); - await sleep(500); - - const loginMenu = await driver.wait( - until.elementLocated( - By.css(".fup-login-open.fup-button.fup-s-menu-login-open"), - ), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await driver.wait(until.elementIsVisible(loginMenu), WAIT_TIMEOUT); -} - -/** - * Start the download of a full issue. - * - * @param {WebDriver} driver Selenium driver to use. - */ -async function download(driver) { - const menu = await driver.wait( - until.elementLocated(By.css(".fup-menu-item-download")), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await menu.click(); - - const download = await driver.wait( - until.elementLocated(By.css(".fup-s-menu-download-edition-confirmation")), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await download.click(); - - const loadingMask = await driver.wait( - until.elementLocated(By.css(".fup-loading-mask")), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await driver.wait(until.elementIsVisible(loadingMask), DOWNLOAD_TIMEOUT); - await driver.wait(until.stalenessOf(loadingMask), DOWNLOAD_TIMEOUT); - - const back = await driver.wait( - until.elementLocated(By.css(".fup-s-menu-back")), - WAIT_TIMEOUT, - TIMEOUT_MSG, - ); - await driver.wait(until.elementIsVisible(back), WAIT_TIMEOUT); - // back.click(); - await sleep(500); -} - -/** - * Download all issues in a certain time span. - * - * @param {WebDriver} driver Selenium driver to use. - * @param {Date} from Earliest issue to download. - * @param {Date} to Latest issue to download. - * @param {fs.PathLike} tmpDir Download directory. - * @param {fs.PathLike} outDir Final destination directory. - */ -async function findIssues(driver, from, to, tmpDir, outDir) { - from = from.addDays(-1); - - while (from.toDateString() !== to.toDateString()) { - from = from.addDays(1); - console.log(`checking ${from.isoDate()}...`); - - await enterDate(driver, from); - - try { - const articles = await driver.wait( - until.elementsLocated(By.css(".fup-archive-result-item-article-title")), - SEARCH_WAIT_TIMEOUT, - SEARCH_TIMEOUT_MSG, - ); - - await articles[0].click(); - await sleep(500); - - await download(driver); - console.log(`\tdownloading...`); - await sleep(500); - - // do this in the background - moveDownload(tmpDir, outDir, from); - - await driver.get(URL); - } catch { - // this means there is no issue on the searched date - // move along with the next date - console.log(`\tno issues`); - } - } -} - -/** - * Setup the headless browser and download all issues in the specified time span. - * - * @param {Date} from Earliest issue to download. - * @param {Date} to Latest issue to download. - * @param {String} user Username for the nzz archive. - * @param {String} password Password for the user. - * @param {fs.PathLike} outDir Final destination directory. - */ -async function run(from, to, user, password, outDir) { - if (!fs.existsSync(outDir)) { - fs.mkdirSync(outDir); - } - - const tmpDir = tmp.dirSync(); - console.log(`downloading to ${outDir} (tmp dir: ${tmpDir.name})...`); - - const fxOptions = new fx.Options() - .addArguments("-headless") - .setPreference("pdfjs.disabled", true) - .setPreference("general.useragent.override", USER_AGENT) - .setPreference("browser.helperApps.neverAsk.openFile", "application/pdf") - .setPreference("browser.download.folderList", 2) - .setPreference("browser.download.manager.showWhenStartingout", false) - .setPreference("browser.download.dir", tmpDir.name) - .setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); - - const caps = new Capabilities(); - caps.setPageLoadStrategy("normal"); - - const driver = await new Builder() - .withCapabilities(caps) - .forBrowser("firefox") - .setFirefoxOptions(fxOptions) - .build(); - - try { - await login(driver, user, password); - await findIssues(driver, from, to, tmpDir.name, outDir); - await sleep(1000); - } finally { - await fs.rm(tmpDir.name, { recursive: true }, (e) => { - if (e) { - console.error(`failed to remove tmp directory: ${e}`); - } - }); - await driver.quit(); - } -} - -/** - * Parse arguments and start the downloading of the issues. - */ -(function init() { - const now = new Date(); - const nowString = now.isoDate(); - - const argv = yargs(hideBin(process.argv)) - .usage( - "Usage: $0 -f [date] -t [date] -o [path] -u [usernane] -p [password]", - ) - .demandOption(["u", "p"]) - .help("h") - .describe("f", "Earliest issue to download.") - .describe("t", "Latest issue to download.") - .describe("o", "Download directory.") - .describe("u", "Username for the nzz archive.") - .describe("p", "Password for the user.") - .alias("h", "help") - .alias("f", "from") - .alias("t", "to") - .alias("o", "out") - .alias("u", "user") - .alias("p", "password") - .default("f", nowString) - .default("t", nowString) - .default("o", "./nzz") - .epilog("Copyright (c) Sebastian Hugentobler 2024") - .example( - "$0 -u 'myuser@example.com' -p 'mypassword' -f 1780-01-01 -t 1780-02-30", - 'Download all existing issues from 01-01-1780 until 30-02-1780 to the default directory "./nzz"', - ).argv; - - const from = new Date(argv.from); - const to = new Date(argv.to); - - if (from > to) { - console.error('"from" date must be before "to" date'); - process.exit(1); - } - - run(from, to, argv.user, argv.password, argv.out); -})(); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9627b2c..0000000 --- a/package-lock.json +++ /dev/null @@ -1,528 +0,0 @@ -{ - "name": "nzz-downloader", - "version": "0.1.3", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "nzz-downloader", - "version": "0.1.3", - "license": "MPL-2.0", - "dependencies": { - "selenium-webdriver": "4.22.0", - "tmp": "0.2.3", - "yargs": "17.7.2" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/selenium-webdriver": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.22.0.tgz", - "integrity": "sha512-GNbrkCHmy249ai885wgXqTfqL2lZnclUH/P8pwTDIqzyFxU3YhDiN7p/c9tMFA4NhgRdEBO2QCG+CWmG7xr/Mw==", - "dependencies": { - "jszip": "^3.10.1", - "tmp": "^0.2.3", - "ws": ">=8.16.0" - }, - "engines": { - "node": ">= 14.21.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - } - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "selenium-webdriver": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.22.0.tgz", - "integrity": "sha512-GNbrkCHmy249ai885wgXqTfqL2lZnclUH/P8pwTDIqzyFxU3YhDiN7p/c9tMFA4NhgRdEBO2QCG+CWmG7xr/Mw==", - "requires": { - "jszip": "^3.10.1", - "tmp": "^0.2.3", - "ws": ">=8.16.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "requires": {} - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 0c6de55..0000000 --- a/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "nzz-downloader", - "version": "0.1.3", - "description": "", - "main": "nzz.js", - "author": "Sebastian Hugentobler", - "license": "MPL-2.0", - "dependencies": { - "selenium-webdriver": "4.22.0", - "tmp": "0.2.3", - "yargs": "17.7.2" - } -} diff --git a/screenshot.jpg b/screenshot.jpg index 2b74f5c8370b1a8e3d6626f7d0f968f708da5561..18c91e83e6925ea31876646227999a003a02f302 100644 GIT binary patch literal 187385 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⪻*WD3+puLwJy75YEnr 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/iI8OB5f? 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 Z`N*kw<2RMZJUNbxz7N9yDGcc6|Jeihbou}Q