Compare commits
933 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
321019d36a | ||
![]() |
d070e976b0 | ||
![]() |
0caf6bfabb | ||
![]() |
b842d7938f | ||
![]() |
cebbf84375 | ||
![]() |
8608431490 | ||
![]() |
78ba18b176 | ||
![]() |
f8c30c8526 | ||
![]() |
693c9b85a5 | ||
![]() |
70bb7defd1 | ||
![]() |
160377ca31 | ||
![]() |
2c0ce77a4e | ||
![]() |
77fbb0c9da | ||
![]() |
5971425d23 | ||
![]() |
aefff5c861 | ||
![]() |
a296b5e645 | ||
![]() |
eb486a3a07 | ||
![]() |
062b8521ba | ||
![]() |
1b07f3195a | ||
![]() |
dfa7d4cb8d | ||
![]() |
a14dd9666c | ||
![]() |
b07bd4374f | ||
![]() |
b4e12b0ea8 | ||
![]() |
ee5c17bb85 | ||
![]() |
16c9d3400c | ||
![]() |
4dd994348d | ||
![]() |
f0cbfafc24 | ||
![]() |
d3f38f5488 | ||
![]() |
737090a67a | ||
![]() |
4f66a4d090 | ||
![]() |
df54f909c1 | ||
![]() |
772b195eca | ||
![]() |
87866e34ed | ||
![]() |
c98ac05097 | ||
![]() |
36f991b6f9 | ||
![]() |
a81c5164fc | ||
![]() |
5942482690 | ||
![]() |
4f538ca2fc | ||
![]() |
9f2281a3e2 | ||
![]() |
b0d2f28c78 | ||
![]() |
d4380a4426 | ||
![]() |
ae2738d4cc | ||
![]() |
aa5ae028b2 | ||
![]() |
7ab8c76aa0 | ||
![]() |
8075b65e14 | ||
![]() |
073ce3bf1b | ||
![]() |
80fcbfe01b | ||
![]() |
dba0041e5f | ||
![]() |
b8a44afd25 | ||
![]() |
e2445bf585 | ||
![]() |
50706c524e | ||
![]() |
11e0cb9398 | ||
![]() |
1e82e40802 | ||
![]() |
ff00644e62 | ||
![]() |
97bcd3792b | ||
![]() |
5738a09771 | ||
![]() |
c461cc4878 | ||
![]() |
878fab347a | ||
![]() |
354b331b08 | ||
![]() |
3b9aadb90f | ||
![]() |
7193d018ce | ||
![]() |
d5cea034ac | ||
![]() |
a2760c10b3 | ||
![]() |
5492fae213 | ||
![]() |
490a23ae0a | ||
![]() |
3593cf3808 | ||
![]() |
6ea7400ff4 | ||
![]() |
1a4ba35ef4 | ||
![]() |
2d52cab693 | ||
![]() |
e1fac78aba | ||
![]() |
e79fc9cae4 | ||
![]() |
9200e1011b | ||
![]() |
373d29eeab | ||
![]() |
bc337c588a | ||
![]() |
112b05f7ad | ||
![]() |
9f84af95f6 | ||
![]() |
0873cfa997 | ||
![]() |
94d7162782 | ||
![]() |
5db62679fa | ||
![]() |
a4a0102679 | ||
![]() |
2afcfbb4bc | ||
![]() |
f0e8f070a8 | ||
![]() |
c42374e031 | ||
![]() |
be610c7fa9 | ||
![]() |
4ff824663b | ||
![]() |
1581b5ac0a | ||
![]() |
5fb48ed54b | ||
![]() |
903e9e6093 | ||
![]() |
d30e491817 | ||
![]() |
aa727e3260 | ||
![]() |
1cad3a7149 | ||
![]() |
3b7f6740bb | ||
![]() |
2febc5efad | ||
![]() |
903616bef6 | ||
![]() |
c944193fb4 | ||
![]() |
4f2155ea63 | ||
![]() |
4bda1edda7 | ||
![]() |
1a55cc8604 | ||
![]() |
bf7ab475ee | ||
![]() |
2f39efb935 | ||
![]() |
9f8eb985e4 | ||
![]() |
3549fef71c | ||
![]() |
2cfa64c2a3 | ||
![]() |
7245a0a599 | ||
![]() |
0633da3244 | ||
![]() |
96341976f5 | ||
![]() |
9abfaec4d5 | ||
![]() |
945c52dd6b | ||
![]() |
6567d24760 | ||
![]() |
ffaf9b6e0c | ||
![]() |
463e6908b1 | ||
![]() |
e185ceb385 | ||
![]() |
1b21bbe5b7 | ||
![]() |
14b7053ed8 | ||
![]() |
2760526def | ||
![]() |
d851db22d0 | ||
![]() |
2fa360e400 | ||
![]() |
e4eb146169 | ||
![]() |
86611453b5 | ||
![]() |
65f9d1b6b9 | ||
![]() |
2fceaf2cf4 | ||
![]() |
d82b50fcdb | ||
![]() |
ab6e49bf4f | ||
![]() |
ee90422f56 | ||
![]() |
627184f124 | ||
![]() |
fa02edfefc | ||
![]() |
61afebc827 | ||
![]() |
a4c22799e7 | ||
![]() |
870a110a75 | ||
![]() |
8c859f9408 | ||
![]() |
0a36101da1 | ||
![]() |
c1bf063b12 | ||
![]() |
0da56a800d | ||
![]() |
4d2172d153 | ||
![]() |
d0fab0e1f1 | ||
![]() |
4cedbdbc60 | ||
![]() |
a82d34cbce | ||
![]() |
16d0c243c7 | ||
![]() |
855901bd9e | ||
![]() |
6be8a581d2 | ||
![]() |
655deb12c8 | ||
![]() |
31b1b9457b | ||
![]() |
c4394228f2 | ||
![]() |
98e6dbe141 | ||
![]() |
4fac1ef7c4 | ||
![]() |
034bc6a79e | ||
![]() |
94e64676af | ||
![]() |
3a638220af | ||
![]() |
0772308bf5 | ||
![]() |
9f5ea80731 | ||
![]() |
fb1f520096 | ||
![]() |
dd36609443 | ||
![]() |
4eace3fb7e | ||
![]() |
f13e93e2ce | ||
![]() |
da4f8ab529 | ||
![]() |
b6ff4ec992 | ||
![]() |
25f6cac69a | ||
![]() |
172a8934e3 | ||
![]() |
aead014bcf | ||
![]() |
59770c80db | ||
![]() |
6d6b77148d | ||
![]() |
c1e8f5765f | ||
![]() |
76e442940b | ||
![]() |
b2205097da | ||
![]() |
14886d42e8 | ||
![]() |
2f35403078 | ||
![]() |
961d55a1c6 | ||
![]() |
0fca0ef734 | ||
![]() |
cc3acd81bc | ||
![]() |
69a691c19e | ||
![]() |
e0a4f5c9c9 | ||
![]() |
cabf9b8fb8 | ||
![]() |
61e24da07d | ||
![]() |
648511dfad | ||
![]() |
dfc9efc31a | ||
![]() |
b58a22addc | ||
![]() |
e07a9eeda2 | ||
![]() |
f0de42fa63 | ||
![]() |
0121661ad0 | ||
![]() |
fb6e46bd69 | ||
![]() |
9bd041799b | ||
![]() |
9e191c4ed9 | ||
![]() |
794b4cf26a | ||
![]() |
2d8421943f | ||
![]() |
48dc2312d9 | ||
![]() |
cdf7a1adc4 | ||
![]() |
99ebd12081 | ||
![]() |
859337b5c1 | ||
![]() |
1e601559a0 | ||
![]() |
9314cba724 | ||
![]() |
25224f0308 | ||
![]() |
9a981d5373 | ||
![]() |
c7116361ab | ||
![]() |
1f17236c4f | ||
![]() |
67f415de35 | ||
![]() |
b890150817 | ||
![]() |
4de1fc49df | ||
![]() |
fb80d5d70d | ||
![]() |
eaa25e412a | ||
![]() |
706142f98e | ||
![]() |
36a72d0a32 | ||
![]() |
1d44d387ac | ||
![]() |
f93c41f2d8 | ||
![]() |
5b13f880c8 | ||
![]() |
c4af873036 | ||
![]() |
fe820fb4fe | ||
![]() |
82ad0735d2 | ||
![]() |
8b0a421924 | ||
![]() |
d44cb3d92e | ||
![]() |
5f335ef5b3 | ||
![]() |
5831bf9653 | ||
![]() |
2480dfbb6d | ||
![]() |
162b352ea5 | ||
![]() |
9f30d7d7ba | ||
![]() |
27c296bb89 | ||
![]() |
ef67908451 | ||
![]() |
3dedc3bfc7 | ||
![]() |
65d509c97f | ||
![]() |
11f38c4d3a | ||
![]() |
3bca6497f7 | ||
![]() |
23d79b9265 | ||
![]() |
12c53a3d4d | ||
![]() |
1dfe58ec02 | ||
![]() |
7615e62bbc | ||
![]() |
53189a6487 | ||
![]() |
027b11c3fb | ||
![]() |
453ab7de66 | ||
![]() |
58f8ded161 | ||
![]() |
497ce2e84f | ||
![]() |
3794c6f508 | ||
![]() |
ee6c9fa5d4 | ||
![]() |
1369bb095f | ||
![]() |
c786d7549a | ||
![]() |
b59840cb77 | ||
![]() |
265d57d8b7 | ||
![]() |
5eed84f9e5 | ||
![]() |
0a334dff1d | ||
![]() |
5fff9bdc02 | ||
![]() |
a9fd261bab | ||
![]() |
ef087be4f0 | ||
![]() |
2099978b8f | ||
![]() |
712bee297a | ||
![]() |
57bba90091 | ||
![]() |
d877f5c764 | ||
![]() |
4c66cc1e33 | ||
![]() |
27a3edeb93 | ||
![]() |
f79fc29203 | ||
![]() |
174240a220 | ||
![]() |
60d8af5c16 | ||
![]() |
627a5892f1 | ||
![]() |
7767f6d9cc | ||
![]() |
9729fd6b15 | ||
![]() |
17916f29f6 | ||
![]() |
584b9323ec | ||
![]() |
82c1aadfa9 | ||
![]() |
bd497af89b | ||
![]() |
1683c5630a | ||
![]() |
b5df1a026a | ||
![]() |
b290c32aeb | ||
![]() |
a29b3c6db4 | ||
![]() |
ffb2f4f5db | ||
![]() |
24c95f4801 | ||
![]() |
1aaec2d555 | ||
![]() |
fedb198ae7 | ||
![]() |
add654ccac | ||
![]() |
5a578643a6 | ||
![]() |
f0712bd213 | ||
![]() |
f490632722 | ||
![]() |
2610b96762 | ||
![]() |
8d90cb834d | ||
![]() |
9d92509796 | ||
![]() |
04a78ee0ba | ||
![]() |
3703390268 | ||
![]() |
4ab6415f49 | ||
![]() |
9228722147 | ||
![]() |
0e5529b4ca | ||
![]() |
4d454ec932 | ||
![]() |
a9282ad118 | ||
![]() |
0e959641af | ||
![]() |
13263eea76 | ||
![]() |
1a3418de58 | ||
![]() |
4402995132 | ||
![]() |
4e33f9875b | ||
![]() |
ed2893e37f | ||
![]() |
c35be241ca | ||
![]() |
aad0b4ddfe | ||
![]() |
52f5c7ddb5 | ||
![]() |
a04b933161 | ||
![]() |
c77e12edbb | ||
![]() |
108bd04cf8 | ||
![]() |
a95b500e42 | ||
![]() |
c2744c5569 | ||
![]() |
a1dfd87bbe | ||
![]() |
221aa8687f | ||
![]() |
fa8ac0a8ba | ||
![]() |
cc1f9873cb | ||
![]() |
3cae9ee5d2 | ||
![]() |
f764914adb | ||
![]() |
991250c73f | ||
![]() |
af46cf5ce8 | ||
![]() |
dbb1c42c47 | ||
![]() |
991f593b2e | ||
![]() |
e43c083d50 | ||
![]() |
3cd9bdc1d4 | ||
![]() |
c0b8e6178d | ||
![]() |
410f9d0af5 | ||
![]() |
b1fedf28dc | ||
![]() |
b0df03dcd2 | ||
![]() |
2794e50a19 | ||
![]() |
365ae656f2 | ||
![]() |
98649dcba6 | ||
![]() |
213c8096d2 | ||
![]() |
398938f27e | ||
![]() |
6378e62645 | ||
![]() |
251885d4be | ||
![]() |
f53909355f | ||
![]() |
242b68889a | ||
![]() |
6a66b65f2a | ||
![]() |
f30ead6bcb | ||
![]() |
237ee72ca6 | ||
![]() |
3590d84ad6 | ||
![]() |
2dae8c162d | ||
![]() |
9a192b708e | ||
![]() |
c193f9334f | ||
![]() |
6e682dc752 | ||
![]() |
da86fe56bd | ||
![]() |
45865d701a | ||
![]() |
a66a31b474 | ||
![]() |
2661e7102f | ||
![]() |
224965b91e | ||
![]() |
a9c7375534 | ||
![]() |
e77f7ee0bf | ||
![]() |
ae5dd0cad6 | ||
![]() |
a128907a4e | ||
![]() |
d6453a8ed0 | ||
![]() |
dd1e8240b8 | ||
![]() |
b12f39916f | ||
![]() |
aae88fe1ad | ||
![]() |
83bb400df1 | ||
![]() |
8ea8067788 | ||
![]() |
9fbc9d59f5 | ||
![]() |
b96ba69a72 | ||
![]() |
c4ccab6a5d | ||
![]() |
f84f27bb56 | ||
![]() |
416cc0ffa9 | ||
![]() |
1fd5ec4db6 | ||
![]() |
4795c35c68 | ||
![]() |
25ce63b86d | ||
![]() |
5271033d34 | ||
![]() |
6ba8f33399 | ||
![]() |
7ab79bd815 | ||
![]() |
04a0a847c7 | ||
![]() |
436fa9af69 | ||
![]() |
ca0bbb0f08 | ||
![]() |
88996144a5 | ||
![]() |
44d5eee99e | ||
![]() |
0d1ff6074f | ||
![]() |
d63757634a | ||
![]() |
fd61cf3388 | ||
![]() |
a6a6b63e5a | ||
![]() |
c02c2def29 | ||
![]() |
ff66548462 | ||
![]() |
c9f292e252 | ||
![]() |
18cef5f3bd | ||
![]() |
e19340f1e0 | ||
![]() |
feb613cb6d | ||
![]() |
afa6bdfa44 | ||
![]() |
200e6d9905 | ||
![]() |
70772c49bd | ||
![]() |
762ea97e8b | ||
![]() |
8156b8b356 | ||
![]() |
3a2cbae0a0 | ||
![]() |
0ad8da097b | ||
![]() |
e2dcdd2811 | ||
![]() |
8074f9146b | ||
![]() |
df24bac913 | ||
![]() |
4d4091adcc | ||
![]() |
cac54c41a1 | ||
![]() |
130931d7af | ||
![]() |
d35b08b35e | ||
![]() |
82031da6a6 | ||
![]() |
9df5ee7b11 | ||
![]() |
2ed1a57cd9 | ||
![]() |
101450cba6 | ||
![]() |
6bab5b3f7c | ||
![]() |
ca3c0e00a7 | ||
![]() |
6d64daf324 | ||
![]() |
9ae4578e19 | ||
![]() |
e06b7ab87a | ||
![]() |
1e2adedcbf | ||
![]() |
adf763c1b0 | ||
![]() |
36ee0df256 | ||
![]() |
823d85b24a | ||
![]() |
a3b3038709 | ||
![]() |
ddeb18f626 | ||
![]() |
90cd11bd38 | ||
![]() |
e9ba37b8de | ||
![]() |
d5e4a1b1ad | ||
![]() |
129e6d60e5 | ||
![]() |
4b77f2f590 | ||
![]() |
a909966562 | ||
![]() |
fd184239d6 | ||
![]() |
52bc49dc6a | ||
![]() |
b9352ccc06 | ||
![]() |
525b2baf06 | ||
![]() |
a8edeb2459 | ||
![]() |
e3830d64e0 | ||
![]() |
91f3e2c2b4 | ||
![]() |
77b4408416 | ||
![]() |
cede96f018 | ||
![]() |
8e0a28d238 | ||
![]() |
da5d594428 | ||
![]() |
9f9ee0bb58 | ||
![]() |
163aca6179 | ||
![]() |
cb06d3b0ae | ||
![]() |
dbe18dd100 | ||
![]() |
217970667a | ||
![]() |
dace794167 | ||
![]() |
590780a539 | ||
![]() |
cbd1f47e87 | ||
![]() |
f89cff4e4a | ||
![]() |
cb08e0bf9f | ||
![]() |
3b54b29a99 | ||
![]() |
25983e046c | ||
![]() |
a6a124d2e6 | ||
![]() |
c7e1d30553 | ||
![]() |
6cc8c45634 | ||
![]() |
ee9a9114b7 | ||
![]() |
11f00f866c | ||
![]() |
03ea61ba81 | ||
![]() |
f6c500c998 | ||
![]() |
b590f0f98f | ||
![]() |
ef9359b208 | ||
![]() |
efd243a340 | ||
![]() |
bafb8b86db | ||
![]() |
84b701747f | ||
![]() |
ec42446daa | ||
![]() |
5046c4c911 | ||
![]() |
ce8c9906cb | ||
![]() |
6fb5482bba | ||
![]() |
58189963f5 | ||
![]() |
f488a71304 | ||
![]() |
4b706e004d | ||
![]() |
40e10cc270 | ||
![]() |
41db227eb3 | ||
![]() |
43eea965c5 | ||
![]() |
8101c9f0bc | ||
![]() |
b4cda90338 | ||
![]() |
7ca37c412e | ||
![]() |
e4e3356dc9 | ||
![]() |
0deaa03218 | ||
![]() |
a7104c41a2 | ||
![]() |
5176b8c322 | ||
![]() |
c37c70446d | ||
![]() |
63abc8a2c8 | ||
![]() |
ba5c038e3b | ||
![]() |
a6669415f5 | ||
![]() |
4086fad867 | ||
![]() |
8a71c13078 | ||
![]() |
5d77f64e76 | ||
![]() |
0d092b977f | ||
![]() |
69582ff83d | ||
![]() |
a5c7da331a | ||
![]() |
8e842296b7 | ||
![]() |
7db14d1df7 | ||
![]() |
067ec2eb9c | ||
![]() |
2d332b32d9 | ||
![]() |
1d9ad2ba86 | ||
![]() |
a28e2177f7 | ||
![]() |
18fe0df691 | ||
![]() |
8e21a06d99 | ||
![]() |
2daf5473bb | ||
![]() |
928ff53adf | ||
![]() |
a71e95e6e5 | ||
![]() |
cb4a54b5cc | ||
![]() |
37e4524156 | ||
![]() |
9ac24ee051 | ||
![]() |
f28ccd559a | ||
![]() |
8e84a93d8e | ||
![]() |
d871dec1b7 | ||
![]() |
b133e1a197 | ||
![]() |
9346a037b9 | ||
![]() |
89facbcddd | ||
![]() |
53fef35638 | ||
![]() |
bfe496a09b | ||
![]() |
ff774c2e8e | ||
![]() |
08a6d1078c | ||
![]() |
e9bcc919bf | ||
![]() |
04f4693c85 | ||
![]() |
2a58a0a4c4 | ||
![]() |
d911843648 | ||
![]() |
c80d178410 | ||
![]() |
9fb4dca39b | ||
![]() |
0dd444d50b | ||
![]() |
f3bf418997 | ||
![]() |
676027245f | ||
![]() |
6c5039f1ba | ||
![]() |
807be59f25 | ||
![]() |
8e9896ec2e | ||
![]() |
110c2dbac8 | ||
![]() |
f55ec4bd8a | ||
![]() |
06c9bf420e | ||
![]() |
3c9bc53a79 | ||
![]() |
de7a35dfe9 | ||
![]() |
92638c2e97 | ||
![]() |
63251e6a9a | ||
![]() |
59844c33fd | ||
![]() |
d36dd2ece1 | ||
![]() |
1fdb94739b | ||
![]() |
8a18f4c44f | ||
![]() |
c9c47c5519 | ||
![]() |
6be8b55daa | ||
![]() |
f2dc2f5530 | ||
![]() |
42842e7aec | ||
![]() |
49d9f77d1b | ||
![]() |
d06a89564f | ||
![]() |
58a8510d49 | ||
![]() |
8055d6555e | ||
![]() |
39620d3510 | ||
![]() |
6d19711926 | ||
![]() |
0b362dd435 | ||
![]() |
9485731e7d | ||
![]() |
1449fb0f84 | ||
![]() |
e548dd49ca | ||
![]() |
337d22bbf4 | ||
![]() |
35863ee6e9 | ||
![]() |
0784a2d4d0 | ||
![]() |
75d5c0e356 | ||
![]() |
a2dd6d76a8 | ||
![]() |
bdc6b59857 | ||
![]() |
34e95f1e89 | ||
![]() |
6a92cfc573 | ||
![]() |
9f759d70b6 | ||
![]() |
43e957e8d3 | ||
![]() |
ae316f60e4 | ||
![]() |
1ac423ba56 | ||
![]() |
b43490dd76 | ||
![]() |
f586e81dd1 | ||
![]() |
8a6d8a7d8c | ||
![]() |
45d607f1a0 | ||
![]() |
d84abaa229 | ||
![]() |
3fd1d4d9b3 | ||
![]() |
078b8efb56 | ||
![]() |
5066995f72 | ||
![]() |
577fe3dba8 | ||
![]() |
d96f4999bc | ||
![]() |
6e80ff4eb6 | ||
![]() |
3f8f022d48 | ||
![]() |
93a2e2151e | ||
![]() |
663a1ed9d4 | ||
![]() |
4f46c55c85 | ||
![]() |
9701c98af9 | ||
![]() |
aabf2a1c79 | ||
![]() |
29539b090e | ||
![]() |
1c80677ac3 | ||
![]() |
ad419855e9 | ||
![]() |
30b75943f3 | ||
![]() |
41a67b402d | ||
![]() |
caa104b1cc | ||
![]() |
94085f2bc8 | ||
![]() |
d39c962314 | ||
![]() |
706fb0f063 | ||
![]() |
b9d89b040f | ||
![]() |
41421b849a | ||
![]() |
324375da93 | ||
![]() |
536446faf6 | ||
![]() |
d026ac09f3 | ||
![]() |
88c93ac992 | ||
![]() |
d540322d8b | ||
![]() |
ad4db5e936 | ||
![]() |
25cb4d90f3 | ||
![]() |
6c14a353ef | ||
![]() |
74d7d1aa98 | ||
![]() |
43b0d9ed29 | ||
![]() |
3572e6f65a | ||
![]() |
d23d5d2da0 | ||
![]() |
183b9b0d88 | ||
![]() |
7a1af268ae | ||
![]() |
f879b3c5b0 | ||
![]() |
40be72cf65 | ||
![]() |
a8886571d1 | ||
![]() |
1fcd51ea26 | ||
![]() |
89752138be | ||
![]() |
f29ccace2a | ||
![]() |
0c8343e76f | ||
![]() |
9776c9f5a4 | ||
![]() |
a5dbac9817 | ||
![]() |
bad5e0b855 | ||
![]() |
8e4ca55560 | ||
![]() |
f52afc1fe0 | ||
![]() |
815e64302e | ||
![]() |
07b2b18a4e | ||
![]() |
69eca33de7 | ||
![]() |
ec76a480d0 | ||
![]() |
a8823c3ed0 | ||
![]() |
1f1b3a341c | ||
![]() |
8c164a3852 | ||
![]() |
dcf526d810 | ||
![]() |
2fc6d680a0 | ||
![]() |
f414972f33 | ||
![]() |
69d192d989 | ||
![]() |
6c8769e598 | ||
![]() |
c12703422c | ||
![]() |
c0171e1cd1 | ||
![]() |
920a983146 | ||
![]() |
7ec86bfef1 | ||
![]() |
d8bc318688 | ||
![]() |
600ea1848f | ||
![]() |
a3ce9c7662 | ||
![]() |
44ce7577c6 | ||
![]() |
8c3e42f7eb | ||
![]() |
b8887c506c | ||
![]() |
6c4228b7b8 | ||
![]() |
9b1da98386 | ||
![]() |
1615169a3d | ||
![]() |
df83aa4d15 | ||
![]() |
142b96beb0 | ||
![]() |
18d07dd3b9 | ||
![]() |
270039d211 | ||
![]() |
fcf3a480be | ||
![]() |
80ee974973 | ||
![]() |
48c6a38205 | ||
![]() |
c9536e58cb | ||
![]() |
a16d783302 | ||
![]() |
b837aecb27 | ||
![]() |
532405048f | ||
![]() |
6cd0427ff8 | ||
![]() |
d2163f180e | ||
![]() |
d1344457dd | ||
![]() |
596be24d92 | ||
![]() |
4e182b49f9 | ||
![]() |
51ac37f1de | ||
![]() |
b578e88d46 | ||
![]() |
9cb4607f69 | ||
![]() |
2c4d602028 | ||
![]() |
a0feb7f309 | ||
![]() |
77e29050c8 | ||
![]() |
df55f746ca | ||
![]() |
2739d2297f | ||
![]() |
dc734b04d8 | ||
![]() |
d4c542168c | ||
![]() |
94a3b66130 | ||
![]() |
c8baf9b0d7 | ||
![]() |
c4dc0509c2 | ||
![]() |
3bfc428dfe | ||
![]() |
026b7da6f8 | ||
![]() |
58352b9f33 | ||
![]() |
59faf593be | ||
![]() |
4aa41773c4 | ||
![]() |
20c5d6aee1 | ||
![]() |
d503dbc103 | ||
![]() |
53624a6379 | ||
![]() |
5b881db19f | ||
![]() |
dece070d28 | ||
![]() |
8be2ed0034 | ||
![]() |
37c6b57a48 | ||
![]() |
8a0b5c24a5 | ||
![]() |
20431da757 | ||
![]() |
f219c87a9e | ||
![]() |
5d2134db56 | ||
![]() |
1dc46dd31c | ||
![]() |
96250ce9a0 | ||
![]() |
691682e09c | ||
![]() |
814c504951 | ||
![]() |
5c2b96a812 | ||
![]() |
3dc1ca8adb | ||
![]() |
a6850f1bc0 | ||
![]() |
5ba6cb9135 | ||
![]() |
500283af6f | ||
![]() |
43184dccda | ||
![]() |
4296a3b5df | ||
![]() |
14ba50f061 | ||
![]() |
9ad7de56a3 | ||
![]() |
5570687957 | ||
![]() |
1406bf3e10 | ||
![]() |
287f299b94 | ||
![]() |
f88f05cd46 | ||
![]() |
c6fb42e2f3 | ||
![]() |
c64ca9d9b7 | ||
![]() |
7d47793afb | ||
![]() |
2840fce856 | ||
![]() |
2791dca412 | ||
![]() |
3e268bf66b | ||
![]() |
f44422a77e | ||
![]() |
4931cbcc34 | ||
![]() |
59e495f7d3 | ||
![]() |
93866d7bc2 | ||
![]() |
ba1cdeaeeb | ||
![]() |
234b27e555 | ||
![]() |
5acfd09819 | ||
![]() |
9923b15ecd | ||
![]() |
def5a6d9d0 | ||
![]() |
17c8a405f5 | ||
![]() |
ff874bfb48 | ||
![]() |
4cbb37b996 | ||
![]() |
f57e35c6b8 | ||
![]() |
312e786e33 | ||
![]() |
e2c75a2daf | ||
![]() |
fce20263ea | ||
![]() |
d841f9cb62 | ||
![]() |
4945240ec2 | ||
![]() |
f1cdc7e422 | ||
![]() |
372cdb10d6 | ||
![]() |
fd24dbee21 | ||
![]() |
7066f7ea76 | ||
![]() |
5ae53c79b6 | ||
![]() |
f3a8ab289f | ||
![]() |
a99609e3da | ||
![]() |
a271189448 | ||
![]() |
251bc28526 | ||
![]() |
05505704e4 | ||
![]() |
4aadcb021e | ||
![]() |
ae9da1b354 | ||
![]() |
a594029541 | ||
![]() |
ddcb894932 | ||
![]() |
708cdbe545 | ||
![]() |
1cbf96dff1 | ||
![]() |
bd55b37d5f | ||
![]() |
7c3a0effee | ||
![]() |
fe3048aab0 | ||
![]() |
9a5a3e879d | ||
![]() |
269902db94 | ||
![]() |
4ba67ea863 | ||
![]() |
3534712478 | ||
![]() |
62b9a8071a | ||
![]() |
cf83c27ca0 | ||
![]() |
8035f81f97 | ||
![]() |
d2375fdc54 | ||
![]() |
f07d9dd813 | ||
![]() |
b5524b18cf | ||
![]() |
310497a5bf | ||
![]() |
47a738d5e6 | ||
![]() |
6ad13c1da0 | ||
![]() |
99454fdc4b | ||
![]() |
799f0ead6c | ||
![]() |
d16d709b72 | ||
![]() |
8e1087b818 | ||
![]() |
139dcb521e | ||
![]() |
b17e431473 | ||
![]() |
b1ee3ef8ba | ||
![]() |
75bbd16b0c | ||
![]() |
71a7943d01 | ||
![]() |
d34785b5b0 | ||
![]() |
af58ef7244 | ||
![]() |
6d3bec8518 | ||
![]() |
0346b157c5 | ||
![]() |
e25aab742b | ||
![]() |
6f2ca00263 | ||
![]() |
e1d26325f3 | ||
![]() |
4202f963c3 | ||
![]() |
d3ef45db1b | ||
![]() |
dec55709a3 | ||
![]() |
b5ed984f05 | ||
![]() |
66d7baa126 | ||
![]() |
a2809a14c5 | ||
![]() |
040ad9edb0 | ||
![]() |
46dbe009f2 | ||
![]() |
3598d43938 | ||
![]() |
f1358c7ad1 | ||
![]() |
40862fcd01 | ||
![]() |
189432c228 | ||
![]() |
280d16f3d9 | ||
![]() |
722c39590f | ||
![]() |
b1138dbf05 | ||
![]() |
08918282a7 | ||
![]() |
5007b0bf1a | ||
![]() |
0a5912eb8e | ||
![]() |
8acd7b03ed | ||
![]() |
ed87df212f | ||
![]() |
56243aa076 | ||
![]() |
41e9f32e1b | ||
![]() |
f7753aa1b4 | ||
![]() |
aebfcc38dd | ||
![]() |
3e0149c058 | ||
![]() |
1e62e09825 | ||
![]() |
956b15a2eb | ||
![]() |
572b457b43 | ||
![]() |
7d40ae009f | ||
![]() |
aec9595dea | ||
![]() |
cc90f19a46 | ||
![]() |
ab486c8ed1 | ||
![]() |
bfb1e817ec | ||
![]() |
ebc7c22388 | ||
![]() |
10b4066c82 | ||
![]() |
42dd67954d | ||
![]() |
d45fdf605f | ||
![]() |
caef9bb8b5 | ||
![]() |
c888934601 | ||
![]() |
95613b595e | ||
![]() |
9247bd9d9e | ||
![]() |
ee3d2489e6 | ||
![]() |
7764c4fbcb | ||
![]() |
a18b524859 | ||
![]() |
9b8ec9b85e | ||
![]() |
7b3f070973 | ||
![]() |
ba27fc12e8 | ||
![]() |
db55912f78 | ||
![]() |
4c4bd267d4 | ||
![]() |
dc1002659b | ||
![]() |
97da370301 | ||
![]() |
571901f333 | ||
![]() |
4d90df9d9a | ||
![]() |
2c18667ffd | ||
![]() |
89157cd606 | ||
![]() |
37e0091ef0 | ||
![]() |
ae3512fecf | ||
![]() |
8b81391e2f | ||
![]() |
54e68f6252 | ||
![]() |
92d1ed65ff | ||
![]() |
8098a7ee5d | ||
![]() |
c24297630c | ||
![]() |
a9d5212602 | ||
![]() |
c81db8ae19 | ||
![]() |
ecd356d42b | ||
![]() |
e67adf87b2 | ||
![]() |
1669708041 | ||
![]() |
12e34013f8 | ||
![]() |
bd2ad1d7a1 | ||
![]() |
934cdb8237 | ||
![]() |
2f6ea8830e | ||
![]() |
b77d08ebbf | ||
![]() |
b735d32cbc | ||
![]() |
472ffd5b5c | ||
![]() |
4567ca8fce | ||
![]() |
07ed24ca7a | ||
![]() |
52575be2a7 | ||
![]() |
c8187e52bb | ||
![]() |
b0b6b72b4c | ||
![]() |
7676bc5836 | ||
![]() |
f98c1725be | ||
![]() |
c6bd599b63 | ||
![]() |
7908779c89 | ||
![]() |
29ad68afab | ||
![]() |
9aaeac6a08 | ||
![]() |
8f074c2131 | ||
![]() |
930653c86d | ||
![]() |
cc31b7c210 | ||
![]() |
bb19e9308c | ||
![]() |
5e7b4bfe45 | ||
![]() |
dbeeb61cc5 | ||
![]() |
26d8e5856a | ||
![]() |
66be6d1e89 | ||
![]() |
677aa232e7 | ||
![]() |
cabbb45031 | ||
![]() |
ba99df645b | ||
![]() |
282e5ba2d8 | ||
![]() |
42d418da58 | ||
![]() |
cbf270fdba | ||
![]() |
bb9abe104f | ||
![]() |
18f0d6dea3 | ||
![]() |
23dc9a1139 | ||
![]() |
5e18ef5830 | ||
![]() |
63f8fc266d | ||
![]() |
4e46b16f7b | ||
![]() |
ba19b50005 | ||
![]() |
fa867387d4 | ||
![]() |
5762cf5dc5 | ||
![]() |
7d9f624805 | ||
![]() |
5b335ccd59 | ||
![]() |
4792853eb6 | ||
![]() |
cc05bc7db8 | ||
![]() |
d198eaa988 | ||
![]() |
f094da6a4b | ||
![]() |
a53961b235 | ||
![]() |
f644113af8 | ||
![]() |
e4a903ec07 | ||
![]() |
9408fe2a07 | ||
![]() |
394e747a88 | ||
![]() |
e91f12729b | ||
![]() |
134e588b14 | ||
![]() |
d061eb7b58 | ||
![]() |
18089a8076 | ||
![]() |
02236e01d9 | ||
![]() |
c1150d50b1 | ||
![]() |
387a849269 | ||
![]() |
399cebda70 | ||
![]() |
72720b3dfe | ||
![]() |
64f7560b3b | ||
![]() |
e06b646f49 | ||
![]() |
b51d9bb17b | ||
![]() |
4e967c5720 | ||
![]() |
179db38fd1 | ||
![]() |
e51930d7e1 | ||
![]() |
74a299dbe6 | ||
![]() |
282863c526 | ||
![]() |
63d794ed3e | ||
![]() |
c6b8f12f9a | ||
![]() |
d16e292231 | ||
![]() |
29a319a850 | ||
![]() |
c11e0db077 | ||
![]() |
b2dafb5dfa | ||
![]() |
e7ccd01427 | ||
![]() |
447f26458a | ||
![]() |
61fb71a080 | ||
![]() |
329fcdf8f4 | ||
![]() |
37cdb34014 | ||
![]() |
5ee7b85cc4 | ||
![]() |
1f7228f95a | ||
![]() |
fa8418adcd | ||
![]() |
d3b1765ffe | ||
![]() |
0a274ebadb | ||
![]() |
0d1b35edc5 | ||
![]() |
d7e4ae53ce | ||
![]() |
61ceffc6f9 | ||
![]() |
0c422bfd21 | ||
![]() |
a0815b06a6 | ||
![]() |
bd02b7574a | ||
![]() |
1048d923d0 | ||
![]() |
9dbfcf4262 | ||
![]() |
8ea176b5f0 | ||
![]() |
90dcbadc52 | ||
![]() |
e4021bf830 | ||
![]() |
b8b453aba0 | ||
![]() |
aeec2377c1 | ||
![]() |
f8b0ffd39b | ||
![]() |
9953c3c823 | ||
![]() |
d227a07fe9 | ||
![]() |
7c394414d8 | ||
![]() |
1dfb22d02e | ||
![]() |
1847ad5622 | ||
![]() |
beb701ceb4 | ||
![]() |
2fbadea821 | ||
![]() |
bac561d8c7 | ||
![]() |
7bd261a02e | ||
![]() |
df99a889f0 | ||
![]() |
16c5892a1d | ||
![]() |
0236bbaf68 | ||
![]() |
2ca5a290c3 | ||
![]() |
66c388a644 | ||
![]() |
74a77ed271 | ||
![]() |
3d98e6cdc0 | ||
![]() |
831ae96e0f | ||
![]() |
113a91a73f |
@@ -8,10 +8,8 @@ echo "Configuring backend environment variables..."
|
|||||||
cd packages/backend
|
cd packages/backend
|
||||||
rm -rf .env
|
rm -rf .env
|
||||||
echo "
|
echo "
|
||||||
HOST=localhost
|
|
||||||
PROTOCOL=http
|
|
||||||
PORT=$BACKEND_PORT
|
PORT=$BACKEND_PORT
|
||||||
WEB_APP_URL=https://$CODESPACE_NAME-$WEB_PORT.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
|
WEB_APP_URL=http://localhost:$WEB_PORT
|
||||||
APP_ENV=development
|
APP_ENV=development
|
||||||
POSTGRES_DATABASE=automatisch
|
POSTGRES_DATABASE=automatisch
|
||||||
POSTGRES_PORT=5432
|
POSTGRES_PORT=5432
|
||||||
@@ -30,9 +28,7 @@ cd packages/web
|
|||||||
rm -rf .env
|
rm -rf .env
|
||||||
echo "
|
echo "
|
||||||
PORT=$WEB_PORT
|
PORT=$WEB_PORT
|
||||||
REACT_APP_GRAPHQL_URL=https://$CODESPACE_NAME-$BACKEND_PORT.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN/graphql
|
REACT_APP_GRAPHQL_URL=http://localhost:$BACKEND_PORT/graphql
|
||||||
REACT_APP_BASE_URL=https://$CODESPACE_NAME-$WEB_PORT.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
|
|
||||||
REACT_APP_NOTIFICATIONS_URL=https://notifications.automatisch.io
|
|
||||||
" >> .env
|
" >> .env
|
||||||
cd $CURRENT_DIR
|
cd $CURRENT_DIR
|
||||||
|
|
||||||
|
@@ -21,11 +21,44 @@ services:
|
|||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
ports:
|
||||||
|
- '5432:5432'
|
||||||
|
expose:
|
||||||
|
- 5432
|
||||||
redis:
|
redis:
|
||||||
image: 'redis:7.0.4-alpine'
|
image: 'redis:7.0.4-alpine'
|
||||||
volumes:
|
volumes:
|
||||||
- redis_data:/data
|
- redis_data:/data
|
||||||
|
ports:
|
||||||
|
- '6379:6379'
|
||||||
|
expose:
|
||||||
|
- 6379
|
||||||
|
keycloak:
|
||||||
|
image: quay.io/keycloak/keycloak:21.1
|
||||||
|
restart: always
|
||||||
|
container_name: keycloak
|
||||||
|
environment:
|
||||||
|
- KEYCLOAK_ADMIN=admin
|
||||||
|
- KEYCLOAK_ADMIN_PASSWORD=admin
|
||||||
|
- KC_DB=postgres
|
||||||
|
- KC_DB_URL_HOST=postgres
|
||||||
|
- KC_DB_URL_DATABASE=keycloak
|
||||||
|
- KC_DB_USERNAME=automatisch_user
|
||||||
|
- KC_DB_PASSWORD=automatisch_password
|
||||||
|
- KC_HEALTH_ENABLED=true
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
command: start-dev
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
healthcheck:
|
||||||
|
test: "curl -f http://localhost:8080/health/ready || exit 1"
|
||||||
|
volumes:
|
||||||
|
- keycloak:/opt/keycloak/data/
|
||||||
|
expose:
|
||||||
|
- 8080
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres_data:
|
postgres_data:
|
||||||
redis_data:
|
redis_data:
|
||||||
|
keycloak:
|
||||||
|
8
.dockerignore
Normal file
8
.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
**/node_modules/
|
||||||
|
**/dist/
|
||||||
|
**/logs/
|
||||||
|
**/.devcontainer
|
||||||
|
**/.github
|
||||||
|
**/.vscode
|
||||||
|
packages/docs
|
||||||
|
packages/e2e-test
|
@@ -7,4 +7,12 @@ module.exports = {
|
|||||||
'plugin:@typescript-eslint/recommended',
|
'plugin:@typescript-eslint/recommended',
|
||||||
'prettier',
|
'prettier',
|
||||||
],
|
],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['**/*.test.ts', '**/test/**/*.ts'],
|
||||||
|
rules: {
|
||||||
|
'@typescript-eslint/ban-ts-comment': ['off'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
48
.github/workflows/backend.yml
vendored
Normal file
48
.github/workflows/backend.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
name: Automatisch Backend Tests
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
timeout-minutes: 60
|
||||||
|
runs-on:
|
||||||
|
- ubuntu-latest
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:14.5-alpine
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: automatisch_test
|
||||||
|
POSTGRES_USER: automatisch_test_user
|
||||||
|
POSTGRES_PASSWORD: automatisch_test_user_password
|
||||||
|
options: >-
|
||||||
|
--health-cmd "pg_isready -U automatisch_test_user -d automatisch_test"
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
redis:
|
||||||
|
image: redis:7.0.4-alpine
|
||||||
|
options: >-
|
||||||
|
--health-cmd "redis-cli ping"
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
ports:
|
||||||
|
- 6379:6379
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
- name: Install dependencies
|
||||||
|
run: cd packages/backend && yarn
|
||||||
|
- name: Copy .env-example.test file to .env.test
|
||||||
|
run: cd packages/backend && cp .env-example.test .env.test
|
||||||
|
- name: Run tests
|
||||||
|
run: cd packages/backend && yarn test
|
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@@ -1,5 +1,11 @@
|
|||||||
name: Automatisch CI
|
name: Automatisch CI
|
||||||
on: [push]
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linter:
|
linter:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
121
.github/workflows/playwright.yml
vendored
Normal file
121
.github/workflows/playwright.yml
vendored
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
name: Automatisch UI Tests
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- 'packages/backend/**'
|
||||||
|
- 'packages/e2e-tests/**'
|
||||||
|
- 'packages/web/**'
|
||||||
|
- '!packages/backend/src/apps/**'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
ENCRYPTION_KEY: sample_encryption_key
|
||||||
|
WEBHOOK_SECRET_KEY: sample_webhook_secret_key
|
||||||
|
APP_SECRET_KEY: sample_app_secret_key
|
||||||
|
POSTGRES_HOST: localhost
|
||||||
|
POSTGRES_DATABASE: automatisch
|
||||||
|
POSTGRES_PORT: 5432
|
||||||
|
POSTGRES_USERNAME: automatisch_user
|
||||||
|
POSTGRES_PASSWORD: automatisch_password
|
||||||
|
REDIS_HOST: localhost
|
||||||
|
APP_ENV: production
|
||||||
|
LICENSE_KEY: dummy_license_key
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
timeout-minutes: 60
|
||||||
|
runs-on:
|
||||||
|
- ubuntu-latest
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:14.5-alpine
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: automatisch
|
||||||
|
POSTGRES_USER: automatisch_user
|
||||||
|
POSTGRES_PASSWORD: automatisch_password
|
||||||
|
options: >-
|
||||||
|
--health-cmd "pg_isready -U automatisch_user -d automatisch"
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
redis:
|
||||||
|
image: redis:7.0.4-alpine
|
||||||
|
options: >-
|
||||||
|
--health-cmd "redis-cli ping"
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
ports:
|
||||||
|
- 6379:6379
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn && yarn lerna bootstrap
|
||||||
|
- name: Install Playwright Browsers
|
||||||
|
run: yarn playwright install --with-deps
|
||||||
|
- name: Build Automatisch
|
||||||
|
run: yarn lerna run --scope=@*/{web,backend,cli} build
|
||||||
|
env:
|
||||||
|
# Keep this until we clean up warnings in build processes
|
||||||
|
CI: false
|
||||||
|
- name: Migrate database
|
||||||
|
working-directory: ./packages/backend
|
||||||
|
run: yarn db:migrate --migrations-directory ./dist/src/db/migrations
|
||||||
|
- name: Seed user
|
||||||
|
working-directory: ./packages/backend
|
||||||
|
run: yarn db:seed:user &
|
||||||
|
- name: Install certutils
|
||||||
|
run: sudo apt install -y libnss3-tools
|
||||||
|
- name: Install mkcert
|
||||||
|
run: |
|
||||||
|
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64" \
|
||||||
|
&& chmod +x mkcert-v*-linux-amd64 \
|
||||||
|
&& sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
|
||||||
|
- name: Install root certificate via mkcert
|
||||||
|
run: mkcert -install
|
||||||
|
- name: Create certificate
|
||||||
|
run: mkcert automatisch.io "*.automatisch.io" localhost 127.0.0.1 ::1
|
||||||
|
working-directory: ./packages/e2e-tests
|
||||||
|
- name: Set CAROOT environment variable
|
||||||
|
run: echo "NODE_EXTRA_CA_CERTS=$(mkcert -CAROOT)/rootCA.pem" >> "$GITHUB_ENV"
|
||||||
|
- name: Override license server with local server
|
||||||
|
run: sudo echo "127.0.0.1 license.automatisch.io" | sudo tee -a /etc/hosts
|
||||||
|
- name: Run local license server
|
||||||
|
working-directory: ./packages/e2e-tests
|
||||||
|
run: sudo yarn start-mock-license-server &
|
||||||
|
- name: Run Automatisch
|
||||||
|
run: yarn start &
|
||||||
|
working-directory: ./packages/backend
|
||||||
|
- name: Run Automatisch worker
|
||||||
|
run: node dist/src/worker.js &
|
||||||
|
working-directory: ./packages/backend
|
||||||
|
- name: Setup upterm session
|
||||||
|
if: false
|
||||||
|
uses: lhotari/action-upterm@v1
|
||||||
|
with:
|
||||||
|
limit-access-to-actor: true
|
||||||
|
limit-access-to-users: barinali
|
||||||
|
- name: Run Playwright tests
|
||||||
|
working-directory: ./packages/e2e-tests
|
||||||
|
env:
|
||||||
|
LOGIN_EMAIL: user@automatisch.io
|
||||||
|
LOGIN_PASSWORD: sample
|
||||||
|
BASE_URL: http://localhost:3000
|
||||||
|
GITHUB_CLIENT_ID: 1c0417daf898adfbd99a
|
||||||
|
GITHUB_CLIENT_SECRET: 3328fa814dd582ccd03dbe785cfd683fb8da92b3
|
||||||
|
run: yarn test
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
name: playwright-report
|
||||||
|
path: packages/e2e-tests/test-results
|
||||||
|
retention-days: 30
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -125,3 +125,6 @@ dist
|
|||||||
.yarn/build-state.yml
|
.yarn/build-state.yml
|
||||||
.yarn/install-state.gz
|
.yarn/install-state.gz
|
||||||
.pnp.*
|
.pnp.*
|
||||||
|
|
||||||
|
# MacOS finder preferences
|
||||||
|
.DS_store
|
||||||
|
1
.node-version
Normal file
1
.node-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
16.15.0
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
5
CONTRIBUTOR_LICENSE_AGREEMENT.md
Normal file
5
CONTRIBUTOR_LICENSE_AGREEMENT.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Automatisch Contributor License Agreement
|
||||||
|
|
||||||
|
I give Automatisch permission to license my contributions on any terms they like. I am giving them this license in order to make it possible for them to accept my contributions into their project.
|
||||||
|
|
||||||
|
**_As far as the law allows, my contributions come as is, without any warranty or condition, and I will not be liable to anyone for any damages related to this software or this license, under any kind of legal claim._**
|
3
LICENSE
Normal file
3
LICENSE
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
LICENSE.agpl (AGPL-3.0) applies to all files in this
|
||||||
|
repository, except for files that contain ".ee." in their name
|
||||||
|
which are covered by LICENSE.enterprise.
|
35
LICENSE.enterprise
Normal file
35
LICENSE.enterprise
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
The Automatisch Enterprise license (the “Enterprise License”)
|
||||||
|
Copyright (c) 2023-present AB Software GmbH.
|
||||||
|
|
||||||
|
With regard to the Automatisch Software:
|
||||||
|
|
||||||
|
This software and associated documentation files (the "Software") may only be
|
||||||
|
used in production, if you (and any entity that you represent) have a valid
|
||||||
|
Automatisch Enterprise license for the correct number of user seats. Subject
|
||||||
|
to the foregoing sentence, you are free to modify this Software and publish
|
||||||
|
patches to the Software. You agree that Automatisch and/or its licensors
|
||||||
|
(as applicable) retain all right, title and interest in and to all such
|
||||||
|
modifications and/or patches, and all such modifications and/or patches may
|
||||||
|
only be used, copied, modified, displayed, distributed, or otherwise exploited
|
||||||
|
with a valid Automatisch Enterprise license for the correct number of user seats.
|
||||||
|
Notwithstanding the foregoing, you may copy and modify the Software for
|
||||||
|
development and testing purposes, without requiring a subscription. You agree
|
||||||
|
that Automatisch and/or its licensors (as applicable) retain all right, title
|
||||||
|
and interest in and to all such modifications. You are not granted any other
|
||||||
|
rights beyond what is expressly stated herein. Subject to the foregoing, it is
|
||||||
|
forbidden to copy, merge, publish, distribute, sublicense, and/or sell the Software.
|
||||||
|
|
||||||
|
The full text of this Enterprise License 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.
|
||||||
|
|
||||||
|
For all third party components incorporated into the Automatisch Software, those
|
||||||
|
components are licensed under the original license provided by the owner of the
|
||||||
|
applicable component.
|
14
README.md
14
README.md
@@ -44,10 +44,18 @@ For other installation types, you can check the [installation](https://automatis
|
|||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
If you have any questions or problems, please visit our GitHub discussions page, and we'll try to help you as soon as possible.
|
If you have any questions or problems, please visit our GitHub issues page, and we'll try to help you as soon as possible.
|
||||||
|
|
||||||
[https://github.com/automatisch/automatisch/discussions](https://github.com/automatisch/automatisch/discussions)
|
[https://github.com/automatisch/automatisch/issues](https://github.com/automatisch/automatisch/issues)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Automatisch is an open-source software with the [AGPL 3.0 license](https://github.com/automatisch/automatisch/blob/main/LICENSE.md).
|
Automatisch Community Edition (Automatisch CE) is an open-source software with the [AGPL-3.0 license](LICENSE.agpl).
|
||||||
|
|
||||||
|
Automatisch Enterprise Edition (Automatisch EE) is a commercial offering with the [Enterprise license](LICENSE.enterprise).
|
||||||
|
|
||||||
|
The Automatisch repository contains both AGPL-licensed and Enterprise-licensed files. We maintain a single repository to make development easier.
|
||||||
|
|
||||||
|
All files that contain ".ee." in their name fall under the [Enterprise license](LICENSE.enterprise). All other files fall under the [AGPL-3.0 license](LICENSE.agpl).
|
||||||
|
|
||||||
|
See the [LICENSE](LICENSE) file for more information.
|
||||||
|
@@ -2,13 +2,13 @@
|
|||||||
FROM node:16-alpine
|
FROM node:16-alpine
|
||||||
WORKDIR /automatisch
|
WORKDIR /automatisch
|
||||||
|
|
||||||
RUN apk --no-cache add --virtual build-dependencies python3 build-base
|
RUN \
|
||||||
|
apk --no-cache add --virtual build-dependencies python3 build-base && \
|
||||||
|
yarn global add @automatisch/cli@0.10.0 --network-timeout 1000000 && \
|
||||||
|
rm -rf /usr/local/share/.cache/ && \
|
||||||
|
apk del build-dependencies
|
||||||
|
|
||||||
COPY ./entrypoint.sh /entrypoint.sh
|
COPY ./entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
RUN yarn global add @automatisch/cli@0.4.0 --network-timeout 1000000
|
|
||||||
|
|
||||||
RUN apk del build-dependencies python3 build-base
|
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
ENTRYPOINT ["sh", "/entrypoint.sh"]
|
ENTRYPOINT ["sh", "/entrypoint.sh"]
|
||||||
|
19
docker/Dockerfile.cloud
Normal file
19
docker/Dockerfile.cloud
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
FROM node:16-alpine
|
||||||
|
WORKDIR /automatisch
|
||||||
|
|
||||||
|
ENV PORT 3000
|
||||||
|
|
||||||
|
RUN ls -lna
|
||||||
|
|
||||||
|
# copy the app, note .dockerignore
|
||||||
|
COPY . ./
|
||||||
|
|
||||||
|
RUN yarn
|
||||||
|
RUN yarn lerna bootstrap
|
||||||
|
RUN yarn lerna run --scope=@*/{web,backend,cli} build
|
||||||
|
|
||||||
|
COPY ./docker/entrypoint-cloud.sh /entrypoint-cloud.sh
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
ENTRYPOINT ["sh", "/entrypoint-cloud.sh"]
|
@@ -1,5 +1,5 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
FROM automatischio/automatisch:0.4.0
|
FROM automatischio/automatisch:0.10.0
|
||||||
WORKDIR /automatisch
|
WORKDIR /automatisch
|
||||||
|
|
||||||
RUN apk add --no-cache openssl dos2unix
|
RUN apk add --no-cache openssl dos2unix
|
||||||
|
9
docker/entrypoint-cloud.sh
Executable file
9
docker/entrypoint-cloud.sh
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ -n "$WORKER" ]; then
|
||||||
|
yarn automatisch start-worker
|
||||||
|
else
|
||||||
|
yarn automatisch start
|
||||||
|
fi
|
@@ -2,7 +2,7 @@
|
|||||||
"packages": [
|
"packages": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
],
|
],
|
||||||
"version": "0.5.0",
|
"version": "0.10.0",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"useWorkspaces": true,
|
"useWorkspaces": true,
|
||||||
"command": {
|
"command": {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/root",
|
"name": "@automatisch/root",
|
||||||
"license": "AGPL-3.0",
|
"license": "See LICENSE file",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "lerna run --stream --parallel --scope=@*/{web,backend} dev",
|
"start": "lerna run --stream --parallel --scope=@*/{web,backend} dev",
|
||||||
|
15
packages/backend/.env-example.test
Normal file
15
packages/backend/.env-example.test
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
APP_ENV=test
|
||||||
|
HOST=localhost
|
||||||
|
PROTOCOL=http
|
||||||
|
PORT=3000
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
ENCRYPTION_KEY=sample_encryption_key
|
||||||
|
WEBHOOK_SECRET_KEY=sample_webhook_secret_key
|
||||||
|
APP_SECRET_KEY=sample_app_secret_key
|
||||||
|
POSTGRES_HOST=localhost
|
||||||
|
POSTGRES_DATABASE=automatisch_test
|
||||||
|
POSTGRES_PORT=5432
|
||||||
|
POSTGRES_USERNAME=automatisch_test_user
|
||||||
|
POSTGRES_PASSWORD=automatisch_test_user_password
|
||||||
|
REDIS_HOST=localhost
|
||||||
|
AUTOMATISCH_CLOUD=true
|
@@ -2,16 +2,33 @@ import appConfig from '../../src/config/app';
|
|||||||
import logger from '../../src/helpers/logger';
|
import logger from '../../src/helpers/logger';
|
||||||
import client from './client';
|
import client from './client';
|
||||||
import User from '../../src/models/user';
|
import User from '../../src/models/user';
|
||||||
|
import Role from '../../src/models/role';
|
||||||
import '../../src/config/orm';
|
import '../../src/config/orm';
|
||||||
|
|
||||||
|
async function fetchAdminRole() {
|
||||||
|
const role = await Role
|
||||||
|
.query()
|
||||||
|
.where({
|
||||||
|
key: 'admin'
|
||||||
|
})
|
||||||
|
.limit(1)
|
||||||
|
.first();
|
||||||
|
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
export async function createUser(
|
export async function createUser(
|
||||||
email = 'user@automatisch.io',
|
email = 'user@automatisch.io',
|
||||||
password = 'sample'
|
password = 'sample'
|
||||||
) {
|
) {
|
||||||
const UNIQUE_VIOLATION_CODE = '23505';
|
const UNIQUE_VIOLATION_CODE = '23505';
|
||||||
|
|
||||||
|
const role = await fetchAdminRole();
|
||||||
const userParams = {
|
const userParams = {
|
||||||
email,
|
email,
|
||||||
password,
|
password,
|
||||||
|
fullName: 'Initial admin',
|
||||||
|
roleId: role.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
9
packages/backend/jest.config.js
Normal file
9
packages/backend/jest.config.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
||||||
|
module.exports = {
|
||||||
|
preset: 'ts-jest',
|
||||||
|
testEnvironment: 'node',
|
||||||
|
setupFilesAfterEnv: ['./test/setup/global-hooks.ts'],
|
||||||
|
globalTeardown: './test/setup/global-teardown.ts',
|
||||||
|
collectCoverage: true,
|
||||||
|
collectCoverageFrom: ['src/graphql/queries/*.ts'],
|
||||||
|
};
|
@@ -1,6 +1,7 @@
|
|||||||
|
import { knexSnakeCaseMappers } from 'objection';
|
||||||
import appConfig from './src/config/app';
|
import appConfig from './src/config/app';
|
||||||
|
|
||||||
const fileExtension = appConfig.isDev ? 'ts' : 'js';
|
const fileExtension = appConfig.isDev || appConfig.isTest ? 'ts' : 'js';
|
||||||
|
|
||||||
const knexConfig = {
|
const knexConfig = {
|
||||||
client: 'pg',
|
client: 'pg',
|
||||||
@@ -12,6 +13,8 @@ const knexConfig = {
|
|||||||
database: appConfig.postgresDatabase,
|
database: appConfig.postgresDatabase,
|
||||||
ssl: appConfig.postgresEnableSsl,
|
ssl: appConfig.postgresEnableSsl,
|
||||||
},
|
},
|
||||||
|
asyncStackTraces: appConfig.isDev,
|
||||||
|
searchPath: [appConfig.postgresSchema],
|
||||||
pool: { min: 0, max: 20 },
|
pool: { min: 0, max: 20 },
|
||||||
migrations: {
|
migrations: {
|
||||||
directory: __dirname + '/src/db/migrations',
|
directory: __dirname + '/src/db/migrations',
|
||||||
@@ -21,6 +24,7 @@ const knexConfig = {
|
|||||||
seeds: {
|
seeds: {
|
||||||
directory: __dirname + '/src/db/seeds',
|
directory: __dirname + '/src/db/seeds',
|
||||||
},
|
},
|
||||||
|
...(appConfig.isTest ? knexSnakeCaseMappers() : {}),
|
||||||
};
|
};
|
||||||
|
|
||||||
export default knexConfig;
|
export default knexConfig;
|
||||||
|
@@ -1,15 +1,16 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/backend",
|
"name": "@automatisch/backend",
|
||||||
"version": "0.5.0",
|
"version": "0.10.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "See LICENSE file",
|
||||||
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "ts-node-dev --exit-child src/server.ts",
|
"dev": "ts-node-dev --watch 'src/graphql/schema.graphql' --exit-child src/server.ts",
|
||||||
"worker": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/worker.ts",
|
"worker": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/worker.ts",
|
||||||
"build": "tsc && yarn copy-statics",
|
"build": "tsc && yarn copy-statics",
|
||||||
"build:watch": "nodemon --watch 'src/**/*.ts' --watch 'bin/**/*.ts' --exec yarn build --ext ts",
|
"build:watch": "nodemon --watch 'src/**/*.ts' --watch 'bin/**/*.ts' --exec yarn build --ext ts",
|
||||||
"start": "node dist/src/server.js",
|
"start": "node dist/src/server.js",
|
||||||
"test": "ava",
|
"pretest": "APP_ENV=test ts-node ./test/setup/prepare-test-env.ts",
|
||||||
|
"test": "APP_ENV=test jest --verbose",
|
||||||
"lint": "eslint . --ignore-path ../../.eslintignore",
|
"lint": "eslint . --ignore-path ../../.eslintignore",
|
||||||
"db:create": "ts-node ./bin/database/create.ts",
|
"db:create": "ts-node ./bin/database/create.ts",
|
||||||
"db:seed:user": "ts-node ./bin/database/seed-user.ts",
|
"db:seed:user": "ts-node ./bin/database/seed-user.ts",
|
||||||
@@ -17,19 +18,27 @@
|
|||||||
"db:migration:create": "knex migrate:make",
|
"db:migration:create": "knex migrate:make",
|
||||||
"db:rollback": "knex migrate:rollback",
|
"db:rollback": "knex migrate:rollback",
|
||||||
"db:migrate": "knex migrate:latest",
|
"db:migrate": "knex migrate:latest",
|
||||||
"copy-statics": "copyfiles src/**/*.{graphql,json,svg} dist",
|
"copy-statics": "copyfiles src/**/*.{graphql,json,svg,hbs} dist",
|
||||||
"prepack": "yarn build",
|
"prepack": "yarn build",
|
||||||
"prebuild": "rm -rf ./dist"
|
"prebuild": "rm -rf ./dist"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@automatisch/web": "^0.5.0",
|
"@automatisch/web": "^0.10.0",
|
||||||
"@bull-board/express": "^3.10.1",
|
"@bull-board/express": "^3.10.1",
|
||||||
|
"@casl/ability": "^6.5.0",
|
||||||
"@graphql-tools/graphql-file-loader": "^7.3.4",
|
"@graphql-tools/graphql-file-loader": "^7.3.4",
|
||||||
"@graphql-tools/load": "^7.5.2",
|
"@graphql-tools/load": "^7.5.2",
|
||||||
|
"@node-saml/passport-saml": "^4.0.4",
|
||||||
"@rudderstack/rudder-sdk-node": "^1.1.2",
|
"@rudderstack/rudder-sdk-node": "^1.1.2",
|
||||||
|
"@sentry/node": "^7.42.0",
|
||||||
|
"@sentry/tracing": "^7.42.0",
|
||||||
|
"@types/accounting": "^0.4.2",
|
||||||
"@types/luxon": "^2.3.1",
|
"@types/luxon": "^2.3.1",
|
||||||
|
"@types/passport": "^1.0.12",
|
||||||
|
"@types/xmlrpc": "^1.3.7",
|
||||||
|
"accounting": "^0.4.1",
|
||||||
"ajv-formats": "^2.1.1",
|
"ajv-formats": "^2.1.1",
|
||||||
"axios": "0.24.0",
|
"axios": "1.6.0",
|
||||||
"bcrypt": "^5.0.1",
|
"bcrypt": "^5.0.1",
|
||||||
"bullmq": "^3.0.0",
|
"bullmq": "^3.0.0",
|
||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
@@ -45,18 +54,31 @@
|
|||||||
"graphql-shield": "^7.5.0",
|
"graphql-shield": "^7.5.0",
|
||||||
"graphql-tools": "^8.2.0",
|
"graphql-tools": "^8.2.0",
|
||||||
"graphql-type-json": "^0.3.2",
|
"graphql-type-json": "^0.3.2",
|
||||||
|
"handlebars": "^4.7.7",
|
||||||
"http-errors": "~1.6.3",
|
"http-errors": "~1.6.3",
|
||||||
|
"http-proxy-agent": "^7.0.0",
|
||||||
|
"https-proxy-agent": "^7.0.1",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.0",
|
||||||
"knex": "^2.4.0",
|
"knex": "^2.4.0",
|
||||||
|
"libphonenumber-js": "^1.10.48",
|
||||||
"lodash.get": "^4.4.2",
|
"lodash.get": "^4.4.2",
|
||||||
"luxon": "2.5.2",
|
"luxon": "2.5.2",
|
||||||
|
"memory-cache": "^0.2.0",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"multer": "1.4.5-lts.1",
|
"multer": "1.4.5-lts.1",
|
||||||
|
"node-html-markdown": "^1.3.0",
|
||||||
"nodemailer": "6.7.0",
|
"nodemailer": "6.7.0",
|
||||||
"oauth-1.0a": "^2.2.6",
|
"oauth-1.0a": "^2.2.6",
|
||||||
"objection": "^3.0.0",
|
"objection": "^3.0.0",
|
||||||
|
"passport": "^0.6.0",
|
||||||
"pg": "^8.7.1",
|
"pg": "^8.7.1",
|
||||||
"winston": "^3.7.1"
|
"php-serialize": "^4.0.2",
|
||||||
|
"pluralize": "^8.0.0",
|
||||||
|
"raw-body": "^2.5.2",
|
||||||
|
"showdown": "^2.1.0",
|
||||||
|
"stripe": "^11.13.0",
|
||||||
|
"winston": "^3.7.1",
|
||||||
|
"xmlrpc": "^1.3.2"
|
||||||
},
|
},
|
||||||
"contributors": [
|
"contributors": [
|
||||||
{
|
{
|
||||||
@@ -94,38 +116,35 @@
|
|||||||
"url": "https://github.com/automatisch/automatisch/issues"
|
"url": "https://github.com/automatisch/automatisch/issues"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@automatisch/types": "^0.5.0",
|
"@automatisch/types": "^0.10.0",
|
||||||
|
"@faker-js/faker": "^8.1.0",
|
||||||
"@types/bcrypt": "^5.0.0",
|
"@types/bcrypt": "^5.0.0",
|
||||||
"@types/bull": "^3.15.8",
|
"@types/bull": "^3.15.8",
|
||||||
"@types/cors": "^2.8.12",
|
"@types/cors": "^2.8.12",
|
||||||
"@types/crypto-js": "^4.0.2",
|
"@types/crypto-js": "^4.0.2",
|
||||||
"@types/express": "^4.17.15",
|
"@types/express": "^4.17.15",
|
||||||
"@types/http-errors": "^1.8.1",
|
"@types/http-errors": "^1.8.1",
|
||||||
|
"@types/jest": "^29.5.5",
|
||||||
"@types/jsonwebtoken": "^8.5.8",
|
"@types/jsonwebtoken": "^8.5.8",
|
||||||
"@types/lodash.get": "^4.4.6",
|
"@types/lodash.get": "^4.4.6",
|
||||||
|
"@types/memory-cache": "^0.2.2",
|
||||||
"@types/morgan": "^1.9.3",
|
"@types/morgan": "^1.9.3",
|
||||||
"@types/multer": "1.4.7",
|
"@types/multer": "1.4.7",
|
||||||
"@types/node": "^16.10.2",
|
"@types/node": "^16.10.2",
|
||||||
"@types/nodemailer": "^6.4.4",
|
"@types/nodemailer": "^6.4.4",
|
||||||
"@types/pg": "^8.6.1",
|
"@types/pg": "^8.6.1",
|
||||||
"@types/pino": "^7.0.5",
|
"@types/pino": "^7.0.5",
|
||||||
"ava": "^3.15.0",
|
"@types/pluralize": "^0.0.30",
|
||||||
|
"@types/showdown": "^2.0.1",
|
||||||
|
"@types/supertest": "^2.0.14",
|
||||||
|
"jest": "^29.7.0",
|
||||||
"nodemon": "^2.0.13",
|
"nodemon": "^2.0.13",
|
||||||
"sinon": "^11.1.2",
|
"sinon": "^11.1.2",
|
||||||
|
"supertest": "^6.3.3",
|
||||||
|
"ts-jest": "^29.1.1",
|
||||||
"ts-node": "^10.2.1",
|
"ts-node": "^10.2.1",
|
||||||
"ts-node-dev": "^1.1.8"
|
"ts-node-dev": "^1.1.8"
|
||||||
},
|
},
|
||||||
"ava": {
|
|
||||||
"files": [
|
|
||||||
"test/**/*"
|
|
||||||
],
|
|
||||||
"extensions": [
|
|
||||||
"ts"
|
|
||||||
],
|
|
||||||
"require": [
|
|
||||||
"ts-node/register"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,12 @@
|
|||||||
import createError from 'http-errors';
|
import createError from 'http-errors';
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import appConfig from './config/app';
|
|
||||||
import cors from 'cors';
|
import cors from 'cors';
|
||||||
|
|
||||||
|
import { IRequest } from '@automatisch/types';
|
||||||
|
import appConfig from './config/app';
|
||||||
import corsOptions from './config/cors-options';
|
import corsOptions from './config/cors-options';
|
||||||
import morgan from './helpers/morgan';
|
import morgan from './helpers/morgan';
|
||||||
|
import * as Sentry from './helpers/sentry.ee';
|
||||||
import appAssetsHandler from './helpers/app-assets-handler';
|
import appAssetsHandler from './helpers/app-assets-handler';
|
||||||
import webUIHandler from './helpers/web-ui-handler';
|
import webUIHandler from './helpers/web-ui-handler';
|
||||||
import errorHandler from './helpers/error-handler';
|
import errorHandler from './helpers/error-handler';
|
||||||
@@ -14,17 +17,23 @@ import {
|
|||||||
} from './helpers/create-bull-board-handler';
|
} from './helpers/create-bull-board-handler';
|
||||||
import injectBullBoardHandler from './helpers/inject-bull-board-handler';
|
import injectBullBoardHandler from './helpers/inject-bull-board-handler';
|
||||||
import router from './routes';
|
import router from './routes';
|
||||||
import { IRequest } from '@automatisch/types';
|
import configurePassport from './helpers/passport';
|
||||||
|
|
||||||
createBullBoardHandler(serverAdapter);
|
createBullBoardHandler(serverAdapter);
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
|
Sentry.init(app);
|
||||||
|
|
||||||
|
Sentry.attachRequestHandler(app);
|
||||||
|
Sentry.attachTracingHandler(app);
|
||||||
|
|
||||||
injectBullBoardHandler(app, serverAdapter);
|
injectBullBoardHandler(app, serverAdapter);
|
||||||
|
|
||||||
appAssetsHandler(app);
|
appAssetsHandler(app);
|
||||||
|
|
||||||
app.use(morgan);
|
app.use(morgan);
|
||||||
|
|
||||||
app.use(
|
app.use(
|
||||||
express.json({
|
express.json({
|
||||||
limit: appConfig.requestBodySizeLimit,
|
limit: appConfig.requestBodySizeLimit,
|
||||||
@@ -33,14 +42,19 @@ app.use(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
app.use(express.urlencoded({
|
app.use(
|
||||||
extended: false,
|
express.urlencoded({
|
||||||
limit: appConfig.requestBodySizeLimit,
|
extended: true,
|
||||||
verify(req, res, buf) {
|
limit: appConfig.requestBodySizeLimit,
|
||||||
(req as IRequest).rawBody = buf;
|
verify(req, res, buf) {
|
||||||
},
|
(req as IRequest).rawBody = buf;
|
||||||
}));
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
app.use(cors(corsOptions));
|
app.use(cors(corsOptions));
|
||||||
|
|
||||||
|
configurePassport(app);
|
||||||
|
|
||||||
app.use('/', router);
|
app.use('/', router);
|
||||||
|
|
||||||
webUIHandler(app);
|
webUIHandler(app);
|
||||||
@@ -50,6 +64,8 @@ app.use(function (req, res, next) {
|
|||||||
next(createError(404));
|
next(createError(404));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Sentry.attachErrorHandler(app);
|
||||||
|
|
||||||
app.use(errorHandler);
|
app.use(errorHandler);
|
||||||
|
|
||||||
export default app;
|
export default app;
|
||||||
|
@@ -0,0 +1,35 @@
|
|||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Add Template',
|
||||||
|
key: 'addTemplate',
|
||||||
|
description:
|
||||||
|
'Creates an attachment of a specified object by given parent ID.',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'Templete Data',
|
||||||
|
key: 'templateData',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
variables: true,
|
||||||
|
description: 'The content of your new Template in XML/HTML format.',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const templateData = $.step.parameters.templateData as string;
|
||||||
|
|
||||||
|
const base64Data = Buffer.from(templateData).toString('base64');
|
||||||
|
const dataURI = `data:application/xml;base64,${base64Data}`;
|
||||||
|
|
||||||
|
const body = JSON.stringify({ template: dataURI });
|
||||||
|
|
||||||
|
const response = await $.http.post('/template', body, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
$.setActionItem({ raw: response.data });
|
||||||
|
},
|
||||||
|
});
|
3
packages/backend/src/apps/carbone/actions/index.ts
Normal file
3
packages/backend/src/apps/carbone/actions/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import addTemplate from './add-template';
|
||||||
|
|
||||||
|
export default [addTemplate];
|
444
packages/backend/src/apps/carbone/assets/favicon.svg
Normal file
444
packages/backend/src/apps/carbone/assets/favicon.svg
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="100%" viewBox="0 0 1173 1173" enable-background="new 0 0 1173 1173" xml:space="preserve">
|
||||||
|
<path fill="#73348B" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M1174.000000,208.000000
|
||||||
|
C1174.000000,529.969421 1174.000000,851.938782 1174.000000,1173.954102
|
||||||
|
C783.067810,1173.954102 392.135559,1173.954102 1.101677,1173.954102
|
||||||
|
C1.101677,783.104980 1.101677,392.209930 1.101677,1.000000
|
||||||
|
C322.697510,1.000000 644.395142,1.000000 966.516235,1.467920
|
||||||
|
C966.918274,68.235474 966.895691,134.535110 966.877258,200.834747
|
||||||
|
C966.875183,208.314804 966.885986,208.322311 974.623108,208.322571
|
||||||
|
C1038.924072,208.324631 1103.225098,208.326889 1167.526123,208.310104
|
||||||
|
C1169.684082,208.309540 1171.842041,208.107910 1174.000000,208.000000
|
||||||
|
M824.469116,403.972260
|
||||||
|
C830.640320,396.844513 836.811584,389.716736 843.084839,382.471130
|
||||||
|
C813.026611,353.649353 780.256958,329.661011 741.486328,314.979523
|
||||||
|
C680.713013,291.966217 618.102173,287.454407 554.867737,301.133331
|
||||||
|
C463.817413,320.829376 397.312988,373.276550 356.951416,457.320282
|
||||||
|
C326.804779,520.093689 319.957764,586.465027 335.155365,654.111511
|
||||||
|
C358.404633,757.597168 419.946594,829.052856 520.224731,865.190979
|
||||||
|
C575.706055,885.185242 632.887451,885.395691 690.185303,873.820862
|
||||||
|
C753.158081,861.099548 803.501465,826.733521 847.328979,780.124756
|
||||||
|
C825.522522,758.991638 803.799194,737.939087 781.866882,716.683960
|
||||||
|
C775.039185,722.581055 767.314697,729.376404 759.459290,736.016846
|
||||||
|
C716.790833,772.086792 668.088501,791.050049 611.649048,788.182129
|
||||||
|
C555.974548,785.353088 510.796692,761.934998 476.366638,718.347046
|
||||||
|
C450.585236,685.708313 437.160706,648.031494 433.752258,606.690613
|
||||||
|
C430.193268,563.523926 437.309692,522.406311 457.904602,484.052490
|
||||||
|
C496.945190,411.347198 573.378845,374.580780 654.712402,388.765686
|
||||||
|
C691.388062,395.162079 723.361389,411.383057 752.404175,434.001740
|
||||||
|
C761.432556,441.033173 770.043213,448.601013 779.130859,456.160980
|
||||||
|
C794.123657,438.910675 809.069336,421.714569 824.469116,403.972260
|
||||||
|
M401.126434,1003.500000
|
||||||
|
C401.122375,996.333740 401.039398,989.166199 401.152191,982.001770
|
||||||
|
C401.198700,979.046997 400.149170,977.760315 397.091583,977.847290
|
||||||
|
C392.096008,977.989441 387.061035,978.231079 382.102264,977.778320
|
||||||
|
C376.825531,977.296387 375.754608,979.441406 375.775360,984.315125
|
||||||
|
C375.949005,1025.145630 375.873474,1065.977417 375.874237,1106.808716
|
||||||
|
C375.874329,1113.141724 375.994049,1119.477539 375.836487,1125.806519
|
||||||
|
C375.755646,1129.053101 376.993805,1130.258667 380.217560,1130.162231
|
||||||
|
C385.712311,1129.997559 391.222198,1129.953491 396.712982,1130.175049
|
||||||
|
C400.378265,1130.322998 401.327179,1128.650757 401.160339,1125.375610
|
||||||
|
C400.987305,1121.979004 401.121826,1118.566772 401.121826,1114.051758
|
||||||
|
C403.029083,1115.849609 404.038116,1116.655273 404.875366,1117.611572
|
||||||
|
C423.297913,1138.649780 456.085083,1135.565308 472.987305,1118.665161
|
||||||
|
C494.109619,1097.545654 495.745544,1057.582886 476.289124,1034.845947
|
||||||
|
C458.642456,1014.223816 423.619873,1010.312439 404.695007,1033.663574
|
||||||
|
C403.933044,1034.603882 402.896790,1035.321899 401.126709,1036.922485
|
||||||
|
C401.126709,1025.377563 401.126709,1014.938782 401.126434,1003.500000
|
||||||
|
M1021.364685,1102.039429
|
||||||
|
C1034.668091,1125.202515 1054.950562,1134.733032 1081.114746,1132.114380
|
||||||
|
C1116.971191,1128.525757 1140.394165,1093.509888 1130.352783,1058.871704
|
||||||
|
C1120.842163,1026.064697 1084.911865,1009.039368 1051.827393,1021.662964
|
||||||
|
C1020.072083,1033.779419 1006.094421,1069.964478 1021.364685,1102.039429
|
||||||
|
M513.859009,1053.461792
|
||||||
|
C508.981232,1065.614258 508.319275,1078.089722 511.612946,1090.667114
|
||||||
|
C518.928467,1118.602539 545.601379,1135.665771 576.077942,1132.138428
|
||||||
|
C615.868713,1127.533081 639.243103,1085.250000 621.290771,1049.613525
|
||||||
|
C609.925598,1027.053101 590.627502,1017.015625 565.767517,1017.961548
|
||||||
|
C541.582703,1018.881775 524.357849,1030.779541 513.859009,1053.461792
|
||||||
|
M853.945312,1105.526489
|
||||||
|
C844.979370,1111.390137 835.234131,1113.082764 824.789001,1110.928833
|
||||||
|
C812.187134,1108.330078 801.815186,1096.424561 801.983032,1084.128296
|
||||||
|
C803.915649,1084.128296 805.872803,1084.128418 807.829956,1084.128296
|
||||||
|
C827.828918,1084.128174 847.827942,1084.128174 867.826904,1084.128052
|
||||||
|
C883.022278,1084.128052 883.416565,1084.089355 881.911011,1068.743774
|
||||||
|
C877.873352,1027.588623 845.873840,1010.303040 812.589294,1020.461792
|
||||||
|
C788.140564,1027.923828 771.315674,1053.597778 776.625183,1086.417480
|
||||||
|
C782.995667,1125.795166 822.767029,1141.211426 855.517578,1128.350586
|
||||||
|
C864.166870,1124.953979 871.321899,1119.494873 877.282959,1111.812744
|
||||||
|
C872.197815,1107.281738 867.508911,1103.103882 862.714783,1098.832153
|
||||||
|
C859.777344,1101.088501 857.158447,1103.100098 853.945312,1105.526489
|
||||||
|
M183.035294,1022.439941
|
||||||
|
C178.726364,1024.044678 174.417435,1025.649414 169.759094,1027.384277
|
||||||
|
C172.080597,1034.339355 174.168320,1040.594116 176.396927,1047.270874
|
||||||
|
C178.710007,1046.498047 180.428452,1045.982422 182.104675,1045.354126
|
||||||
|
C192.414581,1041.489502 203.049866,1039.981567 214.012650,1041.017212
|
||||||
|
C228.197418,1042.357178 237.230057,1053.265137 234.370621,1065.622192
|
||||||
|
C233.945877,1065.733521 233.456528,1066.014160 233.019272,1065.948486
|
||||||
|
C231.544067,1065.726807 230.081848,1065.406616 228.624466,1065.080322
|
||||||
|
C213.432663,1061.679199 198.251007,1060.834473 183.260117,1065.925537
|
||||||
|
C168.246078,1071.024536 160.203674,1082.376099 160.159256,1097.991577
|
||||||
|
C160.116211,1113.124634 168.617416,1125.277100 183.512024,1129.868774
|
||||||
|
C201.272339,1135.343872 217.762161,1132.975952 231.922165,1119.980591
|
||||||
|
C232.681229,1119.283936 233.598526,1118.759888 234.998825,1117.756470
|
||||||
|
C234.998825,1120.660034 235.167923,1122.828491 234.961670,1124.960815
|
||||||
|
C234.595810,1128.743408 235.836517,1130.435547 239.938004,1130.198853
|
||||||
|
C245.253296,1129.892090 250.601852,1130.021362 255.931290,1130.154541
|
||||||
|
C258.904449,1130.228760 260.057526,1129.146118 260.038300,1126.091797
|
||||||
|
C259.899628,1104.095337 260.293976,1082.087280 259.708466,1060.104492
|
||||||
|
C259.149353,1039.110596 247.823425,1025.003418 228.752792,1020.447083
|
||||||
|
C213.662979,1016.841919 198.651810,1018.154236 183.035294,1022.439941
|
||||||
|
M652.674988,1084.500000
|
||||||
|
C652.676819,1097.990356 652.774353,1111.481812 652.619568,1124.970337
|
||||||
|
C652.575684,1128.797485 653.756165,1130.430420 657.763428,1130.184448
|
||||||
|
C662.243225,1129.909424 666.753052,1130.130493 671.249817,1130.123413
|
||||||
|
C677.988098,1130.112915 677.994995,1130.108398 677.998840,1123.280029
|
||||||
|
C678.009644,1104.127197 677.813293,1084.971313 678.088196,1065.822388
|
||||||
|
C678.289795,1051.782104 687.650574,1041.728882 700.475464,1040.969238
|
||||||
|
C714.725037,1040.125244 723.562256,1047.280884 725.706665,1061.495361
|
||||||
|
C726.002808,1063.458374 725.985596,1065.479614 725.987732,1067.474121
|
||||||
|
C726.007690,1086.627075 726.075562,1105.780396 725.937012,1124.932373
|
||||||
|
C725.910034,1128.659790 726.763428,1130.436401 730.909912,1130.197876
|
||||||
|
C736.388123,1129.882690 741.898499,1130.048462 747.393127,1130.132080
|
||||||
|
C750.111389,1130.173340 751.333618,1129.085205 751.318970,1126.315796
|
||||||
|
C751.187561,1101.504028 751.651367,1076.672607 750.778564,1051.887817
|
||||||
|
C750.329590,1039.136963 743.986084,1028.674927 732.321106,1022.254761
|
||||||
|
C716.863159,1013.746887 695.690918,1017.041931 683.479919,1029.807129
|
||||||
|
C681.911743,1031.446533 680.418274,1033.157227 677.994934,1035.817871
|
||||||
|
C677.994934,1031.179810 677.847046,1027.753906 678.037964,1024.347046
|
||||||
|
C678.215881,1021.172424 677.140076,1019.820496 673.800659,1019.952393
|
||||||
|
C668.645813,1020.156006 663.460022,1020.260315 658.319153,1019.922363
|
||||||
|
C653.942261,1019.634521 652.544373,1021.128174 652.590515,1025.542358
|
||||||
|
C652.792175,1044.859741 652.675354,1064.180542 652.674988,1084.500000
|
||||||
|
M119.317238,1046.101074
|
||||||
|
C122.268578,1048.446411 125.219917,1050.791626 127.387344,1052.514038
|
||||||
|
C132.109711,1048.247925 136.374313,1044.289062 140.759842,1040.468872
|
||||||
|
C144.010681,1037.637085 143.275986,1035.555298 140.351669,1032.810791
|
||||||
|
C125.930077,1019.275879 108.562424,1015.442383 89.835030,1018.619995
|
||||||
|
C58.671745,1023.907654 39.333969,1050.496826 43.188984,1083.193359
|
||||||
|
C45.926426,1106.411377 59.195229,1122.338257 81.478561,1129.875244
|
||||||
|
C103.477272,1137.315918 128.440613,1130.652588 142.387802,1114.456543
|
||||||
|
C144.090958,1112.478760 144.008331,1111.254517 142.279175,1109.447876
|
||||||
|
C138.256943,1105.245117 134.418365,1100.866577 130.299011,1096.332031
|
||||||
|
C121.771889,1103.853394 113.867172,1109.740845 103.144859,1110.191895
|
||||||
|
C92.244728,1110.650269 83.239876,1107.153076 76.138634,1098.826416
|
||||||
|
C65.223991,1086.028564 65.297775,1064.157593 76.319031,1051.184937
|
||||||
|
C87.046638,1038.557983 103.476791,1036.430054 119.317238,1046.101074
|
||||||
|
M353.950317,1043.008423
|
||||||
|
C354.006683,1036.186401 353.906464,1029.358154 354.180176,1022.544922
|
||||||
|
C354.335571,1018.677124 352.771240,1017.653687 349.151764,1017.919495
|
||||||
|
C335.330078,1018.934265 325.588013,1026.116211 318.604279,1037.643921
|
||||||
|
C317.750885,1039.052734 316.890594,1040.457275 316.033447,1041.863770
|
||||||
|
C315.121674,1035.918945 314.900055,1030.423950 315.194824,1024.956665
|
||||||
|
C315.413696,1020.897034 313.799438,1019.733093 309.981384,1019.938782
|
||||||
|
C305.168030,1020.198242 300.312347,1020.256714 295.507935,1019.924500
|
||||||
|
C291.198883,1019.626587 289.697205,1020.959900 289.777374,1025.465820
|
||||||
|
C290.040833,1040.276245 289.874969,1055.094116 289.875153,1069.909180
|
||||||
|
C289.875397,1088.219849 289.984222,1106.531616 289.796387,1124.840332
|
||||||
|
C289.753448,1129.024658 291.144775,1130.494019 295.243988,1130.181030
|
||||||
|
C298.884857,1129.903076 302.564056,1130.154053 306.225861,1130.119141
|
||||||
|
C316.127838,1130.024902 314.970276,1131.203003 315.137146,1121.384644
|
||||||
|
C315.383026,1106.919067 314.932556,1092.386353 316.201233,1078.007690
|
||||||
|
C317.784821,1060.059814 328.779388,1048.418091 344.942749,1045.376465
|
||||||
|
C347.832062,1044.832642 350.733795,1044.354858 353.950317,1043.008423
|
||||||
|
M970.561462,1130.149170
|
||||||
|
C976.347717,1130.149170 982.133972,1130.149170 988.190430,1130.149170
|
||||||
|
C988.190430,1093.234131 988.190430,1056.859741 988.190430,1020.333618
|
||||||
|
C979.702515,1020.333618 971.488037,1020.333618 963.325317,1020.333618
|
||||||
|
C963.325317,1057.058838 963.325317,1093.449585 963.325317,1130.149170
|
||||||
|
C965.622131,1130.149170 967.600586,1130.149170 970.561462,1130.149170
|
||||||
|
M931.087708,1129.856323
|
||||||
|
C931.087708,1120.373291 931.087708,1110.890259 931.087708,1101.511963
|
||||||
|
C922.010315,1101.511963 913.093201,1101.511963 904.095581,1101.511963
|
||||||
|
C904.095581,1111.126099 904.095581,1120.382812 904.095581,1130.103516
|
||||||
|
C912.953064,1130.103516 921.562012,1130.103516 931.087708,1129.856323
|
||||||
|
M989.143494,1000.348511
|
||||||
|
C989.143494,993.401855 989.143494,986.455139 989.143494,979.396606
|
||||||
|
C979.834900,979.396606 970.989380,979.396606 962.400879,979.396606
|
||||||
|
C962.400879,987.527710 962.400879,995.258179 962.400879,1003.146362
|
||||||
|
C970.452820,1003.146362 978.106445,1003.221008 985.755371,1003.064941
|
||||||
|
C986.887451,1003.041870 987.997314,1001.928955 989.143494,1000.348511
|
||||||
|
z"/>
|
||||||
|
<path fill="#B497C6" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M1174.000000,207.750000
|
||||||
|
C1171.842041,208.107910 1169.684082,208.309540 1167.526123,208.310104
|
||||||
|
C1103.225098,208.326889 1038.924072,208.324631 974.623108,208.322571
|
||||||
|
C966.885986,208.322311 966.875183,208.314804 966.877258,200.834747
|
||||||
|
C966.895691,134.535110 966.918274,68.235474 966.969849,1.467920
|
||||||
|
C967.000000,1.000000 967.500000,1.000000 967.892212,1.300326
|
||||||
|
C968.620972,1.969603 968.943176,2.352815 969.295898,2.705561
|
||||||
|
C1036.645020,70.060425 1103.995605,137.413895 1171.356201,204.757263
|
||||||
|
C1172.170776,205.571564 1173.115845,206.255310 1174.000000,207.000000
|
||||||
|
C1174.000000,207.000000 1174.000000,207.500000 1174.000000,207.750000
|
||||||
|
z"/>
|
||||||
|
<path fill="#FFFFFF" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M1174.000000,206.533020
|
||||||
|
C1173.115845,206.255310 1172.170776,205.571564 1171.356201,204.757263
|
||||||
|
C1103.995605,137.413895 1036.645020,70.060425 969.295898,2.705561
|
||||||
|
C968.943176,2.352815 968.620972,1.969603 968.142212,1.300326
|
||||||
|
C1036.594238,1.000000 1105.188599,1.000000 1174.000000,1.000000
|
||||||
|
C1174.000000,69.355194 1174.000000,137.710617 1174.000000,206.533020
|
||||||
|
z"/>
|
||||||
|
<path fill="#FFFFFF" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M824.242065,404.245361
|
||||||
|
C809.069336,421.714569 794.123657,438.910675 779.130859,456.160980
|
||||||
|
C770.043213,448.601013 761.432556,441.033173 752.404175,434.001740
|
||||||
|
C723.361389,411.383057 691.388062,395.162079 654.712402,388.765686
|
||||||
|
C573.378845,374.580780 496.945190,411.347198 457.904602,484.052490
|
||||||
|
C437.309692,522.406311 430.193268,563.523926 433.752258,606.690613
|
||||||
|
C437.160706,648.031494 450.585236,685.708313 476.366638,718.347046
|
||||||
|
C510.796692,761.934998 555.974548,785.353088 611.649048,788.182129
|
||||||
|
C668.088501,791.050049 716.790833,772.086792 759.459290,736.016846
|
||||||
|
C767.314697,729.376404 775.039185,722.581055 781.866882,716.683960
|
||||||
|
C803.799194,737.939087 825.522522,758.991638 847.328979,780.124756
|
||||||
|
C803.501465,826.733521 753.158081,861.099548 690.185303,873.820862
|
||||||
|
C632.887451,885.395691 575.706055,885.185242 520.224731,865.190979
|
||||||
|
C419.946594,829.052856 358.404633,757.597168 335.155365,654.111511
|
||||||
|
C319.957764,586.465027 326.804779,520.093689 356.951416,457.320282
|
||||||
|
C397.312988,373.276550 463.817413,320.829376 554.867737,301.133331
|
||||||
|
C618.102173,287.454407 680.713013,291.966217 741.486328,314.979523
|
||||||
|
C780.256958,329.661011 813.026611,353.649353 843.084839,382.471130
|
||||||
|
C836.811584,389.716736 830.640320,396.844513 824.242065,404.245361
|
||||||
|
z"/>
|
||||||
|
<path fill="#B496C6" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M401.126587,1004.000000
|
||||||
|
C401.126709,1014.938782 401.126709,1025.377563 401.126709,1036.922485
|
||||||
|
C402.896790,1035.321899 403.933044,1034.603882 404.695007,1033.663574
|
||||||
|
C423.619873,1010.312439 458.642456,1014.223816 476.289124,1034.845947
|
||||||
|
C495.745544,1057.582886 494.109619,1097.545654 472.987305,1118.665161
|
||||||
|
C456.085083,1135.565308 423.297913,1138.649780 404.875366,1117.611572
|
||||||
|
C404.038116,1116.655273 403.029083,1115.849609 401.121826,1114.051758
|
||||||
|
C401.121826,1118.566772 400.987305,1121.979004 401.160339,1125.375610
|
||||||
|
C401.327179,1128.650757 400.378265,1130.322998 396.712982,1130.175049
|
||||||
|
C391.222198,1129.953491 385.712311,1129.997559 380.217560,1130.162231
|
||||||
|
C376.993805,1130.258667 375.755646,1129.053101 375.836487,1125.806519
|
||||||
|
C375.994049,1119.477539 375.874329,1113.141724 375.874237,1106.808716
|
||||||
|
C375.873474,1065.977417 375.949005,1025.145630 375.775360,984.315125
|
||||||
|
C375.754608,979.441406 376.825531,977.296387 382.102264,977.778320
|
||||||
|
C387.061035,978.231079 392.096008,977.989441 397.091583,977.847290
|
||||||
|
C400.149170,977.760315 401.198700,979.046997 401.152191,982.001770
|
||||||
|
C401.039398,989.166199 401.122375,996.333740 401.126587,1004.000000
|
||||||
|
M401.102875,1069.011719
|
||||||
|
C400.098053,1078.886963 401.329559,1088.256470 407.101685,1096.684570
|
||||||
|
C420.591766,1116.381714 449.957458,1114.592529 459.843262,1092.900513
|
||||||
|
C462.811829,1086.386719 463.929352,1078.394409 463.659058,1071.163086
|
||||||
|
C462.954895,1052.325073 448.612427,1039.179199 431.024689,1039.892334
|
||||||
|
C416.229248,1040.492432 405.168213,1050.977661 401.102875,1069.011719
|
||||||
|
z"/>
|
||||||
|
<path fill="#FEFDFE" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M1021.202576,1101.701294
|
||||||
|
C1006.094421,1069.964478 1020.072083,1033.779419 1051.827393,1021.662964
|
||||||
|
C1084.911865,1009.039368 1120.842163,1026.064697 1130.352783,1058.871704
|
||||||
|
C1140.394165,1093.509888 1116.971191,1128.525757 1081.114746,1132.114380
|
||||||
|
C1054.950562,1134.733032 1034.668091,1125.202515 1021.202576,1101.701294
|
||||||
|
M1063.986572,1041.223145
|
||||||
|
C1048.638306,1046.359863 1041.596069,1057.693604 1040.531982,1073.203491
|
||||||
|
C1038.714111,1099.699341 1064.766113,1118.165283 1088.315552,1107.193970
|
||||||
|
C1103.746460,1100.005005 1111.074951,1080.915771 1105.178711,1063.268677
|
||||||
|
C1099.385498,1045.930298 1083.597778,1037.239746 1063.986572,1041.223145
|
||||||
|
z"/>
|
||||||
|
<path fill="#B396C5" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M513.996948,1053.104736
|
||||||
|
C524.357849,1030.779541 541.582703,1018.881775 565.767517,1017.961548
|
||||||
|
C590.627502,1017.015625 609.925598,1027.053101 621.290771,1049.613525
|
||||||
|
C639.243103,1085.250000 615.868713,1127.533081 576.077942,1132.138428
|
||||||
|
C545.601379,1135.665771 518.928467,1118.602539 511.612946,1090.667114
|
||||||
|
C508.319275,1078.089722 508.981232,1065.614258 513.996948,1053.104736
|
||||||
|
M562.260620,1040.444092
|
||||||
|
C546.615784,1043.979858 537.547485,1054.070801 535.297913,1070.447632
|
||||||
|
C533.121765,1086.289917 541.953796,1102.308838 555.941284,1107.888672
|
||||||
|
C570.341492,1113.633301 586.898376,1109.268066 595.135681,1096.926514
|
||||||
|
C603.733704,1084.044556 604.355286,1070.265991 596.774170,1056.799438
|
||||||
|
C589.497620,1043.873901 577.771179,1038.791748 562.260620,1040.444092
|
||||||
|
z"/>
|
||||||
|
<path fill="#B396C5" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M854.242432,1105.319092
|
||||||
|
C857.158447,1103.100098 859.777344,1101.088501 862.714783,1098.832153
|
||||||
|
C867.508911,1103.103882 872.197815,1107.281738 877.282959,1111.812744
|
||||||
|
C871.321899,1119.494873 864.166870,1124.953979 855.517578,1128.350586
|
||||||
|
C822.767029,1141.211426 782.995667,1125.795166 776.625183,1086.417480
|
||||||
|
C771.315674,1053.597778 788.140564,1027.923828 812.589294,1020.461792
|
||||||
|
C845.873840,1010.303040 877.873352,1027.588623 881.911011,1068.743774
|
||||||
|
C883.416565,1084.089355 883.022278,1084.128052 867.826904,1084.128052
|
||||||
|
C847.827942,1084.128174 827.828918,1084.128174 807.829956,1084.128296
|
||||||
|
C805.872803,1084.128418 803.915649,1084.128296 801.983032,1084.128296
|
||||||
|
C801.815186,1096.424561 812.187134,1108.330078 824.789001,1110.928833
|
||||||
|
C835.234131,1113.082764 844.979370,1111.390137 854.242432,1105.319092
|
||||||
|
M807.682800,1067.153442
|
||||||
|
C823.922729,1067.153442 840.162659,1067.153442 856.360352,1067.153442
|
||||||
|
C857.024231,1051.490723 843.821167,1038.060181 828.868347,1038.415405
|
||||||
|
C814.209839,1038.763672 800.809204,1052.746582 801.885498,1066.903320
|
||||||
|
C803.478333,1066.985229 805.112427,1067.069336 807.682800,1067.153442
|
||||||
|
z"/>
|
||||||
|
<path fill="#B396C6" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M183.418549,1022.317383
|
||||||
|
C198.651810,1018.154236 213.662979,1016.841919 228.752792,1020.447083
|
||||||
|
C247.823425,1025.003418 259.149353,1039.110596 259.708466,1060.104492
|
||||||
|
C260.293976,1082.087280 259.899628,1104.095337 260.038300,1126.091797
|
||||||
|
C260.057526,1129.146118 258.904449,1130.228760 255.931290,1130.154541
|
||||||
|
C250.601852,1130.021362 245.253296,1129.892090 239.938004,1130.198853
|
||||||
|
C235.836517,1130.435547 234.595810,1128.743408 234.961670,1124.960815
|
||||||
|
C235.167923,1122.828491 234.998825,1120.660034 234.998825,1117.756470
|
||||||
|
C233.598526,1118.759888 232.681229,1119.283936 231.922165,1119.980591
|
||||||
|
C217.762161,1132.975952 201.272339,1135.343872 183.512024,1129.868774
|
||||||
|
C168.617416,1125.277100 160.116211,1113.124634 160.159256,1097.991577
|
||||||
|
C160.203674,1082.376099 168.246078,1071.024536 183.260117,1065.925537
|
||||||
|
C198.251007,1060.834473 213.432663,1061.679199 228.624466,1065.080322
|
||||||
|
C230.081848,1065.406616 231.544067,1065.726807 233.019272,1065.948486
|
||||||
|
C233.456528,1066.014160 233.945877,1065.733521 234.370621,1065.622192
|
||||||
|
C237.230057,1053.265137 228.197418,1042.357178 214.012650,1041.017212
|
||||||
|
C203.049866,1039.981567 192.414581,1041.489502 182.104675,1045.354126
|
||||||
|
C180.428452,1045.982422 178.710007,1046.498047 176.396927,1047.270874
|
||||||
|
C174.168320,1040.594116 172.080597,1034.339355 169.759094,1027.384277
|
||||||
|
C174.417435,1025.649414 178.726364,1024.044678 183.418549,1022.317383
|
||||||
|
M222.614487,1110.282959
|
||||||
|
C232.280441,1105.292969 236.480362,1097.197876 235.760620,1086.535889
|
||||||
|
C235.661087,1085.061401 234.448975,1082.775879 233.263031,1082.397217
|
||||||
|
C220.997086,1078.481323 208.516418,1076.766968 196.064621,1081.398193
|
||||||
|
C188.557663,1084.190308 184.559586,1090.745972 185.061066,1098.121948
|
||||||
|
C185.541321,1105.185791 190.386749,1110.687134 198.052612,1112.792114
|
||||||
|
C206.277649,1115.050659 214.217789,1113.966431 222.614487,1110.282959
|
||||||
|
z"/>
|
||||||
|
<path fill="#B497C6" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M652.674561,1084.000000
|
||||||
|
C652.675354,1064.180542 652.792175,1044.859741 652.590515,1025.542358
|
||||||
|
C652.544373,1021.128174 653.942261,1019.634521 658.319153,1019.922363
|
||||||
|
C663.460022,1020.260315 668.645813,1020.156006 673.800659,1019.952393
|
||||||
|
C677.140076,1019.820496 678.215881,1021.172424 678.037964,1024.347046
|
||||||
|
C677.847046,1027.753906 677.994934,1031.179810 677.994934,1035.817871
|
||||||
|
C680.418274,1033.157227 681.911743,1031.446533 683.479919,1029.807129
|
||||||
|
C695.690918,1017.041931 716.863159,1013.746887 732.321106,1022.254761
|
||||||
|
C743.986084,1028.674927 750.329590,1039.136963 750.778564,1051.887817
|
||||||
|
C751.651367,1076.672607 751.187561,1101.504028 751.318970,1126.315796
|
||||||
|
C751.333618,1129.085205 750.111389,1130.173340 747.393127,1130.132080
|
||||||
|
C741.898499,1130.048462 736.388123,1129.882690 730.909912,1130.197876
|
||||||
|
C726.763428,1130.436401 725.910034,1128.659790 725.937012,1124.932373
|
||||||
|
C726.075562,1105.780396 726.007690,1086.627075 725.987732,1067.474121
|
||||||
|
C725.985596,1065.479614 726.002808,1063.458374 725.706665,1061.495361
|
||||||
|
C723.562256,1047.280884 714.725037,1040.125244 700.475464,1040.969238
|
||||||
|
C687.650574,1041.728882 678.289795,1051.782104 678.088196,1065.822388
|
||||||
|
C677.813293,1084.971313 678.009644,1104.127197 677.998840,1123.280029
|
||||||
|
C677.994995,1130.108398 677.988098,1130.112915 671.249817,1130.123413
|
||||||
|
C666.753052,1130.130493 662.243225,1129.909424 657.763428,1130.184448
|
||||||
|
C653.756165,1130.430420 652.575684,1128.797485 652.619568,1124.970337
|
||||||
|
C652.774353,1111.481812 652.676819,1097.990356 652.674561,1084.000000
|
||||||
|
z"/>
|
||||||
|
<path fill="#B396C5" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M119.017403,1045.897461
|
||||||
|
C103.476791,1036.430054 87.046638,1038.557983 76.319031,1051.184937
|
||||||
|
C65.297775,1064.157593 65.223991,1086.028564 76.138634,1098.826416
|
||||||
|
C83.239876,1107.153076 92.244728,1110.650269 103.144859,1110.191895
|
||||||
|
C113.867172,1109.740845 121.771889,1103.853394 130.299011,1096.332031
|
||||||
|
C134.418365,1100.866577 138.256943,1105.245117 142.279175,1109.447876
|
||||||
|
C144.008331,1111.254517 144.090958,1112.478760 142.387802,1114.456543
|
||||||
|
C128.440613,1130.652588 103.477272,1137.315918 81.478561,1129.875244
|
||||||
|
C59.195229,1122.338257 45.926426,1106.411377 43.188984,1083.193359
|
||||||
|
C39.333969,1050.496826 58.671745,1023.907654 89.835030,1018.619995
|
||||||
|
C108.562424,1015.442383 125.930077,1019.275879 140.351669,1032.810791
|
||||||
|
C143.275986,1035.555298 144.010681,1037.637085 140.759842,1040.468872
|
||||||
|
C136.374313,1044.289062 132.109711,1048.247925 127.387344,1052.514038
|
||||||
|
C125.219917,1050.791626 122.268578,1048.446411 119.017403,1045.897461
|
||||||
|
z"/>
|
||||||
|
<path fill="#B497C6" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M353.790070,1043.427490
|
||||||
|
C350.733795,1044.354858 347.832062,1044.832642 344.942749,1045.376465
|
||||||
|
C328.779388,1048.418091 317.784821,1060.059814 316.201233,1078.007690
|
||||||
|
C314.932556,1092.386353 315.383026,1106.919067 315.137146,1121.384644
|
||||||
|
C314.970276,1131.203003 316.127838,1130.024902 306.225861,1130.119141
|
||||||
|
C302.564056,1130.154053 298.884857,1129.903076 295.243988,1130.181030
|
||||||
|
C291.144775,1130.494019 289.753448,1129.024658 289.796387,1124.840332
|
||||||
|
C289.984222,1106.531616 289.875397,1088.219849 289.875153,1069.909180
|
||||||
|
C289.874969,1055.094116 290.040833,1040.276245 289.777374,1025.465820
|
||||||
|
C289.697205,1020.959900 291.198883,1019.626587 295.507935,1019.924500
|
||||||
|
C300.312347,1020.256714 305.168030,1020.198242 309.981384,1019.938782
|
||||||
|
C313.799438,1019.733093 315.413696,1020.897034 315.194824,1024.956665
|
||||||
|
C314.900055,1030.423950 315.121674,1035.918945 316.033447,1041.863770
|
||||||
|
C316.890594,1040.457275 317.750885,1039.052734 318.604279,1037.643921
|
||||||
|
C325.588013,1026.116211 335.330078,1018.934265 349.151764,1017.919495
|
||||||
|
C352.771240,1017.653687 354.335571,1018.677124 354.180176,1022.544922
|
||||||
|
C353.906464,1029.358154 354.006683,1036.186401 353.790070,1043.427490
|
||||||
|
z"/>
|
||||||
|
<path fill="#FFFFFF" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M970.070190,1130.149170
|
||||||
|
C967.600586,1130.149170 965.622131,1130.149170 963.325317,1130.149170
|
||||||
|
C963.325317,1093.449585 963.325317,1057.058838 963.325317,1020.333618
|
||||||
|
C971.488037,1020.333618 979.702515,1020.333618 988.190430,1020.333618
|
||||||
|
C988.190430,1056.859741 988.190430,1093.234131 988.190430,1130.149170
|
||||||
|
C982.133972,1130.149170 976.347717,1130.149170 970.070190,1130.149170
|
||||||
|
z"/>
|
||||||
|
<path fill="#FCFBFD" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M930.629333,1129.979980
|
||||||
|
C921.562012,1130.103516 912.953064,1130.103516 904.095581,1130.103516
|
||||||
|
C904.095581,1120.382812 904.095581,1111.126099 904.095581,1101.511963
|
||||||
|
C913.093201,1101.511963 922.010315,1101.511963 931.087708,1101.511963
|
||||||
|
C931.087708,1110.890259 931.087708,1120.373291 930.629333,1129.979980
|
||||||
|
z"/>
|
||||||
|
<path fill="#FFFFFF" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M989.130493,1000.834351
|
||||||
|
C987.997314,1001.928955 986.887451,1003.041870 985.755371,1003.064941
|
||||||
|
C978.106445,1003.221008 970.452820,1003.146362 962.400879,1003.146362
|
||||||
|
C962.400879,995.258179 962.400879,987.527710 962.400879,979.396606
|
||||||
|
C970.989380,979.396606 979.834900,979.396606 989.143494,979.396606
|
||||||
|
C989.143494,986.455139 989.143494,993.401855 989.130493,1000.834351
|
||||||
|
z"/>
|
||||||
|
<path fill="#73358B" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M401.167480,1068.572754
|
||||||
|
C405.168213,1050.977661 416.229248,1040.492432 431.024689,1039.892334
|
||||||
|
C448.612427,1039.179199 462.954895,1052.325073 463.659058,1071.163086
|
||||||
|
C463.929352,1078.394409 462.811829,1086.386719 459.843262,1092.900513
|
||||||
|
C449.957458,1114.592529 420.591766,1116.381714 407.101685,1096.684570
|
||||||
|
C401.329559,1088.256470 400.098053,1078.886963 401.167480,1068.572754
|
||||||
|
z"/>
|
||||||
|
<path fill="#74368C" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M1064.389893,1041.130493
|
||||||
|
C1083.597778,1037.239746 1099.385498,1045.930298 1105.178711,1063.268677
|
||||||
|
C1111.074951,1080.915771 1103.746460,1100.005005 1088.315552,1107.193970
|
||||||
|
C1064.766113,1118.165283 1038.714111,1099.699341 1040.531982,1073.203491
|
||||||
|
C1041.596069,1057.693604 1048.638306,1046.359863 1064.389893,1041.130493
|
||||||
|
z"/>
|
||||||
|
<path fill="#73358B" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M562.688843,1040.359863
|
||||||
|
C577.771179,1038.791748 589.497620,1043.873901 596.774170,1056.799438
|
||||||
|
C604.355286,1070.265991 603.733704,1084.044556 595.135681,1096.926514
|
||||||
|
C586.898376,1109.268066 570.341492,1113.633301 555.941284,1107.888672
|
||||||
|
C541.953796,1102.308838 533.121765,1086.289917 535.297913,1070.447632
|
||||||
|
C537.547485,1054.070801 546.615784,1043.979858 562.688843,1040.359863
|
||||||
|
z"/>
|
||||||
|
<path fill="#74358C" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M807.214600,1067.153320
|
||||||
|
C805.112427,1067.069336 803.478333,1066.985229 801.885498,1066.903320
|
||||||
|
C800.809204,1052.746582 814.209839,1038.763672 828.868347,1038.415405
|
||||||
|
C843.821167,1038.060181 857.024231,1051.490723 856.360352,1067.153442
|
||||||
|
C840.162659,1067.153442 823.922729,1067.153442 807.214600,1067.153320
|
||||||
|
z"/>
|
||||||
|
<path fill="#74358C" opacity="1.000000" stroke="none"
|
||||||
|
d="
|
||||||
|
M222.282150,1110.464844
|
||||||
|
C214.217789,1113.966431 206.277649,1115.050659 198.052612,1112.792114
|
||||||
|
C190.386749,1110.687134 185.541321,1105.185791 185.061066,1098.121948
|
||||||
|
C184.559586,1090.745972 188.557663,1084.190308 196.064621,1081.398193
|
||||||
|
C208.516418,1076.766968 220.997086,1078.481323 233.263031,1082.397217
|
||||||
|
C234.448975,1082.775879 235.661087,1085.061401 235.760620,1086.535889
|
||||||
|
C236.480362,1097.197876 232.280441,1105.292969 222.282150,1110.464844
|
||||||
|
z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 26 KiB |
33
packages/backend/src/apps/carbone/auth/index.ts
Normal file
33
packages/backend/src/apps/carbone/auth/index.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import verifyCredentials from './verify-credentials';
|
||||||
|
import isStillVerified from './is-still-verified';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
key: 'screenName',
|
||||||
|
label: 'Screen Name',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
readOnly: false,
|
||||||
|
value: null,
|
||||||
|
placeholder: null,
|
||||||
|
description:
|
||||||
|
'Screen name of your connection to be used on Automatisch UI.',
|
||||||
|
clickToCopy: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'apiKey',
|
||||||
|
label: 'API Key',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
readOnly: false,
|
||||||
|
value: null,
|
||||||
|
placeholder: null,
|
||||||
|
description: 'Carbone API key of your account.',
|
||||||
|
clickToCopy: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
verifyCredentials,
|
||||||
|
isStillVerified,
|
||||||
|
};
|
@@ -0,0 +1,9 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import verifyCredentials from './verify-credentials';
|
||||||
|
|
||||||
|
const isStillVerified = async ($: IGlobalVariable) => {
|
||||||
|
await verifyCredentials($);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default isStillVerified;
|
12
packages/backend/src/apps/carbone/auth/verify-credentials.ts
Normal file
12
packages/backend/src/apps/carbone/auth/verify-credentials.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const verifyCredentials = async ($: IGlobalVariable) => {
|
||||||
|
await $.http.get('/templates');
|
||||||
|
|
||||||
|
await $.auth.set({
|
||||||
|
screenName: $.auth.data.screenName,
|
||||||
|
apiKey: $.auth.data.apiKey,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default verifyCredentials;
|
12
packages/backend/src/apps/carbone/common/add-auth-header.ts
Normal file
12
packages/backend/src/apps/carbone/common/add-auth-header.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { TBeforeRequest } from '@automatisch/types';
|
||||||
|
|
||||||
|
const addAuthHeader: TBeforeRequest = ($, requestConfig) => {
|
||||||
|
if ($.auth.data?.apiKey) {
|
||||||
|
requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`;
|
||||||
|
requestConfig.headers['carbone-version'] = '4';
|
||||||
|
}
|
||||||
|
|
||||||
|
return requestConfig;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default addAuthHeader;
|
0
packages/backend/src/apps/carbone/index.d.ts
vendored
Normal file
0
packages/backend/src/apps/carbone/index.d.ts
vendored
Normal file
18
packages/backend/src/apps/carbone/index.ts
Normal file
18
packages/backend/src/apps/carbone/index.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import defineApp from '../../helpers/define-app';
|
||||||
|
import addAuthHeader from './common/add-auth-header';
|
||||||
|
import auth from './auth';
|
||||||
|
import actions from './actions';
|
||||||
|
|
||||||
|
export default defineApp({
|
||||||
|
name: 'Carbone',
|
||||||
|
key: 'carbone',
|
||||||
|
iconUrl: '{BASE_URL}/apps/carbone/assets/favicon.svg',
|
||||||
|
authDocUrl: 'https://automatisch.io/docs/apps/carbone/connection',
|
||||||
|
supportsConnections: true,
|
||||||
|
baseUrl: 'https://carbone.io',
|
||||||
|
apiBaseUrl: 'https://api.carbone.io',
|
||||||
|
primaryColor: '6f42c1',
|
||||||
|
beforeRequest: [addAuthHeader],
|
||||||
|
auth,
|
||||||
|
actions,
|
||||||
|
});
|
@@ -2,7 +2,7 @@ import qs from 'qs';
|
|||||||
import defineAction from '../../../../helpers/define-action';
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
export default defineAction({
|
export default defineAction({
|
||||||
name: 'Translate Text',
|
name: 'Translate text',
|
||||||
key: 'translateText',
|
key: 'translateText',
|
||||||
description: 'Translates text from one language to another.',
|
description: 'Translates text from one language to another.',
|
||||||
arguments: [
|
arguments: [
|
||||||
@@ -20,7 +20,7 @@ export default defineAction({
|
|||||||
type: 'dropdown' as const,
|
type: 'dropdown' as const,
|
||||||
required: true,
|
required: true,
|
||||||
description: 'Language to translate the text to.',
|
description: 'Language to translate the text to.',
|
||||||
variables: false,
|
variables: true,
|
||||||
value: '',
|
value: '',
|
||||||
options: [
|
options: [
|
||||||
{ label: 'Bulgarian', value: 'BG' },
|
{ label: 'Bulgarian', value: 'BG' },
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import defineAction from '../../../../helpers/define-action';
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
export default defineAction({
|
export default defineAction({
|
||||||
name: 'Delay For',
|
name: 'Delay for',
|
||||||
key: 'delayFor',
|
key: 'delayFor',
|
||||||
description:
|
description:
|
||||||
'Delays the execution of the next action by a specified amount of time.',
|
'Delays the execution of the next action by a specified amount of time.',
|
||||||
@@ -13,7 +13,7 @@ export default defineAction({
|
|||||||
required: true,
|
required: true,
|
||||||
value: null,
|
value: null,
|
||||||
description: 'Delay for unit, e.g. minutes, hours, days, weeks.',
|
description: 'Delay for unit, e.g. minutes, hours, days, weeks.',
|
||||||
variables: false,
|
variables: true,
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
label: 'Minutes',
|
label: 'Minutes',
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import defineAction from '../../../../helpers/define-action';
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
export default defineAction({
|
export default defineAction({
|
||||||
name: 'Delay Until',
|
name: 'Delay until',
|
||||||
key: 'delayUntil',
|
key: 'delayUntil',
|
||||||
description:
|
description:
|
||||||
'Delays the execution of the next action until a specified date.',
|
'Delays the execution of the next action until a specified date.',
|
||||||
|
@@ -0,0 +1,102 @@
|
|||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Create a scheduled event',
|
||||||
|
key: 'createScheduledEvent',
|
||||||
|
description: 'Creates a scheduled event',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'Type',
|
||||||
|
key: 'entityType',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: 'Stage channel', value: 1 },
|
||||||
|
{ label: 'Voice channel', value: 2 },
|
||||||
|
{ label: 'External', value: 3 }
|
||||||
|
],
|
||||||
|
additionalFields: {
|
||||||
|
type: 'query',
|
||||||
|
name: 'getDynamicFields',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
name: 'key',
|
||||||
|
value: 'listExternalScheduledEventFields',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'parameters.entityType',
|
||||||
|
value: '{parameters.entityType}',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Name',
|
||||||
|
key: 'name',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Description',
|
||||||
|
key: 'description',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: false,
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Image',
|
||||||
|
key: 'image',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: false,
|
||||||
|
description: 'Image as DataURI scheme [data:image/<jpeg/png/gif>;base64,BASE64_ENCODED_<JPEG/PNG/GIF>_IMAGE_DATA]',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
type entity_metadata = {
|
||||||
|
location: string
|
||||||
|
}
|
||||||
|
|
||||||
|
type guild_event = {
|
||||||
|
channel_id: number,
|
||||||
|
name: string,
|
||||||
|
privacy_level: number,
|
||||||
|
scheduled_start_time: string,
|
||||||
|
scheduled_end_time?: string,
|
||||||
|
description?: string,
|
||||||
|
entity_type?: number,
|
||||||
|
entity_metadata?: entity_metadata,
|
||||||
|
image?: string, //data:image/jpeg;base64,BASE64_ENCODED_JPEG_IMAGE_DATA
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const data: guild_event = {
|
||||||
|
channel_id: $.step.parameters.channel_id as number,
|
||||||
|
name: $.step.parameters.name as string,
|
||||||
|
privacy_level: 2,
|
||||||
|
scheduled_start_time: $.step.parameters.scheduledStartTime as string,
|
||||||
|
scheduled_end_time: $.step.parameters.scheduledEndTime as string,
|
||||||
|
description: $.step.parameters.description as string,
|
||||||
|
entity_type: $.step.parameters.entityType as number,
|
||||||
|
image: $.step.parameters.image as string,
|
||||||
|
};
|
||||||
|
|
||||||
|
const isExternal = $.step.parameters.entityType === 3;
|
||||||
|
if (isExternal) {
|
||||||
|
data.entity_metadata = {
|
||||||
|
location: $.step.parameters.location as string,
|
||||||
|
};
|
||||||
|
data.channel_id = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await $.http?.post(
|
||||||
|
`/guilds/${$.auth.data.guildId}/scheduled-events`,
|
||||||
|
data
|
||||||
|
);
|
||||||
|
|
||||||
|
$.setActionItem({ raw: response.data });
|
||||||
|
},
|
||||||
|
});
|
@@ -1,3 +1,4 @@
|
|||||||
import sendMessageToChannel from './send-message-to-channel';
|
import sendMessageToChannel from './send-message-to-channel';
|
||||||
|
import createScheduledEvent from './create-scheduled-event';
|
||||||
|
|
||||||
export default [sendMessageToChannel];
|
export default [sendMessageToChannel, createScheduledEvent];
|
||||||
|
@@ -11,7 +11,7 @@ export default defineAction({
|
|||||||
type: 'dropdown' as const,
|
type: 'dropdown' as const,
|
||||||
required: true,
|
required: true,
|
||||||
description: 'Pick a channel to send the message to.',
|
description: 'Pick a channel to send the message to.',
|
||||||
variables: false,
|
variables: true,
|
||||||
source: {
|
source: {
|
||||||
type: 'query',
|
type: 'query',
|
||||||
name: 'getDynamicData',
|
name: 'getDynamicData',
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
import listChannels from './list-channels';
|
import listChannels from './list-channels';
|
||||||
|
import listVoiceChannels from './list-voice-channels';
|
||||||
|
|
||||||
export default [listChannels];
|
export default [listChannels, listVoiceChannels];
|
||||||
|
@@ -19,8 +19,8 @@ export default {
|
|||||||
|
|
||||||
channels.data = response.data
|
channels.data = response.data
|
||||||
.filter((channel: IJSONObject) => {
|
.filter((channel: IJSONObject) => {
|
||||||
// filter in text channels only
|
// filter in text channels and announcement channels only
|
||||||
return channel.type === 0;
|
return channel.type === 0 || channel.type === 5;
|
||||||
})
|
})
|
||||||
.map((channel: IJSONObject) => {
|
.map((channel: IJSONObject) => {
|
||||||
return {
|
return {
|
||||||
|
@@ -0,0 +1,34 @@
|
|||||||
|
import { IGlobalVariable, IJSONObject } from '@automatisch/types';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'List voice channels',
|
||||||
|
key: 'listVoiceChannels',
|
||||||
|
|
||||||
|
async run($: IGlobalVariable) {
|
||||||
|
const channels: {
|
||||||
|
data: IJSONObject[];
|
||||||
|
error: IJSONObject | null;
|
||||||
|
} = {
|
||||||
|
data: [],
|
||||||
|
error: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
const response = await $.http.get(
|
||||||
|
`/guilds/${$.auth.data.guildId}/channels`
|
||||||
|
);
|
||||||
|
|
||||||
|
channels.data = response.data
|
||||||
|
.filter((channel: IJSONObject) => {
|
||||||
|
// filter in voice and stage channels only
|
||||||
|
return channel.type === 2 || channel.type === 13;
|
||||||
|
})
|
||||||
|
.map((channel: IJSONObject) => {
|
||||||
|
return {
|
||||||
|
value: channel.id,
|
||||||
|
name: channel.name,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return channels;
|
||||||
|
},
|
||||||
|
};
|
@@ -0,0 +1,3 @@
|
|||||||
|
import listExternalScheduledEventFields from './list-external-scheduled-event-fields';
|
||||||
|
|
||||||
|
export default [listExternalScheduledEventFields];
|
@@ -0,0 +1,83 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
export default {
|
||||||
|
name: 'List external scheduled event fields',
|
||||||
|
key: 'listExternalScheduledEventFields',
|
||||||
|
|
||||||
|
async run($: IGlobalVariable) {
|
||||||
|
const isExternal = $.step.parameters.entityType === 3;
|
||||||
|
|
||||||
|
if (isExternal) {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'Location',
|
||||||
|
key: 'location',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Start-Time',
|
||||||
|
key: 'scheduledStartTime',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The time the event will start [ISO8601]',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'End-Time',
|
||||||
|
key: 'scheduledEndTime',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'Channel',
|
||||||
|
key: 'channel_id',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'Pick a voice or stage channel to link the event to. This will be omitted if type is EXTERNAL',
|
||||||
|
variables: true,
|
||||||
|
source: {
|
||||||
|
type: 'query',
|
||||||
|
name: 'getDynamicData',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
name: 'key',
|
||||||
|
value: 'listVoiceChannels',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Location',
|
||||||
|
key: 'location',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: false,
|
||||||
|
description: 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Start-Time',
|
||||||
|
key: 'scheduledStartTime',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The time the event will start [ISO8601]',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'End-Time',
|
||||||
|
key: 'scheduledEndTime',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: false,
|
||||||
|
description: 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
};
|
@@ -4,6 +4,7 @@ import auth from './auth';
|
|||||||
import dynamicData from './dynamic-data';
|
import dynamicData from './dynamic-data';
|
||||||
import actions from './actions';
|
import actions from './actions';
|
||||||
import triggers from './triggers';
|
import triggers from './triggers';
|
||||||
|
import dynamicFields from './dynamic-fields';
|
||||||
|
|
||||||
export default defineApp({
|
export default defineApp({
|
||||||
name: 'Discord',
|
name: 'Discord',
|
||||||
@@ -17,6 +18,7 @@ export default defineApp({
|
|||||||
beforeRequest: [addAuthHeader],
|
beforeRequest: [addAuthHeader],
|
||||||
auth,
|
auth,
|
||||||
dynamicData,
|
dynamicData,
|
||||||
|
dynamicFields,
|
||||||
triggers,
|
triggers,
|
||||||
actions,
|
actions,
|
||||||
});
|
});
|
||||||
|
@@ -0,0 +1,36 @@
|
|||||||
|
import path from 'node:path';
|
||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Create folder',
|
||||||
|
key: 'createFolder',
|
||||||
|
description: 'Create a new folder with the given parent folder and folder name',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'Folder',
|
||||||
|
key: 'parentFolder',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'Enter the parent folder path, like /TextFiles/ or /Documents/Taxes/',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Folder Name',
|
||||||
|
key: 'folderName',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'Enter the name for the new folder',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const parentFolder = $.step.parameters.parentFolder as string;
|
||||||
|
const folderName = $.step.parameters.folderName as string;
|
||||||
|
const folderPath = path.join(parentFolder, folderName);
|
||||||
|
|
||||||
|
const response = await $.http.post('/2/files/create_folder_v2', { path: folderPath });
|
||||||
|
|
||||||
|
$.setActionItem({ raw: response.data });
|
||||||
|
},
|
||||||
|
});
|
4
packages/backend/src/apps/dropbox/actions/index.ts
Normal file
4
packages/backend/src/apps/dropbox/actions/index.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import createFolder from "./create-folder";
|
||||||
|
import renameFile from "./rename-file";
|
||||||
|
|
||||||
|
export default [createFolder, renameFile];
|
@@ -0,0 +1,45 @@
|
|||||||
|
import path from 'node:path';
|
||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Rename file',
|
||||||
|
key: 'renameFile',
|
||||||
|
description: 'Rename a file with the given file path and new name',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'File Path',
|
||||||
|
key: 'filePath',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description:
|
||||||
|
'Write the full path to the file such as /Folder1/File.pdf',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'New Name',
|
||||||
|
key: 'newName',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: "Enter the new name for the file (without the extension, e.g., '.pdf')",
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const filePath = $.step.parameters.filePath as string;
|
||||||
|
const newName = $.step.parameters.newName as string;
|
||||||
|
const fileObject = path.parse(filePath);
|
||||||
|
const newPath = path.format({
|
||||||
|
dir: fileObject.dir,
|
||||||
|
ext: fileObject.ext,
|
||||||
|
name: newName,
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await $.http.post('/2/files/move_v2', {
|
||||||
|
from_path: filePath,
|
||||||
|
to_path: newPath,
|
||||||
|
});
|
||||||
|
|
||||||
|
$.setActionItem({ raw: response.data.metadata });
|
||||||
|
},
|
||||||
|
});
|
3
packages/backend/src/apps/dropbox/assets/favicon.svg
Normal file
3
packages/backend/src/apps/dropbox/assets/favicon.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" aria-label="Dropbox" role="img" viewBox="0 0 512 512" fill="#0061ff">
|
||||||
|
<path d="M158 101l-99 63 295 188 99-63m-99-188l99 63-295 188-99-63m99 83l98 63 98-63-98-62z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 213 B |
22
packages/backend/src/apps/dropbox/auth/generate-auth-url.ts
Normal file
22
packages/backend/src/apps/dropbox/auth/generate-auth-url.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { URLSearchParams } from 'url';
|
||||||
|
import { IField, IGlobalVariable } from '@automatisch/types';
|
||||||
|
import scopes from '../common/scopes';
|
||||||
|
|
||||||
|
export default async function generateAuthUrl($: IGlobalVariable) {
|
||||||
|
const oauthRedirectUrlField = $.app.auth.fields.find(
|
||||||
|
(field: IField) => field.key == 'oAuthRedirectUrl'
|
||||||
|
);
|
||||||
|
const callbackUrl = oauthRedirectUrlField.value as string;
|
||||||
|
|
||||||
|
const searchParams = new URLSearchParams({
|
||||||
|
client_id: $.auth.data.clientId as string,
|
||||||
|
redirect_uri: callbackUrl,
|
||||||
|
response_type: 'code',
|
||||||
|
scope: scopes.join(' '),
|
||||||
|
token_access_type: 'offline',
|
||||||
|
});
|
||||||
|
|
||||||
|
const url = `${$.app.baseUrl}/oauth2/authorize?${searchParams.toString()}`;
|
||||||
|
|
||||||
|
await $.auth.set({ url });
|
||||||
|
}
|
48
packages/backend/src/apps/dropbox/auth/index.ts
Normal file
48
packages/backend/src/apps/dropbox/auth/index.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import generateAuthUrl from './generate-auth-url';
|
||||||
|
import verifyCredentials from './verify-credentials';
|
||||||
|
import isStillVerified from './is-still-verified';
|
||||||
|
import refreshToken from './refresh-token';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
key: 'oAuthRedirectUrl',
|
||||||
|
label: 'OAuth Redirect URL',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
readOnly: true,
|
||||||
|
value: '{WEB_APP_URL}/app/dropbox/connections/add',
|
||||||
|
placeholder: null,
|
||||||
|
description:
|
||||||
|
'When asked to input an OAuth callback or redirect URL in Dropbox OAuth, enter the URL above.',
|
||||||
|
clickToCopy: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'clientId',
|
||||||
|
label: 'App Key',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
readOnly: false,
|
||||||
|
value: null,
|
||||||
|
placeholder: null,
|
||||||
|
description: null,
|
||||||
|
clickToCopy: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'clientSecret',
|
||||||
|
label: 'App Secret',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
readOnly: false,
|
||||||
|
value: null,
|
||||||
|
placeholder: null,
|
||||||
|
description: null,
|
||||||
|
clickToCopy: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
generateAuthUrl,
|
||||||
|
verifyCredentials,
|
||||||
|
isStillVerified,
|
||||||
|
refreshToken,
|
||||||
|
};
|
@@ -0,0 +1,9 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import getCurrentAccount from '../common/get-current-account';
|
||||||
|
|
||||||
|
const isStillVerified = async ($: IGlobalVariable) => {
|
||||||
|
const account = await getCurrentAccount($);
|
||||||
|
return !!account;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default isStillVerified;
|
41
packages/backend/src/apps/dropbox/auth/refresh-token.ts
Normal file
41
packages/backend/src/apps/dropbox/auth/refresh-token.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { Buffer } from 'node:buffer';
|
||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const refreshToken = async ($: IGlobalVariable) => {
|
||||||
|
const params = {
|
||||||
|
grant_type: 'refresh_token',
|
||||||
|
refresh_token: $.auth.data.refreshToken as string,
|
||||||
|
};
|
||||||
|
|
||||||
|
const basicAuthToken = Buffer
|
||||||
|
.from(`${$.auth.data.clientId}:${$.auth.data.clientSecret}`)
|
||||||
|
.toString('base64');
|
||||||
|
|
||||||
|
const { data } = await $.http.post(
|
||||||
|
'oauth2/token',
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
params,
|
||||||
|
headers: {
|
||||||
|
Authorization: `Basic ${basicAuthToken}`
|
||||||
|
},
|
||||||
|
additionalProperties: {
|
||||||
|
skipAddingAuthHeader: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const {
|
||||||
|
access_token: accessToken,
|
||||||
|
expires_in: expiresIn,
|
||||||
|
token_type: tokenType,
|
||||||
|
} = data;
|
||||||
|
|
||||||
|
await $.auth.set({
|
||||||
|
accessToken,
|
||||||
|
expiresIn,
|
||||||
|
tokenType,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default refreshToken;
|
102
packages/backend/src/apps/dropbox/auth/verify-credentials.ts
Normal file
102
packages/backend/src/apps/dropbox/auth/verify-credentials.ts
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
import { IGlobalVariable, IField } from '@automatisch/types';
|
||||||
|
import getCurrentAccount from '../common/get-current-account';
|
||||||
|
|
||||||
|
type TAccount = {
|
||||||
|
account_id: string,
|
||||||
|
name: {
|
||||||
|
given_name: string,
|
||||||
|
surname: string,
|
||||||
|
familiar_name: string,
|
||||||
|
display_name: string,
|
||||||
|
abbreviated_name: string,
|
||||||
|
},
|
||||||
|
email: string,
|
||||||
|
email_verified: boolean,
|
||||||
|
disabled: boolean,
|
||||||
|
country: string,
|
||||||
|
locale: string,
|
||||||
|
referral_link: string,
|
||||||
|
is_paired: boolean,
|
||||||
|
account_type: {
|
||||||
|
".tag": string,
|
||||||
|
},
|
||||||
|
root_info: {
|
||||||
|
".tag": string,
|
||||||
|
root_namespace_id: string,
|
||||||
|
home_namespace_id: string,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const verifyCredentials = async ($: IGlobalVariable) => {
|
||||||
|
const oauthRedirectUrlField = $.app.auth.fields.find(
|
||||||
|
(field: IField) => field.key == 'oAuthRedirectUrl'
|
||||||
|
);
|
||||||
|
const redirectUrl = oauthRedirectUrlField.value as string;
|
||||||
|
const params = {
|
||||||
|
client_id: $.auth.data.clientId as string,
|
||||||
|
redirect_uri: redirectUrl,
|
||||||
|
client_secret: $.auth.data.clientSecret as string,
|
||||||
|
code: $.auth.data.code as string,
|
||||||
|
grant_type: 'authorization_code',
|
||||||
|
}
|
||||||
|
const { data: verifiedCredentials } = await $.http.post(
|
||||||
|
'/oauth2/token',
|
||||||
|
null,
|
||||||
|
{ params }
|
||||||
|
);
|
||||||
|
|
||||||
|
const {
|
||||||
|
access_token: accessToken,
|
||||||
|
refresh_token: refreshToken,
|
||||||
|
expires_in: expiresIn,
|
||||||
|
scope: scope,
|
||||||
|
token_type: tokenType,
|
||||||
|
account_id: accountId,
|
||||||
|
team_id: teamId,
|
||||||
|
id_token: idToken,
|
||||||
|
uid,
|
||||||
|
} = verifiedCredentials;
|
||||||
|
|
||||||
|
await $.auth.set({
|
||||||
|
accessToken,
|
||||||
|
refreshToken,
|
||||||
|
expiresIn,
|
||||||
|
scope,
|
||||||
|
tokenType,
|
||||||
|
accountId,
|
||||||
|
teamId,
|
||||||
|
idToken,
|
||||||
|
uid
|
||||||
|
});
|
||||||
|
|
||||||
|
const account = await getCurrentAccount($) as TAccount;
|
||||||
|
|
||||||
|
await $.auth.set({
|
||||||
|
accountId: account.account_id,
|
||||||
|
name: {
|
||||||
|
givenName: account.name.given_name,
|
||||||
|
surname: account.name.surname,
|
||||||
|
familiarName: account.name.familiar_name,
|
||||||
|
displayName: account.name.display_name,
|
||||||
|
abbreviatedName: account.name.abbreviated_name,
|
||||||
|
},
|
||||||
|
email: account.email,
|
||||||
|
emailVerified: account.email_verified,
|
||||||
|
disabled: account.disabled,
|
||||||
|
country: account.country,
|
||||||
|
locale: account.locale,
|
||||||
|
referralLink: account.referral_link,
|
||||||
|
isPaired: account.is_paired,
|
||||||
|
accountType: {
|
||||||
|
".tag": account.account_type['.tag'],
|
||||||
|
},
|
||||||
|
rootInfo: {
|
||||||
|
".tag": account.root_info['.tag'],
|
||||||
|
rootNamespaceId: account.root_info.root_namespace_id,
|
||||||
|
homeNamespaceId: account.root_info.home_namespace_id,
|
||||||
|
},
|
||||||
|
screenName: `${account.name.display_name} - ${account.email}`,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default verifyCredentials;
|
13
packages/backend/src/apps/dropbox/common/add-auth-header.ts
Normal file
13
packages/backend/src/apps/dropbox/common/add-auth-header.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { TBeforeRequest } from '@automatisch/types';
|
||||||
|
|
||||||
|
const addAuthHeader: TBeforeRequest = ($, requestConfig) => {
|
||||||
|
requestConfig.headers['Content-Type'] = 'application/json';
|
||||||
|
|
||||||
|
if (!requestConfig.additionalProperties?.skipAddingAuthHeader && $.auth.data?.accessToken) {
|
||||||
|
requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return requestConfig;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default addAuthHeader;
|
@@ -0,0 +1,8 @@
|
|||||||
|
import { IGlobalVariable, IJSONObject } from '@automatisch/types';
|
||||||
|
|
||||||
|
const getCurrentAccount = async ($: IGlobalVariable): Promise<IJSONObject> => {
|
||||||
|
const response = await $.http.post('/2/users/get_current_account', null);
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getCurrentAccount;
|
8
packages/backend/src/apps/dropbox/common/scopes.ts
Normal file
8
packages/backend/src/apps/dropbox/common/scopes.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
const scopes = [
|
||||||
|
'account_info.read',
|
||||||
|
'files.metadata.read',
|
||||||
|
'files.content.write',
|
||||||
|
'files.content.read',
|
||||||
|
];
|
||||||
|
|
||||||
|
export default scopes;
|
0
packages/backend/src/apps/dropbox/index.d.ts
vendored
Normal file
0
packages/backend/src/apps/dropbox/index.d.ts
vendored
Normal file
18
packages/backend/src/apps/dropbox/index.ts
Normal file
18
packages/backend/src/apps/dropbox/index.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import defineApp from '../../helpers/define-app';
|
||||||
|
import addAuthHeader from './common/add-auth-header';
|
||||||
|
import auth from './auth';
|
||||||
|
import actions from './actions';
|
||||||
|
|
||||||
|
export default defineApp({
|
||||||
|
name: 'Dropbox',
|
||||||
|
key: 'dropbox',
|
||||||
|
iconUrl: '{BASE_URL}/apps/dropbox/assets/favicon.svg',
|
||||||
|
authDocUrl: 'https://automatisch.io/docs/apps/dropbox/connection',
|
||||||
|
supportsConnections: true,
|
||||||
|
baseUrl: 'https://dropbox.com',
|
||||||
|
apiBaseUrl: 'https://api.dropboxapi.com',
|
||||||
|
primaryColor: '0061ff',
|
||||||
|
beforeRequest: [addAuthHeader],
|
||||||
|
auth,
|
||||||
|
actions,
|
||||||
|
});
|
109
packages/backend/src/apps/filter/actions/continue/index.ts
Normal file
109
packages/backend/src/apps/filter/actions/continue/index.ts
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
type TGroupItem = {
|
||||||
|
key: string;
|
||||||
|
operator: keyof TOperators;
|
||||||
|
value: string;
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
type TGroup = Record<'and', TGroupItem[]>;
|
||||||
|
|
||||||
|
const isEqual = (a: string, b: string) => a === b;
|
||||||
|
const isNotEqual = (a: string, b: string) => !isEqual(a, b);
|
||||||
|
const isGreaterThan = (a: string, b: string) => Number(a) > Number(b);
|
||||||
|
const isLessThan = (a: string, b: string) => Number(a) < Number(b);
|
||||||
|
const isGreaterThanOrEqual = (a: string, b: string) => Number(a) >= Number(b);
|
||||||
|
const isLessThanOrEqual = (a: string, b: string) => Number(a) <= Number(b);
|
||||||
|
const contains = (a: string, b: string) => a.includes(b);
|
||||||
|
const doesNotContain = (a: string, b: string) => !contains(a, b);
|
||||||
|
|
||||||
|
const shouldContinue = (orGroups: TGroup[]) => {
|
||||||
|
let atLeastOneGroupMatches = false;
|
||||||
|
|
||||||
|
for (const group of orGroups) {
|
||||||
|
let groupMatches = true;
|
||||||
|
|
||||||
|
for (const condition of group.and) {
|
||||||
|
const conditionMatches = operate(
|
||||||
|
condition.operator,
|
||||||
|
condition.key,
|
||||||
|
condition.value
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!conditionMatches) {
|
||||||
|
groupMatches = false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (groupMatches) {
|
||||||
|
atLeastOneGroupMatches = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return atLeastOneGroupMatches;
|
||||||
|
}
|
||||||
|
|
||||||
|
type TOperatorFunc = (a: string, b: string) => boolean;
|
||||||
|
|
||||||
|
type TOperators = {
|
||||||
|
equal: TOperatorFunc;
|
||||||
|
not_equal: TOperatorFunc;
|
||||||
|
greater_than: TOperatorFunc;
|
||||||
|
less_than: TOperatorFunc;
|
||||||
|
greater_than_or_equal: TOperatorFunc;
|
||||||
|
less_than_or_equal: TOperatorFunc;
|
||||||
|
contains: TOperatorFunc;
|
||||||
|
not_contains: TOperatorFunc;
|
||||||
|
};
|
||||||
|
|
||||||
|
const operators: TOperators = {
|
||||||
|
'equal': isEqual,
|
||||||
|
'not_equal': isNotEqual,
|
||||||
|
'greater_than': isGreaterThan,
|
||||||
|
'less_than': isLessThan,
|
||||||
|
'greater_than_or_equal': isGreaterThanOrEqual,
|
||||||
|
'less_than_or_equal': isLessThanOrEqual,
|
||||||
|
'contains': contains,
|
||||||
|
'not_contains': doesNotContain,
|
||||||
|
};
|
||||||
|
|
||||||
|
const operate = (operation: keyof TOperators, a: string, b: string) => {
|
||||||
|
return operators[operation](a, b);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Continue if conditions match',
|
||||||
|
key: 'continueIfMatches',
|
||||||
|
description: 'Let the execution continue if the conditions match',
|
||||||
|
arguments: [],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const orGroups = $.step.parameters.or as TGroup[];
|
||||||
|
|
||||||
|
const matchingGroups = orGroups.reduce((groups, group) => {
|
||||||
|
const matchingConditions = group.and
|
||||||
|
.filter((condition) => operate(condition.operator, condition.key, condition.value));
|
||||||
|
|
||||||
|
if (matchingConditions.length) {
|
||||||
|
return groups.concat([{ and: matchingConditions }]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return groups;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!shouldContinue(orGroups)) {
|
||||||
|
$.execution.exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$.setActionItem({
|
||||||
|
raw: {
|
||||||
|
or: matchingGroups,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
3
packages/backend/src/apps/filter/actions/index.ts
Normal file
3
packages/backend/src/apps/filter/actions/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import continueIfMatches from './continue';
|
||||||
|
|
||||||
|
export default [continueIfMatches];
|
8
packages/backend/src/apps/filter/assets/favicon.svg
Normal file
8
packages/backend/src/apps/filter/assets/favicon.svg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<svg width="800px" height="800px" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="Shape" fill="#000000" transform="translate(42.666667, 85.333333)">
|
||||||
|
<path d="M3.55271368e-14,1.42108547e-14 L191.565013,234.666667 L192,234.666667 L192,384 L234.666667,384 L234.666667,234.666667 L426.666667,1.42108547e-14 L3.55271368e-14,1.42108547e-14 Z M214.448,192 L211.81248,192 L89.9076267,42.6666667 L336.630187,42.6666667 L214.448,192 Z">
|
||||||
|
</path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 628 B |
0
packages/backend/src/apps/filter/index.d.ts
vendored
Normal file
0
packages/backend/src/apps/filter/index.d.ts
vendored
Normal file
14
packages/backend/src/apps/filter/index.ts
Normal file
14
packages/backend/src/apps/filter/index.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import defineApp from '../../helpers/define-app';
|
||||||
|
import actions from './actions';
|
||||||
|
|
||||||
|
export default defineApp({
|
||||||
|
name: 'Filter',
|
||||||
|
key: 'filter',
|
||||||
|
iconUrl: '{BASE_URL}/apps/filter/assets/favicon.svg',
|
||||||
|
authDocUrl: 'https://automatisch.io/docs/apps/filter/connection',
|
||||||
|
supportsConnections: false,
|
||||||
|
baseUrl: '',
|
||||||
|
apiBaseUrl: '',
|
||||||
|
primaryColor: '001F52',
|
||||||
|
actions,
|
||||||
|
});
|
@@ -1,3 +1,4 @@
|
|||||||
|
import Crypto from 'crypto';
|
||||||
import isEmpty from 'lodash/isEmpty';
|
import isEmpty from 'lodash/isEmpty';
|
||||||
import defineTrigger from '../../../../helpers/define-trigger';
|
import defineTrigger from '../../../../helpers/define-trigger';
|
||||||
import webhookFilters from '../../common/webhook-filters';
|
import webhookFilters from '../../common/webhook-filters';
|
||||||
@@ -19,13 +20,26 @@ export default defineTrigger({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const dataItem = {
|
||||||
|
raw: $.request.body,
|
||||||
|
meta: {
|
||||||
|
internalId: Crypto.randomUUID(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
$.pushTriggerItem(dataItem);
|
||||||
|
},
|
||||||
|
|
||||||
async testRun($) {
|
async testRun($) {
|
||||||
if (!isEmpty($.lastExecutionStep?.dataOut)) {
|
const lastExecutionStep = await $.getLastExecutionStep();
|
||||||
|
|
||||||
|
if (!isEmpty(lastExecutionStep?.dataOut)) {
|
||||||
$.pushTriggerItem({
|
$.pushTriggerItem({
|
||||||
raw: $.lastExecutionStep.dataOut,
|
raw: lastExecutionStep.dataOut,
|
||||||
meta: {
|
meta: {
|
||||||
internalId: '',
|
internalId: '',
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -35,20 +49,15 @@ export default defineTrigger({
|
|||||||
name: $.flow.id,
|
name: $.flow.id,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: $.webhookUrl,
|
url: $.webhookUrl,
|
||||||
filters: [$.step.parameters.filters]
|
filters: [$.step.parameters.filters],
|
||||||
};
|
};
|
||||||
|
|
||||||
const { data } = await $.http.post(
|
const { data } = await $.http.post(`/v2/public/api/webhooks`, payload);
|
||||||
`/v2/public/api/webhooks`,
|
|
||||||
payload
|
|
||||||
);
|
|
||||||
|
|
||||||
await $.flow.setRemoteWebhookId(data.id);
|
await $.flow.setRemoteWebhookId(data.id);
|
||||||
},
|
},
|
||||||
|
|
||||||
async unregisterHook($) {
|
async unregisterHook($) {
|
||||||
await $.http.delete(
|
await $.http.delete(`/v2/public/api/webhooks/${$.flow.remoteWebhookId}`);
|
||||||
`/v2/public/api/webhooks/${$.flow.remoteWebhookId}`
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@@ -0,0 +1,49 @@
|
|||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
import formatDateTime from './transformers/format-date-time';
|
||||||
|
|
||||||
|
const transformers = {
|
||||||
|
formatDateTime,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Date / Time',
|
||||||
|
key: 'date-time',
|
||||||
|
description: 'Perform date and time related transformations on your data.',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'Transform',
|
||||||
|
key: 'transform',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
variables: true,
|
||||||
|
options: [{ label: 'Format Date / Time', value: 'formatDateTime' }],
|
||||||
|
additionalFields: {
|
||||||
|
type: 'query',
|
||||||
|
name: 'getDynamicFields',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
name: 'key',
|
||||||
|
value: 'listTransformOptions',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'parameters.transform',
|
||||||
|
value: '{parameters.transform}',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const transformerName = $.step.parameters
|
||||||
|
.transform as keyof typeof transformers;
|
||||||
|
const output = transformers[transformerName]($);
|
||||||
|
|
||||||
|
$.setActionItem({
|
||||||
|
raw: {
|
||||||
|
output,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
@@ -0,0 +1,23 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import { DateTime } from 'luxon';
|
||||||
|
|
||||||
|
const formatDateTime = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
|
||||||
|
const fromFormat = $.step.parameters.fromFormat as string;
|
||||||
|
const fromTimezone = $.step.parameters.fromTimezone as string;
|
||||||
|
|
||||||
|
const inputDateTime = DateTime.fromFormat(input, fromFormat, {
|
||||||
|
zone: fromTimezone,
|
||||||
|
setZone: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const toFormat = $.step.parameters.toFormat as string;
|
||||||
|
const toTimezone = $.step.parameters.toTimezone as string;
|
||||||
|
|
||||||
|
const outputDateTime = inputDateTime.setZone(toTimezone).toFormat(toFormat);
|
||||||
|
|
||||||
|
return outputDateTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default formatDateTime;
|
5
packages/backend/src/apps/formatter/actions/index.ts
Normal file
5
packages/backend/src/apps/formatter/actions/index.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import text from './text';
|
||||||
|
import numbers from './numbers';
|
||||||
|
import dateTime from './date-time';
|
||||||
|
|
||||||
|
export default [text, numbers, dateTime];
|
61
packages/backend/src/apps/formatter/actions/numbers/index.ts
Normal file
61
packages/backend/src/apps/formatter/actions/numbers/index.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
import performMathOperation from './transformers/perform-math-operation';
|
||||||
|
import randomNumber from './transformers/random-number';
|
||||||
|
import formatNumber from './transformers/format-number';
|
||||||
|
import formatPhoneNumber from './transformers/format-phone-number';
|
||||||
|
|
||||||
|
const transformers = {
|
||||||
|
performMathOperation,
|
||||||
|
randomNumber,
|
||||||
|
formatNumber,
|
||||||
|
formatPhoneNumber,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Numbers',
|
||||||
|
key: 'numbers',
|
||||||
|
description:
|
||||||
|
'Transform numbers to perform math operations, generate random numbers, format numbers, and much more.',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'Transform',
|
||||||
|
key: 'transform',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: 'Perform Math Operation', value: 'performMathOperation' },
|
||||||
|
{ label: 'Random Number', value: 'randomNumber' },
|
||||||
|
{ label: 'Format Number', value: 'formatNumber' },
|
||||||
|
{ label: 'Format Phone Number', value: 'formatPhoneNumber' },
|
||||||
|
],
|
||||||
|
additionalFields: {
|
||||||
|
type: 'query',
|
||||||
|
name: 'getDynamicFields',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
name: 'key',
|
||||||
|
value: 'listTransformOptions',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'parameters.transform',
|
||||||
|
value: '{parameters.transform}',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const transformerName = $.step.parameters
|
||||||
|
.transform as keyof typeof transformers;
|
||||||
|
const output = transformers[transformerName]($);
|
||||||
|
|
||||||
|
$.setActionItem({
|
||||||
|
raw: {
|
||||||
|
output,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
@@ -0,0 +1,28 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import accounting from 'accounting';
|
||||||
|
|
||||||
|
const formatNumber = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
const inputDecimalMark = $.step.parameters.inputDecimalMark as string;
|
||||||
|
const toFormat = $.step.parameters.toFormat as string;
|
||||||
|
|
||||||
|
const normalizedNumber = accounting.unformat(input, inputDecimalMark);
|
||||||
|
const decimalPart = normalizedNumber.toString().split('.')[1];
|
||||||
|
const precision = decimalPart ? decimalPart.length : 0;
|
||||||
|
|
||||||
|
if (toFormat === '0') {
|
||||||
|
// Comma for grouping & period for decimal
|
||||||
|
return accounting.formatNumber(normalizedNumber, precision, ',', '.');
|
||||||
|
} else if (toFormat === '1') {
|
||||||
|
// Period for grouping & comma for decimal
|
||||||
|
return accounting.formatNumber(normalizedNumber, precision, '.', ',');
|
||||||
|
} else if (toFormat === '2') {
|
||||||
|
// Space for grouping & period for decimal
|
||||||
|
return accounting.formatNumber(normalizedNumber, precision, ' ', '.');
|
||||||
|
} else if (toFormat === '3') {
|
||||||
|
// Space for grouping & comma for decimal
|
||||||
|
return accounting.formatNumber(normalizedNumber, precision, ' ', ',');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default formatNumber;
|
@@ -0,0 +1,24 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import parsePhoneNumber, { CountryCode } from 'libphonenumber-js';
|
||||||
|
|
||||||
|
const formatPhoneNumber = ($: IGlobalVariable) => {
|
||||||
|
const phoneNumber = $.step.parameters.phoneNumber as string;
|
||||||
|
const toFormat = $.step.parameters.toFormat as string;
|
||||||
|
const phoneNumberCountryCode = ($.step.parameters.phoneNumberCountryCode ||
|
||||||
|
'US') as CountryCode;
|
||||||
|
|
||||||
|
const parsedPhoneNumber = parsePhoneNumber(
|
||||||
|
phoneNumber,
|
||||||
|
phoneNumberCountryCode
|
||||||
|
);
|
||||||
|
|
||||||
|
if (toFormat === 'e164') {
|
||||||
|
return parsedPhoneNumber.format('E.164');
|
||||||
|
} else if (toFormat === 'international') {
|
||||||
|
return parsedPhoneNumber.formatInternational();
|
||||||
|
} else if (toFormat === 'national') {
|
||||||
|
return parsedPhoneNumber.formatNational();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default formatPhoneNumber;
|
@@ -0,0 +1,23 @@
|
|||||||
|
import { IGlobalVariable, IJSONObject } from '@automatisch/types';
|
||||||
|
import { add, divide, multiply, subtract } from 'lodash';
|
||||||
|
|
||||||
|
const mathOperation = ($: IGlobalVariable) => {
|
||||||
|
const mathOperation = $.step.parameters.mathOperation as string;
|
||||||
|
const values = ($.step.parameters.values as IJSONObject[]).map((value) =>
|
||||||
|
Number(value.input)
|
||||||
|
) as number[];
|
||||||
|
|
||||||
|
if (mathOperation === 'add') {
|
||||||
|
return values.reduce((acc, curr) => add(acc, curr), 0);
|
||||||
|
} else if (mathOperation === 'divide') {
|
||||||
|
return values.reduce((acc, curr) => divide(acc, curr));
|
||||||
|
} else if (mathOperation === 'makeNegative') {
|
||||||
|
return values.map((value) => -value);
|
||||||
|
} else if (mathOperation === 'multiply') {
|
||||||
|
return values.reduce((acc, curr) => multiply(acc, curr), 1);
|
||||||
|
} else if (mathOperation === 'subtract') {
|
||||||
|
return values.reduce((acc, curr) => subtract(acc, curr));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default mathOperation;
|
@@ -0,0 +1,15 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const randomNumber = ($: IGlobalVariable) => {
|
||||||
|
const lowerRange = Number($.step.parameters.lowerRange);
|
||||||
|
const upperRange = Number($.step.parameters.upperRange);
|
||||||
|
const decimalPoints = Number($.step.parameters.decimalPoints) || 0;
|
||||||
|
|
||||||
|
return Number(
|
||||||
|
(Math.random() * (upperRange - lowerRange) + lowerRange).toFixed(
|
||||||
|
decimalPoints
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default randomNumber;
|
79
packages/backend/src/apps/formatter/actions/text/index.ts
Normal file
79
packages/backend/src/apps/formatter/actions/text/index.ts
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import defineAction from '../../../../helpers/define-action';
|
||||||
|
|
||||||
|
import capitalize from './transformers/capitalize';
|
||||||
|
import extractEmailAddress from './transformers/extract-email-address';
|
||||||
|
import extractNumber from './transformers/extract-number';
|
||||||
|
import htmlToMarkdown from './transformers/html-to-markdown';
|
||||||
|
import lowercase from './transformers/lowercase';
|
||||||
|
import markdownToHtml from './transformers/markdown-to-html';
|
||||||
|
import pluralize from './transformers/pluralize';
|
||||||
|
import replace from './transformers/replace';
|
||||||
|
import trimWhitespace from './transformers/trim-whitespace';
|
||||||
|
import useDefaultValue from './transformers/use-default-value';
|
||||||
|
|
||||||
|
const transformers = {
|
||||||
|
capitalize,
|
||||||
|
extractEmailAddress,
|
||||||
|
extractNumber,
|
||||||
|
htmlToMarkdown,
|
||||||
|
lowercase,
|
||||||
|
markdownToHtml,
|
||||||
|
pluralize,
|
||||||
|
replace,
|
||||||
|
trimWhitespace,
|
||||||
|
useDefaultValue,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default defineAction({
|
||||||
|
name: 'Text',
|
||||||
|
key: 'text',
|
||||||
|
description:
|
||||||
|
'Transform text data to capitalize, extract emails, apply default value, and much more.',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
label: 'Transform',
|
||||||
|
key: 'transform',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: 'Capitalize', value: 'capitalize' },
|
||||||
|
{ label: 'Convert HTML to Markdown', value: 'htmlToMarkdown' },
|
||||||
|
{ label: 'Convert Markdown to HTML', value: 'markdownToHtml' },
|
||||||
|
{ label: 'Extract Email Address', value: 'extractEmailAddress' },
|
||||||
|
{ label: 'Extract Number', value: 'extractNumber' },
|
||||||
|
{ label: 'Lowercase', value: 'lowercase' },
|
||||||
|
{ label: 'Pluralize', value: 'pluralize' },
|
||||||
|
{ label: 'Replace', value: 'replace' },
|
||||||
|
{ label: 'Trim Whitespace', value: 'trimWhitespace' },
|
||||||
|
{ label: 'Use Default Value', value: 'useDefaultValue' },
|
||||||
|
],
|
||||||
|
additionalFields: {
|
||||||
|
type: 'query',
|
||||||
|
name: 'getDynamicFields',
|
||||||
|
arguments: [
|
||||||
|
{
|
||||||
|
name: 'key',
|
||||||
|
value: 'listTransformOptions',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'parameters.transform',
|
||||||
|
value: '{parameters.transform}',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
async run($) {
|
||||||
|
const transformerName = $.step.parameters
|
||||||
|
.transform as keyof typeof transformers;
|
||||||
|
const output = transformers[transformerName]($);
|
||||||
|
|
||||||
|
$.setActionItem({
|
||||||
|
raw: {
|
||||||
|
output,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
@@ -0,0 +1,11 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import { capitalize as lodashCapitalize } from 'lodash';
|
||||||
|
|
||||||
|
const capitalize = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
const capitalizedInput = input.replace(/\w+/g, lodashCapitalize);
|
||||||
|
|
||||||
|
return capitalizedInput;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default capitalize;
|
@@ -0,0 +1,12 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const extractEmailAddress = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
const emailRegexp =
|
||||||
|
/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
|
||||||
|
|
||||||
|
const email = input.match(emailRegexp);
|
||||||
|
return email ? email[0] : '';
|
||||||
|
};
|
||||||
|
|
||||||
|
export default extractEmailAddress;
|
@@ -0,0 +1,26 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const extractNumber = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
|
||||||
|
// Example numbers that's supported:
|
||||||
|
// 123
|
||||||
|
// -123
|
||||||
|
// 123456
|
||||||
|
// -123456
|
||||||
|
// 121,234
|
||||||
|
// -121,234
|
||||||
|
// 121.234
|
||||||
|
// -121.234
|
||||||
|
// 1,234,567.89
|
||||||
|
// -1,234,567.89
|
||||||
|
// 1.234.567,89
|
||||||
|
// -1.234.567,89
|
||||||
|
|
||||||
|
const numberRegexp = /-?((\d{1,3})+\.?,?)+/g;
|
||||||
|
|
||||||
|
const numbers = input.match(numberRegexp);
|
||||||
|
return numbers ? numbers[0] : '';
|
||||||
|
};
|
||||||
|
|
||||||
|
export default extractNumber;
|
@@ -0,0 +1,11 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import { NodeHtmlMarkdown } from 'node-html-markdown';
|
||||||
|
|
||||||
|
const htmlToMarkdown = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
|
||||||
|
const markdown = NodeHtmlMarkdown.translate(input);
|
||||||
|
return markdown;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default htmlToMarkdown;
|
@@ -0,0 +1,8 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const lowercase = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
return input.toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
export default lowercase;
|
@@ -0,0 +1,13 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import showdown from 'showdown';
|
||||||
|
|
||||||
|
const converter = new showdown.Converter();
|
||||||
|
|
||||||
|
const markdownToHtml = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
|
||||||
|
const html = converter.makeHtml(input);
|
||||||
|
return html;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default markdownToHtml;
|
@@ -0,0 +1,9 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
import pluralizeLibrary from 'pluralize';
|
||||||
|
|
||||||
|
const pluralize = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
return pluralizeLibrary(input);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default pluralize;
|
@@ -0,0 +1,12 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const replace = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
|
||||||
|
const find = $.step.parameters.find as string;
|
||||||
|
const replace = $.step.parameters.replace as string;
|
||||||
|
|
||||||
|
return input.replaceAll(find, replace);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default replace;
|
@@ -0,0 +1,8 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const trimWhitespace = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
return input.trim();
|
||||||
|
};
|
||||||
|
|
||||||
|
export default trimWhitespace;
|
@@ -0,0 +1,13 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const useDefaultValue = ($: IGlobalVariable) => {
|
||||||
|
const input = $.step.parameters.input as string;
|
||||||
|
|
||||||
|
if (input && input.trim().length > 0) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $.step.parameters.defaultValue as string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useDefaultValue;
|
3
packages/backend/src/apps/formatter/assets/favicon.svg
Normal file
3
packages/backend/src/apps/formatter/assets/favicon.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M4 4H20M4 12H20M4 20H20M4 8H14M4 16H14" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 243 B |
@@ -0,0 +1,249 @@
|
|||||||
|
const phoneNumberCountryCodes = [
|
||||||
|
{ label: 'Ascension Island', value: 'AC' },
|
||||||
|
{ label: 'Andorra', value: 'AD' },
|
||||||
|
{ label: 'United Arab Emirates', value: 'AE' },
|
||||||
|
{ label: 'Afghanistan', value: 'AF' },
|
||||||
|
{ label: 'Antigua & Barbuda', value: 'AG' },
|
||||||
|
{ label: 'Anguilla', value: 'AI' },
|
||||||
|
{ label: 'Albania', value: 'AL' },
|
||||||
|
{ label: 'Armenia', value: 'AM' },
|
||||||
|
{ label: 'Angola', value: 'AO' },
|
||||||
|
{ label: 'Argentina', value: 'AR' },
|
||||||
|
{ label: 'American Samoa', value: 'AS' },
|
||||||
|
{ label: 'Austria', value: 'AT' },
|
||||||
|
{ label: 'Australia', value: 'AU' },
|
||||||
|
{ label: 'Aruba', value: 'AW' },
|
||||||
|
{ label: 'Åland Islands', value: 'AX' },
|
||||||
|
{ label: 'Azerbaijan', value: 'AZ' },
|
||||||
|
{ label: 'Bosnia & Herzegovina', value: 'BA' },
|
||||||
|
{ label: 'Barbados', value: 'BB' },
|
||||||
|
{ label: 'Bangladesh', value: 'BD' },
|
||||||
|
{ label: 'Belgium', value: 'BE' },
|
||||||
|
{ label: 'Burkina Faso', value: 'BF' },
|
||||||
|
{ label: 'Bulgaria', value: 'BG' },
|
||||||
|
{ label: 'Bahrain', value: 'BH' },
|
||||||
|
{ label: 'Burundi', value: 'BI' },
|
||||||
|
{ label: 'Benin', value: 'BJ' },
|
||||||
|
{ label: 'St. Barthélemy', value: 'BL' },
|
||||||
|
{ label: 'Bermuda', value: 'BM' },
|
||||||
|
{ label: 'Brunei', value: 'BN' },
|
||||||
|
{ label: 'Bolivia', value: 'BO' },
|
||||||
|
{ label: 'Caribbean Netherlands', value: 'BQ' },
|
||||||
|
{ label: 'Brazil', value: 'BR' },
|
||||||
|
{ label: 'Bahamas', value: 'BS' },
|
||||||
|
{ label: 'Bhutan', value: 'BT' },
|
||||||
|
{ label: 'Botswana', value: 'BW' },
|
||||||
|
{ label: 'Belarus', value: 'BY' },
|
||||||
|
{ label: 'Belize', value: 'BZ' },
|
||||||
|
{ label: 'Canada', value: 'CA' },
|
||||||
|
{ label: 'Cocos (Keeling) Islands', value: 'CC' },
|
||||||
|
{ label: 'Congo - Kinshasa', value: 'CD' },
|
||||||
|
{ label: 'Central African Republic', value: 'CF' },
|
||||||
|
{ label: 'Congo - Brazzaville', value: 'CG' },
|
||||||
|
{ label: 'Switzerland', value: 'CH' },
|
||||||
|
{ label: 'Côte d’Ivoire', value: 'CI' },
|
||||||
|
{ label: 'Cook Islands', value: 'CK' },
|
||||||
|
{ label: 'Chile', value: 'CL' },
|
||||||
|
{ label: 'Cameroon', value: 'CM' },
|
||||||
|
{ label: 'China', value: 'CN' },
|
||||||
|
{ label: 'Colombia', value: 'CO' },
|
||||||
|
{ label: 'Costa Rica', value: 'CR' },
|
||||||
|
{ label: 'Cuba', value: 'CU' },
|
||||||
|
{ label: 'Cape Verde', value: 'CV' },
|
||||||
|
{ label: 'Curaçao', value: 'CW' },
|
||||||
|
{ label: 'Christmas Island', value: 'CX' },
|
||||||
|
{ label: 'Cyprus', value: 'CY' },
|
||||||
|
{ label: 'Czechia', value: 'CZ' },
|
||||||
|
{ label: 'Germany', value: 'DE' },
|
||||||
|
{ label: 'Djibouti', value: 'DJ' },
|
||||||
|
{ label: 'Denmark', value: 'DK' },
|
||||||
|
{ label: 'Dominica', value: 'DM' },
|
||||||
|
{ label: 'Dominican Republic', value: 'DO' },
|
||||||
|
{ label: 'Algeria', value: 'DZ' },
|
||||||
|
{ label: 'Ecuador', value: 'EC' },
|
||||||
|
{ label: 'Estonia', value: 'EE' },
|
||||||
|
{ label: 'Egypt', value: 'EG' },
|
||||||
|
{ label: 'Western Sahara', value: 'EH' },
|
||||||
|
{ label: 'Eritrea', value: 'ER' },
|
||||||
|
{ label: 'Spain', value: 'ES' },
|
||||||
|
{ label: 'Ethiopia', value: 'ET' },
|
||||||
|
{ label: 'Finland', value: 'FI' },
|
||||||
|
{ label: 'Fiji', value: 'FJ' },
|
||||||
|
{ label: 'Falkland Islands (Islas Malvinas)', value: 'FK' },
|
||||||
|
{ label: 'Micronesia', value: 'FM' },
|
||||||
|
{ label: 'Faroe Islands', value: 'FO' },
|
||||||
|
{ label: 'France', value: 'FR' },
|
||||||
|
{ label: 'Gabon', value: 'GA' },
|
||||||
|
{ label: 'United Kingdom', value: 'GB' },
|
||||||
|
{ label: 'Grenada', value: 'GD' },
|
||||||
|
{ label: 'Georgia', value: 'GE' },
|
||||||
|
{ label: 'French Guiana', value: 'GF' },
|
||||||
|
{ label: 'Guernsey', value: 'GG' },
|
||||||
|
{ label: 'Ghana', value: 'GH' },
|
||||||
|
{ label: 'Gibraltar', value: 'GI' },
|
||||||
|
{ label: 'Greenland', value: 'GL' },
|
||||||
|
{ label: 'Gambia', value: 'GM' },
|
||||||
|
{ label: 'Guinea', value: 'GN' },
|
||||||
|
{ label: 'Guadeloupe', value: 'GP' },
|
||||||
|
{ label: 'Equatorial Guinea', value: 'GQ' },
|
||||||
|
{ label: 'Greece', value: 'GR' },
|
||||||
|
{ label: 'Guatemala', value: 'GT' },
|
||||||
|
{ label: 'Guam', value: 'GU' },
|
||||||
|
{ label: 'Guinea-Bissau', value: 'GW' },
|
||||||
|
{ label: 'Guyana', value: 'GY' },
|
||||||
|
{ label: 'Hong Kong', value: 'HK' },
|
||||||
|
{ label: 'Honduras', value: 'HN' },
|
||||||
|
{ label: 'Croatia', value: 'HR' },
|
||||||
|
{ label: 'Haiti', value: 'HT' },
|
||||||
|
{ label: 'Hungary', value: 'HU' },
|
||||||
|
{ label: 'Indonesia', value: 'ID' },
|
||||||
|
{ label: 'Ireland', value: 'IE' },
|
||||||
|
{ label: 'Israel', value: 'IL' },
|
||||||
|
{ label: 'Isle of Man', value: 'IM' },
|
||||||
|
{ label: 'India', value: 'IN' },
|
||||||
|
{ label: 'British Indian Ocean Territory', value: 'IO' },
|
||||||
|
{ label: 'Iraq', value: 'IQ' },
|
||||||
|
{ label: 'Iran', value: 'IR' },
|
||||||
|
{ label: 'Iceland', value: 'IS' },
|
||||||
|
{ label: 'Italy', value: 'IT' },
|
||||||
|
{ label: 'Jersey', value: 'JE' },
|
||||||
|
{ label: 'Jamaica', value: 'JM' },
|
||||||
|
{ label: 'Jordan', value: 'JO' },
|
||||||
|
{ label: 'Japan', value: 'JP' },
|
||||||
|
{ label: 'Kenya', value: 'KE' },
|
||||||
|
{ label: 'Kyrgyzstan', value: 'KG' },
|
||||||
|
{ label: 'Cambodia', value: 'KH' },
|
||||||
|
{ label: 'Kiribati', value: 'KI' },
|
||||||
|
{ label: 'Comoros', value: 'KM' },
|
||||||
|
{ label: 'St. Kitts & Nevis', value: 'KN' },
|
||||||
|
{ label: 'North Korea', value: 'KP' },
|
||||||
|
{ label: 'South Korea', value: 'KR' },
|
||||||
|
{ label: 'Kuwait', value: 'KW' },
|
||||||
|
{ label: 'Cayman Islands', value: 'KY' },
|
||||||
|
{ label: 'Kazakhstan', value: 'KZ' },
|
||||||
|
{ label: 'Laos', value: 'LA' },
|
||||||
|
{ label: 'Lebanon', value: 'LB' },
|
||||||
|
{ label: 'St. Lucia', value: 'LC' },
|
||||||
|
{ label: 'Liechtenstein', value: 'LI' },
|
||||||
|
{ label: 'Sri Lanka', value: 'LK' },
|
||||||
|
{ label: 'Liberia', value: 'LR' },
|
||||||
|
{ label: 'Lesotho', value: 'LS' },
|
||||||
|
{ label: 'Lithuania', value: 'LT' },
|
||||||
|
{ label: 'Luxembourg', value: 'LU' },
|
||||||
|
{ label: 'Latvia', value: 'LV' },
|
||||||
|
{ label: 'Libya', value: 'LY' },
|
||||||
|
{ label: 'Morocco', value: 'MA' },
|
||||||
|
{ label: 'Monaco', value: 'MC' },
|
||||||
|
{ label: 'Moldova', value: 'MD' },
|
||||||
|
{ label: 'Montenegro', value: 'ME' },
|
||||||
|
{ label: 'St. Martin', value: 'MF' },
|
||||||
|
{ label: 'Madagascar', value: 'MG' },
|
||||||
|
{ label: 'Marshall Islands', value: 'MH' },
|
||||||
|
{ label: 'North Macedonia', value: 'MK' },
|
||||||
|
{ label: 'Mali', value: 'ML' },
|
||||||
|
{ label: 'Myanmar (Burma)', value: 'MM' },
|
||||||
|
{ label: 'Mongolia', value: 'MN' },
|
||||||
|
{ label: 'Macao', value: 'MO' },
|
||||||
|
{ label: 'Northern Mariana Islands', value: 'MP' },
|
||||||
|
{ label: 'Martinique', value: 'MQ' },
|
||||||
|
{ label: 'Mauritania', value: 'MR' },
|
||||||
|
{ label: 'Montserrat', value: 'MS' },
|
||||||
|
{ label: 'Malta', value: 'MT' },
|
||||||
|
{ label: 'Mauritius', value: 'MU' },
|
||||||
|
{ label: 'Maldives', value: 'MV' },
|
||||||
|
{ label: 'Malawi', value: 'MW' },
|
||||||
|
{ label: 'Mexico', value: 'MX' },
|
||||||
|
{ label: 'Malaysia', value: 'MY' },
|
||||||
|
{ label: 'Mozambique', value: 'MZ' },
|
||||||
|
{ label: 'Namibia', value: 'NA' },
|
||||||
|
{ label: 'New Caledonia', value: 'NC' },
|
||||||
|
{ label: 'Niger', value: 'NE' },
|
||||||
|
{ label: 'Norfolk Island', value: 'NF' },
|
||||||
|
{ label: 'Nigeria', value: 'NG' },
|
||||||
|
{ label: 'Nicaragua', value: 'NI' },
|
||||||
|
{ label: 'Netherlands', value: 'NL' },
|
||||||
|
{ label: 'Norway', value: 'NO' },
|
||||||
|
{ label: 'Nepal', value: 'NP' },
|
||||||
|
{ label: 'Nauru', value: 'NR' },
|
||||||
|
{ label: 'Niue', value: 'NU' },
|
||||||
|
{ label: 'New Zealand', value: 'NZ' },
|
||||||
|
{ label: 'Oman', value: 'OM' },
|
||||||
|
{ label: 'Panama', value: 'PA' },
|
||||||
|
{ label: 'Peru', value: 'PE' },
|
||||||
|
{ label: 'French Polynesia', value: 'PF' },
|
||||||
|
{ label: 'Papua New Guinea', value: 'PG' },
|
||||||
|
{ label: 'Philippines', value: 'PH' },
|
||||||
|
{ label: 'Pakistan', value: 'PK' },
|
||||||
|
{ label: 'Poland', value: 'PL' },
|
||||||
|
{ label: 'St. Pierre & Miquelon', value: 'PM' },
|
||||||
|
{ label: 'Puerto Rico', value: 'PR' },
|
||||||
|
{ label: 'Palestine', value: 'PS' },
|
||||||
|
{ label: 'Portugal', value: 'PT' },
|
||||||
|
{ label: 'Palau', value: 'PW' },
|
||||||
|
{ label: 'Paraguay', value: 'PY' },
|
||||||
|
{ label: 'Qatar', value: 'QA' },
|
||||||
|
{ label: 'Réunion', value: 'RE' },
|
||||||
|
{ label: 'Romania', value: 'RO' },
|
||||||
|
{ label: 'Serbia', value: 'RS' },
|
||||||
|
{ label: 'Russia', value: 'RU' },
|
||||||
|
{ label: 'Rwanda', value: 'RW' },
|
||||||
|
{ label: 'Saudi Arabia', value: 'SA' },
|
||||||
|
{ label: 'Solomon Islands', value: 'SB' },
|
||||||
|
{ label: 'Seychelles', value: 'SC' },
|
||||||
|
{ label: 'Sudan', value: 'SD' },
|
||||||
|
{ label: 'Sweden', value: 'SE' },
|
||||||
|
{ label: 'Singapore', value: 'SG' },
|
||||||
|
{ label: 'St. Helena', value: 'SH' },
|
||||||
|
{ label: 'Slovenia', value: 'SI' },
|
||||||
|
{ label: 'Svalbard & Jan Mayen', value: 'SJ' },
|
||||||
|
{ label: 'Slovakia', value: 'SK' },
|
||||||
|
{ label: 'Sierra Leone', value: 'SL' },
|
||||||
|
{ label: 'San Marino', value: 'SM' },
|
||||||
|
{ label: 'Senegal', value: 'SN' },
|
||||||
|
{ label: 'Somalia', value: 'SO' },
|
||||||
|
{ label: 'Suriname', value: 'SR' },
|
||||||
|
{ label: 'South Sudan', value: 'SS' },
|
||||||
|
{ label: 'São Tomé & Príncipe', value: 'ST' },
|
||||||
|
{ label: 'El Salvador', value: 'SV' },
|
||||||
|
{ label: 'Sint Maarten', value: 'SX' },
|
||||||
|
{ label: 'Syria', value: 'SY' },
|
||||||
|
{ label: 'Eswatini', value: 'SZ' },
|
||||||
|
{ label: 'Tristan da Cunha', value: 'TA' },
|
||||||
|
{ label: 'Turks & Caicos Islands', value: 'TC' },
|
||||||
|
{ label: 'Chad', value: 'TD' },
|
||||||
|
{ label: 'Togo', value: 'TG' },
|
||||||
|
{ label: 'Thailand', value: 'TH' },
|
||||||
|
{ label: 'Tajikistan', value: 'TJ' },
|
||||||
|
{ label: 'Tokelau', value: 'TK' },
|
||||||
|
{ label: 'Timor-Leste', value: 'TL' },
|
||||||
|
{ label: 'Turkmenistan', value: 'TM' },
|
||||||
|
{ label: 'Tunisia', value: 'TN' },
|
||||||
|
{ label: 'Tonga', value: 'TO' },
|
||||||
|
{ label: 'Türkiye', value: 'TR' },
|
||||||
|
{ label: 'Trinidad & Tobago', value: 'TT' },
|
||||||
|
{ label: 'Tuvalu', value: 'TV' },
|
||||||
|
{ label: 'Taiwan', value: 'TW' },
|
||||||
|
{ label: 'Tanzania', value: 'TZ' },
|
||||||
|
{ label: 'Ukraine', value: 'UA' },
|
||||||
|
{ label: 'Uganda', value: 'UG' },
|
||||||
|
{ label: 'United States', value: 'US' },
|
||||||
|
{ label: 'Uruguay', value: 'UY' },
|
||||||
|
{ label: 'Uzbekistan', value: 'UZ' },
|
||||||
|
{ label: 'Vatican City', value: 'VA' },
|
||||||
|
{ label: 'St. Vincent & Grenadines', value: 'VC' },
|
||||||
|
{ label: 'Venezuela', value: 'VE' },
|
||||||
|
{ label: 'British Virgin Islands', value: 'VG' },
|
||||||
|
{ label: 'U.S. Virgin Islands', value: 'VI' },
|
||||||
|
{ label: 'Vietnam', value: 'VN' },
|
||||||
|
{ label: 'Vanuatu', value: 'VU' },
|
||||||
|
{ label: 'Wallis & Futuna', value: 'WF' },
|
||||||
|
{ label: 'Samoa', value: 'WS' },
|
||||||
|
{ label: 'Kosovo', value: 'XK' },
|
||||||
|
{ label: 'Yemen', value: 'YE' },
|
||||||
|
{ label: 'Mayotte', value: 'YT' },
|
||||||
|
{ label: 'South Africa', value: 'ZA' },
|
||||||
|
{ label: 'Zambia', value: 'ZM' },
|
||||||
|
{ label: 'Zimbabwe', value: 'ZW' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default phoneNumberCountryCodes;
|
@@ -0,0 +1,3 @@
|
|||||||
|
import listTransformOptions from './list-transform-options';
|
||||||
|
|
||||||
|
export default [listTransformOptions];
|
@@ -0,0 +1,51 @@
|
|||||||
|
import formatOptions from './options/format';
|
||||||
|
import timezoneOptions from './options/timezone';
|
||||||
|
|
||||||
|
const formatDateTime = [
|
||||||
|
{
|
||||||
|
label: 'Input',
|
||||||
|
key: 'input',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The datetime you want to format.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'From Format',
|
||||||
|
key: 'fromFormat',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The format of the input.',
|
||||||
|
variables: true,
|
||||||
|
options: formatOptions,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'From Timezone',
|
||||||
|
key: 'fromTimezone',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The timezone of the input.',
|
||||||
|
variables: true,
|
||||||
|
options: timezoneOptions,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'To Format',
|
||||||
|
key: 'toFormat',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The format of the output.',
|
||||||
|
variables: true,
|
||||||
|
options: formatOptions,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'To Timezone',
|
||||||
|
key: 'toTimezone',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The timezone of the output.',
|
||||||
|
variables: true,
|
||||||
|
options: timezoneOptions,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default formatDateTime;
|
@@ -0,0 +1,64 @@
|
|||||||
|
const formatOptions = [
|
||||||
|
{
|
||||||
|
label: 'ccc MMM dd HH:mm:ssZZZ yyyy (Wed Aug 23 12:25:36-0000 2023)',
|
||||||
|
value: 'ccc MMM dd HH:mm:ssZZZ yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MMMM dd yyyy HH:mm:ss (August 23 2023 12:25:36)',
|
||||||
|
value: 'MMMM dd yyyy HH:mm:ss',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MMMM dd yyyy (August 23 2023)',
|
||||||
|
value: 'MMMM dd yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MMM dd yyyy (Aug 23 2023)',
|
||||||
|
value: 'MMM dd yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'yyyy-MM-dd HH:mm:ss ZZZ (2023-08-23 12:25:36 -0000)',
|
||||||
|
value: 'yyyy-MM-dd HH:mm:ss ZZZ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'yyyy-MM-dd (2023-08-23)',
|
||||||
|
value: 'yyyy-MM-dd',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MM-dd-yyyy (08-23-2023)',
|
||||||
|
value: 'MM-dd-yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MM/dd/yyyy (08/23/2023)',
|
||||||
|
value: 'MM/dd/yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MM/dd/yy (08/23/23)',
|
||||||
|
value: 'MM/dd/yy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'dd-MM-yyyy (23-08-2023)',
|
||||||
|
value: 'dd-MM-yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'dd/MM/yyyy (23/08/2023)',
|
||||||
|
value: 'dd/MM/yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'dd/MM/yy (23/08/23)',
|
||||||
|
value: 'dd/MM/yy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'MM-yyyy (08-2023)',
|
||||||
|
value: 'MM-yyyy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Unix timestamp in seconds (1694008283)',
|
||||||
|
value: 'X',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Unix timestamp in milliseconds (1694008306315)',
|
||||||
|
value: 'x',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default formatOptions;
|
@@ -0,0 +1,449 @@
|
|||||||
|
// The list from Intl.supportedValuesOf('timeZone') which is used by Luxon.
|
||||||
|
|
||||||
|
const timezoneOptions = [
|
||||||
|
{ label: 'Africa/Abidjan', value: 'Africa/Abidjan' },
|
||||||
|
{ label: 'Africa/Accra', value: 'Africa/Accra' },
|
||||||
|
{ label: 'Africa/Addis_Ababa', value: 'Africa/Addis_Ababa' },
|
||||||
|
{ label: 'Africa/Algiers', value: 'Africa/Algiers' },
|
||||||
|
{ label: 'Africa/Asmera', value: 'Africa/Asmera' },
|
||||||
|
{ label: 'Africa/Bamako', value: 'Africa/Bamako' },
|
||||||
|
{ label: 'Africa/Bangui', value: 'Africa/Bangui' },
|
||||||
|
{ label: 'Africa/Banjul', value: 'Africa/Banjul' },
|
||||||
|
{ label: 'Africa/Bissau', value: 'Africa/Bissau' },
|
||||||
|
{ label: 'Africa/Blantyre', value: 'Africa/Blantyre' },
|
||||||
|
{ label: 'Africa/Brazzaville', value: 'Africa/Brazzaville' },
|
||||||
|
{ label: 'Africa/Bujumbura', value: 'Africa/Bujumbura' },
|
||||||
|
{ label: 'Africa/Cairo', value: 'Africa/Cairo' },
|
||||||
|
{ label: 'Africa/Casablanca', value: 'Africa/Casablanca' },
|
||||||
|
{ label: 'Africa/Ceuta', value: 'Africa/Ceuta' },
|
||||||
|
{ label: 'Africa/Conakry', value: 'Africa/Conakry' },
|
||||||
|
{ label: 'Africa/Dakar', value: 'Africa/Dakar' },
|
||||||
|
{ label: 'Africa/Dar_es_Salaam', value: 'Africa/Dar_es_Salaam' },
|
||||||
|
{ label: 'Africa/Djibouti', value: 'Africa/Djibouti' },
|
||||||
|
{ label: 'Africa/Douala', value: 'Africa/Douala' },
|
||||||
|
{ label: 'Africa/El_Aaiun', value: 'Africa/El_Aaiun' },
|
||||||
|
{ label: 'Africa/Freetown', value: 'Africa/Freetown' },
|
||||||
|
{ label: 'Africa/Gaborone', value: 'Africa/Gaborone' },
|
||||||
|
{ label: 'Africa/Harare', value: 'Africa/Harare' },
|
||||||
|
{ label: 'Africa/Johannesburg', value: 'Africa/Johannesburg' },
|
||||||
|
{ label: 'Africa/Juba', value: 'Africa/Juba' },
|
||||||
|
{ label: 'Africa/Kampala', value: 'Africa/Kampala' },
|
||||||
|
{ label: 'Africa/Khartoum', value: 'Africa/Khartoum' },
|
||||||
|
{ label: 'Africa/Kigali', value: 'Africa/Kigali' },
|
||||||
|
{ label: 'Africa/Kinshasa', value: 'Africa/Kinshasa' },
|
||||||
|
{ label: 'Africa/Lagos', value: 'Africa/Lagos' },
|
||||||
|
{ label: 'Africa/Libreville', value: 'Africa/Libreville' },
|
||||||
|
{ label: 'Africa/Lome', value: 'Africa/Lome' },
|
||||||
|
{ label: 'Africa/Luanda', value: 'Africa/Luanda' },
|
||||||
|
{ label: 'Africa/Lubumbashi', value: 'Africa/Lubumbashi' },
|
||||||
|
{ label: 'Africa/Lusaka', value: 'Africa/Lusaka' },
|
||||||
|
{ label: 'Africa/Malabo', value: 'Africa/Malabo' },
|
||||||
|
{ label: 'Africa/Maputo', value: 'Africa/Maputo' },
|
||||||
|
{ label: 'Africa/Maseru', value: 'Africa/Maseru' },
|
||||||
|
{ label: 'Africa/Mbabane', value: 'Africa/Mbabane' },
|
||||||
|
{ label: 'Africa/Mogadishu', value: 'Africa/Mogadishu' },
|
||||||
|
{ label: 'Africa/Monrovia', value: 'Africa/Monrovia' },
|
||||||
|
{ label: 'Africa/Nairobi', value: 'Africa/Nairobi' },
|
||||||
|
{ label: 'Africa/Ndjamena', value: 'Africa/Ndjamena' },
|
||||||
|
{ label: 'Africa/Niamey', value: 'Africa/Niamey' },
|
||||||
|
{ label: 'Africa/Nouakchott', value: 'Africa/Nouakchott' },
|
||||||
|
{ label: 'Africa/Ouagadougou', value: 'Africa/Ouagadougou' },
|
||||||
|
{ label: 'Africa/Porto-Novo', value: 'Africa/Porto-Novo' },
|
||||||
|
{ label: 'Africa/Sao_Tome', value: 'Africa/Sao_Tome' },
|
||||||
|
{ label: 'Africa/Tripoli', value: 'Africa/Tripoli' },
|
||||||
|
{ label: 'Africa/Tunis', value: 'Africa/Tunis' },
|
||||||
|
{ label: 'Africa/Windhoek', value: 'Africa/Windhoek' },
|
||||||
|
{ label: 'America/Adak', value: 'America/Adak' },
|
||||||
|
{ label: 'America/Anchorage', value: 'America/Anchorage' },
|
||||||
|
{ label: 'America/Anguilla', value: 'America/Anguilla' },
|
||||||
|
{ label: 'America/Antigua', value: 'America/Antigua' },
|
||||||
|
{ label: 'America/Araguaina', value: 'America/Araguaina' },
|
||||||
|
{ label: 'America/Argentina/La_Rioja', value: 'America/Argentina/La_Rioja' },
|
||||||
|
{
|
||||||
|
label: 'America/Argentina/Rio_Gallegos',
|
||||||
|
value: 'America/Argentina/Rio_Gallegos',
|
||||||
|
},
|
||||||
|
{ label: 'America/Argentina/Salta', value: 'America/Argentina/Salta' },
|
||||||
|
{ label: 'America/Argentina/San_Juan', value: 'America/Argentina/San_Juan' },
|
||||||
|
{ label: 'America/Argentina/San_Luis', value: 'America/Argentina/San_Luis' },
|
||||||
|
{ label: 'America/Argentina/Tucuman', value: 'America/Argentina/Tucuman' },
|
||||||
|
{ label: 'America/Argentina/Ushuaia', value: 'America/Argentina/Ushuaia' },
|
||||||
|
{ label: 'America/Aruba', value: 'America/Aruba' },
|
||||||
|
{ label: 'America/Asuncion', value: 'America/Asuncion' },
|
||||||
|
{ label: 'America/Bahia', value: 'America/Bahia' },
|
||||||
|
{ label: 'America/Bahia_Banderas', value: 'America/Bahia_Banderas' },
|
||||||
|
{ label: 'America/Barbados', value: 'America/Barbados' },
|
||||||
|
{ label: 'America/Belem', value: 'America/Belem' },
|
||||||
|
{ label: 'America/Belize', value: 'America/Belize' },
|
||||||
|
{ label: 'America/Blanc-Sablon', value: 'America/Blanc-Sablon' },
|
||||||
|
{ label: 'America/Boa_Vista', value: 'America/Boa_Vista' },
|
||||||
|
{ label: 'America/Bogota', value: 'America/Bogota' },
|
||||||
|
{ label: 'America/Boise', value: 'America/Boise' },
|
||||||
|
{ label: 'America/Buenos_Aires', value: 'America/Buenos_Aires' },
|
||||||
|
{ label: 'America/Cambridge_Bay', value: 'America/Cambridge_Bay' },
|
||||||
|
{ label: 'America/Campo_Grande', value: 'America/Campo_Grande' },
|
||||||
|
{ label: 'America/Cancun', value: 'America/Cancun' },
|
||||||
|
{ label: 'America/Caracas', value: 'America/Caracas' },
|
||||||
|
{ label: 'America/Catamarca', value: 'America/Catamarca' },
|
||||||
|
{ label: 'America/Cayenne', value: 'America/Cayenne' },
|
||||||
|
{ label: 'America/Cayman', value: 'America/Cayman' },
|
||||||
|
{ label: 'America/Chicago', value: 'America/Chicago' },
|
||||||
|
{ label: 'America/Chihuahua', value: 'America/Chihuahua' },
|
||||||
|
{ label: 'America/Ciudad_Juarez', value: 'America/Ciudad_Juarez' },
|
||||||
|
{ label: 'America/Coral_Harbour', value: 'America/Coral_Harbour' },
|
||||||
|
{ label: 'America/Cordoba', value: 'America/Cordoba' },
|
||||||
|
{ label: 'America/Costa_Rica', value: 'America/Costa_Rica' },
|
||||||
|
{ label: 'America/Creston', value: 'America/Creston' },
|
||||||
|
{ label: 'America/Cuiaba', value: 'America/Cuiaba' },
|
||||||
|
{ label: 'America/Curacao', value: 'America/Curacao' },
|
||||||
|
{ label: 'America/Danmarkshavn', value: 'America/Danmarkshavn' },
|
||||||
|
{ label: 'America/Dawson', value: 'America/Dawson' },
|
||||||
|
{ label: 'America/Dawson_Creek', value: 'America/Dawson_Creek' },
|
||||||
|
{ label: 'America/Denver', value: 'America/Denver' },
|
||||||
|
{ label: 'America/Detroit', value: 'America/Detroit' },
|
||||||
|
{ label: 'America/Dominica', value: 'America/Dominica' },
|
||||||
|
{ label: 'America/Edmonton', value: 'America/Edmonton' },
|
||||||
|
{ label: 'America/Eirunepe', value: 'America/Eirunepe' },
|
||||||
|
{ label: 'America/El_Salvador', value: 'America/El_Salvador' },
|
||||||
|
{ label: 'America/Fort_Nelson', value: 'America/Fort_Nelson' },
|
||||||
|
{ label: 'America/Fortaleza', value: 'America/Fortaleza' },
|
||||||
|
{ label: 'America/Glace_Bay', value: 'America/Glace_Bay' },
|
||||||
|
{ label: 'America/Godthab', value: 'America/Godthab' },
|
||||||
|
{ label: 'America/Goose_Bay', value: 'America/Goose_Bay' },
|
||||||
|
{ label: 'America/Grand_Turk', value: 'America/Grand_Turk' },
|
||||||
|
{ label: 'America/Grenada', value: 'America/Grenada' },
|
||||||
|
{ label: 'America/Guadeloupe', value: 'America/Guadeloupe' },
|
||||||
|
{ label: 'America/Guatemala', value: 'America/Guatemala' },
|
||||||
|
{ label: 'America/Guayaquil', value: 'America/Guayaquil' },
|
||||||
|
{ label: 'America/Guyana', value: 'America/Guyana' },
|
||||||
|
{ label: 'America/Halifax', value: 'America/Halifax' },
|
||||||
|
{ label: 'America/Havana', value: 'America/Havana' },
|
||||||
|
{ label: 'America/Hermosillo', value: 'America/Hermosillo' },
|
||||||
|
{ label: 'America/Indiana/Knox', value: 'America/Indiana/Knox' },
|
||||||
|
{ label: 'America/Indiana/Marengo', value: 'America/Indiana/Marengo' },
|
||||||
|
{ label: 'America/Indiana/Petersburg', value: 'America/Indiana/Petersburg' },
|
||||||
|
{ label: 'America/Indiana/Tell_City', value: 'America/Indiana/Tell_City' },
|
||||||
|
{ label: 'America/Indiana/Vevay', value: 'America/Indiana/Vevay' },
|
||||||
|
{ label: 'America/Indiana/Vincennes', value: 'America/Indiana/Vincennes' },
|
||||||
|
{ label: 'America/Indiana/Winamac', value: 'America/Indiana/Winamac' },
|
||||||
|
{ label: 'America/Indianapolis', value: 'America/Indianapolis' },
|
||||||
|
{ label: 'America/Inuvik', value: 'America/Inuvik' },
|
||||||
|
{ label: 'America/Iqaluit', value: 'America/Iqaluit' },
|
||||||
|
{ label: 'America/Jamaica', value: 'America/Jamaica' },
|
||||||
|
{ label: 'America/Jujuy', value: 'America/Jujuy' },
|
||||||
|
{ label: 'America/Juneau', value: 'America/Juneau' },
|
||||||
|
{
|
||||||
|
label: 'America/Kentucky/Monticello',
|
||||||
|
value: 'America/Kentucky/Monticello',
|
||||||
|
},
|
||||||
|
{ label: 'America/Kralendijk', value: 'America/Kralendijk' },
|
||||||
|
{ label: 'America/La_Paz', value: 'America/La_Paz' },
|
||||||
|
{ label: 'America/Lima', value: 'America/Lima' },
|
||||||
|
{ label: 'America/Los_Angeles', value: 'America/Los_Angeles' },
|
||||||
|
{ label: 'America/Louisville', value: 'America/Louisville' },
|
||||||
|
{ label: 'America/Lower_Princes', value: 'America/Lower_Princes' },
|
||||||
|
{ label: 'America/Maceio', value: 'America/Maceio' },
|
||||||
|
{ label: 'America/Managua', value: 'America/Managua' },
|
||||||
|
{ label: 'America/Manaus', value: 'America/Manaus' },
|
||||||
|
{ label: 'America/Marigot', value: 'America/Marigot' },
|
||||||
|
{ label: 'America/Martinique', value: 'America/Martinique' },
|
||||||
|
{ label: 'America/Matamoros', value: 'America/Matamoros' },
|
||||||
|
{ label: 'America/Mazatlan', value: 'America/Mazatlan' },
|
||||||
|
{ label: 'America/Mendoza', value: 'America/Mendoza' },
|
||||||
|
{ label: 'America/Menominee', value: 'America/Menominee' },
|
||||||
|
{ label: 'America/Merida', value: 'America/Merida' },
|
||||||
|
{ label: 'America/Metlakatla', value: 'America/Metlakatla' },
|
||||||
|
{ label: 'America/Mexico_City', value: 'America/Mexico_City' },
|
||||||
|
{ label: 'America/Miquelon', value: 'America/Miquelon' },
|
||||||
|
{ label: 'America/Moncton', value: 'America/Moncton' },
|
||||||
|
{ label: 'America/Monterrey', value: 'America/Monterrey' },
|
||||||
|
{ label: 'America/Montevideo', value: 'America/Montevideo' },
|
||||||
|
{ label: 'America/Montserrat', value: 'America/Montserrat' },
|
||||||
|
{ label: 'America/Nassau', value: 'America/Nassau' },
|
||||||
|
{ label: 'America/New_York', value: 'America/New_York' },
|
||||||
|
{ label: 'America/Nipigon', value: 'America/Nipigon' },
|
||||||
|
{ label: 'America/Nome', value: 'America/Nome' },
|
||||||
|
{ label: 'America/Noronha', value: 'America/Noronha' },
|
||||||
|
{
|
||||||
|
label: 'America/North_Dakota/Beulah',
|
||||||
|
value: 'America/North_Dakota/Beulah',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'America/North_Dakota/Center',
|
||||||
|
value: 'America/North_Dakota/Center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'America/North_Dakota/New_Salem',
|
||||||
|
value: 'America/North_Dakota/New_Salem',
|
||||||
|
},
|
||||||
|
{ label: 'America/Ojinaga', value: 'America/Ojinaga' },
|
||||||
|
{ label: 'America/Panama', value: 'America/Panama' },
|
||||||
|
{ label: 'America/Pangnirtung', value: 'America/Pangnirtung' },
|
||||||
|
{ label: 'America/Paramaribo', value: 'America/Paramaribo' },
|
||||||
|
{ label: 'America/Phoenix', value: 'America/Phoenix' },
|
||||||
|
{ label: 'America/Port-au-Prince', value: 'America/Port-au-Prince' },
|
||||||
|
{ label: 'America/Port_of_Spain', value: 'America/Port_of_Spain' },
|
||||||
|
{ label: 'America/Porto_Velho', value: 'America/Porto_Velho' },
|
||||||
|
{ label: 'America/Puerto_Rico', value: 'America/Puerto_Rico' },
|
||||||
|
{ label: 'America/Punta_Arenas', value: 'America/Punta_Arenas' },
|
||||||
|
{ label: 'America/Rainy_River', value: 'America/Rainy_River' },
|
||||||
|
{ label: 'America/Rankin_Inlet', value: 'America/Rankin_Inlet' },
|
||||||
|
{ label: 'America/Recife', value: 'America/Recife' },
|
||||||
|
{ label: 'America/Regina', value: 'America/Regina' },
|
||||||
|
{ label: 'America/Resolute', value: 'America/Resolute' },
|
||||||
|
{ label: 'America/Rio_Branco', value: 'America/Rio_Branco' },
|
||||||
|
{ label: 'America/Santa_Isabel', value: 'America/Santa_Isabel' },
|
||||||
|
{ label: 'America/Santarem', value: 'America/Santarem' },
|
||||||
|
{ label: 'America/Santiago', value: 'America/Santiago' },
|
||||||
|
{ label: 'America/Santo_Domingo', value: 'America/Santo_Domingo' },
|
||||||
|
{ label: 'America/Sao_Paulo', value: 'America/Sao_Paulo' },
|
||||||
|
{ label: 'America/Scoresbysund', value: 'America/Scoresbysund' },
|
||||||
|
{ label: 'America/Sitka', value: 'America/Sitka' },
|
||||||
|
{ label: 'America/St_Barthelemy', value: 'America/St_Barthelemy' },
|
||||||
|
{ label: 'America/St_Johns', value: 'America/St_Johns' },
|
||||||
|
{ label: 'America/St_Kitts', value: 'America/St_Kitts' },
|
||||||
|
{ label: 'America/St_Lucia', value: 'America/St_Lucia' },
|
||||||
|
{ label: 'America/St_Thomas', value: 'America/St_Thomas' },
|
||||||
|
{ label: 'America/St_Vincent', value: 'America/St_Vincent' },
|
||||||
|
{ label: 'America/Swift_Current', value: 'America/Swift_Current' },
|
||||||
|
{ label: 'America/Tegucigalpa', value: 'America/Tegucigalpa' },
|
||||||
|
{ label: 'America/Thule', value: 'America/Thule' },
|
||||||
|
{ label: 'America/Thunder_Bay', value: 'America/Thunder_Bay' },
|
||||||
|
{ label: 'America/Tijuana', value: 'America/Tijuana' },
|
||||||
|
{ label: 'America/Toronto', value: 'America/Toronto' },
|
||||||
|
{ label: 'America/Tortola', value: 'America/Tortola' },
|
||||||
|
{ label: 'America/Vancouver', value: 'America/Vancouver' },
|
||||||
|
{ label: 'America/Whitehorse', value: 'America/Whitehorse' },
|
||||||
|
{ label: 'America/Winnipeg', value: 'America/Winnipeg' },
|
||||||
|
{ label: 'America/Yakutat', value: 'America/Yakutat' },
|
||||||
|
{ label: 'America/Yellowknife', value: 'America/Yellowknife' },
|
||||||
|
{ label: 'Antarctica/Casey', value: 'Antarctica/Casey' },
|
||||||
|
{ label: 'Antarctica/Davis', value: 'Antarctica/Davis' },
|
||||||
|
{ label: 'Antarctica/DumontDUrville', value: 'Antarctica/DumontDUrville' },
|
||||||
|
{ label: 'Antarctica/Macquarie', value: 'Antarctica/Macquarie' },
|
||||||
|
{ label: 'Antarctica/Mawson', value: 'Antarctica/Mawson' },
|
||||||
|
{ label: 'Antarctica/McMurdo', value: 'Antarctica/McMurdo' },
|
||||||
|
{ label: 'Antarctica/Palmer', value: 'Antarctica/Palmer' },
|
||||||
|
{ label: 'Antarctica/Rothera', value: 'Antarctica/Rothera' },
|
||||||
|
{ label: 'Antarctica/Syowa', value: 'Antarctica/Syowa' },
|
||||||
|
{ label: 'Antarctica/Troll', value: 'Antarctica/Troll' },
|
||||||
|
{ label: 'Antarctica/Vostok', value: 'Antarctica/Vostok' },
|
||||||
|
{ label: 'Arctic/Longyearbyen', value: 'Arctic/Longyearbyen' },
|
||||||
|
{ label: 'Asia/Aden', value: 'Asia/Aden' },
|
||||||
|
{ label: 'Asia/Almaty', value: 'Asia/Almaty' },
|
||||||
|
{ label: 'Asia/Amman', value: 'Asia/Amman' },
|
||||||
|
{ label: 'Asia/Anadyr', value: 'Asia/Anadyr' },
|
||||||
|
{ label: 'Asia/Aqtau', value: 'Asia/Aqtau' },
|
||||||
|
{ label: 'Asia/Aqtobe', value: 'Asia/Aqtobe' },
|
||||||
|
{ label: 'Asia/Ashgabat', value: 'Asia/Ashgabat' },
|
||||||
|
{ label: 'Asia/Atyrau', value: 'Asia/Atyrau' },
|
||||||
|
{ label: 'Asia/Baghdad', value: 'Asia/Baghdad' },
|
||||||
|
{ label: 'Asia/Bahrain', value: 'Asia/Bahrain' },
|
||||||
|
{ label: 'Asia/Baku', value: 'Asia/Baku' },
|
||||||
|
{ label: 'Asia/Bangkok', value: 'Asia/Bangkok' },
|
||||||
|
{ label: 'Asia/Barnaul', value: 'Asia/Barnaul' },
|
||||||
|
{ label: 'Asia/Beirut', value: 'Asia/Beirut' },
|
||||||
|
{ label: 'Asia/Bishkek', value: 'Asia/Bishkek' },
|
||||||
|
{ label: 'Asia/Brunei', value: 'Asia/Brunei' },
|
||||||
|
{ label: 'Asia/Calcutta', value: 'Asia/Calcutta' },
|
||||||
|
{ label: 'Asia/Chita', value: 'Asia/Chita' },
|
||||||
|
{ label: 'Asia/Choibalsan', value: 'Asia/Choibalsan' },
|
||||||
|
{ label: 'Asia/Colombo', value: 'Asia/Colombo' },
|
||||||
|
{ label: 'Asia/Damascus', value: 'Asia/Damascus' },
|
||||||
|
{ label: 'Asia/Dhaka', value: 'Asia/Dhaka' },
|
||||||
|
{ label: 'Asia/Dili', value: 'Asia/Dili' },
|
||||||
|
{ label: 'Asia/Dubai', value: 'Asia/Dubai' },
|
||||||
|
{ label: 'Asia/Dushanbe', value: 'Asia/Dushanbe' },
|
||||||
|
{ label: 'Asia/Famagusta', value: 'Asia/Famagusta' },
|
||||||
|
{ label: 'Asia/Gaza', value: 'Asia/Gaza' },
|
||||||
|
{ label: 'Asia/Hebron', value: 'Asia/Hebron' },
|
||||||
|
{ label: 'Asia/Hong_Kong', value: 'Asia/Hong_Kong' },
|
||||||
|
{ label: 'Asia/Hovd', value: 'Asia/Hovd' },
|
||||||
|
{ label: 'Asia/Irkutsk', value: 'Asia/Irkutsk' },
|
||||||
|
{ label: 'Asia/Jakarta', value: 'Asia/Jakarta' },
|
||||||
|
{ label: 'Asia/Jayapura', value: 'Asia/Jayapura' },
|
||||||
|
{ label: 'Asia/Jerusalem', value: 'Asia/Jerusalem' },
|
||||||
|
{ label: 'Asia/Kabul', value: 'Asia/Kabul' },
|
||||||
|
{ label: 'Asia/Kamchatka', value: 'Asia/Kamchatka' },
|
||||||
|
{ label: 'Asia/Karachi', value: 'Asia/Karachi' },
|
||||||
|
{ label: 'Asia/Katmandu', value: 'Asia/Katmandu' },
|
||||||
|
{ label: 'Asia/Khandyga', value: 'Asia/Khandyga' },
|
||||||
|
{ label: 'Asia/Krasnoyarsk', value: 'Asia/Krasnoyarsk' },
|
||||||
|
{ label: 'Asia/Kuala_Lumpur', value: 'Asia/Kuala_Lumpur' },
|
||||||
|
{ label: 'Asia/Kuching', value: 'Asia/Kuching' },
|
||||||
|
{ label: 'Asia/Kuwait', value: 'Asia/Kuwait' },
|
||||||
|
{ label: 'Asia/Macau', value: 'Asia/Macau' },
|
||||||
|
{ label: 'Asia/Magadan', value: 'Asia/Magadan' },
|
||||||
|
{ label: 'Asia/Makassar', value: 'Asia/Makassar' },
|
||||||
|
{ label: 'Asia/Manila', value: 'Asia/Manila' },
|
||||||
|
{ label: 'Asia/Muscat', value: 'Asia/Muscat' },
|
||||||
|
{ label: 'Asia/Nicosia', value: 'Asia/Nicosia' },
|
||||||
|
{ label: 'Asia/Novokuznetsk', value: 'Asia/Novokuznetsk' },
|
||||||
|
{ label: 'Asia/Novosibirsk', value: 'Asia/Novosibirsk' },
|
||||||
|
{ label: 'Asia/Omsk', value: 'Asia/Omsk' },
|
||||||
|
{ label: 'Asia/Oral', value: 'Asia/Oral' },
|
||||||
|
{ label: 'Asia/Phnom_Penh', value: 'Asia/Phnom_Penh' },
|
||||||
|
{ label: 'Asia/Pontianak', value: 'Asia/Pontianak' },
|
||||||
|
{ label: 'Asia/Pyongyang', value: 'Asia/Pyongyang' },
|
||||||
|
{ label: 'Asia/Qatar', value: 'Asia/Qatar' },
|
||||||
|
{ label: 'Asia/Qostanay', value: 'Asia/Qostanay' },
|
||||||
|
{ label: 'Asia/Qyzylorda', value: 'Asia/Qyzylorda' },
|
||||||
|
{ label: 'Asia/Rangoon', value: 'Asia/Rangoon' },
|
||||||
|
{ label: 'Asia/Riyadh', value: 'Asia/Riyadh' },
|
||||||
|
{ label: 'Asia/Saigon', value: 'Asia/Saigon' },
|
||||||
|
{ label: 'Asia/Sakhalin', value: 'Asia/Sakhalin' },
|
||||||
|
{ label: 'Asia/Samarkand', value: 'Asia/Samarkand' },
|
||||||
|
{ label: 'Asia/Seoul', value: 'Asia/Seoul' },
|
||||||
|
{ label: 'Asia/Shanghai', value: 'Asia/Shanghai' },
|
||||||
|
{ label: 'Asia/Singapore', value: 'Asia/Singapore' },
|
||||||
|
{ label: 'Asia/Srednekolymsk', value: 'Asia/Srednekolymsk' },
|
||||||
|
{ label: 'Asia/Taipei', value: 'Asia/Taipei' },
|
||||||
|
{ label: 'Asia/Tashkent', value: 'Asia/Tashkent' },
|
||||||
|
{ label: 'Asia/Tbilisi', value: 'Asia/Tbilisi' },
|
||||||
|
{ label: 'Asia/Tehran', value: 'Asia/Tehran' },
|
||||||
|
{ label: 'Asia/Thimphu', value: 'Asia/Thimphu' },
|
||||||
|
{ label: 'Asia/Tokyo', value: 'Asia/Tokyo' },
|
||||||
|
{ label: 'Asia/Tomsk', value: 'Asia/Tomsk' },
|
||||||
|
{ label: 'Asia/Ulaanbaatar', value: 'Asia/Ulaanbaatar' },
|
||||||
|
{ label: 'Asia/Urumqi', value: 'Asia/Urumqi' },
|
||||||
|
{ label: 'Asia/Ust-Nera', value: 'Asia/Ust-Nera' },
|
||||||
|
{ label: 'Asia/Vientiane', value: 'Asia/Vientiane' },
|
||||||
|
{ label: 'Asia/Vladivostok', value: 'Asia/Vladivostok' },
|
||||||
|
{ label: 'Asia/Yakutsk', value: 'Asia/Yakutsk' },
|
||||||
|
{ label: 'Asia/Yekaterinburg', value: 'Asia/Yekaterinburg' },
|
||||||
|
{ label: 'Asia/Yerevan', value: 'Asia/Yerevan' },
|
||||||
|
{ label: 'Atlantic/Azores', value: 'Atlantic/Azores' },
|
||||||
|
{ label: 'Atlantic/Bermuda', value: 'Atlantic/Bermuda' },
|
||||||
|
{ label: 'Atlantic/Canary', value: 'Atlantic/Canary' },
|
||||||
|
{ label: 'Atlantic/Cape_Verde', value: 'Atlantic/Cape_Verde' },
|
||||||
|
{ label: 'Atlantic/Faeroe', value: 'Atlantic/Faeroe' },
|
||||||
|
{ label: 'Atlantic/Madeira', value: 'Atlantic/Madeira' },
|
||||||
|
{ label: 'Atlantic/Reykjavik', value: 'Atlantic/Reykjavik' },
|
||||||
|
{ label: 'Atlantic/South_Georgia', value: 'Atlantic/South_Georgia' },
|
||||||
|
{ label: 'Atlantic/St_Helena', value: 'Atlantic/St_Helena' },
|
||||||
|
{ label: 'Atlantic/Stanley', value: 'Atlantic/Stanley' },
|
||||||
|
{ label: 'Australia/Adelaide', value: 'Australia/Adelaide' },
|
||||||
|
{ label: 'Australia/Brisbane', value: 'Australia/Brisbane' },
|
||||||
|
{ label: 'Australia/Broken_Hill', value: 'Australia/Broken_Hill' },
|
||||||
|
{ label: 'Australia/Currie', value: 'Australia/Currie' },
|
||||||
|
{ label: 'Australia/Darwin', value: 'Australia/Darwin' },
|
||||||
|
{ label: 'Australia/Eucla', value: 'Australia/Eucla' },
|
||||||
|
{ label: 'Australia/Hobart', value: 'Australia/Hobart' },
|
||||||
|
{ label: 'Australia/Lindeman', value: 'Australia/Lindeman' },
|
||||||
|
{ label: 'Australia/Lord_Howe', value: 'Australia/Lord_Howe' },
|
||||||
|
{ label: 'Australia/Melbourne', value: 'Australia/Melbourne' },
|
||||||
|
{ label: 'Australia/Perth', value: 'Australia/Perth' },
|
||||||
|
{ label: 'Australia/Sydney', value: 'Australia/Sydney' },
|
||||||
|
{ label: 'Europe/Amsterdam', value: 'Europe/Amsterdam' },
|
||||||
|
{ label: 'Europe/Andorra', value: 'Europe/Andorra' },
|
||||||
|
{ label: 'Europe/Astrakhan', value: 'Europe/Astrakhan' },
|
||||||
|
{ label: 'Europe/Athens', value: 'Europe/Athens' },
|
||||||
|
{ label: 'Europe/Belgrade', value: 'Europe/Belgrade' },
|
||||||
|
{ label: 'Europe/Berlin', value: 'Europe/Berlin' },
|
||||||
|
{ label: 'Europe/Bratislava', value: 'Europe/Bratislava' },
|
||||||
|
{ label: 'Europe/Brussels', value: 'Europe/Brussels' },
|
||||||
|
{ label: 'Europe/Bucharest', value: 'Europe/Bucharest' },
|
||||||
|
{ label: 'Europe/Budapest', value: 'Europe/Budapest' },
|
||||||
|
{ label: 'Europe/Busingen', value: 'Europe/Busingen' },
|
||||||
|
{ label: 'Europe/Chisinau', value: 'Europe/Chisinau' },
|
||||||
|
{ label: 'Europe/Copenhagen', value: 'Europe/Copenhagen' },
|
||||||
|
{ label: 'Europe/Dublin', value: 'Europe/Dublin' },
|
||||||
|
{ label: 'Europe/Gibraltar', value: 'Europe/Gibraltar' },
|
||||||
|
{ label: 'Europe/Guernsey', value: 'Europe/Guernsey' },
|
||||||
|
{ label: 'Europe/Helsinki', value: 'Europe/Helsinki' },
|
||||||
|
{ label: 'Europe/Isle_of_Man', value: 'Europe/Isle_of_Man' },
|
||||||
|
{ label: 'Europe/Istanbul', value: 'Europe/Istanbul' },
|
||||||
|
{ label: 'Europe/Jersey', value: 'Europe/Jersey' },
|
||||||
|
{ label: 'Europe/Kaliningrad', value: 'Europe/Kaliningrad' },
|
||||||
|
{ label: 'Europe/Kiev', value: 'Europe/Kiev' },
|
||||||
|
{ label: 'Europe/Kirov', value: 'Europe/Kirov' },
|
||||||
|
{ label: 'Europe/Lisbon', value: 'Europe/Lisbon' },
|
||||||
|
{ label: 'Europe/Ljubljana', value: 'Europe/Ljubljana' },
|
||||||
|
{ label: 'Europe/London', value: 'Europe/London' },
|
||||||
|
{ label: 'Europe/Luxembourg', value: 'Europe/Luxembourg' },
|
||||||
|
{ label: 'Europe/Madrid', value: 'Europe/Madrid' },
|
||||||
|
{ label: 'Europe/Malta', value: 'Europe/Malta' },
|
||||||
|
{ label: 'Europe/Mariehamn', value: 'Europe/Mariehamn' },
|
||||||
|
{ label: 'Europe/Minsk', value: 'Europe/Minsk' },
|
||||||
|
{ label: 'Europe/Monaco', value: 'Europe/Monaco' },
|
||||||
|
{ label: 'Europe/Moscow', value: 'Europe/Moscow' },
|
||||||
|
{ label: 'Europe/Oslo', value: 'Europe/Oslo' },
|
||||||
|
{ label: 'Europe/Paris', value: 'Europe/Paris' },
|
||||||
|
{ label: 'Europe/Podgorica', value: 'Europe/Podgorica' },
|
||||||
|
{ label: 'Europe/Prague', value: 'Europe/Prague' },
|
||||||
|
{ label: 'Europe/Riga', value: 'Europe/Riga' },
|
||||||
|
{ label: 'Europe/Rome', value: 'Europe/Rome' },
|
||||||
|
{ label: 'Europe/Samara', value: 'Europe/Samara' },
|
||||||
|
{ label: 'Europe/San_Marino', value: 'Europe/San_Marino' },
|
||||||
|
{ label: 'Europe/Sarajevo', value: 'Europe/Sarajevo' },
|
||||||
|
{ label: 'Europe/Saratov', value: 'Europe/Saratov' },
|
||||||
|
{ label: 'Europe/Simferopol', value: 'Europe/Simferopol' },
|
||||||
|
{ label: 'Europe/Skopje', value: 'Europe/Skopje' },
|
||||||
|
{ label: 'Europe/Sofia', value: 'Europe/Sofia' },
|
||||||
|
{ label: 'Europe/Stockholm', value: 'Europe/Stockholm' },
|
||||||
|
{ label: 'Europe/Tallinn', value: 'Europe/Tallinn' },
|
||||||
|
{ label: 'Europe/Tirane', value: 'Europe/Tirane' },
|
||||||
|
{ label: 'Europe/Ulyanovsk', value: 'Europe/Ulyanovsk' },
|
||||||
|
{ label: 'Europe/Uzhgorod', value: 'Europe/Uzhgorod' },
|
||||||
|
{ label: 'Europe/Vaduz', value: 'Europe/Vaduz' },
|
||||||
|
{ label: 'Europe/Vatican', value: 'Europe/Vatican' },
|
||||||
|
{ label: 'Europe/Vienna', value: 'Europe/Vienna' },
|
||||||
|
{ label: 'Europe/Vilnius', value: 'Europe/Vilnius' },
|
||||||
|
{ label: 'Europe/Volgograd', value: 'Europe/Volgograd' },
|
||||||
|
{ label: 'Europe/Warsaw', value: 'Europe/Warsaw' },
|
||||||
|
{ label: 'Europe/Zagreb', value: 'Europe/Zagreb' },
|
||||||
|
{ label: 'Europe/Zaporozhye', value: 'Europe/Zaporozhye' },
|
||||||
|
{ label: 'Europe/Zurich', value: 'Europe/Zurich' },
|
||||||
|
{ label: 'Indian/Antananarivo', value: 'Indian/Antananarivo' },
|
||||||
|
{ label: 'Indian/Chagos', value: 'Indian/Chagos' },
|
||||||
|
{ label: 'Indian/Christmas', value: 'Indian/Christmas' },
|
||||||
|
{ label: 'Indian/Cocos', value: 'Indian/Cocos' },
|
||||||
|
{ label: 'Indian/Comoro', value: 'Indian/Comoro' },
|
||||||
|
{ label: 'Indian/Kerguelen', value: 'Indian/Kerguelen' },
|
||||||
|
{ label: 'Indian/Mahe', value: 'Indian/Mahe' },
|
||||||
|
{ label: 'Indian/Maldives', value: 'Indian/Maldives' },
|
||||||
|
{ label: 'Indian/Mauritius', value: 'Indian/Mauritius' },
|
||||||
|
{ label: 'Indian/Mayotte', value: 'Indian/Mayotte' },
|
||||||
|
{ label: 'Indian/Reunion', value: 'Indian/Reunion' },
|
||||||
|
{ label: 'Pacific/Apia', value: 'Pacific/Apia' },
|
||||||
|
{ label: 'Pacific/Auckland', value: 'Pacific/Auckland' },
|
||||||
|
{ label: 'Pacific/Bougainville', value: 'Pacific/Bougainville' },
|
||||||
|
{ label: 'Pacific/Chatham', value: 'Pacific/Chatham' },
|
||||||
|
{ label: 'Pacific/Easter', value: 'Pacific/Easter' },
|
||||||
|
{ label: 'Pacific/Efate', value: 'Pacific/Efate' },
|
||||||
|
{ label: 'Pacific/Enderbury', value: 'Pacific/Enderbury' },
|
||||||
|
{ label: 'Pacific/Fakaofo', value: 'Pacific/Fakaofo' },
|
||||||
|
{ label: 'Pacific/Fiji', value: 'Pacific/Fiji' },
|
||||||
|
{ label: 'Pacific/Funafuti', value: 'Pacific/Funafuti' },
|
||||||
|
{ label: 'Pacific/Galapagos', value: 'Pacific/Galapagos' },
|
||||||
|
{ label: 'Pacific/Gambier', value: 'Pacific/Gambier' },
|
||||||
|
{ label: 'Pacific/Guadalcanal', value: 'Pacific/Guadalcanal' },
|
||||||
|
{ label: 'Pacific/Guam', value: 'Pacific/Guam' },
|
||||||
|
{ label: 'Pacific/Honolulu', value: 'Pacific/Honolulu' },
|
||||||
|
{ label: 'Pacific/Johnston', value: 'Pacific/Johnston' },
|
||||||
|
{ label: 'Pacific/Kiritimati', value: 'Pacific/Kiritimati' },
|
||||||
|
{ label: 'Pacific/Kosrae', value: 'Pacific/Kosrae' },
|
||||||
|
{ label: 'Pacific/Kwajalein', value: 'Pacific/Kwajalein' },
|
||||||
|
{ label: 'Pacific/Majuro', value: 'Pacific/Majuro' },
|
||||||
|
{ label: 'Pacific/Marquesas', value: 'Pacific/Marquesas' },
|
||||||
|
{ label: 'Pacific/Midway', value: 'Pacific/Midway' },
|
||||||
|
{ label: 'Pacific/Nauru', value: 'Pacific/Nauru' },
|
||||||
|
{ label: 'Pacific/Niue', value: 'Pacific/Niue' },
|
||||||
|
{ label: 'Pacific/Norfolk', value: 'Pacific/Norfolk' },
|
||||||
|
{ label: 'Pacific/Noumea', value: 'Pacific/Noumea' },
|
||||||
|
{ label: 'Pacific/Pago_Pago', value: 'Pacific/Pago_Pago' },
|
||||||
|
{ label: 'Pacific/Palau', value: 'Pacific/Palau' },
|
||||||
|
{ label: 'Pacific/Pitcairn', value: 'Pacific/Pitcairn' },
|
||||||
|
{ label: 'Pacific/Ponape', value: 'Pacific/Ponape' },
|
||||||
|
{ label: 'Pacific/Port_Moresby', value: 'Pacific/Port_Moresby' },
|
||||||
|
{ label: 'Pacific/Rarotonga', value: 'Pacific/Rarotonga' },
|
||||||
|
{ label: 'Pacific/Saipan', value: 'Pacific/Saipan' },
|
||||||
|
{ label: 'Pacific/Tahiti', value: 'Pacific/Tahiti' },
|
||||||
|
{ label: 'Pacific/Tarawa', value: 'Pacific/Tarawa' },
|
||||||
|
{ label: 'Pacific/Tongatapu', value: 'Pacific/Tongatapu' },
|
||||||
|
{ label: 'Pacific/Truk', value: 'Pacific/Truk' },
|
||||||
|
{ label: 'Pacific/Wake', value: 'Pacific/Wake' },
|
||||||
|
{ label: 'Pacific/Wallis', value: 'Pacific/Wallis' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default timezoneOptions;
|
@@ -0,0 +1,43 @@
|
|||||||
|
import { IGlobalVariable, IJSONObject } from '@automatisch/types';
|
||||||
|
import capitalize from './text/capitalize';
|
||||||
|
import extractEmailAddress from './text/extract-email-address';
|
||||||
|
import extractNumber from './text/extract-number';
|
||||||
|
import htmlToMarkdown from './text/html-to-markdown';
|
||||||
|
import lowercase from './text/lowercase';
|
||||||
|
import markdownToHtml from './text/markdown-to-html';
|
||||||
|
import pluralize from './text/pluralize';
|
||||||
|
import replace from './text/replace';
|
||||||
|
import trimWhitespace from './text/trim-whitespace';
|
||||||
|
import useDefaultValue from './text/use-default-value';
|
||||||
|
import performMathOperation from './numbers/perform-math-operation';
|
||||||
|
import randomNumber from './numbers/random-number';
|
||||||
|
import formatNumber from './numbers/format-number';
|
||||||
|
import formatPhoneNumber from './numbers/format-phone-number';
|
||||||
|
import formatDateTime from './date-time/format-date-time';
|
||||||
|
|
||||||
|
const options: IJSONObject = {
|
||||||
|
capitalize,
|
||||||
|
extractEmailAddress,
|
||||||
|
extractNumber,
|
||||||
|
htmlToMarkdown,
|
||||||
|
lowercase,
|
||||||
|
markdownToHtml,
|
||||||
|
pluralize,
|
||||||
|
replace,
|
||||||
|
trimWhitespace,
|
||||||
|
useDefaultValue,
|
||||||
|
performMathOperation,
|
||||||
|
randomNumber,
|
||||||
|
formatNumber,
|
||||||
|
formatPhoneNumber,
|
||||||
|
formatDateTime,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'List fields after transform',
|
||||||
|
key: 'listTransformOptions',
|
||||||
|
|
||||||
|
async run($: IGlobalVariable) {
|
||||||
|
return options[$.step.parameters.transform as string];
|
||||||
|
},
|
||||||
|
};
|
@@ -0,0 +1,38 @@
|
|||||||
|
const formatNumber = [
|
||||||
|
{
|
||||||
|
label: 'Input',
|
||||||
|
key: 'input',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The number you want to format.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Input Decimal Mark',
|
||||||
|
key: 'inputDecimalMark',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The decimal mark of the input number.',
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: 'Comma', value: ',' },
|
||||||
|
{ label: 'Period', value: '.' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'To Format',
|
||||||
|
key: 'toFormat',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The format you want to convert the number to.',
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: 'Comma for grouping & period for decimal', value: '0' },
|
||||||
|
{ label: 'Period for grouping & comma for decimal', value: '1' },
|
||||||
|
{ label: 'Space for grouping & period for decimal', value: '2' },
|
||||||
|
{ label: 'Space for grouping & comma for decimal', value: '3' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default formatNumber;
|
@@ -0,0 +1,36 @@
|
|||||||
|
import phoneNumberCountryCodes from '../../../common/phone-number-country-codes';
|
||||||
|
|
||||||
|
const formatPhoneNumber = [
|
||||||
|
{
|
||||||
|
label: 'Phone Number',
|
||||||
|
key: 'phoneNumber',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The phone number you want to format.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'To Format',
|
||||||
|
key: 'toFormat',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The format you want to convert the number to.',
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: '+491632223344 (E164)', value: 'e164' },
|
||||||
|
{ label: '+49 163 2223344 (International)', value: 'international' },
|
||||||
|
{ label: '0163 2223344 (National)', value: 'national' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Phone Number Country Code',
|
||||||
|
key: 'phoneNumberCountryCode',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The country code of the phone number. The default is US.',
|
||||||
|
variables: true,
|
||||||
|
options: phoneNumberCountryCodes,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default formatPhoneNumber;
|
@@ -0,0 +1,36 @@
|
|||||||
|
const performMathOperation = [
|
||||||
|
{
|
||||||
|
label: 'Math Operation',
|
||||||
|
key: 'mathOperation',
|
||||||
|
type: 'dropdown' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The math operation to perform.',
|
||||||
|
variables: true,
|
||||||
|
options: [
|
||||||
|
{ label: 'Add', value: 'add' },
|
||||||
|
{ label: 'Divide', value: 'divide' },
|
||||||
|
{ label: 'Make Negative', value: 'makeNegative' },
|
||||||
|
{ label: 'Multiply', value: 'multiply' },
|
||||||
|
{ label: 'Subtract', value: 'subtract' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Values',
|
||||||
|
key: 'values',
|
||||||
|
type: 'dynamic' as const,
|
||||||
|
required: false,
|
||||||
|
description: 'Add or remove numbers as needed.',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
label: 'Input',
|
||||||
|
key: 'input',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The number to perform the math operation on.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default performMathOperation;
|
@@ -0,0 +1,29 @@
|
|||||||
|
const randomNumber = [
|
||||||
|
{
|
||||||
|
label: 'Lower range',
|
||||||
|
key: 'lowerRange',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The lowest number to generate.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Upper range',
|
||||||
|
key: 'upperRange',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'The highest number to generate.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Decimal points',
|
||||||
|
key: 'decimalPoints',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: false,
|
||||||
|
description:
|
||||||
|
'The number of digits after the decimal point. It can be an integer between 0 and 15.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default randomNumber;
|
@@ -0,0 +1,12 @@
|
|||||||
|
const capitalize = [
|
||||||
|
{
|
||||||
|
label: 'Input',
|
||||||
|
key: 'input',
|
||||||
|
type: 'string' as const,
|
||||||
|
required: true,
|
||||||
|
description: 'Text that will be capitalized.',
|
||||||
|
variables: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default capitalize;
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user