mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-21 04:59:15 +00:00
Compare commits
924 Commits
fix/ci-yar
...
contributo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
569093fdf3 | ||
|
|
7e2bf22d63 | ||
|
|
a4b610e21f | ||
|
|
120520df50 | ||
|
|
1551aafd54 | ||
|
|
eca876db9c | ||
|
|
96a387ed50 | ||
|
|
558013b2b4 | ||
|
|
58df7ddc71 | ||
|
|
e25f3abf1c | ||
|
|
0f6b82a9ab | ||
|
|
8f505bdb2b | ||
|
|
24220822f4 | ||
|
|
943fe8698c | ||
|
|
371b403456 | ||
|
|
77145bcc54 | ||
|
|
8f241834e8 | ||
|
|
5174c6b3bb | ||
|
|
f3ed6da4ba | ||
|
|
0dc839e531 | ||
|
|
7475d6f8fd | ||
|
|
a6a33ac7b7 | ||
|
|
71c969f3e9 | ||
|
|
cebfed0382 | ||
|
|
e89ad450a1 | ||
|
|
ac39ac831c | ||
|
|
0af74602f5 | ||
|
|
767e0764d6 | ||
|
|
b2a3343f82 | ||
|
|
5ddd885554 | ||
|
|
7078dc4c93 | ||
|
|
c7e829e954 | ||
|
|
5a81a77802 | ||
|
|
588411653e | ||
|
|
3c4b1c0fc4 | ||
|
|
0f06fd3e80 | ||
|
|
79cc31a96f | ||
|
|
7067b4a80b | ||
|
|
aa7e4239ae | ||
|
|
877252bd4a | ||
|
|
f5a7de3a00 | ||
|
|
c792d47344 | ||
|
|
f6130cf0b9 | ||
|
|
9f9d833925 | ||
|
|
02c0d8af76 | ||
|
|
880d5323e8 | ||
|
|
9bb33582fb | ||
|
|
c8ff84e9cd | ||
|
|
e942bd1d5e | ||
|
|
7e557bdd30 | ||
|
|
fcd1a63676 | ||
|
|
4ade5f02a7 | ||
|
|
05c834d6b1 | ||
|
|
234cc3ffb6 | ||
|
|
e321f35d86 | ||
|
|
5edd755491 | ||
|
|
10748a46a4 | ||
|
|
5b3136999b | ||
|
|
cb047cca8e | ||
|
|
4b8c09633e | ||
|
|
7cabc53eed | ||
|
|
40c34dd7a5 | ||
|
|
7e25dcaa93 | ||
|
|
bfa622fad0 | ||
|
|
e88141077f | ||
|
|
d743fdcfe3 | ||
|
|
1261580004 | ||
|
|
a14c67ad45 | ||
|
|
c5af1f8107 | ||
|
|
01a4edb7e3 | ||
|
|
98793d0cfc | ||
|
|
168b81315b | ||
|
|
8520b09dac | ||
|
|
adb0e49029 | ||
|
|
464dd44ce2 | ||
|
|
e3c94a49d7 | ||
|
|
a29b9d4e1f | ||
|
|
e036817e84 | ||
|
|
18ef4e9d72 | ||
|
|
fe129f62fe | ||
|
|
bb6ed4a084 | ||
|
|
9234cf1c5d | ||
|
|
a118bbbf7f | ||
|
|
f54dea52b0 | ||
|
|
72e0a91050 | ||
|
|
70dd4d73e8 | ||
|
|
ecf0eef928 | ||
|
|
345f256a1b | ||
|
|
3648757fa0 | ||
|
|
32f6a70f8f | ||
|
|
8c825e7f6b | ||
|
|
0c0f4375b8 | ||
|
|
039ce5dd7c | ||
|
|
5e879188b8 | ||
|
|
21a7270281 | ||
|
|
82a99b2c80 | ||
|
|
cc19974579 | ||
|
|
56fcb8fb72 | ||
|
|
f36cff1eef | ||
|
|
09fd0dd2e1 | ||
|
|
b393c11af6 | ||
|
|
6683715ad6 | ||
|
|
e72794a296 | ||
|
|
13e0530c01 | ||
|
|
e5ee70f088 | ||
|
|
bb1f60c6e3 | ||
|
|
b9a1703b20 | ||
|
|
f274379c53 | ||
|
|
d18efc88a9 | ||
|
|
03b5b441de | ||
|
|
06862abece | ||
|
|
d25307dd2d | ||
|
|
04c5209cac | ||
|
|
5362fcec7a | ||
|
|
2f8d5a3fb3 | ||
|
|
4f32e6f2c2 | ||
|
|
553d7fcba9 | ||
| d483b91359 | |||
|
|
6aed100d96 | ||
|
|
c8335c37c2 | ||
|
|
4a7c2fe553 | ||
|
|
a02e373cd9 | ||
| a9755da8c9 | |||
| 46a9fa6793 | |||
|
|
4ee1136115 | ||
|
|
b60db404a9 | ||
|
|
44efbd8518 | ||
|
|
8357eda573 | ||
|
|
05dbf2f240 | ||
|
|
b65c40e59b | ||
|
|
d8bb1418dd | ||
|
|
8f27d34081 | ||
|
|
ee30df73b8 | ||
|
|
8a1bdc5878 | ||
|
|
f742caa9a4 | ||
|
|
a1ce98bdc8 | ||
|
|
230981e267 | ||
|
|
7242ab92f7 | ||
|
|
d3c937579a | ||
| 1302491869 | |||
|
|
45cbc09b0e | ||
|
|
aaec075140 | ||
|
|
42b98801db | ||
|
|
b681be3f11 | ||
|
|
e442d05aa4 | ||
|
|
b682b0b6ba | ||
|
|
96b6430efe | ||
|
|
9723e9d908 | ||
|
|
1bea3401dc | ||
|
|
0f9e57df37 | ||
|
|
49b9b77543 | ||
|
|
804ea2b258 | ||
|
|
939cea03cc | ||
|
|
89cf909888 | ||
|
|
f323184b34 | ||
|
|
65ad00e4ec | ||
|
|
c4158cbac6 | ||
|
|
5a06d2cf88 | ||
|
|
675046cc58 | ||
| f430380b4f | |||
| 8a1c9f3b0e | |||
| eceb170df0 | |||
|
|
ef03478683 | ||
|
|
fb3e2913e3 | ||
|
|
9fb34cc9e0 | ||
|
|
3d2c3e1452 | ||
|
|
83e262b818 | ||
|
|
389169fc58 | ||
|
|
f80a051fa9 | ||
|
|
9688ec1844 | ||
|
|
288894ee8e | ||
|
|
f3151850d5 | ||
|
|
49e9c70d7c | ||
|
|
6a156183ad | ||
|
|
f029c7317a | ||
|
|
fea6276b89 | ||
|
|
4b8c1d0ec6 | ||
|
|
552a425cc0 | ||
|
|
7566059073 | ||
|
|
b321b03b2a | ||
|
|
edf5fdcbdc | ||
|
|
eb1fcbff22 | ||
|
|
68a6e4b241 | ||
|
|
837bbf3c36 | ||
|
|
c8c5a03bad | ||
|
|
353e25c204 | ||
|
|
be6c609570 | ||
|
|
c6f58e913d | ||
|
|
e2fec5d521 | ||
|
|
681ec2e1ab | ||
|
|
0dc5f99089 | ||
|
|
5c880eddf1 | ||
|
|
57fc150331 | ||
|
|
9704bc0f02 | ||
|
|
7d65fee978 | ||
|
|
faa3a21ffe | ||
|
|
84f689cee1 | ||
|
|
5175f66dd0 | ||
|
|
0af9ef2dae | ||
|
|
787cdc69a0 | ||
|
|
f8ceb01eca | ||
|
|
d52951adf9 | ||
|
|
c621d0ee24 | ||
|
|
f047ba6e71 | ||
|
|
401c012e00 | ||
|
|
39859f819c | ||
|
|
5b3e7cefde | ||
|
|
8436d7b0d3 | ||
|
|
135961daf0 | ||
|
|
375a997f25 | ||
|
|
625ca405fc | ||
|
|
8e3413ca80 | ||
|
|
09407401eb | ||
|
|
1fa17dc601 | ||
|
|
73f3e6245d | ||
|
|
afb127278a | ||
|
|
15bfb19853 | ||
|
|
d90a42b962 | ||
|
|
0619641f82 | ||
|
|
d00547866a | ||
|
|
ca978867ff | ||
|
|
af44ed1268 | ||
|
|
2a416bf751 | ||
|
|
2fc274725d | ||
|
|
ecde23fdea | ||
|
|
a73ff9c217 | ||
|
|
16e4575777 | ||
|
|
74a1301342 | ||
|
|
210c013290 | ||
|
|
bfb76c87a1 | ||
|
|
8f2eb6d4f2 | ||
|
|
44dfe8ed1a | ||
|
|
63ecac6f2b | ||
|
|
ac72c5e4e7 | ||
|
|
50d64596c7 | ||
|
|
a7801d1fa2 | ||
|
|
74e6aae631 | ||
|
|
c913d5ee5c | ||
|
|
eafd27c25a | ||
|
|
4289b7c3dd | ||
|
|
c793890c50 | ||
|
|
48a87fff26 | ||
|
|
98bff0285d | ||
|
|
f5b8e42608 | ||
|
|
6469c83552 | ||
|
|
dba33359a0 | ||
|
|
14f3893727 | ||
|
|
a6607f1896 | ||
|
|
9669cc0807 | ||
|
|
1ee05d925a | ||
|
|
3e18bc1f57 | ||
|
|
5872d860c9 | ||
|
|
caa2a42933 | ||
|
|
6b407a1d72 | ||
|
|
da67b75d98 | ||
|
|
28b5739f3f | ||
|
|
2d9da1e584 | ||
|
|
11bcb3f2c8 | ||
|
|
7731f4149e | ||
|
|
ae645643d5 | ||
|
|
9960227006 | ||
|
|
c0bbf5c48f | ||
|
|
512207207c | ||
|
|
200dd6b187 | ||
|
|
cad73dca99 | ||
|
|
2114f997db | ||
|
|
c5d4d82538 | ||
|
|
fdab223786 | ||
|
|
f4d1ae3199 | ||
|
|
527eac4962 | ||
|
|
8ef6d6b560 | ||
|
|
0d588f067f | ||
|
|
b4368fd30a | ||
|
|
b0dd007918 | ||
|
|
246ecdc11a | ||
|
|
891ea75f62 | ||
|
|
af8b401d07 | ||
|
|
3658efd98a | ||
|
|
fd044fb169 | ||
|
|
3fb0f2282c | ||
|
|
46ef98cb23 | ||
|
|
b61a4d7fa0 | ||
|
|
6417f8e63b | ||
|
|
20f752e6c1 | ||
|
|
2b37e5a29d | ||
|
|
8ec7c2108a | ||
|
|
dfc7847573 | ||
|
|
7a23eb0cc6 | ||
|
|
ab2a21ee42 | ||
|
|
249a97862f | ||
|
|
feb9ede912 | ||
|
|
03918fb091 | ||
|
|
1fee5b6bfa | ||
|
|
131d3b7f03 | ||
|
|
d794f604ac | ||
|
|
b2559731da | ||
|
|
f0c332e278 | ||
|
|
4450245d91 | ||
|
|
ca960cd80c | ||
|
|
4d721f99e2 | ||
|
|
cb2e8692a3 | ||
|
|
969ffe177f | ||
|
|
83383e2022 | ||
|
|
09aa3c8ca9 | ||
|
|
9e93795e6f | ||
|
|
3c178ea113 | ||
|
|
1f1f564f4e | ||
|
|
21cc0e3c7d | ||
|
|
40c51236db | ||
|
|
3de5f4b77a | ||
|
|
c6af472d42 | ||
|
|
1c5da9cc6a | ||
|
|
96bfb9af4e | ||
|
|
dd07526a3d | ||
|
|
fd935b9785 | ||
|
|
4e0d33c6bb | ||
|
|
5e6077dd8f | ||
|
|
41de8b9b5a | ||
|
|
5d0929efb4 | ||
|
|
5a033da83a | ||
|
|
8ff9cacae0 | ||
| f9e3bbc665 | |||
| e5f6cf8563 | |||
|
|
2ad57a8be1 | ||
|
|
4f2fbaf21b | ||
|
|
b7694d7857 | ||
|
|
b3eec37fa9 | ||
|
|
bdbf529cb6 | ||
|
|
4ff02d2bfa | ||
|
|
2ddea5468d | ||
|
|
391e11ce73 | ||
|
|
5d10cb9026 | ||
|
|
716349a839 | ||
|
|
9e0a61b7ba | ||
|
|
6ea377e9e5 | ||
|
|
8017426cfc | ||
|
|
b588479fd1 | ||
|
|
25f90e4162 | ||
|
|
b2e57396fb | ||
|
|
df786f7d34 | ||
|
|
930e120d70 | ||
|
|
0ebead27f5 | ||
|
|
397c143952 | ||
|
|
0451043a21 | ||
|
|
2cb032a5da | ||
|
|
a31ded6b02 | ||
|
|
e8e14d3b65 | ||
|
|
a6c10fe414 | ||
| b040790129 | |||
|
|
a71566f2ad | ||
|
|
cb0d0be786 | ||
|
|
2040f857a5 | ||
|
|
28a3a7a5e3 | ||
|
|
737b0b6055 | ||
|
|
bd5a01b7e4 | ||
|
|
3a74927b9d | ||
|
|
31a7b58709 | ||
|
|
acf13fb02f | ||
|
|
21773e244e | ||
|
|
345f626986 | ||
|
|
b72dcd75b7 | ||
|
|
2318a6f1e3 | ||
|
|
9b77b3f148 | ||
|
|
75ec60a1bf | ||
|
|
2c5f3a60b7 | ||
|
|
3cc79a7fd7 | ||
|
|
db7257638a | ||
|
|
59130952fa | ||
|
|
e07e6c5e19 | ||
|
|
190aae55e3 | ||
|
|
15c3747fbf | ||
|
|
d945f0ea79 | ||
|
|
99218b861a | ||
|
|
0feb51cfd0 | ||
|
|
54270c197e | ||
|
|
6940737d49 | ||
|
|
6e10a1084d | ||
|
|
ec2041b75a | ||
| d3eb10d1b3 | |||
|
|
983db5c7b8 | ||
| 95947cdefc | |||
|
|
53fe5b2e14 | ||
|
|
ba17e6c72c | ||
|
|
5e95b200cf | ||
|
|
8dad0a49b1 | ||
|
|
80d3f09480 | ||
|
|
d1b4cbf28b | ||
|
|
3202d45aa8 | ||
|
|
c05de8556f | ||
|
|
81c4ca968e | ||
|
|
ba61b6718d | ||
|
|
665e19fe5b | ||
|
|
7a6274e739 | ||
|
|
f2c8794c48 | ||
|
|
593858bcd2 | ||
|
|
3605f0d1f6 | ||
|
|
f77581fc9d | ||
|
|
b74bc67a94 | ||
|
|
2f9f2169f3 | ||
|
|
0f1c040bb8 | ||
|
|
62c16785a2 | ||
|
|
1d64a6b331 | ||
|
|
ccbf7a7754 | ||
|
|
eaefc734d9 | ||
|
|
8d6c34d8b9 | ||
|
|
77c6baf46b | ||
|
|
faa4ea0152 | ||
|
|
022a3b7d8e | ||
|
|
6e8e8090fb | ||
|
|
a3403dfd92 | ||
|
|
4756745200 | ||
|
|
0d07998a9e | ||
|
|
1cbccb0463 | ||
|
|
d84ee56778 | ||
|
|
aa5aa99d7f | ||
|
|
7d22a47408 | ||
|
|
bed4422e44 | ||
|
|
6d6a4aea84 | ||
|
|
d8d7afe3e4 | ||
|
|
7b7ff8da55 | ||
|
|
fdd38dd541 | ||
|
|
5ce9d82c6d | ||
|
|
54d84cd156 | ||
|
|
5ae588e9cb | ||
|
|
8e6d5cd159 | ||
|
|
f7da73050d | ||
|
|
8a7ee09211 | ||
|
|
1ba2219710 | ||
|
|
ae83774365 | ||
|
|
47a59dc989 | ||
| 49e55088c7 | |||
|
|
19fd788c0f | ||
| 445d3ba78c | |||
|
|
3c16f8f501 | ||
|
|
41c911f867 | ||
|
|
93745dcc14 | ||
|
|
b89aebb106 | ||
|
|
a20499bf35 | ||
|
|
d06294a15a | ||
|
|
dcbc070ea5 | ||
|
|
c84fd60237 | ||
|
|
3012e026b7 | ||
|
|
d94034d5bb | ||
| dbf291070e | |||
|
|
9d2f57da76 | ||
|
|
ceda946d78 | ||
|
|
b0fe63e70f | ||
|
|
eabef7a92d | ||
|
|
9afc5b5a00 | ||
|
|
1b878d2ba0 | ||
|
|
fe33c213b1 | ||
|
|
b0b7ea0e1b | ||
|
|
3d197e877e | ||
|
|
08de15d3d8 | ||
|
|
2a1436bf7c | ||
|
|
78b0a9dddc | ||
|
|
77be7ec7fb | ||
|
|
d8309f77e1 | ||
|
|
d49a91308d | ||
|
|
96a993eeb0 | ||
|
|
760586c819 | ||
|
|
3cef741c9e | ||
|
|
d307d2e7a3 | ||
|
|
fe1129e5ff | ||
|
|
57fd3e8aab | ||
|
|
9b087e0710 | ||
|
|
568978c0dc | ||
|
|
45f477e782 | ||
|
|
79f638d01b | ||
|
|
208fb4e913 | ||
|
|
a603e3b7dc | ||
|
|
38e2340782 | ||
|
|
43f870b1bb | ||
|
|
54a59c7f0d | ||
|
|
2850a34ead | ||
|
|
9242a54fc2 | ||
|
|
b0c0510420 | ||
|
|
4dda7c8491 | ||
|
|
0fee32e788 | ||
|
|
ebf53fd79f | ||
|
|
3d639b78f2 | ||
|
|
1c1a1e6954 | ||
|
|
4e1aeacc35 | ||
|
|
4dc65fd519 | ||
|
|
bd952243b7 | ||
|
|
641d9a2519 | ||
|
|
6940d33960 | ||
| 76a4216772 | |||
| ba2291a3dd | |||
|
|
0d6f702ff5 | ||
| 32db429f29 | |||
|
|
b5d8a6d28a | ||
| d04e7322cb | |||
|
|
f5eee8b6f5 | ||
|
|
78fb70bc1a | ||
|
|
99b18617e7 | ||
|
|
6a26aed929 | ||
|
|
bdf8abfca4 | ||
|
|
fa64d4e3fd | ||
|
|
55bef7c4e7 | ||
|
|
04b51046aa | ||
|
|
6b75bd10fa | ||
|
|
1415a3c915 | ||
|
|
a3c2c85d90 | ||
|
|
38cd1593a1 | ||
|
|
815bb9df84 | ||
|
|
b5016c7b98 | ||
|
|
b968d4cba2 | ||
|
|
adda5d8c64 | ||
|
|
f15e34020e | ||
|
|
65afdeb69e | ||
|
|
1a5c591294 | ||
|
|
b5bfeab57c | ||
|
|
c309d4fbda | ||
|
|
8f2734bfaa | ||
|
|
637c13e81c | ||
|
|
3248dce03d | ||
|
|
928365dcaf | ||
|
|
e37f28096c | ||
|
|
ea1c0bf99b | ||
|
|
aff9f19d8e | ||
|
|
3324ebbb7d | ||
|
|
5633f7c71c | ||
|
|
b659cc9b15 | ||
|
|
c42591000a | ||
|
|
eaf6e084c1 | ||
|
|
ee5b69dbf3 | ||
|
|
e0a34d8d8d | ||
|
|
30e4c20669 | ||
|
|
b2f9f7158b | ||
|
|
229e017ae2 | ||
|
|
dacc7af87b | ||
|
|
e54f1fff51 | ||
|
|
cfde8b213c | ||
|
|
7d96a2c8d9 | ||
|
|
e596526762 | ||
|
|
230bfc16eb | ||
|
|
2cbc96245d | ||
|
|
952ce86ffa | ||
|
|
c62af73c16 | ||
|
|
20f665175c | ||
|
|
11c784f882 | ||
|
|
a6f4aa8d1e | ||
|
|
41e95a606d | ||
|
|
33c0fc09d0 | ||
|
|
751ae00df3 | ||
|
|
e17fb93b47 | ||
|
|
5088b9ff1b | ||
|
|
0db9a190cb | ||
|
|
27ad84fc6c | ||
|
|
447e75f97d | ||
|
|
a60c891a86 | ||
|
|
480d96771f | ||
|
|
5c620342a4 | ||
|
|
d39feb78f0 | ||
|
|
3af618d466 | ||
|
|
30f9975738 | ||
|
|
18a59b85cb | ||
|
|
2563e3ed84 | ||
|
|
c382ca3ca2 | ||
|
|
ab7ad81efb | ||
|
|
91cafe5bb9 | ||
|
|
83fb510a39 | ||
|
|
9a0ba42705 | ||
|
|
e8d625201e | ||
|
|
f1addf6746 | ||
|
|
6c50148143 | ||
|
|
8bc233a79a | ||
|
|
4abb29f8db | ||
|
|
1c976f28f0 | ||
|
|
98440bbd16 | ||
|
|
069b59e71d | ||
|
|
96b569766c | ||
|
|
939c9cbae5 | ||
|
|
be39e8fd30 | ||
|
|
279b93b61b | ||
|
|
5b796a163e | ||
|
|
305d957e11 | ||
|
|
54d1f57a54 | ||
|
|
4896284a23 | ||
|
|
5aa348be0d | ||
|
|
846cecdcab | ||
|
|
954e6b3a98 | ||
|
|
b58e0cc048 | ||
|
|
8b3c02d027 | ||
|
|
086c1c3a36 | ||
|
|
edf45774ba | ||
|
|
7f437d0587 | ||
|
|
14c818102c | ||
|
|
8ce5d43d6b | ||
|
|
b6fd8e2632 | ||
|
|
e5efdec31d | ||
|
|
de43077860 | ||
|
|
d7cb5b285e | ||
|
|
21407c0e37 | ||
|
|
484c8c3bde | ||
|
|
6499248983 | ||
|
|
f2137d310d | ||
|
|
69fd81a565 | ||
|
|
d522b03e2e | ||
|
|
e62351bbc8 | ||
|
|
2db0e10626 | ||
|
|
e331c2dcc4 | ||
|
|
eacf5ded69 | ||
|
|
bb7161b8f3 | ||
|
|
3cdff95f0f | ||
|
|
512c923095 | ||
|
|
aa522059bb | ||
|
|
15d06c6674 | ||
|
|
52eacfc8c9 | ||
|
|
78ddf742db | ||
|
|
2d2bb085cd | ||
|
|
9dc1ac5c42 | ||
|
|
3cc386acd4 | ||
|
|
887b0335b4 | ||
|
|
42931ca689 | ||
|
|
c3e44f764b | ||
|
|
8b6a27b0a7 | ||
|
|
e4ed904a8b | ||
|
|
4be1906914 | ||
|
|
eba032b3b8 | ||
|
|
666d689986 | ||
|
|
351e2b97d0 | ||
|
|
7d2aecf369 | ||
|
|
917942139f | ||
|
|
d117bdd463 | ||
|
|
68eee0f36d | ||
|
|
ecf2a16b3d | ||
|
|
eba92299cf | ||
|
|
88ff3a43a0 | ||
|
|
ba02496222 | ||
|
|
c20e151e20 | ||
|
|
2cf7f5e668 | ||
|
|
b336586de3 | ||
|
|
69557968ab | ||
|
|
9223b0dda7 | ||
|
|
146f2ba489 | ||
|
|
6403b83c23 | ||
|
|
0e111b2bb7 | ||
|
|
b2a0b351ee | ||
|
|
5be76e9d2d | ||
|
|
be124cd7a2 | ||
| 377d819038 | |||
|
|
33ad9c7703 | ||
|
|
458fd30178 | ||
| c539fc3788 | |||
| 6656676123 | |||
| 26dbfcdc72 | |||
| a256b78e5f | |||
| 9577aba145 | |||
| 2f30b995e2 | |||
| c410e9763c | |||
|
|
c308834e6d | ||
|
|
748262302c | ||
|
|
111368e9e4 | ||
|
|
70eebe58b9 | ||
|
|
67d47a6630 | ||
|
|
3dcb247ef9 | ||
|
|
15d31d6047 | ||
|
|
65ffbc358d | ||
|
|
0353d0994d | ||
|
|
160adee406 | ||
|
|
5ee5973911 | ||
|
|
331e5b0f8e | ||
|
|
4d8cf623ff | ||
|
|
9885872991 | ||
|
|
d1e2fbc750 | ||
|
|
6aa78233ff | ||
|
|
e9539cab8b | ||
|
|
386c1bbbac | ||
|
|
3bdc7afe80 | ||
|
|
1b23b83746 | ||
|
|
37fe32322e | ||
|
|
9b30e7dcfc | ||
|
|
478929d134 | ||
|
|
16e5d4b176 | ||
|
|
0b4e35308d | ||
|
|
1ec15647dc | ||
|
|
9ad4874fda | ||
|
|
4d34d3ab1d | ||
|
|
772e52358d | ||
|
|
24b59b1ecb | ||
|
|
f200be76f4 | ||
|
|
c344ef3677 | ||
|
|
388f56f183 | ||
|
|
2eab155cc9 | ||
| 3cca0d3d14 | |||
|
|
b62d21a0bf | ||
|
|
0c94647a27 | ||
|
|
2f633c72da | ||
|
|
7d6708c01b | ||
|
|
798f1cebde | ||
|
|
78aa23fab0 | ||
|
|
b6bf43d70f | ||
|
|
d9aa97c781 | ||
|
|
964a074aa4 | ||
|
|
b4aea18b63 | ||
| 4fc3a6332b | |||
| 42a1f6502f | |||
| 50c975c8bd | |||
| aed0f76dfb | |||
|
|
954e751f70 | ||
| b2f1339610 | |||
|
|
1f61e1a8ea | ||
|
|
63aacdbcaf | ||
|
|
290812bf9a | ||
|
|
be3c228e9e | ||
|
|
e585e2f5f6 | ||
|
|
ed36ce0a77 | ||
|
|
bad16943fc | ||
|
|
a21633fb7c | ||
|
|
96e220cd71 | ||
|
|
0e69d894e1 | ||
| 8160d13c86 | |||
| dcf65b87bc | |||
| a8b29ee1ce | |||
| b59d4fcdd7 | |||
| 2f730ae71e | |||
|
|
6c4845d733 | ||
|
|
91bfdc4630 | ||
|
|
ff65832012 | ||
|
|
68dd1820f0 | ||
|
|
663641a1b8 | ||
|
|
694284488d | ||
|
|
9f8693d63d | ||
|
|
21ec4d1bdd | ||
|
|
bf07c664d1 | ||
|
|
c7e56a4b13 | ||
| fc56c3f042 | |||
|
|
4ec6f1e120 | ||
|
|
1032a3b769 | ||
| cc809368f0 | |||
|
|
6051da99c8 | ||
|
|
942d7e539a | ||
|
|
85f50be9dc | ||
|
|
a52aaa11d8 | ||
|
|
5b15527d78 | ||
|
|
25fc864f66 | ||
| 0581d63942 | |||
|
|
83c247377a | ||
|
|
032dc384b7 | ||
|
|
e3cbf6af01 | ||
|
|
188ff4fb7d | ||
|
|
73e079e93a | ||
|
|
911965b48e | ||
|
|
186477f04d | ||
|
|
2b13d58077 | ||
| 4e0a1091ee | |||
|
|
a7d4103eb3 | ||
|
|
8328f5a078 | ||
|
|
7e5533e46e | ||
|
|
b041f7d0c7 | ||
|
|
3842bb6889 | ||
|
|
71d43b585a | ||
|
|
438607c222 | ||
| e79b881297 | |||
| 99f508f938 | |||
|
|
b7e1ae534a | ||
|
|
77af8f9488 | ||
|
|
dabb0cf131 | ||
|
|
55985083ec | ||
|
|
1fa234c870 | ||
|
|
7890eae03a | ||
|
|
a80225f40e | ||
|
|
467cd23457 | ||
|
|
407e9065e7 | ||
|
|
5433610a84 | ||
|
|
a42b6f4af8 | ||
|
|
fbaef0f60c | ||
|
|
342cbccff1 | ||
| 663f20cc43 | |||
|
|
73671b26ef | ||
|
|
06acec2bf2 | ||
|
|
c868f73462 | ||
|
|
93a990e229 | ||
|
|
00c587fbf2 | ||
|
|
e6fefb4049 | ||
|
|
2d5ac2664b | ||
|
|
4d4f15ce73 | ||
|
|
a30eaac775 | ||
|
|
5da4b7a4d1 | ||
|
|
4e0fcbd834 | ||
|
|
041bf6280e | ||
|
|
e37fd0da36 | ||
|
|
ca6afbb87f | ||
|
|
66f75f8722 | ||
|
|
b8ea8283eb | ||
|
|
3e0781fde6 | ||
|
|
f50658c0ba | ||
|
|
4819dfebda | ||
|
|
25fb0d6ece | ||
|
|
29fd94a0e1 | ||
|
|
851052b3d2 | ||
|
|
a43444bb3e | ||
|
|
c2a6c6872d | ||
| d5a614e5f8 | |||
| c97a172b34 | |||
|
|
31c83f5d68 | ||
|
|
1b83871cca | ||
|
|
337c2e94bc | ||
|
|
01fe9ebc9a | ||
|
|
23b2e8e439 | ||
|
|
f799498dec | ||
| 17466138dd | |||
| 63ca8e8892 | |||
| 60fdbf3d3c | |||
|
|
e8c249897d | ||
| 55d12810d9 | |||
| 639e2defa7 | |||
| b97d8ba8f1 | |||
|
|
f05b76936a | ||
|
|
0a4e1e052a | ||
|
|
28d88c282c | ||
|
|
a2be57f0aa | ||
|
|
670ecf121b | ||
|
|
79e2318256 | ||
|
|
87ba43a553 | ||
|
|
acc1d37e4f | ||
|
|
c578d039c0 | ||
|
|
162067104e | ||
|
|
ea677b6eea | ||
|
|
a82b1cfb57 | ||
| 61d0324261 | |||
|
|
4d692e0a26 | ||
|
|
9de7eada87 | ||
|
|
8f81d995a4 | ||
|
|
024f13691d | ||
|
|
4aa91cb22a | ||
|
|
9ecafe5fc8 | ||
|
|
d039e2aacd | ||
|
|
5173a6c467 | ||
|
|
1d08682393 | ||
|
|
0bb251b4d5 | ||
|
|
04baa7f6fd | ||
|
|
32212fb52d | ||
|
|
aa61a1e1b5 | ||
|
|
f0a0bacec9 | ||
|
|
ec32dc429f | ||
|
|
5ecf9c6ba7 | ||
|
|
d233cbac22 | ||
|
|
10098f018f | ||
|
|
70de13ef6a | ||
|
|
f912fd328f | ||
|
|
6a86da2851 | ||
|
|
1a2a246bf8 | ||
|
|
248d04b666 | ||
|
|
41e96ad027 | ||
|
|
f2fd254d17 | ||
|
|
7790391b50 | ||
|
|
b827a0ab22 | ||
|
|
4142ca4fd5 | ||
|
|
fee7c2e967 | ||
|
|
091544ac3f | ||
|
|
2ce342a0cb | ||
|
|
781779328f | ||
|
|
dfced8c594 | ||
|
|
aaa4ce8372 | ||
|
|
9ddf144244 | ||
|
|
b465de55a0 | ||
|
|
cf1dc6fac8 | ||
|
|
739c63d025 | ||
|
|
8d897f824e | ||
|
|
5303dd7d25 | ||
|
|
aad129ea94 | ||
|
|
e48b29ed29 | ||
|
|
c64560bfc3 | ||
|
|
255ba86506 | ||
|
|
cd2dad9d26 | ||
|
|
c7ff6b4794 | ||
|
|
0246fc0b91 | ||
|
|
2858e910dc | ||
|
|
628d55df37 | ||
|
|
0059a1e7fb | ||
|
|
73ea7c0063 | ||
|
|
cb9f4befa0 | ||
|
|
decccb672a | ||
|
|
51466bf1c7 | ||
|
|
397798790e | ||
|
|
d3b8310180 | ||
|
|
7797c2b461 | ||
|
|
929e74c84b | ||
| 08e2552907 | |||
| 6617107ab8 | |||
|
|
8921959ea0 | ||
|
|
ec46cfdd65 | ||
|
|
bfb69d9a95 | ||
|
|
15f6972257 | ||
|
|
2319db3009 | ||
|
|
9cb98b5e73 | ||
|
|
2999e0e753 | ||
|
|
af716b7537 | ||
|
|
c6999c8493 | ||
|
|
d4b49a9bd7 | ||
|
|
eebc3c9806 | ||
|
|
257f1cc12d | ||
|
|
1036273a28 | ||
|
|
1b8ed93367 | ||
|
|
8c1820c879 | ||
|
|
e5a9db7e12 | ||
|
|
9d5aa7db5d | ||
|
|
40b0d9691e | ||
|
|
2e906bce79 | ||
|
|
33490dc737 | ||
|
|
f05ff4cf88 | ||
|
|
5735b49e25 | ||
|
|
1988948c30 | ||
|
|
cb33c0df68 | ||
|
|
f4ad7040ab | ||
|
|
b3b458e41c | ||
|
|
b115dc3654 | ||
|
|
8c6023e93b | ||
|
|
5d7c297f2f | ||
|
|
bb3f21b056 | ||
|
|
e8aed880d8 | ||
|
|
babff11c70 | ||
|
|
b24c005e3e | ||
|
|
2d6c1879ce | ||
|
|
f88607c2c2 | ||
|
|
b3c13d5f98 | ||
|
|
ee87e9e875 | ||
|
|
1884832192 | ||
|
|
f21a58b6ff | ||
|
|
8a4f134327 | ||
|
|
9b6ce92612 |
2
.eslintignore
Normal file
2
.eslintignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
packages/docs/*
|
||||||
|
packages/portal/*
|
||||||
@@ -10,5 +10,9 @@ module.exports = {
|
|||||||
parserOptions: {
|
parserOptions: {
|
||||||
ecmaVersion: 'latest',
|
ecmaVersion: 'latest',
|
||||||
},
|
},
|
||||||
rules: {},
|
rules: {
|
||||||
|
'no-unsafe-negation': 'off',
|
||||||
|
'no-prototype-builtins': 'off',
|
||||||
|
'no-useless-escape': 'off',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
4
.github/FUNDING.yml
vendored
Normal file
4
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
open_collective: bot-whatsapp
|
||||||
|
patreon: leifermendez
|
||||||
|
custom: https://www.buymeacoffee.com/leifermendez
|
||||||
58
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
58
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
name: 🐛 Reporte Bug
|
||||||
|
description: Algo no va bien?. Hazlo saber
|
||||||
|
labels: [bug, triage]
|
||||||
|
title: '[🐛]'
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Gracias por tomarte el tiempo de reportar este problema
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: ¿Que versión estas usando?
|
||||||
|
description: '__INFO:__ Recuerda que puedes consultar dudas directamente en [discord](https://link.codigoencasa.com/DISCORD)'
|
||||||
|
options:
|
||||||
|
- v2
|
||||||
|
- v1
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: component
|
||||||
|
attributes:
|
||||||
|
label: ¿Sobre que afecta?
|
||||||
|
options:
|
||||||
|
- Flujo de palabras (Flow)
|
||||||
|
- DialogFlow
|
||||||
|
- Base de datos
|
||||||
|
- Otro
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
description: 'Trata de ser lo más claro posible, de esa manera podemos entender el contexto de tu problema y darte una mejor solución'
|
||||||
|
label: Describe tu problema
|
||||||
|
placeholder: Yo tengo un problema....
|
||||||
|
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: reproduction
|
||||||
|
attributes:
|
||||||
|
label: Reproducir error
|
||||||
|
description: __(Recomendación)__ trata de grabar un video puedes usar algunas de las siguientes herramientas [https://www.vidyard.com/](https://www.vidyard.com/) [https://www.loom.com/](https://www.loom.com/) y en lo posbile apoyate en [https://stackblitz.com/](https://stackblitz.com/) para compartir el código de ser necesario
|
||||||
|
placeholder: URL video o stackblitz
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: additional_information
|
||||||
|
attributes:
|
||||||
|
label: Información Adicional
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
contact_links:
|
||||||
|
- name: 🤔 Core Team
|
||||||
|
url: https://link.codigoencasa.com/DISCORD
|
||||||
|
about: Si quieres formar parte del CoreTeam, patrocinar el proyecto o propuesta profesionales
|
||||||
79
.github/ISSUE_TEMPLATE/test-case.yml
vendored
Normal file
79
.github/ISSUE_TEMPLATE/test-case.yml
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
name: 🐬 Caso de uso
|
||||||
|
description: Reporta tu caso de uso y cuales fueron tus resultados
|
||||||
|
labels: [usecase]
|
||||||
|
title: '[🐬]'
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Gracias por tomarte el tiempo de detallar este caso de uso, sera de gran utilidad para mantener un software de calidad puedes comenzar
|
||||||
|
⚡ `npm create bot-whatsapp@dev`
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: ¿Cual proveedor usaste?
|
||||||
|
description: 'Actualmente tenemos varios proveedores que sirven como punto de entrada y salida con Whatsapp'
|
||||||
|
options:
|
||||||
|
- whatsapp-web.js
|
||||||
|
- venom
|
||||||
|
- bailey
|
||||||
|
- twilio
|
||||||
|
- meta
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: component
|
||||||
|
attributes:
|
||||||
|
label: ¿Cual base de datos usaste?
|
||||||
|
options:
|
||||||
|
- memory
|
||||||
|
- mongo
|
||||||
|
- mysql
|
||||||
|
- json
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: result
|
||||||
|
attributes:
|
||||||
|
label: Conclusion de la prueba
|
||||||
|
options:
|
||||||
|
- muy buena
|
||||||
|
- buena
|
||||||
|
- tiene errores
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
description: 'Trata de ser lo más claro posible, de esa manera podemos entender el contexto del caso de uso'
|
||||||
|
label: Describe tu caso
|
||||||
|
placeholder: Yo tengo un caso....
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: ¿Logs Importantes?
|
||||||
|
description: Si tienes algunos logs importantes a tener en cuenta o que muetren algun error en concreto.
|
||||||
|
render: shell
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: additional_information
|
||||||
|
attributes:
|
||||||
|
label: Información Adicional
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: usernames
|
||||||
|
attributes:
|
||||||
|
label: ¿Quieres que te mencionemos?
|
||||||
|
description: Siempre buscamos fomentar la comunidad por lo cual si quieres que te mencionemos publicamente en nuestras redes sociales puedes dejar tu username
|
||||||
|
placeholder: twitter o github o instagram o alguna url
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Que tipo de Pull Request es?
|
||||||
|
|
||||||
|
- [ ] Mejoras
|
||||||
|
- [ ] Bug
|
||||||
|
- [ ] Docs / tests
|
||||||
|
|
||||||
|
# Descripción
|
||||||
|
|
||||||
|
Por favor agrega una descripción de tu aporte para tener más contexto y poder avanzar más rápido. Si es de ayuda puedes usar plataformar como [https://www.loom.com/](https://www.loom.com/) para grabar un video.
|
||||||
|
|
||||||
|
|
||||||
|
> Forma parte de este proyecto.
|
||||||
|
|
||||||
|
- [Discord](https://link.codigoencasa.com/DISCORD)
|
||||||
|
- [Twitter](https://twitter.com/leifermendez)
|
||||||
|
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
|
||||||
|
- [Telegram](https://t.me/leifermendez)
|
||||||
52
.github/workflows/check-provider-major.yml
vendored
Normal file
52
.github/workflows/check-provider-major.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
name: Rev Major Providers
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 9 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-npm:
|
||||||
|
name: Install Dependencies
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Check Baileys
|
||||||
|
run: yarn node ./scripts/checker.js --name=baileys --stable=true
|
||||||
|
|
||||||
|
- name: Check Venom
|
||||||
|
run: yarn node ./scripts/checker.js --name=venom --stable=true
|
||||||
|
|
||||||
|
- name: Check web-whatsapp
|
||||||
|
run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true
|
||||||
|
|
||||||
|
- name: Check Meta
|
||||||
|
run: yarn node ./scripts/checker.js --name=meta --stable=true
|
||||||
|
|
||||||
|
- name: Check Twilio
|
||||||
|
run: yarn node ./scripts/checker.js --name=twilio --stable=true
|
||||||
|
|
||||||
|
- name: Add and commit changes to gh-pages branch
|
||||||
|
run: |
|
||||||
|
git config --local user.email 'action@github.com'
|
||||||
|
git config --local user.name 'GitHub Action'
|
||||||
|
git add .
|
||||||
|
|
||||||
|
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||||
|
with:
|
||||||
|
commit_message: 'ci(providers): check provider versions'
|
||||||
|
create_branch: true
|
||||||
|
branch: feature/providers-major
|
||||||
113
.github/workflows/ci.yml
vendored
113
.github/workflows/ci.yml
vendored
@@ -1,29 +1,110 @@
|
|||||||
name: Bot CI
|
name: Build and Test
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches: [dev]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main, dev]
|
branches:
|
||||||
|
- dev
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
############ BUILD PACKAGE ############
|
||||||
|
build-package:
|
||||||
|
name: Build Package
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
strategy:
|
- test-unit
|
||||||
matrix:
|
|
||||||
node-version: [16.x]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
- run: corepack enable
|
- run: corepack enable
|
||||||
|
|
||||||
- name: Install NPM Dependencies
|
- name: Install NPM Dependencies
|
||||||
run: yarn install --immutable --network-timeout 300000
|
run: yarn install --immutable --network-timeout 300000
|
||||||
- name: Build
|
|
||||||
run: yarn build
|
- name: Build Package
|
||||||
- name: Test
|
run: yarn build:full
|
||||||
|
|
||||||
|
- name: Build Eslint rules
|
||||||
|
run: yarn lint:fix
|
||||||
|
|
||||||
|
############ UNIT TEST ############
|
||||||
|
test-unit:
|
||||||
|
name: Unit Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Unit Tests
|
||||||
run: yarn test
|
run: yarn test
|
||||||
|
|
||||||
|
############ UNIT TEST ############
|
||||||
|
check-providers:
|
||||||
|
name: Check Providers Versions
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
commit: ${{ steps.vars.outputs.commit }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: ${{github.event.after}}
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Check Baileys
|
||||||
|
run: yarn node ./scripts/checker.js --name=baileys --stable=true
|
||||||
|
|
||||||
|
- name: Check Venom
|
||||||
|
run: yarn node ./scripts/checker.js --name=venom --stable=true
|
||||||
|
|
||||||
|
- name: Check web-whatsapp
|
||||||
|
run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true
|
||||||
|
|
||||||
|
- name: Check Meta
|
||||||
|
run: yarn node ./scripts/checker.js --name=meta --stable=true
|
||||||
|
|
||||||
|
- name: Check Twilio
|
||||||
|
run: yarn node ./scripts/checker.js --name=twilio --stable=true
|
||||||
|
|
||||||
|
- name: Set output
|
||||||
|
id: vars
|
||||||
|
run: echo "commit=$(git log --format=%B -n 1 ${{github.event.after}})" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Commit & Push changes
|
||||||
|
uses: actions-js/push@master
|
||||||
|
with:
|
||||||
|
branch: feature/providers-major
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
force: true
|
||||||
|
|||||||
76
.github/workflows/codeql.yml
vendored
Normal file
76
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: 'CodeQL'
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [release/next]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: ['main']
|
||||||
|
schedule:
|
||||||
|
- cron: '21 16 * * 5'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
if: ${{ !github.event.act }}
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: ['javascript']
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||||
|
# Use only 'java' to analyze code written in Java, Kotlin or both
|
||||||
|
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
||||||
|
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
|
||||||
|
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
|
# queries: security-extended,security-and-quality
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
|
||||||
|
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||||
|
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||||
|
|
||||||
|
# - run: |
|
||||||
|
# echo "Run, Build Application using script"
|
||||||
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
|
with:
|
||||||
|
category: '/language:${{matrix.language}}'
|
||||||
9
.github/workflows/contributors.yml
vendored
9
.github/workflows/contributors.yml
vendored
@@ -1,11 +1,8 @@
|
|||||||
name: Add contributors
|
name: Revisando Colaboradores
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '20 20 * * *'
|
- cron: '0 9 * * *'
|
||||||
push:
|
|
||||||
branches: [dev]
|
|
||||||
pull_request:
|
|
||||||
branches: [main, dev]
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
contrib-readme-job:
|
contrib-readme-job:
|
||||||
|
|||||||
47
.github/workflows/netlify-dev.yml
vendored
Normal file
47
.github/workflows/netlify-dev.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
name: 📄 Desplegando documentacion
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- 'feat/docs-**'
|
||||||
|
- 'fix/docs-**'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'feat/docs-**'
|
||||||
|
- 'fix/docs-**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
############ DOCUMENTATION BUILD ############
|
||||||
|
build-documentation:
|
||||||
|
if: ${{ !github.event.act }}
|
||||||
|
name: Build Package
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Add netlify
|
||||||
|
run: yarn add netlify-cli -D
|
||||||
|
|
||||||
|
- name: Create .env build file
|
||||||
|
run: |
|
||||||
|
touch packages/docs/.env
|
||||||
|
echo VITE_GITHUB_TOKEN=${{ secrets.COLLABORATORS_TOKEN }} >> packages/docs/.env
|
||||||
|
|
||||||
|
- name: Build and Deploy
|
||||||
|
run: |
|
||||||
|
cd packages/docs
|
||||||
|
netlify deploy --build --site ${{ secrets.NETLIFY_SITE_ID }} --auth ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||||
41
.github/workflows/netlify.yml
vendored
Normal file
41
.github/workflows/netlify.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
name: 📄 (PROD) Desplegando documentacion
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- release/next
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
############ DOCUMENTATION BUILD ############
|
||||||
|
build-documentation-prod:
|
||||||
|
name: Build Package
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Add netlify
|
||||||
|
run: yarn add netlify-cli -D
|
||||||
|
|
||||||
|
- name: Create .env build file
|
||||||
|
run: |
|
||||||
|
touch packages/docs/.env
|
||||||
|
echo VITE_GITHUB_TOKEN=${{ secrets.COLLABORATORS_TOKEN }} >> packages/docs/.env
|
||||||
|
|
||||||
|
- name: Build and Deploy
|
||||||
|
run: |
|
||||||
|
cd packages/docs
|
||||||
|
netlify deploy --prod --build --site ${{ secrets.NETLIFY_SITE_ID }} --auth ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||||
64
.github/workflows/releases-dev.yml
vendored
Normal file
64
.github/workflows/releases-dev.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: 🚀 (DEV) Liberando versiones
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- release/next
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
############ RELEASE ############
|
||||||
|
release:
|
||||||
|
name: Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
commit: ${{ steps.vars.outputs.commit }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: ${{github.event.after}}
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Build Package
|
||||||
|
run: yarn build:full
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/bot
|
||||||
|
run: yarn node ./scripts/release.js --name=bot --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/cli
|
||||||
|
run: yarn node ./scripts/release.js --name=cli --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/create-bot-whatsapp
|
||||||
|
run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/database
|
||||||
|
run: yarn node ./scripts/release.js --name=database --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/provider
|
||||||
|
run: yarn node ./scripts/release.js --name=provider --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/contexts
|
||||||
|
run: yarn node ./scripts/release.js --name=contexts --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/portal
|
||||||
|
run: yarn node ./scripts/release.js --name=portal --version= --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Commit & Push changes
|
||||||
|
uses: actions-js/push@master
|
||||||
|
with:
|
||||||
|
branch: release/next
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
force: true
|
||||||
75
.github/workflows/releases.yml
vendored
Normal file
75
.github/workflows/releases.yml
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
name: 🚀⚡ Liberando versiones
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- release/production
|
||||||
|
jobs:
|
||||||
|
############ RELEASE ############
|
||||||
|
release-prod:
|
||||||
|
if: ${{ !github.event.act }}
|
||||||
|
name: Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set output
|
||||||
|
id: vars
|
||||||
|
run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
cache: 'yarn'
|
||||||
|
registry-url: https://registry.npmjs.org/
|
||||||
|
|
||||||
|
- run: corepack enable
|
||||||
|
|
||||||
|
- name: Set User
|
||||||
|
run: git config --global user.email "leifer.contacto@gmail.com" && git config --global user.name "Leifer Mendez"
|
||||||
|
|
||||||
|
- name: Install NPM Dependencies
|
||||||
|
run: yarn install --immutable --network-timeout 300000
|
||||||
|
|
||||||
|
- name: Set CHANGELOG
|
||||||
|
run: yarn release
|
||||||
|
|
||||||
|
- name: get-npm-version
|
||||||
|
id: package-version
|
||||||
|
uses: martinbeentjes/npm-get-version-action@main
|
||||||
|
|
||||||
|
- name: Build Package
|
||||||
|
run: yarn build:full
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/bot
|
||||||
|
run: yarn node ./scripts/release.js --name=bot --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/cli
|
||||||
|
run: yarn node ./scripts/release.js --name=cli --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/create-bot-whatsapp
|
||||||
|
run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/database
|
||||||
|
run: yarn node ./scripts/release.js --name=database --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/provider
|
||||||
|
run: yarn node ./scripts/release.js --name=provider --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/contexts
|
||||||
|
run: yarn node ./scripts/release.js --name=contexts --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release @bot-whatsapp/portal
|
||||||
|
run: yarn node ./scripts/release.js --name=portal --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Release Github
|
||||||
|
run: yarn node ./scripts/github.js --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.OCTO_TOKEN }}"
|
||||||
|
|
||||||
|
- name: Commit & Push changes
|
||||||
|
uses: actions-js/push@master
|
||||||
|
with:
|
||||||
|
branch: release/production
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
force: true
|
||||||
27
.github/workflows/stale.yml
vendored
Normal file
27
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
|
||||||
|
#
|
||||||
|
# You can adjust the behavior by modifying this file.
|
||||||
|
# For more information, see:
|
||||||
|
# https://github.com/actions/stale
|
||||||
|
name: Revisar ISSUES abandonadas
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '55 22 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v5
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
stale-issue-message: '¿Alguna novedad sobre esta ISSUE?'
|
||||||
|
stale-pr-message: '¿Alguna novedad sobre esta PULL REQUEST?'
|
||||||
|
stale-issue-label: 'no-issue-activity'
|
||||||
|
stale-pr-label: 'no-pr-activity'
|
||||||
|
exempt-issue-assignees: 'leifermendez'
|
||||||
16
.gitignore
vendored
16
.gitignore
vendored
@@ -1,7 +1,10 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
|
/packages/repl
|
||||||
|
/packages/*/starters
|
||||||
/packages/*/node_modules
|
/packages/*/node_modules
|
||||||
/packages/*/dist
|
/packages/*/dist
|
||||||
/packages/*/docs/dist
|
/packages/*/docs/dist
|
||||||
|
/packages/provider/src/venom/tokens
|
||||||
session.json
|
session.json
|
||||||
chats/*
|
chats/*
|
||||||
!chats/.gitkeep
|
!chats/.gitkeep
|
||||||
@@ -12,6 +15,10 @@ mediaSend/*
|
|||||||
!mediaSend/nota-de-voz.mp3
|
!mediaSend/nota-de-voz.mp3
|
||||||
.env
|
.env
|
||||||
.wwebjs_auth
|
.wwebjs_auth
|
||||||
|
/session
|
||||||
|
/session/*
|
||||||
|
/tokens
|
||||||
|
/tokens/*
|
||||||
packages/cli/config.json
|
packages/cli/config.json
|
||||||
config.json
|
config.json
|
||||||
.yarnrc.yml
|
.yarnrc.yml
|
||||||
@@ -20,6 +27,7 @@ coverage/
|
|||||||
log
|
log
|
||||||
log/*
|
log/*
|
||||||
*.log
|
*.log
|
||||||
|
*.tgz
|
||||||
lib
|
lib
|
||||||
tmp/
|
tmp/
|
||||||
.yarn/*
|
.yarn/*
|
||||||
@@ -27,6 +35,12 @@ tmp/
|
|||||||
!.yarn/plugins/@yarnpkg/plugin-postinstall.cjs
|
!.yarn/plugins/@yarnpkg/plugin-postinstall.cjs
|
||||||
.fleet/
|
.fleet/
|
||||||
example-app*/
|
example-app*/
|
||||||
|
base-*/
|
||||||
|
!starters/apps/base-*/
|
||||||
qr.svg
|
qr.svg
|
||||||
package-lock.json
|
package-lock.json
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
|
.npmrc
|
||||||
|
# Local Netlify folder
|
||||||
|
.netlify
|
||||||
|
.secrets
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
packages/**/lib
|
packages/**/lib
|
||||||
packages/docs
|
packages/docs/*.json
|
||||||
**/.git
|
**/.git
|
||||||
**/.svn
|
**/.svn
|
||||||
**/.hg
|
**/.hg
|
||||||
|
|||||||
24
.vscode/bot.code-snippets
vendored
Normal file
24
.vscode/bot.code-snippets
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"Flow Bot (simple)": {
|
||||||
|
"scope": "javascript",
|
||||||
|
"prefix": "bot:flow",
|
||||||
|
"description": "Crear un flujo simple",
|
||||||
|
"body": [
|
||||||
|
"export const flow${1} = addKeyword(['hola', 'buenas'])",
|
||||||
|
" .addAnswer('Hola! 🚀 Bienvenido a este CHATBOT')",
|
||||||
|
" .addAnswer('¿Como puedo ayudarte?')"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Flow Bot (completo)": {
|
||||||
|
"scope": "javascript",
|
||||||
|
"prefix": "bot:flow completo",
|
||||||
|
"description": "Crear un flujo completo",
|
||||||
|
"body": [
|
||||||
|
"export const flow${1} = addKeyword(['categorias'])",
|
||||||
|
" .addAnswer('⚡ Tenemos las siguientes categorias')",
|
||||||
|
" .addAnswer(['🚀 Computadoras', '🚀 Celulares', '🚀 Otros'], {",
|
||||||
|
" delay: 1500, //Milisegundo 1500 = 1.5segundos",
|
||||||
|
"})"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["xyc.vscode-mdx-preview"]
|
||||||
|
}
|
||||||
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -6,6 +6,9 @@
|
|||||||
"bot",
|
"bot",
|
||||||
"provider",
|
"provider",
|
||||||
"adapter",
|
"adapter",
|
||||||
"ci"
|
"ci",
|
||||||
|
"starters",
|
||||||
|
"conflict",
|
||||||
|
"contexts"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
474
CHANGELOG.md
474
CHANGELOG.md
@@ -2,6 +2,480 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
### [0.1.18](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.17...v0.1.18) (2023-01-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bot:** :zap: add blacklist ([7078dc4](https://github.com/leifermendez/bot-whatsapp/commit/7078dc4c93d01bf90ef08ecb34e89a1abbe16fd2))
|
||||||
|
* **bot:** :zap: flowDynamic buttons, media ([3c4b1c0](https://github.com/leifermendez/bot-whatsapp/commit/3c4b1c0fc4b6d98d67c67806d918d3604bb2209b))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bot:** :bug: body undefined ([bb6ed4a](https://github.com/leifermendez/bot-whatsapp/commit/bb6ed4a084ae98070dfdf0c4ba1eca574c4092cc))
|
||||||
|
* **bot:** :bug: body undefined ([9234cf1](https://github.com/leifermendez/bot-whatsapp/commit/9234cf1c5d00abdd35e62a826b3c450ab056987a))
|
||||||
|
* **bot:** :bug: body undefined ([a118bbb](https://github.com/leifermendez/bot-whatsapp/commit/a118bbbf7f0a7023cb7f33c23f37db72adad151f))
|
||||||
|
* **bot:** :bug: body undefined ([f54dea5](https://github.com/leifermendez/bot-whatsapp/commit/f54dea52b01063acd6122eeba1fbbe324aa7805d))
|
||||||
|
* **bot:** :bug: body undefined ([72e0a91](https://github.com/leifermendez/bot-whatsapp/commit/72e0a910503e9643db7dfbc6e09c41c96934e1f7))
|
||||||
|
* **bot:** :bug: body undefined ([70dd4d7](https://github.com/leifermendez/bot-whatsapp/commit/70dd4d73e814fc5636d19a887f3621c483b837c1))
|
||||||
|
* **bot:** :bug: body undefined ([ecf0eef](https://github.com/leifermendez/bot-whatsapp/commit/ecf0eef928917d76c59bd23886cb7a4108b421f1))
|
||||||
|
* **bot:** :bug: flowDynamic stranger behaviour ([877252b](https://github.com/leifermendez/bot-whatsapp/commit/877252bd4a8a7bbbbf083c3ceaeaeb952b0a1828))
|
||||||
|
* **bot:** :bug: flowDynamic stranger behaviour ([f5a7de3](https://github.com/leifermendez/bot-whatsapp/commit/f5a7de3a003c012e2164e51fff26892cfc3144be))
|
||||||
|
* **bot:** :memo: more docs ([98793d0](https://github.com/leifermendez/bot-whatsapp/commit/98793d0cfc1674830beaa3707f933c5a791eec14))
|
||||||
|
* **cli:** :zap: refactor ([a29b9d4](https://github.com/leifermendez/bot-whatsapp/commit/a29b9d4e1f85fc163cf1d633c0857f0c8b7f03e1))
|
||||||
|
* **cli:** :zap: refactor ([18ef4e9](https://github.com/leifermendez/bot-whatsapp/commit/18ef4e9d726575ca390ca24354825860328d3347))
|
||||||
|
* **cli:** :zap: refactor ([3648757](https://github.com/leifermendez/bot-whatsapp/commit/3648757fa083bdb88a16bf6c2e90c828c233bdb1))
|
||||||
|
* **cli:** :zap: refactor ([32f6a70](https://github.com/leifermendez/bot-whatsapp/commit/32f6a70f8f6fb26d8ea2a0f1a4aec4827b9d6a93))
|
||||||
|
* **cli:** :zap: refactor ([8c825e7](https://github.com/leifermendez/bot-whatsapp/commit/8c825e7f6b7133f7cc7f3041ce331b80a9fe60e0))
|
||||||
|
* **cli:** :zap: refactor ([0c0f437](https://github.com/leifermendez/bot-whatsapp/commit/0c0f4375b84549bee809340a85f9ce038ee2739e))
|
||||||
|
* **cli:** :zap: refactor ([039ce5d](https://github.com/leifermendez/bot-whatsapp/commit/039ce5dd7cac8115b335ad5de05f7bd871e24140))
|
||||||
|
* **cli:** :zap: refactor ([5e87918](https://github.com/leifermendez/bot-whatsapp/commit/5e879188b8bf9d486399b308a9a9c2612607d465))
|
||||||
|
* **cli:** :zap: refactor ([21a7270](https://github.com/leifermendez/bot-whatsapp/commit/21a72702817bc6b344223b34ca4513a7ff45fc93))
|
||||||
|
* **cli:** :zap: refactor ([82a99b2](https://github.com/leifermendez/bot-whatsapp/commit/82a99b2c80e6738566042ea738bbab8208a17758))
|
||||||
|
* **cli:** :zap: refactor ([cc19974](https://github.com/leifermendez/bot-whatsapp/commit/cc19974579379777b05cb69c38cec0fce6740471))
|
||||||
|
* **cli:** :zap: refactor ([56fcb8f](https://github.com/leifermendez/bot-whatsapp/commit/56fcb8fb72169bc21fce7c4fcdceccf2acd39c73))
|
||||||
|
* **cli:** :zap: refactor ([f36cff1](https://github.com/leifermendez/bot-whatsapp/commit/f36cff1eefdd96be4ab531e1cb2d3b630b1a81c3))
|
||||||
|
* **cli:** :zap: refactor ([b393c11](https://github.com/leifermendez/bot-whatsapp/commit/b393c11af6c0ebccb0a690be8b90b9df8877dad1))
|
||||||
|
* **cli:** :zap: refactor ([6683715](https://github.com/leifermendez/bot-whatsapp/commit/6683715ad617ea1075654a475a1c62ea607c733f))
|
||||||
|
* **contexts:** :bug: fixed [#524](https://github.com/leifermendez/bot-whatsapp/issues/524) issue ([79cc31a](https://github.com/leifermendez/bot-whatsapp/commit/79cc31a96f6a9836447cc4e6bb1e1521c54183fe))
|
||||||
|
* **contexts:** :bug: fixed [#524](https://github.com/leifermendez/bot-whatsapp/issues/524) issue ([7067b4a](https://github.com/leifermendez/bot-whatsapp/commit/7067b4a80b7938ccfaf1ed141a37d645a1a3a062))
|
||||||
|
* **provider:** wwebjs upgrade ([345f256](https://github.com/leifermendez/bot-whatsapp/commit/345f256a1b4a238519dafc15c9a31bc5e6bad4fe))
|
||||||
|
* se agrego @bot-whatsapp/portal a package.json ([46a9fa6](https://github.com/leifermendez/bot-whatsapp/commit/46a9fa6793e06600335de998d2bd9d0691b02ca4))
|
||||||
|
|
||||||
|
### [0.1.17](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.16...v0.1.17) (2023-01-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* mod de starters para habiltar portal ([eceb170](https://github.com/leifermendez/bot-whatsapp/commit/eceb170df03721dca4183b658c863b94fa04bc84))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **ci:** pre-release ([aaec075](https://github.com/leifermendez/bot-whatsapp/commit/aaec0751408ab49483d428810d94aaf7d46acb94))
|
||||||
|
* correccion en starters app.js para portal QR ([f430380](https://github.com/leifermendez/bot-whatsapp/commit/f430380b4f23d41702395c96c628bf13bf443278))
|
||||||
|
* **starters:** :zap: added dockerfile ([230981e](https://github.com/leifermendez/bot-whatsapp/commit/230981e2676361149cb2a99def7f705e75009260))
|
||||||
|
|
||||||
|
### [0.1.16](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.15...v0.1.16) (2023-01-11)
|
||||||
|
|
||||||
|
### [0.1.15](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.14...v0.1.15) (2023-01-11)
|
||||||
|
|
||||||
|
### [0.1.14](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.13...v0.1.14) (2023-01-11)
|
||||||
|
|
||||||
|
### [0.1.13](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.12...v0.1.13) (2023-01-11)
|
||||||
|
|
||||||
|
### [0.1.12](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.12) (2023-01-11)
|
||||||
|
|
||||||
|
### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.11](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.11) (2023-01-11)
|
||||||
|
|
||||||
|
### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.10](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.8...v0.1.10) (2023-01-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* :fire: update qr package ([ecde23f](https://github.com/leifermendez/bot-whatsapp/commit/ecde23fdea65def209aa874af35a3f293e6b1a91))
|
||||||
|
|
||||||
|
### [0.1.8](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.8) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.7](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7) (2023-01-10)
|
||||||
|
|
||||||
|
### [0.1.6](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.5...v0.1.6) (2023-01-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* :zap: new portal web for qr scan ([cb2e869](https://github.com/leifermendez/bot-whatsapp/commit/cb2e8692a3f94c8b24993cd11dd564f094b0e4ef))
|
||||||
|
* :zap: new portal web for qr scan ([9e93795](https://github.com/leifermendez/bot-whatsapp/commit/9e93795e6fce38890045389da95184fef1fbe0da))
|
||||||
|
* :zap: new portal web for qr scan ([3c178ea](https://github.com/leifermendez/bot-whatsapp/commit/3c178ea113b140535a51f5dcd521dbb66251670e))
|
||||||
|
* :zap: new portal web for qr scan ([1f1f564](https://github.com/leifermendez/bot-whatsapp/commit/1f1f564f4e2e3aa13b84de500fe215e0c45c2770))
|
||||||
|
* :zap: new portal web for qr scan ([3de5f4b](https://github.com/leifermendez/bot-whatsapp/commit/3de5f4b77a10e30632ff7555f5af5d8e93cb2019))
|
||||||
|
* :zap: qr code filename ([d794f60](https://github.com/leifermendez/bot-whatsapp/commit/d794f604ac8a835e523709dbf18c9b1609bbd00e))
|
||||||
|
* :zap: qr portal ([246ecdc](https://github.com/leifermendez/bot-whatsapp/commit/246ecdc11a8c4e652867c842b612dc4ce73f9828))
|
||||||
|
* :zap: qr portal ([af8b401](https://github.com/leifermendez/bot-whatsapp/commit/af8b401d075e1c35065589ede61476461ce86b4d))
|
||||||
|
* agregamos dockerfile y webserver a starters ([f9e3bbc](https://github.com/leifermendez/bot-whatsapp/commit/f9e3bbc6655060408e4fdbe1d7e920c2ed4fca53))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* :zap: add Dockerfile, starter ([4e0d33c](https://github.com/leifermendez/bot-whatsapp/commit/4e0d33c6bb46ad259774f6d0c38c6c0b5f8ca4a9))
|
||||||
|
* :zap: fix inject port args ([20f752e](https://github.com/leifermendez/bot-whatsapp/commit/20f752e6c1b1f7d11948fc4f2f8950f7834df7d9))
|
||||||
|
* :zap: fix inject port args ([7a23eb0](https://github.com/leifermendez/bot-whatsapp/commit/7a23eb0cc6f93ec21c5ab34e46981ae7a93f42ff))
|
||||||
|
* **provider:** :zap: fix send image baileys ([2ddea54](https://github.com/leifermendez/bot-whatsapp/commit/2ddea5468d235035478d4e91e63c821da19da179))
|
||||||
|
* **provider:** :zap: fix send image baileys ([391e11c](https://github.com/leifermendez/bot-whatsapp/commit/391e11ce738cd64792b5237d69f3739b0263c198))
|
||||||
|
* **provider:** :zap: fix send image baileys ([5d10cb9](https://github.com/leifermendez/bot-whatsapp/commit/5d10cb9026da60043e9a2f86117ebb04d0631a3f))
|
||||||
|
* **provider:** fix error docker as root user ([5a033da](https://github.com/leifermendez/bot-whatsapp/commit/5a033da83aee1f614120bccf27c9f330500cc7b0))
|
||||||
|
|
||||||
|
### [0.1.4](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.5...v0.1.4) (2023-01-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* :zap: new portal web for qr scan ([cb2e869](https://github.com/leifermendez/bot-whatsapp/commit/cb2e8692a3f94c8b24993cd11dd564f094b0e4ef))
|
||||||
|
* :zap: new portal web for qr scan ([9e93795](https://github.com/leifermendez/bot-whatsapp/commit/9e93795e6fce38890045389da95184fef1fbe0da))
|
||||||
|
* :zap: new portal web for qr scan ([3c178ea](https://github.com/leifermendez/bot-whatsapp/commit/3c178ea113b140535a51f5dcd521dbb66251670e))
|
||||||
|
* :zap: new portal web for qr scan ([1f1f564](https://github.com/leifermendez/bot-whatsapp/commit/1f1f564f4e2e3aa13b84de500fe215e0c45c2770))
|
||||||
|
* :zap: new portal web for qr scan ([3de5f4b](https://github.com/leifermendez/bot-whatsapp/commit/3de5f4b77a10e30632ff7555f5af5d8e93cb2019))
|
||||||
|
* :zap: qr code filename ([d794f60](https://github.com/leifermendez/bot-whatsapp/commit/d794f604ac8a835e523709dbf18c9b1609bbd00e))
|
||||||
|
* :zap: qr portal ([246ecdc](https://github.com/leifermendez/bot-whatsapp/commit/246ecdc11a8c4e652867c842b612dc4ce73f9828))
|
||||||
|
* :zap: qr portal ([af8b401](https://github.com/leifermendez/bot-whatsapp/commit/af8b401d075e1c35065589ede61476461ce86b4d))
|
||||||
|
* agregamos dockerfile y webserver a starters ([f9e3bbc](https://github.com/leifermendez/bot-whatsapp/commit/f9e3bbc6655060408e4fdbe1d7e920c2ed4fca53))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* :zap: add Dockerfile, starter ([4e0d33c](https://github.com/leifermendez/bot-whatsapp/commit/4e0d33c6bb46ad259774f6d0c38c6c0b5f8ca4a9))
|
||||||
|
* :zap: fix inject port args ([20f752e](https://github.com/leifermendez/bot-whatsapp/commit/20f752e6c1b1f7d11948fc4f2f8950f7834df7d9))
|
||||||
|
* :zap: fix inject port args ([7a23eb0](https://github.com/leifermendez/bot-whatsapp/commit/7a23eb0cc6f93ec21c5ab34e46981ae7a93f42ff))
|
||||||
|
* **provider:** :zap: fix send image baileys ([2ddea54](https://github.com/leifermendez/bot-whatsapp/commit/2ddea5468d235035478d4e91e63c821da19da179))
|
||||||
|
* **provider:** :zap: fix send image baileys ([391e11c](https://github.com/leifermendez/bot-whatsapp/commit/391e11ce738cd64792b5237d69f3739b0263c198))
|
||||||
|
* **provider:** :zap: fix send image baileys ([5d10cb9](https://github.com/leifermendez/bot-whatsapp/commit/5d10cb9026da60043e9a2f86117ebb04d0631a3f))
|
||||||
|
* **provider:** fix error docker as root user ([5a033da](https://github.com/leifermendez/bot-whatsapp/commit/5a033da83aee1f614120bccf27c9f330500cc7b0))
|
||||||
|
|
||||||
|
### [0.1.3](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.2...v0.1.3) (2023-01-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **adapter:** :zap: send messages with dialogflow ([c20e151](https://github.com/leifermendez/bot-whatsapp/commit/c20e151e209d33de9e7425a64f003c85360f1832))
|
||||||
|
* **baileys:** added more methods ([1b23b83](https://github.com/leifermendez/bot-whatsapp/commit/1b23b837460ce4533ff33f10f1de5e3a344a5623))
|
||||||
|
* **bot:** :zap: http responses support ([e331c2d](https://github.com/leifermendez/bot-whatsapp/commit/e331c2dcc40eeb82a93f9d29f6a82333b8465927))
|
||||||
|
* **bot:** :zap: http responses support ([2d2bb08](https://github.com/leifermendez/bot-whatsapp/commit/2d2bb085cd95604a84ca3fe5c4ddc84b3824ac1c))
|
||||||
|
* **bot:** :zap: rev-03 everything work fine ([3012e02](https://github.com/leifermendez/bot-whatsapp/commit/3012e026b77ab4e99334b992d166a89189f76503))
|
||||||
|
* **cli:** :sparkles: added bailey ([06acec2](https://github.com/leifermendez/bot-whatsapp/commit/06acec2bf29d72c2b46f4ce81fed115bab97351f))
|
||||||
|
* **cli:** :sparkles: added bailey ([c868f73](https://github.com/leifermendez/bot-whatsapp/commit/c868f7346245bec94582b25a342febc657926c9d))
|
||||||
|
* **conflict:** :zap: remove unused variable ([eba9229](https://github.com/leifermendez/bot-whatsapp/commit/eba92299cfd84c971f09697d027043f19eec2b7c))
|
||||||
|
* **contexts:** :zap: add new dialogflowcx ([4d8cf62](https://github.com/leifermendez/bot-whatsapp/commit/4d8cf623ff86b3d08c8d52293d4e289dfda68e1c))
|
||||||
|
* **contexts:** :zap: add new dialogflowcx ([9885872](https://github.com/leifermendez/bot-whatsapp/commit/98858729919b2544dace07c49badce7888ddfd82))
|
||||||
|
* **contexts:** dialogflowcx support ([9179421](https://github.com/leifermendez/bot-whatsapp/commit/917942139f9736f1c0f8ce5f07b4e12e5768b0c7))
|
||||||
|
* correccion de flujos en app.js de ejemplo ([99f508f](https://github.com/leifermendez/bot-whatsapp/commit/99f508f93889d70240861158bc304c25a3b2daef))
|
||||||
|
* **docs:** master class updated ([69fd81a](https://github.com/leifermendez/bot-whatsapp/commit/69fd81a565e61b249ac50917585293d2d84e3dd4))
|
||||||
|
* **docs:** master class updated ([d522b03](https://github.com/leifermendez/bot-whatsapp/commit/d522b03e2e6e6e3f7c467c59e3d2d6f288fe37b2))
|
||||||
|
* **provider:** :bug: dialogflow ([4ec6f1e](https://github.com/leifermendez/bot-whatsapp/commit/4ec6f1e120879e545fa111615f2d79b792d947a5))
|
||||||
|
* **provider:** :sparkles: added dialogflow ([2f633c7](https://github.com/leifermendez/bot-whatsapp/commit/2f633c72da24f98d6c318d1e725571b62e04604c))
|
||||||
|
* **provider:** :sparkles: added dialogflow ([798f1ce](https://github.com/leifermendez/bot-whatsapp/commit/798f1cebdefe43624c1698a219dcb224bb842d38))
|
||||||
|
* **provider:** :sparkles: endpoint is added to validate the webhook … ([478929d](https://github.com/leifermendez/bot-whatsapp/commit/478929d1340d46d6bf997ae8edabbaae4511172d))
|
||||||
|
* **provider:** :sparkles: endpoint is added to validate the webhook token ([1ec1564](https://github.com/leifermendez/bot-whatsapp/commit/1ec15647dc462363d5b765f42debddbe6ef6266b))
|
||||||
|
* **provider:** :zap: add new methods ([0b4e353](https://github.com/leifermendez/bot-whatsapp/commit/0b4e35308dace0ccdf618cb1d04987ed5200d58c))
|
||||||
|
* **provider:** :zap: add sendfile and sendButtons ([5433610](https://github.com/leifermendez/bot-whatsapp/commit/5433610a84d7a050a387e4daf2ded1daebfc03a4))
|
||||||
|
* **provider:** :zap: add sendfile and sendButtons ([342cbcc](https://github.com/leifermendez/bot-whatsapp/commit/342cbccff1d09f9aabe5423ad6d686d590a2448f))
|
||||||
|
* **provider:** :zap: added new venom provider ([01fe9eb](https://github.com/leifermendez/bot-whatsapp/commit/01fe9ebc9a943f2aa086ee415153d1cccdb14ec0))
|
||||||
|
* **provider:** :zap: added tamplate venom ([337c2e9](https://github.com/leifermendez/bot-whatsapp/commit/337c2e94bccd0ae173958fe2db08b494bdc93c28))
|
||||||
|
* **provider:** :zap: baileysProvider ([23b2e8e](https://github.com/leifermendez/bot-whatsapp/commit/23b2e8e439ecec24450bd5cf1a3820316e643434))
|
||||||
|
* **provider:** :zap: solution error buttons ([1b83871](https://github.com/leifermendez/bot-whatsapp/commit/1b83871cca6996c6acae3d4c8b6b42aec05ea146))
|
||||||
|
* **provider:** :zap: solution error utils venom ([31c83f5](https://github.com/leifermendez/bot-whatsapp/commit/31c83f5d689a01490d3adb96006f54c2a5d3268b))
|
||||||
|
* **provider:** :zap: update ([b62d21a](https://github.com/leifermendez/bot-whatsapp/commit/b62d21a0bf94466e43c25c6e8c0f5db9ae91c572))
|
||||||
|
* **provider:** :zap: update ([0c94647](https://github.com/leifermendez/bot-whatsapp/commit/0c94647a27747c3ddf4f02926580370f0d81bdc2))
|
||||||
|
* **provider:** meta provider is added ([b041f7d](https://github.com/leifermendez/bot-whatsapp/commit/b041f7d0c7cc6f152d3f36785d1d398a4141d57d))
|
||||||
|
* **provider:** meta provider is added ([438607c](https://github.com/leifermendez/bot-whatsapp/commit/438607c222b91d6f8814201dabe5f7c3e7ba1abb))
|
||||||
|
* **provider:** new added baileys ([4e0fcbd](https://github.com/leifermendez/bot-whatsapp/commit/4e0fcbd8347f8a430adb43351b5415098a5d10df))
|
||||||
|
* **provider:** new provider - venon:zap: configuracion inicial provi… ([66f75f8](https://github.com/leifermendez/bot-whatsapp/commit/66f75f872200334bfc9eda744bed92c509dfee56))
|
||||||
|
* **provider:** new provider - venon:zap: configuracion inicial provider venom ([fee7c2e](https://github.com/leifermendez/bot-whatsapp/commit/fee7c2e967b7fe8835b5acc243c19f7713acfbe7))
|
||||||
|
* se agregaron los datros del adapter mongo en app.js y package.json ([8160d13](https://github.com/leifermendez/bot-whatsapp/commit/8160d13c866b8ae17b0ec8e68eee1bc0373595b0))
|
||||||
|
* se agrego informacion al ejemplo en app.js ([954e751](https://github.com/leifermendez/bot-whatsapp/commit/954e751f700c6a39ec70c0bc5168637c0dc7e07c))
|
||||||
|
* se agrego informacion al ejemplo en app.js ([b2f1339](https://github.com/leifermendez/bot-whatsapp/commit/b2f13396104db9ccef5b3bad1c4e19c6a4bad2d4))
|
||||||
|
* **starters:** meta memory base template added ([11c784f](https://github.com/leifermendez/bot-whatsapp/commit/11c784f882965d6bd3a2313cf91bed9fb3aa5f26))
|
||||||
|
* **starters:** meta memory base template added ([e8d6252](https://github.com/leifermendez/bot-whatsapp/commit/e8d625201ed86e162e0b4e82100ede1d08985555))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* :art: update ([7d6708c](https://github.com/leifermendez/bot-whatsapp/commit/7d6708c01bbdc5043a7e6ed56fe15a9618115b91))
|
||||||
|
* :sparkles: updated starters ([5da4b7a](https://github.com/leifermendez/bot-whatsapp/commit/5da4b7a4d1e5950be94361ac439938741b9d299c))
|
||||||
|
* actualizar app.js de ejemplo ([1746613](https://github.com/leifermendez/bot-whatsapp/commit/17466138ddcef60a23a0c87911f22045f26d3233))
|
||||||
|
* actualizar ejemplo app.js ([60fdbf3](https://github.com/leifermendez/bot-whatsapp/commit/60fdbf3d3cd62819e618853a9dc2fd0e23fe8752))
|
||||||
|
* **adapter:** :fire: clear log ([9ad4874](https://github.com/leifermendez/bot-whatsapp/commit/9ad4874fdafabfbf0e9e20e6b3281f702bb9fbe7))
|
||||||
|
* **adapter:** :fire: clear log ([4d34d3a](https://github.com/leifermendez/bot-whatsapp/commit/4d34d3ab1daab4e72fb5244216c78cf836d1a164))
|
||||||
|
* **adapter:** :fire: improvement baileys ([e6fefb4](https://github.com/leifermendez/bot-whatsapp/commit/e6fefb4049847f996f2a169b9acfc27c2428d3e6))
|
||||||
|
* **adapter:** :fire: improvement baileys ([2d5ac26](https://github.com/leifermendez/bot-whatsapp/commit/2d5ac2664bea09e60ac85ff2612609ae21050945))
|
||||||
|
* **adapter:** :rocket: venom update - cli - qr iamge ([041bf62](https://github.com/leifermendez/bot-whatsapp/commit/041bf6280e5f6956393716907e0669aa3ca78b4a))
|
||||||
|
* **adapter:** :rocket: venom update - cli - qr iamge ([e37fd0d](https://github.com/leifermendez/bot-whatsapp/commit/e37fd0da3635aa1041664d490d5f9803d2c441ca))
|
||||||
|
* **adapter:** :rocket: venom update - cli - qr iamge ([ca6afbb](https://github.com/leifermendez/bot-whatsapp/commit/ca6afbb87fceec12d4a383486ad693905e36881f))
|
||||||
|
* **adapter:** json db change is made ([386c1bb](https://github.com/leifermendez/bot-whatsapp/commit/386c1bbbac036aa58335fb5f62e3af2493766b6b))
|
||||||
|
* **adapter:** json db change is made ([3bdc7af](https://github.com/leifermendez/bot-whatsapp/commit/3bdc7afe8062527ff08620650d2c1177dfea83f5))
|
||||||
|
* agregamos variables para mysql ([dcf65b8](https://github.com/leifermendez/bot-whatsapp/commit/dcf65b87bc7e7e6381e6448e83118077986898e7))
|
||||||
|
* **bot:** :ambulance: fix callback functions ([d9aa97c](https://github.com/leifermendez/bot-whatsapp/commit/d9aa97c7819aca1446657bc0b75e9732f0f20c6b)), closes [#252](https://github.com/leifermendez/bot-whatsapp/issues/252)
|
||||||
|
* **bot:** :ambulance: fix callback functions ([964a074](https://github.com/leifermendez/bot-whatsapp/commit/964a074aa41324bd09d0c4e2e7aa663a0602b69c))
|
||||||
|
* **bot:** :fire: fix rev ([21407c0](https://github.com/leifermendez/bot-whatsapp/commit/21407c0e37f1ab12efecf887e699cedf05e3946a))
|
||||||
|
* **bot:** :fire: fix rev ([484c8c3](https://github.com/leifermendez/bot-whatsapp/commit/484c8c3bdefbc7824c32a86090bafae0593ecdac))
|
||||||
|
* **bot:** :zap: working callback Phase 1 ([952ce86](https://github.com/leifermendez/bot-whatsapp/commit/952ce86ffaa48a0d6fbc0a00a08c5d1efa14ee8e))
|
||||||
|
* **bot:** :zap: working nested new flow ([2cbc962](https://github.com/leifermendez/bot-whatsapp/commit/2cbc96245d795de749d894a3a0d99b6550f08d9e))
|
||||||
|
* **cli:** :art: starters ([a2be57f](https://github.com/leifermendez/bot-whatsapp/commit/a2be57f0aa42c6b5e13ad19c34abc7d9e81dc135))
|
||||||
|
* **cli:** :art: starters ([670ecf1](https://github.com/leifermendez/bot-whatsapp/commit/670ecf121babf53e76c2ea106c0710cbe59facde))
|
||||||
|
* **cli:** :fire: update instructions ([e585e2f](https://github.com/leifermendez/bot-whatsapp/commit/e585e2f5f644ed0188dc9cd2b3c697c9d6050669))
|
||||||
|
* **cli:** :fire: update instructions ([ed36ce0](https://github.com/leifermendez/bot-whatsapp/commit/ed36ce0a7796320c6a4a452f29c05a3f0f7368db))
|
||||||
|
* **cli:** :fire: update instructions ([bad1694](https://github.com/leifermendez/bot-whatsapp/commit/bad16943fc2089887d6bf0b6d90075d3bec6f9c7))
|
||||||
|
* **cli:** :fire: update instructions ([a21633f](https://github.com/leifermendez/bot-whatsapp/commit/a21633fb7cf348cc37f4e4714f51172b49b193b5))
|
||||||
|
* **cli:** :zap: updated ([a6f4aa8](https://github.com/leifermendez/bot-whatsapp/commit/a6f4aa8d1e809330c06c165aaf9a9f90b8922bb5))
|
||||||
|
* **conflict:** conflict resolution ([71d43b5](https://github.com/leifermendez/bot-whatsapp/commit/71d43b585a0ce173061c84e9879915e4602db026))
|
||||||
|
* **contexts:** :fire: added buttons ([eabef7a](https://github.com/leifermendez/bot-whatsapp/commit/eabef7a92d005cd0190196cfe75828c38885aadf))
|
||||||
|
* **contexts:** :fire: added buttons ([1b878d2](https://github.com/leifermendez/bot-whatsapp/commit/1b878d2ba0daeb3609af74a2ebae7948456e7fb0))
|
||||||
|
* **contexts:** :fire: added buttons ([78b0a9d](https://github.com/leifermendez/bot-whatsapp/commit/78b0a9dddc2a6e0fceb721ee7794efa2047f25fc))
|
||||||
|
* **contexts:** :fire: added buttons ([d8309f7](https://github.com/leifermendez/bot-whatsapp/commit/d8309f77e1d9137c0bec977ed9faef633cd90552))
|
||||||
|
* correccion en app.js para remover addChild en starters ([32db429](https://github.com/leifermendez/bot-whatsapp/commit/32db429f2946f344d949cb169a9595d657c06279))
|
||||||
|
* fix del db provider mysql ([b59d4fc](https://github.com/leifermendez/bot-whatsapp/commit/b59d4fcdd7462cde3f68ab5746d49960b547a592))
|
||||||
|
* provider equivocado en app.js de venom ([4e0a109](https://github.com/leifermendez/bot-whatsapp/commit/4e0a1091ee85cedfaa5a9c3d40e5cd50bc36cda3))
|
||||||
|
* **provider:** :bug: create static site html qr ([c7e56a4](https://github.com/leifermendez/bot-whatsapp/commit/c7e56a4b13c8829f91769eeca7f1f6b3473f68cf))
|
||||||
|
* **provider:** :bug: fix metea provider ([85f50be](https://github.com/leifermendez/bot-whatsapp/commit/85f50be9dcbf3817107898d8d2980baf05acd678))
|
||||||
|
* **provider:** :bug: fix metea provider ([a52aaa1](https://github.com/leifermendez/bot-whatsapp/commit/a52aaa11d883bbaf526cf87720d3c3fd9f89a986))
|
||||||
|
* **provider:** :bug: qr code accurate ([6c4845d](https://github.com/leifermendez/bot-whatsapp/commit/6c4845d733720d9916bb4008f9069ae4fd986a4b))
|
||||||
|
* **provider:** :bug: qr code accurate ([91bfdc4](https://github.com/leifermendez/bot-whatsapp/commit/91bfdc46301207cbc5274308da6f39c7b4652c63))
|
||||||
|
* **provider:** :fire: baileys fix ([928365d](https://github.com/leifermendez/bot-whatsapp/commit/928365dcafb3631acf6b1d0c239a906f8e1c4b0d))
|
||||||
|
* **provider:** :fire: send message togther with media ([78aa23f](https://github.com/leifermendez/bot-whatsapp/commit/78aa23fab094059145f82e6781f9366d5d582b4f))
|
||||||
|
* **provider:** :fire: send message togther with media ([b6bf43d](https://github.com/leifermendez/bot-whatsapp/commit/b6bf43d70fc28c6a229522b9b0de76cec43ac864))
|
||||||
|
* **provider:** :zap: baileys fix restart ([ae83774](https://github.com/leifermendez/bot-whatsapp/commit/ae83774365027e2e86127ab7713ae9ee2df31f33))
|
||||||
|
* **provider:** :zap: edit starter ([ff65832](https://github.com/leifermendez/bot-whatsapp/commit/ff65832012003423cc86d25cf0923452b1f8acb7))
|
||||||
|
* **provider:** :zap: edit starter ([68dd182](https://github.com/leifermendez/bot-whatsapp/commit/68dd1820f05d04780824b318072d053eaf7db654))
|
||||||
|
* **provider:** :zap: json space ([3cef741](https://github.com/leifermendez/bot-whatsapp/commit/3cef741c9ee30024eb42770a5f32931fcd372160))
|
||||||
|
* **provider:** :zap: json space ([9b087e0](https://github.com/leifermendez/bot-whatsapp/commit/9b087e071019a7b6c79195a24dc7ddec498c5716))
|
||||||
|
* **provider:** :zap: json space ([208fb4e](https://github.com/leifermendez/bot-whatsapp/commit/208fb4e9131dd5d4fd7230ba1aa11181337d9181))
|
||||||
|
* **provider:** :zap: json space ([54a59c7](https://github.com/leifermendez/bot-whatsapp/commit/54a59c7f0d4dbaab006ce7e3c74412d8d3613ecd))
|
||||||
|
* **provider:** qr-fix margin ([663641a](https://github.com/leifermendez/bot-whatsapp/commit/663641a1b8bf9234a88b0f3c38381ebc4bfa4bf9))
|
||||||
|
* se quito addChild de las constantes porque no se usa ([ba2291a](https://github.com/leifermendez/bot-whatsapp/commit/ba2291a3ddac0d4101021e11d03cb222c5a4bb3b))
|
||||||
|
* **starters:** :fire: updated staters ([4d4f15c](https://github.com/leifermendez/bot-whatsapp/commit/4d4f15ce73486d9335ad474d9e37c3b155670134))
|
||||||
|
* **starters:** :fire: updated staters ([a30eaac](https://github.com/leifermendez/bot-whatsapp/commit/a30eaac77534d17eb980f6ec126140e9d30aa06e))
|
||||||
|
* **starters:** :memo: update MIGRATION ([37fe323](https://github.com/leifermendez/bot-whatsapp/commit/37fe32322eb1bd41eecd151e52f17ec0588fb85e))
|
||||||
|
* **starters:** :memo: update MIGRATION ([9b30e7d](https://github.com/leifermendez/bot-whatsapp/commit/9b30e7dcfc30bc160b56427cc6cdc2dc982bde2a))
|
||||||
|
* **starters:** base templates are added for meta ([229e017](https://github.com/leifermendez/bot-whatsapp/commit/229e017ae20b84c9d12c7282f97b7034f5f33e6d))
|
||||||
|
* **starters:** base templates are added for meta ([20f6651](https://github.com/leifermendez/bot-whatsapp/commit/20f665175c9b47226df41ce43e05574bd6ab1930))
|
||||||
|
|
||||||
|
### [0.1.2](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.1...v0.1.2) (2022-12-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **cli:** :art: starters ([79e2318](https://github.com/leifermendez/bot-whatsapp/commit/79e231825613f33bfec2ae8e93139f885c199c7a))
|
||||||
|
* **cli:** :art: starters ([87ba43a](https://github.com/leifermendez/bot-whatsapp/commit/87ba43a5535be0893a7701a3b6a085ee5d29e7c5))
|
||||||
|
* fix dependencias ([61d0324](https://github.com/leifermendez/bot-whatsapp/commit/61d032426119341187a470035d49b8b252ca46cd))
|
||||||
|
|
||||||
|
### [0.1.1](https://github.com/leifermendez/bot-whatsapp/compare/v0.3.0...v0.1.1) (2022-12-12)
|
||||||
|
|
||||||
|
## 0.3.0 (2022-12-12)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* 🧨 NO
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* (🎸) add onClick prop to component ([4ae3898](https://github.com/leifermendez/bot-whatsapp/commit/4ae389846d38c133f6bb2129ae373eed39d9d08d))
|
||||||
|
* **adapter:** added adapter mysql ([717a7dc](https://github.com/leifermendez/bot-whatsapp/commit/717a7dc95fbc107ec6f55387aff606c47144baa4))
|
||||||
|
* **adapter:** implementation of json file adapter ([5e1a373](https://github.com/leifermendez/bot-whatsapp/commit/5e1a3737303c843095984f6357564ea18458362f))
|
||||||
|
* **adapter:** mysql adapter ([8d73c86](https://github.com/leifermendez/bot-whatsapp/commit/8d73c86946d07aa80e5b375b62b84a88b2892e03))
|
||||||
|
* **adapter:** sql is added to create the table ([4b7de0f](https://github.com/leifermendez/bot-whatsapp/commit/4b7de0f6901524fa2c09271c3a99c364e6b3c260))
|
||||||
|
* **bot:** :fire: improvement provider handler ([4154cc2](https://github.com/leifermendez/bot-whatsapp/commit/4154cc223091a46d3203d3a378cd42f61749a5fa))
|
||||||
|
* **bot:** :zap: add send image function ([ce8a96b](https://github.com/leifermendez/bot-whatsapp/commit/ce8a96b958ff814c65d8fb4dbd5eaed5cc83a1ed))
|
||||||
|
* **ci:** :art: add releases ([b115dc3](https://github.com/leifermendez/bot-whatsapp/commit/b115dc3654996f049837bfb6b5d039a2313df0ad))
|
||||||
|
* **ci:** :art: relases script ([2e906bc](https://github.com/leifermendez/bot-whatsapp/commit/2e906bce79f7d854d437334e1d0c2cd270b0bbc6))
|
||||||
|
* **ci:** update ci ([e5a9db7](https://github.com/leifermendez/bot-whatsapp/commit/e5a9db7e12340c4f5baa66e8b20585b63daa3bcf))
|
||||||
|
* **cli:** create-starter ([3977987](https://github.com/leifermendez/bot-whatsapp/commit/397798790ef5857ca758b0df8384c6a4bfacc181))
|
||||||
|
* **provider:** :fire: add twilii (weoking) ([4350dff](https://github.com/leifermendez/bot-whatsapp/commit/4350dff22a7de69ba6d35ecbdd67e59b810bd46f))
|
||||||
|
* **provider:** added twilio provider ([8dd3be9](https://github.com/leifermendez/bot-whatsapp/commit/8dd3be909b36717f6b54e141a5f48d2722d4855c))
|
||||||
|
* **release:** added ([1988948](https://github.com/leifermendez/bot-whatsapp/commit/1988948c30d922beb7b83faab96d1d59cf7f5f90))
|
||||||
|
* **release:** added ([f4ad704](https://github.com/leifermendez/bot-whatsapp/commit/f4ad7040abf619635480c30babd6f1159c7af85a))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **adapter:** conflict resolution ([4b307ef](https://github.com/leifermendez/bot-whatsapp/commit/4b307efe79c738a5c4e04ff1c07ca247d827593c))
|
||||||
|
* **adapter:** corrections are made to the adapter ([afa6771](https://github.com/leifermendez/bot-whatsapp/commit/afa677190392d48715930ebe2b1e15c7619d730f))
|
||||||
|
* **bot:** :zap: added delay promises ([73caf09](https://github.com/leifermendez/bot-whatsapp/commit/73caf090ba9013132e5dcb7761a10939dc9ac300))
|
||||||
|
* **bot:** :zap: fix sensitive case ([24ac9fb](https://github.com/leifermendez/bot-whatsapp/commit/24ac9fbf48f80eeb521a36bc938af3a70dd82303))
|
||||||
|
* **bot:** :zap: flow improvement + add utils ([a7b19d9](https://github.com/leifermendez/bot-whatsapp/commit/a7b19d9bff5ea66ff888555c3df37ae0e20b612a))
|
||||||
|
* **bot:** update ([49698bf](https://github.com/leifermendez/bot-whatsapp/commit/49698bfda9d2a53f7b1a7e1724a796698601fbaa))
|
||||||
|
* **ci:** :zap: balance version ([ec46cfd](https://github.com/leifermendez/bot-whatsapp/commit/ec46cfdd657c08c8e90261613f00cfc080f1e1d6))
|
||||||
|
* **ci:** :zap: github action ([b827a0a](https://github.com/leifermendez/bot-whatsapp/commit/b827a0ab225b89bb8117c82628db0679c09b4102))
|
||||||
|
* **ci:** :zap: github action ([4142ca4](https://github.com/leifermendez/bot-whatsapp/commit/4142ca4fd552e7005f3b1397a76b90a2e574d19d))
|
||||||
|
* **ci:** :zap: github action ([091544a](https://github.com/leifermendez/bot-whatsapp/commit/091544ac3fac0c16925e856e1aec64bcad0ecf6d))
|
||||||
|
* **ci:** :zap: github action ([2ce342a](https://github.com/leifermendez/bot-whatsapp/commit/2ce342a0cb15019d5084ca06dc30e342b030ea10))
|
||||||
|
* **ci:** :zap: github action ([7817793](https://github.com/leifermendez/bot-whatsapp/commit/781779328f93ef8b0e6e0f85c6cd05ae782112fb))
|
||||||
|
* **ci:** :zap: github action ([dfced8c](https://github.com/leifermendez/bot-whatsapp/commit/dfced8c594e9175c81e837af359631ba055b7e1a))
|
||||||
|
* **ci:** :zap: github action ([aaa4ce8](https://github.com/leifermendez/bot-whatsapp/commit/aaa4ce837229fd51e274de3d91e1d9d615ac69fd))
|
||||||
|
* **ci:** :zap: github action ([9ddf144](https://github.com/leifermendez/bot-whatsapp/commit/9ddf144244cd6877e7d26f576387814459f2befb))
|
||||||
|
* **ci:** :zap: github action ([b465de5](https://github.com/leifermendez/bot-whatsapp/commit/b465de55a0e511213d1a7760a74efa102172c85e))
|
||||||
|
* **ci:** :zap: github action ([cf1dc6f](https://github.com/leifermendez/bot-whatsapp/commit/cf1dc6fac810545e5a2b63f31f71322f37329e38))
|
||||||
|
* **ci:** :zap: github action ([8d897f8](https://github.com/leifermendez/bot-whatsapp/commit/8d897f824e27a55ca011163092a813a7e8f426af))
|
||||||
|
* **ci:** ci ([f55cfae](https://github.com/leifermendez/bot-whatsapp/commit/f55cfae6e4ccc1df949212999406680020d27f9c))
|
||||||
|
* **ci:** ci ([671c5b3](https://github.com/leifermendez/bot-whatsapp/commit/671c5b37f33360e8cb754625b8dd6e83bce9014d))
|
||||||
|
* **cli:** :bug: path ([32212fb](https://github.com/leifermendez/bot-whatsapp/commit/32212fb52d206bf6f8d753a86d9ce40aa0db2a5d))
|
||||||
|
* **cli:** :fire: create script - templates ([2319db3](https://github.com/leifermendez/bot-whatsapp/commit/2319db3009501fe57ae21e60ad286eb68c46f4fd))
|
||||||
|
* **cli:** :fire: create script - templates ([9cb98b5](https://github.com/leifermendez/bot-whatsapp/commit/9cb98b5e73fca3c3f5e70a8497badc31e494b943))
|
||||||
|
* **cli:** :fire: create script - templates ([2999e0e](https://github.com/leifermendez/bot-whatsapp/commit/2999e0e753f31a8b9e6d7c117e78cdb5656e203a))
|
||||||
|
* **cli:** :fire: create script - templates ([af716b7](https://github.com/leifermendez/bot-whatsapp/commit/af716b75372899877a81b528b58278376166d0ad))
|
||||||
|
* **cli:** :fire: create script - templates ([c6999c8](https://github.com/leifermendez/bot-whatsapp/commit/c6999c84931083a87b5717db58003be68244707e))
|
||||||
|
* **cli:** :fire: create script - templates ([d4b49a9](https://github.com/leifermendez/bot-whatsapp/commit/d4b49a9bd7085070f0c5964d2903f10b71bde0b3))
|
||||||
|
* **cli:** :fire: create script - templates ([eebc3c9](https://github.com/leifermendez/bot-whatsapp/commit/eebc3c980638d88f11a0d93b8344f3ff345c7ee5))
|
||||||
|
* **cli:** :zap: clean eslinter ([bfb69d9](https://github.com/leifermendez/bot-whatsapp/commit/bfb69d9a9574a757ae02748b6c5f5afa3eac68e6))
|
||||||
|
* **cli:** :zap: clean eslinter ([15f6972](https://github.com/leifermendez/bot-whatsapp/commit/15f697225775a0f0e0a440cd980f7fb8f51a1056))
|
||||||
|
* **cli:** :zap: create-starter ([d3b8310](https://github.com/leifermendez/bot-whatsapp/commit/d3b8310180d2ad813733b1d18f2c32d7d947740a))
|
||||||
|
* **cli:** :zap: update cli copy ([7797c2b](https://github.com/leifermendez/bot-whatsapp/commit/7797c2b46133697e2a591adab2b67e66b34a1cfe))
|
||||||
|
* **fix:** fix ([6483545](https://github.com/leifermendez/bot-whatsapp/commit/648354500b123f20044f5ac2e8a26b15f16d1b8d))
|
||||||
|
* **fix:** fix ([28c0480](https://github.com/leifermendez/bot-whatsapp/commit/28c0480b8bfa6b24394095f57c36ef89c9aeb566))
|
||||||
|
* **linter:** update linter and commitlint ([70a94ab](https://github.com/leifermendez/bot-whatsapp/commit/70a94ab2c6f8e4122780c77bc3a621944883e621))
|
||||||
|
* pre-copy fix ([08e2552](https://github.com/leifermendez/bot-whatsapp/commit/08e2552907c48cfeaac843457a18bf2032e6f8aa))
|
||||||
|
* pre-copy fix ([6617107](https://github.com/leifermendez/bot-whatsapp/commit/6617107ab824215c449e26eae6c2bb327ecfc092))
|
||||||
|
* **starter:** pre-copy fix ([929e74c](https://github.com/leifermendez/bot-whatsapp/commit/929e74c84b667ec13cb5490b3b951cb8df15ebd1))
|
||||||
|
|
||||||
|
|
||||||
|
* (💍) Is justa test! ([37d04e9](https://github.com/leifermendez/bot-whatsapp/commit/37d04e9e89d3f01fdc367654ba60fb11ab2614c4))
|
||||||
|
|
||||||
|
### [0.2.1](https://github.com/leifermendez/bot-whatsapp/compare/v0.2.0...v0.2.1) (2022-12-12)
|
||||||
|
|
||||||
|
## 0.2.0 (2022-12-12)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* 🧨 NO
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* (🎸) add onClick prop to component ([4ae3898](https://github.com/leifermendez/bot-whatsapp/commit/4ae389846d38c133f6bb2129ae373eed39d9d08d))
|
||||||
|
* **adapter:** added adapter mysql ([717a7dc](https://github.com/leifermendez/bot-whatsapp/commit/717a7dc95fbc107ec6f55387aff606c47144baa4))
|
||||||
|
* **adapter:** implementation of json file adapter ([5e1a373](https://github.com/leifermendez/bot-whatsapp/commit/5e1a3737303c843095984f6357564ea18458362f))
|
||||||
|
* **adapter:** mysql adapter ([8d73c86](https://github.com/leifermendez/bot-whatsapp/commit/8d73c86946d07aa80e5b375b62b84a88b2892e03))
|
||||||
|
* **adapter:** sql is added to create the table ([4b7de0f](https://github.com/leifermendez/bot-whatsapp/commit/4b7de0f6901524fa2c09271c3a99c364e6b3c260))
|
||||||
|
* **bot:** :fire: improvement provider handler ([4154cc2](https://github.com/leifermendez/bot-whatsapp/commit/4154cc223091a46d3203d3a378cd42f61749a5fa))
|
||||||
|
* **bot:** :zap: add send image function ([ce8a96b](https://github.com/leifermendez/bot-whatsapp/commit/ce8a96b958ff814c65d8fb4dbd5eaed5cc83a1ed))
|
||||||
|
* **ci:** :art: add releases ([b115dc3](https://github.com/leifermendez/bot-whatsapp/commit/b115dc3654996f049837bfb6b5d039a2313df0ad))
|
||||||
|
* **ci:** :art: relases script ([2e906bc](https://github.com/leifermendez/bot-whatsapp/commit/2e906bce79f7d854d437334e1d0c2cd270b0bbc6))
|
||||||
|
* **ci:** update ci ([e5a9db7](https://github.com/leifermendez/bot-whatsapp/commit/e5a9db7e12340c4f5baa66e8b20585b63daa3bcf))
|
||||||
|
* **cli:** create-starter ([3977987](https://github.com/leifermendez/bot-whatsapp/commit/397798790ef5857ca758b0df8384c6a4bfacc181))
|
||||||
|
* **provider:** :fire: add twilii (weoking) ([4350dff](https://github.com/leifermendez/bot-whatsapp/commit/4350dff22a7de69ba6d35ecbdd67e59b810bd46f))
|
||||||
|
* **provider:** added twilio provider ([8dd3be9](https://github.com/leifermendez/bot-whatsapp/commit/8dd3be909b36717f6b54e141a5f48d2722d4855c))
|
||||||
|
* **release:** added ([1988948](https://github.com/leifermendez/bot-whatsapp/commit/1988948c30d922beb7b83faab96d1d59cf7f5f90))
|
||||||
|
* **release:** added ([f4ad704](https://github.com/leifermendez/bot-whatsapp/commit/f4ad7040abf619635480c30babd6f1159c7af85a))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **adapter:** conflict resolution ([4b307ef](https://github.com/leifermendez/bot-whatsapp/commit/4b307efe79c738a5c4e04ff1c07ca247d827593c))
|
||||||
|
* **adapter:** corrections are made to the adapter ([afa6771](https://github.com/leifermendez/bot-whatsapp/commit/afa677190392d48715930ebe2b1e15c7619d730f))
|
||||||
|
* **bot:** :zap: added delay promises ([73caf09](https://github.com/leifermendez/bot-whatsapp/commit/73caf090ba9013132e5dcb7761a10939dc9ac300))
|
||||||
|
* **bot:** :zap: fix sensitive case ([24ac9fb](https://github.com/leifermendez/bot-whatsapp/commit/24ac9fbf48f80eeb521a36bc938af3a70dd82303))
|
||||||
|
* **bot:** :zap: flow improvement + add utils ([a7b19d9](https://github.com/leifermendez/bot-whatsapp/commit/a7b19d9bff5ea66ff888555c3df37ae0e20b612a))
|
||||||
|
* **bot:** update ([49698bf](https://github.com/leifermendez/bot-whatsapp/commit/49698bfda9d2a53f7b1a7e1724a796698601fbaa))
|
||||||
|
* **ci:** :zap: balance version ([ec46cfd](https://github.com/leifermendez/bot-whatsapp/commit/ec46cfdd657c08c8e90261613f00cfc080f1e1d6))
|
||||||
|
* **ci:** :zap: github action ([b827a0a](https://github.com/leifermendez/bot-whatsapp/commit/b827a0ab225b89bb8117c82628db0679c09b4102))
|
||||||
|
* **ci:** :zap: github action ([4142ca4](https://github.com/leifermendez/bot-whatsapp/commit/4142ca4fd552e7005f3b1397a76b90a2e574d19d))
|
||||||
|
* **ci:** :zap: github action ([091544a](https://github.com/leifermendez/bot-whatsapp/commit/091544ac3fac0c16925e856e1aec64bcad0ecf6d))
|
||||||
|
* **ci:** :zap: github action ([2ce342a](https://github.com/leifermendez/bot-whatsapp/commit/2ce342a0cb15019d5084ca06dc30e342b030ea10))
|
||||||
|
* **ci:** :zap: github action ([7817793](https://github.com/leifermendez/bot-whatsapp/commit/781779328f93ef8b0e6e0f85c6cd05ae782112fb))
|
||||||
|
* **ci:** :zap: github action ([dfced8c](https://github.com/leifermendez/bot-whatsapp/commit/dfced8c594e9175c81e837af359631ba055b7e1a))
|
||||||
|
* **ci:** :zap: github action ([aaa4ce8](https://github.com/leifermendez/bot-whatsapp/commit/aaa4ce837229fd51e274de3d91e1d9d615ac69fd))
|
||||||
|
* **ci:** :zap: github action ([9ddf144](https://github.com/leifermendez/bot-whatsapp/commit/9ddf144244cd6877e7d26f576387814459f2befb))
|
||||||
|
* **ci:** :zap: github action ([b465de5](https://github.com/leifermendez/bot-whatsapp/commit/b465de55a0e511213d1a7760a74efa102172c85e))
|
||||||
|
* **ci:** :zap: github action ([cf1dc6f](https://github.com/leifermendez/bot-whatsapp/commit/cf1dc6fac810545e5a2b63f31f71322f37329e38))
|
||||||
|
* **ci:** :zap: github action ([8d897f8](https://github.com/leifermendez/bot-whatsapp/commit/8d897f824e27a55ca011163092a813a7e8f426af))
|
||||||
|
* **ci:** ci ([f55cfae](https://github.com/leifermendez/bot-whatsapp/commit/f55cfae6e4ccc1df949212999406680020d27f9c))
|
||||||
|
* **ci:** ci ([671c5b3](https://github.com/leifermendez/bot-whatsapp/commit/671c5b37f33360e8cb754625b8dd6e83bce9014d))
|
||||||
|
* **cli:** :bug: path ([32212fb](https://github.com/leifermendez/bot-whatsapp/commit/32212fb52d206bf6f8d753a86d9ce40aa0db2a5d))
|
||||||
|
* **cli:** :fire: create script - templates ([2319db3](https://github.com/leifermendez/bot-whatsapp/commit/2319db3009501fe57ae21e60ad286eb68c46f4fd))
|
||||||
|
* **cli:** :fire: create script - templates ([9cb98b5](https://github.com/leifermendez/bot-whatsapp/commit/9cb98b5e73fca3c3f5e70a8497badc31e494b943))
|
||||||
|
* **cli:** :fire: create script - templates ([2999e0e](https://github.com/leifermendez/bot-whatsapp/commit/2999e0e753f31a8b9e6d7c117e78cdb5656e203a))
|
||||||
|
* **cli:** :fire: create script - templates ([af716b7](https://github.com/leifermendez/bot-whatsapp/commit/af716b75372899877a81b528b58278376166d0ad))
|
||||||
|
* **cli:** :fire: create script - templates ([c6999c8](https://github.com/leifermendez/bot-whatsapp/commit/c6999c84931083a87b5717db58003be68244707e))
|
||||||
|
* **cli:** :fire: create script - templates ([d4b49a9](https://github.com/leifermendez/bot-whatsapp/commit/d4b49a9bd7085070f0c5964d2903f10b71bde0b3))
|
||||||
|
* **cli:** :fire: create script - templates ([eebc3c9](https://github.com/leifermendez/bot-whatsapp/commit/eebc3c980638d88f11a0d93b8344f3ff345c7ee5))
|
||||||
|
* **cli:** :zap: clean eslinter ([bfb69d9](https://github.com/leifermendez/bot-whatsapp/commit/bfb69d9a9574a757ae02748b6c5f5afa3eac68e6))
|
||||||
|
* **cli:** :zap: clean eslinter ([15f6972](https://github.com/leifermendez/bot-whatsapp/commit/15f697225775a0f0e0a440cd980f7fb8f51a1056))
|
||||||
|
* **cli:** :zap: create-starter ([d3b8310](https://github.com/leifermendez/bot-whatsapp/commit/d3b8310180d2ad813733b1d18f2c32d7d947740a))
|
||||||
|
* **cli:** :zap: update cli copy ([7797c2b](https://github.com/leifermendez/bot-whatsapp/commit/7797c2b46133697e2a591adab2b67e66b34a1cfe))
|
||||||
|
* **fix:** fix ([6483545](https://github.com/leifermendez/bot-whatsapp/commit/648354500b123f20044f5ac2e8a26b15f16d1b8d))
|
||||||
|
* **fix:** fix ([28c0480](https://github.com/leifermendez/bot-whatsapp/commit/28c0480b8bfa6b24394095f57c36ef89c9aeb566))
|
||||||
|
* **linter:** update linter and commitlint ([70a94ab](https://github.com/leifermendez/bot-whatsapp/commit/70a94ab2c6f8e4122780c77bc3a621944883e621))
|
||||||
|
* pre-copy fix ([08e2552](https://github.com/leifermendez/bot-whatsapp/commit/08e2552907c48cfeaac843457a18bf2032e6f8aa))
|
||||||
|
* pre-copy fix ([6617107](https://github.com/leifermendez/bot-whatsapp/commit/6617107ab824215c449e26eae6c2bb327ecfc092))
|
||||||
|
* **starter:** pre-copy fix ([929e74c](https://github.com/leifermendez/bot-whatsapp/commit/929e74c84b667ec13cb5490b3b951cb8df15ebd1))
|
||||||
|
|
||||||
|
|
||||||
|
* (💍) Is justa test! ([37d04e9](https://github.com/leifermendez/bot-whatsapp/commit/37d04e9e89d3f01fdc367654ba60fb11ab2614c4))
|
||||||
|
|
||||||
|
### [0.0.3](https://github.com/leifermendez/bot-whatsapp/compare/v0.2.0...v0.0.3) (2022-12-12)
|
||||||
|
|
||||||
|
## 0.2.0 (2022-12-12)
|
||||||
|
|
||||||
|
|
||||||
|
### ⚠ BREAKING CHANGES
|
||||||
|
|
||||||
|
* 🧨 NO
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* (🎸) add onClick prop to component ([4ae3898](https://github.com/leifermendez/bot-whatsapp/commit/4ae389846d38c133f6bb2129ae373eed39d9d08d))
|
||||||
|
* **adapter:** added adapter mysql ([717a7dc](https://github.com/leifermendez/bot-whatsapp/commit/717a7dc95fbc107ec6f55387aff606c47144baa4))
|
||||||
|
* **adapter:** implementation of json file adapter ([5e1a373](https://github.com/leifermendez/bot-whatsapp/commit/5e1a3737303c843095984f6357564ea18458362f))
|
||||||
|
* **adapter:** mysql adapter ([8d73c86](https://github.com/leifermendez/bot-whatsapp/commit/8d73c86946d07aa80e5b375b62b84a88b2892e03))
|
||||||
|
* **adapter:** sql is added to create the table ([4b7de0f](https://github.com/leifermendez/bot-whatsapp/commit/4b7de0f6901524fa2c09271c3a99c364e6b3c260))
|
||||||
|
* **bot:** :fire: improvement provider handler ([4154cc2](https://github.com/leifermendez/bot-whatsapp/commit/4154cc223091a46d3203d3a378cd42f61749a5fa))
|
||||||
|
* **bot:** :zap: add send image function ([ce8a96b](https://github.com/leifermendez/bot-whatsapp/commit/ce8a96b958ff814c65d8fb4dbd5eaed5cc83a1ed))
|
||||||
|
* **ci:** :art: add releases ([b115dc3](https://github.com/leifermendez/bot-whatsapp/commit/b115dc3654996f049837bfb6b5d039a2313df0ad))
|
||||||
|
* **ci:** :art: relases script ([2e906bc](https://github.com/leifermendez/bot-whatsapp/commit/2e906bce79f7d854d437334e1d0c2cd270b0bbc6))
|
||||||
|
* **ci:** update ci ([e5a9db7](https://github.com/leifermendez/bot-whatsapp/commit/e5a9db7e12340c4f5baa66e8b20585b63daa3bcf))
|
||||||
|
* **cli:** create-starter ([3977987](https://github.com/leifermendez/bot-whatsapp/commit/397798790ef5857ca758b0df8384c6a4bfacc181))
|
||||||
|
* **provider:** :fire: add twilii (weoking) ([4350dff](https://github.com/leifermendez/bot-whatsapp/commit/4350dff22a7de69ba6d35ecbdd67e59b810bd46f))
|
||||||
|
* **provider:** added twilio provider ([8dd3be9](https://github.com/leifermendez/bot-whatsapp/commit/8dd3be909b36717f6b54e141a5f48d2722d4855c))
|
||||||
|
* **release:** added ([1988948](https://github.com/leifermendez/bot-whatsapp/commit/1988948c30d922beb7b83faab96d1d59cf7f5f90))
|
||||||
|
* **release:** added ([f4ad704](https://github.com/leifermendez/bot-whatsapp/commit/f4ad7040abf619635480c30babd6f1159c7af85a))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **adapter:** conflict resolution ([4b307ef](https://github.com/leifermendez/bot-whatsapp/commit/4b307efe79c738a5c4e04ff1c07ca247d827593c))
|
||||||
|
* **adapter:** corrections are made to the adapter ([afa6771](https://github.com/leifermendez/bot-whatsapp/commit/afa677190392d48715930ebe2b1e15c7619d730f))
|
||||||
|
* **bot:** :zap: added delay promises ([73caf09](https://github.com/leifermendez/bot-whatsapp/commit/73caf090ba9013132e5dcb7761a10939dc9ac300))
|
||||||
|
* **bot:** :zap: fix sensitive case ([24ac9fb](https://github.com/leifermendez/bot-whatsapp/commit/24ac9fbf48f80eeb521a36bc938af3a70dd82303))
|
||||||
|
* **bot:** :zap: flow improvement + add utils ([a7b19d9](https://github.com/leifermendez/bot-whatsapp/commit/a7b19d9bff5ea66ff888555c3df37ae0e20b612a))
|
||||||
|
* **bot:** update ([49698bf](https://github.com/leifermendez/bot-whatsapp/commit/49698bfda9d2a53f7b1a7e1724a796698601fbaa))
|
||||||
|
* **ci:** :zap: balance version ([ec46cfd](https://github.com/leifermendez/bot-whatsapp/commit/ec46cfdd657c08c8e90261613f00cfc080f1e1d6))
|
||||||
|
* **ci:** :zap: github action ([b827a0a](https://github.com/leifermendez/bot-whatsapp/commit/b827a0ab225b89bb8117c82628db0679c09b4102))
|
||||||
|
* **ci:** :zap: github action ([4142ca4](https://github.com/leifermendez/bot-whatsapp/commit/4142ca4fd552e7005f3b1397a76b90a2e574d19d))
|
||||||
|
* **ci:** :zap: github action ([091544a](https://github.com/leifermendez/bot-whatsapp/commit/091544ac3fac0c16925e856e1aec64bcad0ecf6d))
|
||||||
|
* **ci:** :zap: github action ([2ce342a](https://github.com/leifermendez/bot-whatsapp/commit/2ce342a0cb15019d5084ca06dc30e342b030ea10))
|
||||||
|
* **ci:** :zap: github action ([7817793](https://github.com/leifermendez/bot-whatsapp/commit/781779328f93ef8b0e6e0f85c6cd05ae782112fb))
|
||||||
|
* **ci:** :zap: github action ([dfced8c](https://github.com/leifermendez/bot-whatsapp/commit/dfced8c594e9175c81e837af359631ba055b7e1a))
|
||||||
|
* **ci:** :zap: github action ([aaa4ce8](https://github.com/leifermendez/bot-whatsapp/commit/aaa4ce837229fd51e274de3d91e1d9d615ac69fd))
|
||||||
|
* **ci:** :zap: github action ([9ddf144](https://github.com/leifermendez/bot-whatsapp/commit/9ddf144244cd6877e7d26f576387814459f2befb))
|
||||||
|
* **ci:** :zap: github action ([b465de5](https://github.com/leifermendez/bot-whatsapp/commit/b465de55a0e511213d1a7760a74efa102172c85e))
|
||||||
|
* **ci:** :zap: github action ([cf1dc6f](https://github.com/leifermendez/bot-whatsapp/commit/cf1dc6fac810545e5a2b63f31f71322f37329e38))
|
||||||
|
* **ci:** :zap: github action ([8d897f8](https://github.com/leifermendez/bot-whatsapp/commit/8d897f824e27a55ca011163092a813a7e8f426af))
|
||||||
|
* **ci:** ci ([f55cfae](https://github.com/leifermendez/bot-whatsapp/commit/f55cfae6e4ccc1df949212999406680020d27f9c))
|
||||||
|
* **ci:** ci ([671c5b3](https://github.com/leifermendez/bot-whatsapp/commit/671c5b37f33360e8cb754625b8dd6e83bce9014d))
|
||||||
|
* **cli:** :bug: path ([32212fb](https://github.com/leifermendez/bot-whatsapp/commit/32212fb52d206bf6f8d753a86d9ce40aa0db2a5d))
|
||||||
|
* **cli:** :fire: create script - templates ([2319db3](https://github.com/leifermendez/bot-whatsapp/commit/2319db3009501fe57ae21e60ad286eb68c46f4fd))
|
||||||
|
* **cli:** :fire: create script - templates ([9cb98b5](https://github.com/leifermendez/bot-whatsapp/commit/9cb98b5e73fca3c3f5e70a8497badc31e494b943))
|
||||||
|
* **cli:** :fire: create script - templates ([2999e0e](https://github.com/leifermendez/bot-whatsapp/commit/2999e0e753f31a8b9e6d7c117e78cdb5656e203a))
|
||||||
|
* **cli:** :fire: create script - templates ([af716b7](https://github.com/leifermendez/bot-whatsapp/commit/af716b75372899877a81b528b58278376166d0ad))
|
||||||
|
* **cli:** :fire: create script - templates ([c6999c8](https://github.com/leifermendez/bot-whatsapp/commit/c6999c84931083a87b5717db58003be68244707e))
|
||||||
|
* **cli:** :fire: create script - templates ([d4b49a9](https://github.com/leifermendez/bot-whatsapp/commit/d4b49a9bd7085070f0c5964d2903f10b71bde0b3))
|
||||||
|
* **cli:** :fire: create script - templates ([eebc3c9](https://github.com/leifermendez/bot-whatsapp/commit/eebc3c980638d88f11a0d93b8344f3ff345c7ee5))
|
||||||
|
* **cli:** :zap: clean eslinter ([bfb69d9](https://github.com/leifermendez/bot-whatsapp/commit/bfb69d9a9574a757ae02748b6c5f5afa3eac68e6))
|
||||||
|
* **cli:** :zap: clean eslinter ([15f6972](https://github.com/leifermendez/bot-whatsapp/commit/15f697225775a0f0e0a440cd980f7fb8f51a1056))
|
||||||
|
* **cli:** :zap: create-starter ([d3b8310](https://github.com/leifermendez/bot-whatsapp/commit/d3b8310180d2ad813733b1d18f2c32d7d947740a))
|
||||||
|
* **cli:** :zap: update cli copy ([7797c2b](https://github.com/leifermendez/bot-whatsapp/commit/7797c2b46133697e2a591adab2b67e66b34a1cfe))
|
||||||
|
* **fix:** fix ([6483545](https://github.com/leifermendez/bot-whatsapp/commit/648354500b123f20044f5ac2e8a26b15f16d1b8d))
|
||||||
|
* **fix:** fix ([28c0480](https://github.com/leifermendez/bot-whatsapp/commit/28c0480b8bfa6b24394095f57c36ef89c9aeb566))
|
||||||
|
* **linter:** update linter and commitlint ([70a94ab](https://github.com/leifermendez/bot-whatsapp/commit/70a94ab2c6f8e4122780c77bc3a621944883e621))
|
||||||
|
* pre-copy fix ([08e2552](https://github.com/leifermendez/bot-whatsapp/commit/08e2552907c48cfeaac843457a18bf2032e6f8aa))
|
||||||
|
* pre-copy fix ([6617107](https://github.com/leifermendez/bot-whatsapp/commit/6617107ab824215c449e26eae6c2bb327ecfc092))
|
||||||
|
* **starter:** pre-copy fix ([929e74c](https://github.com/leifermendez/bot-whatsapp/commit/929e74c84b667ec13cb5490b3b951cb8df15ebd1))
|
||||||
|
|
||||||
|
|
||||||
|
* (💍) Is justa test! ([37d04e9](https://github.com/leifermendez/bot-whatsapp/commit/37d04e9e89d3f01fdc367654ba60fb11ab2614c4))
|
||||||
|
|
||||||
## 0.2.0-alpha.0 (2022-12-01)
|
## 0.2.0-alpha.0 (2022-12-01)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
leifer.contacto@gmail.com.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
https://www.contributor-covenant.org/faq. Translations are available at
|
||||||
|
https://www.contributor-covenant.org/translations.
|
||||||
@@ -1,19 +1,37 @@
|
|||||||
# CONTRIBUTING
|
# CONTRIBUTING
|
||||||
|
|
||||||
|
### 📄 Bienvenido/a
|
||||||
|
Si deseas colaborar con el proyecto existen varias maneras, la primera de ellas es aportando conocimiento y mejorando el repositorio (actualizando documentación, mejorando código, revisando __[issues](https://github.com/codigoencasa/bot-whatsapp/issues)__, etc).
|
||||||
|
|
||||||
|
También es bien recibido los aportes económicos que se utilizaran para diferentes fines __[ver más](https://opencollective.com/bot-whatsapp)__
|
||||||
|
|
||||||
|
El lenguaje principal que se utilizó para desarrollar este proyecto fue __JavaScript__ con el fin de qué personas que están iniciando en el mundo de la programación puedan entender fácilmente.
|
||||||
|
|
||||||
|
|
||||||
|
### 🤔 Preguntas frecuentes
|
||||||
|
- ¿Como puedo hacer aportaciones de código en el proyecto?: [Ver Video](https://youtu.be/Lxt8Acob6aU)
|
||||||
|
- ¿Como ejecutar el entorno de pruebas?: [Ver Video](https://youtu.be/Mf9V-dloBfk)
|
||||||
|
- ¿Como crear un nuevo proveedor?: [Ver Video](https://youtu.be/cahK9zH3SI8)
|
||||||
|
- ¿Que son los GithubActions?: [Ver Video](https://youtu.be/nYBEBFKLiqw)
|
||||||
|
- ¿Canales de comunicación?: [Discord](https://link.codigoencasa.com/DISCORD)
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
__Requerimientos:__
|
__Requerimientos:__
|
||||||
- Node v16 o superior __[descargar node](https://nodejs.org/es/download/)__
|
- Node v16 o superior __[descargar node](https://nodejs.org/es/download/)__
|
||||||
- __[Yarn](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable)__ como gestor de paquetes. En el link conseguiras las intrucciones para instalar yarn.
|
- __[Yarn](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable)__ como gestor de paquetes. En el link conseguirás las intrucciones para instalar yarn.
|
||||||
- __[VSCode](https://code.visualstudio.com/download)__ (recomendado): Editor de codigo con plugins
|
- __[VSCode](https://code.visualstudio.com/download)__ (recomendado): Editor de código con plugins.
|
||||||
- __[Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits&ssr=false#overview)__ (plugin-vscode) este plugin te ayudara a crear commit semantico.
|
- __[Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits&ssr=false#overview)__ (plugin-vscode) este plugin te ayudará a crear commit semántico.
|
||||||
- Se usara la rama __dev__ *(https://github.com/leifermendez/bot-whatsapp/tree/dev)* como rama principal hasta que se haga oficialmente el lanzamiento de la V2
|
- Se usará la rama __dev__ *(https://github.com/leifermendez/bot-whatsapp/tree/dev)* como rama principal hasta que se haga oficialmente el lanzamiento de la V2.
|
||||||
|
|
||||||
### 🚀 Iniciando
|
### 🚀 Iniciando
|
||||||
|
|
||||||
__Clonar repo rama dev__
|
__Clonar repo rama dev__
|
||||||
```
|
```
|
||||||
git clone --branch dev https://github.com/leifermendez/bot-whatsapp
|
git clone --branch dev https://github.com/codigoencasa/bot-whatsapp
|
||||||
```
|
```
|
||||||
__Instalar dependencias__
|
__Instalar dependencias__
|
||||||
```
|
```
|
||||||
@@ -22,35 +40,61 @@ yarn install
|
|||||||
```
|
```
|
||||||
|
|
||||||
__Compilar (build)__
|
__Compilar (build)__
|
||||||
Para compilar la aplicación es necesario ejecutar, eso te genera dentro de packages del monorepo un directorio `lib`
|
Para compilar la aplicación es necesario ejecutar este comando, el cual genera un directorio `lib` dentro de los paquetes del monorepo.
|
||||||
|
|
||||||
```
|
```
|
||||||
yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
|
|
||||||
__Example-app__
|
__Example-app__
|
||||||
Se ejecuta el CLI (Command Line Interface) para ayudarte a crear un app-bot de ejemplo
|
Se ejecuta el CLI (Command Line Interface) para ayudarte a crear un app-bot de ejemplo.
|
||||||
```
|
```
|
||||||
yarn run cli
|
yarn run cli
|
||||||
```
|
```
|
||||||
|
|
||||||
Abrir carpeta __example-app-base__ y ejecutar
|
Selecionas (mediante las flechas arriba y abajo) el proveedor que quieras usar y cuando estes sobre el presiona la barra de espacio, igualmente selecciona la base de datos que quieras usar.
|
||||||
|
|
||||||
|
Se creó un subdirecorio con el nombre del proveedor y base de datos que seleccionaste, ejemplo: `base-bailey-mysql`
|
||||||
|
|
||||||
|
Dentro de ese directorio necesitas editar el archivo package.json y borrar las siguientes lineas:
|
||||||
```
|
```
|
||||||
cd example-app-base
|
"@bot-whatsapp/bot": "latest",
|
||||||
npm i
|
"@bot-whatsapp/cli": "latest",
|
||||||
|
"@bot-whatsapp/database": "latest",
|
||||||
|
"@bot-whatsapp/provider": "latest",
|
||||||
|
```
|
||||||
|
|
||||||
|
Cambiate al directorio creado ejemplo: `base-bailey-mysql`
|
||||||
|
```
|
||||||
|
cd base-baileys-mysql
|
||||||
|
```
|
||||||
|
Ejecuta los comandos:
|
||||||
|
```
|
||||||
|
npm install
|
||||||
npm run pre-copy
|
npm run pre-copy
|
||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
|
En el caso de MySql y Mongo es necesario especificar en app.js los datos de la conexión, ejemplo de MySql:
|
||||||
|
```
|
||||||
|
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||||
|
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||||
|
|
||||||
__Commit y Push__
|
/**
|
||||||
El proyecto tiene implementado __[husky](https://typicode.github.io/husky/#/)__ es una herramienta que dispara unas acciones al momento de hacer commit y hacer push
|
* Declaramos las conexiones de MySQL
|
||||||
|
*/
|
||||||
|
const MYSQL_DB_HOST = 'localhost'
|
||||||
|
const MYSQL_DB_USER = 'usr'
|
||||||
|
const MYSQL_DB_PASSWORD = 'pass'
|
||||||
|
const MYSQL_DB_NAME = 'bot'
|
||||||
|
```
|
||||||
|
<!-- __Seguir instrucciones__
|
||||||
|
En la consola encontraras los pasos a seguir -->
|
||||||
|
|
||||||
__commit:__ Los commit son semanticos esto quiere decir que deben cumplir un standar al momento de escribirlos ejemplo ` feat(adapter): new adapter myqsl ` puede ver más info sobre esto __[aquí](https://github.com/conventional-changelog/commitlint/#what-is-commitlint)__
|

|
||||||
|
|
||||||
__push:__ Cada push ejecutar `yarn run test` el cual ejecuta los test internos que tienen que cumplir con __95% de cobertura__.
|
|
||||||
|
|
||||||
|
|
||||||
> Documento en constaten actualización....
|
> __NOTA:__ [Eres libre de aportar informacion a este documento o arreglar ortografia 🤣](
|
||||||
|
https://github.com/codigoencasa/bot-whatsapp/edit/dev/CONTRIBUTING.md)
|
||||||
|
|
||||||
------
|
------
|
||||||
- [Discord](https://link.codigoencasa.com/DISCORD)
|
- [Discord](https://link.codigoencasa.com/DISCORD)
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
CTX: Es el objeto que representa un mensaje, con opciones, id, ref
|
CTX: Es el objeto que representa un mensaje, con opciones, id, ref
|
||||||
messageInComming: Objeto entrante del provider {body, from,...}
|
messageInComming: Objeto entrante del provider {body, from,to,...}
|
||||||
21
LICENSE.md
Normal file
21
LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 Leifer Mendez
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
214
MIGRATION.md
Normal file
214
MIGRATION.md
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
# Migración
|
||||||
|
|
||||||
|
#### Versión (legacy)
|
||||||
|
|
||||||
|
En la ***versión (legacy)*** se implementaban los flujos de esta manera, en dos archivos independientes.
|
||||||
|
|
||||||
|
> __`initial.json`__ para establecer las palabras claves y el flujo a responder, por otro lado tambien se necesitaba implementar
|
||||||
|
> __`response.json`__ donde se escriben los mensajes a responder.
|
||||||
|
|
||||||
|
```json
|
||||||
|
//initial.json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"keywords": [
|
||||||
|
"hola",
|
||||||
|
"ola",
|
||||||
|
"alo"
|
||||||
|
],
|
||||||
|
"key": "hola"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"keywords": ["productos", "info"],
|
||||||
|
"key": "productos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"keywords": ["adios", "bye"],
|
||||||
|
"key": "adios"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"keywords": ["imagen", "foto"],
|
||||||
|
"key": "catalogo"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
```json
|
||||||
|
//response.json
|
||||||
|
{
|
||||||
|
"hola":{
|
||||||
|
"replyMessage":[
|
||||||
|
"Gracias a ti! \n"
|
||||||
|
],
|
||||||
|
"media":null,
|
||||||
|
"trigger":null
|
||||||
|
},
|
||||||
|
"adios":{
|
||||||
|
"replyMessage":[
|
||||||
|
"Que te vaya bien!!"
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"productos":{
|
||||||
|
"replyMessage":[
|
||||||
|
"Más productos aquí"
|
||||||
|
],
|
||||||
|
"trigger":null,
|
||||||
|
"actions":{
|
||||||
|
"title":"¿Que te interesa ver?",
|
||||||
|
"message":"Abajo unos botons",
|
||||||
|
"footer":"",
|
||||||
|
"buttons":[
|
||||||
|
{"body":"Telefonos"},
|
||||||
|
{"body":"Computadoras"},
|
||||||
|
{"body":"Otros"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"catalogo":{
|
||||||
|
"replyMessage":[
|
||||||
|
"Te envio una imagen"
|
||||||
|
],
|
||||||
|
"media":"https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif",
|
||||||
|
"trigger":null,
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Versión 2 (0.2.X)
|
||||||
|
|
||||||
|
En esta versión es mucho más sencillo, abajo encontraras un ejemplo del mismo flujo anteriormente mostrado.
|
||||||
|
|
||||||
|
```js
|
||||||
|
//app.js
|
||||||
|
const {
|
||||||
|
createBot,
|
||||||
|
createProvider,
|
||||||
|
createFlow,
|
||||||
|
addKeyword,
|
||||||
|
addChild,
|
||||||
|
} = require('@bot-whatsapp/bot')
|
||||||
|
|
||||||
|
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||||
|
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||||
|
/**
|
||||||
|
* Declarando flujos principales.
|
||||||
|
*/
|
||||||
|
const flowHola = addKeyword(['hola', 'ola', 'alo'])
|
||||||
|
.addAnswer('Bienvenido a tu tienda online!')
|
||||||
|
|
||||||
|
const flowAdios = addKeyword(['adios', 'bye'])
|
||||||
|
.addAnswer('Que te vaya bien!!')
|
||||||
|
.addAnswer('Hasta luego!')
|
||||||
|
|
||||||
|
const flowProductos = addKeyword(['productos', 'info'])
|
||||||
|
.addAnswer('Te envio una imagen', {
|
||||||
|
buttons:[
|
||||||
|
{body:"Telefonos"},
|
||||||
|
{body:"Computadoras"},
|
||||||
|
{body:"Otros"}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
const flowCatalogo = addKeyword(['imagen', 'foto'])
|
||||||
|
.addAnswer('Te envio una imagen', {media:'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif'})
|
||||||
|
|
||||||
|
|
||||||
|
const main = async () => {
|
||||||
|
const adapterDB = new MockAdapter()
|
||||||
|
const adapterFlow = createFlow([flowHola, flowAdios, flowProductos, flowCatalogo])
|
||||||
|
const adapterProvider = createProvider(BaileysProvider)
|
||||||
|
createBot({
|
||||||
|
flow: adapterFlow,
|
||||||
|
provider: adapterProvider,
|
||||||
|
database: adapterDB,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Flujos hijos
|
||||||
|
|
||||||
|
A continuación se muestra un ejemplo de flujos hijos, estos nos sirven para crear flujos que solo se disparan cuando el flujo anterior es el especificado, ejemplo:
|
||||||
|
|
||||||
|
> Menu Principal (Escoge zapatos o bolsos)
|
||||||
|
> - SubMenu 1 (Elegiste bolsos, ahora escoge piel o tela)
|
||||||
|
> - Submenu 1.1 (piel)
|
||||||
|
> - Submenu 2 (Elegiste zapatos, ahora escoge piel o tela)
|
||||||
|
> - Submenu 2.1 (piel)
|
||||||
|
|
||||||
|
El __submenu 1__ solo se va a disparar cuando el flujo anterior sea el __principal__, e igualmente el __submenu 1.1__, solo cuando el flujo anterior sea el __submenu 1__, ejemplo:
|
||||||
|
|
||||||
|
```js
|
||||||
|
/**
|
||||||
|
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||||
|
*
|
||||||
|
* Menu Principal
|
||||||
|
* - SubMenu 1
|
||||||
|
* - Submenu 1.1
|
||||||
|
* - Submenu 2
|
||||||
|
* - Submenu 2.1
|
||||||
|
*
|
||||||
|
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||||
|
*/
|
||||||
|
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||||
|
.addAnswer('🤯 *MUCHOS* bolsos ...')
|
||||||
|
.addAnswer('y mas bolsos... bla bla')
|
||||||
|
|
||||||
|
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||||
|
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||||
|
.addAnswer('y algunas otras cosas.')
|
||||||
|
|
||||||
|
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||||
|
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||||
|
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||||
|
.addAnswer(
|
||||||
|
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||||
|
{ capture: true },
|
||||||
|
(ctx) => {
|
||||||
|
console.log('Aqui puedes ver más info del usuario...')
|
||||||
|
console.log('Puedes enviar un mail, hook, etc..')
|
||||||
|
console.log(ctx)
|
||||||
|
},
|
||||||
|
[...addChild(flowZapatos2)]
|
||||||
|
)
|
||||||
|
|
||||||
|
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||||
|
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||||
|
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||||
|
.addAnswer(
|
||||||
|
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||||
|
{ capture: true },
|
||||||
|
(ctx) => {
|
||||||
|
console.log('Aqui puedes ver más info del usuario...')
|
||||||
|
console.log('Puedes enviar un mail, hook, etc..')
|
||||||
|
console.log(ctx)
|
||||||
|
},
|
||||||
|
[...addChild(flowBolsos2)]
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declarando flujo principal
|
||||||
|
*/
|
||||||
|
|
||||||
|
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||||
|
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||||
|
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||||
|
.addAnswer(
|
||||||
|
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||||
|
{ capture: true },
|
||||||
|
(ctx) => {
|
||||||
|
console.log('Aqui puedes ver más info del usuario...')
|
||||||
|
console.log('Puedes enviar un mail, hook, etc..')
|
||||||
|
console.log(ctx)
|
||||||
|
},
|
||||||
|
[...addChild(flowBolsos), ...addChild(flowZapatos)]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
> Forma parte de este proyecto.
|
||||||
|
|
||||||
|
- [Discord](https://link.codigoencasa.com/DISCORD)
|
||||||
|
- [Twitter](https://twitter.com/leifermendez)
|
||||||
|
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
|
||||||
|
- [Telegram](https://t.me/leifermendez)
|
||||||
147
README.md
147
README.md
@@ -1,16 +1,46 @@
|
|||||||
[](https://github.com/leifermendez/bot-whatsapp/actions/workflows/ci.yml)
|
# Chatbot Library
|
||||||
|

|
||||||
[](http://commitizen.github.io/cz-cli/)
|
[](http://commitizen.github.io/cz-cli/)
|
||||||
--------
|
[](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml)
|
||||||
🦊 Documentación: [https://bot-whatsapp.pages.dev/](https://bot-whatsapp.pages.dev/)
|
|
||||||
Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|
||||||
|
|
||||||
- [ ] Evitar dependencias
|
|
||||||
|
|
||||||
|
|
||||||
**Comunidad**
|
<p align="center">
|
||||||
|
<img width="300" src="https://i.imgur.com/Oauef6t.png">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)**
|
||||||
|
|
||||||
|
## Comenzar
|
||||||
|
|
||||||
|
```
|
||||||
|
npm create bot-whatsapp@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
Entiende más a fondo sus funcionalidades explicadas en nuestra documentación.
|
||||||
|
|
||||||
|
- Instalacion
|
||||||
|
- Base de datos
|
||||||
|
- Proveedores
|
||||||
|
|
||||||
|
## Recursos
|
||||||
|
- [📄 Documentación](https://bot-whatsapp.netlify.app/)
|
||||||
|
- [🚀 Roadmap](https://github.com/orgs/codigoencasa/projects/1)
|
||||||
|
- [💻 Discord](https://link.codigoencasa.com/DISCORD)
|
||||||
|
- [👌 Twitter](https://twitter.com/leifermendez)
|
||||||
|
- [🎥 Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
|
||||||
|
|
||||||
|
## Comunidad
|
||||||
<!-- readme: collaborators,contributors -start -->
|
<!-- readme: collaborators,contributors -start -->
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/cheveguerra">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/5891114?v=4" width="50;" alt="cheveguerra"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Jose Alberto Guerra Ugalde</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/leifermendez">
|
<a href="https://github.com/leifermendez">
|
||||||
<img src="https://avatars.githubusercontent.com/u/15802366?v=4" width="50;" alt="leifermendez"/>
|
<img src="https://avatars.githubusercontent.com/u/15802366?v=4" width="50;" alt="leifermendez"/>
|
||||||
@@ -18,20 +48,6 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|||||||
<sub><b>Leifer Mendez</b></sub>
|
<sub><b>Leifer Mendez</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td align="center">
|
|
||||||
<a href="https://github.com/aurik3">
|
|
||||||
<img src="https://avatars.githubusercontent.com/u/37228512?v=4" width="50;" alt="aurik3"/>
|
|
||||||
<br />
|
|
||||||
<sub><b>Null</b></sub>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
|
||||||
<a href="https://github.com/vicente1992">
|
|
||||||
<img src="https://avatars.githubusercontent.com/u/57806030?v=4" width="50;" alt="vicente1992"/>
|
|
||||||
<br />
|
|
||||||
<sub><b>Manuel Vicente Ortiz</b></sub>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/leifermendezfroged">
|
<a href="https://github.com/leifermendezfroged">
|
||||||
<img src="https://avatars.githubusercontent.com/u/97020486?v=4" width="50;" alt="leifermendezfroged"/>
|
<img src="https://avatars.githubusercontent.com/u/97020486?v=4" width="50;" alt="leifermendezfroged"/>
|
||||||
@@ -39,6 +55,49 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|||||||
<sub><b>Leifer Mendez</b></sub>
|
<sub><b>Leifer Mendez</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/vicente1992">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/57806030?v=4" width="50;" alt="vicente1992"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Manuel Vicente Ortiz</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/danielcasta0398">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/98791147?v=4" width="50;" alt="danielcasta0398"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Juan Daniel Castaño</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/marianarolfo">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/68322254?v=4" width="50;" alt="marianarolfo"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Null</b></sub>
|
||||||
|
</a>
|
||||||
|
</td></tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/HKong31">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/113340082?v=4" width="50;" alt="HKong31"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>HLKong</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/jzvi12">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/10729787?v=4" width="50;" alt="jzvi12"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Zvi</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/JosephVTX">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/91026290?v=4" width="50;" alt="JosephVTX"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Joseph Vega Callupe</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/Gonzalito87">
|
<a href="https://github.com/Gonzalito87">
|
||||||
<img src="https://avatars.githubusercontent.com/u/100331586?v=4" width="50;" alt="Gonzalito87"/>
|
<img src="https://avatars.githubusercontent.com/u/100331586?v=4" width="50;" alt="Gonzalito87"/>
|
||||||
@@ -47,13 +106,41 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/jzvi12">
|
<a href="https://github.com/devrlbusiness">
|
||||||
<img src="https://avatars.githubusercontent.com/u/10729787?v=4" width="50;" alt="jzvi12"/>
|
<img src="https://avatars.githubusercontent.com/u/66280283?v=4" width="50;" alt="devrlbusiness"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Developer RL Business</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Gregoriotecnico">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/118696506?v=4" width="50;" alt="Gregoriotecnico"/>
|
||||||
<br />
|
<br />
|
||||||
<sub><b>Null</b></sub>
|
<sub><b>Null</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/aurik3">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/37228512?v=4" width="50;" alt="aurik3"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Null</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/jlferrete">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/36698913?v=4" width="50;" alt="jlferrete"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Jose Luis Ferrete Olarte</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/6rak0">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/12260031?v=4" width="50;" alt="6rak0"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Null</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/tonyvazgar">
|
<a href="https://github.com/tonyvazgar">
|
||||||
<img src="https://avatars.githubusercontent.com/u/21047090?v=4" width="50;" alt="tonyvazgar"/>
|
<img src="https://avatars.githubusercontent.com/u/21047090?v=4" width="50;" alt="tonyvazgar"/>
|
||||||
@@ -62,10 +149,10 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/ulisesvina">
|
<a href="https://github.com/lisandroprada">
|
||||||
<img src="https://avatars.githubusercontent.com/u/20508563?v=4" width="50;" alt="ulisesvina"/>
|
<img src="https://avatars.githubusercontent.com/u/7232326?v=4" width="50;" alt="lisandroprada"/>
|
||||||
<br />
|
<br />
|
||||||
<sub><b>Ulises Viña</b></sub>
|
<sub><b>Null</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
@@ -74,7 +161,8 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|||||||
<br />
|
<br />
|
||||||
<sub><b>Rodrigo Mendoza Cabrera</b></sub>
|
<sub><b>Rodrigo Mendoza Cabrera</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td></tr>
|
||||||
|
<tr>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/yond1994">
|
<a href="https://github.com/yond1994">
|
||||||
<img src="https://avatars.githubusercontent.com/u/47557263?v=4" width="50;" alt="yond1994"/>
|
<img src="https://avatars.githubusercontent.com/u/47557263?v=4" width="50;" alt="yond1994"/>
|
||||||
@@ -85,9 +173,4 @@ Video como hacer PR: https://youtu.be/Lxt8Acob6aU
|
|||||||
</table>
|
</table>
|
||||||
<!-- readme: collaborators,contributors -end -->
|
<!-- readme: collaborators,contributors -end -->
|
||||||
|
|
||||||
> Forma parte de este proyecto.
|
|
||||||
|
|
||||||
- [Discord](https://link.codigoencasa.com/DISCORD)
|
|
||||||
- [Twitter](https://twitter.com/leifermendez)
|
|
||||||
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
|
|
||||||
- [Telegram](https://t.me/leifermendez)
|
|
||||||
21
SECURITY.md
Normal file
21
SECURITY.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
Use this section to tell people about which versions of your project are
|
||||||
|
currently being supported with security updates.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 5.1.x | :white_check_mark: |
|
||||||
|
| 5.0.x | :x: |
|
||||||
|
| 4.0.x | :white_check_mark: |
|
||||||
|
| < 4.0 | :x: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
Use this section to tell people how to report a vulnerability.
|
||||||
|
|
||||||
|
Tell them where to go, how often they can expect to get an update on a
|
||||||
|
reported vulnerability, what to expect if the vulnerability is accepted or
|
||||||
|
declined, etc.
|
||||||
41
__test__/01-case.test.js
Normal file
41
__test__/01-case.test.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
const { test } = require('uvu')
|
||||||
|
const assert = require('uvu/assert')
|
||||||
|
const MOCK_DB = require('../packages/database/src/mock')
|
||||||
|
const PROVIDER_DB = require('../packages/provider/src/mock')
|
||||||
|
const {
|
||||||
|
addKeyword,
|
||||||
|
createBot,
|
||||||
|
createFlow,
|
||||||
|
createProvider,
|
||||||
|
} = require('../packages/bot')
|
||||||
|
|
||||||
|
test(`[Caso - 01] Flow Basico`, async () => {
|
||||||
|
const [VALUE_A, VALUE_B] = ['hola', 'buenas']
|
||||||
|
|
||||||
|
const flow = addKeyword(VALUE_A).addAnswer(VALUE_B)
|
||||||
|
const provider = createProvider(PROVIDER_DB)
|
||||||
|
const database = new MOCK_DB()
|
||||||
|
|
||||||
|
createBot({
|
||||||
|
database,
|
||||||
|
flow: createFlow([flow]),
|
||||||
|
provider,
|
||||||
|
})
|
||||||
|
|
||||||
|
provider.delaySendMessage(100, 'message', {
|
||||||
|
from: '000',
|
||||||
|
body: VALUE_A,
|
||||||
|
})
|
||||||
|
|
||||||
|
await delay(100)
|
||||||
|
|
||||||
|
const prevMsg = database.getPrevByNumber('000')
|
||||||
|
|
||||||
|
assert.is(prevMsg.answer, VALUE_B)
|
||||||
|
})
|
||||||
|
|
||||||
|
test.run()
|
||||||
|
|
||||||
|
function delay(ms) {
|
||||||
|
return new Promise((res) => setTimeout(res, ms))
|
||||||
|
}
|
||||||
99
__test__/02-case.test.js
Normal file
99
__test__/02-case.test.js
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
const { test } = require('uvu')
|
||||||
|
const assert = require('uvu/assert')
|
||||||
|
const MOCK_DB = require('../packages/database/src/mock')
|
||||||
|
const PROVIDER_DB = require('../packages/provider/src/mock')
|
||||||
|
const {
|
||||||
|
addKeyword,
|
||||||
|
createBot,
|
||||||
|
createFlow,
|
||||||
|
createProvider,
|
||||||
|
} = require('../packages/bot/index')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Falsear peticion async
|
||||||
|
* @param {*} fakeData
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const fakeHTTP = async (fakeData = []) => {
|
||||||
|
console.log('⚡ Server request!')
|
||||||
|
await delay(50)
|
||||||
|
console.log('⚡ Server return!')
|
||||||
|
const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` }))
|
||||||
|
console.log(data)
|
||||||
|
return Promise.resolve(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
test(`[Caso - 02] Flow (flowDynamic)`, async () => {
|
||||||
|
const MOCK_VALUES = [
|
||||||
|
'Bienvenido te envio muchas marcas (5510)',
|
||||||
|
'Seleccione marca del auto a cotizar, con el *número* correspondiente',
|
||||||
|
'Seleccione la sub marca del auto a cotizar, con el *número* correspondiente:',
|
||||||
|
'Los precios rondan:',
|
||||||
|
]
|
||||||
|
const provider = createProvider(PROVIDER_DB)
|
||||||
|
const database = new MOCK_DB()
|
||||||
|
|
||||||
|
const flujoPrincipal = addKeyword(['hola'])
|
||||||
|
.addAnswer(MOCK_VALUES[0], null, async (ctx, { flowDynamic }) => {
|
||||||
|
console.log('execute...')
|
||||||
|
const data = await fakeHTTP(['Ford', 'GM', 'BMW'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
.addAnswer(MOCK_VALUES[1], null, async (ctx, { flowDynamic }) => {
|
||||||
|
const data = await fakeHTTP(['Ranger', 'Explorer'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
.addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => {
|
||||||
|
const data = await fakeHTTP(['Usado', 'Nuevos'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
.addAnswer(MOCK_VALUES[3], null, async (ctx, { flowDynamic }) => {
|
||||||
|
const data = await fakeHTTP(['1000', '2000', '3000'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
|
||||||
|
createBot({
|
||||||
|
database,
|
||||||
|
flow: createFlow([flujoPrincipal]),
|
||||||
|
provider,
|
||||||
|
})
|
||||||
|
|
||||||
|
provider.delaySendMessage(0, 'message', {
|
||||||
|
from: '000',
|
||||||
|
body: 'hola',
|
||||||
|
})
|
||||||
|
|
||||||
|
await delay(1200)
|
||||||
|
const getHistory = database.listHistory.map((i) => i.answer)
|
||||||
|
assert.is(MOCK_VALUES[0], getHistory[0])
|
||||||
|
|
||||||
|
//FlowDynamic
|
||||||
|
assert.is('1 Ford', getHistory[1])
|
||||||
|
assert.is('2 GM', getHistory[2])
|
||||||
|
assert.is('3 BMW', getHistory[3])
|
||||||
|
|
||||||
|
assert.is(MOCK_VALUES[1], getHistory[4])
|
||||||
|
|
||||||
|
//FlowDynamic
|
||||||
|
assert.is('1 Ranger', getHistory[5])
|
||||||
|
assert.is('2 Explorer', getHistory[6])
|
||||||
|
|
||||||
|
assert.is(MOCK_VALUES[2], getHistory[7])
|
||||||
|
|
||||||
|
//FlowDynamic
|
||||||
|
assert.is('1 Usado', getHistory[8])
|
||||||
|
assert.is('2 Nuevos', getHistory[9])
|
||||||
|
|
||||||
|
assert.is(MOCK_VALUES[3], getHistory[10])
|
||||||
|
|
||||||
|
//FlowDynamic
|
||||||
|
assert.is('1 1000', getHistory[11])
|
||||||
|
assert.is('2 2000', getHistory[12])
|
||||||
|
assert.is('3 3000', getHistory[13])
|
||||||
|
})
|
||||||
|
|
||||||
|
test.run()
|
||||||
|
|
||||||
|
function delay(ms) {
|
||||||
|
return new Promise((res) => setTimeout(res, ms))
|
||||||
|
}
|
||||||
44
__test__/03-case.test.js
Normal file
44
__test__/03-case.test.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
const { test } = require('uvu')
|
||||||
|
const assert = require('uvu/assert')
|
||||||
|
const MOCK_DB = require('../packages/database/src/mock')
|
||||||
|
const PROVIDER_DB = require('../packages/provider/src/mock')
|
||||||
|
const {
|
||||||
|
addKeyword,
|
||||||
|
createBot,
|
||||||
|
createFlow,
|
||||||
|
createProvider,
|
||||||
|
} = require('../packages/bot/index')
|
||||||
|
|
||||||
|
test(`[Caso - 03] Flow puro`, async () => {
|
||||||
|
const MOCK_VALUES = ['Bienvenido a mi tienda', 'Como estas?']
|
||||||
|
|
||||||
|
const provider = createProvider(PROVIDER_DB)
|
||||||
|
const database = new MOCK_DB()
|
||||||
|
|
||||||
|
const flujoPrincipal = addKeyword(['hola'])
|
||||||
|
.addAnswer(MOCK_VALUES[0])
|
||||||
|
.addAnswer(MOCK_VALUES[1])
|
||||||
|
|
||||||
|
createBot({
|
||||||
|
database,
|
||||||
|
flow: createFlow([flujoPrincipal]),
|
||||||
|
provider,
|
||||||
|
})
|
||||||
|
|
||||||
|
provider.delaySendMessage(0, 'message', {
|
||||||
|
from: '000',
|
||||||
|
body: 'hola',
|
||||||
|
})
|
||||||
|
|
||||||
|
await delay(10)
|
||||||
|
const getHistory = database.listHistory.map((i) => i.answer)
|
||||||
|
|
||||||
|
assert.is(MOCK_VALUES[0], getHistory[0])
|
||||||
|
assert.is(MOCK_VALUES[1], getHistory[1])
|
||||||
|
})
|
||||||
|
|
||||||
|
test.run()
|
||||||
|
|
||||||
|
function delay(ms) {
|
||||||
|
return new Promise((res) => setTimeout(res, ms))
|
||||||
|
}
|
||||||
82
__test__/04-case.test.js
Normal file
82
__test__/04-case.test.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
const { test } = require('uvu')
|
||||||
|
const assert = require('uvu/assert')
|
||||||
|
const MOCK_DB = require('../packages/database/src/mock')
|
||||||
|
const PROVIDER_DB = require('../packages/provider/src/mock')
|
||||||
|
const {
|
||||||
|
addKeyword,
|
||||||
|
createBot,
|
||||||
|
createFlow,
|
||||||
|
createProvider,
|
||||||
|
} = require('../packages/bot/index')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Falsear peticion async
|
||||||
|
* @param {*} fakeData
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const fakeHTTP = async (fakeData = []) => {
|
||||||
|
console.log('⚡ Server request!')
|
||||||
|
await delay(50)
|
||||||
|
console.log('⚡ Server return!')
|
||||||
|
const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` }))
|
||||||
|
console.log(data)
|
||||||
|
return Promise.resolve(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
test(`[Caso - 04] Romper flujo (endFlow)`, async () => {
|
||||||
|
const MOCK_VALUES = [
|
||||||
|
'Bienvenido te envio muchas marcas (5510)',
|
||||||
|
'Seleccione marca del auto a cotizar, con el *número* correspondiente',
|
||||||
|
'Seleccione la sub marca del auto a cotizar, con el *número* correspondiente:',
|
||||||
|
'Los precios rondan:',
|
||||||
|
]
|
||||||
|
const provider = createProvider(PROVIDER_DB)
|
||||||
|
const database = new MOCK_DB()
|
||||||
|
|
||||||
|
const flujoPrincipal = addKeyword(['hola'])
|
||||||
|
.addAnswer(MOCK_VALUES[0], null, async (ctx, { flowDynamic }) => {
|
||||||
|
console.log('execute...')
|
||||||
|
const data = await fakeHTTP(['Ford', 'GM', 'BMW'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
.addAnswer(MOCK_VALUES[1], null, async (ctx, { endFlow }) => {
|
||||||
|
return endFlow()
|
||||||
|
})
|
||||||
|
.addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => {
|
||||||
|
const data = await fakeHTTP(['Usado', 'Nuevos'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
.addAnswer(MOCK_VALUES[3], null, async (ctx, { flowDynamic }) => {
|
||||||
|
const data = await fakeHTTP(['1000', '2000', '3000'])
|
||||||
|
return flowDynamic(data)
|
||||||
|
})
|
||||||
|
|
||||||
|
createBot({
|
||||||
|
database,
|
||||||
|
flow: createFlow([flujoPrincipal]),
|
||||||
|
provider,
|
||||||
|
})
|
||||||
|
|
||||||
|
provider.delaySendMessage(0, 'message', {
|
||||||
|
from: '000',
|
||||||
|
body: 'hola',
|
||||||
|
})
|
||||||
|
|
||||||
|
await delay(1200)
|
||||||
|
const getHistory = database.listHistory.map((i) => i.answer)
|
||||||
|
assert.is(MOCK_VALUES[0], getHistory[0])
|
||||||
|
|
||||||
|
//FlowDynamic
|
||||||
|
assert.is('1 Ford', getHistory[1])
|
||||||
|
assert.is('2 GM', getHistory[2])
|
||||||
|
assert.is('3 BMW', getHistory[3])
|
||||||
|
|
||||||
|
assert.is(MOCK_VALUES[1], getHistory[4])
|
||||||
|
assert.is(undefined, getHistory[5])
|
||||||
|
})
|
||||||
|
|
||||||
|
test.run()
|
||||||
|
|
||||||
|
function delay(ms) {
|
||||||
|
return new Promise((res) => setTimeout(res, ms))
|
||||||
|
}
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
[handleMsg]: { from: 'XXXXXX', body: 'hola', hasMedia: false }
|
|
||||||
[handleMsg]: { from: 'XXXXXX', body: 'hola', hasMedia: false }
|
|
||||||
[handleMsg]: { from: 'XXXXXX', body: 'hola', hasMedia: false }
|
|
||||||
18
package.json
18
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@bot-whatsapp/root",
|
"name": "@bot-whatsapp/root",
|
||||||
"version": "0.2.0-alpha.0",
|
"version": "0.1.18",
|
||||||
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
|
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
|
||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -10,16 +10,22 @@
|
|||||||
"create-bot:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js ",
|
"create-bot:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js ",
|
||||||
"bot:rollup": "rollup --config ./packages/bot/rollup-bot.config.js",
|
"bot:rollup": "rollup --config ./packages/bot/rollup-bot.config.js",
|
||||||
"provider:rollup": "rollup --config ./packages/provider/rollup-provider.config.js ",
|
"provider:rollup": "rollup --config ./packages/provider/rollup-provider.config.js ",
|
||||||
|
"contexts:rollup": "rollup --config ./packages/contexts/rollup-contexts.config.js",
|
||||||
"database:rollup": "rollup --config ./packages/database/rollup-database.config.js",
|
"database:rollup": "rollup --config ./packages/database/rollup-database.config.js",
|
||||||
|
"create-bot-whatsapp:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js",
|
||||||
|
"portal:rollup": "rollup --config ./packages/portal/rollup-portal.config.js",
|
||||||
"format:check": "prettier --check ./packages",
|
"format:check": "prettier --check ./packages",
|
||||||
"format:write": "prettier --write ./packages",
|
"format:write": "prettier --write ./packages",
|
||||||
"fmt.staged": "pretty-quick --staged",
|
"fmt.staged": "pretty-quick --staged",
|
||||||
"lint:check": "eslint ./packages",
|
"lint:check": "eslint ./packages",
|
||||||
"lint:fix": "eslint --fix ./packages",
|
"lint:fix": "eslint --fix ./packages",
|
||||||
"build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup",
|
"build:portal-web": "cd ./packages/portal/ && yarn run build.types && yarn run build.client && yarn run build.server && yarn run lint --fix",
|
||||||
|
"build:full": "yarn run build:portal-web && yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup && yarn run portal:rollup",
|
||||||
|
"build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup && yarn run portal:rollup",
|
||||||
"copy.lib": "node ./scripts/move.js",
|
"copy.lib": "node ./scripts/move.js",
|
||||||
"test.unit": "node ./node_modules/uvu/bin.js packages test",
|
"test.unit": "node ./node_modules/uvu/bin.js packages test",
|
||||||
"test.coverage": "node ./node_modules/c8/bin/c8.js npm run test.unit",
|
"test.e2e": "node ./node_modules/uvu/bin.js __test__",
|
||||||
|
"test.coverage": "node ./node_modules/c8/bin/c8.js npm run test.unit && npm run test.e2e",
|
||||||
"test": "npm run test.coverage",
|
"test": "npm run test.coverage",
|
||||||
"cli": "node ./packages/cli/bin/cli.js",
|
"cli": "node ./packages/cli/bin/cli.js",
|
||||||
"create": "node ./packages/create-bot-whatsapp/bin/create.js",
|
"create": "node ./packages/create-bot-whatsapp/bin/create.js",
|
||||||
@@ -28,7 +34,7 @@
|
|||||||
"prepare": "npx husky install",
|
"prepare": "npx husky install",
|
||||||
"preinstall": "npx only-allow yarn",
|
"preinstall": "npx only-allow yarn",
|
||||||
"postinstall": "npx prettier --write .",
|
"postinstall": "npx prettier --write .",
|
||||||
"release": "standard-version"
|
"release": "standard-version -- --prerelease --global"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/create-bot-whatsapp",
|
"packages/create-bot-whatsapp",
|
||||||
@@ -36,6 +42,8 @@
|
|||||||
"packages/cli",
|
"packages/cli",
|
||||||
"packages/database",
|
"packages/database",
|
||||||
"packages/provider",
|
"packages/provider",
|
||||||
|
"packages/contexts",
|
||||||
|
"packages/portal",
|
||||||
"packages/docs"
|
"packages/docs"
|
||||||
],
|
],
|
||||||
"keywords": [
|
"keywords": [
|
||||||
@@ -60,6 +68,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^17.3.0",
|
"@commitlint/cli": "^17.3.0",
|
||||||
"@commitlint/config-conventional": "^17.3.0",
|
"@commitlint/config-conventional": "^17.3.0",
|
||||||
|
"@octokit/core": "^4.1.0",
|
||||||
"@rollup/plugin-commonjs": "^23.0.2",
|
"@rollup/plugin-commonjs": "^23.0.2",
|
||||||
"@rollup/plugin-json": "^5.0.1",
|
"@rollup/plugin-json": "^5.0.1",
|
||||||
"@rollup/plugin-node-resolve": "^15.0.1",
|
"@rollup/plugin-node-resolve": "^15.0.1",
|
||||||
@@ -80,6 +89,7 @@
|
|||||||
"rollup": "^3.2.3",
|
"rollup": "^3.2.3",
|
||||||
"rollup-plugin-cleanup": "^3.2.1",
|
"rollup-plugin-cleanup": "^3.2.1",
|
||||||
"rollup-plugin-copy": "^3.4.0",
|
"rollup-plugin-copy": "^3.4.0",
|
||||||
|
"semver": "^7.3.8",
|
||||||
"standard-version": "^9.5.0",
|
"standard-version": "^9.5.0",
|
||||||
"uvu": "^0.5.6"
|
"uvu": "^0.5.6"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ const { createWriteStream } = require('fs')
|
|||||||
const logger = new Console({
|
const logger = new Console({
|
||||||
stdout: createWriteStream(`${process.cwd()}/core.class.log`),
|
stdout: createWriteStream(`${process.cwd()}/core.class.log`),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const QueuePrincipal = new Queue()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos
|
* [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos
|
||||||
* [ ] Guardar historial en db
|
* [ ] Guardar historial en db
|
||||||
@@ -18,10 +21,12 @@ class CoreClass {
|
|||||||
flowClass
|
flowClass
|
||||||
databaseClass
|
databaseClass
|
||||||
providerClass
|
providerClass
|
||||||
constructor(_flow, _database, _provider) {
|
generalArgs = { blackList: [] }
|
||||||
|
constructor(_flow, _database, _provider, _args) {
|
||||||
this.flowClass = _flow
|
this.flowClass = _flow
|
||||||
this.databaseClass = _database
|
this.databaseClass = _database
|
||||||
this.providerClass = _provider
|
this.providerClass = _provider
|
||||||
|
this.generalArgs = { ...this.generalArgs, ..._args }
|
||||||
|
|
||||||
for (const { event, func } of this.listenerBusEvents()) {
|
for (const { event, func } of this.listenerBusEvents()) {
|
||||||
this.providerClass.on(event, func)
|
this.providerClass.on(event, func)
|
||||||
@@ -34,16 +39,16 @@ class CoreClass {
|
|||||||
listenerBusEvents = () => [
|
listenerBusEvents = () => [
|
||||||
{
|
{
|
||||||
event: 'preinit',
|
event: 'preinit',
|
||||||
func: () => printer('Iniciando provider espere...'),
|
func: () => printer('Iniciando proveedor, espere...'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: 'require_action',
|
event: 'require_action',
|
||||||
func: ({ instructions, title = '⚡⚡ ACCION REQUERIDA ⚡⚡' }) =>
|
func: ({ instructions, title = '⚡⚡ ACCIÓN REQUERIDA ⚡⚡' }) =>
|
||||||
printer(instructions, title),
|
printer(instructions, title),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: 'ready',
|
event: 'ready',
|
||||||
func: () => printer('Provider conectado y listo'),
|
func: () => printer('Proveedor conectado y listo'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: 'auth_failure',
|
event: 'auth_failure',
|
||||||
@@ -58,19 +63,21 @@ class CoreClass {
|
|||||||
]
|
]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* GLOSSARY.md
|
||||||
* @param {*} messageInComming
|
* @param {*} messageCtxInComming
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
handleMsg = async (messageInComming) => {
|
handleMsg = async (messageCtxInComming) => {
|
||||||
logger.log(`[handleMsg]: `, messageInComming)
|
logger.log(`[handleMsg]: `, messageCtxInComming)
|
||||||
const { body, from } = messageInComming
|
const { body, from } = messageCtxInComming
|
||||||
let msgToSend = []
|
let msgToSend = []
|
||||||
let fallBackFlag = false
|
let fallBackFlag = false
|
||||||
|
let endFlowFlag = false
|
||||||
|
if (this.generalArgs.blackList.includes(from)) return
|
||||||
|
if (!body) return
|
||||||
if (!body.length) return
|
if (!body.length) return
|
||||||
|
|
||||||
const prevMsg = await this.databaseClass.getPrevByNumber(from)
|
let prevMsg = await this.databaseClass.getPrevByNumber(from)
|
||||||
const refToContinue = this.flowClass.findBySerialize(
|
const refToContinue = this.flowClass.findBySerialize(
|
||||||
prevMsg?.refSerialize
|
prevMsg?.refSerialize
|
||||||
)
|
)
|
||||||
@@ -84,19 +91,96 @@ class CoreClass {
|
|||||||
this.databaseClass.save(ctxByNumber)
|
this.databaseClass.save(ctxByNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 📄 [options: fallback]: esta funcion se encarga de repetir el ultimo mensaje
|
// 📄 Limpiar cola de procesos
|
||||||
const fallBack = () => {
|
const clearQueue = () => {
|
||||||
|
QueuePrincipal.pendingPromise = false
|
||||||
|
QueuePrincipal.queue = []
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📄 Finalizar flujo
|
||||||
|
const endFlow = async () => {
|
||||||
|
prevMsg = null
|
||||||
|
endFlowFlag = true
|
||||||
|
clearQueue()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx
|
||||||
|
const sendFlow = async (messageToSend, numberOrId) => {
|
||||||
|
// [1 Paso] esto esta bien!
|
||||||
|
|
||||||
|
if (prevMsg?.options?.capture) await cbEveryCtx(prevMsg?.ref)
|
||||||
|
const queue = []
|
||||||
|
for (const ctxMessage of messageToSend) {
|
||||||
|
if (endFlowFlag) return
|
||||||
|
const delayMs = ctxMessage?.options?.delay || 0
|
||||||
|
if (delayMs) await delay(delayMs)
|
||||||
|
QueuePrincipal.enqueue(() =>
|
||||||
|
Promise.all([
|
||||||
|
this.sendProviderAndSave(numberOrId, ctxMessage).then(
|
||||||
|
() => resolveCbEveryCtx(ctxMessage)
|
||||||
|
),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return Promise.all(queue)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje
|
||||||
|
const fallBack = async () => {
|
||||||
fallBackFlag = true
|
fallBackFlag = true
|
||||||
msgToSend = this.flowClass.find(refToContinue?.keyword, true) || []
|
await this.sendProviderAndSave(from, refToContinue)
|
||||||
this.sendFlow(msgToSend, from)
|
QueuePrincipal.queue = []
|
||||||
return refToContinue
|
return refToContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 📄 [options: callback]: Si se tiene un callback se ejecuta
|
// 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes
|
||||||
if (!fallBackFlag && refToContinue && prevMsg?.options?.callback) {
|
// para evitar bloque de whatsapp
|
||||||
const indexFlow = this.flowClass.findIndexByRef(refToContinue?.ref)
|
|
||||||
this.flowClass.allCallbacks[indexFlow].callback(messageInComming, {
|
const flowDynamic = async (
|
||||||
|
listMsg = [],
|
||||||
|
optListMsg = { limit: 5, fallback: false }
|
||||||
|
) => {
|
||||||
|
if (!Array.isArray(listMsg))
|
||||||
|
throw new Error('Esto debe ser un ARRAY')
|
||||||
|
|
||||||
|
fallBackFlag = optListMsg.fallback
|
||||||
|
const parseListMsg = listMsg
|
||||||
|
.map((opt, index) => {
|
||||||
|
const body = typeof opt === 'string' ? opt : opt.body
|
||||||
|
const media = opt?.media ?? null
|
||||||
|
const buttons = opt?.buttons ?? []
|
||||||
|
|
||||||
|
return toCtx({
|
||||||
|
body,
|
||||||
|
from,
|
||||||
|
keyword: null,
|
||||||
|
index,
|
||||||
|
options: { media, buttons },
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.slice(0, optListMsg.limit)
|
||||||
|
|
||||||
|
if (endFlowFlag) return
|
||||||
|
for (const msg of parseListMsg) {
|
||||||
|
await this.sendProviderAndSave(from, msg)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback
|
||||||
|
const resolveCbEveryCtx = async (ctxMessage) => {
|
||||||
|
if (!ctxMessage?.options?.capture)
|
||||||
|
return await cbEveryCtx(ctxMessage?.ref)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
|
||||||
|
const cbEveryCtx = async (inRef) => {
|
||||||
|
if (!this.flowClass.allCallbacks[inRef]) return Promise.resolve()
|
||||||
|
return this.flowClass.allCallbacks[inRef](messageCtxInComming, {
|
||||||
fallBack,
|
fallBack,
|
||||||
|
flowDynamic,
|
||||||
|
endFlow,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,7 +192,8 @@ class CoreClass {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
|
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
|
||||||
this.sendFlow(msgToSend, from)
|
|
||||||
|
sendFlow(msgToSend, from)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,13 +204,13 @@ class CoreClass {
|
|||||||
|
|
||||||
if (['string', 'boolean'].includes(typeCapture) && valueCapture) {
|
if (['string', 'boolean'].includes(typeCapture) && valueCapture) {
|
||||||
msgToSend = this.flowClass.find(refToContinue?.ref, true) || []
|
msgToSend = this.flowClass.find(refToContinue?.ref, true) || []
|
||||||
this.sendFlow(msgToSend, from)
|
sendFlow(msgToSend, from)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
msgToSend = this.flowClass.find(body) || []
|
msgToSend = this.flowClass.find(body) || []
|
||||||
this.sendFlow(msgToSend, from)
|
sendFlow(msgToSend, from)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -142,18 +227,6 @@ class CoreClass {
|
|||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
sendFlow = async (messageToSend, numberOrId) => {
|
|
||||||
const queue = []
|
|
||||||
for (const ctxMessage of messageToSend) {
|
|
||||||
const delayMs = ctxMessage?.options?.delay || 0
|
|
||||||
if (delayMs) await delay(delayMs)
|
|
||||||
Queue.enqueue(() =>
|
|
||||||
this.sendProviderAndSave(numberOrId, ctxMessage)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return Promise.all(queue)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @param {*} message
|
* @param {*} message
|
||||||
@@ -167,5 +240,24 @@ class CoreClass {
|
|||||||
this.continue(null, responde.ref)
|
this.continue(null, responde.ref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Funcion dedicada a enviar el mensaje sin pasar por el flow
|
||||||
|
* (dialogflow)
|
||||||
|
* @param {*} messageToSend
|
||||||
|
* @param {*} numberOrId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
sendFlowSimple = async (messageToSend, numberOrId) => {
|
||||||
|
const queue = []
|
||||||
|
for (const ctxMessage of messageToSend) {
|
||||||
|
const delayMs = ctxMessage?.options?.delay || 0
|
||||||
|
if (delayMs) await delay(delayMs)
|
||||||
|
QueuePrincipal.enqueue(() =>
|
||||||
|
this.sendProviderAndSave(numberOrId, ctxMessage)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return Promise.all(queue)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
module.exports = CoreClass
|
module.exports = CoreClass
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ const { addKeyword, addAnswer, addChild, toSerialize } = require('./io/methods')
|
|||||||
* @param {*} args
|
* @param {*} args
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const createBot = async ({ flow, database, provider }) =>
|
const createBot = async ({ flow, database, provider }, args = {}) =>
|
||||||
new CoreClass(flow, database, provider)
|
new CoreClass(flow, database, provider, args)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crear instancia de clase Io (Flow)
|
* Crear instancia de clase Io (Flow)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const { toSerialize } = require('./methods/toSerialize')
|
const { toSerialize } = require('./methods/toSerialize')
|
||||||
|
const { flatObject } = require('../utils/flattener')
|
||||||
|
|
||||||
class FlowClass {
|
class FlowClass {
|
||||||
allCallbacks = []
|
allCallbacks = []
|
||||||
@@ -8,10 +9,7 @@ class FlowClass {
|
|||||||
if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY')
|
if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY')
|
||||||
this.flowRaw = _flow
|
this.flowRaw = _flow
|
||||||
|
|
||||||
this.allCallbacks = _flow
|
this.allCallbacks = flatObject(_flow)
|
||||||
.map((cbIn) => cbIn.ctx.callbacks)
|
|
||||||
.flat(2)
|
|
||||||
.map((c, i) => ({ callback: c?.callback, index: i }))
|
|
||||||
|
|
||||||
const mergeToJsonSerialize = Object.keys(_flow)
|
const mergeToJsonSerialize = Object.keys(_flow)
|
||||||
.map((indexObjectFlow) => _flow[indexObjectFlow].toJson())
|
.map((indexObjectFlow) => _flow[indexObjectFlow].toJson())
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
const { flatObject } = require('../../utils/flattener')
|
||||||
const { generateRef } = require('../../utils/hash')
|
const { generateRef } = require('../../utils/hash')
|
||||||
|
const { addChild } = require('./addChild')
|
||||||
const { toJson } = require('./toJson')
|
const { toJson } = require('./toJson')
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -27,14 +29,30 @@ const addAnswer =
|
|||||||
delay: typeof options?.delay === 'number' ? options?.delay : 0,
|
delay: typeof options?.delay === 'number' ? options?.delay : 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
const getNested = () => ({
|
const getNested = () => {
|
||||||
nested: Array.isArray(nested) ? nested : [],
|
let flatNested = []
|
||||||
})
|
if (Array.isArray(nested)) {
|
||||||
|
for (const iterator of nested) {
|
||||||
|
flatNested = [...flatNested, ...addChild(iterator)]
|
||||||
|
}
|
||||||
|
|
||||||
const callback =
|
return {
|
||||||
typeof cb === 'function'
|
nested: flatNested,
|
||||||
? cb
|
}
|
||||||
: () => console.log('Callback no definida')
|
}
|
||||||
|
return {
|
||||||
|
nested: addChild(nested),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Esta funcion aplana y busca los callback anidados de los hijos
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getCbFromNested = () =>
|
||||||
|
flatObject(Array.isArray(nested) ? nested : [nested])
|
||||||
|
|
||||||
|
const callback = typeof cb === 'function' ? cb : () => null
|
||||||
|
|
||||||
const lastCtx = inCtx.hasOwnProperty('ctx') ? inCtx.ctx : inCtx
|
const lastCtx = inCtx.hasOwnProperty('ctx') ? inCtx.ctx : inCtx
|
||||||
|
|
||||||
@@ -62,12 +80,12 @@ const addAnswer =
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
const callbacks = [].concat(inCtx.callbacks).concat([
|
getCbFromNested()
|
||||||
{
|
const callbacks = {
|
||||||
ref: lastCtx.ref,
|
...inCtx.callbacks,
|
||||||
callback,
|
...getCbFromNested(),
|
||||||
},
|
[ref]: callback,
|
||||||
])
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...lastCtx,
|
...lastCtx,
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ const { generateRef, generateRefSerialize } = require('../../utils/hash')
|
|||||||
* @param options {media:string, buttons:[], capture:true default false}
|
* @param options {media:string, buttons:[], capture:true default false}
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const toCtx = ({ body, from, prevRef, index }) => {
|
const toCtx = ({ body, from, prevRef, options = {}, index }) => {
|
||||||
return {
|
return {
|
||||||
ref: generateRef(),
|
ref: generateRef(),
|
||||||
keyword: prevRef,
|
keyword: prevRef,
|
||||||
answer: body,
|
answer: body,
|
||||||
options: {},
|
options: options ?? {},
|
||||||
from,
|
from,
|
||||||
refSerialize: generateRefSerialize({ index, answer: body }),
|
refSerialize: generateRefSerialize({ index, answer: body }),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@bot-whatsapp/bot",
|
"name": "@bot-whatsapp/bot",
|
||||||
"version": "0.0.1",
|
"version": "0.0.73-alpha.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./lib/bundle.bot.cjs",
|
"main": "./lib/bundle.bot.cjs",
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"bot:rollup": "node ../../node_modules/.bin/rollup index.js --config ./rollup-cli.config.js",
|
"bot:rollup": "node ../../node_modules/.bin/rollup index.js --config ./rollup-cli.config.js",
|
||||||
"format:check": "prettier --check .",
|
"format:check": "prettier --check .",
|
||||||
@@ -29,5 +28,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dotenv": "^16.0.3"
|
"dotenv": "^16.0.3"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/bot"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class ProviderClass extends EventEmitter {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sendMessage = async (userId, message, sendMessage) => {
|
sendMessage = async (userId, message) => {
|
||||||
if (NODE_ENV !== 'production')
|
if (NODE_ENV !== 'production')
|
||||||
console.log('[sendMessage]', { userId, message })
|
console.log('[sendMessage]', { userId, message })
|
||||||
return message
|
return message
|
||||||
|
|||||||
@@ -3,14 +3,24 @@ const commonjs = require('@rollup/plugin-commonjs')
|
|||||||
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
||||||
const { join } = require('path')
|
const { join } = require('path')
|
||||||
|
|
||||||
const PATH = join(__dirname, 'lib', 'bundle.bot.cjs')
|
module.exports = [
|
||||||
|
{
|
||||||
module.exports = {
|
input: join(__dirname, 'index.js'),
|
||||||
input: join(__dirname, 'index.js'),
|
output: {
|
||||||
output: {
|
banner: banner['banner.output'].join(''),
|
||||||
banner: banner['banner.output'].join(''),
|
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
|
||||||
file: PATH,
|
format: 'cjs',
|
||||||
format: 'cjs',
|
sourcemap: true,
|
||||||
|
},
|
||||||
|
plugins: [commonjs(), nodeResolve()],
|
||||||
},
|
},
|
||||||
plugins: [commonjs(), nodeResolve()],
|
{
|
||||||
}
|
input: join(__dirname, 'index.js'),
|
||||||
|
output: {
|
||||||
|
banner: banner['banner.output'].join(''),
|
||||||
|
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
|
||||||
|
format: 'cjs',
|
||||||
|
},
|
||||||
|
plugins: [commonjs(), nodeResolve()],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const {
|
|||||||
} = require('../index')
|
} = require('../index')
|
||||||
|
|
||||||
class MockFlow {
|
class MockFlow {
|
||||||
allCallbacks = [{ callback: () => console.log('') }]
|
allCallbacks = { ref: () => 1 }
|
||||||
flowSerialize = []
|
flowSerialize = []
|
||||||
flowRaw = []
|
flowRaw = []
|
||||||
find = (arg) => {
|
find = (arg) => {
|
||||||
|
|||||||
28
packages/bot/tests/flow.class.test.js
Normal file
28
packages/bot/tests/flow.class.test.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
const { test } = require('uvu')
|
||||||
|
const assert = require('uvu/assert')
|
||||||
|
const FlowClass = require('../io/flow.class')
|
||||||
|
const { addKeyword } = require('../index')
|
||||||
|
|
||||||
|
test(`[FlowClass] Probando instanciamiento de clase`, async () => {
|
||||||
|
const MOCK_FLOW = addKeyword('hola').addAnswer('Buenas!')
|
||||||
|
const flowClass = new FlowClass([MOCK_FLOW])
|
||||||
|
assert.is(flowClass instanceof FlowClass, true)
|
||||||
|
})
|
||||||
|
|
||||||
|
test(`[FlowClass] Probando find`, async () => {
|
||||||
|
const MOCK_FLOW = addKeyword('hola').addAnswer('Buenas!')
|
||||||
|
const flowClass = new FlowClass([MOCK_FLOW])
|
||||||
|
|
||||||
|
flowClass.find('hola')
|
||||||
|
assert.is(flowClass instanceof FlowClass, true)
|
||||||
|
})
|
||||||
|
|
||||||
|
test(`[FlowClass] Probando findBySerialize`, async () => {
|
||||||
|
const MOCK_FLOW = addKeyword('hola').addAnswer('Buenas!')
|
||||||
|
const flowClass = new FlowClass([MOCK_FLOW])
|
||||||
|
|
||||||
|
flowClass.findBySerialize('')
|
||||||
|
assert.is(flowClass instanceof FlowClass, true)
|
||||||
|
})
|
||||||
|
|
||||||
|
test.run()
|
||||||
25
packages/bot/utils/flattener.js
Normal file
25
packages/bot/utils/flattener.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
const flatObject = (listArray = []) => {
|
||||||
|
const cbNestedList = Array.isArray(listArray) ? listArray : []
|
||||||
|
|
||||||
|
if (!listArray.length) return {}
|
||||||
|
|
||||||
|
const cbNestedObj = cbNestedList
|
||||||
|
.map(({ ctx }) => ctx?.callbacks)
|
||||||
|
.filter((i) => !!i)
|
||||||
|
const queueCb = cbNestedObj.reduce((acc, current) => {
|
||||||
|
const getKeys = Object.keys(current)
|
||||||
|
const parse = getKeys.map((icb, i) => ({
|
||||||
|
[icb]: Object.values(current)[i],
|
||||||
|
}))
|
||||||
|
return [...acc, ...parse]
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const flatObj = {}
|
||||||
|
for (const iteration of queueCb) {
|
||||||
|
const [keyCb] = Object.keys(iteration)
|
||||||
|
flatObj[keyCb] = iteration[keyCb]
|
||||||
|
}
|
||||||
|
return flatObj
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { flatObject }
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
class Queue {
|
class Queue {
|
||||||
static queue = []
|
queue = []
|
||||||
static pendingPromise = false
|
pendingPromise = false
|
||||||
|
|
||||||
static enqueue(promise) {
|
enqueue(promise) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.queue.push({
|
this.queue.push({
|
||||||
promise,
|
promise,
|
||||||
@@ -13,7 +13,7 @@ class Queue {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
static dequeue() {
|
dequeue() {
|
||||||
if (this.workingOnPromise) {
|
if (this.workingOnPromise) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +1,65 @@
|
|||||||
const { red, yellow, green, bgCyan } = require('kleur')
|
const { red, yellow, green, bgCyan } = require('kleur')
|
||||||
|
const { exec } = require('node:child_process')
|
||||||
|
|
||||||
const checkNodeVersion = () => {
|
const checkNodeVersion = () => {
|
||||||
console.log(bgCyan('🚀 Revisando tu Node.js'))
|
return new Promise((resolve, reject) => {
|
||||||
const version = process.version
|
console.log(bgCyan('🚀 Revisando tu Node.js'))
|
||||||
const majorVersion = parseInt(version.replace('v', '').split('.').shift())
|
const version = process.version
|
||||||
if (majorVersion < 16) {
|
const majorVersion = parseInt(
|
||||||
console.error(
|
version.replace('v', '').split('.').shift()
|
||||||
red(
|
|
||||||
`🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
process.exit(1)
|
if (majorVersion < 16) {
|
||||||
}
|
console.error(
|
||||||
console.log(green(`Node.js combatible ${version}`))
|
red(
|
||||||
console.log(``)
|
`🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`
|
||||||
|
)
|
||||||
|
)
|
||||||
|
console.log(``)
|
||||||
|
reject('ERROR_NODE')
|
||||||
|
}
|
||||||
|
console.log(green(`Node.js: ${version} compatible ✅`))
|
||||||
|
console.log(``)
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkOs = () => {
|
const checkOs = () => {
|
||||||
console.log(bgCyan('🙂 Revisando tu Sistema Operativo'))
|
return new Promise((resolve) => {
|
||||||
const os = process.platform
|
console.log(bgCyan('🙂 Revisando tu sistema operativo'))
|
||||||
if (!os.includes('win32')) {
|
const os = process.platform
|
||||||
const messages = [
|
if (!os.includes('win32')) {
|
||||||
`El sistema operativo actual (${os}) posiblemente requiera`,
|
const messages = [
|
||||||
`una confiuración adicional referente al puppeter`,
|
`El sistema operativo actual (${os}) posiblemente requiera`,
|
||||||
``,
|
`una configuración adicional referente al puppeteer`,
|
||||||
`Recuerda pasar por el WIKI`,
|
``,
|
||||||
`🔗 https://github.com/leifermendez/bot-whatsapp/wiki/Instalaci%C3%B3n`,
|
`Recuerda pasar por el WIKI`,
|
||||||
``,
|
`🔗 https://github.com/leifermendez/bot-whatsapp/wiki/Instalación`,
|
||||||
]
|
``,
|
||||||
|
]
|
||||||
|
|
||||||
console.log(yellow(messages.join(' \n')))
|
console.log(yellow(messages.join(' \n')))
|
||||||
}
|
}
|
||||||
|
console.log(green(`OS: compatible ✅`))
|
||||||
console.log(``)
|
console.log(``)
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { checkNodeVersion, checkOs }
|
const checkGit = () => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
console.log(bgCyan('🤓 Revisando GIT'))
|
||||||
|
exec('git --version', (error) => {
|
||||||
|
if (error) {
|
||||||
|
console.error(red(`🔴 Se require instalar GIT`))
|
||||||
|
console.log(``)
|
||||||
|
reject('ERROR_GIT')
|
||||||
|
} else {
|
||||||
|
console.log(green(`Git: Compatible ✅`))
|
||||||
|
console.log(``)
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { checkNodeVersion, checkOs, checkGit }
|
||||||
|
|||||||
@@ -12,9 +12,13 @@ const copyFiles = async (from, to) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const copyBaseApp = async () => {
|
/**
|
||||||
const BASEP_APP_PATH_FROM = `${process.cwd()}/starters/apps/base`
|
* Copiar directorio con archivos
|
||||||
const BASEP_APP_PATH_TO = `${process.cwd()}/example-app-base`
|
* @param {*} templateName
|
||||||
|
*/
|
||||||
|
const copyBaseApp = async (fromDir = process.cwd(), toDir = process.cwd()) => {
|
||||||
|
const BASEP_APP_PATH_FROM = `${fromDir}`
|
||||||
|
const BASEP_APP_PATH_TO = `${toDir}`
|
||||||
await copyFiles(BASEP_APP_PATH_FROM, BASEP_APP_PATH_TO)
|
await copyFiles(BASEP_APP_PATH_FROM, BASEP_APP_PATH_TO)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const getPkgManage = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const installDeps = (pkgManager, packageList) => {
|
const installDeps = (pkgManager, packageList) => {
|
||||||
const errorMessage = `Ocurrio un error instalando ${packageList}`
|
const errorMessage = `Ocurrió un error instalando ${packageList}`
|
||||||
let childProcess = []
|
let childProcess = []
|
||||||
|
|
||||||
const installSingle = (pkgInstall) => () => {
|
const installSingle = (pkgInstall) => () => {
|
||||||
|
|||||||
@@ -1,146 +1,152 @@
|
|||||||
const prompts = require('prompts')
|
const prompts = require('prompts')
|
||||||
const { yellow, red } = require('kleur')
|
const { join } = require('path')
|
||||||
const { installAll } = require('../install')
|
const { yellow, red, cyan, bgMagenta, bgRed } = require('kleur')
|
||||||
const { cleanSession } = require('../clean')
|
const { existsSync } = require('fs')
|
||||||
const { copyBaseApp } = require('../create-app')
|
const { copyBaseApp } = require('../create-app')
|
||||||
const { checkNodeVersion, checkOs } = require('../check')
|
const { checkNodeVersion, checkOs, checkGit } = require('../check')
|
||||||
const { jsonConfig } = require('../configuration')
|
|
||||||
|
const bannerDone = () => {
|
||||||
|
console.log(``)
|
||||||
|
console.log(
|
||||||
|
cyan(
|
||||||
|
[
|
||||||
|
`[Agradecimientos]: Este es un proyecto OpenSource, si tienes intenciones de colaborar puedes hacerlo:`,
|
||||||
|
`[😉] Comprando un cafe https://www.buymeacoffee.com/leifermendez`,
|
||||||
|
`[⭐] Dar estrella https://github.com/codigoencasa/bot-whatsapp`,
|
||||||
|
`[🚀] Realizando mejoras en el codigo`,
|
||||||
|
].join('\n')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
console.log(``)
|
||||||
|
}
|
||||||
|
|
||||||
const startInteractive = async () => {
|
const startInteractive = async () => {
|
||||||
|
try {
|
||||||
|
console.clear()
|
||||||
|
await checkNodeVersion()
|
||||||
|
checkOs()
|
||||||
|
await checkGit()
|
||||||
|
console.clear()
|
||||||
|
await nextSteps()
|
||||||
|
} catch (e) {
|
||||||
|
console.error(bgRed(`Ups! 🙄 algo no va bien.`))
|
||||||
|
console.error(
|
||||||
|
bgRed(`Revisa los requerimientos minimos en la documentacion`)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const nextSteps = async () => {
|
||||||
const questions = [
|
const questions = [
|
||||||
{
|
{
|
||||||
type: 'text',
|
type: 'text',
|
||||||
name: 'exampeOpt',
|
name: 'outDir',
|
||||||
message:
|
message: 'Quieres crear un bot? (Y/n)',
|
||||||
'Quieres crear una app de ejemplo "example-app-example"? (Y/n)',
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// type: 'text',
|
|
||||||
// name: 'dependencies',
|
|
||||||
// message:
|
|
||||||
// 'Quieres actualizar las librerias "whatsapp-web.js"? (Y/n)',
|
|
||||||
// },
|
|
||||||
{
|
|
||||||
type: 'text',
|
|
||||||
name: 'cleanTmp',
|
|
||||||
message: 'Quieres limpiar la session del bot? (Y/n)',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'multiselect',
|
type: 'multiselect',
|
||||||
name: 'providerWs',
|
name: 'providerWs',
|
||||||
message: 'Proveedor de Whatsapp',
|
message: '¿Cuál proveedor de whatsapp quieres utilizar?',
|
||||||
choices: [
|
choices: [
|
||||||
{ title: 'whatsapp-web.js', value: 'whatsapp-web.js' },
|
{ title: 'Baileys (gratis)', value: 'baileys' },
|
||||||
{ title: 'API Oficial (Meta)', value: 'meta', disabled: true },
|
{ title: 'Venom (gratis)', value: 'venom' },
|
||||||
{ title: 'Twilio', value: 'twilio', disabled: true },
|
{ title: 'whatsapp-web.js (gratis)', value: 'wweb' },
|
||||||
|
{ title: 'Twilio', value: 'twilio' },
|
||||||
|
{ title: 'Meta', value: 'meta' },
|
||||||
],
|
],
|
||||||
max: 1,
|
max: 1,
|
||||||
hint: 'Espacio para selecionar',
|
hint: 'Espacio para seleccionar',
|
||||||
instructions: '↑/↓',
|
instructions: '↑/↓',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'multiselect',
|
type: 'multiselect',
|
||||||
name: 'providerDb',
|
name: 'providerDb',
|
||||||
message: 'Cual base de datos quieres usar',
|
message: '¿Cuál base de datos quieres utilizar?',
|
||||||
choices: [
|
choices: [
|
||||||
{ title: 'JSONFile', value: 'json' },
|
{ title: 'Memory', value: 'memory' },
|
||||||
{ title: 'MySQL', value: 'mysql', disabled: true },
|
{ title: 'Json', value: 'json' },
|
||||||
{ title: 'Mongo', value: 'mongo', disabled: true },
|
{ title: 'Mongo', value: 'mongo' },
|
||||||
|
{ title: 'MySQL', value: 'mysql' },
|
||||||
],
|
],
|
||||||
max: 1,
|
max: 1,
|
||||||
hint: 'Espacio para selecionar',
|
hint: 'Espacio para seleccionar',
|
||||||
instructions: '↑/↓',
|
instructions: '↑/↓',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
console.clear()
|
|
||||||
checkNodeVersion()
|
|
||||||
checkOs()
|
|
||||||
const onCancel = () => {
|
const onCancel = () => {
|
||||||
console.log('Proceso cancelado!')
|
console.log('¡Proceso cancelado!')
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
const response = await prompts(questions, { onCancel })
|
const response = await prompts(questions, { onCancel })
|
||||||
const {
|
const { outDir = '', providerDb = [], providerWs = [] } = response
|
||||||
dependencies = '',
|
|
||||||
cleanTmp = '',
|
const createApp = async (templateName = null) => {
|
||||||
exampeOpt = '',
|
if (!templateName)
|
||||||
providerDb = [],
|
throw new Error('TEMPLATE_NAME_INVALID: ', templateName)
|
||||||
providerWs = [],
|
|
||||||
} = response
|
const possiblesPath = [
|
||||||
/**
|
join(__dirname, '..', '..', 'starters', 'apps', templateName),
|
||||||
* Question
|
join(__dirname, '..', 'starters', 'apps', templateName),
|
||||||
* @returns
|
join(__dirname, 'starters', 'apps', templateName),
|
||||||
*/
|
]
|
||||||
const installOrUdpateDep = async () => {
|
|
||||||
const answer = dependencies.toLowerCase() || 'n'
|
const answer = outDir.toLowerCase() || 'n'
|
||||||
if (answer.includes('n')) return true
|
if (answer.includes('n')) return true
|
||||||
|
|
||||||
if (answer.includes('y')) {
|
if (answer.includes('y')) {
|
||||||
await installAll()
|
const indexOfPath = possiblesPath.find((a) => existsSync(a))
|
||||||
return true
|
await copyBaseApp(indexOfPath, join(process.cwd(), templateName))
|
||||||
|
console.log(``)
|
||||||
|
console.log(bgMagenta(`⚡⚡⚡ INSTRUCCIONES ⚡⚡⚡`))
|
||||||
|
console.log(yellow(`cd ${templateName}`))
|
||||||
|
console.log(yellow(`npm install`))
|
||||||
|
console.log(yellow(`npm start`))
|
||||||
|
console.log(``)
|
||||||
|
|
||||||
|
return outDir
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Question
|
* Selccionar Provider (meta, twilio, etc...)
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
const cleanAllSession = async () => {
|
|
||||||
const answer = cleanTmp.toLowerCase() || 'n'
|
|
||||||
if (answer.includes('n')) return true
|
|
||||||
|
|
||||||
if (answer.includes('y')) {
|
|
||||||
await cleanSession()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const createApp = async () => {
|
|
||||||
const answer = exampeOpt.toLowerCase() || 'n'
|
|
||||||
if (answer.includes('n')) return true
|
|
||||||
|
|
||||||
if (answer.includes('y')) {
|
|
||||||
await copyBaseApp()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const vendorProvider = async () => {
|
const vendorProvider = async () => {
|
||||||
|
const [answer] = providerWs
|
||||||
if (!providerWs.length) {
|
if (!providerWs.length) {
|
||||||
console.log(
|
console.log(
|
||||||
red(
|
red(
|
||||||
`Debes de seleccionar una WS Provider. Tecla [Space] para seleccionar`
|
`Debes seleccionar un proveedor de whatsapp. Tecla [Space] para seleccionar`
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
console.log(yellow(`'Deberia crer una carpeta en root/provider'`))
|
return answer
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selecionar adaptador de base de datos
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
const dbProvider = async () => {
|
const dbProvider = async () => {
|
||||||
const answer = providerDb
|
const [answer] = providerDb
|
||||||
if (!providerDb.length) {
|
if (!providerDb.length) {
|
||||||
console.log(
|
console.log(
|
||||||
red(
|
red(
|
||||||
`Debes de seleccionar una DB Provider. Tecla [Space] para seleccionar`
|
`Debes seleccionar un proveedor de base de datos. Tecla [Space] para seleccionar`
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
if (answer === 'json') {
|
return answer
|
||||||
console.log('Deberia crer una carpeta en root/data')
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await createApp()
|
const providerAdapter = await vendorProvider()
|
||||||
await installOrUdpateDep()
|
const dbAdapter = await dbProvider()
|
||||||
await cleanAllSession()
|
const NAME_DIR = ['base', providerAdapter, dbAdapter].join('-')
|
||||||
await vendorProvider()
|
await createApp(NAME_DIR)
|
||||||
await dbProvider()
|
bannerDone()
|
||||||
await jsonConfig()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { startInteractive }
|
module.exports = { startInteractive }
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@bot-whatsapp/cli",
|
"name": "@bot-whatsapp/cli",
|
||||||
"version": "0.0.1",
|
"version": "0.0.72-alpha.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"private": true,
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"cross-spawn": "^7.0.3",
|
"cross-spawn": "^7.0.3",
|
||||||
@@ -11,9 +10,14 @@
|
|||||||
"kleur": "^4.1.5"
|
"kleur": "^4.1.5"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
|
"./starters/",
|
||||||
"./lib/cli/bundle.cli.cjs"
|
"./lib/cli/bundle.cli.cjs"
|
||||||
],
|
],
|
||||||
"bin": {
|
"bin": {
|
||||||
"bot": "./bin/cli.js"
|
"bot": "./bin/cli.js"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/cli"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const banner = require('../../config/banner.rollup.json')
|
const banner = require('../../config/banner.rollup.json')
|
||||||
const commonjs = require('@rollup/plugin-commonjs')
|
const commonjs = require('@rollup/plugin-commonjs')
|
||||||
|
const copy = require('rollup-plugin-copy')
|
||||||
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
||||||
const { join } = require('path')
|
const { join } = require('path')
|
||||||
|
|
||||||
@@ -12,5 +13,11 @@ module.exports = {
|
|||||||
file: PATH,
|
file: PATH,
|
||||||
format: 'cjs',
|
format: 'cjs',
|
||||||
},
|
},
|
||||||
plugins: [commonjs(), nodeResolve()],
|
plugins: [
|
||||||
|
copy({
|
||||||
|
targets: [{ src: 'starters/*', dest: join(__dirname, 'starters') }],
|
||||||
|
}),
|
||||||
|
commonjs(),
|
||||||
|
nodeResolve(),
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
21
packages/contexts/package.json
Normal file
21
packages/contexts/package.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "@bot-whatsapp/contexts",
|
||||||
|
"version": "0.0.16-alpha.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "./lib/bundle.contexts.cjs",
|
||||||
|
"files": [
|
||||||
|
"./lib/"
|
||||||
|
],
|
||||||
|
"exports": {
|
||||||
|
"./mock": "./lib/mock/index.cjs",
|
||||||
|
"./dialogflow": "./lib/dialogflow/index.cjs",
|
||||||
|
"./dialogflowcx": "./lib/dialogflow-cx/index.cjs"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@bot-whatsapp/bot": "*"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/contexts"
|
||||||
|
}
|
||||||
|
}
|
||||||
33
packages/contexts/rollup-contexts.config.js
Normal file
33
packages/contexts/rollup-contexts.config.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
const banner = require('../../config/banner.rollup.json')
|
||||||
|
const commonjs = require('@rollup/plugin-commonjs')
|
||||||
|
const { join } = require('path')
|
||||||
|
|
||||||
|
module.exports = [
|
||||||
|
{
|
||||||
|
input: join(__dirname, 'src', 'mock', 'index.js'),
|
||||||
|
output: {
|
||||||
|
banner: banner['banner.output'].join(''),
|
||||||
|
file: join(__dirname, 'lib', 'mock', 'index.cjs'),
|
||||||
|
format: 'cjs',
|
||||||
|
},
|
||||||
|
plugins: [commonjs()],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: join(__dirname, 'src', 'dialogflow', 'index.js'),
|
||||||
|
output: {
|
||||||
|
banner: banner['banner.output'].join(''),
|
||||||
|
file: join(__dirname, 'lib', 'dialogflow', 'index.cjs'),
|
||||||
|
format: 'cjs',
|
||||||
|
},
|
||||||
|
plugins: [commonjs()],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: join(__dirname, 'src', 'dialogflow-cx', 'index.js'),
|
||||||
|
output: {
|
||||||
|
banner: banner['banner.output'].join(''),
|
||||||
|
file: join(__dirname, 'lib', 'dialogflow-cx', 'index.cjs'),
|
||||||
|
format: 'cjs',
|
||||||
|
},
|
||||||
|
plugins: [commonjs()],
|
||||||
|
},
|
||||||
|
]
|
||||||
124
packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js
Normal file
124
packages/contexts/src/dialogflow-cx/dialogflow-cx.class.js
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
const { CoreClass } = require('@bot-whatsapp/bot')
|
||||||
|
const { SessionsClient } = require('@google-cloud/dialogflow-cx').v3beta1
|
||||||
|
const { existsSync, readFileSync } = require('fs')
|
||||||
|
const { join } = require('path')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Necesita extender de core.class
|
||||||
|
* handleMsg(messageInComming) // const { body, from } = messageInComming
|
||||||
|
*/
|
||||||
|
|
||||||
|
const GOOGLE_ACCOUNT_PATH = join(process.cwd(), 'google-key.json')
|
||||||
|
|
||||||
|
class DialogFlowCXContext extends CoreClass {
|
||||||
|
// Opciones del usuario
|
||||||
|
optionsDX = {
|
||||||
|
language: 'es',
|
||||||
|
location: '',
|
||||||
|
agentId: '',
|
||||||
|
}
|
||||||
|
projectId = null
|
||||||
|
configuration = null
|
||||||
|
sessionClient = null
|
||||||
|
|
||||||
|
constructor(_database, _provider, _optionsDX = {}) {
|
||||||
|
super(null, _database, _provider)
|
||||||
|
this.optionsDX = { ...this.optionsDX, ..._optionsDX }
|
||||||
|
this.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verificar conexión con servicio de DialogFlow
|
||||||
|
*/
|
||||||
|
init = () => {
|
||||||
|
if (!existsSync(GOOGLE_ACCOUNT_PATH)) {
|
||||||
|
console.log(`[ERROR]: No se encontro ${GOOGLE_ACCOUNT_PATH}`)
|
||||||
|
/**
|
||||||
|
* Emitir evento de error para que se mueste por consola dicinedo que no tiene el json
|
||||||
|
* */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.optionsDX.location.length)
|
||||||
|
throw new Error('LOCATION_NO_ENCONTRADO')
|
||||||
|
if (!this.optionsDX.agentId.length)
|
||||||
|
throw new Error('AGENTID_NO_ENCONTRADO')
|
||||||
|
|
||||||
|
const rawJson = readFileSync(GOOGLE_ACCOUNT_PATH, 'utf-8')
|
||||||
|
const { project_id, private_key, client_email } = JSON.parse(rawJson)
|
||||||
|
|
||||||
|
this.projectId = project_id
|
||||||
|
|
||||||
|
this.sessionClient = new SessionsClient({
|
||||||
|
credentials: { private_key, client_email },
|
||||||
|
apiEndpoint: `${this.optionsDX.location}-dialogflow.googleapis.com`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GLOSSARY.md
|
||||||
|
* @param {*} messageCtxInComming
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
handleMsg = async (messageCtxInComming) => {
|
||||||
|
const languageCode = this.optionsDX.language
|
||||||
|
const { from, body } = messageCtxInComming
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 📄 Creamos session de contexto basado en el numero de la persona
|
||||||
|
* para evitar este problema.
|
||||||
|
* https://github.com/codigoencasa/bot-whatsapp/pull/140
|
||||||
|
*/
|
||||||
|
|
||||||
|
const session = this.sessionClient.projectLocationAgentSessionPath(
|
||||||
|
this.projectId,
|
||||||
|
this.optionsDX.location,
|
||||||
|
this.optionsDX.agentId,
|
||||||
|
from
|
||||||
|
)
|
||||||
|
|
||||||
|
const reqDialog = {
|
||||||
|
session,
|
||||||
|
queryInput: {
|
||||||
|
text: {
|
||||||
|
text: body,
|
||||||
|
},
|
||||||
|
languageCode,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [
|
||||||
|
null,
|
||||||
|
]
|
||||||
|
|
||||||
|
const listMessages = single.queryResult.responseMessages.map((res) => {
|
||||||
|
if (res.message == 'text') {
|
||||||
|
return { answer: res.text.text[0] }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res.message == 'payload') {
|
||||||
|
const {
|
||||||
|
media = null,
|
||||||
|
buttons = [],
|
||||||
|
answer = '',
|
||||||
|
} = res.payload.fields
|
||||||
|
const buttonsArray = buttons?.listValue?.values?.map(
|
||||||
|
(btnValue) => {
|
||||||
|
const { stringValue } = btnValue.structValue.fields.body
|
||||||
|
return { body: stringValue }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
answer: answer?.stringValue,
|
||||||
|
options: {
|
||||||
|
media: media?.stringValue,
|
||||||
|
buttons: buttonsArray,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
this.sendFlowSimple(listMessages, from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = DialogFlowCXContext
|
||||||
14
packages/contexts/src/dialogflow-cx/index.js
Normal file
14
packages/contexts/src/dialogflow-cx/index.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const DialogCXFlowClass = require('./dialogflow-cx.class')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crear instancia de clase Bot
|
||||||
|
* @param {*} args
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const createBotDialog = async ({ database, provider }, _options) =>
|
||||||
|
new DialogCXFlowClass(database, provider, _options)
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
createBotDialog,
|
||||||
|
DialogCXFlowClass,
|
||||||
|
}
|
||||||
122
packages/contexts/src/dialogflow/dialogflow.class.js
Normal file
122
packages/contexts/src/dialogflow/dialogflow.class.js
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
const { CoreClass } = require('@bot-whatsapp/bot')
|
||||||
|
const dialogflow = require('@google-cloud/dialogflow')
|
||||||
|
const { existsSync, readFileSync } = require('fs')
|
||||||
|
const { join } = require('path')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Necesita extender de core.class
|
||||||
|
* handleMsg(messageInComming) // const { body, from } = messageInComming
|
||||||
|
*/
|
||||||
|
|
||||||
|
const GOOGLE_ACCOUNT_PATH = join(process.cwd(), 'google-key.json')
|
||||||
|
|
||||||
|
class DialogFlowContext extends CoreClass {
|
||||||
|
projectId = null
|
||||||
|
configuration = null
|
||||||
|
sessionClient = null
|
||||||
|
optionsDX = {
|
||||||
|
language: 'es',
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(_database, _provider, _optionsDX = {}) {
|
||||||
|
super(null, _database, _provider)
|
||||||
|
this.optionsDX = { ...this.optionsDX, ..._optionsDX }
|
||||||
|
this.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verificar conexión con servicio de DialogFlow
|
||||||
|
*/
|
||||||
|
init = () => {
|
||||||
|
if (!existsSync(GOOGLE_ACCOUNT_PATH)) {
|
||||||
|
console.log(`[ERROR]: No se encontro ${GOOGLE_ACCOUNT_PATH}`)
|
||||||
|
/**
|
||||||
|
* Emitir evento de error para que se mueste por consola dicinedo que no tiene el json
|
||||||
|
* */
|
||||||
|
}
|
||||||
|
|
||||||
|
const rawJson = readFileSync(GOOGLE_ACCOUNT_PATH, 'utf-8')
|
||||||
|
const { project_id, private_key, client_email } = JSON.parse(rawJson)
|
||||||
|
|
||||||
|
this.projectId = project_id
|
||||||
|
this.configuration = {
|
||||||
|
credentials: {
|
||||||
|
private_key,
|
||||||
|
client_email,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sessionClient = new dialogflow.SessionsClient(this.configuration)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GLOSSARY.md
|
||||||
|
* @param {*} messageCtxInComming
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
handleMsg = async (messageCtxInComming) => {
|
||||||
|
const languageCode = this.optionsDX.language
|
||||||
|
const { from, body } = messageCtxInComming
|
||||||
|
|
||||||
|
let customPayload = {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 📄 Creamos session de contexto basado en el numero de la persona
|
||||||
|
* para evitar este problema.
|
||||||
|
* https://github.com/codigoencasa/bot-whatsapp/pull/140
|
||||||
|
*/
|
||||||
|
const session = this.sessionClient.projectAgentSessionPath(
|
||||||
|
this.projectId,
|
||||||
|
from
|
||||||
|
)
|
||||||
|
const reqDialog = {
|
||||||
|
session,
|
||||||
|
queryInput: {
|
||||||
|
text: {
|
||||||
|
text: body,
|
||||||
|
languageCode,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [
|
||||||
|
null,
|
||||||
|
]
|
||||||
|
|
||||||
|
const { queryResult } = single
|
||||||
|
|
||||||
|
const msgPayload = queryResult?.fulfillmentMessages?.find(
|
||||||
|
(a) => a.message === 'payload'
|
||||||
|
)
|
||||||
|
|
||||||
|
// Revisamos si el dialogFlow tiene multimedia
|
||||||
|
if (msgPayload && msgPayload?.payload) {
|
||||||
|
const { fields } = msgPayload.payload
|
||||||
|
const mapButtons = fields?.buttons?.listValue?.values.map((m) => {
|
||||||
|
return { body: m?.structValue?.fields?.body?.stringValue }
|
||||||
|
})
|
||||||
|
|
||||||
|
customPayload = {
|
||||||
|
options: {
|
||||||
|
media: fields?.media?.stringValue,
|
||||||
|
buttons: mapButtons,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const ctxFromDX = {
|
||||||
|
...customPayload,
|
||||||
|
answer: fields?.answer?.stringValue,
|
||||||
|
}
|
||||||
|
this.sendFlowSimple([ctxFromDX], from)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const ctxFromDX = {
|
||||||
|
answer: queryResult?.fulfillmentText,
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sendFlowSimple([ctxFromDX], from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = DialogFlowContext
|
||||||
14
packages/contexts/src/dialogflow/index.js
Normal file
14
packages/contexts/src/dialogflow/index.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const DialogFlowClass = require('./dialogflow.class')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crear instancia de clase Bot
|
||||||
|
* @param {*} args
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const createBotDialog = async ({ database, provider }) =>
|
||||||
|
new DialogFlowClass(database, provider)
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
createBotDialog,
|
||||||
|
DialogFlowClass,
|
||||||
|
}
|
||||||
14
packages/contexts/src/mock/index.js
Normal file
14
packages/contexts/src/mock/index.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const MockClass = require('./mock.class')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crear instancia de clase Bot
|
||||||
|
* @param {*} args
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const createBotMock = async ({ database, provider }) =>
|
||||||
|
new MockClass(database, provider)
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
createBotMock,
|
||||||
|
MockClass,
|
||||||
|
}
|
||||||
24
packages/contexts/src/mock/mock.class.js
Normal file
24
packages/contexts/src/mock/mock.class.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
const { CoreClass } = require('@bot-whatsapp/bot')
|
||||||
|
/**
|
||||||
|
* Necesita extender de core.class
|
||||||
|
* handleMsg(messageInComming) // const { body, from } = messageInComming
|
||||||
|
*/
|
||||||
|
|
||||||
|
class MockContext extends CoreClass {
|
||||||
|
constructor(_database, _provider) {
|
||||||
|
super(null, _database, _provider)
|
||||||
|
}
|
||||||
|
|
||||||
|
init = () => {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GLOSSARY.md
|
||||||
|
* @param {*} messageCtxInComming
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
handleMsg = async () => {
|
||||||
|
console.log('DEBUG:')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = MockContext
|
||||||
2
packages/create-bot-whatsapp/bin/create.js
Normal file → Executable file
2
packages/create-bot-whatsapp/bin/create.js
Normal file → Executable file
@@ -1,3 +1,3 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
const main = require('../lib/bin/bundle.create.cjs')
|
const main = require('../lib/bundle.create-bot-whatsapp.cjs')
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
|
const { startInteractive } = require('../cli')
|
||||||
/**
|
/**
|
||||||
* Main function
|
* Voy a llamar directo a CLI
|
||||||
|
* Temporalmente luego mejoro esta
|
||||||
|
* parte
|
||||||
|
* @returns
|
||||||
*/
|
*/
|
||||||
const main = () => {
|
const main = () => startInteractive()
|
||||||
console.clear()
|
|
||||||
console.log(``)
|
|
||||||
console.log(`[PostInstall]: Este es el main function.`)
|
|
||||||
console.log(`[PostInstall]: 👌 Aqui podrias instalar cosas`)
|
|
||||||
console.log(``)
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = main
|
module.exports = main
|
||||||
|
|||||||
@@ -1,13 +1,19 @@
|
|||||||
{
|
{
|
||||||
"name": "create-bot-whatsapp",
|
"name": "create-bot-whatsapp",
|
||||||
"version": "0.0.1",
|
"version": "0.0.93-alpha.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./lib/bin/bundle.create.cjs",
|
"main": "./lib/bundle.create-bot-whatsapp.cjs",
|
||||||
"private": true,
|
"files": [
|
||||||
|
"./starters/",
|
||||||
|
"./bin/create.js",
|
||||||
|
"./lib/bundle.create-bot-whatsapp.cjs"
|
||||||
|
],
|
||||||
|
"bin": "./bin/create.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bot-whatsapp/cli": "*"
|
"@bot-whatsapp/cli": "*"
|
||||||
},
|
},
|
||||||
"bin": {
|
"repository": {
|
||||||
"bot": "./lib/bin/bundle.create.cjs"
|
"type": "git",
|
||||||
|
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/create-bot-whatsapp"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
const banner = require('../../config/banner.rollup.json')
|
const banner = require('../../config/banner.rollup.json')
|
||||||
const commonjs = require('@rollup/plugin-commonjs')
|
const commonjs = require('@rollup/plugin-commonjs')
|
||||||
|
const copy = require('rollup-plugin-copy')
|
||||||
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
||||||
const { join } = require('path')
|
const { join } = require('path')
|
||||||
|
|
||||||
const PATH = join(__dirname, 'lib', 'bin', 'bundle.create.cjs')
|
const PATH = join(__dirname, 'lib', 'bundle.create-bot-whatsapp.cjs')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
input: join(__dirname, 'index.js'),
|
input: join(__dirname, 'index.js'),
|
||||||
@@ -12,5 +13,11 @@ module.exports = {
|
|||||||
file: PATH,
|
file: PATH,
|
||||||
format: 'cjs',
|
format: 'cjs',
|
||||||
},
|
},
|
||||||
plugins: [commonjs(), nodeResolve()],
|
plugins: [
|
||||||
|
copy({
|
||||||
|
targets: [{ src: 'starters/*', dest: join(__dirname, 'starters') }],
|
||||||
|
}),
|
||||||
|
commonjs(),
|
||||||
|
nodeResolve(),
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,27 @@
|
|||||||
{
|
{
|
||||||
"name": "@bot-whatsapp/database",
|
"name": "@bot-whatsapp/database",
|
||||||
"version": "0.0.1",
|
"version": "0.0.64-alpha.0",
|
||||||
"description": "Esto es el conector a mysql, pg, mongo",
|
"description": "Esto es el conector a mysql, pg, mongo",
|
||||||
"main": "./lib/mock/index.cjs",
|
"main": "./lib/mock/index.cjs",
|
||||||
"private": true,
|
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
|
"files": [
|
||||||
|
"./lib/"
|
||||||
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"mongodb": "^4.11.0",
|
"mongodb": "^4.11.0",
|
||||||
"mysql2": "^2.3.3",
|
"mysql2": "^2.3.3"
|
||||||
"stormdb": "^0.6.0"
|
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
"./mock": "./lib/mock/index.cjs",
|
"./mock": "./lib/mock/index.cjs",
|
||||||
"./mongo": "./lib/mongo/index.cjs",
|
"./mongo": "./lib/mongo/index.cjs",
|
||||||
"./json-file": "./lib/json-file/index.cjs",
|
"./json": "./lib/json/index.cjs",
|
||||||
"./mysql": "./lib/mysql/index.cjs"
|
"./mysql": "./lib/mysql/index.cjs"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/database"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,10 +31,11 @@ module.exports = [
|
|||||||
plugins: [commonjs()],
|
plugins: [commonjs()],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: join(__dirname, 'src', 'json-file', 'index.js'),
|
input: join(__dirname, 'src', 'json', 'index.js'),
|
||||||
output: {
|
output: {
|
||||||
banner: banner['banner.output'].join(''),
|
banner: banner['banner.output'].join(''),
|
||||||
file: join(__dirname, 'lib', 'json-file', 'index.cjs'),
|
file: join(__dirname, 'lib', 'json', 'index.cjs'),
|
||||||
|
format: 'cjs',
|
||||||
},
|
},
|
||||||
plugins: [commonjs()],
|
plugins: [commonjs()],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
const path = require('path')
|
|
||||||
const StormDB = require('stormdb')
|
|
||||||
const engine = new StormDB.localFileEngine(
|
|
||||||
path.join(process.cwd(), './db.stormdb')
|
|
||||||
)
|
|
||||||
|
|
||||||
class JsonFileAdapter {
|
|
||||||
db
|
|
||||||
listHistory = []
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.init().then()
|
|
||||||
}
|
|
||||||
|
|
||||||
init() {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
this.db = new StormDB(engine)
|
|
||||||
this.db.default({ history: [] })
|
|
||||||
resolve(this.db)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
getPrevByNumber = async (from) => {
|
|
||||||
const response = await this.db.get('history')
|
|
||||||
const { history } = response.state
|
|
||||||
|
|
||||||
if (!history.length) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = history.filter((res) => res.from === from).pop()
|
|
||||||
|
|
||||||
return {
|
|
||||||
...result,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
save = async (ctx) => {
|
|
||||||
await this.db
|
|
||||||
.get('history')
|
|
||||||
.push({ ...ctx })
|
|
||||||
.save()
|
|
||||||
console.log('Guardado en DB...', ctx)
|
|
||||||
this.listHistory.push(ctx)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = JsonFileAdapter
|
|
||||||
64
packages/database/src/json/index.js
Normal file
64
packages/database/src/json/index.js
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
const { join } = require('path')
|
||||||
|
const { existsSync, writeFileSync, readFileSync } = require('fs')
|
||||||
|
|
||||||
|
class JsonFileAdapter {
|
||||||
|
db
|
||||||
|
pathFile
|
||||||
|
listHistory = []
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.pathFile = join(process.cwd(), 'db.json')
|
||||||
|
this.init().then()
|
||||||
|
}
|
||||||
|
|
||||||
|
databaseExists() {
|
||||||
|
return existsSync(this.pathFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
async init() {
|
||||||
|
const dbExists = await this.databaseExists()
|
||||||
|
|
||||||
|
if (!dbExists) {
|
||||||
|
const data = {
|
||||||
|
history: [],
|
||||||
|
}
|
||||||
|
await this.saveData(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readDatabase() {
|
||||||
|
const db = readFileSync(this.pathFile)
|
||||||
|
return JSON.parse(db)
|
||||||
|
}
|
||||||
|
|
||||||
|
saveData(data) {
|
||||||
|
writeFileSync(this.pathFile, JSON.stringify(data, null, 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
getPrevByNumber = async (from) => {
|
||||||
|
const { history } = await this.readDatabase()
|
||||||
|
|
||||||
|
if (!history.length) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = history.filter((res) => res.from === from).pop()
|
||||||
|
|
||||||
|
return {
|
||||||
|
...result,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
save = async (ctx) => {
|
||||||
|
this.db = await this.readDatabase()
|
||||||
|
|
||||||
|
this.db.history.push(ctx)
|
||||||
|
|
||||||
|
await this.saveData(this.db)
|
||||||
|
|
||||||
|
this.listHistory.push(ctx)
|
||||||
|
console.log('Guardado en DB...', ctx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = JsonFileAdapter
|
||||||
@@ -1,23 +1,20 @@
|
|||||||
require('dotenv').config()
|
|
||||||
const { MongoClient } = require('mongodb')
|
const { MongoClient } = require('mongodb')
|
||||||
|
|
||||||
const DB_URI = process.env.DB_URI || 'mongodb://0.0.0.0:27017'
|
|
||||||
const DB_NAME = process.env.DB_NAME || 'db_bot'
|
|
||||||
|
|
||||||
class MongoAdapter {
|
class MongoAdapter {
|
||||||
db
|
db
|
||||||
listHistory = []
|
listHistory = []
|
||||||
|
credentials = { dbUri: null, dbName: null }
|
||||||
constructor() {
|
constructor(_credentials) {
|
||||||
|
this.credentials = _credentials
|
||||||
this.init().then()
|
this.init().then()
|
||||||
}
|
}
|
||||||
|
|
||||||
init = async () => {
|
init = async () => {
|
||||||
try {
|
try {
|
||||||
const client = new MongoClient(DB_URI, {})
|
const client = new MongoClient(this.credentials.dbUri, {})
|
||||||
await client.connect()
|
await client.connect()
|
||||||
console.log('🆗 Conexión Correcta DB')
|
console.log('🆗 Conexión Correcta DB')
|
||||||
const db = client.db(DB_NAME)
|
const db = client.db(this.credentials.dbName)
|
||||||
this.db = db
|
this.db = db
|
||||||
return true
|
return true
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const mysql = require('mysql2')
|
|||||||
class MyslAdapter {
|
class MyslAdapter {
|
||||||
db
|
db
|
||||||
listHistory = []
|
listHistory = []
|
||||||
credentials = { host: null, user: null, database: null }
|
credentials = { host: null, user: null, database: null, password: null }
|
||||||
|
|
||||||
constructor(_credentials) {
|
constructor(_credentials) {
|
||||||
this.credentials = _credentials
|
this.credentials = _credentials
|
||||||
|
|||||||
@@ -6,35 +6,35 @@ module.exports = {
|
|||||||
node: true,
|
node: true,
|
||||||
},
|
},
|
||||||
extends: [
|
extends: [
|
||||||
'eslint:recommended',
|
"eslint:recommended",
|
||||||
'plugin:@typescript-eslint/recommended',
|
"plugin:@typescript-eslint/recommended",
|
||||||
'plugin:qwik/recommended',
|
"plugin:qwik/recommended",
|
||||||
],
|
],
|
||||||
parser: '@typescript-eslint/parser',
|
parser: "@typescript-eslint/parser",
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
tsconfigRootDir: __dirname,
|
tsconfigRootDir: __dirname,
|
||||||
project: ['./tsconfig.json'],
|
project: ["./tsconfig.json"],
|
||||||
ecmaVersion: 2021,
|
ecmaVersion: 2021,
|
||||||
sourceType: 'module',
|
sourceType: "module",
|
||||||
ecmaFeatures: {
|
ecmaFeatures: {
|
||||||
jsx: true,
|
jsx: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: ['@typescript-eslint'],
|
plugins: ["@typescript-eslint"],
|
||||||
rules: {
|
rules: {
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
"@typescript-eslint/no-explicit-any": "off",
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||||
'@typescript-eslint/no-inferrable-types': 'off',
|
"@typescript-eslint/no-inferrable-types": "off",
|
||||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
"@typescript-eslint/no-non-null-assertion": "off",
|
||||||
'@typescript-eslint/no-empty-interface': 'off',
|
"@typescript-eslint/no-empty-interface": "off",
|
||||||
'@typescript-eslint/no-namespace': 'off',
|
"@typescript-eslint/no-namespace": "off",
|
||||||
'@typescript-eslint/no-empty-function': 'off',
|
"@typescript-eslint/no-empty-function": "off",
|
||||||
'@typescript-eslint/no-this-alias': 'off',
|
"@typescript-eslint/no-this-alias": "off",
|
||||||
'@typescript-eslint/ban-types': 'off',
|
"@typescript-eslint/ban-types": "off",
|
||||||
'@typescript-eslint/ban-ts-comment': 'off',
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
'prefer-spread': 'off',
|
"prefer-spread": "off",
|
||||||
'no-case-declarations': 'off',
|
"no-case-declarations": "off",
|
||||||
'no-console': 'off',
|
"no-console": "off",
|
||||||
'@typescript-eslint/no-unused-vars': ['error'],
|
"@typescript-eslint/no-unused-vars": ["error"],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
7
packages/docs/.gitignore
vendored
7
packages/docs/.gitignore
vendored
@@ -5,7 +5,7 @@
|
|||||||
/server
|
/server
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
node_modules
|
node_modules/
|
||||||
|
|
||||||
# Cache
|
# Cache
|
||||||
.cache
|
.cache
|
||||||
@@ -37,5 +37,10 @@ lerna-debug.log*
|
|||||||
.yarn/*
|
.yarn/*
|
||||||
!.yarn/releases
|
!.yarn/releases
|
||||||
|
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
# Cloudflare
|
# Cloudflare
|
||||||
functions/**/*.js
|
functions/**/*.js
|
||||||
|
|
||||||
|
# Netlify
|
||||||
|
.netlify
|
||||||
|
|||||||
6
packages/docs/.stackblitzrc
Normal file
6
packages/docs/.stackblitzrc
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"startCommand": "npm start",
|
||||||
|
"env": {
|
||||||
|
"ENABLE_CJS_IMPORTS": true
|
||||||
|
}
|
||||||
|
}
|
||||||
21
packages/docs/LICENSE.md
Normal file
21
packages/docs/LICENSE.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 onWidget
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -1,11 +1,356 @@
|
|||||||
### 😎 Documentación Bot-Whatsapp
|
# 💠 Qwind
|
||||||
|
|
||||||
👉 [https://bot-whatsapp.pages.dev/](https://bot-whatsapp.pages.dev/)
|
**Qwind** is a free and open-source template to make your website using **[Qwik](https://qwik.builder.io/) + [Tailwind CSS](https://tailwindcss.com/)**. Ready to start a new project and designed taking into account best practices.
|
||||||
|
|
||||||
Se esta iniciando una documentación oficial sobre como usar e implementar los diferentes funcionalidades del bot-wahtsapp
|
## Features
|
||||||
|
|
||||||
|
- ✅ Integration with **Tailwind CSS** supporting **Dark mode**.
|
||||||
|
- ✅ **Production-ready** scores in [Lighthouse](https://web.dev/measure/) and [PageSpeed Insights](https://pagespeed.web.dev/) reports.
|
||||||
|
- ✅ **Image optimization** and **Font optimization**.
|
||||||
|
|
||||||
La idea es cada usuario pueda ir aportando a la documentacion y formar parte de este proyecto.
|
<br>
|
||||||
|
|
||||||
|
<img src="./screenshot.jpg" alt="Qwind Theme Screenshot">
|
||||||
|
|
||||||
##### ¿Como agregar documentación? [Video]
|
[](https://onwidget.com)
|
||||||
|
[](https://github.com/onwidget/qwind/blob/main/LICENSE.md)
|
||||||
|
[](https://github.com/onwidget)
|
||||||
|
[](https://github.com/onwidget/qwind#contributing)
|
||||||
|
[](https://snyk.io/test/github/onwidget/qwind)
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<details open>
|
||||||
|
<summary>Table of Contents</summary>
|
||||||
|
|
||||||
|
- [Demo](#demo)
|
||||||
|
- [Getting started](#getting-started)
|
||||||
|
- [Project structure](#project-structure)
|
||||||
|
- [Commands](#commands)
|
||||||
|
- [Configuration](#configuration)
|
||||||
|
- [Deploy](#deploy)
|
||||||
|
- [Roadmap](#roadmap)
|
||||||
|
- [Contributing](#contributing)
|
||||||
|
- [Acknowledgements](#acknowledgements)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
📌 [https://qwind.pages.dev/](https://qwind.pages.dev/)
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
This project is using Qwik with [QwikCity](https://qwik.builder.io/qwikcity/overview/). QwikCity is just a extra set of tools on top of Qwik to make it easier to build a full site, including directory-based routing, layouts, and more.
|
||||||
|
|
||||||
|
### Project structure
|
||||||
|
|
||||||
|
Inside **Qwind** template, you'll see the following folders and files:
|
||||||
|
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── adaptors/
|
||||||
|
| └── static/
|
||||||
|
| └── vite.config.ts
|
||||||
|
├── public/
|
||||||
|
│ ├── favicon.svg
|
||||||
|
│ ├── manifest.json
|
||||||
|
│ └── robots.txt
|
||||||
|
├── src/
|
||||||
|
│ ├── assets/
|
||||||
|
│ │ ├── images/
|
||||||
|
| | └── styles/
|
||||||
|
| | └── global.css
|
||||||
|
│ ├── components/
|
||||||
|
│ │ ├── atoms/
|
||||||
|
│ │ ├── core/
|
||||||
|
│ │ ├── icons/
|
||||||
|
| | └── widgets/
|
||||||
|
| | ├── Header.astro
|
||||||
|
| | ├── Footer.astro
|
||||||
|
| | └── ...
|
||||||
|
│ ├── routes/
|
||||||
|
│ | ├── blog/
|
||||||
|
│ | ├── index.astro
|
||||||
|
| | ├── layout.tsx
|
||||||
|
| | └-- service-worker.ts
|
||||||
|
│ ├── config.mjs
|
||||||
|
│ ├── entry.dev.tsx
|
||||||
|
│ ├── entry.preview.tsx
|
||||||
|
│ ├── entry.ssr.tsx
|
||||||
|
│ └── root.tsx
|
||||||
|
├── package.json
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
- `src/routes`: Provides the directory based routing, which can include a hierarchy of `layout.tsx` layout files, and an `index.tsx` file as the page. Additionally, `index.ts` files are endpoints. Please see the [routing docs](https://qwik.builder.io/qwikcity/routing/overview/) for more info.
|
||||||
|
|
||||||
|
- `src/components`: Recommended directory for components.
|
||||||
|
|
||||||
|
- `public`: Any static assets, like images, can be placed in the public directory. Please see the [Vite public directory](https://vitejs.dev/guide/assets.html#the-public-directory) for more info.
|
||||||
|
|
||||||
|
[](https://githubbox.com/onwidget/qwind/tree/main)
|
||||||
|
|
||||||
|
> **Seasoned qwik expert?** Delete this file. Update `config.mjs` and contents. Have fun!
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
### Commands
|
||||||
|
|
||||||
|
All commands are run from the root of the project, from a terminal:
|
||||||
|
|
||||||
|
| Command | Action |
|
||||||
|
| :-------------------- | :------------------------------------------------- |
|
||||||
|
| `npm install` | Installs dependencies |
|
||||||
|
| `npm run dev` | Starts local dev server at `127.0.0.1:5173/` |
|
||||||
|
| `npm run build` | Build your production site to `./dist/` |
|
||||||
|
| `npm run preview` | Preview your build locally, before deploying |
|
||||||
|
| `npm run fmt` | Format codes with Prettier |
|
||||||
|
| `npm run lint` | Run Eslint |
|
||||||
|
| `npm run qwik ...` | Run CLI commands like `qwik add`, `qwik build` |
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Basic configuration file: `./src/config.mjs`
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
export const SITE = {
|
||||||
|
name: 'Example',
|
||||||
|
|
||||||
|
origin: 'https://example.com',
|
||||||
|
basePathname: '/', // Change this if you need to deploy to Github Pages, for example
|
||||||
|
trailingSlash: true, // Generate permalinks with or without "/" at the end
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
### Deploy
|
||||||
|
|
||||||
|
#### Deploy to production (manual)
|
||||||
|
|
||||||
|
You can create an optimized production build with:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
Now, your website is ready to be deployed. All generated files are located at
|
||||||
|
`dist` folder, which you can deploy the folder to any hosting service you
|
||||||
|
prefer.
|
||||||
|
|
||||||
|
#### Deploy to Netlify
|
||||||
|
|
||||||
|
Clone this repository on own GitHub account and deploy to Netlify:
|
||||||
|
|
||||||
|
[](https://app.netlify.com/start/deploy?repository=https://github.com/onwidget/qwind)
|
||||||
|
|
||||||
|
#### Deploy to Vercel
|
||||||
|
|
||||||
|
Clone this repository on own GitHub account and deploy to Vercel:
|
||||||
|
|
||||||
|
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fonwidget%2Fqwind)
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
### Base
|
||||||
|
- [ ] Create utilities to generate permalinks tailored to the domain and base pathname.
|
||||||
|
- [ ] Simplify the way to optimize images.
|
||||||
|
- [ ] Create component to make SEO simpler and more intuitive.
|
||||||
|
- [ ] Create configurable blog with categories, tags and authors using MDX.
|
||||||
|
- [ ] Add more frequently used pages (Portfolio, Services, Contact, Docs ...).
|
||||||
|
- [ ] Find or create a library to have more icon sources available.
|
||||||
|
- [ ] Refactor some code that doesn't follow Qwik conventions yet.
|
||||||
|
|
||||||
|
### Advanced
|
||||||
|
|
||||||
|
- [ ] Achieve perfect 100% Google Page Speed score.
|
||||||
|
- [ ] Insert complex javascript example widget on home page to demonstrate Qwik features.
|
||||||
|
- [ ] Create small illustrative admin backend.
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
If you have any idea, suggestions or find any bugs, feel free to open a discussion, an issue or create a pull request.
|
||||||
|
That would be very useful for all of us and we would be happy to listen and take action.
|
||||||
|
|
||||||
|
## Acknowledgements
|
||||||
|
|
||||||
|
Initially created by [onWidget](https://onwidget.com) and maintained by a community of [contributors](https://github.com/onwidget/qwind/graphs/contributors).
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
**Qwind** is licensed under the MIT license — see the [LICENSE](https://github.com/onwidget/qwind/blob/main/LICENSE.md) file for details.
|
||||||
|
|
||||||
|
## Cloudflare Pages
|
||||||
|
|
||||||
|
Cloudflare's [wrangler](https://github.com/cloudflare/wrangler) CLI can be used to preview a production build locally. To start a local server, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run serve
|
||||||
|
```
|
||||||
|
|
||||||
|
Then visit [http://localhost:8787/](http://localhost:8787/)
|
||||||
|
|
||||||
|
### Deployments
|
||||||
|
|
||||||
|
[Cloudflare Pages](https://pages.cloudflare.com/) are deployable through their [Git provider integrations](https://developers.cloudflare.com/pages/platform/git-integration/).
|
||||||
|
|
||||||
|
If you don't already have an account, then [create a Cloudflare account here](https://dash.cloudflare.com/sign-up/pages). Next go to your dashboard and follow the [Cloudflare Pages deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-anything/).
|
||||||
|
|
||||||
|
Within the projects "Settings" for "Build and deployments", the "Build command" should be `npm run build`, and the "Build output directory" should be set to `dist`.
|
||||||
|
|
||||||
|
### Function Invocation Routes
|
||||||
|
|
||||||
|
Cloudflare Page's [function-invocation-routes config](https://developers.cloudflare.com/pages/platform/functions/function-invocation-routes/) can be used to include, or exclude, certain paths to be used by the worker functions. Having a `_routes.json` file gives developers more granular control over when your Function is invoked.
|
||||||
|
This is useful to determine if a page response should be Server-Side Rendered (SSR) or if the response should use a static-site generated (SSG) `index.html` file.
|
||||||
|
|
||||||
|
By default, the Cloudflare pages adaptor _does not_ include a `public/_routes.json` config, but rather it is auto-generated from the build by the Cloudflare adaptor. An example of an auto-generate `dist/_routes.json` would be:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"include": [
|
||||||
|
"/*"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"/_headers",
|
||||||
|
"/_redirects",
|
||||||
|
"/build/*",
|
||||||
|
"/favicon.ico",
|
||||||
|
"/manifest.json",
|
||||||
|
"/service-worker.js",
|
||||||
|
"/about"
|
||||||
|
],
|
||||||
|
"version": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In the above example, it's saying _all_ pages should be SSR'd. However, the root static files such as `/favicon.ico` and any static assets in `/build/*` should be excluded from the Functions, and instead treated as a static file.
|
||||||
|
|
||||||
|
In most cases the generated `dist/_routes.json` file is ideal. However, if you need more granular control over each path, you can instead provide you're own `public/_routes.json` file. When the project provides its own `public/_routes.json` file, then the Cloudflare adaptor will not auto-generate the routes config and instead use the committed one within the `public` directory.
|
||||||
|
|
||||||
|
## Cloudflare Pages
|
||||||
|
|
||||||
|
Cloudflare's [wrangler](https://github.com/cloudflare/wrangler) CLI can be used to preview a production build locally. To start a local server, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run serve
|
||||||
|
```
|
||||||
|
|
||||||
|
Then visit [http://localhost:8787/](http://localhost:8787/)
|
||||||
|
|
||||||
|
### Deployments
|
||||||
|
|
||||||
|
[Cloudflare Pages](https://pages.cloudflare.com/) are deployable through their [Git provider integrations](https://developers.cloudflare.com/pages/platform/git-integration/).
|
||||||
|
|
||||||
|
If you don't already have an account, then [create a Cloudflare account here](https://dash.cloudflare.com/sign-up/pages). Next go to your dashboard and follow the [Cloudflare Pages deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-anything/).
|
||||||
|
|
||||||
|
Within the projects "Settings" for "Build and deployments", the "Build command" should be `npm run build`, and the "Build output directory" should be set to `dist`.
|
||||||
|
|
||||||
|
### Function Invocation Routes
|
||||||
|
|
||||||
|
Cloudflare Page's [function-invocation-routes config](https://developers.cloudflare.com/pages/platform/functions/function-invocation-routes/) can be used to include, or exclude, certain paths to be used by the worker functions. Having a `_routes.json` file gives developers more granular control over when your Function is invoked.
|
||||||
|
This is useful to determine if a page response should be Server-Side Rendered (SSR) or if the response should use a static-site generated (SSG) `index.html` file.
|
||||||
|
|
||||||
|
By default, the Cloudflare pages adaptor _does not_ include a `public/_routes.json` config, but rather it is auto-generated from the build by the Cloudflare adaptor. An example of an auto-generate `dist/_routes.json` would be:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"include": [
|
||||||
|
"/*"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"/_headers",
|
||||||
|
"/_redirects",
|
||||||
|
"/build/*",
|
||||||
|
"/favicon.ico",
|
||||||
|
"/manifest.json",
|
||||||
|
"/service-worker.js",
|
||||||
|
"/about"
|
||||||
|
],
|
||||||
|
"version": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In the above example, it's saying _all_ pages should be SSR'd. However, the root static files such as `/favicon.ico` and any static assets in `/build/*` should be excluded from the Functions, and instead treated as a static file.
|
||||||
|
|
||||||
|
In most cases the generated `dist/_routes.json` file is ideal. However, if you need more granular control over each path, you can instead provide you're own `public/_routes.json` file. When the project provides its own `public/_routes.json` file, then the Cloudflare adaptor will not auto-generate the routes config and instead use the committed one within the `public` directory.
|
||||||
|
|
||||||
|
## Express Server
|
||||||
|
|
||||||
|
This app has a minimal [Express server](https://expressjs.com/) implementation. After running a full build, you can preview the build using the command:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm run serve
|
||||||
|
```
|
||||||
|
|
||||||
|
Then visit [http://localhost:8080/](http://localhost:8080/)
|
||||||
|
|
||||||
|
## Netlify
|
||||||
|
|
||||||
|
This starter site is configured to deploy to [Netlify Edge Functions](https://docs.netlify.com/edge-functions/overview/), which means it will be rendered at an edge location near to your users.
|
||||||
|
|
||||||
|
### Local development
|
||||||
|
|
||||||
|
The [Netlify CLI](https://docs.netlify.com/cli/get-started/) can be used to preview a production build locally. To do so: First build your site, then to start a local server, run:
|
||||||
|
|
||||||
|
1. Install Netlify CLI globally `npm i -g netlify-cli`.
|
||||||
|
2. Build your site with both ssr and static `npm run build`.
|
||||||
|
3. Start a local server with `npm run serve`.
|
||||||
|
In this project, `npm run serve` uses the `netlify dev` command to spin up a server that can handle Netlify's Edge Functions locally.
|
||||||
|
4. Visit [http://localhost:8888/](http://localhost:8888/) to check out your site.
|
||||||
|
|
||||||
|
### Edge Functions Declarations
|
||||||
|
|
||||||
|
[Netlify Edge Functions declarations](https://docs.netlify.com/edge-functions/declarations/)
|
||||||
|
can be configured to run on specific URL patterns. Each edge function declaration associates
|
||||||
|
one site path pattern with one function to execute on requests that match the path. A single request can execute a chain of edge functions from a series of declarations. A single edge function can be associated with multiple paths across various declarations.
|
||||||
|
|
||||||
|
This is useful to determine if a page response should be Server-Side Rendered (SSR) or
|
||||||
|
if the response should use a static-site generated (SSG) `index.html` file instead.
|
||||||
|
|
||||||
|
By default, the Netlify Edge adaptor will generate a `.netlify/edge-middleware/manifest.json` file, which is used by the Netlify deployment to determine which paths should, and should not, use edge functions.
|
||||||
|
|
||||||
|
To override the generated manifest, you can [add a declaration](https://docs.netlify.com/edge-functions/declarations/#add-a-declaration) to the `netlify.toml` using the `[[edge_functions]]` config. For example:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[edge_functions]]
|
||||||
|
path = "/admin"
|
||||||
|
function = "auth"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deployments
|
||||||
|
|
||||||
|
You can [deploy your site to Netlify](https://docs.netlify.com/site-deploys/create-deploys/) either via a Git provider integration or through the Netlify CLI. This starter site includes a `netlify.toml` file to configure your build for deployment.
|
||||||
|
|
||||||
|
#### Deploying via Git
|
||||||
|
|
||||||
|
Once your site has been pushed to your Git provider, you can either link it [in the Netlify UI](https://app.netlify.com/start) or use the CLI. To link your site to a Git provider from the Netlify CLI, run the command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
netlify link
|
||||||
|
```
|
||||||
|
|
||||||
|
This sets up [continuous deployment](https://docs.netlify.com/site-deploys/create-deploys/#deploy-with-git) for your site's repo. Whenever you push new commits to your repo, Netlify starts the build process..
|
||||||
|
|
||||||
|
#### Deploying manually via the CLI
|
||||||
|
|
||||||
|
If you wish to deploy from the CLI rather than using Git, you can use the command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
netlify deploy --build
|
||||||
|
```
|
||||||
|
|
||||||
|
You must use the `--build` flag whenever you deploy. This ensures that the Edge Functions that this starter site relies on are generated and available when you deploy your site.
|
||||||
|
|
||||||
|
Add `--prod` flag to deploy to production.
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
import { cloudflarePagesAdaptor } from '@builder.io/qwik-city/adaptors/cloudflare-pages/vite';
|
|
||||||
import { extendConfig } from '@builder.io/qwik-city/vite';
|
|
||||||
import baseConfig from '../../vite.config';
|
|
||||||
|
|
||||||
export default extendConfig(baseConfig, () => {
|
|
||||||
return {
|
|
||||||
build: {
|
|
||||||
ssr: true,
|
|
||||||
rollupOptions: {
|
|
||||||
input: ['src/entry.cloudflare-pages.tsx', '@qwik-city-plan'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
cloudflarePagesAdaptor({
|
|
||||||
staticGenerate: true,
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
});
|
|
||||||
20
packages/docs/adaptors/netlify-edge/vite.config.ts
Normal file
20
packages/docs/adaptors/netlify-edge/vite.config.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { netifyEdgeAdaptor } from '@builder.io/qwik-city/adaptors/netlify-edge/vite'
|
||||||
|
import { extendConfig } from '@builder.io/qwik-city/vite'
|
||||||
|
import baseConfig from '../../vite.config'
|
||||||
|
|
||||||
|
export default extendConfig(baseConfig, () => {
|
||||||
|
return {
|
||||||
|
build: {
|
||||||
|
ssr: true,
|
||||||
|
rollupOptions: {
|
||||||
|
input: ['src/entry.netlify-edge.tsx', '@qwik-city-plan'],
|
||||||
|
},
|
||||||
|
outDir: '.netlify/edge-functions/entry.netlify-edge',
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
netifyEdgeAdaptor({
|
||||||
|
staticGenerate: true,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
})
|
||||||
21
packages/docs/adaptors/static/vite.config.ts
Normal file
21
packages/docs/adaptors/static/vite.config.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { staticAdaptor } from '@builder.io/qwik-city/adaptors/static/vite'
|
||||||
|
import { extendConfig } from '@builder.io/qwik-city/vite'
|
||||||
|
import baseConfig from '../../vite.config'
|
||||||
|
|
||||||
|
import { SITE } from '../../src/config.mjs'
|
||||||
|
|
||||||
|
export default extendConfig(baseConfig, () => {
|
||||||
|
return {
|
||||||
|
build: {
|
||||||
|
ssr: true,
|
||||||
|
rollupOptions: {
|
||||||
|
input: ['@qwik-city-plan'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
staticAdaptor({
|
||||||
|
origin: SITE.origin,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
// Cloudflare Pages Functions
|
// Cloudflare Pages Functions
|
||||||
// https://developers.cloudflare.com/pages/platform/functions/
|
// https://developers.cloudflare.com/pages/platform/functions/
|
||||||
export { onRequest } from '../server/entry.cloudflare-pages';
|
export { onRequest } from '../server/entry.cloudflare-pages'
|
||||||
|
|||||||
7
packages/docs/netlify.toml
Normal file
7
packages/docs/netlify.toml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[build]
|
||||||
|
publish = "dist"
|
||||||
|
command = "npm run build"
|
||||||
|
|
||||||
|
[[edge_functions]]
|
||||||
|
path = "/*"
|
||||||
|
function = "entry.netlify-edge"
|
||||||
@@ -1,44 +1,56 @@
|
|||||||
{
|
{
|
||||||
"name": "bot-whatsapp-docs",
|
"name": "qwind",
|
||||||
"version": "0.0.1",
|
"description": "A template to make your website using Qwik + Tailwind CSS.",
|
||||||
"description": "Basic start point to build a docs site with Qwik",
|
"version": "0.1.1",
|
||||||
"engines": {
|
|
||||||
"node": ">=15.0.0"
|
|
||||||
},
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "qwik build",
|
"build": "qwik build && npm run subfont",
|
||||||
"build.client": "vite build",
|
"build.client": "vite build",
|
||||||
"build.preview": "vite build --ssr src/entry.preview.tsx",
|
"build.preview": "vite build --ssr src/entry.preview.tsx",
|
||||||
"build.server": "vite build -c adaptors/cloudflare-pages/vite.config.ts",
|
"build.server": "vite build -c adaptors/netlify-edge/vite.config.ts",
|
||||||
"build.types": "tsc --incremental --noEmit",
|
"build.types": "tsc --incremental --noEmit",
|
||||||
"deploy": "wrangler pages dev ./dist",
|
"deploy": "netlify deploy --prod",
|
||||||
"dev": "vite --mode ssr",
|
"dev": "vite --host --mode ssr",
|
||||||
"dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force",
|
"dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force",
|
||||||
"fmt": "prettier --write .",
|
"fmt": "prettier --write .",
|
||||||
"fmt.check": "prettier --check .",
|
"fmt.check": "prettier --check .",
|
||||||
"lint": "eslint \"src/**/*.ts*\"",
|
"lint": "eslint \"src/**/*.ts*\"",
|
||||||
"preview": "qwik build preview && vite preview --open",
|
"preview": "qwik build preview && vite preview --open",
|
||||||
"start": "vite --open --mode ssr",
|
"start": "vite --open --mode ssr",
|
||||||
|
"subfont": "subfont -i --inline-css --no-fallbacks --silent --root dist",
|
||||||
"qwik": "qwik"
|
"qwik": "qwik"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@builder.io/qwik": "0.14.1",
|
"@builder.io/qwik": "0.16.1",
|
||||||
"@builder.io/qwik-city": "0.0.127",
|
"@builder.io/qwik-city": "0.0.128",
|
||||||
|
"@fontsource/inter": "^4.5.14",
|
||||||
|
"@iconify-json/tabler": "^1.1.49",
|
||||||
|
"@tailwindcss/aspect-ratio": "^0.4.0",
|
||||||
|
"@tailwindcss/forms": "^0.5.3",
|
||||||
|
"@tailwindcss/line-clamp": "^0.3.1",
|
||||||
|
"@tailwindcss/typography": "^0.5.0",
|
||||||
|
"@types/compression": "^1.7.2",
|
||||||
"@types/eslint": "8.4.10",
|
"@types/eslint": "8.4.10",
|
||||||
"@types/node": "latest",
|
"@types/node": "latest",
|
||||||
"@typescript-eslint/eslint-plugin": "5.43.0",
|
"@typescript-eslint/eslint-plugin": "5.45.0",
|
||||||
"@typescript-eslint/parser": "5.43.0",
|
"@typescript-eslint/parser": "5.45.0",
|
||||||
"autoprefixer": "10.4.11",
|
"autoprefixer": "10.4.13",
|
||||||
"eslint": "8.28.0",
|
"compression": "^1.7.4",
|
||||||
"eslint-plugin-qwik": "0.14.1",
|
"eslint": "8.29.0",
|
||||||
"node-fetch": "3.3.0",
|
"eslint-plugin-qwik": "0.15.0",
|
||||||
"postcss": "^8.4.16",
|
"imagetools-core": "^3.2.3",
|
||||||
"prettier": "2.7.1",
|
"netlify-cli": "^12.0.11",
|
||||||
|
"node-fetch": "^3.3.0",
|
||||||
|
"postcss": "^8.4.19",
|
||||||
|
"prettier": "2.8.0",
|
||||||
|
"rehype-autolink-headings": "^6.1.1",
|
||||||
|
"subfont": "^6.12.2",
|
||||||
"tailwindcss": "^3.1.8",
|
"tailwindcss": "^3.1.8",
|
||||||
"typescript": "4.9.3",
|
"typescript": "4.8.4",
|
||||||
"vite": "3.2.4",
|
"vite": "3.2.4",
|
||||||
"vite-tsconfig-paths": "3.5.0",
|
"vite-imagetools": "^4.0.11",
|
||||||
"wrangler": "latest"
|
"vite-tsconfig-paths": "3.6.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=17.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
plugins: {
|
plugins: {
|
||||||
tailwindcss: {},
|
tailwindcss: {},
|
||||||
autoprefixer: {},
|
autoprefixer: {},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,2 @@
|
|||||||
# https://developers.cloudflare.com/pages/platform/headers/
|
|
||||||
|
|
||||||
/build/*
|
/build/*
|
||||||
Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable
|
Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable
|
||||||
|
|||||||
BIN
packages/docs/public/favicon.ico
Normal file
BIN
packages/docs/public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
|
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
|
||||||
"name": "qwik-project-name",
|
"name": "qwik-project-name",
|
||||||
"short_name": "Welcome to Qwik",
|
"short_name": "Welcome to Qwik",
|
||||||
"start_url": ".",
|
"start_url": ".",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"background_color": "#fff",
|
"background_color": "#fff",
|
||||||
"description": "A Qwik project app."
|
"description": "A Qwik project app."
|
||||||
}
|
}
|
||||||
|
|||||||
11
packages/docs/sandbox.config.json
Normal file
11
packages/docs/sandbox.config.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"infiniteLoopProtection": true,
|
||||||
|
"hardReloadOnChange": false,
|
||||||
|
"view": "browser",
|
||||||
|
"template": "node",
|
||||||
|
"container": {
|
||||||
|
"port": 5173,
|
||||||
|
"startScript": "start",
|
||||||
|
"node": "16"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
packages/docs/screenshot.jpg
Normal file
BIN
packages/docs/screenshot.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 424 KiB |
BIN
packages/docs/src/assets/fonts/FiraCode-VF.woff
Normal file
BIN
packages/docs/src/assets/fonts/FiraCode-VF.woff
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/FiraCode-VF.woff2
Normal file
BIN
packages/docs/src/assets/fonts/FiraCode-VF.woff2
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/IBMPlexMono-Regular.ttf
Normal file
BIN
packages/docs/src/assets/fonts/IBMPlexMono-Regular.ttf
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/IBMPlexMono-SemiBold.ttf
Normal file
BIN
packages/docs/src/assets/fonts/IBMPlexMono-SemiBold.ttf
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/Inter-italic-latin.var.woff2
Normal file
BIN
packages/docs/src/assets/fonts/Inter-italic-latin.var.woff2
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/Inter-roman-latin.var.woff2
Normal file
BIN
packages/docs/src/assets/fonts/Inter-roman-latin.var.woff2
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/Pally-Variable.ttf
Normal file
BIN
packages/docs/src/assets/fonts/Pally-Variable.ttf
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/SourceSansPro-Regular.otf
Normal file
BIN
packages/docs/src/assets/fonts/SourceSansPro-Regular.otf
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/SourceSerifPro-Regular.ttf
Normal file
BIN
packages/docs/src/assets/fonts/SourceSerifPro-Regular.ttf
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/Synonym-Variable.ttf
Normal file
BIN
packages/docs/src/assets/fonts/Synonym-Variable.ttf
Normal file
Binary file not shown.
BIN
packages/docs/src/assets/fonts/Ubuntu-Mono-bold.woff2
Normal file
BIN
packages/docs/src/assets/fonts/Ubuntu-Mono-bold.woff2
Normal file
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user