FauziIsyrinApridal commited on
Commit
d81bdc0
·
1 Parent(s): 65eda56

update download all to zip

Browse files
app/api/download-all/route.ts ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextApiRequest, NextApiResponse } from "next";
2
+ import JSZip from "jszip";
3
+ import { createClient } from "@supabase/supabase-js";
4
+
5
+ const supabase = createClient(
6
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
7
+ process.env.NEXT_PUBLIC_SUPABASE_SERVICE_KEY!,
8
+ );
9
+
10
+ export default async function handler(
11
+ req: NextApiRequest,
12
+ res: NextApiResponse,
13
+ ) {
14
+ try {
15
+ const { data: list, error: listError } = await supabase.storage
16
+ .from("pnp-bot-storage")
17
+ .list("", { limit: 100 }); // ganti folder jika perlu
18
+
19
+ if (listError || !list) {
20
+ return res
21
+ .status(500)
22
+ .json({ error: listError?.message || "Gagal mengambil daftar file." });
23
+ }
24
+
25
+ const zip = new JSZip();
26
+
27
+ for (const file of list) {
28
+ const { data, error } = await supabase.storage
29
+ .from("pnp-bot-storage")
30
+ .download(file.name);
31
+
32
+ if (!error && data) {
33
+ const buffer = await data.arrayBuffer();
34
+ zip.file(file.name, buffer);
35
+ }
36
+ }
37
+
38
+ const zipBuffer = await zip.generateAsync({ type: "nodebuffer" });
39
+
40
+ res.setHeader("Content-Disposition", "attachment; filename=all-files.zip");
41
+ res.setHeader("Content-Type", "application/zip");
42
+ res.send(zipBuffer);
43
+ } catch (err) {
44
+ console.error("Zip Error:", err);
45
+ res.status(500).json({ error: "Terjadi kesalahan saat membuat ZIP." });
46
+ }
47
+ }
components/FileTable.tsx CHANGED
@@ -43,10 +43,27 @@ export default function FileTable({ fetchData, ragData }: FileTableProps) {
43
  }, [ragData]);
44
 
45
  const downloadAllFiles = async () => {
46
- if (!sortedData.length) return;
 
 
 
 
47
 
48
- for (const item of sortedData) {
49
- await downloadItem(item.name);
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  }
51
  };
52
 
 
43
  }, [ragData]);
44
 
45
  const downloadAllFiles = async () => {
46
+ try {
47
+ const res = await fetch("/api/download-all");
48
+ if (!res.ok) {
49
+ throw new Error("Gagal mengunduh file ZIP");
50
+ }
51
 
52
+ const blob = await res.blob();
53
+ const url = URL.createObjectURL(blob);
54
+ const link = document.createElement("a");
55
+ link.href = url;
56
+ link.download = "all-files.zip";
57
+ document.body.appendChild(link);
58
+ link.click();
59
+ document.body.removeChild(link);
60
+ URL.revokeObjectURL(url);
61
+ } catch (error) {
62
+ toast({
63
+ title: "Gagal",
64
+ description: "Tidak dapat mengunduh semua file.",
65
+ variant: "destructive",
66
+ });
67
  }
68
  };
69
 
package-lock.json CHANGED
@@ -17,9 +17,11 @@
17
  "@radix-ui/react-slot": "^1.0.2",
18
  "@radix-ui/react-toast": "^1.2.7",
19
  "@supabase/ssr": "^0.3.0",
 
20
  "class-variance-authority": "^0.7.0",
21
  "clsx": "^2.1.1",
22
  "jose": "^5.4.0",
 
23
  "lucide-react": "^0.383.0",
24
  "next": "14.2.3",
25
  "react": "^18",
@@ -2675,19 +2677,19 @@
2675
  "dev": true
2676
  },
2677
  "node_modules/@supabase/auth-js": {
2678
- "version": "2.64.2",
2679
- "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.2.tgz",
2680
- "integrity": "sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==",
2681
- "peer": true,
2682
  "dependencies": {
2683
  "@supabase/node-fetch": "^2.6.14"
2684
  }
2685
  },
2686
  "node_modules/@supabase/functions-js": {
2687
- "version": "2.3.1",
2688
- "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.3.1.tgz",
2689
- "integrity": "sha512-QyzNle/rVzlOi4BbVqxLSH828VdGY1RElqGFAj+XeVypj6+PVtMlD21G8SDnsPQDtlqqTtoGRgdMlQZih5hTuw==",
2690
- "peer": true,
2691
  "dependencies": {
2692
  "@supabase/node-fetch": "^2.6.14"
2693
  }
@@ -2696,7 +2698,7 @@
2696
  "version": "2.6.15",
2697
  "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz",
2698
  "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==",
2699
- "peer": true,
2700
  "dependencies": {
2701
  "whatwg-url": "^5.0.0"
2702
  },
@@ -2705,24 +2707,25 @@
2705
  }
2706
  },
2707
  "node_modules/@supabase/postgrest-js": {
2708
- "version": "1.15.2",
2709
- "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.15.2.tgz",
2710
- "integrity": "sha512-9/7pUmXExvGuEK1yZhVYXPZnLEkDTwxgMQHXLrN5BwPZZm4iUCL1YEyep/Z2lIZah8d8M433mVAUEGsihUj5KQ==",
2711
- "peer": true,
2712
  "dependencies": {
2713
  "@supabase/node-fetch": "^2.6.14"
2714
  }
2715
  },
2716
  "node_modules/@supabase/realtime-js": {
2717
- "version": "2.9.5",
2718
- "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.5.tgz",
2719
- "integrity": "sha512-TEHlGwNGGmKPdeMtca1lFTYCedrhTAv3nZVoSjrKQ+wkMmaERuCe57zkC5KSWFzLYkb5FVHW8Hrr+PX1DDwplQ==",
2720
- "peer": true,
2721
  "dependencies": {
2722
- "@supabase/node-fetch": "^2.6.14",
2723
- "@types/phoenix": "^1.5.4",
2724
- "@types/ws": "^8.5.10",
2725
- "ws": "^8.14.2"
 
2726
  }
2727
  },
2728
  "node_modules/@supabase/ssr": {
@@ -2738,26 +2741,26 @@
2738
  }
2739
  },
2740
  "node_modules/@supabase/storage-js": {
2741
- "version": "2.5.5",
2742
- "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz",
2743
- "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==",
2744
- "peer": true,
2745
  "dependencies": {
2746
  "@supabase/node-fetch": "^2.6.14"
2747
  }
2748
  },
2749
  "node_modules/@supabase/supabase-js": {
2750
- "version": "2.43.4",
2751
- "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.43.4.tgz",
2752
- "integrity": "sha512-/pLPaxiIsn5Vaz3s32HC6O/VNwfeddnzS0bZRpOW0AKcPuXroD8pT9G8mpiBlZfpKsMmq6k7tlhW7Sr1PAQ1lw==",
2753
- "peer": true,
2754
  "dependencies": {
2755
- "@supabase/auth-js": "2.64.2",
2756
- "@supabase/functions-js": "2.3.1",
2757
  "@supabase/node-fetch": "2.6.15",
2758
- "@supabase/postgrest-js": "1.15.2",
2759
- "@supabase/realtime-js": "2.9.5",
2760
- "@supabase/storage-js": "2.5.5"
2761
  }
2762
  },
2763
  "node_modules/@swc/counter": {
@@ -2789,10 +2792,10 @@
2789
  }
2790
  },
2791
  "node_modules/@types/phoenix": {
2792
- "version": "1.6.4",
2793
- "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz",
2794
- "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==",
2795
- "peer": true
2796
  },
2797
  "node_modules/@types/prop-types": {
2798
  "version": "15.7.12",
@@ -2820,10 +2823,10 @@
2820
  }
2821
  },
2822
  "node_modules/@types/ws": {
2823
- "version": "8.5.10",
2824
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
2825
- "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
2826
- "peer": true,
2827
  "dependencies": {
2828
  "@types/node": "*"
2829
  }
@@ -3566,6 +3569,12 @@
3566
  "node": ">= 0.6"
3567
  }
3568
  },
 
 
 
 
 
 
3569
  "node_modules/cross-spawn": {
3570
  "version": "7.0.6",
3571
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -4892,6 +4901,12 @@
4892
  "node": ">= 4"
4893
  }
4894
  },
 
 
 
 
 
 
4895
  "node_modules/import-fresh": {
4896
  "version": "3.3.0",
4897
  "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -4931,8 +4946,7 @@
4931
  "node_modules/inherits": {
4932
  "version": "2.0.4",
4933
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4934
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
4935
- "dev": true
4936
  },
4937
  "node_modules/internal-slot": {
4938
  "version": "1.0.7",
@@ -5326,6 +5340,21 @@
5326
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5327
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
5328
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5329
  "node_modules/iterator.prototype": {
5330
  "version": "1.1.2",
5331
  "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
@@ -5434,6 +5463,18 @@
5434
  "node": ">=4.0"
5435
  }
5436
  },
 
 
 
 
 
 
 
 
 
 
 
 
5437
  "node_modules/keyv": {
5438
  "version": "4.5.4",
5439
  "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -5474,6 +5515,15 @@
5474
  "node": ">= 0.8.0"
5475
  }
5476
  },
 
 
 
 
 
 
 
 
 
5477
  "node_modules/lilconfig": {
5478
  "version": "2.1.0",
5479
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@@ -5988,6 +6038,12 @@
5988
  "url": "https://github.com/sponsors/sindresorhus"
5989
  }
5990
  },
 
 
 
 
 
 
5991
  "node_modules/parent-module": {
5992
  "version": "1.0.1",
5993
  "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -6336,6 +6392,12 @@
6336
  }
6337
  }
6338
  },
 
 
 
 
 
 
6339
  "node_modules/prop-types": {
6340
  "version": "15.8.1",
6341
  "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -6513,6 +6575,27 @@
6513
  "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
6514
  }
6515
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6516
  "node_modules/readdirp": {
6517
  "version": "3.6.0",
6518
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -6688,6 +6771,12 @@
6688
  "url": "https://github.com/sponsors/ljharb"
6689
  }
6690
  },
 
 
 
 
 
 
6691
  "node_modules/safe-regex-test": {
6692
  "version": "1.0.3",
6693
  "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
@@ -6757,6 +6846,12 @@
6757
  "node": ">= 0.4"
6758
  }
6759
  },
 
 
 
 
 
 
6760
  "node_modules/sharp": {
6761
  "version": "0.34.1",
6762
  "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz",
@@ -6879,6 +6974,15 @@
6879
  "node": ">=10.0.0"
6880
  }
6881
  },
 
 
 
 
 
 
 
 
 
6882
  "node_modules/string-width": {
6883
  "version": "5.1.2",
6884
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -7265,7 +7369,7 @@
7265
  "version": "0.0.3",
7266
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
7267
  "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
7268
- "peer": true
7269
  },
7270
  "node_modules/ts-api-utils": {
7271
  "version": "1.3.0",
@@ -7501,13 +7605,13 @@
7501
  "version": "3.0.1",
7502
  "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
7503
  "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
7504
- "peer": true
7505
  },
7506
  "node_modules/whatwg-url": {
7507
  "version": "5.0.0",
7508
  "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
7509
  "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
7510
- "peer": true,
7511
  "dependencies": {
7512
  "tr46": "~0.0.3",
7513
  "webidl-conversions": "^3.0.0"
@@ -7722,10 +7826,10 @@
7722
  }
7723
  },
7724
  "node_modules/ws": {
7725
- "version": "8.17.0",
7726
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
7727
- "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
7728
- "peer": true,
7729
  "engines": {
7730
  "node": ">=10.0.0"
7731
  },
 
17
  "@radix-ui/react-slot": "^1.0.2",
18
  "@radix-ui/react-toast": "^1.2.7",
19
  "@supabase/ssr": "^0.3.0",
20
+ "@supabase/supabase-js": "^2.50.3",
21
  "class-variance-authority": "^0.7.0",
22
  "clsx": "^2.1.1",
23
  "jose": "^5.4.0",
24
+ "jszip": "^3.10.1",
25
  "lucide-react": "^0.383.0",
26
  "next": "14.2.3",
27
  "react": "^18",
 
2677
  "dev": true
2678
  },
2679
  "node_modules/@supabase/auth-js": {
2680
+ "version": "2.70.0",
2681
+ "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.70.0.tgz",
2682
+ "integrity": "sha512-BaAK/tOAZFJtzF1sE3gJ2FwTjLf4ky3PSvcvLGEgEmO4BSBkwWKu8l67rLLIBZPDnCyV7Owk2uPyKHa0kj5QGg==",
2683
+ "license": "MIT",
2684
  "dependencies": {
2685
  "@supabase/node-fetch": "^2.6.14"
2686
  }
2687
  },
2688
  "node_modules/@supabase/functions-js": {
2689
+ "version": "2.4.5",
2690
+ "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.5.tgz",
2691
+ "integrity": "sha512-v5GSqb9zbosquTo6gBwIiq7W9eQ7rE5QazsK/ezNiQXdCbY+bH8D9qEaBIkhVvX4ZRW5rP03gEfw5yw9tiq4EQ==",
2692
+ "license": "MIT",
2693
  "dependencies": {
2694
  "@supabase/node-fetch": "^2.6.14"
2695
  }
 
2698
  "version": "2.6.15",
2699
  "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz",
2700
  "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==",
2701
+ "license": "MIT",
2702
  "dependencies": {
2703
  "whatwg-url": "^5.0.0"
2704
  },
 
2707
  }
2708
  },
2709
  "node_modules/@supabase/postgrest-js": {
2710
+ "version": "1.19.4",
2711
+ "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.19.4.tgz",
2712
+ "integrity": "sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==",
2713
+ "license": "MIT",
2714
  "dependencies": {
2715
  "@supabase/node-fetch": "^2.6.14"
2716
  }
2717
  },
2718
  "node_modules/@supabase/realtime-js": {
2719
+ "version": "2.11.15",
2720
+ "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.11.15.tgz",
2721
+ "integrity": "sha512-HQKRnwAqdVqJW/P9TjKVK+/ETpW4yQ8tyDPPtRMKOH4Uh3vQD74vmj353CYs8+YwVBKubeUOOEpI9CT8mT4obw==",
2722
+ "license": "MIT",
2723
  "dependencies": {
2724
+ "@supabase/node-fetch": "^2.6.13",
2725
+ "@types/phoenix": "^1.6.6",
2726
+ "@types/ws": "^8.18.1",
2727
+ "isows": "^1.0.7",
2728
+ "ws": "^8.18.2"
2729
  }
2730
  },
2731
  "node_modules/@supabase/ssr": {
 
2741
  }
2742
  },
2743
  "node_modules/@supabase/storage-js": {
2744
+ "version": "2.7.1",
2745
+ "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.1.tgz",
2746
+ "integrity": "sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==",
2747
+ "license": "MIT",
2748
  "dependencies": {
2749
  "@supabase/node-fetch": "^2.6.14"
2750
  }
2751
  },
2752
  "node_modules/@supabase/supabase-js": {
2753
+ "version": "2.50.3",
2754
+ "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.50.3.tgz",
2755
+ "integrity": "sha512-Ld42AbfSXKnbCE2ObRvrGC5wj9OrfTOzswQZg0OcGQGx+QqcWYN/IqsLqrt4gCFrD57URbNRfGESSWzchzKAuQ==",
2756
+ "license": "MIT",
2757
  "dependencies": {
2758
+ "@supabase/auth-js": "2.70.0",
2759
+ "@supabase/functions-js": "2.4.5",
2760
  "@supabase/node-fetch": "2.6.15",
2761
+ "@supabase/postgrest-js": "1.19.4",
2762
+ "@supabase/realtime-js": "2.11.15",
2763
+ "@supabase/storage-js": "2.7.1"
2764
  }
2765
  },
2766
  "node_modules/@swc/counter": {
 
2792
  }
2793
  },
2794
  "node_modules/@types/phoenix": {
2795
+ "version": "1.6.6",
2796
+ "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz",
2797
+ "integrity": "sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==",
2798
+ "license": "MIT"
2799
  },
2800
  "node_modules/@types/prop-types": {
2801
  "version": "15.7.12",
 
2823
  }
2824
  },
2825
  "node_modules/@types/ws": {
2826
+ "version": "8.18.1",
2827
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
2828
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
2829
+ "license": "MIT",
2830
  "dependencies": {
2831
  "@types/node": "*"
2832
  }
 
3569
  "node": ">= 0.6"
3570
  }
3571
  },
3572
+ "node_modules/core-util-is": {
3573
+ "version": "1.0.3",
3574
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
3575
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
3576
+ "license": "MIT"
3577
+ },
3578
  "node_modules/cross-spawn": {
3579
  "version": "7.0.6",
3580
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
 
4901
  "node": ">= 4"
4902
  }
4903
  },
4904
+ "node_modules/immediate": {
4905
+ "version": "3.0.6",
4906
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
4907
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
4908
+ "license": "MIT"
4909
+ },
4910
  "node_modules/import-fresh": {
4911
  "version": "3.3.0",
4912
  "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
 
4946
  "node_modules/inherits": {
4947
  "version": "2.0.4",
4948
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4949
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
 
4950
  },
4951
  "node_modules/internal-slot": {
4952
  "version": "1.0.7",
 
5340
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5341
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
5342
  },
5343
+ "node_modules/isows": {
5344
+ "version": "1.0.7",
5345
+ "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz",
5346
+ "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==",
5347
+ "funding": [
5348
+ {
5349
+ "type": "github",
5350
+ "url": "https://github.com/sponsors/wevm"
5351
+ }
5352
+ ],
5353
+ "license": "MIT",
5354
+ "peerDependencies": {
5355
+ "ws": "*"
5356
+ }
5357
+ },
5358
  "node_modules/iterator.prototype": {
5359
  "version": "1.1.2",
5360
  "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
 
5463
  "node": ">=4.0"
5464
  }
5465
  },
5466
+ "node_modules/jszip": {
5467
+ "version": "3.10.1",
5468
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
5469
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
5470
+ "license": "(MIT OR GPL-3.0-or-later)",
5471
+ "dependencies": {
5472
+ "lie": "~3.3.0",
5473
+ "pako": "~1.0.2",
5474
+ "readable-stream": "~2.3.6",
5475
+ "setimmediate": "^1.0.5"
5476
+ }
5477
+ },
5478
  "node_modules/keyv": {
5479
  "version": "4.5.4",
5480
  "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
 
5515
  "node": ">= 0.8.0"
5516
  }
5517
  },
5518
+ "node_modules/lie": {
5519
+ "version": "3.3.0",
5520
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
5521
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
5522
+ "license": "MIT",
5523
+ "dependencies": {
5524
+ "immediate": "~3.0.5"
5525
+ }
5526
+ },
5527
  "node_modules/lilconfig": {
5528
  "version": "2.1.0",
5529
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
 
6038
  "url": "https://github.com/sponsors/sindresorhus"
6039
  }
6040
  },
6041
+ "node_modules/pako": {
6042
+ "version": "1.0.11",
6043
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
6044
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
6045
+ "license": "(MIT AND Zlib)"
6046
+ },
6047
  "node_modules/parent-module": {
6048
  "version": "1.0.1",
6049
  "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
 
6392
  }
6393
  }
6394
  },
6395
+ "node_modules/process-nextick-args": {
6396
+ "version": "2.0.1",
6397
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
6398
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
6399
+ "license": "MIT"
6400
+ },
6401
  "node_modules/prop-types": {
6402
  "version": "15.8.1",
6403
  "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
 
6575
  "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
6576
  }
6577
  },
6578
+ "node_modules/readable-stream": {
6579
+ "version": "2.3.8",
6580
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
6581
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
6582
+ "license": "MIT",
6583
+ "dependencies": {
6584
+ "core-util-is": "~1.0.0",
6585
+ "inherits": "~2.0.3",
6586
+ "isarray": "~1.0.0",
6587
+ "process-nextick-args": "~2.0.0",
6588
+ "safe-buffer": "~5.1.1",
6589
+ "string_decoder": "~1.1.1",
6590
+ "util-deprecate": "~1.0.1"
6591
+ }
6592
+ },
6593
+ "node_modules/readable-stream/node_modules/isarray": {
6594
+ "version": "1.0.0",
6595
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
6596
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
6597
+ "license": "MIT"
6598
+ },
6599
  "node_modules/readdirp": {
6600
  "version": "3.6.0",
6601
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
 
6771
  "url": "https://github.com/sponsors/ljharb"
6772
  }
6773
  },
6774
+ "node_modules/safe-buffer": {
6775
+ "version": "5.1.2",
6776
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
6777
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
6778
+ "license": "MIT"
6779
+ },
6780
  "node_modules/safe-regex-test": {
6781
  "version": "1.0.3",
6782
  "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
 
6846
  "node": ">= 0.4"
6847
  }
6848
  },
6849
+ "node_modules/setimmediate": {
6850
+ "version": "1.0.5",
6851
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
6852
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
6853
+ "license": "MIT"
6854
+ },
6855
  "node_modules/sharp": {
6856
  "version": "0.34.1",
6857
  "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.1.tgz",
 
6974
  "node": ">=10.0.0"
6975
  }
6976
  },
6977
+ "node_modules/string_decoder": {
6978
+ "version": "1.1.1",
6979
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
6980
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
6981
+ "license": "MIT",
6982
+ "dependencies": {
6983
+ "safe-buffer": "~5.1.0"
6984
+ }
6985
+ },
6986
  "node_modules/string-width": {
6987
  "version": "5.1.2",
6988
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
 
7369
  "version": "0.0.3",
7370
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
7371
  "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
7372
+ "license": "MIT"
7373
  },
7374
  "node_modules/ts-api-utils": {
7375
  "version": "1.3.0",
 
7605
  "version": "3.0.1",
7606
  "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
7607
  "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
7608
+ "license": "BSD-2-Clause"
7609
  },
7610
  "node_modules/whatwg-url": {
7611
  "version": "5.0.0",
7612
  "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
7613
  "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
7614
+ "license": "MIT",
7615
  "dependencies": {
7616
  "tr46": "~0.0.3",
7617
  "webidl-conversions": "^3.0.0"
 
7826
  }
7827
  },
7828
  "node_modules/ws": {
7829
+ "version": "8.18.3",
7830
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
7831
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
7832
+ "license": "MIT",
7833
  "engines": {
7834
  "node": ">=10.0.0"
7835
  },
package.json CHANGED
@@ -18,9 +18,11 @@
18
  "@radix-ui/react-slot": "^1.0.2",
19
  "@radix-ui/react-toast": "^1.2.7",
20
  "@supabase/ssr": "^0.3.0",
 
21
  "class-variance-authority": "^0.7.0",
22
  "clsx": "^2.1.1",
23
  "jose": "^5.4.0",
 
24
  "lucide-react": "^0.383.0",
25
  "next": "14.2.3",
26
  "react": "^18",
 
18
  "@radix-ui/react-slot": "^1.0.2",
19
  "@radix-ui/react-toast": "^1.2.7",
20
  "@supabase/ssr": "^0.3.0",
21
+ "@supabase/supabase-js": "^2.50.3",
22
  "class-variance-authority": "^0.7.0",
23
  "clsx": "^2.1.1",
24
  "jose": "^5.4.0",
25
+ "jszip": "^3.10.1",
26
  "lucide-react": "^0.383.0",
27
  "next": "14.2.3",
28
  "react": "^18",