diff --git a/.gitignore b/.gitignore index 7022dc5..144d90b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,713 +14,10 @@ yarn-error.log* /.next /data - +/supabase/volumes/db/data/* #local env files .env*.local /maildev /owncast /coverage -supabase/volumes/db/data/postmaster.pid -supabase/volumes/db/data/pg_xact/0000 -supabase/volumes/db/data/pg_wal/000000010000000000000002 -supabase/volumes/db/data/pg_wal/000000010000000000000001 -supabase/volumes/db/data/pg_subtrans/0000 -supabase/volumes/db/data/pg_stat_tmp/pgss_query_texts.stat -supabase/volumes/db/data/pg_logical/snapshots/0-1DE05B0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4DA8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4CF8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4CC0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4BF0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4B40.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4B08.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DD4A38.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DAEA38.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DAA9F0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DAA940.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1DA41B8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D911B0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D86E40.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D821B0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D53E20.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D51FE0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D51F10.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D50F10.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D4F3A0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D4CDD8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D48180.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D48148.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D33CD8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D33248.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D311E0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1D2A8C0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CEF2B8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CEF218.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CEF168.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CEF130.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CECFF0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CEB9B8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CD3990.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CD2988.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CD28D8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CD2808.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CD0BA8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CCDBE0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CCB568.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CC8940.snap -supabase/volumes/db/data/global/pg_internal.init -supabase/volumes/db/data/global/pg_control -supabase/volumes/db/data/global/2964 -supabase/volumes/db/data/global/2695 -supabase/volumes/db/data/global/2694 -supabase/volumes/db/data/global/2677 -supabase/volumes/db/data/global/2676 -supabase/volumes/db/data/global/1261 -supabase/volumes/db/data/global/1260 -supabase/volumes/db/data/global/1233 -supabase/volumes/db/data/global/1232 -supabase/volumes/db/data/global/1214_vm -supabase/volumes/db/data/global/1214_fsm -supabase/volumes/db/data/global/1214 -supabase/volumes/db/data/base/5/pg_internal.init -supabase/volumes/db/data/base/5/826 -supabase/volumes/db/data/base/5/6116 -supabase/volumes/db/data/base/5/6113 -supabase/volumes/db/data/base/5/6112 -supabase/volumes/db/data/base/5/6111 -supabase/volumes/db/data/base/5/6110 -supabase/volumes/db/data/base/5/6106 -supabase/volumes/db/data/base/5/6104 -supabase/volumes/db/data/base/5/5002 -supabase/volumes/db/data/base/5/3596 -supabase/volumes/db/data/base/5/3534 -supabase/volumes/db/data/base/5/3503 -supabase/volumes/db/data/base/5/3502 -supabase/volumes/db/data/base/5/3501 -supabase/volumes/db/data/base/5/3455 -supabase/volumes/db/data/base/5/2841 -supabase/volumes/db/data/base/5/2840_vm -supabase/volumes/db/data/base/5/2840_fsm -supabase/volumes/db/data/base/5/2840 -supabase/volumes/db/data/base/5/2838 -supabase/volumes/db/data/base/5/2837 -supabase/volumes/db/data/base/5/2836_vm -supabase/volumes/db/data/base/5/2836_fsm -supabase/volumes/db/data/base/5/2836 -supabase/volumes/db/data/base/5/2704 -supabase/volumes/db/data/base/5/2703 -supabase/volumes/db/data/base/5/2702 -supabase/volumes/db/data/base/5/2701 -supabase/volumes/db/data/base/5/2699 -supabase/volumes/db/data/base/5/2696 -supabase/volumes/db/data/base/5/2693 -supabase/volumes/db/data/base/5/2691 -supabase/volumes/db/data/base/5/2690 -supabase/volumes/db/data/base/5/2685 -supabase/volumes/db/data/base/5/2684 -supabase/volumes/db/data/base/5/2679 -supabase/volumes/db/data/base/5/2678 -supabase/volumes/db/data/base/5/2675 -supabase/volumes/db/data/base/5/2674 -supabase/volumes/db/data/base/5/2673 -supabase/volumes/db/data/base/5/2667 -supabase/volumes/db/data/base/5/2666 -supabase/volumes/db/data/base/5/2665 -supabase/volumes/db/data/base/5/2664 -supabase/volumes/db/data/base/5/2663 -supabase/volumes/db/data/base/5/2662 -supabase/volumes/db/data/base/5/2659 -supabase/volumes/db/data/base/5/2658 -supabase/volumes/db/data/base/5/2657 -supabase/volumes/db/data/base/5/2656 -supabase/volumes/db/data/base/5/2620_vm -supabase/volumes/db/data/base/5/2620_fsm -supabase/volumes/db/data/base/5/2620 -supabase/volumes/db/data/base/5/2619_vm -supabase/volumes/db/data/base/5/2619_fsm -supabase/volumes/db/data/base/5/2619 -supabase/volumes/db/data/base/5/2618 -supabase/volumes/db/data/base/5/2615 -supabase/volumes/db/data/base/5/2610_fsm -supabase/volumes/db/data/base/5/2610 -supabase/volumes/db/data/base/5/2609 -supabase/volumes/db/data/base/5/2608_vm -supabase/volumes/db/data/base/5/2608_fsm -supabase/volumes/db/data/base/5/2608 -supabase/volumes/db/data/base/5/2606_fsm -supabase/volumes/db/data/base/5/2606 -supabase/volumes/db/data/base/5/2604_fsm -supabase/volumes/db/data/base/5/2604 -supabase/volumes/db/data/base/5/2600 -supabase/volumes/db/data/base/5/2579 -supabase/volumes/db/data/base/5/2224 -supabase/volumes/db/data/base/5/18190 -supabase/volumes/db/data/base/5/18176 -supabase/volumes/db/data/base/5/18165 -supabase/volumes/db/data/base/5/18143 -supabase/volumes/db/data/base/5/18133 -supabase/volumes/db/data/base/5/18132 -supabase/volumes/db/data/base/5/18131 -supabase/volumes/db/data/base/5/18130 -supabase/volumes/db/data/base/5/18129 -supabase/volumes/db/data/base/5/18128 -supabase/volumes/db/data/base/5/18127 -supabase/volumes/db/data/base/5/18098 -supabase/volumes/db/data/base/5/18096 -supabase/volumes/db/data/base/5/18094 -supabase/volumes/db/data/base/5/18093 -supabase/volumes/db/data/base/5/18092 -supabase/volumes/db/data/base/5/18087 -supabase/volumes/db/data/base/5/18086 -supabase/volumes/db/data/base/5/18067 -supabase/volumes/db/data/base/5/18064 -supabase/volumes/db/data/base/5/18047 -supabase/volumes/db/data/base/5/18035 -supabase/volumes/db/data/base/5/18034 -supabase/volumes/db/data/base/5/18033 -supabase/volumes/db/data/base/5/18027 -supabase/volumes/db/data/base/5/18020 -supabase/volumes/db/data/base/5/18019 -supabase/volumes/db/data/base/5/18018 -supabase/volumes/db/data/base/5/18013 -supabase/volumes/db/data/base/5/17953 -supabase/volumes/db/data/base/5/17951 -supabase/volumes/db/data/base/5/17944 -supabase/volumes/db/data/base/5/17939 -supabase/volumes/db/data/base/5/17938 -supabase/volumes/db/data/base/5/17936 -supabase/volumes/db/data/base/5/17930 -supabase/volumes/db/data/base/5/17928 -supabase/volumes/db/data/base/5/17925 -supabase/volumes/db/data/base/5/17923 -supabase/volumes/db/data/base/5/17922 -supabase/volumes/db/data/base/5/17893 -supabase/volumes/db/data/base/5/17890 -supabase/volumes/db/data/base/5/17889 -supabase/volumes/db/data/base/5/17888 -supabase/volumes/db/data/base/5/17887 -supabase/volumes/db/data/base/5/17882 -supabase/volumes/db/data/base/5/17880 -supabase/volumes/db/data/base/5/17847 -supabase/volumes/db/data/base/5/17846 -supabase/volumes/db/data/base/5/17845 -supabase/volumes/db/data/base/5/17844 -supabase/volumes/db/data/base/5/17843 -supabase/volumes/db/data/base/5/17840 -supabase/volumes/db/data/base/5/17838 -supabase/volumes/db/data/base/5/17836 -supabase/volumes/db/data/base/5/17835 -supabase/volumes/db/data/base/5/17823 -supabase/volumes/db/data/base/5/17819 -supabase/volumes/db/data/base/5/17675 -supabase/volumes/db/data/base/5/17674 -supabase/volumes/db/data/base/5/17659 -supabase/volumes/db/data/base/5/17658 -supabase/volumes/db/data/base/5/17657 -supabase/volumes/db/data/base/5/17654 -supabase/volumes/db/data/base/5/17650 -supabase/volumes/db/data/base/5/17649 -supabase/volumes/db/data/base/5/17648 -supabase/volumes/db/data/base/5/17647 -supabase/volumes/db/data/base/5/17646 -supabase/volumes/db/data/base/5/17641 -supabase/volumes/db/data/base/5/17638 -supabase/volumes/db/data/base/5/17626 -supabase/volumes/db/data/base/5/17623 -supabase/volumes/db/data/base/5/17621 -supabase/volumes/db/data/base/5/17616_fsm -supabase/volumes/db/data/base/5/17616 -supabase/volumes/db/data/base/5/17614 -supabase/volumes/db/data/base/5/17611 -supabase/volumes/db/data/base/5/17609 -supabase/volumes/db/data/base/5/17604 -supabase/volumes/db/data/base/5/17602 -supabase/volumes/db/data/base/5/17599 -supabase/volumes/db/data/base/5/17590 -supabase/volumes/db/data/base/5/17587 -supabase/volumes/db/data/base/5/17585 -supabase/volumes/db/data/base/5/17580_fsm -supabase/volumes/db/data/base/5/17580 -supabase/volumes/db/data/base/5/17578 -supabase/volumes/db/data/base/5/17575 -supabase/volumes/db/data/base/5/17566 -supabase/volumes/db/data/base/5/17563 -supabase/volumes/db/data/base/5/17554 -supabase/volumes/db/data/base/5/17551 -supabase/volumes/db/data/base/5/17549 -supabase/volumes/db/data/base/5/17544_fsm -supabase/volumes/db/data/base/5/17544 -supabase/volumes/db/data/base/5/17542 -supabase/volumes/db/data/base/5/17539 -supabase/volumes/db/data/base/5/17537 -supabase/volumes/db/data/base/5/17532_fsm -supabase/volumes/db/data/base/5/17532 -supabase/volumes/db/data/base/5/17530 -supabase/volumes/db/data/base/5/17527 -supabase/volumes/db/data/base/5/17508 -supabase/volumes/db/data/base/5/17499 -supabase/volumes/db/data/base/5/17498 -supabase/volumes/db/data/base/5/17482 -supabase/volumes/db/data/base/5/17476 -supabase/volumes/db/data/base/5/17475 -supabase/volumes/db/data/base/5/17465 -supabase/volumes/db/data/base/5/17464 -supabase/volumes/db/data/base/5/17437 -supabase/volumes/db/data/base/5/17435 -supabase/volumes/db/data/base/5/17434 -supabase/volumes/db/data/base/5/17427 -supabase/volumes/db/data/base/5/17421 -supabase/volumes/db/data/base/5/17420 -supabase/volumes/db/data/base/5/17401 -supabase/volumes/db/data/base/5/17376 -supabase/volumes/db/data/base/5/17373 -supabase/volumes/db/data/base/5/17372 -supabase/volumes/db/data/base/5/17360 -supabase/volumes/db/data/base/5/17356 -supabase/volumes/db/data/base/5/17355 -supabase/volumes/db/data/base/5/17350 -supabase/volumes/db/data/base/5/17336 -supabase/volumes/db/data/base/5/17325 -supabase/volumes/db/data/base/5/17319 -supabase/volumes/db/data/base/5/17318 -supabase/volumes/db/data/base/5/17302 -supabase/volumes/db/data/base/5/17277 -supabase/volumes/db/data/base/5/17272 -supabase/volumes/db/data/base/5/17270 -supabase/volumes/db/data/base/5/17252 -supabase/volumes/db/data/base/5/17245 -supabase/volumes/db/data/base/5/17241 -supabase/volumes/db/data/base/5/17240 -supabase/volumes/db/data/base/5/17226 -supabase/volumes/db/data/base/5/17225 -supabase/volumes/db/data/base/5/17222 -supabase/volumes/db/data/base/5/17220 -supabase/volumes/db/data/base/5/17216 -supabase/volumes/db/data/base/5/17215 -supabase/volumes/db/data/base/5/17212 -supabase/volumes/db/data/base/5/17211 -supabase/volumes/db/data/base/5/17210 -supabase/volumes/db/data/base/5/17209 -supabase/volumes/db/data/base/5/17208 -supabase/volumes/db/data/base/5/17203 -supabase/volumes/db/data/base/5/17192 -supabase/volumes/db/data/base/5/17163 -supabase/volumes/db/data/base/5/17156 -supabase/volumes/db/data/base/5/17137 -supabase/volumes/db/data/base/5/17122 -supabase/volumes/db/data/base/5/17110 -supabase/volumes/db/data/base/5/17109 -supabase/volumes/db/data/base/5/17108 -supabase/volumes/db/data/base/5/17095 -supabase/volumes/db/data/base/5/17094 -supabase/volumes/db/data/base/5/17093 -supabase/volumes/db/data/base/5/17092 -supabase/volumes/db/data/base/5/17085 -supabase/volumes/db/data/base/5/17081 -supabase/volumes/db/data/base/5/17080 -supabase/volumes/db/data/base/5/17078 -supabase/volumes/db/data/base/5/17072 -supabase/volumes/db/data/base/5/17071 -supabase/volumes/db/data/base/5/17069 -supabase/volumes/db/data/base/5/17066 -supabase/volumes/db/data/base/5/17058 -supabase/volumes/db/data/base/5/16557 -supabase/volumes/db/data/base/5/16555 -supabase/volumes/db/data/base/5/16551 -supabase/volumes/db/data/base/5/16546 -supabase/volumes/db/data/base/5/16545 -supabase/volumes/db/data/base/5/16533 -supabase/volumes/db/data/base/5/16532 -supabase/volumes/db/data/base/5/16531 -supabase/volumes/db/data/base/5/16524 -supabase/volumes/db/data/base/5/16523 -supabase/volumes/db/data/base/5/16516 -supabase/volumes/db/data/base/5/16515 -supabase/volumes/db/data/base/5/16514 -supabase/volumes/db/data/base/5/16509 -supabase/volumes/db/data/base/5/16499 -supabase/volumes/db/data/base/5/16496 -supabase/volumes/db/data/base/5/16495 -supabase/volumes/db/data/base/5/16493 -supabase/volumes/db/data/base/5/16488 -supabase/volumes/db/data/base/5/16480 -supabase/volumes/db/data/base/5/16468 -supabase/volumes/db/data/base/5/16467 -supabase/volumes/db/data/base/5/16465 -supabase/volumes/db/data/base/5/16463 -supabase/volumes/db/data/base/5/16462 -supabase/volumes/db/data/base/5/16461 -supabase/volumes/db/data/base/5/16458 -supabase/volumes/db/data/base/5/1259_vm -supabase/volumes/db/data/base/5/1259_fsm -supabase/volumes/db/data/base/5/1259 -supabase/volumes/db/data/base/5/1255_fsm -supabase/volumes/db/data/base/5/1255 -supabase/volumes/db/data/base/5/1249_vm -supabase/volumes/db/data/base/5/1249_fsm -supabase/volumes/db/data/base/5/1249 -supabase/volumes/db/data/base/5/1247_fsm -supabase/volumes/db/data/base/5/1247 -supabase/volumes/db/data/base/1/pg_internal.init -supabase/volumes/db/data/base/1/2841 -supabase/volumes/db/data/base/1/2840_vm -supabase/volumes/db/data/base/1/2840_fsm -supabase/volumes/db/data/base/1/2840 -supabase/volumes/db/data/base/1/2696 -supabase/volumes/db/data/base/1/2619_vm -supabase/volumes/db/data/base/1/2619_fsm -supabase/volumes/db/data/base/1/2619 -supabase/volumes/db/data/base/1/1259 -supabase/volumes/db/data/postmaster.pid -supabase/volumes/db/data/pg_xact/0000 -supabase/volumes/db/data/pg_wal/000000010000000000000003 -supabase/volumes/db/data/pg_wal/000000010000000000000001 -supabase/volumes/db/data/pg_subtrans/0000 -supabase/volumes/db/data/pg_stat_tmp/pgss_query_texts.stat -supabase/volumes/db/data/pg_replslot/cainophile_s38zcwp1/state -supabase/volumes/db/data/pg_replslot/cainophile_geatpn94/state -supabase/volumes/db/data/pg_logical/snapshots/0-219E100.snap -supabase/volumes/db/data/pg_logical/snapshots/0-219E030.snap -supabase/volumes/db/data/pg_logical/snapshots/0-219DF68.snap -supabase/volumes/db/data/pg_logical/snapshots/0-219DF30.snap -supabase/volumes/db/data/pg_logical/snapshots/0-219C118.snap -supabase/volumes/db/data/pg_logical/snapshots/0-219B090.snap -supabase/volumes/db/data/pg_logical/snapshots/0-218F998.snap -supabase/volumes/db/data/pg_logical/snapshots/0-218E538.snap -supabase/volumes/db/data/pg_logical/snapshots/0-2188658.snap -supabase/volumes/db/data/pg_logical/snapshots/0-2181458.snap -supabase/volumes/db/data/pg_logical/snapshots/0-2180B58.snap -supabase/volumes/db/data/pg_logical/snapshots/0-2177990.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CC28B0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CBC9C0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CB8D18.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1CA97A8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1C9FDD8.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1C44448.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1C247B0.snap -supabase/volumes/db/data/pg_logical/snapshots/0-1BB38E0.snap -supabase/volumes/db/data/global/pg_control -supabase/volumes/db/data/global/2964 -supabase/volumes/db/data/global/2695 -supabase/volumes/db/data/global/2694 -supabase/volumes/db/data/global/2677 -supabase/volumes/db/data/global/2676 -supabase/volumes/db/data/global/1261 -supabase/volumes/db/data/global/1260 -supabase/volumes/db/data/global/1233 -supabase/volumes/db/data/global/1232 -supabase/volumes/db/data/global/1214_vm -supabase/volumes/db/data/global/1214_fsm -supabase/volumes/db/data/global/1214 -supabase/volumes/db/data/base/5/6116 -supabase/volumes/db/data/base/5/6113 -supabase/volumes/db/data/base/5/6112 -supabase/volumes/db/data/base/5/6111 -supabase/volumes/db/data/base/5/6110 -supabase/volumes/db/data/base/5/6106 -supabase/volumes/db/data/base/5/6104 -supabase/volumes/db/data/base/5/5002 -supabase/volumes/db/data/base/5/3534 -supabase/volumes/db/data/base/5/3503 -supabase/volumes/db/data/base/5/3502 -supabase/volumes/db/data/base/5/3501 -supabase/volumes/db/data/base/5/3455 -supabase/volumes/db/data/base/5/2841 -supabase/volumes/db/data/base/5/2840_vm -supabase/volumes/db/data/base/5/2840_fsm -supabase/volumes/db/data/base/5/2840 -supabase/volumes/db/data/base/5/2838_fsm -supabase/volumes/db/data/base/5/2838 -supabase/volumes/db/data/base/5/2837 -supabase/volumes/db/data/base/5/2836_vm -supabase/volumes/db/data/base/5/2836_fsm -supabase/volumes/db/data/base/5/2836 -supabase/volumes/db/data/base/5/2704 -supabase/volumes/db/data/base/5/2703 -supabase/volumes/db/data/base/5/2702 -supabase/volumes/db/data/base/5/2701 -supabase/volumes/db/data/base/5/2699 -supabase/volumes/db/data/base/5/2696 -supabase/volumes/db/data/base/5/2693 -supabase/volumes/db/data/base/5/2691 -supabase/volumes/db/data/base/5/2690 -supabase/volumes/db/data/base/5/2685 -supabase/volumes/db/data/base/5/2684 -supabase/volumes/db/data/base/5/2679 -supabase/volumes/db/data/base/5/2678 -supabase/volumes/db/data/base/5/2675 -supabase/volumes/db/data/base/5/2674 -supabase/volumes/db/data/base/5/2673 -supabase/volumes/db/data/base/5/2667 -supabase/volumes/db/data/base/5/2666 -supabase/volumes/db/data/base/5/2665 -supabase/volumes/db/data/base/5/2664 -supabase/volumes/db/data/base/5/2663 -supabase/volumes/db/data/base/5/2662 -supabase/volumes/db/data/base/5/2659 -supabase/volumes/db/data/base/5/2658 -supabase/volumes/db/data/base/5/2657 -supabase/volumes/db/data/base/5/2656 -supabase/volumes/db/data/base/5/2620_vm -supabase/volumes/db/data/base/5/2620_fsm -supabase/volumes/db/data/base/5/2620 -supabase/volumes/db/data/base/5/2619_vm -supabase/volumes/db/data/base/5/2619_fsm -supabase/volumes/db/data/base/5/2619 -supabase/volumes/db/data/base/5/2618_fsm -supabase/volumes/db/data/base/5/2618 -supabase/volumes/db/data/base/5/2615 -supabase/volumes/db/data/base/5/2610_fsm -supabase/volumes/db/data/base/5/2610 -supabase/volumes/db/data/base/5/2609_fsm -supabase/volumes/db/data/base/5/2609 -supabase/volumes/db/data/base/5/2608_vm -supabase/volumes/db/data/base/5/2608_fsm -supabase/volumes/db/data/base/5/2608 -supabase/volumes/db/data/base/5/2606_fsm -supabase/volumes/db/data/base/5/2606 -supabase/volumes/db/data/base/5/2604_fsm -supabase/volumes/db/data/base/5/2604 -supabase/volumes/db/data/base/5/2600_fsm -supabase/volumes/db/data/base/5/2600 -supabase/volumes/db/data/base/5/2579 -supabase/volumes/db/data/base/5/2224 -supabase/volumes/db/data/base/5/18190 -supabase/volumes/db/data/base/5/18176 -supabase/volumes/db/data/base/5/18165 -supabase/volumes/db/data/base/5/18143 -supabase/volumes/db/data/base/5/18133 -supabase/volumes/db/data/base/5/18132 -supabase/volumes/db/data/base/5/18131 -supabase/volumes/db/data/base/5/18130 -supabase/volumes/db/data/base/5/18129 -supabase/volumes/db/data/base/5/18128 -supabase/volumes/db/data/base/5/18127 -supabase/volumes/db/data/base/5/18098 -supabase/volumes/db/data/base/5/18096 -supabase/volumes/db/data/base/5/18094 -supabase/volumes/db/data/base/5/18093 -supabase/volumes/db/data/base/5/18092 -supabase/volumes/db/data/base/5/18087 -supabase/volumes/db/data/base/5/18086 -supabase/volumes/db/data/base/5/18067 -supabase/volumes/db/data/base/5/18064 -supabase/volumes/db/data/base/5/18047 -supabase/volumes/db/data/base/5/18035 -supabase/volumes/db/data/base/5/18034 -supabase/volumes/db/data/base/5/18033 -supabase/volumes/db/data/base/5/18027 -supabase/volumes/db/data/base/5/18020 -supabase/volumes/db/data/base/5/18019 -supabase/volumes/db/data/base/5/18018 -supabase/volumes/db/data/base/5/18013 -supabase/volumes/db/data/base/5/17953 -supabase/volumes/db/data/base/5/17951 -supabase/volumes/db/data/base/5/17944 -supabase/volumes/db/data/base/5/17939 -supabase/volumes/db/data/base/5/17938 -supabase/volumes/db/data/base/5/17936 -supabase/volumes/db/data/base/5/17930 -supabase/volumes/db/data/base/5/17928 -supabase/volumes/db/data/base/5/17925 -supabase/volumes/db/data/base/5/17924 -supabase/volumes/db/data/base/5/17923 -supabase/volumes/db/data/base/5/17922 -supabase/volumes/db/data/base/5/17915 -supabase/volumes/db/data/base/5/17907 -supabase/volumes/db/data/base/5/17893 -supabase/volumes/db/data/base/5/17890 -supabase/volumes/db/data/base/5/17889 -supabase/volumes/db/data/base/5/17888 -supabase/volumes/db/data/base/5/17887 -supabase/volumes/db/data/base/5/17882 -supabase/volumes/db/data/base/5/17880 -supabase/volumes/db/data/base/5/17869 -supabase/volumes/db/data/base/5/17867 -supabase/volumes/db/data/base/5/17866 -supabase/volumes/db/data/base/5/17865 -supabase/volumes/db/data/base/5/17864 -supabase/volumes/db/data/base/5/17862 -supabase/volumes/db/data/base/5/17857 -supabase/volumes/db/data/base/5/17847 -supabase/volumes/db/data/base/5/17846 -supabase/volumes/db/data/base/5/17845 -supabase/volumes/db/data/base/5/17844 -supabase/volumes/db/data/base/5/17843 -supabase/volumes/db/data/base/5/17840 -supabase/volumes/db/data/base/5/17838 -supabase/volumes/db/data/base/5/17836 -supabase/volumes/db/data/base/5/17835 -supabase/volumes/db/data/base/5/17823 -supabase/volumes/db/data/base/5/17819 -supabase/volumes/db/data/base/5/17761 -supabase/volumes/db/data/base/5/17760 -supabase/volumes/db/data/base/5/17758 -supabase/volumes/db/data/base/5/17756 -supabase/volumes/db/data/base/5/17749 -supabase/volumes/db/data/base/5/17744 -supabase/volumes/db/data/base/5/17687 -supabase/volumes/db/data/base/5/17684 -supabase/volumes/db/data/base/5/17677 -supabase/volumes/db/data/base/5/17675 -supabase/volumes/db/data/base/5/17674 -supabase/volumes/db/data/base/5/17673 -supabase/volumes/db/data/base/5/17666 -supabase/volumes/db/data/base/5/17659 -supabase/volumes/db/data/base/5/17658 -supabase/volumes/db/data/base/5/17657 -supabase/volumes/db/data/base/5/17654 -supabase/volumes/db/data/base/5/17650 -supabase/volumes/db/data/base/5/17649 -supabase/volumes/db/data/base/5/17648 -supabase/volumes/db/data/base/5/17647 -supabase/volumes/db/data/base/5/17646 -supabase/volumes/db/data/base/5/17641 -supabase/volumes/db/data/base/5/17638 -supabase/volumes/db/data/base/5/17626 -supabase/volumes/db/data/base/5/17623 -supabase/volumes/db/data/base/5/17621 -supabase/volumes/db/data/base/5/17616_fsm -supabase/volumes/db/data/base/5/17616 -supabase/volumes/db/data/base/5/17614 -supabase/volumes/db/data/base/5/17611 -supabase/volumes/db/data/base/5/17609 -supabase/volumes/db/data/base/5/17604_fsm -supabase/volumes/db/data/base/5/17604 -supabase/volumes/db/data/base/5/17602 -supabase/volumes/db/data/base/5/17599 -supabase/volumes/db/data/base/5/17590 -supabase/volumes/db/data/base/5/17587 -supabase/volumes/db/data/base/5/17585 -supabase/volumes/db/data/base/5/17580_fsm -supabase/volumes/db/data/base/5/17580 -supabase/volumes/db/data/base/5/17578 -supabase/volumes/db/data/base/5/17575 -supabase/volumes/db/data/base/5/17566 -supabase/volumes/db/data/base/5/17563 -supabase/volumes/db/data/base/5/17554 -supabase/volumes/db/data/base/5/17551 -supabase/volumes/db/data/base/5/17549 -supabase/volumes/db/data/base/5/17544_fsm -supabase/volumes/db/data/base/5/17544 -supabase/volumes/db/data/base/5/17542 -supabase/volumes/db/data/base/5/17539 -supabase/volumes/db/data/base/5/17537 -supabase/volumes/db/data/base/5/17532_fsm -supabase/volumes/db/data/base/5/17532 -supabase/volumes/db/data/base/5/17530 -supabase/volumes/db/data/base/5/17527 -supabase/volumes/db/data/base/5/17508 -supabase/volumes/db/data/base/5/17499 -supabase/volumes/db/data/base/5/17482 -supabase/volumes/db/data/base/5/17476 -supabase/volumes/db/data/base/5/17475 -supabase/volumes/db/data/base/5/17465 -supabase/volumes/db/data/base/5/17464 -supabase/volumes/db/data/base/5/17437 -supabase/volumes/db/data/base/5/17435 -supabase/volumes/db/data/base/5/17434 -supabase/volumes/db/data/base/5/17427 -supabase/volumes/db/data/base/5/17421 -supabase/volumes/db/data/base/5/17420 -supabase/volumes/db/data/base/5/17401 -supabase/volumes/db/data/base/5/17376 -supabase/volumes/db/data/base/5/17373 -supabase/volumes/db/data/base/5/17372 -supabase/volumes/db/data/base/5/17360 -supabase/volumes/db/data/base/5/17356 -supabase/volumes/db/data/base/5/17355 -supabase/volumes/db/data/base/5/17350 -supabase/volumes/db/data/base/5/17336 -supabase/volumes/db/data/base/5/17325 -supabase/volumes/db/data/base/5/17319 -supabase/volumes/db/data/base/5/17318 -supabase/volumes/db/data/base/5/17302 -supabase/volumes/db/data/base/5/17277 -supabase/volumes/db/data/base/5/17272 -supabase/volumes/db/data/base/5/17252 -supabase/volumes/db/data/base/5/17240 -supabase/volumes/db/data/base/5/17226 -supabase/volumes/db/data/base/5/17225 -supabase/volumes/db/data/base/5/17222 -supabase/volumes/db/data/base/5/17220 -supabase/volumes/db/data/base/5/17216 -supabase/volumes/db/data/base/5/17215 -supabase/volumes/db/data/base/5/17212 -supabase/volumes/db/data/base/5/17211 -supabase/volumes/db/data/base/5/17210 -supabase/volumes/db/data/base/5/17209 -supabase/volumes/db/data/base/5/17208 -supabase/volumes/db/data/base/5/17203 -supabase/volumes/db/data/base/5/17192 -supabase/volumes/db/data/base/5/17163 -supabase/volumes/db/data/base/5/17156 -supabase/volumes/db/data/base/5/17137 -supabase/volumes/db/data/base/5/17122 -supabase/volumes/db/data/base/5/17110 -supabase/volumes/db/data/base/5/17109 -supabase/volumes/db/data/base/5/17108 -supabase/volumes/db/data/base/5/17095 -supabase/volumes/db/data/base/5/17094 -supabase/volumes/db/data/base/5/17093 -supabase/volumes/db/data/base/5/17092 -supabase/volumes/db/data/base/5/17085 -supabase/volumes/db/data/base/5/17081 -supabase/volumes/db/data/base/5/17080 -supabase/volumes/db/data/base/5/17078 -supabase/volumes/db/data/base/5/17072 -supabase/volumes/db/data/base/5/17071 -supabase/volumes/db/data/base/5/17069 -supabase/volumes/db/data/base/5/17066 -supabase/volumes/db/data/base/5/17058 -supabase/volumes/db/data/base/5/16570 -supabase/volumes/db/data/base/5/16557 -supabase/volumes/db/data/base/5/16555 -supabase/volumes/db/data/base/5/16551 -supabase/volumes/db/data/base/5/16546 -supabase/volumes/db/data/base/5/16545 -supabase/volumes/db/data/base/5/16533 -supabase/volumes/db/data/base/5/16532 -supabase/volumes/db/data/base/5/16531 -supabase/volumes/db/data/base/5/16524 -supabase/volumes/db/data/base/5/16523 -supabase/volumes/db/data/base/5/16516 -supabase/volumes/db/data/base/5/16515 -supabase/volumes/db/data/base/5/16514 -supabase/volumes/db/data/base/5/16509 -supabase/volumes/db/data/base/5/16499 -supabase/volumes/db/data/base/5/16496 -supabase/volumes/db/data/base/5/16495 -supabase/volumes/db/data/base/5/16493 -supabase/volumes/db/data/base/5/16488 -supabase/volumes/db/data/base/5/16480 -supabase/volumes/db/data/base/5/16479 -supabase/volumes/db/data/base/5/16478 -supabase/volumes/db/data/base/5/16476 -supabase/volumes/db/data/base/5/16470 -supabase/volumes/db/data/base/5/16469 -supabase/volumes/db/data/base/5/16468 -supabase/volumes/db/data/base/5/16467 -supabase/volumes/db/data/base/5/16465 -supabase/volumes/db/data/base/5/16463 -supabase/volumes/db/data/base/5/16462 -supabase/volumes/db/data/base/5/16461 -supabase/volumes/db/data/base/5/16458 -supabase/volumes/db/data/base/5/1259_vm -supabase/volumes/db/data/base/5/1259_fsm -supabase/volumes/db/data/base/5/1259 -supabase/volumes/db/data/base/5/1255_fsm -supabase/volumes/db/data/base/5/1255 -supabase/volumes/db/data/base/5/1249_vm -supabase/volumes/db/data/base/5/1249_fsm -supabase/volumes/db/data/base/5/1249 -supabase/volumes/db/data/base/5/1247_fsm -supabase/volumes/db/data/base/5/1247 -supabase/volumes/db/data/base/1/2841 -supabase/volumes/db/data/base/1/2840_vm -supabase/volumes/db/data/base/1/2840_fsm -supabase/volumes/db/data/base/1/2840 -supabase/volumes/db/data/base/1/2696 -supabase/volumes/db/data/base/1/2619_vm -supabase/volumes/db/data/base/1/2619_fsm -supabase/volumes/db/data/base/1/2619 -supabase/volumes/db/data/base/1/1259 +/supabase/volumes/db/data diff --git a/volumes/api/kong.yml b/volumes/api/kong.yml deleted file mode 100644 index 7abf425..0000000 --- a/volumes/api/kong.yml +++ /dev/null @@ -1,241 +0,0 @@ -_format_version: '2.1' -_transform: true - -### -### Consumers / Users -### -consumers: - - username: DASHBOARD - - username: anon - keyauth_credentials: - - key: $SUPABASE_ANON_KEY - - username: service_role - keyauth_credentials: - - key: $SUPABASE_SERVICE_KEY - -### -### Access Control List -### -acls: - - consumer: anon - group: anon - - consumer: service_role - group: admin - -### -### Dashboard credentials -### -basicauth_credentials: - - consumer: DASHBOARD - username: $DASHBOARD_USERNAME - password: $DASHBOARD_PASSWORD - -### -### API Routes -### -services: - ## Open Auth routes - - name: auth-v1-open - url: http://auth:9999/verify - routes: - - name: auth-v1-open - strip_path: true - paths: - - /auth/v1/verify - plugins: - - name: cors - - name: auth-v1-open-callback - url: http://auth:9999/callback - routes: - - name: auth-v1-open-callback - strip_path: true - paths: - - /auth/v1/callback - plugins: - - name: cors - - name: auth-v1-open-authorize - url: http://auth:9999/authorize - routes: - - name: auth-v1-open-authorize - strip_path: true - paths: - - /auth/v1/authorize - plugins: - - name: cors - - ## Secure Auth routes - - name: auth-v1 - _comment: 'GoTrue: /auth/v1/* -> http://auth:9999/*' - url: http://auth:9999/ - routes: - - name: auth-v1-all - strip_path: true - paths: - - /auth/v1/ - plugins: - - name: cors - - name: key-auth - config: - hide_credentials: false - - name: acl - config: - hide_groups_header: true - allow: - - admin - - anon - - ## Secure REST routes - - name: rest-v1 - _comment: 'PostgREST: /rest/v1/* -> http://rest:3000/*' - url: http://rest:3000/ - routes: - - name: rest-v1-all - strip_path: true - paths: - - /rest/v1/ - plugins: - - name: cors - - name: key-auth - config: - hide_credentials: true - - name: acl - config: - hide_groups_header: true - allow: - - admin - - anon - - ## Secure GraphQL routes - - name: graphql-v1 - _comment: 'PostgREST: /graphql/v1/* -> http://rest:3000/rpc/graphql' - url: http://rest:3000/rpc/graphql - routes: - - name: graphql-v1-all - strip_path: true - paths: - - /graphql/v1 - plugins: - - name: cors - - name: key-auth - config: - hide_credentials: true - - name: request-transformer - config: - add: - headers: - - Content-Profile:graphql_public - - name: acl - config: - hide_groups_header: true - allow: - - admin - - anon - - ## Secure Realtime routes - - name: realtime-v1-ws - _comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*' - url: http://realtime-dev.supabase-realtime:4000/socket - protocol: ws - routes: - - name: realtime-v1-ws - strip_path: true - paths: - - /realtime/v1/ - plugins: - - name: cors - - name: key-auth - config: - hide_credentials: false - - name: acl - config: - hide_groups_header: true - allow: - - admin - - anon - - name: realtime-v1-rest - _comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*' - url: http://realtime-dev.supabase-realtime:4000/api - protocol: http - routes: - - name: realtime-v1-rest - strip_path: true - paths: - - /realtime/v1/api - plugins: - - name: cors - - name: key-auth - config: - hide_credentials: false - - name: acl - config: - hide_groups_header: true - allow: - - admin - - anon - ## Storage routes: the storage server manages its own auth - - name: storage-v1 - _comment: 'Storage: /storage/v1/* -> http://storage:5000/*' - url: http://storage:5000/ - routes: - - name: storage-v1-all - strip_path: true - paths: - - /storage/v1/ - plugins: - - name: cors - - ## Edge Functions routes - - name: functions-v1 - _comment: 'Edge Functions: /functions/v1/* -> http://functions:9000/*' - url: http://functions:9000/ - routes: - - name: functions-v1-all - strip_path: true - paths: - - /functions/v1/ - plugins: - - name: cors - - ## Analytics routes - - name: analytics-v1 - _comment: 'Analytics: /analytics/v1/* -> http://logflare:4000/*' - url: http://analytics:4000/ - routes: - - name: analytics-v1-all - strip_path: true - paths: - - /analytics/v1/ - - ## Secure Database routes - - name: meta - _comment: 'pg-meta: /pg/* -> http://pg-meta:8080/*' - url: http://meta:8080/ - routes: - - name: meta-all - strip_path: true - paths: - - /pg/ - plugins: - - name: key-auth - config: - hide_credentials: false - - name: acl - config: - hide_groups_header: true - allow: - - admin - - ## Protected Dashboard - catch all remaining routes - - name: dashboard - _comment: 'Studio: /* -> http://studio:3000/*' - url: http://studio:3000/ - routes: - - name: dashboard-all - strip_path: true - paths: - - / - plugins: - - name: cors - - name: basic-auth - config: - hide_credentials: true diff --git a/volumes/db/init/data.sql b/volumes/db/init/data.sql deleted file mode 100755 index e69de29..0000000 diff --git a/volumes/db/jwt.sql b/volumes/db/jwt.sql deleted file mode 100644 index cfd3b16..0000000 --- a/volumes/db/jwt.sql +++ /dev/null @@ -1,5 +0,0 @@ -\set jwt_secret `echo "$JWT_SECRET"` -\set jwt_exp `echo "$JWT_EXP"` - -ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret'; -ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp'; diff --git a/volumes/db/logs.sql b/volumes/db/logs.sql deleted file mode 100644 index 22fc247..0000000 --- a/volumes/db/logs.sql +++ /dev/null @@ -1,4 +0,0 @@ -\set pguser `echo "$POSTGRES_USER"` - -create schema if not exists _analytics; -alter schema _analytics owner to :pguser; diff --git a/volumes/db/realtime.sql b/volumes/db/realtime.sql deleted file mode 100644 index 4d4b9ff..0000000 --- a/volumes/db/realtime.sql +++ /dev/null @@ -1,4 +0,0 @@ -\set pguser `echo "$POSTGRES_USER"` - -create schema if not exists _realtime; -alter schema _realtime owner to :pguser; diff --git a/volumes/db/roles.sql b/volumes/db/roles.sql deleted file mode 100644 index 8f7161a..0000000 --- a/volumes/db/roles.sql +++ /dev/null @@ -1,8 +0,0 @@ --- NOTE: change to your own passwords for production environments -\set pgpass `echo "$POSTGRES_PASSWORD"` - -ALTER USER authenticator WITH PASSWORD :'pgpass'; -ALTER USER pgbouncer WITH PASSWORD :'pgpass'; -ALTER USER supabase_auth_admin WITH PASSWORD :'pgpass'; -ALTER USER supabase_functions_admin WITH PASSWORD :'pgpass'; -ALTER USER supabase_storage_admin WITH PASSWORD :'pgpass'; diff --git a/volumes/db/webhooks.sql b/volumes/db/webhooks.sql deleted file mode 100644 index 5837b86..0000000 --- a/volumes/db/webhooks.sql +++ /dev/null @@ -1,208 +0,0 @@ -BEGIN; - -- Create pg_net extension - CREATE EXTENSION IF NOT EXISTS pg_net SCHEMA extensions; - -- Create supabase_functions schema - CREATE SCHEMA supabase_functions AUTHORIZATION supabase_admin; - GRANT USAGE ON SCHEMA supabase_functions TO postgres, anon, authenticated, service_role; - ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres, anon, authenticated, service_role; - ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres, anon, authenticated, service_role; - ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres, anon, authenticated, service_role; - -- supabase_functions.migrations definition - CREATE TABLE supabase_functions.migrations ( - version text PRIMARY KEY, - inserted_at timestamptz NOT NULL DEFAULT NOW() - ); - -- Initial supabase_functions migration - INSERT INTO supabase_functions.migrations (version) VALUES ('initial'); - -- supabase_functions.hooks definition - CREATE TABLE supabase_functions.hooks ( - id bigserial PRIMARY KEY, - hook_table_id integer NOT NULL, - hook_name text NOT NULL, - created_at timestamptz NOT NULL DEFAULT NOW(), - request_id bigint - ); - CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id); - CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name); - COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.'; - CREATE FUNCTION supabase_functions.http_request() - RETURNS trigger - LANGUAGE plpgsql - AS $function$ - DECLARE - request_id bigint; - payload jsonb; - url text := TG_ARGV[0]::text; - method text := TG_ARGV[1]::text; - headers jsonb DEFAULT '{}'::jsonb; - params jsonb DEFAULT '{}'::jsonb; - timeout_ms integer DEFAULT 1000; - BEGIN - IF url IS NULL OR url = 'null' THEN - RAISE EXCEPTION 'url argument is missing'; - END IF; - - IF method IS NULL OR method = 'null' THEN - RAISE EXCEPTION 'method argument is missing'; - END IF; - - IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN - headers = '{"Content-Type": "application/json"}'::jsonb; - ELSE - headers = TG_ARGV[2]::jsonb; - END IF; - - IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN - params = '{}'::jsonb; - ELSE - params = TG_ARGV[3]::jsonb; - END IF; - - IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN - timeout_ms = 1000; - ELSE - timeout_ms = TG_ARGV[4]::integer; - END IF; - - CASE - WHEN method = 'GET' THEN - SELECT http_get INTO request_id FROM net.http_get( - url, - params, - headers, - timeout_ms - ); - WHEN method = 'POST' THEN - payload = jsonb_build_object( - 'old_record', OLD, - 'record', NEW, - 'type', TG_OP, - 'table', TG_TABLE_NAME, - 'schema', TG_TABLE_SCHEMA - ); - - SELECT http_post INTO request_id FROM net.http_post( - url, - payload, - params, - headers, - timeout_ms - ); - ELSE - RAISE EXCEPTION 'method argument % is invalid', method; - END CASE; - - INSERT INTO supabase_functions.hooks - (hook_table_id, hook_name, request_id) - VALUES - (TG_RELID, TG_NAME, request_id); - - RETURN NEW; - END - $function$; - -- Supabase super admin - DO - $$ - BEGIN - IF NOT EXISTS ( - SELECT 1 - FROM pg_roles - WHERE rolname = 'supabase_functions_admin' - ) - THEN - CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION; - END IF; - END - $$; - GRANT ALL PRIVILEGES ON SCHEMA supabase_functions TO supabase_functions_admin; - GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA supabase_functions TO supabase_functions_admin; - GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA supabase_functions TO supabase_functions_admin; - ALTER USER supabase_functions_admin SET search_path = "supabase_functions"; - ALTER table "supabase_functions".migrations OWNER TO supabase_functions_admin; - ALTER table "supabase_functions".hooks OWNER TO supabase_functions_admin; - ALTER function "supabase_functions".http_request() OWNER TO supabase_functions_admin; - GRANT supabase_functions_admin TO postgres; - -- Remove unused supabase_pg_net_admin role - DO - $$ - BEGIN - IF EXISTS ( - SELECT 1 - FROM pg_roles - WHERE rolname = 'supabase_pg_net_admin' - ) - THEN - REASSIGN OWNED BY supabase_pg_net_admin TO supabase_admin; - DROP OWNED BY supabase_pg_net_admin; - DROP ROLE supabase_pg_net_admin; - END IF; - END - $$; - -- pg_net grants when extension is already enabled - DO - $$ - BEGIN - IF EXISTS ( - SELECT 1 - FROM pg_extension - WHERE extname = 'pg_net' - ) - THEN - GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role; - ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; - ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; - ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; - ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; - REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; - REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; - GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; - GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; - END IF; - END - $$; - -- Event trigger for pg_net - CREATE OR REPLACE FUNCTION extensions.grant_pg_net_access() - RETURNS event_trigger - LANGUAGE plpgsql - AS $$ - BEGIN - IF EXISTS ( - SELECT 1 - FROM pg_event_trigger_ddl_commands() AS ev - JOIN pg_extension AS ext - ON ev.objid = ext.oid - WHERE ext.extname = 'pg_net' - ) - THEN - GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role; - ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; - ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; - ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; - ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; - REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; - REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; - GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; - GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; - END IF; - END; - $$; - COMMENT ON FUNCTION extensions.grant_pg_net_access IS 'Grants access to pg_net'; - DO - $$ - BEGIN - IF NOT EXISTS ( - SELECT 1 - FROM pg_event_trigger - WHERE evtname = 'issue_pg_net_access' - ) THEN - CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end WHEN TAG IN ('CREATE EXTENSION') - EXECUTE PROCEDURE extensions.grant_pg_net_access(); - END IF; - END - $$; - INSERT INTO supabase_functions.migrations (version) VALUES ('20210809183423_update_grants'); - ALTER function supabase_functions.http_request() SECURITY DEFINER; - ALTER function supabase_functions.http_request() SET search_path = supabase_functions; - REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC; - GRANT EXECUTE ON FUNCTION supabase_functions.http_request() TO postgres, anon, authenticated, service_role; -COMMIT; diff --git a/volumes/functions/hello/index.ts b/volumes/functions/hello/index.ts deleted file mode 100644 index f1e20b9..0000000 --- a/volumes/functions/hello/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Follow this setup guide to integrate the Deno language server with your editor: -// https://deno.land/manual/getting_started/setup_your_environment -// This enables autocomplete, go to definition, etc. - -import { serve } from "https://deno.land/std@0.177.1/http/server.ts" - -serve(async () => { - return new Response( - `"Hello from Edge Functions!"`, - { headers: { "Content-Type": "application/json" } }, - ) -}) - -// To invoke: -// curl 'http://localhost:/functions/v1/hello' \ -// --header 'Authorization: Bearer ' diff --git a/volumes/functions/main/index.ts b/volumes/functions/main/index.ts deleted file mode 100644 index a094010..0000000 --- a/volumes/functions/main/index.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import * as jose from 'https://deno.land/x/jose@v4.14.4/index.ts' - -console.log('main function started') - -const JWT_SECRET = Deno.env.get('JWT_SECRET') -const VERIFY_JWT = Deno.env.get('VERIFY_JWT') === 'true' - -function getAuthToken(req: Request) { - const authHeader = req.headers.get('authorization') - if (!authHeader) { - throw new Error('Missing authorization header') - } - const [bearer, token] = authHeader.split(' ') - if (bearer !== 'Bearer') { - throw new Error(`Auth header is not 'Bearer {token}'`) - } - return token -} - -async function verifyJWT(jwt: string): Promise { - const encoder = new TextEncoder() - const secretKey = encoder.encode(JWT_SECRET) - try { - await jose.jwtVerify(jwt, secretKey) - } catch (err) { - console.error(err) - return false - } - return true -} - -serve(async (req: Request) => { - if (req.method !== 'OPTIONS' && VERIFY_JWT) { - try { - const token = getAuthToken(req) - const isValidJWT = await verifyJWT(token) - - if (!isValidJWT) { - return new Response(JSON.stringify({ msg: 'Invalid JWT' }), { - status: 401, - headers: { 'Content-Type': 'application/json' }, - }) - } - } catch (e) { - console.error(e) - return new Response(JSON.stringify({ msg: e.toString() }), { - status: 401, - headers: { 'Content-Type': 'application/json' }, - }) - } - } - - const url = new URL(req.url) - const { pathname } = url - const path_parts = pathname.split('/') - const service_name = path_parts[1] - - if (!service_name || service_name === '') { - const error = { msg: 'missing function name in request' } - return new Response(JSON.stringify(error), { - status: 400, - headers: { 'Content-Type': 'application/json' }, - }) - } - - const servicePath = `/home/deno/functions/${service_name}` - console.error(`serving the request with ${servicePath}`) - - const memoryLimitMb = 150 - const workerTimeoutMs = 1 * 60 * 1000 - const noModuleCache = false - const importMapPath = null - const envVarsObj = Deno.env.toObject() - const envVars = Object.keys(envVarsObj).map((k) => [k, envVarsObj[k]]) - - try { - const worker = await EdgeRuntime.userWorkers.create({ - servicePath, - memoryLimitMb, - workerTimeoutMs, - noModuleCache, - importMapPath, - envVars, - }) - return await worker.fetch(req) - } catch (e) { - const error = { msg: e.toString() } - return new Response(JSON.stringify(error), { - status: 500, - headers: { 'Content-Type': 'application/json' }, - }) - } -})