From 0a115b220ae54289500b941a6ce370012d500d74 Mon Sep 17 00:00:00 2001 From: Kevin van Zonneveld Date: Wed, 13 Nov 2024 10:16:33 +0100 Subject: [PATCH] Remove enrich-tweet (#64) * Remove enrich-tweet * Update .yarnrc.yml --- .yarnrc.yml | 2 +- README.md | 1 - packages/enrich-tweet/LICENSE.md | 661 ------------------ packages/enrich-tweet/README.md | 3 - packages/enrich-tweet/package.json | 33 - ...richTweet.fixture-1082897509528281089.json | 118 ---- ...chTweet.fixture-1087761082247204900-2.json | 118 ---- ...richTweet.fixture-1087761082247204900.json | 182 ----- ...enrichTweet.fixture-16955922978971648.json | 110 --- ...enrichTweet.fixture-17139572739674112.json | 87 --- ...nrichTweet.fixture-389922139408592896.json | 104 --- ...nrichTweet.fixture-558414704024899584.json | 153 ---- ...nrichTweet.fixture-588610060810526720.json | 204 ------ ...nrichTweet.fixture-647088863777832961.json | 169 ----- packages/enrich-tweet/src/enrichTweet.test.ts | 101 --- packages/enrich-tweet/src/enrichTweet.ts | 95 --- packages/enrich-tweet/tsconfig.json | 8 - yarn.lock | 189 +---- 18 files changed, 2 insertions(+), 2336 deletions(-) delete mode 100644 packages/enrich-tweet/LICENSE.md delete mode 100644 packages/enrich-tweet/README.md delete mode 100644 packages/enrich-tweet/package.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-1082897509528281089.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900-2.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-16955922978971648.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-17139572739674112.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-389922139408592896.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-558414704024899584.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-588610060810526720.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.fixture-647088863777832961.json delete mode 100644 packages/enrich-tweet/src/enrichTweet.test.ts delete mode 100644 packages/enrich-tweet/src/enrichTweet.ts delete mode 100644 packages/enrich-tweet/tsconfig.json diff --git a/.yarnrc.yml b/.yarnrc.yml index dc213a6..d6968a5 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -2,4 +2,4 @@ enableGlobalCache: true nodeLinker: node-modules -npmRegistryServer: "https://registry.npmjs.org" +npmRegistryServer: 'https://registry.npmjs.org' diff --git a/README.md b/README.md index feaf8dd..90ead38 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ While the world _can_ consume the modules, this is mostly to make life easier fo | :--------------------------------- | :--------------------------------------------------------------------------- | :-------------------------------------------------------------------------- | | `@transloadit/abbr` | `abbr('Lorem ipsum dolor sit amet', 10, ' .. '))` | `'Lor .. met'` | | `@transloadit/analyze-step` | `analyzeStep({ robot: '/image/resize', width: '75', height: '75' }, ROBOTS)` | `'Resize images to 75×75'` | -| `@transloadit/enrich-tweet` | `await enrichTweet(TWEET)` | The text of the tweet, linked, short URLs expanded | | `@transloadit/file-exists` | `await fileExists('foo.jpg')` | `true` | | `@transloadit/format-duration-ms` | `formatDurationMs(10000000)` | `'2h46m40s'` | | `@transloadit/post` | `$ post [subdir]` | Asks questions and creates a markdown post, by default in subdir `./_posts` | diff --git a/packages/enrich-tweet/LICENSE.md b/packages/enrich-tweet/LICENSE.md deleted file mode 100644 index 162676c..0000000 --- a/packages/enrich-tweet/LICENSE.md +++ /dev/null @@ -1,661 +0,0 @@ - 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/packages/enrich-tweet/README.md b/packages/enrich-tweet/README.md deleted file mode 100644 index 0f8dc28..0000000 --- a/packages/enrich-tweet/README.md +++ /dev/null @@ -1,3 +0,0 @@ -> Even though this module is publicly accessible, we do not recommend using it in projects outside of [Transloadit](https://transloadit.com). We won't make any guarantees about its workings and can change things at any time, we won't adhere strictly to SemVer. - -> This module is maintained from a monorepo called [monolib](https://github.com/transloadit/monolib). diff --git a/packages/enrich-tweet/package.json b/packages/enrich-tweet/package.json deleted file mode 100644 index 12610ad..0000000 --- a/packages/enrich-tweet/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@transloadit/enrich-tweet", - "version": "0.4.4", - "repository": { - "type": "git", - "url": "git://github.com/transloadit/monolib.git", - "directory": "packages/enrich-tweet" - }, - "license": "AGPL-3.0-only", - "main": "dist/enrichTweet.js", - "types": "dist/enrichTweet.d.ts", - "directories": { - "lib": "dist", - "test": "dist" - }, - "scripts": { - "test": "echo \"Error: run tests from root\" && exit 1", - "tsc": "tsc --build --clean && tsc --build" - }, - "dependencies": { - "get-urls": "^12.1.0", - "nan": "^2.19.0", - "tall": "^8.0.0", - "twitter-text": "^3.1.0" - }, - "devDependencies": { - "@types/twitter-text": "^3.1.10" - }, - "publishConfig": { - "access": "public" - }, - "gitHead": "714bbf75e54490ceb20bea49a728230668d456c1" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-1082897509528281089.json b/packages/enrich-tweet/src/enrichTweet.fixture-1082897509528281089.json deleted file mode 100644 index 7671967..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-1082897509528281089.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "created_at": "Wed Jan 09 07:11:00 +0000 2019", - "id": 1082897509528281100, - "id_str": "1082897509528281089", - "full_text": "Just realized how @tus_io and @uppy_io are a perfect example of @transloadit commoditizing their complements: https://t.co/G0MnOvALHR", - "truncated": false, - "display_text_range": [0, 133], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "tus_io", - "name": "tus.io", - "id": 1359544170, - "id_str": "1359544170", - "indices": [18, 25] - }, - { - "screen_name": "uppy_io", - "name": "Uppy", - "id": 4307299888, - "id_str": "4307299888", - "indices": [30, 38] - }, - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [64, 76] - } - ], - "urls": [ - { - "url": "https://t.co/G0MnOvALHR", - "expanded_url": "https://www.gwern.net/Complement", - "display_url": "gwern.net/Complement", - "indices": [110, 133] - } - ] - }, - "source": "Twitter Web Client", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 15592095, - "id_str": "15592095", - "name": "Manuel Kießling", - "screen_name": "manuelkiessling", - "location": "Cologne, Germany", - "description": "The results you deserve will follow from the quality of your execution.", - "url": "http://t.co/7b3kuHSb2b", - "entities": { - "url": { - "urls": [ - { - "url": "http://t.co/7b3kuHSb2b", - "expanded_url": "http://manuel.kiessling.net", - "display_url": "manuel.kiessling.net", - "indices": [0, 22] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 2135, - "friends_count": 21, - "listed_count": 120, - "created_at": "Fri Jul 25 01:14:08 +0000 2008", - "favourites_count": 4544, - "utc_offset": null, - "time_zone": null, - "geo_enabled": true, - "verified": false, - "statuses_count": 6669, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "2D6AB0", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/444835372476805120/B2p6vTsO_normal.jpeg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/444835372476805120/B2p6vTsO_normal.jpeg", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/15592095/1522741576", - "profile_link_color": "7E91BB", - "profile_sidebar_border_color": "C0DEED", - "profile_sidebar_fill_color": "999999", - "profile_text_color": "333333", - "profile_use_background_image": false, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": false, - "retweeted": false, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900-2.json b/packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900-2.json deleted file mode 100644 index bd7238c..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900-2.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "created_at": "Wed Jan 09 07:11:00 +0000 2019", - "id": 1082897509528281100, - "id_str": "1082897509528281089", - "full_text": "https://twitter.com/TLStatus/status/1365465781467836417", - "truncated": false, - "display_text_range": [0, 133], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "tus_io", - "name": "tus.io", - "id": 1359544170, - "id_str": "1359544170", - "indices": [18, 25] - }, - { - "screen_name": "uppy_io", - "name": "Uppy", - "id": 4307299888, - "id_str": "4307299888", - "indices": [30, 38] - }, - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [64, 76] - } - ], - "urls": [ - { - "url": "https://t.co/G0MnOvALHR", - "expanded_url": "https://www.gwern.net/Complement", - "display_url": "gwern.net/Complement", - "indices": [110, 133] - } - ] - }, - "source": "Twitter Web Client", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 15592095, - "id_str": "15592095", - "name": "Manuel Kießling", - "screen_name": "manuelkiessling", - "location": "Cologne, Germany", - "description": "The results you deserve will follow from the quality of your execution.", - "url": "http://t.co/7b3kuHSb2b", - "entities": { - "url": { - "urls": [ - { - "url": "http://t.co/7b3kuHSb2b", - "expanded_url": "http://manuel.kiessling.net", - "display_url": "manuel.kiessling.net", - "indices": [0, 22] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 2135, - "friends_count": 21, - "listed_count": 120, - "created_at": "Fri Jul 25 01:14:08 +0000 2008", - "favourites_count": 4544, - "utc_offset": null, - "time_zone": null, - "geo_enabled": true, - "verified": false, - "statuses_count": 6669, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "2D6AB0", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/444835372476805120/B2p6vTsO_normal.jpeg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/444835372476805120/B2p6vTsO_normal.jpeg", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/15592095/1522741576", - "profile_link_color": "7E91BB", - "profile_sidebar_border_color": "C0DEED", - "profile_sidebar_fill_color": "999999", - "profile_text_color": "333333", - "profile_use_background_image": false, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": false, - "retweeted": false, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900.json b/packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900.json deleted file mode 100644 index b1ac545..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-1087761082247204900.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "created_at": "Tue Jan 22 17:17:06 +0000 2019", - "id": 1087761082247204900, - "id_str": "1087761082247204864", - "full_text": "In the age of cloud, @transloadit shows great balance of leaning on larger clouds while managing infra in-house @kvz \nhttps://t.co/uI1G5zZ3PF https://t.co/hEwN8eIllK", - "truncated": false, - "display_text_range": [0, 141], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [21, 33] - }, - { - "screen_name": "kvz", - "name": "Kev van Zonneveld", - "id": 10664812, - "id_str": "10664812", - "indices": [112, 116] - } - ], - "urls": [ - { - "url": "https://t.co/uI1G5zZ3PF", - "expanded_url": "https://buff.ly/2QQWF4R", - "display_url": "buff.ly/2QQWF4R", - "indices": [118, 141] - } - ], - "media": [ - { - "id": 1087761079520976900, - "id_str": "1087761079520976896", - "indices": [142, 165], - "media_url": "http://pbs.twimg.com/media/DxiA8ElX4AA4hQ6.jpg", - "media_url_https": "https://pbs.twimg.com/media/DxiA8ElX4AA4hQ6.jpg", - "url": "https://t.co/hEwN8eIllK", - "display_url": "pic.twitter.com/hEwN8eIllK", - "expanded_url": "https://twitter.com/stratusupdate/status/1087761082247204864/photo/1", - "type": "photo", - "sizes": { - "thumb": { - "w": 150, - "h": 150, - "resize": "crop" - }, - "large": { - "w": 1442, - "h": 956, - "resize": "fit" - }, - "small": { - "w": 680, - "h": 451, - "resize": "fit" - }, - "medium": { - "w": 1200, - "h": 796, - "resize": "fit" - } - } - } - ] - }, - "extended_entities": { - "media": [ - { - "id": 1087761079520976900, - "id_str": "1087761079520976896", - "indices": [142, 165], - "media_url": "http://pbs.twimg.com/media/DxiA8ElX4AA4hQ6.jpg", - "media_url_https": "https://pbs.twimg.com/media/DxiA8ElX4AA4hQ6.jpg", - "url": "https://t.co/hEwN8eIllK", - "display_url": "pic.twitter.com/hEwN8eIllK", - "expanded_url": "https://twitter.com/stratusupdate/status/1087761082247204864/photo/1", - "type": "photo", - "sizes": { - "thumb": { - "w": 150, - "h": 150, - "resize": "crop" - }, - "large": { - "w": 1442, - "h": 956, - "resize": "fit" - }, - "small": { - "w": 680, - "h": 451, - "resize": "fit" - }, - "medium": { - "w": 1200, - "h": 796, - "resize": "fit" - } - } - } - ] - }, - "source": "Buffer", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 1044600776709066800, - "id_str": "1044600776709066754", - "name": "stratusupdate", - "screen_name": "stratusupdate", - "location": "The Cloud", - "description": "Keep your head in the cloud with weekly curated cloud native news", - "url": "https://t.co/totJzSvzzp", - "entities": { - "url": { - "urls": [ - { - "url": "https://t.co/totJzSvzzp", - "expanded_url": "https://www.manifold.co/stratusupdate", - "display_url": "manifold.co/stratusupdate", - "indices": [0, 23] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 91, - "friends_count": 132, - "listed_count": 3, - "created_at": "Tue Sep 25 14:53:27 +0000 2018", - "favourites_count": 270, - "utc_offset": null, - "time_zone": null, - "geo_enabled": false, - "verified": false, - "statuses_count": 98, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "000000", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/1055076856096047104/8CtR0pAq_normal.jpg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/1055076856096047104/8CtR0pAq_normal.jpg", - "profile_link_color": "5850A6", - "profile_sidebar_border_color": "000000", - "profile_sidebar_fill_color": "000000", - "profile_text_color": "000000", - "profile_use_background_image": false, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": false, - "retweeted": false, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-16955922978971648.json b/packages/enrich-tweet/src/enrichTweet.fixture-16955922978971648.json deleted file mode 100644 index 0a53691..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-16955922978971648.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "created_at": "Mon Dec 20 20:39:41 +0000 2010", - "id": 16955922978971648, - "id_str": "16955922978971648", - "full_text": "Hey @YouTube, @vimeo and other video upload/sharing sites, offer @transloadit a lot of money, now, quick http://bit.ly/fkWS88", - "truncated": false, - "display_text_range": [0, 125], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "YouTube", - "name": "YouTube at 🏠", - "id": 10228272, - "id_str": "10228272", - "indices": [4, 12] - }, - { - "screen_name": "Vimeo", - "name": "Vimeo", - "id": 14718218, - "id_str": "14718218", - "indices": [14, 20] - }, - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [65, 77] - } - ], - "urls": [] - }, - "source": "Twitter Web Client", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 14406428, - "id_str": "14406428", - "name": "Neil Crookes", - "screen_name": "neilcrookes", - "location": "Southampton, UK", - "description": "Tech Director @ KONG - easyCommerce The free, quick & simple way to create a professional online store and grow your eCommerce business", - "url": "http://t.co/jCdCsMtNQa", - "entities": { - "url": { - "urls": [ - { - "url": "http://t.co/jCdCsMtNQa", - "expanded_url": "http://trykong.com", - "display_url": "trykong.com", - "indices": [0, 22] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 660, - "friends_count": 370, - "listed_count": 58, - "created_at": "Wed Apr 16 09:43:17 +0000 2008", - "favourites_count": 179, - "utc_offset": null, - "time_zone": null, - "geo_enabled": true, - "verified": false, - "statuses_count": 2051, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "000000", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme9/bg.gif", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme9/bg.gif", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/656605763528364033/cx8rWbY-_normal.jpg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/656605763528364033/cx8rWbY-_normal.jpg", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/14406428/1445382267", - "profile_link_color": "000000", - "profile_sidebar_border_color": "000000", - "profile_sidebar_fill_color": "000000", - "profile_text_color": "000000", - "profile_use_background_image": false, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "regular" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 1, - "favorited": false, - "retweeted": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-17139572739674112.json b/packages/enrich-tweet/src/enrichTweet.fixture-17139572739674112.json deleted file mode 100644 index 1680450..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-17139572739674112.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "created_at": "Tue Dec 21 08:49:27 +0000 2010", - "id": 17139572739674112, - "id_str": "17139572739674112", - "full_text": "Encode your videos faster ! nice piece of technology : http://bit.ly/hCWqza #video #encoding", - "truncated": false, - "display_text_range": [0, 92], - "entities": { - "hashtags": [ - { - "text": "video", - "indices": [76, 82] - }, - { - "text": "encoding", - "indices": [83, 92] - } - ], - "symbols": [], - "user_mentions": [], - "urls": [] - }, - "source": "TweetDeck", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 16541463, - "id_str": "16541463", - "name": "aassouad", - "screen_name": "aassouad", - "location": "Paris", - "description": "Geek, Web enthusiast, and food lover :-p", - "url": null, - "entities": { - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 181, - "friends_count": 181, - "listed_count": 9, - "created_at": "Wed Oct 01 07:40:10 +0000 2008", - "favourites_count": 4, - "utc_offset": null, - "time_zone": null, - "geo_enabled": true, - "verified": false, - "statuses_count": 1711, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "000000", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme12/bg.gif", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme12/bg.gif", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/1179220268/21d5d56966c78c435711273cd890317c2.p_normal.jpg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/1179220268/21d5d56966c78c435711273cd890317c2.p_normal.jpg", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/16541463/1399971442", - "profile_link_color": "2FC2EF", - "profile_sidebar_border_color": "181A1E", - "profile_sidebar_fill_color": "29272F", - "profile_text_color": "B79595", - "profile_use_background_image": true, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": false, - "retweeted": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-389922139408592896.json b/packages/enrich-tweet/src/enrichTweet.fixture-389922139408592896.json deleted file mode 100644 index 64968e3..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-389922139408592896.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "created_at": "Tue Oct 15 01:14:17 +0000 2013", - "id": 389922139408592900, - "id_str": "389922139408592896", - "full_text": "Don't understand why anyone messes with carrierwave / paperclip / whatever anymore. @transloadit is just too easy. https://t.co/PbpdV158OP", - "truncated": false, - "display_text_range": [0, 138], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [84, 96] - } - ], - "urls": [ - { - "url": "https://t.co/PbpdV158OP", - "expanded_url": "https://transloadit.com/r/wGN", - "display_url": "transloadit.com/r/wGN", - "indices": [115, 138] - } - ] - }, - "source": "Twitter for Websites", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 12283552, - "id_str": "12283552", - "name": "Brian Culler", - "screen_name": "brianculler", - "location": "Atlanta", - "description": "VP of Engineering @SalesLoft", - "url": "https://t.co/fuQWkBmILZ", - "entities": { - "url": { - "urls": [ - { - "url": "https://t.co/fuQWkBmILZ", - "expanded_url": "http://www.brianculler.com", - "display_url": "brianculler.com", - "indices": [0, 23] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 372, - "friends_count": 117, - "listed_count": 36, - "created_at": "Tue Jan 15 16:39:50 +0000 2008", - "favourites_count": 99, - "utc_offset": null, - "time_zone": null, - "geo_enabled": true, - "verified": false, - "statuses_count": 1465, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "FFFFFF", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_tile": true, - "profile_image_url": "http://pbs.twimg.com/profile_images/507661986037891072/cxISNYCP_normal.png", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/507661986037891072/cxISNYCP_normal.png", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/12283552/1409848159", - "profile_link_color": "0000FF", - "profile_sidebar_border_color": "87BC44", - "profile_sidebar_fill_color": "E0FF92", - "profile_text_color": "000000", - "profile_use_background_image": true, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 0, - "favorite_count": 0, - "favorited": false, - "retweeted": false, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-558414704024899584.json b/packages/enrich-tweet/src/enrichTweet.fixture-558414704024899584.json deleted file mode 100644 index 1df8eeb..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-558414704024899584.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "created_at": "Fri Jan 23 00:03:34 +0000 2015", - "id": 558414704024899600, - "id_str": "558414704024899584", - "full_text": "Thank the sponsors! http://t.co/4GKSCDuwLb @polymer @BloombergBeta @Firebase @MaxCDNDeveloper @sprintly @dropboxapi @codeship @transloadit", - "truncated": false, - "display_text_range": [0, 138], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "polymer", - "name": "Polymer Project", - "id": 1425993918, - "id_str": "1425993918", - "indices": [43, 51] - }, - { - "screen_name": "BloombergBeta", - "name": "Bloomberg Beta", - "id": 1416562236, - "id_str": "1416562236", - "indices": [52, 66] - }, - { - "screen_name": "Firebase", - "name": "Firebase", - "id": 447644824, - "id_str": "447644824", - "indices": [67, 76] - }, - { - "screen_name": "MaxCDNDeveloper", - "name": "Grace", - "id": 770768289005969400, - "id_str": "770768289005969408", - "indices": [77, 93] - }, - { - "screen_name": "sprintly", - "name": "sprint.ly", - "id": 127383413, - "id_str": "127383413", - "indices": [94, 103] - }, - { - "screen_name": "dropboxapi", - "name": "Dropbox API", - "id": 141247659, - "id_str": "141247659", - "indices": [104, 115] - }, - { - "screen_name": "CodeShip", - "name": "CodeShip", - "id": 220165520, - "id_str": "220165520", - "indices": [116, 125] - }, - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [126, 138] - } - ], - "urls": [ - { - "url": "http://t.co/4GKSCDuwLb", - "expanded_url": "http://2015.staticshowdown.com/sponsors", - "display_url": "2015.staticshowdown.com/sponsors", - "indices": [20, 42] - } - ] - }, - "source": "Tweetbot for Mac", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 2157683828, - "id_str": "2157683828", - "name": "Static Showdown", - "screen_name": "staticshowdown", - "location": "", - "description": "A worldwide 48-hour hackathon for progressive web apps. Coming Feb. 20-21, 2016!", - "url": "https://t.co/UJA0EGUSwD", - "entities": { - "url": { - "urls": [ - { - "url": "https://t.co/UJA0EGUSwD", - "expanded_url": "https://staticshowdown.com/", - "display_url": "staticshowdown.com", - "indices": [0, 23] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 514, - "friends_count": 52, - "listed_count": 10, - "created_at": "Sat Oct 26 23:03:18 +0000 2013", - "favourites_count": 39, - "utc_offset": null, - "time_zone": null, - "geo_enabled": false, - "verified": false, - "statuses_count": 403, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "455A64", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/690272352379088896/516xzEaE_normal.png", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/690272352379088896/516xzEaE_normal.png", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/2157683828/1453408716", - "profile_link_color": "E91E63", - "profile_sidebar_border_color": "000000", - "profile_sidebar_fill_color": "DDEEF6", - "profile_text_color": "333333", - "profile_use_background_image": true, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 1, - "favorite_count": 1, - "favorited": false, - "retweeted": false, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-588610060810526720.json b/packages/enrich-tweet/src/enrichTweet.fixture-588610060810526720.json deleted file mode 100644 index 43a57b0..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-588610060810526720.json +++ /dev/null @@ -1,204 +0,0 @@ -{ - "created_at": "Thu Apr 16 07:49:09 +0000 2015", - "id": 588610060810526700, - "id_str": "588610060810526720", - "full_text": "Trying to process/thumbnail about 600k avatars in a few hours. Thank you @transloadit @Prezly http://t.co/6HIHbuiMbh", - "truncated": false, - "display_text_range": [0, 116], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [73, 85] - }, - { - "screen_name": "Prezly", - "name": "Prezly", - "id": 19285554, - "id_str": "19285554", - "indices": [86, 93] - } - ], - "urls": [], - "media": [ - { - "id": 588609941604171800, - "id_str": "588609941604171776", - "indices": [94, 116], - "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/588609941604171776/pu/img/657mRahs1TNqS0vw.jpg", - "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/588609941604171776/pu/img/657mRahs1TNqS0vw.jpg", - "url": "http://t.co/6HIHbuiMbh", - "display_url": "pic.twitter.com/6HIHbuiMbh", - "expanded_url": "https://twitter.com/digitalbase/status/588610060810526720/video/1", - "type": "photo", - "sizes": { - "thumb": { - "w": 150, - "h": 150, - "resize": "crop" - }, - "small": { - "w": 680, - "h": 680, - "resize": "fit" - }, - "medium": { - "w": 720, - "h": 720, - "resize": "fit" - }, - "large": { - "w": 720, - "h": 720, - "resize": "fit" - } - } - } - ] - }, - "extended_entities": { - "media": [ - { - "id": 588609941604171800, - "id_str": "588609941604171776", - "indices": [94, 116], - "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/588609941604171776/pu/img/657mRahs1TNqS0vw.jpg", - "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/588609941604171776/pu/img/657mRahs1TNqS0vw.jpg", - "url": "http://t.co/6HIHbuiMbh", - "display_url": "pic.twitter.com/6HIHbuiMbh", - "expanded_url": "https://twitter.com/digitalbase/status/588610060810526720/video/1", - "type": "video", - "sizes": { - "thumb": { - "w": 150, - "h": 150, - "resize": "crop" - }, - "small": { - "w": 680, - "h": 680, - "resize": "fit" - }, - "medium": { - "w": 720, - "h": 720, - "resize": "fit" - }, - "large": { - "w": 720, - "h": 720, - "resize": "fit" - } - }, - "video_info": { - "aspect_ratio": [1, 1], - "duration_millis": 5461, - "variants": [ - { - "bitrate": 832000, - "content_type": "video/mp4", - "url": "https://video.twimg.com/ext_tw_video/588609941604171776/pu/vid/480x480/r7TFsgD7_3-ODoZw.mp4" - }, - { - "bitrate": 1280000, - "content_type": "video/mp4", - "url": "https://video.twimg.com/ext_tw_video/588609941604171776/pu/vid/720x720/Phw24Cpz5GGzftJ7.mp4" - }, - { - "content_type": "application/x-mpegURL", - "url": "https://video.twimg.com/ext_tw_video/588609941604171776/pu/pl/19dRShlql43AT77b.m3u8" - }, - { - "bitrate": 320000, - "content_type": "video/mp4", - "url": "https://video.twimg.com/ext_tw_video/588609941604171776/pu/vid/240x240/lEpxjvcwYNoOeHCk.mp4" - } - ] - }, - "additional_media_info": { - "monetizable": false - } - } - ] - }, - "source": "Twitter for Android", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 14078335, - "id_str": "14078335", - "name": "Gijs Nelissen", - "screen_name": "digitalbase", - "location": "Belgium", - "description": "Dad x3. Web junkie. Coffee drinker. Bootstrapper. Crossfitter. Entrepreneur. Over confident smarty pants. Founder of @prezly", - "url": "https://t.co/iaO3rl75Zv", - "entities": { - "url": { - "urls": [ - { - "url": "https://t.co/iaO3rl75Zv", - "expanded_url": "http://www.prezly.com", - "display_url": "prezly.com", - "indices": [0, 23] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 1035, - "friends_count": 1218, - "listed_count": 128, - "created_at": "Tue Mar 04 15:42:38 +0000 2008", - "favourites_count": 2072, - "utc_offset": null, - "time_zone": null, - "geo_enabled": true, - "verified": false, - "statuses_count": 5643, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "131516", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme14/bg.gif", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme14/bg.gif", - "profile_background_tile": true, - "profile_image_url": "http://pbs.twimg.com/profile_images/1037974362790526976/MSRew0Rn_normal.jpg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/1037974362790526976/MSRew0Rn_normal.jpg", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/14078335/1536307441", - "profile_link_color": "697575", - "profile_sidebar_border_color": "EEEEEE", - "profile_sidebar_fill_color": "EFEFEF", - "profile_text_color": "333333", - "profile_use_background_image": true, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 3, - "favorite_count": 3, - "favorited": true, - "retweeted": true, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.fixture-647088863777832961.json b/packages/enrich-tweet/src/enrichTweet.fixture-647088863777832961.json deleted file mode 100644 index cfd9feb..0000000 --- a/packages/enrich-tweet/src/enrichTweet.fixture-647088863777832961.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "created_at": "Thu Sep 24 16:43:02 +0000 2015", - "id": 647088863777833000, - "id_str": "647088863777832961", - "full_text": "SponsorOfTheDay! We have giant love feelings for @transloadit! And not just cuz that logo's cute as a bug. Thank you! http://t.co/LQqex8hd8i", - "truncated": false, - "display_text_range": [0, 140], - "entities": { - "hashtags": [], - "symbols": [], - "user_mentions": [ - { - "screen_name": "transloadit", - "name": "🤖 Transloadit", - "id": 23779749, - "id_str": "23779749", - "indices": [49, 61] - } - ], - "urls": [], - "media": [ - { - "id": 647088863719112700, - "id_str": "647088863719112704", - "indices": [118, 140], - "media_url": "http://pbs.twimg.com/media/CPrr5KQWwAAin58.png", - "media_url_https": "https://pbs.twimg.com/media/CPrr5KQWwAAin58.png", - "url": "http://t.co/LQqex8hd8i", - "display_url": "pic.twitter.com/LQqex8hd8i", - "expanded_url": "https://twitter.com/OSFeels/status/647088863777832961/photo/1", - "type": "photo", - "sizes": { - "small": { - "w": 680, - "h": 173, - "resize": "fit" - }, - "large": { - "w": 1639, - "h": 417, - "resize": "fit" - }, - "medium": { - "w": 1200, - "h": 305, - "resize": "fit" - }, - "thumb": { - "w": 150, - "h": 150, - "resize": "crop" - } - } - } - ] - }, - "extended_entities": { - "media": [ - { - "id": 647088863719112700, - "id_str": "647088863719112704", - "indices": [118, 140], - "media_url": "http://pbs.twimg.com/media/CPrr5KQWwAAin58.png", - "media_url_https": "https://pbs.twimg.com/media/CPrr5KQWwAAin58.png", - "url": "http://t.co/LQqex8hd8i", - "display_url": "pic.twitter.com/LQqex8hd8i", - "expanded_url": "https://twitter.com/OSFeels/status/647088863777832961/photo/1", - "type": "photo", - "sizes": { - "small": { - "w": 680, - "h": 173, - "resize": "fit" - }, - "large": { - "w": 1639, - "h": 417, - "resize": "fit" - }, - "medium": { - "w": 1200, - "h": 305, - "resize": "fit" - }, - "thumb": { - "w": 150, - "h": 150, - "resize": "crop" - } - } - } - ] - }, - "source": "Buffer", - "in_reply_to_status_id": null, - "in_reply_to_status_id_str": null, - "in_reply_to_user_id": null, - "in_reply_to_user_id_str": null, - "in_reply_to_screen_name": null, - "user": { - "id": 2829173989, - "id_str": "2829173989", - "name": "OS&F", - "screen_name": "OSFeels", - "location": "Seattle, WA", - "description": "A conference about communication and community. Coming Spring 2019", - "url": "https://t.co/ErP6Yk7cQi", - "entities": { - "url": { - "urls": [ - { - "url": "https://t.co/ErP6Yk7cQi", - "expanded_url": "https://www.osfeels.com", - "display_url": "osfeels.com", - "indices": [0, 23] - } - ] - }, - "description": { - "urls": [] - } - }, - "protected": false, - "followers_count": 1153, - "friends_count": 94, - "listed_count": 61, - "created_at": "Wed Sep 24 02:30:00 +0000 2014", - "favourites_count": 947, - "utc_offset": null, - "time_zone": null, - "geo_enabled": false, - "verified": false, - "statuses_count": 1554, - "lang": null, - "contributors_enabled": false, - "is_translator": false, - "is_translation_enabled": false, - "profile_background_color": "000000", - "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", - "profile_background_tile": false, - "profile_image_url": "http://pbs.twimg.com/profile_images/1019226801359413248/mSaVKW6c_normal.jpg", - "profile_image_url_https": "https://pbs.twimg.com/profile_images/1019226801359413248/mSaVKW6c_normal.jpg", - "profile_banner_url": "https://pbs.twimg.com/profile_banners/2829173989/1461907084", - "profile_link_color": "DDAD23", - "profile_sidebar_border_color": "000000", - "profile_sidebar_fill_color": "000000", - "profile_text_color": "000000", - "profile_use_background_image": false, - "has_extended_profile": false, - "default_profile": false, - "default_profile_image": false, - "following": false, - "follow_request_sent": false, - "notifications": false, - "translator_type": "none" - }, - "geo": null, - "coordinates": null, - "place": null, - "contributors": null, - "is_quote_status": false, - "retweet_count": 1, - "favorite_count": 2, - "favorited": true, - "retweeted": true, - "possibly_sensitive": false, - "lang": "en" -} diff --git a/packages/enrich-tweet/src/enrichTweet.test.ts b/packages/enrich-tweet/src/enrichTweet.test.ts deleted file mode 100644 index df6107b..0000000 --- a/packages/enrich-tweet/src/enrichTweet.test.ts +++ /dev/null @@ -1,101 +0,0 @@ -import fs from 'fs' -import { describe, test } from 'node:test' -import assert from 'node:assert' -import enrichTweet from './enrichTweet' - -describe('enrichTweet', () => { - test('should render tweet 1087761082247204900 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-1087761082247204900.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `In the age of cloud, @transloadit shows great balance of leaning on larger clouds while managing infra in-house @kvz \nhttps://transloadit.com/blog/2018/12/launching-asia-pacific-and-network-changes/ \n\n`, - ) - }) - - test('should render tweet 1082897509528281089 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-1082897509528281089.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `Just realized how @tus_io and @uppy_io are a perfect example of @transloadit commoditizing their complements: https://gwern.net/complement`, - ) - }) - - test('should render tweet 389922139408592896 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-389922139408592896.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `Don't understand why anyone messes with carrierwave / paperclip / whatever anymore. @transloadit is just too easy. https://transloadit.com/r/wGN`, - ) - }) - - test('should render tweet 558414704024899584 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-558414704024899584.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `Thank the sponsors! http://2015.staticshowdown.com/sponsors @polymer @BloombergBeta @Firebase @MaxCDNDeveloper @sprintly @dropboxapi @codeship @transloadit`, - ) - }) - - test('should render tweet 647088863777832961 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-647088863777832961.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `SponsorOfTheDay! We have giant love feelings for @transloadit! And not just cuz that logo's cute as a bug. Thank you! \n\n`, - ) - }) - - test('should render tweet 588610060810526720 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-588610060810526720.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `Trying to process/thumbnail about 600k avatars in a few hours. Thank you @transloadit @Prezly \n\n`, - ) - }) - - test('should render tweet 17139572739674112 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-17139572739674112.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `Encode your videos faster ! nice piece of technology : https://transloadit.com/blog/2010/12/realtime-encoding-over-150x-faster/ #video #encoding`, - ) - }) - - test('should render tweet 16955922978971648 correctly', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-16955922978971648.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - `Hey @YouTube, @vimeo and other video upload/sharing sites, offer @transloadit a lot of money, now, quick https://news.ycombinator.com/item?id=2025354`, - ) - }) - - test('should not explode on undefined', async () => { - // @ts-expect-error - testing invalid input - assert.strictEqual(await enrichTweet(undefined), undefined) - }) - - test('should not hang on non-shortened urls', async () => { - const tweet = JSON.parse( - fs.readFileSync(`${__dirname}/enrichTweet.fixture-1087761082247204900-2.json`, 'utf-8'), - ) - assert.strictEqual( - await enrichTweet(tweet), - 'https://twitter.com/TLStatus/status/1365465781467836417', - ) - }) -}) diff --git a/packages/enrich-tweet/src/enrichTweet.ts b/packages/enrich-tweet/src/enrichTweet.ts deleted file mode 100644 index 3e64c2d..0000000 --- a/packages/enrich-tweet/src/enrichTweet.ts +++ /dev/null @@ -1,95 +0,0 @@ -import twttr = require('twitter-text') -import tall = require('tall') - -async function tryUnshorten(url: string, unshorten: boolean): Promise { - if (!unshorten) return url - try { - return await tall.tall(url) - } catch (err) { - return url - } -} - -interface Tweet { - full_text?: string - entities?: { - urls: { - display_url: string - url: string - expanded_url: string - }[] - } - extended_entities?: { - media: { - display_url: string - url: string - media_url: string - media_url_https: string - expanded_url: string - }[] - } -} - -export = async function enrichTweet(tweet: Tweet, unshorten = true): Promise { - if (!tweet) return - - let text = tweet.full_text ?? '' - - // Expand URLs - if (tweet.entities && tweet.entities.urls.length) { - const subUrls = tweet.entities.urls - for (const subUrl1 of subUrls) { - const unshortened = await tryUnshorten(subUrl1.expanded_url, unshorten) - const friends1 = [subUrl1.display_url, subUrl1.url, subUrl1.expanded_url] - for (const friend1 of friends1) { - text = text.replace(`http://www.${friend1}`, unshortened) - text = text.replace(`https://www.${friend1}`, unshortened) - text = text.replace(`http://${friend1}`, unshortened) - text = text.replace(`https://${friend1}`, unshortened) - text = text.replace(`${friend1}`, unshortened) - } - } - } - - if (tweet.extended_entities && tweet.extended_entities.media.length) { - for (const subUrl2 of tweet.extended_entities.media) { - const friends2 = [subUrl2.display_url, subUrl2.url, subUrl2.media_url, subUrl2.expanded_url] - for (const friend2 of friends2) { - text = text.replace(`http://${friend2}`, `${subUrl2.media_url_https}`) - text = text.replace(`https://${friend2}`, `${subUrl2.media_url_https}`) - text = text.replace(`${friend2}`, `${subUrl2.media_url_https}`) - } - } - } - - const getUrls = (await import('get-urls')).default - const urls = getUrls(text) - for (const subUrl3 of urls) { - if (!subUrl3.match(/^https?:\/\/bit\.ly/)) { - continue - } - const unshortened3 = await tryUnshorten(subUrl3, unshorten) - text = text.replace(`${subUrl3}`, `${unshortened3}`) - } - - // Link all the things inside the tweet - text = twttr.autoLink(text) - - // show images - text = text.replace( - />(https:\/\/pbs\.twimg\.com\/[^<]+)<`, - ) - - // Add two linebreaks before first image - text = text.replace(`([^<]+)<\/a>/g, - '@$3', - ) - - // eslint-disable-next-line consistent-return - return text -} diff --git a/packages/enrich-tweet/tsconfig.json b/packages/enrich-tweet/tsconfig.json deleted file mode 100644 index 819500b..0000000 --- a/packages/enrich-tweet/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist/", - "rootDir": "src/" - }, - "include": ["src/"] -} diff --git a/yarn.lock b/yarn.lock index 4de406a..4188ead 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,7 +40,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1": +"@babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2": version: 7.23.8 resolution: "@babel/runtime@npm:7.23.8" dependencies: @@ -784,18 +784,6 @@ __metadata: languageName: unknown linkType: soft -"@transloadit/enrich-tweet@workspace:packages/enrich-tweet": - version: 0.0.0-use.local - resolution: "@transloadit/enrich-tweet@workspace:packages/enrich-tweet" - dependencies: - "@types/twitter-text": "npm:^3.1.10" - get-urls: "npm:^12.1.0" - nan: "npm:^2.19.0" - tall: "npm:^8.0.0" - twitter-text: "npm:^3.1.0" - languageName: unknown - linkType: soft - "@transloadit/file-exists@npm:^0.3.3, @transloadit/file-exists@workspace:packages/file-exists": version: 0.0.0-use.local resolution: "@transloadit/file-exists@workspace:packages/file-exists" @@ -1047,13 +1035,6 @@ __metadata: languageName: node linkType: hard -"@types/twitter-text@npm:^3.1.10": - version: 3.1.10 - resolution: "@types/twitter-text@npm:3.1.10" - checksum: 10c0/b90ae93104282aff29490252965a7728d8ea9811a7617669936205ab8037d54bb086e51db330e80e0952f340ddc88e593fbd8df61792bb671e353fa6623a26b2 - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^7.6.0": version: 7.6.0 resolution: "@typescript-eslint/eslint-plugin@npm:7.6.0" @@ -2012,15 +1993,6 @@ __metadata: languageName: node linkType: hard -"clone-regexp@npm:^3.0.0": - version: 3.0.0 - resolution: "clone-regexp@npm:3.0.0" - dependencies: - is-regexp: "npm:^3.0.0" - checksum: 10c0/892b6103ae9319d0283f9bb125e07cba7c043cbcc516ecc135be817769257c659eae42749d450ed3041af63fb79505e4c5b90105cf9c97cadbff712e2f72726b - languageName: node - linkType: hard - "clone@npm:^1.0.2": version: 1.0.4 resolution: "clone@npm:1.0.4" @@ -2258,20 +2230,6 @@ __metadata: languageName: node linkType: hard -"convert-hrtime@npm:^5.0.0": - version: 5.0.0 - resolution: "convert-hrtime@npm:5.0.0" - checksum: 10c0/2092e51aab205e1141440e84e2a89f8881e68e47c1f8bc168dfd7c67047d8f1db43bac28044bc05749205651fead4e7910f52c7bb6066213480df99e333e9f47 - languageName: node - linkType: hard - -"core-js@npm:^2.5.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 10c0/00128efe427789120a06b819adc94cc72b96955acb331cb71d09287baf9bd37bebd191d91f1ee4939c893a050307ead4faea08876f09115112612b6a05684b63 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -3560,13 +3518,6 @@ __metadata: languageName: node linkType: hard -"function-timeout@npm:^0.1.0": - version: 0.1.1 - resolution: "function-timeout@npm:0.1.1" - checksum: 10c0/45f0517907e541b7ea8238500429ac9ace50e596295c01931cbe61e176150aa2ad50d05dcfeeee9377ae48eb99a6fd0759e4ebc97cde8f4c38492d1c99db8f14 - languageName: node - linkType: hard - "function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" @@ -3691,17 +3642,6 @@ __metadata: languageName: node linkType: hard -"get-urls@npm:^12.1.0": - version: 12.1.0 - resolution: "get-urls@npm:12.1.0" - dependencies: - normalize-url: "npm:^8.0.0" - super-regex: "npm:^0.2.0" - url-regex-safe: "npm:^4.0.0" - checksum: 10c0/f654d7daf70e58647bd30d94f0e488c89599e5c27d9b7e222d4f0a95bf4bf48ecd35391e76914e2f2d1b34d374a87596056b7b48f101ec6150635a1c3fb6b83d - languageName: node - linkType: hard - "git-hooks-list@npm:^3.0.0": version: 3.1.0 resolution: "git-hooks-list@npm:3.1.0" @@ -4295,13 +4235,6 @@ __metadata: languageName: node linkType: hard -"ip-regex@npm:4.3.0": - version: 4.3.0 - resolution: "ip-regex@npm:4.3.0" - checksum: 10c0/f9ef1f5d0df05b9133a882974e572ae525ccd205260cb103dae337f1fc7451ed783391acc6ad688e56dd2598f769e8e72ecbb650ec34763396af822a91768562 - languageName: node - linkType: hard - "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -4547,13 +4480,6 @@ __metadata: languageName: node linkType: hard -"is-regexp@npm:^3.0.0": - version: 3.1.0 - resolution: "is-regexp@npm:3.1.0" - checksum: 10c0/99dbaea41bddee2205db468c0946f5fee25cc4ae486333cb4d2b8095ab4b0a500e74ba61afd9e6e4f63ececcd55b4df5ae2a555b1c3e26308e516ff53c9533cd - languageName: node - linkType: hard - "is-set@npm:^2.0.1": version: 2.0.2 resolution: "is-set@npm:2.0.2" @@ -5664,15 +5590,6 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.19.0": - version: 2.19.0 - resolution: "nan@npm:2.19.0" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/b8d05d75f92ee9d94affa50d0aa41b6c698254c848529452d7ab67c2e0d160a83f563bfe2cbd53e077944eceb48c757f83c93634c7c9ff404c9ec1ed4e5ced1a - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -5749,26 +5666,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:latest": - version: 10.0.0 - resolution: "node-gyp@npm:10.0.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^3.0.0" - semver: "npm:^7.3.5" - tar: "npm:^6.1.2" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/6d18c65cae4f8cc87c8ff53bfa2626f43adfda5d5fbccbfe1c94c4e115f978f6c09072546ece2cffa36aa05ef30c261976cdcaa2c8beea069771f582b2989e93 - languageName: node - linkType: hard - "node-machine-id@npm:1.1.12": version: 1.1.12 resolution: "node-machine-id@npm:1.1.12" @@ -5835,13 +5732,6 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^8.0.0": - version: 8.0.1 - resolution: "normalize-url@npm:8.0.1" - checksum: 10c0/eb439231c4b84430f187530e6fdac605c5048ef4ec556447a10c00a91fc69b52d8d8298d9d608e68d3e0f7dc2d812d3455edf425e0f215993667c3183bcab1ef - languageName: node - linkType: hard - "npm-bundled@npm:^1.1.2": version: 1.1.2 resolution: "npm-bundled@npm:1.1.2" @@ -6784,13 +6674,6 @@ __metadata: languageName: node linkType: hard -"punycode@npm:1.4.1": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: 10c0/354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 - languageName: node - linkType: hard - "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -7782,17 +7665,6 @@ __metadata: languageName: node linkType: hard -"super-regex@npm:^0.2.0": - version: 0.2.0 - resolution: "super-regex@npm:0.2.0" - dependencies: - clone-regexp: "npm:^3.0.0" - function-timeout: "npm:^0.1.0" - time-span: "npm:^5.1.0" - checksum: 10c0/a8ff56aa521530df098433692c0a4c92353dd2fa3f7187785d654268031cc2876c8acc91e90bbd7b6b1ebabd68fb306f4fa61fc46f9fe0db04ed5f960fc2afc8 - languageName: node - linkType: hard - "supports-color@npm:^2.0.0": version: 2.0.0 resolution: "supports-color@npm:2.0.0" @@ -7853,13 +7725,6 @@ __metadata: languageName: node linkType: hard -"tall@npm:^8.0.0": - version: 8.0.0 - resolution: "tall@npm:8.0.0" - checksum: 10c0/ee52dcd5ce9acc3d75dff455b53a3995a573983fbdee2ab597766a8c08e08faef808b079b2564a1cb3fc07bb0857f0b2441fdccc6a59307af61105008fd3d263 - languageName: node - linkType: hard - "tapable@npm:^2.2.0": version: 2.2.1 resolution: "tapable@npm:2.2.1" @@ -7964,15 +7829,6 @@ __metadata: languageName: node linkType: hard -"time-span@npm:^5.1.0": - version: 5.1.0 - resolution: "time-span@npm:5.1.0" - dependencies: - convert-hrtime: "npm:^5.0.0" - checksum: 10c0/37b8284c53f4ee320377512ac19e3a034f2b025f5abd6959b8c1d0f69e0f06ab03681df209f2e452d30129e7b1f25bf573fb0f29d57e71f9b4a6b5b99f4c4b9e - languageName: node - linkType: hard - "title@npm:^3.5.3": version: 3.5.3 resolution: "title@npm:3.5.3" @@ -7994,15 +7850,6 @@ __metadata: languageName: node linkType: hard -"tlds@npm:^1.242.0": - version: 1.252.0 - resolution: "tlds@npm:1.252.0" - bin: - tlds: bin.js - checksum: 10c0/b0377d3ef977e3efbce4dd8187d8030d0514f39715d70f5b80e260a3cc2891fcbe6239f33c25a65b77fe30115e593fbaa8b5e913bf9b7f7fd97e01b18fc02d8a - languageName: node - linkType: hard - "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -8121,25 +7968,6 @@ __metadata: languageName: node linkType: hard -"twemoji-parser@npm:^11.0.2": - version: 11.0.2 - resolution: "twemoji-parser@npm:11.0.2" - checksum: 10c0/b06116434ef19dcf34fcc44129482dcf561a4f78fd6525aba55329b5a50b525c68125f95d040e9274cd9a1f3e8315b8e6842bb735c68069530a9cb28422130d6 - languageName: node - linkType: hard - -"twitter-text@npm:^3.1.0": - version: 3.1.0 - resolution: "twitter-text@npm:3.1.0" - dependencies: - "@babel/runtime": "npm:^7.3.1" - core-js: "npm:^2.5.0" - punycode: "npm:1.4.1" - twemoji-parser: "npm:^11.0.2" - checksum: 10c0/34f2b42df7a0cde707ae3d9138b0232eabced946ab9f825b2500fbcc0c8be8a494fdf98ab5f4c44d7c652843c0c3846ab0aba952c7e3ca90aad69edb06dccdf5 - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -8346,21 +8174,6 @@ __metadata: languageName: node linkType: hard -"url-regex-safe@npm:^4.0.0": - version: 4.0.0 - resolution: "url-regex-safe@npm:4.0.0" - dependencies: - ip-regex: "npm:4.3.0" - tlds: "npm:^1.242.0" - peerDependencies: - re2: ^1.20.1 - peerDependenciesMeta: - re2: - optional: true - checksum: 10c0/515f3062c37387c4cc0fc13237764de89b3ba736f3c46f7cf1684ef14bb23599d0157bfb1e9bece510e8fd4c3e95272a9087853e1b38eca51b9f16bf725e9f71 - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2"