monra commited on
Commit
8a8fe1d
1 Parent(s): 91005d4

Add the GPT-4 model

Browse files
apiGPT4/.dockerignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ run/
2
+ node_modules/
apiGPT4/.github/workflows/docker-image.yml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # docker-image.yml
2
+ name: Publish Docker image # workflow名称,可以在Github项目主页的【Actions】中看到所有的workflow
3
+
4
+ on: # 配置触发workflow的事件
5
+ push:
6
+ tags: # tag更新时触发此workflow
7
+ - '*'
8
+
9
+ jobs: # workflow中的job
10
+
11
+ push_to_registry: # job的名字
12
+ name: Push Docker image to Docker Hub
13
+ runs-on: ubuntu-latest # job运行的基础环境
14
+
15
+ steps: # 一个job由一个或多个step组成
16
+ - name: Check out the repo
17
+ uses: actions/checkout@v2 # 官方的action,获取代码
18
+
19
+ - name: Log in to Docker Hub
20
+ uses: docker/login-action@v1 # 三方的action操作, 执行docker login
21
+ with:
22
+ username: ${{ secrets.DOCKERHUB_USERNAME }} # 配置dockerhub的认证,在Github项目主页 【Settings】 -> 【Secrets】 添加对应变量
23
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
24
+
25
+ - name: Extract metadata (tags, labels) for Docker
26
+ id: meta
27
+ uses: docker/metadata-action@v3 # 抽取项目信息,主要是镜像的tag
28
+ with:
29
+ images: xiangsx/gpt4free-ts
30
+
31
+ - name: Build and push Docker image
32
+ uses: docker/build-push-action@v2 # docker build & push
33
+ with:
34
+ context: .
35
+ push: true
36
+ tags: ${{ steps.meta.outputs.tags }}
37
+ labels: ${{ steps.meta.outputs.labels }}
apiGPT4/.gitignore ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ .idea/
2
+ .vscode/
3
+ yarn-error.log
4
+ package-lock.json
5
+ node_modules/
6
+ .env
7
+ run/
apiGPT4/Dockerfile ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM ghcr.io/puppeteer/puppeteer:20.5.0
2
+
3
+ USER root
4
+
5
+ WORKDIR /usr/src/app
6
+
7
+ COPY --chown=pptruser package.json /usr/src/app/
8
+
9
+ RUN npm i --registry=https://registry.npm.taobao.org
10
+
11
+ COPY --chown=pptruser . /usr/src/app
12
+
13
+ VOLUME [ "/usr/src/app/run" ]
14
+
15
+ EXPOSE 3000
16
+
17
+ CMD npm start
apiGPT4/LICENSE.txt ADDED
@@ -0,0 +1,674 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU General Public License is a free, copyleft license for
11
+ software and other kinds of works.
12
+
13
+ The licenses for most software and other practical works are designed
14
+ to take away your freedom to share and change the works. By contrast,
15
+ the GNU General Public License is intended to guarantee your freedom to
16
+ share and change all versions of a program--to make sure it remains free
17
+ software for all its users. We, the Free Software Foundation, use the
18
+ GNU General Public License for most of our software; it applies also to
19
+ any other work released this way by its authors. You can apply it to
20
+ your programs, too.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you
30
+ these rights or asking you to surrender the rights. Therefore, you have
31
+ certain responsibilities if you distribute copies of the software, or if
32
+ you modify it: responsibilities to respect the freedom of others.
33
+
34
+ For example, if you distribute copies of such a program, whether
35
+ gratis or for a fee, you must pass on to the recipients the same
36
+ freedoms that you received. You must make sure that they, too, receive
37
+ or can get the source code. And you must show them these terms so they
38
+ know their rights.
39
+
40
+ Developers that use the GNU GPL protect your rights with two steps:
41
+ (1) assert copyright on the software, and (2) offer you this License
42
+ giving you legal permission to copy, distribute and/or modify it.
43
+
44
+ For the developers' and authors' protection, the GPL clearly explains
45
+ that there is no warranty for this free software. For both users' and
46
+ authors' sake, the GPL requires that modified versions be marked as
47
+ changed, so that their problems will not be attributed erroneously to
48
+ authors of previous versions.
49
+
50
+ Some devices are designed to deny users access to install or run
51
+ modified versions of the software inside them, although the manufacturer
52
+ can do so. This is fundamentally incompatible with the aim of
53
+ protecting users' freedom to change the software. The systematic
54
+ pattern of such abuse occurs in the area of products for individuals to
55
+ use, which is precisely where it is most unacceptable. Therefore, we
56
+ have designed this version of the GPL to prohibit the practice for those
57
+ products. If such problems arise substantially in other domains, we
58
+ stand ready to extend this provision to those domains in future versions
59
+ of the GPL, as needed to protect the freedom of users.
60
+
61
+ Finally, every program is threatened constantly by software patents.
62
+ States should not allow patents to restrict development and use of
63
+ software on general-purpose computers, but in those that do, we wish to
64
+ avoid the special danger that patents applied to a free program could
65
+ make it effectively proprietary. To prevent this, the GPL assures that
66
+ patents cannot be used to render the program non-free.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ TERMS AND CONDITIONS
72
+
73
+ 0. Definitions.
74
+
75
+ "This License" refers to version 3 of the GNU General Public License.
76
+
77
+ "Copyright" also means copyright-like laws that apply to other kinds of
78
+ works, such as semiconductor masks.
79
+
80
+ "The Program" refers to any copyrightable work licensed under this
81
+ License. Each licensee is addressed as "you". "Licensees" and
82
+ "recipients" may be individuals or organizations.
83
+
84
+ To "modify" a work means to copy from or adapt all or part of the work
85
+ in a fashion requiring copyright permission, other than the making of an
86
+ exact copy. The resulting work is called a "modified version" of the
87
+ earlier work or a work "based on" the earlier work.
88
+
89
+ A "covered work" means either the unmodified Program or a work based
90
+ on the Program.
91
+
92
+ To "propagate" a work means to do anything with it that, without
93
+ permission, would make you directly or secondarily liable for
94
+ infringement under applicable copyright law, except executing it on a
95
+ computer or modifying a private copy. Propagation includes copying,
96
+ distribution (with or without modification), making available to the
97
+ public, and in some countries other activities as well.
98
+
99
+ To "convey" a work means any kind of propagation that enables other
100
+ parties to make or receive copies. Mere interaction with a user through
101
+ a computer network, with no transfer of a copy, is not conveying.
102
+
103
+ An interactive user interface displays "Appropriate Legal Notices"
104
+ to the extent that it includes a convenient and prominently visible
105
+ feature that (1) displays an appropriate copyright notice, and (2)
106
+ tells the user that there is no warranty for the work (except to the
107
+ extent that warranties are provided), that licensees may convey the
108
+ work under this License, and how to view a copy of this License. If
109
+ the interface presents a list of user commands or options, such as a
110
+ menu, a prominent item in the list meets this criterion.
111
+
112
+ 1. Source Code.
113
+
114
+ The "source code" for a work means the preferred form of the work
115
+ for making modifications to it. "Object code" means any non-source
116
+ form of a work.
117
+
118
+ A "Standard Interface" means an interface that either is an official
119
+ standard defined by a recognized standards body, or, in the case of
120
+ interfaces specified for a particular programming language, one that
121
+ is widely used among developers working in that language.
122
+
123
+ The "System Libraries" of an executable work include anything, other
124
+ than the work as a whole, that (a) is included in the normal form of
125
+ packaging a Major Component, but which is not part of that Major
126
+ Component, and (b) serves only to enable use of the work with that
127
+ Major Component, or to implement a Standard Interface for which an
128
+ implementation is available to the public in source code form. A
129
+ "Major Component", in this context, means a major essential component
130
+ (kernel, window system, and so on) of the specific operating system
131
+ (if any) on which the executable work runs, or a compiler used to
132
+ produce the work, or an object code interpreter used to run it.
133
+
134
+ The "Corresponding Source" for a work in object code form means all
135
+ the source code needed to generate, install, and (for an executable
136
+ work) run the object code and to modify the work, including scripts to
137
+ control those activities. However, it does not include the work's
138
+ System Libraries, or general-purpose tools or generally available free
139
+ programs which are used unmodified in performing those activities but
140
+ which are not part of the work. For example, Corresponding Source
141
+ includes interface definition files associated with source files for
142
+ the work, and the source code for shared libraries and dynamically
143
+ linked subprograms that the work is specifically designed to require,
144
+ such as by intimate data communication or control flow between those
145
+ subprograms and other parts of the work.
146
+
147
+ The Corresponding Source need not include anything that users
148
+ can regenerate automatically from other parts of the Corresponding
149
+ Source.
150
+
151
+ The Corresponding Source for a work in source code form is that
152
+ same work.
153
+
154
+ 2. Basic Permissions.
155
+
156
+ All rights granted under this License are granted for the term of
157
+ copyright on the Program, and are irrevocable provided the stated
158
+ conditions are met. This License explicitly affirms your unlimited
159
+ permission to run the unmodified Program. The output from running a
160
+ covered work is covered by this License only if the output, given its
161
+ content, constitutes a covered work. This License acknowledges your
162
+ rights of fair use or other equivalent, as provided by copyright law.
163
+
164
+ You may make, run and propagate covered works that you do not
165
+ convey, without conditions so long as your license otherwise remains
166
+ in force. You may convey covered works to others for the sole purpose
167
+ of having them make modifications exclusively for you, or provide you
168
+ with facilities for running those works, provided that you comply with
169
+ the terms of this License in conveying all material for which you do
170
+ not control copyright. Those thus making or running the covered works
171
+ for you must do so exclusively on your behalf, under your direction
172
+ and control, on terms that prohibit them from making any copies of
173
+ your copyrighted material outside their relationship with you.
174
+
175
+ Conveying under any other circumstances is permitted solely under
176
+ the conditions stated below. Sublicensing is not allowed; section 10
177
+ makes it unnecessary.
178
+
179
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
+
181
+ No covered work shall be deemed part of an effective technological
182
+ measure under any applicable law fulfilling obligations under article
183
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
+ similar laws prohibiting or restricting circumvention of such
185
+ measures.
186
+
187
+ When you convey a covered work, you waive any legal power to forbid
188
+ circumvention of technological measures to the extent such circumvention
189
+ is effected by exercising rights under this License with respect to
190
+ the covered work, and you disclaim any intention to limit operation or
191
+ modification of the work as a means of enforcing, against the work's
192
+ users, your or third parties' legal rights to forbid circumvention of
193
+ technological measures.
194
+
195
+ 4. Conveying Verbatim Copies.
196
+
197
+ You may convey verbatim copies of the Program's source code as you
198
+ receive it, in any medium, provided that you conspicuously and
199
+ appropriately publish on each copy an appropriate copyright notice;
200
+ keep intact all notices stating that this License and any
201
+ non-permissive terms added in accord with section 7 apply to the code;
202
+ keep intact all notices of the absence of any warranty; and give all
203
+ recipients a copy of this License along with the Program.
204
+
205
+ You may charge any price or no price for each copy that you convey,
206
+ and you may offer support or warranty protection for a fee.
207
+
208
+ 5. Conveying Modified Source Versions.
209
+
210
+ You may convey a work based on the Program, or the modifications to
211
+ produce it from the Program, in the form of source code under the
212
+ terms of section 4, provided that you also meet all of these conditions:
213
+
214
+ a) The work must carry prominent notices stating that you modified
215
+ it, and giving a relevant date.
216
+
217
+ b) The work must carry prominent notices stating that it is
218
+ released under this License and any conditions added under section
219
+ 7. This requirement modifies the requirement in section 4 to
220
+ "keep intact all notices".
221
+
222
+ c) You must license the entire work, as a whole, under this
223
+ License to anyone who comes into possession of a copy. This
224
+ License will therefore apply, along with any applicable section 7
225
+ additional terms, to the whole of the work, and all its parts,
226
+ regardless of how they are packaged. This License gives no
227
+ permission to license the work in any other way, but it does not
228
+ invalidate such permission if you have separately received it.
229
+
230
+ d) If the work has interactive user interfaces, each must display
231
+ Appropriate Legal Notices; however, if the Program has interactive
232
+ interfaces that do not display Appropriate Legal Notices, your
233
+ work need not make them do so.
234
+
235
+ A compilation of a covered work with other separate and independent
236
+ works, which are not by their nature extensions of the covered work,
237
+ and which are not combined with it such as to form a larger program,
238
+ in or on a volume of a storage or distribution medium, is called an
239
+ "aggregate" if the compilation and its resulting copyright are not
240
+ used to limit the access or legal rights of the compilation's users
241
+ beyond what the individual works permit. Inclusion of a covered work
242
+ in an aggregate does not cause this License to apply to the other
243
+ parts of the aggregate.
244
+
245
+ 6. Conveying Non-Source Forms.
246
+
247
+ You may convey a covered work in object code form under the terms
248
+ of sections 4 and 5, provided that you also convey the
249
+ machine-readable Corresponding Source under the terms of this License,
250
+ in one of these ways:
251
+
252
+ a) Convey the object code in, or embodied in, a physical product
253
+ (including a physical distribution medium), accompanied by the
254
+ Corresponding Source fixed on a durable physical medium
255
+ customarily used for software interchange.
256
+
257
+ b) Convey the object code in, or embodied in, a physical product
258
+ (including a physical distribution medium), accompanied by a
259
+ written offer, valid for at least three years and valid for as
260
+ long as you offer spare parts or customer support for that product
261
+ model, to give anyone who possesses the object code either (1) a
262
+ copy of the Corresponding Source for all the software in the
263
+ product that is covered by this License, on a durable physical
264
+ medium customarily used for software interchange, for a price no
265
+ more than your reasonable cost of physically performing this
266
+ conveying of source, or (2) access to copy the
267
+ Corresponding Source from a network server at no charge.
268
+
269
+ c) Convey individual copies of the object code with a copy of the
270
+ written offer to provide the Corresponding Source. This
271
+ alternative is allowed only occasionally and noncommercially, and
272
+ only if you received the object code with such an offer, in accord
273
+ with subsection 6b.
274
+
275
+ d) Convey the object code by offering access from a designated
276
+ place (gratis or for a charge), and offer equivalent access to the
277
+ Corresponding Source in the same way through the same place at no
278
+ further charge. You need not require recipients to copy the
279
+ Corresponding Source along with the object code. If the place to
280
+ copy the object code is a network server, the Corresponding Source
281
+ may be on a different server (operated by you or a third party)
282
+ that supports equivalent copying facilities, provided you maintain
283
+ clear directions next to the object code saying where to find the
284
+ Corresponding Source. Regardless of what server hosts the
285
+ Corresponding Source, you remain obligated to ensure that it is
286
+ available for as long as needed to satisfy these requirements.
287
+
288
+ e) Convey the object code using peer-to-peer transmission, provided
289
+ you inform other peers where the object code and Corresponding
290
+ Source of the work are being offered to the general public at no
291
+ charge under subsection 6d.
292
+
293
+ A separable portion of the object code, whose source code is excluded
294
+ from the Corresponding Source as a System Library, need not be
295
+ included in conveying the object code work.
296
+
297
+ A "User Product" is either (1) a "consumer product", which means any
298
+ tangible personal property which is normally used for personal, family,
299
+ or household purposes, or (2) anything designed or sold for incorporation
300
+ into a dwelling. In determining whether a product is a consumer product,
301
+ doubtful cases shall be resolved in favor of coverage. For a particular
302
+ product received by a particular user, "normally used" refers to a
303
+ typical or common use of that class of product, regardless of the status
304
+ of the particular user or of the way in which the particular user
305
+ actually uses, or expects or is expected to use, the product. A product
306
+ is a consumer product regardless of whether the product has substantial
307
+ commercial, industrial or non-consumer uses, unless such uses represent
308
+ the only significant mode of use of the product.
309
+
310
+ "Installation Information" for a User Product means any methods,
311
+ procedures, authorization keys, or other information required to install
312
+ and execute modified versions of a covered work in that User Product from
313
+ a modified version of its Corresponding Source. The information must
314
+ suffice to ensure that the continued functioning of the modified object
315
+ code is in no case prevented or interfered with solely because
316
+ modification has been made.
317
+
318
+ If you convey an object code work under this section in, or with, or
319
+ specifically for use in, a User Product, and the conveying occurs as
320
+ part of a transaction in which the right of possession and use of the
321
+ User Product is transferred to the recipient in perpetuity or for a
322
+ fixed term (regardless of how the transaction is characterized), the
323
+ Corresponding Source conveyed under this section must be accompanied
324
+ by the Installation Information. But this requirement does not apply
325
+ if neither you nor any third party retains the ability to install
326
+ modified object code on the User Product (for example, the work has
327
+ been installed in ROM).
328
+
329
+ The requirement to provide Installation Information does not include a
330
+ requirement to continue to provide support service, warranty, or updates
331
+ for a work that has been modified or installed by the recipient, or for
332
+ the User Product in which it has been modified or installed. Access to a
333
+ network may be denied when the modification itself materially and
334
+ adversely affects the operation of the network or violates the rules and
335
+ protocols for communication across the network.
336
+
337
+ Corresponding Source conveyed, and Installation Information provided,
338
+ in accord with this section must be in a format that is publicly
339
+ documented (and with an implementation available to the public in
340
+ source code form), and must require no special password or key for
341
+ unpacking, reading or copying.
342
+
343
+ 7. Additional Terms.
344
+
345
+ "Additional permissions" are terms that supplement the terms of this
346
+ License by making exceptions from one or more of its conditions.
347
+ Additional permissions that are applicable to the entire Program shall
348
+ be treated as though they were included in this License, to the extent
349
+ that they are valid under applicable law. If additional permissions
350
+ apply only to part of the Program, that part may be used separately
351
+ under those permissions, but the entire Program remains governed by
352
+ this License without regard to the additional permissions.
353
+
354
+ When you convey a copy of a covered work, you may at your option
355
+ remove any additional permissions from that copy, or from any part of
356
+ it. (Additional permissions may be written to require their own
357
+ removal in certain cases when you modify the work.) You may place
358
+ additional permissions on material, added by you to a covered work,
359
+ for which you have or can give appropriate copyright permission.
360
+
361
+ Notwithstanding any other provision of this License, for material you
362
+ add to a covered work, you may (if authorized by the copyright holders of
363
+ that material) supplement the terms of this License with terms:
364
+
365
+ a) Disclaiming warranty or limiting liability differently from the
366
+ terms of sections 15 and 16 of this License; or
367
+
368
+ b) Requiring preservation of specified reasonable legal notices or
369
+ author attributions in that material or in the Appropriate Legal
370
+ Notices displayed by works containing it; or
371
+
372
+ c) Prohibiting misrepresentation of the origin of that material, or
373
+ requiring that modified versions of such material be marked in
374
+ reasonable ways as different from the original version; or
375
+
376
+ d) Limiting the use for publicity purposes of names of licensors or
377
+ authors of the material; or
378
+
379
+ e) Declining to grant rights under trademark law for use of some
380
+ trade names, trademarks, or service marks; or
381
+
382
+ f) Requiring indemnification of licensors and authors of that
383
+ material by anyone who conveys the material (or modified versions of
384
+ it) with contractual assumptions of liability to the recipient, for
385
+ any liability that these contractual assumptions directly impose on
386
+ those licensors and authors.
387
+
388
+ All other non-permissive additional terms are considered "further
389
+ restrictions" within the meaning of section 10. If the Program as you
390
+ received it, or any part of it, contains a notice stating that it is
391
+ governed by this License along with a term that is a further
392
+ restriction, you may remove that term. If a license document contains
393
+ a further restriction but permits relicensing or conveying under this
394
+ License, you may add to a covered work material governed by the terms
395
+ of that license document, provided that the further restriction does
396
+ not survive such relicensing or conveying.
397
+
398
+ If you add terms to a covered work in accord with this section, you
399
+ must place, in the relevant source files, a statement of the
400
+ additional terms that apply to those files, or a notice indicating
401
+ where to find the applicable terms.
402
+
403
+ Additional terms, permissive or non-permissive, may be stated in the
404
+ form of a separately written license, or stated as exceptions;
405
+ the above requirements apply either way.
406
+
407
+ 8. Termination.
408
+
409
+ You may not propagate or modify a covered work except as expressly
410
+ provided under this License. Any attempt otherwise to propagate or
411
+ modify it is void, and will automatically terminate your rights under
412
+ this License (including any patent licenses granted under the third
413
+ paragraph of section 11).
414
+
415
+ However, if you cease all violation of this License, then your
416
+ license from a particular copyright holder is reinstated (a)
417
+ provisionally, unless and until the copyright holder explicitly and
418
+ finally terminates your license, and (b) permanently, if the copyright
419
+ holder fails to notify you of the violation by some reasonable means
420
+ prior to 60 days after the cessation.
421
+
422
+ Moreover, your license from a particular copyright holder is
423
+ reinstated permanently if the copyright holder notifies you of the
424
+ violation by some reasonable means, this is the first time you have
425
+ received notice of violation of this License (for any work) from that
426
+ copyright holder, and you cure the violation prior to 30 days after
427
+ your receipt of the notice.
428
+
429
+ Termination of your rights under this section does not terminate the
430
+ licenses of parties who have received copies or rights from you under
431
+ this License. If your rights have been terminated and not permanently
432
+ reinstated, you do not qualify to receive new licenses for the same
433
+ material under section 10.
434
+
435
+ 9. Acceptance Not Required for Having Copies.
436
+
437
+ You are not required to accept this License in order to receive or
438
+ run a copy of the Program. Ancillary propagation of a covered work
439
+ occurring solely as a consequence of using peer-to-peer transmission
440
+ to receive a copy likewise does not require acceptance. However,
441
+ nothing other than this License grants you permission to propagate or
442
+ modify any covered work. These actions infringe copyright if you do
443
+ not accept this License. Therefore, by modifying or propagating a
444
+ covered work, you indicate your acceptance of this License to do so.
445
+
446
+ 10. Automatic Licensing of Downstream Recipients.
447
+
448
+ Each time you convey a covered work, the recipient automatically
449
+ receives a license from the original licensors, to run, modify and
450
+ propagate that work, subject to this License. You are not responsible
451
+ for enforcing compliance by third parties with this License.
452
+
453
+ An "entity transaction" is a transaction transferring control of an
454
+ organization, or substantially all assets of one, or subdividing an
455
+ organization, or merging organizations. If propagation of a covered
456
+ work results from an entity transaction, each party to that
457
+ transaction who receives a copy of the work also receives whatever
458
+ licenses to the work the party's predecessor in interest had or could
459
+ give under the previous paragraph, plus a right to possession of the
460
+ Corresponding Source of the work from the predecessor in interest, if
461
+ the predecessor has it or can get it with reasonable efforts.
462
+
463
+ You may not impose any further restrictions on the exercise of the
464
+ rights granted or affirmed under this License. For example, you may
465
+ not impose a license fee, royalty, or other charge for exercise of
466
+ rights granted under this License, and you may not initiate litigation
467
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
468
+ any patent claim is infringed by making, using, selling, offering for
469
+ sale, or importing the Program or any portion of it.
470
+
471
+ 11. Patents.
472
+
473
+ A "contributor" is a copyright holder who authorizes use under this
474
+ License of the Program or a work on which the Program is based. The
475
+ work thus licensed is called the contributor's "contributor version".
476
+
477
+ A contributor's "essential patent claims" are all patent claims
478
+ owned or controlled by the contributor, whether already acquired or
479
+ hereafter acquired, that would be infringed by some manner, permitted
480
+ by this License, of making, using, or selling its contributor version,
481
+ but do not include claims that would be infringed only as a
482
+ consequence of further modification of the contributor version. For
483
+ purposes of this definition, "control" includes the right to grant
484
+ patent sublicenses in a manner consistent with the requirements of
485
+ this License.
486
+
487
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488
+ patent license under the contributor's essential patent claims, to
489
+ make, use, sell, offer for sale, import and otherwise run, modify and
490
+ propagate the contents of its contributor version.
491
+
492
+ In the following three paragraphs, a "patent license" is any express
493
+ agreement or commitment, however denominated, not to enforce a patent
494
+ (such as an express permission to practice a patent or covenant not to
495
+ sue for patent infringement). To "grant" such a patent license to a
496
+ party means to make such an agreement or commitment not to enforce a
497
+ patent against the party.
498
+
499
+ If you convey a covered work, knowingly relying on a patent license,
500
+ and the Corresponding Source of the work is not available for anyone
501
+ to copy, free of charge and under the terms of this License, through a
502
+ publicly available network server or other readily accessible means,
503
+ then you must either (1) cause the Corresponding Source to be so
504
+ available, or (2) arrange to deprive yourself of the benefit of the
505
+ patent license for this particular work, or (3) arrange, in a manner
506
+ consistent with the requirements of this License, to extend the patent
507
+ license to downstream recipients. "Knowingly relying" means you have
508
+ actual knowledge that, but for the patent license, your conveying the
509
+ covered work in a country, or your recipient's use of the covered work
510
+ in a country, would infringe one or more identifiable patents in that
511
+ country that you have reason to believe are valid.
512
+
513
+ If, pursuant to or in connection with a single transaction or
514
+ arrangement, you convey, or propagate by procuring conveyance of, a
515
+ covered work, and grant a patent license to some of the parties
516
+ receiving the covered work authorizing them to use, propagate, modify
517
+ or convey a specific copy of the covered work, then the patent license
518
+ you grant is automatically extended to all recipients of the covered
519
+ work and works based on it.
520
+
521
+ A patent license is "discriminatory" if it does not include within
522
+ the scope of its coverage, prohibits the exercise of, or is
523
+ conditioned on the non-exercise of one or more of the rights that are
524
+ specifically granted under this License. You may not convey a covered
525
+ work if you are a party to an arrangement with a third party that is
526
+ in the business of distributing software, under which you make payment
527
+ to the third party based on the extent of your activity of conveying
528
+ the work, and under which the third party grants, to any of the
529
+ parties who would receive the covered work from you, a discriminatory
530
+ patent license (a) in connection with copies of the covered work
531
+ conveyed by you (or copies made from those copies), or (b) primarily
532
+ for and in connection with specific products or compilations that
533
+ contain the covered work, unless you entered into that arrangement,
534
+ or that patent license was granted, prior to 28 March 2007.
535
+
536
+ Nothing in this License shall be construed as excluding or limiting
537
+ any implied license or other defenses to infringement that may
538
+ otherwise be available to you under applicable patent law.
539
+
540
+ 12. No Surrender of Others' Freedom.
541
+
542
+ If conditions are imposed on you (whether by court order, agreement or
543
+ otherwise) that contradict the conditions of this License, they do not
544
+ excuse you from the conditions of this License. If you cannot convey a
545
+ covered work so as to satisfy simultaneously your obligations under this
546
+ License and any other pertinent obligations, then as a consequence you may
547
+ not convey it at all. For example, if you agree to terms that obligate you
548
+ to collect a royalty for further conveying from those to whom you convey
549
+ the Program, the only way you could satisfy both those terms and this
550
+ License would be to refrain entirely from conveying the Program.
551
+
552
+ 13. Use with the GNU Affero General Public License.
553
+
554
+ Notwithstanding any other provision of this License, you have
555
+ permission to link or combine any covered work with a work licensed
556
+ under version 3 of the GNU Affero General Public License into a single
557
+ combined work, and to convey the resulting work. The terms of this
558
+ License will continue to apply to the part which is the covered work,
559
+ but the special requirements of the GNU Affero General Public License,
560
+ section 13, concerning interaction through a network will apply to the
561
+ combination as such.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU General Public License from time to time. Such new versions will
567
+ be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
622
+
623
+ How to Apply These Terms to Your New Programs
624
+
625
+ If you develop a new program, and you want it to be of the greatest
626
+ possible use to the public, the best way to achieve this is to make it
627
+ free software which everyone can redistribute and change under these terms.
628
+
629
+ To do so, attach the following notices to the program. It is safest
630
+ to attach them to the start of each source file to most effectively
631
+ state the exclusion of warranty; and each file should have at least
632
+ the "copyright" line and a pointer to where the full notice is found.
633
+
634
+ <one line to give the program's name and a brief idea of what it does.>
635
+ Copyright (C) <year> <name of author>
636
+
637
+ This program is free software: you can redistribute it and/or modify
638
+ it under the terms of the GNU General Public License as published by
639
+ the Free Software Foundation, either version 3 of the License, or
640
+ (at your option) any later version.
641
+
642
+ This program is distributed in the hope that it will be useful,
643
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
+ GNU General Public License for more details.
646
+
647
+ You should have received a copy of the GNU General Public License
648
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
649
+
650
+ Also add information on how to contact you by electronic and paper mail.
651
+
652
+ If the program does terminal interaction, make it output a short
653
+ notice like this when it starts in an interactive mode:
654
+
655
+ <program> Copyright (C) <year> <name of author>
656
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
+ This is free software, and you are welcome to redistribute it
658
+ under certain conditions; type `show c' for details.
659
+
660
+ The hypothetical commands `show w' and `show c' should show the appropriate
661
+ parts of the General Public License. Of course, your program's commands
662
+ might be different; for a GUI interface, you would use an "about box".
663
+
664
+ You should also get your employer (if you work as a programmer) or school,
665
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
666
+ For more information on this, and how to apply and follow the GNU GPL, see
667
+ <https://www.gnu.org/licenses/>.
668
+
669
+ The GNU General Public License does not permit incorporating your program
670
+ into proprietary programs. If your program is a subroutine library, you
671
+ may consider it more useful to permit linking proprietary applications with
672
+ the library. If this is what you want to do, use the GNU Lesser General
673
+ Public License instead of this License. But first, please read
674
+ <https://www.gnu.org/licenses/why-not-lgpl.html>.
apiGPT4/README.md ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div align="center">
2
+
3
+ # GPT4Free TypeScript Version 🆓
4
+ ###### Providing a free OpenAI GPT-4 API!
5
+ English | [中文](README_zh.md)
6
+
7
+ [![Discord Server](https://discordapp.com/api/guilds/1115852499535020084/widget.png?style=banner2&count=true)](https://discord.gg/bbH68Kzm)
8
+ <p>You can join our discord: <a href="https://discord.gg/bbH68Kzm">discord.gg/gptgod<a> for further updates. <a href="https://discord.gg/bbH68Kzm"><img align="center" alt="gpt4free Discord" width="22px" src="https://raw.githubusercontent.com/peterthehan/peterthehan/master/assets/discord.svg" /></a></p>
9
+ </div>
10
+
11
+
12
+ ## 👍 GPT4 Website Base on this project [GPTGOD](http://gptgod.site)
13
+ <details>
14
+ <summary><strong>Website Feature(Click to expand)</strong></summary>
15
+
16
+ ### GPTGOD Support
17
+
18
+ - [x] Midjourney The Most Powerful AI Drawing System in History.
19
+ - [x] Stable Diffusion
20
+ - [x] Claude
21
+ - [x] Chatgpt
22
+ - [x] Chatgpt with internet
23
+ - [x] Create wechat ai robot for yourself, just need one step
24
+
25
+ In the next two weeks, I will open source all the code for GPTGOD. If you need, Please watch this project or follow me
26
+ to receive notifications.
27
+
28
+ Why now? because there are stil some secret config should be removed from that project.
29
+ </details>
30
+
31
+ ## 🚩 Reverse target
32
+
33
+ Still striving to keep updating.
34
+
35
+ Have implemented models here:
36
+ If you do not want your website to appear here, please raise an issue and I will remove it immediately.
37
+ |model|support|status|active time|
38
+ |--|--|--|--|
39
+ |[ai.mcbbs.gq](https://ai.mcbbs.gq)|gpt3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-06-03|
40
+ |[forefront.ai](https://chat.forefront.ai)|👍GPT-4/gpt3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-06-03|
41
+ |[aidream](http://aidream.cloud)|GPT-3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-05-12|
42
+ |[you.com](you.com)|GPT-3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-05-12
43
+ |[phind.com](https://www.phind.com/)|GPT-4 / Internet / good search|![Active](https://img.shields.io/badge/Active-grey)|
44
+ |[bing.com/chat](bing.com/chat)|GPT-4/3.5||
45
+ |[poe.com](poe.com)| GPT-4/3.5||
46
+ |[writesonic.com](writesonic.com)| GPT-3.5 / Internet||
47
+ |[t3nsor.com](t3nsor.com)|GPT-3.5||
48
+
49
+ ## 🏃‍♂️ Run
50
+
51
+ First of all, you should create file `.env`.
52
+ > ***All operation methods require this step.***
53
+
54
+ ```env
55
+ http_proxy=http://host:port
56
+ rapid_api_key=xxxxxxxxxx
57
+ EMAIL_TYPE=temp-email44
58
+ DEBUG=0
59
+ POOL_SIZE=3
60
+ ```
61
+
62
+ - `http_proxy`: config your proxy if you can not access target website directly
63
+ - `rapid_api_key`: you should config this if you use forefront api, this apikey is used for receive register email, get api key here
64
+ - `EMAIL_TYPE`: temp email type includes `temp-email` `temp-email44` `tempmail-lol`
65
+ - [temp-email](https://rapidapi.com/Privatix/api/temp-mail): soft limit 100req/days, if over use money, need bind credit card! Very Stable!
66
+ - [temp-email44](https://rapidapi.com/calvinloveland335703-0p6BxLYIH8f/api/temp-mail44): hard limit 100req/days! Stable!
67
+ - [tempmail-lol](): nothing need, limit 25request/5min. Not Stable.
68
+ - `DEBUG`: Valid when use `forefront` You can set =1 when you run local. show reverse process
69
+ - `POOL_SIZE`: `forefront` concurrency size. You can engage in {POOL_SIZE} conversations concurrently. More pool size, More conversation can be done simultaneously, But use more RAM
70
+
71
+ ### Run local 🖥️
72
+
73
+ ```shell
74
+ # install module
75
+ yarn
76
+ # start server
77
+ yarn start
78
+ ```
79
+
80
+ ### Run with docker 🐳
81
+
82
+ ```
83
+ docker run -p 3000:3000 --env-file .env xiangsx/gpt4free-ts:latest
84
+ ```
85
+
86
+ ### Deploy with docker-compose 🎭
87
+
88
+ first, you should create file .env; Follow step "Run with docker
89
+
90
+ deploy
91
+
92
+ ```
93
+ docker-compose up --build -d
94
+ ```
95
+
96
+ ## 🚀 Let's Use GPT4
97
+
98
+ > Return when chat complete http://127.0.0.1:3000/ask?prompt=***&model=***
99
+
100
+ > Return with eventstream http://127.0.0.1:3000/ask/stream?prompt=***&model=***
101
+
102
+ ### Common parameters📝
103
+ - `prompt`: your question
104
+ - `model`: target web site include:`forefront` `you` `mcbbs`
105
+
106
+ ### WebSite Unique parameters🔒
107
+ - mcbbs
108
+ - `messages`: For example `[{"role":"system","content":"IMPORTANT: You are a virtual assistant powered by the gpt-3.5-turbo model, now time is 2023/6/3 13:42:27}"},{"role":"user","content":"你好\n"},{"role":"assistant","content":"你好!有什么我可以帮助你的吗?"},{"role":"user","content":"写个冒泡排序\n"}]`
109
+ - `temperature`: 0~1
110
+
111
+ ### Example💡
112
+ - `forefront`
113
+ - http://127.0.0.1:3000/ask?prompt=whoareyou&model=forefront
114
+ - http://127.0.0.1:3000/ask/stream?prompt=whoareyou&model=forefront
115
+ - `mcbbs`
116
+ - [http://127.0.0.1:3000/ask?prompt=nothing&model=mcbbs&messages=[{"role":"system","content":"IMPORTANT: You are a virtual assistant powered by the gpt-3.5-turbo model, now time is 2023/6/3 13:42:27}"},{"role":"user","content":"你好\n"},{"role":"assistant","content":"你好!有什么我可以帮助你的吗?"},{"role":"user","content":"写个冒泡排序\n"}]](http://127.0.0.1:3000/ask?prompt=nothing&model=mcbbs&messages=[{%22role%22:%22system%22,%22content%22:%22IMPORTANT:%20You%20are%20a%20virtual%20assistant%20powered%20by%20the%20gpt-3.5-turbo%20model,%20now%20time%20is%202023/6/3%2013:42:27}%22},{%22role%22:%22user%22,%22content%22:%22%E4%BD%A0%E5%A5%BD\n%22},{%22role%22:%22assistant%22,%22content%22:%22%E4%BD%A0%E5%A5%BD%EF%BC%81%E6%9C%89%E4%BB%80%E4%B9%88%E6%88%91%E5%8F%AF%E4%BB%A5%E5%B8%AE%E5%8A%A9%E4%BD%A0%E7%9A%84%E5%90%97%EF%BC%9F%22},{%22role%22:%22user%22,%22content%22:%22%E5%86%99%E4%B8%AA%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F\n%22}])
117
+ - `you`
118
+ - http://127.0.0.1:3000/ask?prompt=whoareyou&model=you
119
+ - http://127.0.0.1:3000/ask/stream?prompt=whoareyou&model=you
120
+
121
+
122
+
123
+
124
+ ## 🌟 Star History
125
+
126
+ [![Star History Chart](https://api.star-history.com/svg?repos=xiangsx/gpt4free-ts&type=Date)](https://star-history.com/#xiangsx/gpt4free-ts&&type=Date)
127
+
128
+ <p>You may join our discord: <a href="https://discord.com/invite/gpt4free">discord.gg/gpt4free<a> for further updates. <a href="https://discord.gg/gpt4free"><img align="center" alt="gpt4free Discord" width="22px" src="https://raw.githubusercontent.com/peterthehan/peterthehan/master/assets/discord.svg" /></a></p>
129
+
130
+ This is a replication project for the typescript version of [gpt4free](https://github.com/xtekky/gpt4free)
131
+
132
+ <img alt="gpt4free logo" src="https://user-images.githubusercontent.com/98614666/233799515-1a7cb6a3-b17f-42c4-956d-8d2a0664466f.png">
133
+
134
+ ## Legal Notice <a name="legal-notice"></a>
135
+
136
+ This repository is _not_ associated with or endorsed by providers of the APIs contained in this GitHub repository. This
137
+ project is intended **for educational purposes only**. This is just a little personal project. Sites may contact me to
138
+ improve their security or request the removal of their site from this repository.
139
+
140
+ Please note the following:
141
+
142
+ 1. **Disclaimer**: The APIs, services, and trademarks mentioned in this repository belong to their respective owners.
143
+ This project is _not_ claiming any right over them nor is it affiliated with or endorsed by any of the providers
144
+ mentioned.
145
+
146
+ 2. **Responsibility**: The author of this repository is _not_ responsible for any consequences, damages, or losses
147
+ arising from the use or misuse of this repository or the content provided by the third-party APIs. Users are solely
148
+ responsible for their actions and any repercussions that may follow. We strongly recommend the users to follow the
149
+ TOS of the each Website.
150
+
151
+ 3. **Educational Purposes Only**: This repository and its content are provided strictly for educational purposes. By
152
+ using the information and code provided, users acknowledge that they are using the APIs and models at their own risk
153
+ and agree to comply with any applicable laws and regulations.
154
+
155
+ 4. **Copyright**: All content in this repository, including but not limited to code, images, and documentation, is the
156
+ intellectual property of the repository author, unless otherwise stated. Unauthorized copying, distribution, or use
157
+ of any content in this repository is strictly prohibited without the express written consent of the repository
158
+ author.
159
+
160
+ 5. **Indemnification**: Users agree to indemnify, defend, and hold harmless the author of this repository from and
161
+ against any and all claims, liabilities, damages, losses, or expenses, including legal fees and costs, arising out of
162
+ or in any way connected with their use or misuse of this repository, its content, or related third-party APIs.
163
+
164
+ 6. **Updates and Changes**: The author reserves the right to modify, update, or remove any content, information, or
165
+ features in this repository at any time without prior notice. Users are responsible for regularly reviewing the
166
+ content and any changes made to this repository.
167
+
168
+ By using this repository or any code related to it, you agree to these terms. The author is not responsible for any
169
+ copies, forks, or reuploads made by other users. This is the author's only account and repository. To prevent
170
+ impersonation or irresponsible actions, you may comply with the GNU GPL license this Repository uses.
apiGPT4/README_zh.md ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [English](README.md)
2
+
3
+ <p>你可以加入 <a href="https://discord.gg/bbH68Kzm">discord.gg/gptgod<a>获取最新的项目进展. <a href="https://discord.gg/bbH68Kzm"><img align="center" alt="gpt4free Discord" width="22px" src="https://raw.githubusercontent.com/peterthehan/peterthehan/master/assets/discord.svg" /></a></p>
4
+
5
+ ## 示例项目 [GPTGOD](http://gptgod.site)
6
+
7
+ ### GPTGOD 现已支持
8
+
9
+ - [x] Midjourney 史上最强的AI画图
10
+ - [x] Stable Diffusion 史上最强的开源AI画图
11
+ - [x] Claude 仅次于gpt4的AI语言模型
12
+ - [x] Chatgpt 都知道
13
+ - [x] Chatgpt with internet 联网的chatgpt
14
+ - [x] 以上所有功能,都能在网站中,一个步骤集成到微信机器人中
15
+
16
+ GPTGOD 会在稳定之后,完全开源,如果你感兴趣的话请关注我
17
+
18
+ ## 目标
19
+
20
+ 拼命更新中,期待您的PR....
21
+
22
+ 下面是已经可以转成api的网站:
23
+ 如果你发现你的网站在此列表,并且不想他出现,请联系我去除
24
+ |model|support|status|active time|
25
+ |--|--|--|--|
26
+ |[ai.mcbbs.gq](https://ai.mcbbs.gq)|gpt3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-06-03|
27
+ |[forefront.ai](https://chat.forefront.ai)|GPT-4/gpt3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-06-03|
28
+ |[aidream](http://aidream.cloud)|GPT-3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-05-12|
29
+ |[you.com](you.com)|GPT-3.5|![Active](https://img.shields.io/badge/Active-brightgreen)|after 2023-05-12
30
+ |[phind.com](https://www.phind.com/)|GPT-4 / Internet / good search|![Active](https://img.shields.io/badge/Active-grey)|
31
+ |[bing.com/chat](bing.com/chat)|GPT-4/3.5||
32
+ |[poe.com](poe.com)| GPT-4/3.5||
33
+ |[writesonic.com](writesonic.com)| GPT-3.5 / Internet||
34
+ |[t3nsor.com](t3nsor.com)|GPT-3.5||
35
+
36
+ ## 本地运行
37
+
38
+ ```shell
39
+ # install module
40
+ yarn
41
+ # start server
42
+ yarn start
43
+ ```
44
+
45
+ ## 使用Docker运行
46
+
47
+ ### 1. 首先创建环境文件 `.env`
48
+
49
+ ```env
50
+ http_proxy=http://host:port
51
+ # 如果你使用forefront的话,`rapid_api_key` 必填
52
+ # 这里获取 https://rapidapi.com/calvinloveland335703-0p6BxLYIH8f/api/temp-mail44
53
+ # 这里获取 https://rapidapi.com/Privatix/api/temp-mail
54
+ rapid_api_key=xxxxxxxxxx
55
+ # 临时邮箱类型 `temp-email44:不需要绑定信用卡,但是每天限死100条调用` `temp-email: 需要绑定信用卡,每天免费100条,之后付费`
56
+ EMAIL_TYPE=temp-email44
57
+ DEBUG=0 # 目前仅forefront用到 默认是0 一般本地运行可以设置成1,可以看到网站运行过程
58
+ POOL_SIZE=3 # 目前仅forefront用到 启用线程数,默认3 即代表同时可以进行3个会话
59
+ ```
60
+
61
+ ### 2. 运行
62
+
63
+ ```
64
+ docker run -p 3000:3000 --env-file .env xiangsx/gpt4free-ts:latest
65
+ ```
66
+
67
+ ## 使用`docker-compose`部署
68
+
69
+ ### 1. 参照 docker步骤创建 `.env`文件
70
+
71
+ ### 2. 部署
72
+
73
+ ```
74
+ docker-compose up --build -d
75
+ ```
76
+
77
+ ## 使用Sealos详细部署教程
78
+
79
+ [详细教程](https://icloudnative.io/posts/completely-free-to-use-gpt4/)
80
+
81
+ ## API使用说明
82
+
83
+ ### 参数介绍
84
+
85
+ #### 1. 通用参数
86
+
87
+ ```typescript
88
+ interface query {
89
+ prompt: string; // 有些网站不需要
90
+ model: string; // 必填
91
+ }
92
+ ```
93
+
94
+ #### 2. 各个网站特有参数
95
+
96
+ ##### forefront(默认使用gpt4,其他模型需要修改代码)
97
+
98
+
99
+
100
+ ##### mcbbs
101
+
102
+ ```typescript
103
+ interface Message {
104
+ role: string;
105
+ content: string;
106
+ }
107
+
108
+ interface options {
109
+ parse: string;
110
+ messages: string; // attattion messages is Message[] json string
111
+ temperature: number;
112
+ }
113
+
114
+ ```
115
+
116
+ ### 开始使用
117
+
118
+ 普通API,等待整个会话结束才返回
119
+
120
+ ```shell
121
+ # 使用 mcbbs
122
+
123
+ curl '127.0.0.1:3000/ask?messages=[{"role":"system","content":"IMPORTANT: You are a virtual assistant powered by the gpt-3.5-turbo model, now time is 2023/6/3 13:42:27}"},{"role":"user","content":"你好\n"},{"role":"assistant","content":"你好!有什么我可以帮助你的吗?"},{"role":"user","content":"写个冒泡排序\n"}]&prompt=test&model=mcbbs&parse=false'
124
+
125
+ # 使用 chat.forefront Default,use gpt4
126
+ curl "http://127.0.0.1:3000/ask?prompt=hello&model=forefront"
127
+ ```
128
+
129
+ stream类型,会不停地返回,不同网站返回的内容格式有所不同,后面目标是统一返回
130
+
131
+ ```shell
132
+ # test model mcbbs
133
+ curl '127.0.0.1:3000/ask/stream?messages=[{"role":"system","content":"IMPORTANT: You are a virtual assistant powered by the gpt-3.5-turbo model, now time is 2023/6/3 13:42:27}"},{"role":"user","content":"你好\n"},{"role":"assistant","content":"你好!有什么我可以帮助你的吗?"},{"role":"user","content":"写个冒泡排序\n"}]&prompt=test&model=mcbbs&parse=false'
134
+
135
+ # test model forefront, 返回的是eventstreaam 包含三个事件 data(数据流) error(错误事件) done(会话完成,这个里面会携带完整的数据,这个里面的markdown格式是没有错乱的,data里面的格式可能会有问题)
136
+ curl "http://127.0.0.1:3000/ask/stream?prompt=hello&model=forefront"
137
+
138
+ # test you
139
+ curl "http://127.0.0.1:3000/ask/stream?prompt=hello&model=you"
140
+ ```
141
+
142
+ ## 🌟 Star History
143
+
144
+ [![Star History Chart](https://api.star-history.com/svg?repos=xiangsx/gpt4free-ts&type=Date)](https://star-history.com/#xiangsx/gpt4free-ts&&type=Date)
145
+
146
+ <p>You may join our discord: <a href="https://discord.com/invite/gpt4free">discord.gg/gpt4free<a> for further updates. <a href="https://discord.gg/gpt4free"><img align="center" alt="gpt4free Discord" width="22px" src="https://raw.githubusercontent.com/peterthehan/peterthehan/master/assets/discord.svg" /></a></p>
147
+
148
+
149
+ <img alt="gpt4free logo" src="https://user-images.githubusercontent.com/98614666/233799515-1a7cb6a3-b17f-42c4-956d-8d2a0664466f.png">
150
+
151
+ ## Legal Notice <a name="legal-notice"></a>
152
+
153
+ This repository is _not_ associated with or endorsed by providers of the APIs contained in this GitHub repository. This
154
+ project is intended **for educational purposes only**. This is just a little personal project. Sites may contact me to
155
+ improve their security or request the removal of their site from this repository.
156
+
157
+ Please note the following:
158
+
159
+ 1. **Disclaimer**: The APIs, services, and trademarks mentioned in this repository belong to their respective owners.
160
+ This project is _not_ claiming any right over them nor is it affiliated with or endorsed by any of the providers
161
+ mentioned.
162
+
163
+ 2. **Responsibility**: The author of this repository is _not_ responsible for any consequences, damages, or losses
164
+ arising from the use or misuse of this repository or the content provided by the third-party APIs. Users are solely
165
+ responsible for their actions and any repercussions that may follow. We strongly recommend the users to follow the
166
+ TOS of the each Website.
167
+
168
+ 3. **Educational Purposes Only**: This repository and its content are provided strictly for educational purposes. By
169
+ using the information and code provided, users acknowledge that they are using the APIs and models at their own risk
170
+ and agree to comply with any applicable laws and regulations.
171
+
172
+ 4. **Copyright**: All content in this repository, including but not limited to code, images, and documentation, is the
173
+ intellectual property of the repository author, unless otherwise stated. Unauthorized copying, distribution, or use
174
+ of any content in this repository is strictly prohibited without the express written consent of the repository
175
+ author.
176
+
177
+ 5. **Indemnification**: Users agree to indemnify, defend, and hold harmless the author of this repository from and
178
+ against any and all claims, liabilities, damages, losses, or expenses, including legal fees and costs, arising out of
179
+ or in any way connected with their use or misuse of this repository, its content, or related third-party APIs.
180
+
181
+ 6. **Updates and Changes**: The author reserves the right to modify, update, or remove any content, information, or
182
+ features in this repository at any time without prior notice. Users are responsible for regularly reviewing the
183
+ content and any changes made to this repository.
184
+
185
+ By using this repository or any code related to it, you agree to these terms. The author is not responsible for any
186
+ copies, forks, or reuploads made by other users. This is the author's only account and repository. To prevent
187
+ impersonation or irresponsible actions, you may comply with the GNU GPL license this Repository uses.
apiGPT4/docker-compose.yaml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: "3.9"
2
+
3
+ services:
4
+ gpt4free-ts:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile
8
+ container_name: gpt4free-ts
9
+ image: gpt4free-ts:latest
10
+ ports:
11
+ - "13000:3000"
12
+ restart: always
13
+ volumes:
14
+ - ./run:/usr/src/app/run
15
+ cap_add:
16
+ - "SYS_ADMIN"
17
+ environment:
18
+ # - TZ=Asia/Shanghai
19
+ - http_proxy=${http_proxy}
20
+ - https_proxy=${http_proxy}
21
+ - rapid_api_key=${rapid_api_key}
apiGPT4/index.ts ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Koa, {Context, Next} from 'koa';
2
+ import Router from 'koa-router'
3
+ import bodyParser from 'koa-bodyparser';
4
+ import {ChatModelFactory, Model} from "./model";
5
+ import dotenv from 'dotenv';
6
+
7
+ dotenv.config();
8
+
9
+ const app = new Koa();
10
+ const router = new Router();
11
+ const errorHandler = async (ctx: Context, next: Next) => {
12
+ try {
13
+ await next();
14
+ } catch (err: any) {
15
+ console.error(err);
16
+ ctx.body = JSON.stringify(err);
17
+ ctx.res.end();
18
+ }
19
+ };
20
+ app.use(errorHandler);
21
+ app.use(bodyParser());
22
+ const chatModel = new ChatModelFactory();
23
+
24
+ interface AskReq {
25
+ prompt: string;
26
+ model: Model;
27
+ }
28
+
29
+ router.get('/ask', async (ctx) => {
30
+ const {prompt, model = Model.Mcbbs, ...options} = ctx.query as unknown as AskReq;
31
+ if (!prompt) {
32
+ ctx.body = 'please input prompt';
33
+ return;
34
+ }
35
+ const chat = chatModel.get(model);
36
+ if (!chat) {
37
+ ctx.body = 'Unsupported model';
38
+ return;
39
+ }
40
+ const res = await chat.ask({prompt: prompt as string, options});
41
+ ctx.body = res.text;
42
+ });
43
+
44
+ router.get('/ask/stream', async (ctx) => {
45
+ const {prompt, model = Model.Mcbbs, ...options} = ctx.query as unknown as AskReq;
46
+ if (!prompt) {
47
+ ctx.body = 'please input prompt';
48
+ return;
49
+ }
50
+ const chat = chatModel.get(model);
51
+ if (!chat) {
52
+ ctx.body = 'Unsupported model';
53
+ return;
54
+ }
55
+ ctx.set({
56
+ "Content-Type": "text/event-stream;charset=utf-8",
57
+ "Cache-Control": "no-cache",
58
+ "Connection": "keep-alive",
59
+ });
60
+ const res = await chat.askStream({prompt: prompt as string, options});
61
+ ctx.body = res?.text;
62
+ })
63
+
64
+ app.use(router.routes());
65
+
66
+ (async () => {
67
+ const server = app.listen(3000, () => {
68
+ console.log("Now listening: 127.0.0.1:3000");
69
+ });
70
+ process.on('SIGINT', () => {
71
+ server.close(() => {
72
+ process.exit(0);
73
+ });
74
+ });
75
+ })()
76
+
apiGPT4/model/aidream/index.ts ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {Chat, ChatOptions, Request, Response, ResponseStream} from "../base";
2
+ import {CreateAxiosProxy} from "../../utils/proxyAgent";
3
+ import {AxiosInstance, AxiosRequestConfig, CreateAxiosDefaults} from "axios";
4
+ import {Stream} from "stream";
5
+ import es from "event-stream";
6
+ import {parseJSON} from "../../utils";
7
+
8
+ export interface AiDreamReq extends Request {
9
+ options: {
10
+ parentMessageId: string
11
+ systemMessage: string
12
+ temperature: number;
13
+ top_p: number
14
+ parse: boolean;
15
+ };
16
+ }
17
+
18
+ interface RealReq {
19
+ options: {
20
+ parentMessageId?: string;
21
+ };
22
+ prompt: string;
23
+ systemMessage: string;
24
+ temperature: number;
25
+ top_p: number;
26
+ }
27
+
28
+ interface RealRes {
29
+ role: string;
30
+ id: string;
31
+ parentMessageId: string;
32
+ text: string;
33
+ delta: string;
34
+ detail: {
35
+ id: string;
36
+ object: string;
37
+ created: number;
38
+ model: string;
39
+ choices: {
40
+ delta: {
41
+ content: string;
42
+ };
43
+ index: number;
44
+ finish_reason: any;
45
+ }[];
46
+ };
47
+ }
48
+
49
+ export class AiDream extends Chat {
50
+ private client: AxiosInstance;
51
+
52
+ constructor(options?: ChatOptions) {
53
+ super(options);
54
+ this.client = CreateAxiosProxy({
55
+ baseURL: 'http://aidream.cloud/api/',
56
+ headers: {
57
+ "Cache-Control": "no-cache",
58
+ "Proxy-Connection": "keep-alive"
59
+ }
60
+ } as CreateAxiosDefaults);
61
+ }
62
+
63
+ public async ask(req: AiDreamReq): Promise<Response> {
64
+ req.options.parse = false;
65
+ const res = await this.askStream(req)
66
+ const result: Response = {
67
+ text: '', other: {}
68
+ }
69
+ return new Promise(resolve => {
70
+ res.text.pipe(es.split(/\r?\n/)).pipe(es.map(async (chunk: any, cb: any) => {
71
+ const data = parseJSON(chunk, {}) as RealRes;
72
+ if (!data?.detail?.choices) {
73
+ cb(null, '');
74
+ return;
75
+ }
76
+ const [{delta: {content}}] = data.detail.choices;
77
+ result.other.parentMessageId = data.parentMessageId;
78
+ cb(null, content);
79
+ })).on('data', (data) => {
80
+ result.text += data;
81
+ }).on('close', () => {
82
+ resolve(result);
83
+ })
84
+ })
85
+
86
+ }
87
+
88
+ public async askStream(req: AiDreamReq): Promise<ResponseStream> {
89
+ const {prompt = ''} = req;
90
+ const {
91
+ systemMessage = 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully. Respond using markdown.',
92
+ temperature = 1.0,
93
+ top_p = 1,
94
+ parentMessageId,
95
+ parse = true,
96
+ } = req.options;
97
+ const data: RealReq = {
98
+ options: {parentMessageId}, prompt, systemMessage, temperature, top_p
99
+ };
100
+ const res = await this.client.post('/chat-process', data, {
101
+ responseType: 'stream'
102
+ } as AxiosRequestConfig);
103
+ if (parse) {
104
+ return {
105
+ text: this.parseData(res.data)
106
+ }
107
+ }
108
+ return {text: res.data};
109
+ }
110
+
111
+ parseData(v: Stream): Stream {
112
+ return v.pipe(es.split(/\r?\n/)).pipe(es.map(async (chunk: any, cb: any) => {
113
+ const data = parseJSON(chunk, {}) as RealRes;
114
+ if (!data?.detail?.choices) {
115
+ cb(null, '');
116
+ return;
117
+ }
118
+ const [{delta: {content}}] = data.detail.choices;
119
+ cb(null, content);
120
+ }))
121
+ }
122
+ }
apiGPT4/model/base.ts ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {Stream} from "stream";
2
+
3
+ export interface ChatOptions {
4
+ }
5
+
6
+ export interface Response {
7
+ text: string | null;
8
+ other?: any;
9
+ }
10
+
11
+ export interface ResponseStream {
12
+ text: Stream;
13
+ other?: any;
14
+ }
15
+
16
+ export interface Request {
17
+ prompt: string;
18
+ options?: any;
19
+ }
20
+
21
+ export abstract class Chat {
22
+ protected options: ChatOptions | undefined;
23
+
24
+ protected constructor(options?: ChatOptions) {
25
+ this.options = options;
26
+ }
27
+
28
+ public abstract ask(req: Request): Promise<Response>
29
+
30
+ public abstract askStream(req: Request): Promise<ResponseStream>
31
+ }
apiGPT4/model/forefront/index.ts ADDED
@@ -0,0 +1,362 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {Chat, ChatOptions, Request, Response, ResponseStream} from "../base";
2
+ import {Browser, Page} from "puppeteer";
3
+ import {BrowserPool} from "../../pool/puppeteer";
4
+ import {CreateEmail, TempEmailType, TempMailMessage} from "../../utils/emailFactory";
5
+ import {CreateTlsProxy} from "../../utils/proxyAgent";
6
+ import * as fs from "fs";
7
+ import {parseJSON, sleep} from "../../utils";
8
+ import {v4} from "uuid";
9
+ import moment from 'moment';
10
+ import {ReadEventStream, WriteEventStream} from "../../utils/eventstream";
11
+
12
+ type PageData = {
13
+ gpt4times: number;
14
+ }
15
+
16
+ const MaxGptTimes = 4;
17
+
18
+ const TimeFormat = "YYYY-MM-DD HH:mm:ss";
19
+
20
+ type Account = {
21
+ id: string;
22
+ email?: string;
23
+ login_time?: string;
24
+ last_use_time?: string;
25
+ gpt4times: number;
26
+ }
27
+
28
+ class AccountPool {
29
+ private pool: Account[] = [];
30
+ private readonly account_file_path = './run/account.json';
31
+
32
+ constructor() {
33
+ if (fs.existsSync(this.account_file_path)) {
34
+ const accountStr = fs.readFileSync(this.account_file_path, 'utf-8');
35
+ this.pool = parseJSON(accountStr, [] as Account[]);
36
+ } else {
37
+ fs.mkdirSync('./run', {recursive: true});
38
+ this.syncfile();
39
+ }
40
+ }
41
+
42
+ public syncfile() {
43
+ fs.writeFileSync(this.account_file_path, JSON.stringify(this.pool));
44
+ }
45
+
46
+ public getByID(id: string) {
47
+ for (const item of this.pool) {
48
+ if (item.id === id) {
49
+ return item;
50
+ }
51
+ }
52
+ }
53
+
54
+ public delete(id: string) {
55
+ this.pool = this.pool.filter(item => item.id !== id);
56
+ this.syncfile();
57
+ }
58
+
59
+ public get(): Account {
60
+ const now = moment();
61
+ const minInterval = 3 * 60 * 60 + 10 * 60;// 3hour + 10min
62
+ for (const item of this.pool) {
63
+ if (now.unix() - moment(item.last_use_time).unix() > minInterval) {
64
+ console.log(`find old login account:`, item);
65
+ item.last_use_time = now.format(TimeFormat);
66
+ this.syncfile();
67
+ return item
68
+ }
69
+ }
70
+ const newAccount: Account = {
71
+ id: v4(),
72
+ last_use_time: now.format(TimeFormat),
73
+ gpt4times: 0,
74
+ }
75
+ this.pool.push(newAccount);
76
+ this.syncfile();
77
+ return newAccount
78
+ }
79
+
80
+ public multiGet(size: number): Account[] {
81
+ const result: Account[] = [];
82
+ for (let i = 0; i < size; i++) {
83
+ result.push(this.get());
84
+ }
85
+ return result
86
+ }
87
+ }
88
+
89
+
90
+ export class Forefrontnew extends Chat {
91
+ private pagePool: BrowserPool<Account>;
92
+ private accountPool: AccountPool;
93
+
94
+ constructor(options?: ChatOptions) {
95
+ super(options);
96
+ this.accountPool = new AccountPool();
97
+ const maxSize = +(process.env.POOL_SIZE || 2);
98
+ const initialAccounts = this.accountPool.multiGet(maxSize);
99
+ this.pagePool = new BrowserPool<Account>(maxSize, initialAccounts.map(item => item.id), this.init.bind(this));
100
+ }
101
+
102
+ public async ask(req: Request): Promise<Response> {
103
+ const res = await this.askStream(req);
104
+ let text = '';
105
+ return new Promise(resolve => {
106
+ const et = new ReadEventStream(res.text);
107
+ et.read(({event, data}) => {
108
+ if (!data) {
109
+ return;
110
+ }
111
+ switch (event) {
112
+ case 'data':
113
+ text = data;
114
+ break;
115
+ case 'done':
116
+ text = data;
117
+ break;
118
+ default:
119
+ console.error(data);
120
+ break;
121
+ }
122
+ }, () => {
123
+ resolve({text, other: res.other});
124
+ });
125
+ })
126
+ }
127
+
128
+ private async tryValidate(validateURL: string, triedTimes: number) {
129
+ if (triedTimes === 10) {
130
+ throw new Error('validate failed');
131
+ }
132
+ triedTimes += 1;
133
+ try {
134
+ const tsl = await CreateTlsProxy({clientIdentifier: "chrome_108"}).get(validateURL)
135
+ } catch (e) {
136
+ console.log(e)
137
+ await this.tryValidate(validateURL, triedTimes);
138
+ }
139
+ }
140
+
141
+ private static async closeVIPPop(page: Page) {
142
+ await page.waitForSelector('.flex > .w-full:nth-child(1) > .grid:nth-child(2) > .flex > .text-sm')
143
+ await page.click('.flex > .w-full:nth-child(1) > .grid:nth-child(2) > .flex > .text-sm')
144
+ }
145
+
146
+ private static async selectAssistant(page: Page) {
147
+ await page.waitForSelector('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
148
+ await page.click('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
149
+ await page.hover('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
150
+ // click assistant select
151
+ await page.waitForSelector('.px-4 > .flex > .grid > .h-9 > .grow')
152
+ await page.click('.px-4 > .flex > .grid > .h-9 > .grow')
153
+
154
+ // focus search input
155
+ await page.waitForSelector('.flex > .grid > .block > .sticky > .text-sm')
156
+ await page.click('.flex > .grid > .block > .sticky > .text-sm')
157
+ await page.keyboard.type('helpful', {delay: 10});
158
+
159
+ // select helpful assistant
160
+ await page.waitForSelector('.px-4 > .flex > .grid > .block > .group')
161
+ await page.click('.px-4 > .flex > .grid > .block > .group')
162
+
163
+ await page.click('.relative > .flex > .w-full > .text-th-primary-dark > div')
164
+ }
165
+
166
+ private static async switchToGpt4(page: Page, triedTimes: number = 0) {
167
+ if (triedTimes === 3) {
168
+ await page.waitForSelector('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
169
+ await page.click('div > .absolute > .relative > .w-full:nth-child(3) > .relative');
170
+ return;
171
+ }
172
+ try {
173
+ console.log('switch gpt4....')
174
+ triedTimes += 1;
175
+ await sleep(1000);
176
+ await page.waitForSelector('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
177
+ await page.click('div > .absolute > .relative > .w-full:nth-child(3) > .relative');
178
+ await sleep(1000);
179
+ await page.waitForSelector('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
180
+ await page.click('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
181
+ await sleep(1000);
182
+ await page.hover('div > .absolute > .relative > .w-full:nth-child(3) > .relative')
183
+
184
+ // click never internet
185
+ await page.waitForSelector('.flex > .p-1 > .relative')
186
+ await page.click('.flex > .p-1 > .relative')
187
+ await Forefrontnew.selectAssistant(page);
188
+ console.log('switch gpt4 ok!')
189
+ } catch (e) {
190
+ console.log(e);
191
+ await page.reload();
192
+ await Forefrontnew.switchToGpt4(page, triedTimes);
193
+ }
194
+ }
195
+
196
+ private async allowClipboard(browser: Browser, page: Page) {
197
+ const context = browser.defaultBrowserContext()
198
+ await context.overridePermissions("https://chat.forefront.ai", [
199
+ 'clipboard-read',
200
+ 'clipboard-write',
201
+ ])
202
+ await page.evaluate(() => Object.defineProperty(navigator, 'clipboard', {
203
+ value: {
204
+ //@ts-ignore
205
+ writeText(text) {
206
+ this.text = text;
207
+ },
208
+ }
209
+ }));
210
+ }
211
+
212
+ private async init(id: string, browser: Browser): Promise<[Page | undefined, Account, string]> {
213
+ const account = this.accountPool.getByID(id);
214
+ try {
215
+ if (!account) {
216
+ throw new Error("account undefined, something error");
217
+ }
218
+
219
+ const [page] = await browser.pages();
220
+ if (account.login_time) {
221
+ await page.goto("https://chat.forefront.ai/");
222
+ await page.setViewport({width: 1920, height: 1080});
223
+ await Forefrontnew.closeVIPPop(page);
224
+ await Forefrontnew.switchToGpt4(page);
225
+ await this.allowClipboard(browser, page);
226
+ return [page, account, account.id];
227
+ }
228
+ await page.goto("https://accounts.forefront.ai/sign-up");
229
+ await page.setViewport({width: 1920, height: 1080});
230
+ await page.waitForSelector('#emailAddress-field');
231
+ await page.click('#emailAddress-field')
232
+
233
+ await page.waitForSelector('.cl-rootBox > .cl-card > .cl-main > .cl-form > .cl-formButtonPrimary')
234
+ await page.click('.cl-rootBox > .cl-card > .cl-main > .cl-form > .cl-formButtonPrimary')
235
+
236
+ const emailBox = CreateEmail(process.env.EMAIL_TYPE as TempEmailType || TempEmailType.TempEmail44)
237
+ const emailAddress = await emailBox.getMailAddress();
238
+ account.email = emailAddress;
239
+ this.accountPool.syncfile();
240
+ // 将文本键入焦点元素
241
+ await page.keyboard.type(emailAddress, {delay: 10});
242
+ await page.keyboard.press('Enter');
243
+
244
+ const msgs = (await emailBox.waitMails()) as TempMailMessage[]
245
+ let validateURL: string | undefined;
246
+ for (const msg of msgs) {
247
+ validateURL = msg.content.match(/https:\/\/clerk\.forefront\.ai\/v1\/verify\?token=[^\s"]+/i)?.[0];
248
+ if (validateURL) {
249
+ break;
250
+ }
251
+ }
252
+ if (!validateURL) {
253
+ throw new Error('Error while obtaining verfication URL!')
254
+ }
255
+ await this.tryValidate(validateURL, 0);
256
+ console.log('register successfully');
257
+ account.login_time = moment().format(TimeFormat);
258
+ this.accountPool.syncfile();
259
+ await page.waitForSelector('.flex > .modal > .modal-box > .flex > .px-3:nth-child(1)', {timeout: 120000})
260
+ await page.click('.flex > .modal > .modal-box > .flex > .px-3:nth-child(1)')
261
+ await Forefrontnew.closeVIPPop(page);
262
+ await page.waitForSelector('.relative > .flex > .w-full > .text-th-primary-dark > div', {timeout: 120000})
263
+ await Forefrontnew.switchToGpt4(page);
264
+ await this.allowClipboard(browser, page);
265
+ return [page, account, account.id];
266
+ } catch (e) {
267
+ console.warn('something error happened,err:', e);
268
+ this.accountPool.delete(account?.id || "")
269
+ const newAccount = this.accountPool.get();
270
+ return [undefined, this.accountPool.get(), newAccount.id] as any;
271
+ }
272
+ }
273
+
274
+ public static async copyContent(page: Page) {
275
+ await page.waitForSelector('.opacity-100 > .flex > .relative:nth-child(3) > .flex > .cursor-pointer', {timeout: 5 * 60 * 1000})
276
+ await page.click('.opacity-100 > .flex > .relative:nth-child(3) > .flex > .cursor-pointer')
277
+ }
278
+
279
+ public async askStream(req: Request): Promise<ResponseStream> {
280
+ const [page, account, done, destroy] = this.pagePool.get();
281
+ const pt = new WriteEventStream();
282
+ if (!account || !page) {
283
+ pt.write("error", 'please wait init.....about 1 min');
284
+ pt.end();
285
+ return {text: pt.stream};
286
+ }
287
+ try {
288
+ console.log('try to find input');
289
+ await page.waitForSelector('.relative > .flex > .w-full > .text-th-primary-dark > div', {
290
+ timeout: 10000,
291
+ visible: true
292
+ })
293
+ console.log('found input');
294
+ await page.click('.relative > .flex > .w-full > .text-th-primary-dark > div')
295
+ await page.focus('.relative > .flex > .w-full > .text-th-primary-dark > div')
296
+ await page.keyboard.type(req.prompt);
297
+ await page.keyboard.press('Enter');
298
+ await page.waitForSelector('#__next > .flex > .relative > .relative > .w-full:nth-child(1) > div');
299
+ // find markdown list container
300
+ const mdList = await page.$('#__next > .flex > .relative > .relative > .w-full:nth-child(1) > div');
301
+ const md = mdList;
302
+ } catch (e) {
303
+ console.error(e);
304
+ const newAccount = this.accountPool.get();
305
+ destroy(newAccount.id);
306
+ pt.write("error", 'some thing error, try again later');
307
+ pt.end();
308
+ return {text: pt.stream}
309
+ }
310
+
311
+ // get latest markdown id
312
+ let id = 4;
313
+ (async () => {
314
+ let itl;
315
+ try {
316
+ const selector = `div > .w-full:nth-child(${id}) > .flex > .flex > .post-markdown`;
317
+ await page.waitForSelector(selector);
318
+ const result = await page.$(selector)
319
+ itl = setInterval(async () => {
320
+ const text: any = await result?.evaluate(el => {
321
+ return el.textContent;
322
+ });
323
+ if (text) {
324
+ pt.write("data", text);
325
+ }
326
+ }, 100)
327
+ if (!page) {
328
+ return;
329
+ }
330
+ await Forefrontnew.copyContent(page);
331
+ //@ts-ignore
332
+ const text: any = await page.evaluate(() => navigator.clipboard.text);
333
+ console.log('chat end: ', text);
334
+ pt.write("done", text || await result?.evaluate(el => {
335
+ return el.textContent;
336
+ }));
337
+ } catch (e) {
338
+ console.error(e);
339
+ } finally {
340
+ pt.end();
341
+ await page.waitForSelector('.flex:nth-child(1) > div:nth-child(2) > .relative > .flex > .cursor-pointer')
342
+ await page.click('.flex:nth-child(1) > div:nth-child(2) > .relative > .flex > .cursor-pointer')
343
+ account.gpt4times += 1;
344
+ this.accountPool.syncfile();
345
+ if (account.gpt4times >= MaxGptTimes) {
346
+ account.gpt4times = 0;
347
+ account.last_use_time = moment().format(TimeFormat);
348
+ this.accountPool.syncfile();
349
+ const newAccount = this.accountPool.get();
350
+ destroy(newAccount.id);
351
+ } else {
352
+ done(account);
353
+ }
354
+ if (itl) {
355
+ clearInterval(itl);
356
+ }
357
+ }
358
+ })().then();
359
+ return {text: pt.stream}
360
+ }
361
+
362
+ }
apiGPT4/model/index.ts ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {Chat, ChatOptions} from "./base";
2
+ import {You} from "./you";
3
+ import {AiDream} from "./aidream";
4
+ import {Forefrontnew} from "./forefront";
5
+ import {Mcbbs} from "./mcbbs";
6
+
7
+ export enum Model {
8
+ // define new model here
9
+ You = 'you',
10
+ Forefront = 'forefront',
11
+ AiDream = 'aidream',
12
+ Mcbbs = 'mcbbs',
13
+ }
14
+
15
+ export class ChatModelFactory {
16
+ private modelMap: Map<Model, Chat>;
17
+ private readonly options: ChatOptions | undefined;
18
+
19
+ constructor(options?: ChatOptions) {
20
+ this.modelMap = new Map();
21
+ this.options = options;
22
+ this.init();
23
+ }
24
+
25
+ init() {
26
+ // register new model here
27
+ this.modelMap.set(Model.You, new You(this.options))
28
+ this.modelMap.set(Model.Forefront, new Forefrontnew(this.options))
29
+ this.modelMap.set(Model.AiDream, new AiDream(this.options))
30
+ this.modelMap.set(Model.Mcbbs, new Mcbbs(this.options))
31
+ }
32
+
33
+ get(model: Model): Chat | undefined {
34
+ return this.modelMap.get(model);
35
+ }
36
+ }
apiGPT4/model/mcbbs/index.ts ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {Chat, ChatOptions, Request, Response, ResponseStream} from "../base";
2
+ import {AxiosInstance, AxiosRequestConfig, CreateAxiosDefaults} from "axios";
3
+ import {CreateAxiosProxy} from "../../utils/proxyAgent";
4
+ import es from "event-stream";
5
+ import {parseJSON} from "../../utils";
6
+ import {Stream} from "stream";
7
+
8
+ interface Message {
9
+ role: string;
10
+ content: string;
11
+ }
12
+
13
+ interface RealReq {
14
+ messages: Message[];
15
+ stream: boolean;
16
+ model: string;
17
+ temperature: number;
18
+ presence_penalty: number;
19
+ }
20
+
21
+ export interface McbbsReq extends Request {
22
+ options: {
23
+ parse: string;
24
+ messages: string;
25
+ temperature: number;
26
+ }
27
+ }
28
+
29
+ export class Mcbbs extends Chat {
30
+ private client: AxiosInstance;
31
+
32
+ constructor(options?: ChatOptions) {
33
+ super(options);
34
+ this.client = CreateAxiosProxy({
35
+ baseURL: 'https://ai.mcbbs.gq/api',
36
+ headers: {
37
+ 'Content-Type': 'application/json',
38
+ "accept": "text/event-stream",
39
+ "Cache-Control": "no-cache",
40
+ "Proxy-Connection": "keep-alive"
41
+ }
42
+ } as CreateAxiosDefaults);
43
+ }
44
+
45
+ public async ask(req: McbbsReq): Promise<Response> {
46
+ const res = await this.askStream(req)
47
+ const result: Response = {
48
+ text: '', other: {}
49
+ }
50
+ return new Promise(resolve => {
51
+ res.text.on('data', (data) => {
52
+ result.text += data;
53
+ }).on('close', () => {
54
+ resolve(result);
55
+ })
56
+ })
57
+
58
+ }
59
+
60
+ public async askStream(req: McbbsReq): Promise<ResponseStream> {
61
+ const {
62
+ messages,
63
+ temperature = 1,
64
+ parse = 'true'
65
+ } = req.options;
66
+ const data: RealReq = {
67
+ stream: true,
68
+ messages: JSON.parse(messages),
69
+ temperature,
70
+ presence_penalty: 2,
71
+ model: 'gpt-3.5-turbo'
72
+ };
73
+ const res = await this.client.post('/openai/v1/chat/completions', data, {
74
+ responseType: 'stream',
75
+ } as AxiosRequestConfig);
76
+ if (parse === 'false') {
77
+ return {text: res.data}
78
+ }
79
+ return {
80
+ text: this.parseData(res.data)
81
+ };
82
+ }
83
+
84
+ parseData(v: Stream): Stream {
85
+ return v.pipe(es.split(/\r?\n\r?\n/)).pipe(es.map(async (chunk: any, cb: any) => {
86
+ const dataStr = chunk.replace('data: ', '');
87
+ if (dataStr === '[Done]') {
88
+ cb(null, '');
89
+ return;
90
+ }
91
+ const data = parseJSON(dataStr, {} as any);
92
+ if (!data?.choices) {
93
+ cb(null, '');
94
+ return;
95
+ }
96
+ const [{delta: {content = ""}}] = data.choices;
97
+ cb(null, content);
98
+ }))
99
+ }
100
+ }
apiGPT4/model/you/index.ts ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {v4 as uuidv4} from 'uuid';
2
+ //@ts-ignore
3
+ import UserAgent from 'user-agents';
4
+ import {Session} from "tls-client/dist/esm/sessions";
5
+ import {Params} from "tls-client/dist/esm/types";
6
+ import {parseJSON, toEventCB, toEventStream} from "../../utils";
7
+ import {Chat, ChatOptions, Request, Response, ResponseStream} from "../base";
8
+ import {CreateTlsProxy} from "../../utils/proxyAgent";
9
+
10
+ const userAgent = new UserAgent();
11
+
12
+ interface IRequestOptions {
13
+ page?: number;
14
+ count?: number;
15
+ safeSearch?: string;
16
+ onShoppingPage?: string;
17
+ mkt?: string;
18
+ responseFilter?: string;
19
+ domain?: string;
20
+ queryTraceId?: string | null;
21
+ chat?: any[] | null;
22
+ includeLinks?: string;
23
+ detailed?: string;
24
+ debug?: string;
25
+ proxy?: string | null;
26
+ }
27
+
28
+ interface SearchResult {
29
+ search: {
30
+ third_party_search_results: {
31
+ name: string,
32
+ url: string,
33
+ displayUrl: string,
34
+ snippet: string,
35
+ language: null | string,
36
+ thumbnailUrl: string,
37
+ isFamilyFriendly: null | boolean,
38
+ isNavigational: null | boolean,
39
+ snmix_link: null | string
40
+ }[],
41
+ rankings: {
42
+ pole: null,
43
+ sidebar: null,
44
+ mainline: {
45
+ answerType: string,
46
+ resultIndex: number,
47
+ value: {
48
+ id: string
49
+ }
50
+ }[]
51
+ },
52
+ query_context: {
53
+ spelling: null,
54
+ originalQuery: string
55
+ },
56
+ third_party_web_results_source: number
57
+ },
58
+ time: number,
59
+ query: string,
60
+ exactAbTestSlices: {
61
+ abUseQueryRewriter: string
62
+ }
63
+ }
64
+
65
+ export class You extends Chat {
66
+ private session: Session;
67
+
68
+ constructor(props?: ChatOptions) {
69
+ super(props);
70
+ this.session = CreateTlsProxy({clientIdentifier: 'chrome_108'});
71
+ this.session.headers = this.getHeaders();
72
+ }
73
+
74
+ private async request(req: Request) {
75
+ let {
76
+ page = 1,
77
+ count = 10,
78
+ safeSearch = 'Moderate',
79
+ onShoppingPage = 'False',
80
+ mkt = '',
81
+ responseFilter = 'WebPages,Translations,TimeZone,Computation,RelatedSearches',
82
+ domain = 'youchat',
83
+ queryTraceId = null,
84
+ chat = null,
85
+ includeLinks = "False",
86
+ detailed = "False",
87
+ debug = "False",
88
+ } = req.options || {};
89
+ if (!chat) {
90
+ chat = [];
91
+ }
92
+ return await this.session.get(
93
+ 'https://you.com/api/streamingSearch', {
94
+ params: {
95
+ q: req.prompt,
96
+ page: page + '',
97
+ count: count + '',
98
+ safeSearch: safeSearch + '',
99
+ onShoppingPage: onShoppingPage + '',
100
+ mkt: mkt + '',
101
+ responseFilter: responseFilter + '',
102
+ domain: domain + '',
103
+ queryTraceId: queryTraceId || uuidv4(),
104
+ chat: JSON.stringify(chat),
105
+ } as Params,
106
+ }
107
+ );
108
+ }
109
+
110
+ public async askStream(req: Request): Promise<ResponseStream> {
111
+ const response = await this.request(req);
112
+ return {text: toEventStream(response.content), other: {}}
113
+ }
114
+
115
+ public async ask(
116
+ req: Request): Promise<Response> {
117
+ const response = await this.request(req);
118
+ return new Promise(resolve => {
119
+ const res: Response = {
120
+ text: '',
121
+ other: {},
122
+ };
123
+ toEventCB(response.content, (eventName, data) => {
124
+ let obj: any;
125
+ switch (eventName) {
126
+ case 'youChatToken':
127
+ obj = parseJSON(data, {}) as any;
128
+ res.text += obj.youChatToken;
129
+ break;
130
+ case 'done':
131
+ resolve(res);
132
+ return;
133
+ default:
134
+ obj = parseJSON(data, {}) as any;
135
+ res.other[eventName] = obj;
136
+ return;
137
+ }
138
+ });
139
+ })
140
+ }
141
+
142
+ getHeaders(): { [key: string]: string } {
143
+ return {
144
+ authority: 'you.com',
145
+ accept: 'text/event-stream',
146
+ 'accept-language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
147
+ 'cache-control': 'no-cache',
148
+ referer: 'https://you.com/search?q=who+are+you&tbm=youchat',
149
+ 'sec-ch-ua': '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"',
150
+ 'sec-ch-ua-mobile': '?0',
151
+ 'sec-ch-ua-platform': '"Windows"',
152
+ 'sec-fetch-dest': 'empty',
153
+ 'sec-fetch-mode': 'cors',
154
+ 'sec-fetch-site': 'same-origin',
155
+ cookie: `safesearch_guest=Moderate; uuid_guest=${uuidv4()}`,
156
+ 'user-agent': userAgent.toString(),
157
+ };
158
+ }
159
+ }
apiGPT4/package.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "gpt4free-ts",
3
+ "version": "0.0.1",
4
+ "description": "gpt4free typescript version",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "ts-node test.ts",
8
+ "start": "ts-node index.ts"
9
+ },
10
+ "keywords": [
11
+ "git4free",
12
+ "typescript"
13
+ ],
14
+ "author": "xiangsx",
15
+ "license": "ISC",
16
+ "devDependencies": {
17
+ "@types/axios": "^0.14.0",
18
+ "@types/event-stream": "^4.0.0",
19
+ "@types/koa": "^2.13.6",
20
+ "@types/koa-bodyparser": "^4.3.10",
21
+ "@types/koa-router": "^7.4.4",
22
+ "@types/node": "^18.16.3",
23
+ "@types/uuid": "^9.0.1",
24
+ "ts-node": "^10.9.1",
25
+ "typescript": "^5.0.4"
26
+ },
27
+ "dependencies": {
28
+ "axios": "^1.4.0",
29
+ "dotenv": "^16.0.3",
30
+ "event-stream": "^4.0.1",
31
+ "fake-useragent": "^1.0.1",
32
+ "http-proxy-agent": "^6.0.1",
33
+ "https-proxy-agent": "^5.0.1",
34
+ "koa": "^2.14.2",
35
+ "koa-bodyparser": "^4.4.0",
36
+ "koa-router": "^12.0.0",
37
+ "moment": "^2.29.4",
38
+ "puppeteer": "^20.1.2",
39
+ "puppeteer-extra": "^3.3.6",
40
+ "puppeteer-extra-plugin-stealth": "^2.11.2",
41
+ "tls-client": "^0.0.5",
42
+ "user-agents": "^1.0.1367",
43
+ "uuid": "^9.0.0"
44
+ }
45
+ }
apiGPT4/pool/puppeteer.ts ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {Browser, Page, PuppeteerLaunchOptions} from "puppeteer";
2
+ import path from "path";
3
+ import run from "node:test";
4
+ import * as fs from "fs";
5
+ import {shuffleArray, sleep} from "../utils";
6
+ const puppeteer = require('puppeteer-extra');
7
+ const StealthPlugin = require('puppeteer-extra-plugin-stealth');
8
+
9
+ puppeteer.use(StealthPlugin());
10
+
11
+ const runPath = path.join(__dirname, 'run');
12
+
13
+ export interface PageInfo<T> {
14
+ id: string;
15
+ ready: boolean;
16
+ page?: Page;
17
+ data?: T;
18
+ }
19
+
20
+ type PrepareFunc<T> = (id: string, browser: Browser) => Promise<[Page | undefined, T, string]>
21
+
22
+ export class BrowserPool<T> {
23
+ private readonly pool: PageInfo<T>[] = [];
24
+ private readonly size: number;
25
+ private readonly prepare: PrepareFunc<T>
26
+
27
+ constructor(size: number, initialIDs: string[], prepare: PrepareFunc<T>) {
28
+ this.size = size
29
+ this.prepare = prepare;
30
+ this.init(initialIDs);
31
+ }
32
+
33
+ init(initialIDs: string[]) {
34
+ for (let i = 0; i < this.size; i++) {
35
+ const id = initialIDs[i];
36
+ const info: PageInfo<T> = {
37
+ id,
38
+ ready: false,
39
+ }
40
+ this.initOne(id).then(([page, data, newID]) => {
41
+ if (!page) {
42
+ return;
43
+ }
44
+ info.id = newID;
45
+ info.page = page;
46
+ info.data = data;
47
+ info.ready = true;
48
+ }).catch(e => {
49
+ console.error(e);
50
+ })
51
+ this.pool.push(info)
52
+ }
53
+ }
54
+
55
+ async initOne(id: string): Promise<[Page, T, string]> {
56
+ const options: PuppeteerLaunchOptions = {
57
+ headless: process.env.DEBUG === "1" ? false : 'new',
58
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
59
+ userDataDir: `run/${id}`,
60
+ };
61
+ const browser = await puppeteer.launch(options);
62
+ const [page, data, newID] = await this.prepare(id, browser)
63
+ if (!page) {
64
+ console.log(`init ${id} failed, delete! init new ${newID}`);
65
+ await browser.close();
66
+ if (options.userDataDir) {
67
+ fs.rmdirSync(options.userDataDir, {recursive: true});
68
+ }
69
+ await sleep(5000);
70
+ return this.initOne(newID);
71
+ }
72
+ return [page, data, newID];
73
+ }
74
+
75
+ //@ts-ignore
76
+ get(): [page: Page | undefined, data: T | undefined, done: (data: T) => void, destroy: (newID: string) => void] {
77
+ for (const item of shuffleArray(this.pool)) {
78
+ if (item.ready) {
79
+ item.ready = false;
80
+ return [
81
+ item.page,
82
+ item.data,
83
+ (data: T) => {
84
+ item.ready = true
85
+ item.data = data;
86
+ },
87
+ (newID: string) => {
88
+ item.page?.close();
89
+ this.initOne(newID).then(([page, data, newID]) => {
90
+ item.id = newID;
91
+ item.page = page
92
+ item.data = data;
93
+ item.ready = true;
94
+ })
95
+ }
96
+ ]
97
+ }
98
+ }
99
+ return [] as any;
100
+ }
101
+ }
apiGPT4/tsconfig.json ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ /* Visit https://aka.ms/tsconfig to read more about this file */
4
+
5
+ /* Projects */
6
+ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
7
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8
+ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
9
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
10
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12
+
13
+ /* Language and Environment */
14
+ "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
17
+ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
18
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
20
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
22
+ // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
23
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25
+ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
26
+
27
+ /* Modules */
28
+ "module": "commonjs", /* Specify what module code is generated. */
29
+ // "rootDir": "./", /* Specify the root folder within your source files. */
30
+ // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
31
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
32
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
33
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
34
+ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
35
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
36
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
37
+ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
38
+ // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
39
+ // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
40
+ // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
41
+ // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
42
+ // "resolveJsonModule": true, /* Enable importing .json files. */
43
+ // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
44
+ // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
45
+
46
+ /* JavaScript Support */
47
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
48
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
49
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
50
+
51
+ /* Emit */
52
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
53
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
54
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
55
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
56
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
57
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
58
+ // "outDir": "./", /* Specify an output folder for all emitted files. */
59
+ // "removeComments": true, /* Disable emitting comments. */
60
+ // "noEmit": true, /* Disable emitting files from a compilation. */
61
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
62
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
63
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
64
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
65
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
66
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
67
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
68
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
69
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
70
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
71
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
72
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
73
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
74
+ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
75
+
76
+ /* Interop Constraints */
77
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
78
+ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
79
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
80
+ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
81
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
82
+ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
83
+
84
+ /* Type Checking */
85
+ "strict": true, /* Enable all strict type-checking options. */
86
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
87
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
88
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
89
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
90
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
91
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
92
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
93
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
94
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
95
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
96
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
97
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
98
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
99
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
100
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
101
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
102
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
103
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
104
+
105
+ /* Completeness */
106
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
107
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
108
+ }
109
+ }
apiGPT4/utils/emailFactory.ts ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {AxiosInstance, AxiosRequestConfig, CreateAxiosDefaults} from 'axios';
2
+ import {md5, randomStr} from "./index";
3
+ import {CreateAxiosProxy} from "./proxyAgent";
4
+
5
+ export enum TempEmailType {
6
+ // need credit card https://rapidapi.com/Privatix/api/temp-mail
7
+ TempEmail = 'temp-email',
8
+ // not need credit card , hard limit 100/day https://rapidapi.com/calvinloveland335703-0p6BxLYIH8f/api/temp-mail44
9
+ TempEmail44 = 'temp-email44',
10
+ // not need credit card and not need credit rapid_api_key
11
+ TempMailLOL = 'tempmail-lol',
12
+ }
13
+
14
+ export function CreateEmail(tempMailType: TempEmailType, options?: BaseOptions): BaseEmail {
15
+ switch (tempMailType) {
16
+ case TempEmailType.TempEmail44:
17
+ return new TempMail44(options);
18
+ case TempEmailType.TempEmail:
19
+ return new TempMail(options);
20
+ case TempEmailType.TempMailLOL:
21
+ return new TempMailLOL(options);
22
+ default:
23
+ throw new Error('not support TempEmailType')
24
+ }
25
+ }
26
+
27
+ export interface BaseMailMessage {
28
+ // main content of email
29
+ content: string;
30
+ }
31
+
32
+ export interface TempMailMessage extends BaseMailMessage {
33
+ _id: {
34
+ oid: string;
35
+ };
36
+ createdAt: {
37
+ milliseconds: number;
38
+ };
39
+ mail_id: string;
40
+ mail_address_id: string;
41
+ mail_from: string;
42
+ mail_subject: string;
43
+ mail_preview: string;
44
+ mail_text_only: string;
45
+ mail_text: string;
46
+ mail_html: string;
47
+ mail_timestamp: number;
48
+ mail_attachments_count: number;
49
+ mail_attachments: {
50
+ attachment: any[];
51
+ };
52
+ }
53
+
54
+ interface BaseOptions {
55
+ }
56
+
57
+ abstract class BaseEmail {
58
+ protected constructor(options?: BaseOptions) {
59
+ }
60
+
61
+ public abstract getMailAddress(): Promise<string>
62
+
63
+ public abstract waitMails(): Promise<BaseMailMessage[]>
64
+ }
65
+
66
+ export interface TempMailOptions extends BaseOptions {
67
+ apikey?: string;
68
+ }
69
+
70
+ class TempMail extends BaseEmail {
71
+ private readonly client: AxiosInstance;
72
+ private address: string | undefined;
73
+ private mailID: string = '';
74
+
75
+ constructor(options?: TempMailOptions) {
76
+ super(options)
77
+ const apikey = options?.apikey || process.env.rapid_api_key;
78
+ if (!apikey) {
79
+ throw new Error('Need apikey for TempMail')
80
+ }
81
+ this.client = CreateAxiosProxy({
82
+ baseURL: 'https://privatix-temp-mail-v1.p.rapidapi.com/request/',
83
+ headers: {
84
+ 'X-RapidAPI-Key': apikey,
85
+ 'X-RapidAPI-Host': 'privatix-temp-mail-v1.p.rapidapi.com'
86
+ }
87
+ } as CreateAxiosDefaults);
88
+ }
89
+
90
+ public async getMailAddress(): Promise<string> {
91
+ this.address = `${randomStr()}${await this.randomDomain()}`;
92
+ this.mailID = md5(this.address);
93
+ return this.address;
94
+ }
95
+
96
+ public async waitMails(): Promise<TempMailMessage[]> {
97
+ const mailID = this.mailID;
98
+ return new Promise(resolve => {
99
+ let time = 0;
100
+ const itl = setInterval(async () => {
101
+ const response = await this.client.get(`/mail/id/${mailID}`);
102
+ if (response.data && response.data.length > 0) {
103
+ resolve(response.data.map((item: any) => ({...item, content: item.mail_html})));
104
+ clearInterval(itl);
105
+ return;
106
+ }
107
+ if (time > 5) {
108
+ resolve([]);
109
+ clearInterval(itl);
110
+ return;
111
+ }
112
+ time++;
113
+ }, 5000);
114
+ });
115
+ }
116
+
117
+ async getDomainsList(): Promise<string[]> {
118
+ const res = await this.client.get(`/domains/`);
119
+ return res.data;
120
+ }
121
+
122
+ async randomDomain(): Promise<string> {
123
+ const domainList = await this.getDomainsList();
124
+ return domainList[Math.floor(Math.random() * domainList.length)];
125
+ }
126
+ }
127
+
128
+ class TempMail44 extends BaseEmail {
129
+ private readonly client: AxiosInstance;
130
+ private address: string = '';
131
+
132
+ constructor(options?: TempMailOptions) {
133
+ super(options)
134
+ const apikey = options?.apikey || process.env.rapid_api_key;
135
+ if (!apikey) {
136
+ throw new Error('Need apikey for TempMail')
137
+ }
138
+ this.client = CreateAxiosProxy({
139
+ baseURL: 'https://temp-mail44.p.rapidapi.com/api/v3/email/',
140
+ headers: {
141
+ 'X-RapidAPI-Key': apikey,
142
+ 'X-RapidAPI-Host': 'temp-mail44.p.rapidapi.com'
143
+ }
144
+ } as CreateAxiosDefaults);
145
+ }
146
+
147
+ public async getMailAddress(): Promise<string> {
148
+ const response = await this.client.post('/new', {}, {
149
+ headers: {
150
+ 'content-type': 'application/json',
151
+ }
152
+ } as AxiosRequestConfig);
153
+ this.address = response.data.email;
154
+ return this.address;
155
+ }
156
+
157
+ public async waitMails(): Promise<TempMailMessage[]> {
158
+ return new Promise(resolve => {
159
+ let time = 0;
160
+ const itl = setInterval(async () => {
161
+ const response = await this.client.get(`/${this.address}/messages`);
162
+ if (response.data && response.data.length > 0) {
163
+ resolve(response.data.map((item: any) => ({...item, content: item.body_html})));
164
+ clearInterval(itl);
165
+ return;
166
+ }
167
+ if (time > 5) {
168
+ resolve([]);
169
+ clearInterval(itl);
170
+ return;
171
+ }
172
+ time++;
173
+ }, 5000);
174
+ });
175
+ }
176
+ }
177
+
178
+ class TempMailLOL extends BaseEmail {
179
+ private readonly client: AxiosInstance;
180
+ private address: string = '';
181
+ private token: string = '';
182
+
183
+ constructor(options?: TempMailOptions) {
184
+ super(options)
185
+ this.client = CreateAxiosProxy({
186
+ baseURL: 'https://api.tempmail.lol'
187
+ } as CreateAxiosDefaults);
188
+ }
189
+
190
+ public async getMailAddress(): Promise<string> {
191
+ const response = await this.client.get('/generate');
192
+ this.address = response.data.address;
193
+ this.token = response.data.token;
194
+ return this.address;
195
+ }
196
+
197
+ public async waitMails(): Promise<TempMailMessage[]> {
198
+ return new Promise(resolve => {
199
+ let time = 0;
200
+ const itl = setInterval(async () => {
201
+ const response = await this.client.get(`/auth/${this.token}`);
202
+
203
+ if (response.data && response.data.email.length > 0) {
204
+ resolve(response.data.email.map((item: any) => ({...item, content: item.html})));
205
+ clearInterval(itl);
206
+ return;
207
+ }
208
+ if (time > 5) {
209
+ resolve([]);
210
+ clearInterval(itl);
211
+ return;
212
+ }
213
+ time++;
214
+ }, 5000);
215
+ });
216
+ }
217
+ }
apiGPT4/utils/eventstream.ts ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {PassThrough, Stream} from "stream";
2
+ import {parseJSON} from "./index";
3
+
4
+ export class WriteEventStream {
5
+ public stream: PassThrough;
6
+
7
+ constructor() {
8
+ this.stream = new PassThrough();
9
+ }
10
+
11
+ write(event: string, data: string) {
12
+ if (!this.stream.closed) {
13
+ this.stream.write(`event: ${event}\n`);
14
+ this.stream.write(`data: ${JSON.stringify(data)}\n\n`);
15
+ }
16
+ }
17
+
18
+ end(cb?: () => void) {
19
+ this.stream?.end(cb);
20
+ }
21
+ }
22
+
23
+ export class ReadEventStream {
24
+ private readonly stream: Stream;
25
+
26
+ constructor(stream: Stream) {
27
+ this.stream = stream;
28
+ }
29
+
30
+ read(dataCB: ({event, data}: { event: string, data: string }) => void, doneCB: () => void) {
31
+ let buffer = '';
32
+ this.stream.on('data', data => {
33
+ buffer += data.toString();
34
+ let index = buffer.indexOf('\n\n');
35
+ while (index !== -1) {
36
+ const v = buffer.slice(0, index).trim();
37
+ buffer = buffer.slice(index + 2);
38
+
39
+ const lines = v.split('\n');
40
+ const lineEvent = lines[0].replace('event: ', '');
41
+ const lineData = lines[1].replace('data: ', '');
42
+ dataCB({event: lineEvent, data: JSON.parse(lineData)});
43
+ index = buffer.indexOf('\n\n');
44
+ }
45
+ });
46
+ this.stream.on('close', doneCB);
47
+ }
48
+ }
apiGPT4/utils/index.ts ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import es from 'event-stream';
2
+ import {PassThrough, Stream} from 'stream';
3
+ import * as crypto from 'crypto';
4
+ import {v4} from "uuid";
5
+
6
+ type eventFunc = (eventName: string, data: string) => void;
7
+
8
+ export function toEventCB(arr: Uint8Array, emit: eventFunc) {
9
+ const pt = new PassThrough();
10
+ pt.write(arr)
11
+ pt.pipe(es.split(/\r?\n\r?\n/)) //split stream to break on newlines
12
+ .pipe(es.map(async function (chunk: any, cb: Function) { //turn this async function into a stream
13
+ const [eventStr, dataStr] = (chunk as any).split(/\r?\n/)
14
+ const event = eventStr.replace(/event: /, '');
15
+ const data = dataStr.replace(/data: /, '');
16
+ emit(event, data);
17
+ cb(null, {data, event});
18
+ }))
19
+ }
20
+
21
+ export function toEventStream(arr: Uint8Array): Stream {
22
+ const pt = new PassThrough();
23
+ pt.write(arr)
24
+ return pt;
25
+ }
26
+
27
+ export function md5(str: string): string {
28
+ return crypto.createHash('md5').update(str).digest('hex');
29
+ }
30
+
31
+ export function randomStr(): string {
32
+ return v4().split('-').join('').slice(-6);
33
+ }
34
+
35
+ export function parseJSON<T>(str: string, defaultObj: T): T {
36
+ try {
37
+ return JSON.parse(str)
38
+ } catch (e) {
39
+ console.error(str, e);
40
+ return defaultObj;
41
+ }
42
+ }
43
+
44
+ export function encryptWithAes256Cbc(data: string, key: string): string {
45
+ const hash = crypto.createHash('sha256').update(key).digest();
46
+ const iv = crypto.randomBytes(16);
47
+ const cipher = crypto.createCipheriv('aes-256-cbc', hash, iv);
48
+
49
+ let encryptedData = cipher.update(data, 'utf-8', 'hex');
50
+ encryptedData += cipher.final('hex');
51
+
52
+ return iv.toString('hex') + encryptedData;
53
+ }
54
+
55
+ export async function sleep(duration: number): Promise<void> {
56
+ return new Promise((resolve) => {
57
+ setTimeout(() => resolve(), duration);
58
+ })
59
+ }
60
+
61
+ export function shuffleArray<T>(array: T[]): T[] {
62
+ const shuffledArray = [...array];
63
+ for (let i = shuffledArray.length - 1; i > 0; i--) {
64
+ const j = Math.floor(Math.random() * (i + 1));
65
+ [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]];
66
+ }
67
+ return shuffledArray;
68
+ }
apiGPT4/utils/proxyAgent.ts ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import axios, {AxiosInstance, CreateAxiosDefaults} from "axios";
2
+ import HttpsProxyAgent from "https-proxy-agent";
3
+ import {SessionConstructorOptions} from "tls-client/dist/esm/types";
4
+ import {Session} from "tls-client/dist/esm/sessions";
5
+ import tlsClient from "tls-client";
6
+
7
+ export function CreateAxiosProxy(config: CreateAxiosDefaults, proxy?: string): AxiosInstance {
8
+ const createConfig = {...config};
9
+ const useProxy = process.env.http_proxy || proxy;
10
+ if (useProxy) {
11
+ createConfig.proxy = false;
12
+ createConfig.httpAgent = HttpsProxyAgent(useProxy);
13
+ createConfig.httpsAgent = HttpsProxyAgent(useProxy);
14
+ }
15
+ return axios.create(createConfig);
16
+ }
17
+
18
+ export function CreateTlsProxy(config: SessionConstructorOptions, proxy?: string): Session {
19
+ const client = new tlsClient.Session(config);
20
+ const useProxy = process.env.http_proxy || proxy;
21
+ if (useProxy) {
22
+ client.proxy = useProxy;
23
+ }
24
+ return client;
25
+ }
apiGPT4/yarn.lock ADDED
@@ -0,0 +1,1794 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ "@babel/code-frame@^7.0.0":
6
+ version "7.21.4"
7
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39"
8
+ integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
9
+ dependencies:
10
+ "@babel/highlight" "^7.18.6"
11
+
12
+ "@babel/helper-validator-identifier@^7.18.6":
13
+ version "7.19.1"
14
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
15
+ integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
16
+
17
+ "@babel/highlight@^7.18.6":
18
+ version "7.18.6"
19
+ resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
20
+ integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
21
+ dependencies:
22
+ "@babel/helper-validator-identifier" "^7.18.6"
23
+ chalk "^2.0.0"
24
+ js-tokens "^4.0.0"
25
+
26
+ "@cspotcode/source-map-support@^0.8.0":
27
+ version "0.8.1"
28
+ resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz"
29
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
30
+ dependencies:
31
+ "@jridgewell/trace-mapping" "0.3.9"
32
+
33
+ "@jridgewell/resolve-uri@^3.0.3":
34
+ version "3.1.1"
35
+ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz"
36
+ integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
37
+
38
+ "@jridgewell/sourcemap-codec@^1.4.10":
39
+ version "1.4.15"
40
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
41
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
42
+
43
+ "@jridgewell/trace-mapping@0.3.9":
44
+ version "0.3.9"
45
+ resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz"
46
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
47
+ dependencies:
48
+ "@jridgewell/resolve-uri" "^3.0.3"
49
+ "@jridgewell/sourcemap-codec" "^1.4.10"
50
+
51
+ "@puppeteer/browsers@1.1.0":
52
+ version "1.1.0"
53
+ resolved "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.1.0.tgz#72342a0f3d83f34547ea655aaf579b73d1a69249"
54
+ integrity sha512-+Nfk52G9cRAKq/V2LEaOlKIMsIuERSofk8hXEy6kMQtjg9Te1iuKymWOR+iKwwzj1RCkZU0fuOoSIclR839MNw==
55
+ dependencies:
56
+ debug "4.3.4"
57
+ extract-zip "2.0.1"
58
+ http-proxy-agent "5.0.0"
59
+ https-proxy-agent "5.0.1"
60
+ progress "2.0.3"
61
+ proxy-from-env "1.1.0"
62
+ tar-fs "2.1.1"
63
+ unbzip2-stream "1.4.3"
64
+ yargs "17.7.1"
65
+
66
+ "@tootallnate/once@2":
67
+ version "2.0.0"
68
+ resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
69
+ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
70
+
71
+ "@tsconfig/node10@^1.0.7":
72
+ version "1.0.9"
73
+ resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz"
74
+ integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
75
+
76
+ "@tsconfig/node12@^1.0.7":
77
+ version "1.0.11"
78
+ resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz"
79
+ integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
80
+
81
+ "@tsconfig/node14@^1.0.0":
82
+ version "1.0.3"
83
+ resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz"
84
+ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
85
+
86
+ "@tsconfig/node16@^1.0.2":
87
+ version "1.0.3"
88
+ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz"
89
+ integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
90
+
91
+ "@types/accepts@*":
92
+ version "1.3.5"
93
+ resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz"
94
+ integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==
95
+ dependencies:
96
+ "@types/node" "*"
97
+
98
+ "@types/axios@^0.14.0":
99
+ version "0.14.0"
100
+ resolved "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz"
101
+ integrity sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==
102
+ dependencies:
103
+ axios "*"
104
+
105
+ "@types/body-parser@*":
106
+ version "1.19.2"
107
+ resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz"
108
+ integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
109
+ dependencies:
110
+ "@types/connect" "*"
111
+ "@types/node" "*"
112
+
113
+ "@types/connect@*":
114
+ version "3.4.35"
115
+ resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz"
116
+ integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
117
+ dependencies:
118
+ "@types/node" "*"
119
+
120
+ "@types/content-disposition@*":
121
+ version "0.5.5"
122
+ resolved "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz"
123
+ integrity sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==
124
+
125
+ "@types/cookies@*":
126
+ version "0.7.7"
127
+ resolved "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz"
128
+ integrity sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==
129
+ dependencies:
130
+ "@types/connect" "*"
131
+ "@types/express" "*"
132
+ "@types/keygrip" "*"
133
+ "@types/node" "*"
134
+
135
+ "@types/debug@^4.1.0":
136
+ version "4.1.8"
137
+ resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
138
+ integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
139
+ dependencies:
140
+ "@types/ms" "*"
141
+
142
+ "@types/event-stream@^4.0.0":
143
+ version "4.0.0"
144
+ resolved "https://registry.npmjs.org/@types/event-stream/-/event-stream-4.0.0.tgz"
145
+ integrity sha512-pH/x8o5fdDsJNVpjNNT3X8F2k2vbL0O9P1grFQwUsmWz49zXUFWWUIRKmzbNzzWiuv4px3UyLb34RjTJYs685A==
146
+ dependencies:
147
+ "@types/node" "*"
148
+
149
+ "@types/express-serve-static-core@^4.17.33":
150
+ version "4.17.34"
151
+ resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz"
152
+ integrity sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==
153
+ dependencies:
154
+ "@types/node" "*"
155
+ "@types/qs" "*"
156
+ "@types/range-parser" "*"
157
+ "@types/send" "*"
158
+
159
+ "@types/express@*":
160
+ version "4.17.17"
161
+ resolved "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz"
162
+ integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
163
+ dependencies:
164
+ "@types/body-parser" "*"
165
+ "@types/express-serve-static-core" "^4.17.33"
166
+ "@types/qs" "*"
167
+ "@types/serve-static" "*"
168
+
169
+ "@types/http-assert@*":
170
+ version "1.5.3"
171
+ resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz"
172
+ integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==
173
+
174
+ "@types/http-errors@*":
175
+ version "2.0.1"
176
+ resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz"
177
+ integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
178
+
179
+ "@types/keygrip@*":
180
+ version "1.0.2"
181
+ resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz"
182
+ integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
183
+
184
+ "@types/koa-bodyparser@^4.3.10":
185
+ version "4.3.10"
186
+ resolved "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz"
187
+ integrity sha512-6ae05pjhmrmGhUR8GYD5qr5p9LTEMEGfGXCsK8VaSL+totwigm8+H/7MHW7K4854CMeuwRAubT8qcc/EagaeIA==
188
+ dependencies:
189
+ "@types/koa" "*"
190
+
191
+ "@types/koa-compose@*":
192
+ version "3.2.5"
193
+ resolved "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz"
194
+ integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==
195
+ dependencies:
196
+ "@types/koa" "*"
197
+
198
+ "@types/koa-router@^7.4.4":
199
+ version "7.4.4"
200
+ resolved "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.4.4.tgz"
201
+ integrity sha512-3dHlZ6CkhgcWeF6wafEUvyyqjWYfKmev3vy1PtOmr0mBc3wpXPU5E8fBBd4YQo5bRpHPfmwC5yDaX7s4jhIN6A==
202
+ dependencies:
203
+ "@types/koa" "*"
204
+
205
+ "@types/koa@*", "@types/koa@^2.13.6":
206
+ version "2.13.6"
207
+ resolved "https://registry.npmjs.org/@types/koa/-/koa-2.13.6.tgz"
208
+ integrity sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==
209
+ dependencies:
210
+ "@types/accepts" "*"
211
+ "@types/content-disposition" "*"
212
+ "@types/cookies" "*"
213
+ "@types/http-assert" "*"
214
+ "@types/http-errors" "*"
215
+ "@types/keygrip" "*"
216
+ "@types/koa-compose" "*"
217
+ "@types/node" "*"
218
+
219
+ "@types/mime@*", "@types/mime@^1":
220
+ version "1.3.2"
221
+ resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz"
222
+ integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
223
+
224
+ "@types/ms@*":
225
+ version "0.7.31"
226
+ resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
227
+ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
228
+
229
+ "@types/node@*", "@types/node@^18.16.3":
230
+ version "18.16.6"
231
+ resolved "https://registry.npmjs.org/@types/node/-/node-18.16.6.tgz"
232
+ integrity sha512-N7KINmeB8IN3vRR8dhgHEp+YpWvGFcpDoh5XZ8jB5a00AdFKCKEyyGTOPTddUf4JqU1ZKTVxkOxakDvchNVI2Q==
233
+
234
+ "@types/qs@*":
235
+ version "6.9.7"
236
+ resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz"
237
+ integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
238
+
239
+ "@types/range-parser@*":
240
+ version "1.2.4"
241
+ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz"
242
+ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
243
+
244
+ "@types/send@*":
245
+ version "0.17.1"
246
+ resolved "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz"
247
+ integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==
248
+ dependencies:
249
+ "@types/mime" "^1"
250
+ "@types/node" "*"
251
+
252
+ "@types/serve-static@*":
253
+ version "1.15.1"
254
+ resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz"
255
+ integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==
256
+ dependencies:
257
+ "@types/mime" "*"
258
+ "@types/node" "*"
259
+
260
+ "@types/uuid@^9.0.1":
261
+ version "9.0.1"
262
+ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz"
263
+ integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==
264
+
265
+ "@types/yauzl@^2.9.1":
266
+ version "2.10.0"
267
+ resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
268
+ integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
269
+ dependencies:
270
+ "@types/node" "*"
271
+
272
+ accepts@^1.3.5:
273
+ version "1.3.8"
274
+ resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
275
+ integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
276
+ dependencies:
277
+ mime-types "~2.1.34"
278
+ negotiator "0.6.3"
279
+
280
+ acorn-walk@^8.1.1:
281
+ version "8.2.0"
282
+ resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz"
283
+ integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
284
+
285
+ acorn@^8.4.1:
286
+ version "8.8.2"
287
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
288
+ integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
289
+
290
+ agent-base@6:
291
+ version "6.0.2"
292
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
293
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
294
+ dependencies:
295
+ debug "4"
296
+
297
+ agent-base@^7.0.1:
298
+ version "7.0.1"
299
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.0.1.tgz"
300
+ integrity sha512-V9to8gr2GK7eA+xskWGAFUX/TLSQKuH2TI06c/jGLL6yLp3oEjtnqM7a5tPV9fC1rabLeAgThZeBwsYX+WWHpw==
301
+ dependencies:
302
+ debug "^4.3.4"
303
+
304
+ ansi-regex@^5.0.1:
305
+ version "5.0.1"
306
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
307
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
308
+
309
+ ansi-styles@^3.2.1:
310
+ version "3.2.1"
311
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
312
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
313
+ dependencies:
314
+ color-convert "^1.9.0"
315
+
316
+ ansi-styles@^4.0.0:
317
+ version "4.3.0"
318
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
319
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
320
+ dependencies:
321
+ color-convert "^2.0.1"
322
+
323
+ arg@^4.1.0:
324
+ version "4.1.3"
325
+ resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz"
326
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
327
+
328
+ argparse@^2.0.1:
329
+ version "2.0.1"
330
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
331
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
332
+
333
+ arr-union@^3.1.0:
334
+ version "3.1.0"
335
+ resolved "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
336
+ integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
337
+
338
+ asynckit@^0.4.0:
339
+ version "0.4.0"
340
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
341
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
342
+
343
+ axios@*, axios@^1.4.0:
344
+ version "1.4.0"
345
+ resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz"
346
+ integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
347
+ dependencies:
348
+ follow-redirects "^1.15.0"
349
+ form-data "^4.0.0"
350
+ proxy-from-env "^1.1.0"
351
+
352
+ balanced-match@^1.0.0:
353
+ version "1.0.2"
354
+ resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
355
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
356
+
357
+ base64-js@^1.3.1:
358
+ version "1.5.1"
359
+ resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
360
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
361
+
362
+ bl@^4.0.3:
363
+ version "4.1.0"
364
+ resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
365
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
366
+ dependencies:
367
+ buffer "^5.5.0"
368
+ inherits "^2.0.4"
369
+ readable-stream "^3.4.0"
370
+
371
+ brace-expansion@^1.1.7:
372
+ version "1.1.11"
373
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
374
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
375
+ dependencies:
376
+ balanced-match "^1.0.0"
377
+ concat-map "0.0.1"
378
+
379
+ buffer-crc32@~0.2.3:
380
+ version "0.2.13"
381
+ resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
382
+ integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
383
+
384
+ buffer@^5.2.1, buffer@^5.5.0:
385
+ version "5.7.1"
386
+ resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
387
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
388
+ dependencies:
389
+ base64-js "^1.3.1"
390
+ ieee754 "^1.1.13"
391
+
392
+ bytes@3.1.2:
393
+ version "3.1.2"
394
+ resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
395
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
396
+
397
+ cache-content-type@^1.0.0:
398
+ version "1.0.1"
399
+ resolved "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz"
400
+ integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
401
+ dependencies:
402
+ mime-types "^2.1.18"
403
+ ylru "^1.2.0"
404
+
405
+ call-bind@^1.0.0:
406
+ version "1.0.2"
407
+ resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
408
+ integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
409
+ dependencies:
410
+ function-bind "^1.1.1"
411
+ get-intrinsic "^1.0.2"
412
+
413
+ callsites@^3.0.0:
414
+ version "3.1.0"
415
+ resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
416
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
417
+
418
+ chalk@^2.0.0:
419
+ version "2.4.2"
420
+ resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
421
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
422
+ dependencies:
423
+ ansi-styles "^3.2.1"
424
+ escape-string-regexp "^1.0.5"
425
+ supports-color "^5.3.0"
426
+
427
+ chownr@^1.1.1:
428
+ version "1.1.4"
429
+ resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
430
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
431
+
432
+ chromium-bidi@0.4.7:
433
+ version "0.4.7"
434
+ resolved "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz#4c022c2b0fb1d1c9b571fadf373042160e71d236"
435
+ integrity sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==
436
+ dependencies:
437
+ mitt "3.0.0"
438
+
439
+ cliui@^8.0.1:
440
+ version "8.0.1"
441
+ resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
442
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
443
+ dependencies:
444
+ string-width "^4.2.0"
445
+ strip-ansi "^6.0.1"
446
+ wrap-ansi "^7.0.0"
447
+
448
+ clone-deep@^0.2.4:
449
+ version "0.2.4"
450
+ resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6"
451
+ integrity sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==
452
+ dependencies:
453
+ for-own "^0.1.3"
454
+ is-plain-object "^2.0.1"
455
+ kind-of "^3.0.2"
456
+ lazy-cache "^1.0.3"
457
+ shallow-clone "^0.1.2"
458
+
459
+ co-body@^6.0.0:
460
+ version "6.1.0"
461
+ resolved "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz"
462
+ integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==
463
+ dependencies:
464
+ inflation "^2.0.0"
465
+ qs "^6.5.2"
466
+ raw-body "^2.3.3"
467
+ type-is "^1.6.16"
468
+
469
+ co@^4.6.0:
470
+ version "4.6.0"
471
+ resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
472
+ integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
473
+
474
+ color-convert@^1.9.0:
475
+ version "1.9.3"
476
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
477
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
478
+ dependencies:
479
+ color-name "1.1.3"
480
+
481
+ color-convert@^2.0.1:
482
+ version "2.0.1"
483
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
484
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
485
+ dependencies:
486
+ color-name "~1.1.4"
487
+
488
+ color-name@1.1.3:
489
+ version "1.1.3"
490
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
491
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
492
+
493
+ color-name@~1.1.4:
494
+ version "1.1.4"
495
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
496
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
497
+
498
+ combined-stream@^1.0.8:
499
+ version "1.0.8"
500
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
501
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
502
+ dependencies:
503
+ delayed-stream "~1.0.0"
504
+
505
+ concat-map@0.0.1:
506
+ version "0.0.1"
507
+ resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
508
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
509
+
510
+ content-disposition@~0.5.2:
511
+ version "0.5.4"
512
+ resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz"
513
+ integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
514
+ dependencies:
515
+ safe-buffer "5.2.1"
516
+
517
+ content-type@^1.0.4:
518
+ version "1.0.5"
519
+ resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz"
520
+ integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
521
+
522
+ cookies@~0.8.0:
523
+ version "0.8.0"
524
+ resolved "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz"
525
+ integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
526
+ dependencies:
527
+ depd "~2.0.0"
528
+ keygrip "~1.1.0"
529
+
530
+ copy-to@^2.0.1:
531
+ version "2.0.1"
532
+ resolved "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz"
533
+ integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==
534
+
535
+ cosmiconfig@8.1.3:
536
+ version "8.1.3"
537
+ resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689"
538
+ integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==
539
+ dependencies:
540
+ import-fresh "^3.2.1"
541
+ js-yaml "^4.1.0"
542
+ parse-json "^5.0.0"
543
+ path-type "^4.0.0"
544
+
545
+ create-require@^1.1.0:
546
+ version "1.1.1"
547
+ resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz"
548
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
549
+
550
+ cross-fetch@3.1.5:
551
+ version "3.1.5"
552
+ resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
553
+ integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
554
+ dependencies:
555
+ node-fetch "2.6.7"
556
+
557
+ debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
558
+ version "4.3.4"
559
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
560
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
561
+ dependencies:
562
+ ms "2.1.2"
563
+
564
+ debug@^3.1.0:
565
+ version "3.2.7"
566
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
567
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
568
+ dependencies:
569
+ ms "^2.1.1"
570
+
571
+ deep-equal@~1.0.1:
572
+ version "1.0.1"
573
+ resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz"
574
+ integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==
575
+
576
+ deepmerge@^4.2.2:
577
+ version "4.3.1"
578
+ resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
579
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
580
+
581
+ delayed-stream@~1.0.0:
582
+ version "1.0.0"
583
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
584
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
585
+
586
+ delegates@^1.0.0:
587
+ version "1.0.0"
588
+ resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
589
+ integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
590
+
591
+ depd@2.0.0, depd@^2.0.0, depd@~2.0.0:
592
+ version "2.0.0"
593
+ resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
594
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
595
+
596
+ depd@~1.1.2:
597
+ version "1.1.2"
598
+ resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
599
+ integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
600
+
601
+ destroy@^1.0.4:
602
+ version "1.2.0"
603
+ resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz"
604
+ integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
605
+
606
+ detect-indent@~6.0.0:
607
+ version "6.0.0"
608
+ resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz"
609
+ integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
610
+
611
+ devtools-protocol@0.0.1120988:
612
+ version "0.0.1120988"
613
+ resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz#8fe49088919ae3b8df7235774633763f1f925066"
614
+ integrity sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==
615
+
616
+ diff@^4.0.1:
617
+ version "4.0.2"
618
+ resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
619
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
620
+
621
+ docopt@~0.6.2:
622
+ version "0.6.2"
623
+ resolved "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz"
624
+ integrity sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==
625
+
626
+ dot-json@^1.3.0:
627
+ version "1.3.0"
628
+ resolved "https://registry.npmjs.org/dot-json/-/dot-json-1.3.0.tgz"
629
+ integrity sha512-Pu11Prog/Yjf2lBICow82/DSV46n3a2XT1Rqt/CeuhkO1fuacF7xydYhI0SwQx2Ue0jCyLtQzgKPFEO6ewv+bQ==
630
+ dependencies:
631
+ detect-indent "~6.0.0"
632
+ docopt "~0.6.2"
633
+ underscore-keypath "~0.0.22"
634
+
635
+ dotenv@^16.0.3:
636
+ version "16.0.3"
637
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
638
+ integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
639
+
640
+ duplexer@^0.1.1, duplexer@~0.1.1:
641
+ version "0.1.2"
642
+ resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"
643
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
644
+
645
+ ee-first@1.1.1:
646
+ version "1.1.1"
647
+ resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
648
+ integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
649
+
650
+ emoji-regex@^8.0.0:
651
+ version "8.0.0"
652
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
653
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
654
+
655
+ encodeurl@^1.0.2:
656
+ version "1.0.2"
657
+ resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
658
+ integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
659
+
660
+ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
661
+ version "1.4.4"
662
+ resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
663
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
664
+ dependencies:
665
+ once "^1.4.0"
666
+
667
+ error-ex@^1.3.1:
668
+ version "1.3.2"
669
+ resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
670
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
671
+ dependencies:
672
+ is-arrayish "^0.2.1"
673
+
674
+ escalade@^3.1.1:
675
+ version "3.1.1"
676
+ resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
677
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
678
+
679
+ escape-html@^1.0.3:
680
+ version "1.0.3"
681
+ resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
682
+ integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
683
+
684
+ escape-string-regexp@^1.0.5:
685
+ version "1.0.5"
686
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
687
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
688
+
689
+ event-stream@^4.0.1:
690
+ version "4.0.1"
691
+ resolved "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz"
692
+ integrity sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==
693
+ dependencies:
694
+ duplexer "^0.1.1"
695
+ from "^0.1.7"
696
+ map-stream "0.0.7"
697
+ pause-stream "^0.0.11"
698
+ split "^1.0.1"
699
+ stream-combiner "^0.2.2"
700
+ through "^2.3.8"
701
+
702
+ extract-zip@2.0.1:
703
+ version "2.0.1"
704
+ resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
705
+ integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
706
+ dependencies:
707
+ debug "^4.1.1"
708
+ get-stream "^5.1.0"
709
+ yauzl "^2.10.0"
710
+ optionalDependencies:
711
+ "@types/yauzl" "^2.9.1"
712
+
713
+ fake-useragent@^1.0.1:
714
+ version "1.0.1"
715
+ resolved "https://registry.npmjs.org/fake-useragent/-/fake-useragent-1.0.1.tgz"
716
+ integrity sha512-BOQh1TM//DhrVaeZ+b3w3s4E40rfYcDTn5aoSM2w1xVsZVGglNOzPR5H8KDO8NmF8sT4ppxyb4/MHGIHfZsVDA==
717
+
718
+ fd-slicer@~1.1.0:
719
+ version "1.1.0"
720
+ resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
721
+ integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
722
+ dependencies:
723
+ pend "~1.2.0"
724
+
725
+ ffi-napi@^4.0.3:
726
+ version "4.0.3"
727
+ resolved "https://registry.npmjs.org/ffi-napi/-/ffi-napi-4.0.3.tgz"
728
+ integrity sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg==
729
+ dependencies:
730
+ debug "^4.1.1"
731
+ get-uv-event-loop-napi-h "^1.0.5"
732
+ node-addon-api "^3.0.0"
733
+ node-gyp-build "^4.2.1"
734
+ ref-napi "^2.0.1 || ^3.0.2"
735
+ ref-struct-di "^1.1.0"
736
+
737
+ follow-redirects@^1.15.0:
738
+ version "1.15.2"
739
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz"
740
+ integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
741
+
742
+ for-in@^0.1.3:
743
+ version "0.1.8"
744
+ resolved "https://registry.npmmirror.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
745
+ integrity sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==
746
+
747
+ for-in@^1.0.1:
748
+ version "1.0.2"
749
+ resolved "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
750
+ integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
751
+
752
+ for-own@^0.1.3:
753
+ version "0.1.5"
754
+ resolved "https://registry.npmmirror.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
755
+ integrity sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==
756
+ dependencies:
757
+ for-in "^1.0.1"
758
+
759
+ form-data@^4.0.0:
760
+ version "4.0.0"
761
+ resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
762
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
763
+ dependencies:
764
+ asynckit "^0.4.0"
765
+ combined-stream "^1.0.8"
766
+ mime-types "^2.1.12"
767
+
768
+ fresh@~0.5.2:
769
+ version "0.5.2"
770
+ resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
771
+ integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
772
+
773
+ from@^0.1.7:
774
+ version "0.1.7"
775
+ resolved "https://registry.npmjs.org/from/-/from-0.1.7.tgz"
776
+ integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==
777
+
778
+ fs-constants@^1.0.0:
779
+ version "1.0.0"
780
+ resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
781
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
782
+
783
+ fs-extra@^10.0.0:
784
+ version "10.1.0"
785
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
786
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
787
+ dependencies:
788
+ graceful-fs "^4.2.0"
789
+ jsonfile "^6.0.1"
790
+ universalify "^2.0.0"
791
+
792
+ fs.realpath@^1.0.0:
793
+ version "1.0.0"
794
+ resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
795
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
796
+
797
+ function-bind@^1.1.1:
798
+ version "1.1.1"
799
+ resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
800
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
801
+
802
+ get-caller-file@^2.0.5:
803
+ version "2.0.5"
804
+ resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
805
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
806
+
807
+ get-intrinsic@^1.0.2:
808
+ version "1.2.0"
809
+ resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz"
810
+ integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
811
+ dependencies:
812
+ function-bind "^1.1.1"
813
+ has "^1.0.3"
814
+ has-symbols "^1.0.3"
815
+
816
+ get-stream@^5.1.0:
817
+ version "5.2.0"
818
+ resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
819
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
820
+ dependencies:
821
+ pump "^3.0.0"
822
+
823
+ get-symbol-from-current-process-h@^1.0.1, get-symbol-from-current-process-h@^1.0.2:
824
+ version "1.0.2"
825
+ resolved "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz"
826
+ integrity sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==
827
+
828
+ get-uv-event-loop-napi-h@^1.0.5:
829
+ version "1.0.6"
830
+ resolved "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz"
831
+ integrity sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==
832
+ dependencies:
833
+ get-symbol-from-current-process-h "^1.0.1"
834
+
835
+ glob@^7.1.3:
836
+ version "7.2.3"
837
+ resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
838
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
839
+ dependencies:
840
+ fs.realpath "^1.0.0"
841
+ inflight "^1.0.4"
842
+ inherits "2"
843
+ minimatch "^3.1.1"
844
+ once "^1.3.0"
845
+ path-is-absolute "^1.0.0"
846
+
847
+ graceful-fs@^4.1.6, graceful-fs@^4.2.0:
848
+ version "4.2.11"
849
+ resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
850
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
851
+
852
+ has-flag@^3.0.0:
853
+ version "3.0.0"
854
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
855
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
856
+
857
+ has-symbols@^1.0.2, has-symbols@^1.0.3:
858
+ version "1.0.3"
859
+ resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
860
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
861
+
862
+ has-tostringtag@^1.0.0:
863
+ version "1.0.0"
864
+ resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz"
865
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
866
+ dependencies:
867
+ has-symbols "^1.0.2"
868
+
869
+ has@^1.0.3:
870
+ version "1.0.3"
871
+ resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
872
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
873
+ dependencies:
874
+ function-bind "^1.1.1"
875
+
876
+ http-assert@^1.3.0:
877
+ version "1.5.0"
878
+ resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz"
879
+ integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==
880
+ dependencies:
881
+ deep-equal "~1.0.1"
882
+ http-errors "~1.8.0"
883
+
884
+ http-errors@2.0.0, http-errors@^2.0.0:
885
+ version "2.0.0"
886
+ resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
887
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
888
+ dependencies:
889
+ depd "2.0.0"
890
+ inherits "2.0.4"
891
+ setprototypeof "1.2.0"
892
+ statuses "2.0.1"
893
+ toidentifier "1.0.1"
894
+
895
+ http-errors@^1.6.3, http-errors@~1.8.0:
896
+ version "1.8.1"
897
+ resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz"
898
+ integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
899
+ dependencies:
900
+ depd "~1.1.2"
901
+ inherits "2.0.4"
902
+ setprototypeof "1.2.0"
903
+ statuses ">= 1.5.0 < 2"
904
+ toidentifier "1.0.1"
905
+
906
+ http-proxy-agent@5.0.0:
907
+ version "5.0.0"
908
+ resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
909
+ integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
910
+ dependencies:
911
+ "@tootallnate/once" "2"
912
+ agent-base "6"
913
+ debug "4"
914
+
915
+ http-proxy-agent@^6.0.1:
916
+ version "6.0.1"
917
+ resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-6.0.1.tgz"
918
+ integrity sha512-rD8wrfJHbnVll9lkIpQH3vDbKON1Ssciggwydom/r89HLBXEqdMhL6wx7QF5WePDPSr0OdoztdXoojbrXadG5Q==
919
+ dependencies:
920
+ agent-base "^7.0.1"
921
+ debug "^4.3.4"
922
+
923
+ https-proxy-agent@5.0.1, https-proxy-agent@^5.0.1:
924
+ version "5.0.1"
925
+ resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz"
926
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
927
+ dependencies:
928
+ agent-base "6"
929
+ debug "4"
930
+
931
+ iconv-lite@0.4.24:
932
+ version "0.4.24"
933
+ resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
934
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
935
+ dependencies:
936
+ safer-buffer ">= 2.1.2 < 3"
937
+
938
+ ieee754@^1.1.13:
939
+ version "1.2.1"
940
+ resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
941
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
942
+
943
+ import-fresh@^3.2.1:
944
+ version "3.3.0"
945
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
946
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
947
+ dependencies:
948
+ parent-module "^1.0.0"
949
+ resolve-from "^4.0.0"
950
+
951
+ inflation@^2.0.0:
952
+ version "2.0.0"
953
+ resolved "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz"
954
+ integrity sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==
955
+
956
+ inflight@^1.0.4:
957
+ version "1.0.6"
958
+ resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
959
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
960
+ dependencies:
961
+ once "^1.3.0"
962
+ wrappy "1"
963
+
964
+ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4:
965
+ version "2.0.4"
966
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
967
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
968
+
969
+ is-arrayish@^0.2.1:
970
+ version "0.2.1"
971
+ resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
972
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
973
+
974
+ is-buffer@^1.0.2, is-buffer@^1.1.5:
975
+ version "1.1.6"
976
+ resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
977
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
978
+
979
+ is-extendable@^0.1.1:
980
+ version "0.1.1"
981
+ resolved "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
982
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
983
+
984
+ is-fullwidth-code-point@^3.0.0:
985
+ version "3.0.0"
986
+ resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
987
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
988
+
989
+ is-generator-function@^1.0.7:
990
+ version "1.0.10"
991
+ resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz"
992
+ integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
993
+ dependencies:
994
+ has-tostringtag "^1.0.0"
995
+
996
+ is-plain-object@^2.0.1:
997
+ version "2.0.4"
998
+ resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
999
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
1000
+ dependencies:
1001
+ isobject "^3.0.1"
1002
+
1003
+ isobject@^3.0.1:
1004
+ version "3.0.1"
1005
+ resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
1006
+ integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
1007
+
1008
+ js-tokens@^4.0.0:
1009
+ version "4.0.0"
1010
+ resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1011
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1012
+
1013
+ js-yaml@^4.1.0:
1014
+ version "4.1.0"
1015
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1016
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1017
+ dependencies:
1018
+ argparse "^2.0.1"
1019
+
1020
+ json-parse-even-better-errors@^2.3.0:
1021
+ version "2.3.1"
1022
+ resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1023
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1024
+
1025
+ jsonfile@^6.0.1:
1026
+ version "6.1.0"
1027
+ resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
1028
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
1029
+ dependencies:
1030
+ universalify "^2.0.0"
1031
+ optionalDependencies:
1032
+ graceful-fs "^4.1.6"
1033
+
1034
+ keygrip@~1.1.0:
1035
+ version "1.1.0"
1036
+ resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz"
1037
+ integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
1038
+ dependencies:
1039
+ tsscmp "1.0.6"
1040
+
1041
+ kind-of@^2.0.1:
1042
+ version "2.0.1"
1043
+ resolved "https://registry.npmmirror.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
1044
+ integrity sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==
1045
+ dependencies:
1046
+ is-buffer "^1.0.2"
1047
+
1048
+ kind-of@^3.0.2:
1049
+ version "3.2.2"
1050
+ resolved "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
1051
+ integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
1052
+ dependencies:
1053
+ is-buffer "^1.1.5"
1054
+
1055
+ koa-bodyparser@^4.4.0:
1056
+ version "4.4.0"
1057
+ resolved "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.0.tgz"
1058
+ integrity sha512-AXPY7wwKZUmbgb8VkTEUFoRNOlx6aWRJwEnQD+zfNf33/7KSAkN4Oo9BqlIk80D+5TvuqlhpQT5dPVcyxl5Zsw==
1059
+ dependencies:
1060
+ co-body "^6.0.0"
1061
+ copy-to "^2.0.1"
1062
+
1063
+ koa-compose@^4.1.0:
1064
+ version "4.1.0"
1065
+ resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz"
1066
+ integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
1067
+
1068
+ koa-convert@^2.0.0:
1069
+ version "2.0.0"
1070
+ resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz"
1071
+ integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==
1072
+ dependencies:
1073
+ co "^4.6.0"
1074
+ koa-compose "^4.1.0"
1075
+
1076
+ koa-router@^12.0.0:
1077
+ version "12.0.0"
1078
+ resolved "https://registry.npmjs.org/koa-router/-/koa-router-12.0.0.tgz"
1079
+ integrity sha512-zGrdiXygGYW8WvrzeGsHZvKnHs4DzyGoqJ9a8iHlRkiwuEAOAPyI27//OlhoWdgFAEIM3qbUgr0KCuRaP/TCag==
1080
+ dependencies:
1081
+ http-errors "^2.0.0"
1082
+ koa-compose "^4.1.0"
1083
+ methods "^1.1.2"
1084
+ path-to-regexp "^6.2.1"
1085
+
1086
+ koa@^2.14.2:
1087
+ version "2.14.2"
1088
+ resolved "https://registry.npmjs.org/koa/-/koa-2.14.2.tgz"
1089
+ integrity sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==
1090
+ dependencies:
1091
+ accepts "^1.3.5"
1092
+ cache-content-type "^1.0.0"
1093
+ content-disposition "~0.5.2"
1094
+ content-type "^1.0.4"
1095
+ cookies "~0.8.0"
1096
+ debug "^4.3.2"
1097
+ delegates "^1.0.0"
1098
+ depd "^2.0.0"
1099
+ destroy "^1.0.4"
1100
+ encodeurl "^1.0.2"
1101
+ escape-html "^1.0.3"
1102
+ fresh "~0.5.2"
1103
+ http-assert "^1.3.0"
1104
+ http-errors "^1.6.3"
1105
+ is-generator-function "^1.0.7"
1106
+ koa-compose "^4.1.0"
1107
+ koa-convert "^2.0.0"
1108
+ on-finished "^2.3.0"
1109
+ only "~0.0.2"
1110
+ parseurl "^1.3.2"
1111
+ statuses "^1.5.0"
1112
+ type-is "^1.6.16"
1113
+ vary "^1.1.2"
1114
+
1115
+ lazy-cache@^0.2.3:
1116
+ version "0.2.7"
1117
+ resolved "https://registry.npmmirror.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
1118
+ integrity sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==
1119
+
1120
+ lazy-cache@^1.0.3:
1121
+ version "1.0.4"
1122
+ resolved "https://registry.npmmirror.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1123
+ integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==
1124
+
1125
+ lines-and-columns@^1.1.6:
1126
+ version "1.2.4"
1127
+ resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
1128
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
1129
+
1130
+ lodash.clonedeep@^4.5.0:
1131
+ version "4.5.0"
1132
+ resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
1133
+ integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
1134
+
1135
+ make-error@^1.1.1:
1136
+ version "1.3.6"
1137
+ resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
1138
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
1139
+
1140
+ map-stream@0.0.7:
1141
+ version "0.0.7"
1142
+ resolved "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz"
1143
+ integrity sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==
1144
+
1145
+ media-typer@0.3.0:
1146
+ version "0.3.0"
1147
+ resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
1148
+ integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
1149
+
1150
+ merge-deep@^3.0.1:
1151
+ version "3.0.3"
1152
+ resolved "https://registry.npmmirror.com/merge-deep/-/merge-deep-3.0.3.tgz#1a2b2ae926da8b2ae93a0ac15d90cd1922766003"
1153
+ integrity sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==
1154
+ dependencies:
1155
+ arr-union "^3.1.0"
1156
+ clone-deep "^0.2.4"
1157
+ kind-of "^3.0.2"
1158
+
1159
+ methods@^1.1.2:
1160
+ version "1.1.2"
1161
+ resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
1162
+ integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
1163
+
1164
+ mime-db@1.52.0:
1165
+ version "1.52.0"
1166
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
1167
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
1168
+
1169
+ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34:
1170
+ version "2.1.35"
1171
+ resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
1172
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
1173
+ dependencies:
1174
+ mime-db "1.52.0"
1175
+
1176
+ minimatch@^3.1.1:
1177
+ version "3.1.2"
1178
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1179
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1180
+ dependencies:
1181
+ brace-expansion "^1.1.7"
1182
+
1183
+ mitt@3.0.0:
1184
+ version "3.0.0"
1185
+ resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd"
1186
+ integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==
1187
+
1188
+ mixin-object@^2.0.1:
1189
+ version "2.0.1"
1190
+ resolved "https://registry.npmmirror.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
1191
+ integrity sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==
1192
+ dependencies:
1193
+ for-in "^0.1.3"
1194
+ is-extendable "^0.1.1"
1195
+
1196
+ mkdirp-classic@^0.5.2:
1197
+ version "0.5.3"
1198
+ resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
1199
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
1200
+
1201
+ moment@^2.29.4:
1202
+ version "2.29.4"
1203
+ resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
1204
+ integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
1205
+
1206
+ ms@2.1.2, ms@^2.1.1:
1207
+ version "2.1.2"
1208
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
1209
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1210
+
1211
+ negotiator@0.6.3:
1212
+ version "0.6.3"
1213
+ resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
1214
+ integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
1215
+
1216
+ node-addon-api@^3.0.0:
1217
+ version "3.2.1"
1218
+ resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz"
1219
+ integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
1220
+
1221
+ node-fetch@2.6.7:
1222
+ version "2.6.7"
1223
+ resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
1224
+ integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
1225
+ dependencies:
1226
+ whatwg-url "^5.0.0"
1227
+
1228
+ node-gyp-build@^4.2.1:
1229
+ version "4.6.0"
1230
+ resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz"
1231
+ integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
1232
+
1233
+ object-inspect@^1.9.0:
1234
+ version "1.12.3"
1235
+ resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz"
1236
+ integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
1237
+
1238
+ on-finished@^2.3.0:
1239
+ version "2.4.1"
1240
+ resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
1241
+ integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
1242
+ dependencies:
1243
+ ee-first "1.1.1"
1244
+
1245
+ once@^1.3.0, once@^1.3.1, once@^1.4.0:
1246
+ version "1.4.0"
1247
+ resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1248
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1249
+ dependencies:
1250
+ wrappy "1"
1251
+
1252
+ only@~0.0.2:
1253
+ version "0.0.2"
1254
+ resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz"
1255
+ integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==
1256
+
1257
+ parent-module@^1.0.0:
1258
+ version "1.0.1"
1259
+ resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1260
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1261
+ dependencies:
1262
+ callsites "^3.0.0"
1263
+
1264
+ parse-json@^5.0.0:
1265
+ version "5.2.0"
1266
+ resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
1267
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
1268
+ dependencies:
1269
+ "@babel/code-frame" "^7.0.0"
1270
+ error-ex "^1.3.1"
1271
+ json-parse-even-better-errors "^2.3.0"
1272
+ lines-and-columns "^1.1.6"
1273
+
1274
+ parseurl@^1.3.2:
1275
+ version "1.3.3"
1276
+ resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
1277
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
1278
+
1279
+ path-is-absolute@^1.0.0:
1280
+ version "1.0.1"
1281
+ resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1282
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1283
+
1284
+ path-to-regexp@^6.2.1:
1285
+ version "6.2.1"
1286
+ resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz"
1287
+ integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==
1288
+
1289
+ path-type@^4.0.0:
1290
+ version "4.0.0"
1291
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1292
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1293
+
1294
+ pause-stream@^0.0.11:
1295
+ version "0.0.11"
1296
+ resolved "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz"
1297
+ integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==
1298
+ dependencies:
1299
+ through "~2.3"
1300
+
1301
+ pend@~1.2.0:
1302
+ version "1.2.0"
1303
+ resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
1304
+ integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
1305
+
1306
+ progress@2.0.3:
1307
+ version "2.0.3"
1308
+ resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1309
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1310
+
1311
+ proxy-from-env@1.1.0, proxy-from-env@^1.1.0:
1312
+ version "1.1.0"
1313
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
1314
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
1315
+
1316
+ psl@^1.1.33:
1317
+ version "1.9.0"
1318
+ resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz"
1319
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
1320
+
1321
+ pump@^3.0.0:
1322
+ version "3.0.0"
1323
+ resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
1324
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
1325
+ dependencies:
1326
+ end-of-stream "^1.1.0"
1327
+ once "^1.3.1"
1328
+
1329
+ punycode@^2.1.1:
1330
+ version "2.3.0"
1331
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
1332
+ integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
1333
+
1334
+ puppeteer-core@20.1.2:
1335
+ version "20.1.2"
1336
+ resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.1.2.tgz#747496813e898f3d5e41e549b6aaff6f3b3c5c94"
1337
+ integrity sha512-S1BLte+jVC/ugZkNoxFW9Fvbyr30CKZ0IIumf98FFqLh06Vuc21fddsr34botKtz27T81pqkpDYXNXYomA01dg==
1338
+ dependencies:
1339
+ "@puppeteer/browsers" "1.1.0"
1340
+ chromium-bidi "0.4.7"
1341
+ cross-fetch "3.1.5"
1342
+ debug "4.3.4"
1343
+ devtools-protocol "0.0.1120988"
1344
+ ws "8.13.0"
1345
+
1346
+ puppeteer-extra-plugin-stealth@^2.11.2:
1347
+ version "2.11.2"
1348
+ resolved "https://registry.npmmirror.com/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz#bd3f5a1781cac8a98c983d148086585a84fcc8f1"
1349
+ integrity sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==
1350
+ dependencies:
1351
+ debug "^4.1.1"
1352
+ puppeteer-extra-plugin "^3.2.3"
1353
+ puppeteer-extra-plugin-user-preferences "^2.4.1"
1354
+
1355
+ puppeteer-extra-plugin-user-data-dir@^2.4.1:
1356
+ version "2.4.1"
1357
+ resolved "https://registry.npmmirror.com/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz#4ea9d56d20455672a54fe086309a102a5126411c"
1358
+ integrity sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==
1359
+ dependencies:
1360
+ debug "^4.1.1"
1361
+ fs-extra "^10.0.0"
1362
+ puppeteer-extra-plugin "^3.2.3"
1363
+ rimraf "^3.0.2"
1364
+
1365
+ puppeteer-extra-plugin-user-preferences@^2.4.1:
1366
+ version "2.4.1"
1367
+ resolved "https://registry.npmmirror.com/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz#db8ec63c04a6a10a8f8997e15fdffdf13272161d"
1368
+ integrity sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==
1369
+ dependencies:
1370
+ debug "^4.1.1"
1371
+ deepmerge "^4.2.2"
1372
+ puppeteer-extra-plugin "^3.2.3"
1373
+ puppeteer-extra-plugin-user-data-dir "^2.4.1"
1374
+
1375
+ puppeteer-extra-plugin@^3.2.3:
1376
+ version "3.2.3"
1377
+ resolved "https://registry.npmmirror.com/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz#50c9f0749c005bbc7b8b208bcd00a9d46a15b585"
1378
+ integrity sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==
1379
+ dependencies:
1380
+ "@types/debug" "^4.1.0"
1381
+ debug "^4.1.1"
1382
+ merge-deep "^3.0.1"
1383
+
1384
+ puppeteer-extra@^3.3.6:
1385
+ version "3.3.6"
1386
+ resolved "https://registry.npmmirror.com/puppeteer-extra/-/puppeteer-extra-3.3.6.tgz#fc16ff396aae52664842da9a557ea8fa51eaa8b7"
1387
+ integrity sha512-rsLBE/6mMxAjlLd06LuGacrukP2bqbzKCLzV1vrhHFavqQE/taQ2UXv3H5P0Ls7nsrASa+6x3bDbXHpqMwq+7A==
1388
+ dependencies:
1389
+ "@types/debug" "^4.1.0"
1390
+ debug "^4.1.1"
1391
+ deepmerge "^4.2.2"
1392
+
1393
+ puppeteer@^20.1.2:
1394
+ version "20.1.2"
1395
+ resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-20.1.2.tgz#95ccc111e69be6b71d3fcce960a9971fd8105a90"
1396
+ integrity sha512-QYDp+iVMP30TwlkXFOocON9qR3Nac5ez7PdXbY90mfuEgZb9vf3/OXL2vHprxwPtb2hgD4AxXvLZhEIqfD2y8Q==
1397
+ dependencies:
1398
+ "@puppeteer/browsers" "1.1.0"
1399
+ cosmiconfig "8.1.3"
1400
+ puppeteer-core "20.1.2"
1401
+
1402
+ qs@^6.5.2:
1403
+ version "6.11.1"
1404
+ resolved "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz"
1405
+ integrity sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==
1406
+ dependencies:
1407
+ side-channel "^1.0.4"
1408
+
1409
+ querystringify@^2.1.1:
1410
+ version "2.2.0"
1411
+ resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz"
1412
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
1413
+
1414
+ raw-body@^2.3.3:
1415
+ version "2.5.2"
1416
+ resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz"
1417
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
1418
+ dependencies:
1419
+ bytes "3.1.2"
1420
+ http-errors "2.0.0"
1421
+ iconv-lite "0.4.24"
1422
+ unpipe "1.0.0"
1423
+
1424
+ readable-stream@^3.1.1, readable-stream@^3.4.0:
1425
+ version "3.6.2"
1426
+ resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
1427
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
1428
+ dependencies:
1429
+ inherits "^2.0.3"
1430
+ string_decoder "^1.1.1"
1431
+ util-deprecate "^1.0.1"
1432
+
1433
+ "ref-napi@^2.0.1 || ^3.0.2":
1434
+ version "3.0.3"
1435
+ resolved "https://registry.npmjs.org/ref-napi/-/ref-napi-3.0.3.tgz"
1436
+ integrity sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA==
1437
+ dependencies:
1438
+ debug "^4.1.1"
1439
+ get-symbol-from-current-process-h "^1.0.2"
1440
+ node-addon-api "^3.0.0"
1441
+ node-gyp-build "^4.2.1"
1442
+
1443
+ ref-struct-di@^1.1.0:
1444
+ version "1.1.1"
1445
+ resolved "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz"
1446
+ integrity sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==
1447
+ dependencies:
1448
+ debug "^3.1.0"
1449
+
1450
+ require-directory@^2.1.1:
1451
+ version "2.1.1"
1452
+ resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1453
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
1454
+
1455
+ requires-port@^1.0.0:
1456
+ version "1.0.0"
1457
+ resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz"
1458
+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
1459
+
1460
+ resolve-from@^4.0.0:
1461
+ version "4.0.0"
1462
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1463
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1464
+
1465
+ rimraf@^3.0.2:
1466
+ version "3.0.2"
1467
+ resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1468
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1469
+ dependencies:
1470
+ glob "^7.1.3"
1471
+
1472
+ safe-buffer@5.2.1, safe-buffer@~5.2.0:
1473
+ version "5.2.1"
1474
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
1475
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1476
+
1477
+ "safer-buffer@>= 2.1.2 < 3":
1478
+ version "2.1.2"
1479
+ resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
1480
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1481
+
1482
+ setprototypeof@1.2.0:
1483
+ version "1.2.0"
1484
+ resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz"
1485
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
1486
+
1487
+ shallow-clone@^0.1.2:
1488
+ version "0.1.2"
1489
+ resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
1490
+ integrity sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==
1491
+ dependencies:
1492
+ is-extendable "^0.1.1"
1493
+ kind-of "^2.0.1"
1494
+ lazy-cache "^0.2.3"
1495
+ mixin-object "^2.0.1"
1496
+
1497
+ side-channel@^1.0.4:
1498
+ version "1.0.4"
1499
+ resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz"
1500
+ integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1501
+ dependencies:
1502
+ call-bind "^1.0.0"
1503
+ get-intrinsic "^1.0.2"
1504
+ object-inspect "^1.9.0"
1505
+
1506
+ split@^1.0.1:
1507
+ version "1.0.1"
1508
+ resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz"
1509
+ integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
1510
+ dependencies:
1511
+ through "2"
1512
+
1513
+ statuses@2.0.1:
1514
+ version "2.0.1"
1515
+ resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
1516
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
1517
+
1518
+ "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
1519
+ version "1.5.0"
1520
+ resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
1521
+ integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
1522
+
1523
+ stream-combiner@^0.2.2:
1524
+ version "0.2.2"
1525
+ resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz"
1526
+ integrity sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==
1527
+ dependencies:
1528
+ duplexer "~0.1.1"
1529
+ through "~2.3.4"
1530
+
1531
+ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
1532
+ version "4.2.3"
1533
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1534
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1535
+ dependencies:
1536
+ emoji-regex "^8.0.0"
1537
+ is-fullwidth-code-point "^3.0.0"
1538
+ strip-ansi "^6.0.1"
1539
+
1540
+ string_decoder@^1.1.1:
1541
+ version "1.3.0"
1542
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1543
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1544
+ dependencies:
1545
+ safe-buffer "~5.2.0"
1546
+
1547
+ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1548
+ version "6.0.1"
1549
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1550
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1551
+ dependencies:
1552
+ ansi-regex "^5.0.1"
1553
+
1554
+ supports-color@^5.3.0:
1555
+ version "5.5.0"
1556
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1557
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1558
+ dependencies:
1559
+ has-flag "^3.0.0"
1560
+
1561
+ tar-fs@2.1.1:
1562
+ version "2.1.1"
1563
+ resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
1564
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
1565
+ dependencies:
1566
+ chownr "^1.1.1"
1567
+ mkdirp-classic "^0.5.2"
1568
+ pump "^3.0.0"
1569
+ tar-stream "^2.1.4"
1570
+
1571
+ tar-stream@^2.1.4:
1572
+ version "2.2.0"
1573
+ resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
1574
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
1575
+ dependencies:
1576
+ bl "^4.0.3"
1577
+ end-of-stream "^1.4.1"
1578
+ fs-constants "^1.0.0"
1579
+ inherits "^2.0.3"
1580
+ readable-stream "^3.1.1"
1581
+
1582
+ through@2, through@^2.3.8, through@~2.3, through@~2.3.4:
1583
+ version "2.3.8"
1584
+ resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
1585
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
1586
+
1587
+ tls-client@^0.0.5:
1588
+ version "0.0.5"
1589
+ resolved "https://registry.npmjs.org/tls-client/-/tls-client-0.0.5.tgz"
1590
+ integrity sha512-kx0+MRC7Ef7VIzdpyOz1zjXlanHMJFror4xT+mu/ZeBR/kbw5j931FSIaiI6W0FKB2Isj0X6XlfMfMB9mjubKA==
1591
+ dependencies:
1592
+ ffi-napi "^4.0.3"
1593
+ tough-cookie "^4.1.2"
1594
+
1595
+ toidentifier@1.0.1:
1596
+ version "1.0.1"
1597
+ resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
1598
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
1599
+
1600
+ tough-cookie@^4.1.2:
1601
+ version "4.1.2"
1602
+ resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz"
1603
+ integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
1604
+ dependencies:
1605
+ psl "^1.1.33"
1606
+ punycode "^2.1.1"
1607
+ universalify "^0.2.0"
1608
+ url-parse "^1.5.3"
1609
+
1610
+ tr46@~0.0.3:
1611
+ version "0.0.3"
1612
+ resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
1613
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
1614
+
1615
+ ts-node@^10.9.1:
1616
+ version "10.9.1"
1617
+ resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz"
1618
+ integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
1619
+ dependencies:
1620
+ "@cspotcode/source-map-support" "^0.8.0"
1621
+ "@tsconfig/node10" "^1.0.7"
1622
+ "@tsconfig/node12" "^1.0.7"
1623
+ "@tsconfig/node14" "^1.0.0"
1624
+ "@tsconfig/node16" "^1.0.2"
1625
+ acorn "^8.4.1"
1626
+ acorn-walk "^8.1.1"
1627
+ arg "^4.1.0"
1628
+ create-require "^1.1.0"
1629
+ diff "^4.0.1"
1630
+ make-error "^1.1.1"
1631
+ v8-compile-cache-lib "^3.0.1"
1632
+ yn "3.1.1"
1633
+
1634
+ tsscmp@1.0.6:
1635
+ version "1.0.6"
1636
+ resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz"
1637
+ integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
1638
+
1639
+ type-is@^1.6.16:
1640
+ version "1.6.18"
1641
+ resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
1642
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
1643
+ dependencies:
1644
+ media-typer "0.3.0"
1645
+ mime-types "~2.1.24"
1646
+
1647
+ typescript@^5.0.4:
1648
+ version "5.0.4"
1649
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz"
1650
+ integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
1651
+
1652
+ unbzip2-stream@1.4.3:
1653
+ version "1.4.3"
1654
+ resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
1655
+ integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
1656
+ dependencies:
1657
+ buffer "^5.2.1"
1658
+ through "^2.3.8"
1659
+
1660
+ underscore-keypath@~0.0.22:
1661
+ version "0.0.22"
1662
+ resolved "https://registry.npmjs.org/underscore-keypath/-/underscore-keypath-0.0.22.tgz"
1663
+ integrity sha512-fU7aYj1J2LQd+jqdQ67AlCOZKK3Pl+VErS8fGYcgZG75XB9/bY+RLM+F2xEcKHhHNtLvqqFyXAoZQlLYfec3Xg==
1664
+ dependencies:
1665
+ underscore "*"
1666
+
1667
+ underscore@*:
1668
+ version "1.13.6"
1669
+ resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz"
1670
+ integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
1671
+
1672
+ universalify@^0.2.0:
1673
+ version "0.2.0"
1674
+ resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz"
1675
+ integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
1676
+
1677
+ universalify@^2.0.0:
1678
+ version "2.0.0"
1679
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
1680
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
1681
+
1682
+ unpipe@1.0.0:
1683
+ version "1.0.0"
1684
+ resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
1685
+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
1686
+
1687
+ url-parse@^1.5.3:
1688
+ version "1.5.10"
1689
+ resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz"
1690
+ integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
1691
+ dependencies:
1692
+ querystringify "^2.1.1"
1693
+ requires-port "^1.0.0"
1694
+
1695
+ user-agents@^1.0.1367:
1696
+ version "1.0.1374"
1697
+ resolved "https://registry.npmjs.org/user-agents/-/user-agents-1.0.1374.tgz"
1698
+ integrity sha512-HM3RZ4CCuo/TG6+DNeolWOlm6xqVfvNk4aCHXFht7MGr5HStiLlG3lyGjfnAIagrlTuc+tGEo0qy3ePastIUgw==
1699
+ dependencies:
1700
+ dot-json "^1.3.0"
1701
+ lodash.clonedeep "^4.5.0"
1702
+
1703
+ util-deprecate@^1.0.1:
1704
+ version "1.0.2"
1705
+ resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1706
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
1707
+
1708
+ uuid@^9.0.0:
1709
+ version "9.0.0"
1710
+ resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz"
1711
+ integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
1712
+
1713
+ v8-compile-cache-lib@^3.0.1:
1714
+ version "3.0.1"
1715
+ resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"
1716
+ integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
1717
+
1718
+ vary@^1.1.2:
1719
+ version "1.1.2"
1720
+ resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
1721
+ integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
1722
+
1723
+ webidl-conversions@^3.0.0:
1724
+ version "3.0.1"
1725
+ resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
1726
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
1727
+
1728
+ whatwg-url@^5.0.0:
1729
+ version "5.0.0"
1730
+ resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
1731
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
1732
+ dependencies:
1733
+ tr46 "~0.0.3"
1734
+ webidl-conversions "^3.0.0"
1735
+
1736
+ wrap-ansi@^7.0.0:
1737
+ version "7.0.0"
1738
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1739
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1740
+ dependencies:
1741
+ ansi-styles "^4.0.0"
1742
+ string-width "^4.1.0"
1743
+ strip-ansi "^6.0.0"
1744
+
1745
+ wrappy@1:
1746
+ version "1.0.2"
1747
+ resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1748
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1749
+
1750
+ ws@8.13.0:
1751
+ version "8.13.0"
1752
+ resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
1753
+ integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
1754
+
1755
+ y18n@^5.0.5:
1756
+ version "5.0.8"
1757
+ resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1758
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1759
+
1760
+ yargs-parser@^21.1.1:
1761
+ version "21.1.1"
1762
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
1763
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
1764
+
1765
+ yargs@17.7.1:
1766
+ version "17.7.1"
1767
+ resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
1768
+ integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
1769
+ dependencies:
1770
+ cliui "^8.0.1"
1771
+ escalade "^3.1.1"
1772
+ get-caller-file "^2.0.5"
1773
+ require-directory "^2.1.1"
1774
+ string-width "^4.2.3"
1775
+ y18n "^5.0.5"
1776
+ yargs-parser "^21.1.1"
1777
+
1778
+ yauzl@^2.10.0:
1779
+ version "2.10.0"
1780
+ resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
1781
+ integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
1782
+ dependencies:
1783
+ buffer-crc32 "~0.2.3"
1784
+ fd-slicer "~1.1.0"
1785
+
1786
+ ylru@^1.2.0:
1787
+ version "1.3.2"
1788
+ resolved "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz"
1789
+ integrity sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==
1790
+
1791
+ yn@3.1.1:
1792
+ version "3.1.1"
1793
+ resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz"
1794
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
client/html/index.html CHANGED
@@ -88,8 +88,8 @@
88
  </div>
89
  <div class="field">
90
  <select name="model" id="model">
91
- <option value="text-gpt-0035-render-sha-0" selected>gpt-3.5-turbo</option>
92
- <option disabled value="text-gpt-0040-render-sha-0">gpt-4 (coming soon)</option>
93
  </select>
94
  </div>
95
  <div class="field">
 
88
  </div>
89
  <div class="field">
90
  <select name="model" id="model">
91
+ <option value="text-gpt-0035">GPT-3.5</option>
92
+ <option value="text-gpt-0040" selected>GPT-4</option>
93
  </select>
94
  </div>
95
  <div class="field">
run.py CHANGED
@@ -1,29 +1,36 @@
1
- from server.app import app
2
- from server.website import Website
3
- from server.backend import Backend_Api
4
-
5
- from json import load
6
-
7
- if __name__ == '__main__':
8
- config = load(open('config.json', 'r'))
9
- site_config = config['site_config']
10
-
11
- site = Website(app)
12
- for route in site.routes:
13
- app.add_url_rule(
14
- route,
15
- view_func=site.routes[route]['function'],
16
- methods=site.routes[route]['methods'],
17
- )
18
-
19
- backend_api = Backend_Api(app, config)
20
- for route in backend_api.routes:
21
- app.add_url_rule(
22
- route,
23
- view_func=backend_api.routes[route]['function'],
24
- methods=backend_api.routes[route]['methods'],
25
- )
26
-
27
- print(f"Running on port {site_config['port']}")
28
- app.run(**site_config)
29
- print(f"Closing port {site_config['port']}")
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import os
3
+ from server.app import app
4
+ from server.website import Website
5
+ from server.backend import Backend_Api
6
+
7
+ from json import load
8
+
9
+ if __name__ == '__main__':
10
+ config = load(open('config.json', 'r'))
11
+ site_config = config['site_config']
12
+
13
+ site = Website(app)
14
+ for route in site.routes:
15
+ app.add_url_rule(
16
+ route,
17
+ view_func=site.routes[route]['function'],
18
+ methods=site.routes[route]['methods'],
19
+ )
20
+
21
+ backend_api = Backend_Api(app, config)
22
+ for route in backend_api.routes:
23
+ app.add_url_rule(
24
+ route,
25
+ view_func=backend_api.routes[route]['function'],
26
+ methods=backend_api.routes[route]['methods'],
27
+ )
28
+
29
+ api_directory = os.path.join(os.path.dirname(os.path.abspath(__file__)), "apiGPT4")
30
+ api_process = subprocess.Popen(["npm", "run", "start"], cwd=api_directory, shell=True)
31
+
32
+ print(f"Running on port {site_config['port']}")
33
+ app.run(**site_config)
34
+ print(f"Closing port {site_config['port']}")
35
+
36
+ api_process.terminate()
server/backend.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import threading
2
  import re
3
  from googletrans import Translator
@@ -28,6 +29,7 @@ class Backend_Api:
28
  def _conversation(self):
29
  try:
30
  jailbreak = request.json['jailbreak']
 
31
  _conversation = request.json['meta']['content']['conversation']
32
  internet_access = request.json['meta']['content']['internet_access']
33
  prompt = request.json['meta']['content']['parts'][0]
@@ -62,30 +64,13 @@ class Backend_Api:
62
  _conversation + [prompt]
63
 
64
  def stream():
65
- response = None
66
-
67
- while self.use_auto_proxy:
68
- try:
69
- random_proxy = get_random_proxy()
70
- res = gpt3.Completion.create(
71
- prompt=conversation, proxy=random_proxy)
72
- response = res['text']
73
- break
74
- except Exception as e:
75
- print(f"Error with proxy {random_proxy}: {e}")
76
- remove_proxy(random_proxy)
77
-
78
- while not self.use_auto_proxy:
79
- try:
80
- res = gpt3.Completion.create(prompt=conversation)
81
- response = res['text']
82
- break
83
- except Exception as e:
84
- print(f"Error: {e}")
85
-
86
- if response is not None:
87
- response = filter_jailbroken_response(response)
88
- yield response
89
 
90
  return self.app.response_class(stream(), mimetype='text/event-stream')
91
 
@@ -106,10 +91,59 @@ def filter_jailbroken_response(response):
106
 
107
 
108
  def set_response_language(prompt, special_instructions_list):
109
- print(prompt)
110
  translator = Translator()
111
  detected_language = translator.detect(prompt).lang
112
  language_instructions = f"You will respond in the language: {detected_language}. "
113
  if special_instructions_list:
114
  special_instructions_list[0]['content'] = language_instructions + \
115
  special_instructions_list[0]['content']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
  import threading
3
  import re
4
  from googletrans import Translator
 
29
  def _conversation(self):
30
  try:
31
  jailbreak = request.json['jailbreak']
32
+ model = request.json['model']
33
  _conversation = request.json['meta']['content']['conversation']
34
  internet_access = request.json['meta']['content']['internet_access']
35
  prompt = request.json['meta']['content']['parts'][0]
 
64
  _conversation + [prompt]
65
 
66
  def stream():
67
+ if isGPT3Model(model):
68
+ response = get_response_gpt3(
69
+ conversation, self.use_auto_proxy)
70
+ if isGPT4Model(model):
71
+ response = get_response_gpt4(conversation)
72
+
73
+ yield response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
  return self.app.response_class(stream(), mimetype='text/event-stream')
76
 
 
91
 
92
 
93
  def set_response_language(prompt, special_instructions_list):
 
94
  translator = Translator()
95
  detected_language = translator.detect(prompt).lang
96
  language_instructions = f"You will respond in the language: {detected_language}. "
97
  if special_instructions_list:
98
  special_instructions_list[0]['content'] = language_instructions + \
99
  special_instructions_list[0]['content']
100
+
101
+
102
+ def get_response_gpt3(conversation, use_proxy):
103
+ while use_proxy:
104
+ try:
105
+ random_proxy = get_random_proxy()
106
+ res = gpt3.Completion.create(
107
+ prompt=conversation, proxy=random_proxy)
108
+ response = res['text']
109
+ break
110
+ except Exception as e:
111
+ print(f"Error with proxy {random_proxy}: {e}")
112
+ remove_proxy(random_proxy)
113
+
114
+ while not use_proxy:
115
+ try:
116
+ res = gpt3.Completion.create(prompt=conversation)
117
+ response = res['text']
118
+ break
119
+ except Exception as e:
120
+ print(f"Error: {e}")
121
+
122
+ if response is not None:
123
+ response = filter_jailbroken_response(response)
124
+ return response
125
+
126
+
127
+ def get_response_gpt4(conversation):
128
+ api_url = f"http://127.0.0.1:3000/ask?prompt={conversation}&model=forefront"
129
+
130
+ while True:
131
+ try:
132
+ res = requests.get(api_url)
133
+ res.raise_for_status()
134
+ response = res.text
135
+ break
136
+ except Exception as e:
137
+ print(f"Error: {e}")
138
+
139
+ if response is not None:
140
+ response = filter_jailbroken_response(response)
141
+ return response
142
+
143
+
144
+ def isGPT3Model(model):
145
+ return model == "text-gpt-0035"
146
+
147
+
148
+ def isGPT4Model(model):
149
+ return model == "text-gpt-0040"
server/config.py CHANGED
@@ -1,6 +1,6 @@
1
  models = {
2
- 'text-gpt-0035-render-sha-0': 'gpt-3.5-turbo',
3
- 'text-gpt-0040-render-sha-0': 'gpt-4',
4
  }
5
 
6
  special_instructions = {
 
1
  models = {
2
+ 'text-gpt-0035': 'gpt-3.5-turbo',
3
+ 'text-gpt-0040': 'gpt-4',
4
  }
5
 
6
  special_instructions = {