@zoralabs/coins-sdk 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/actions/createCoin.d.ts +1 -1
  3. package/dist/actions/createCoin.d.ts.map +1 -1
  4. package/dist/actions/tradeCoin.d.ts +52 -0
  5. package/dist/actions/tradeCoin.d.ts.map +1 -0
  6. package/dist/api/api-key.d.ts +2 -1
  7. package/dist/api/api-key.d.ts.map +1 -1
  8. package/dist/api/internal.d.ts +2 -2
  9. package/dist/api/internal.d.ts.map +1 -1
  10. package/dist/client/sdk.gen.d.ts +77 -1
  11. package/dist/client/sdk.gen.d.ts.map +1 -1
  12. package/dist/client/types.gen.d.ts +156 -0
  13. package/dist/client/types.gen.d.ts.map +1 -1
  14. package/dist/index.cjs +405 -1
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +404 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/metadata/cleanAndValidateMetadataURI.d.ts +1 -1
  21. package/dist/metadata/cleanAndValidateMetadataURI.d.ts.map +1 -1
  22. package/dist/metadata/index.d.ts +1 -1
  23. package/dist/metadata/index.d.ts.map +1 -1
  24. package/dist/metadata/validateMetadataURIContent.d.ts +1 -1
  25. package/dist/metadata/validateMetadataURIContent.d.ts.map +1 -1
  26. package/dist/uploader/index.d.ts +10 -0
  27. package/dist/uploader/index.d.ts.map +1 -0
  28. package/dist/uploader/metadata.d.ts +44 -0
  29. package/dist/uploader/metadata.d.ts.map +1 -0
  30. package/dist/uploader/providers/zora.d.ts +18 -0
  31. package/dist/uploader/providers/zora.d.ts.map +1 -0
  32. package/dist/uploader/types.d.ts +21 -0
  33. package/dist/uploader/types.d.ts.map +1 -0
  34. package/package.json +1 -1
  35. package/src/actions/createCoin.ts +2 -1
  36. package/src/actions/tradeCoin.ts +230 -0
  37. package/src/api/api-key.ts +5 -1
  38. package/src/api/internal.ts +3 -3
  39. package/src/client/sdk.gen.ts +26 -0
  40. package/src/client/types.gen.ts +161 -0
  41. package/src/index.ts +6 -0
  42. package/src/metadata/cleanAndValidateMetadataURI.ts +1 -5
  43. package/src/metadata/index.ts +1 -4
  44. package/src/metadata/validateMetadataURIContent.ts +2 -4
  45. package/src/uploader/index.ts +16 -0
  46. package/src/uploader/metadata.ts +214 -0
  47. package/src/uploader/providers/zora.ts +86 -0
  48. package/src/uploader/tests/metadata.test.ts +331 -0
  49. package/src/uploader/tests/providers.test.ts +131 -0
  50. package/src/uploader/types.ts +27 -0
@@ -0,0 +1,131 @@
1
+ import { describe, expect, it, vi, beforeEach } from "vitest";
2
+ import { ZoraUploader, createZoraUploaderForCreator } from "../providers/zora";
3
+ import { setApiKey } from "../../api/api-key";
4
+
5
+ // Mock the fetch function
6
+ const mockFetch = vi.fn();
7
+ global.fetch = mockFetch;
8
+
9
+ // Mock console methods
10
+ console.log = vi.fn();
11
+ console.error = vi.fn();
12
+
13
+ describe("ZoraUploader", () => {
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ mockFetch.mockReset();
17
+ setApiKey(undefined);
18
+ });
19
+
20
+ describe("constructor", () => {
21
+ it("should initialize with provided API key", () => {
22
+ setApiKey("test-api-key");
23
+ const uploader = new ZoraUploader("0x123");
24
+ expect(uploader).toBeDefined();
25
+ });
26
+
27
+ it("should throw if no API key is available", () => {
28
+ expect(() => new ZoraUploader("0x123")).toThrow("API key is required");
29
+ });
30
+ });
31
+
32
+ describe("upload", () => {
33
+ it("should successfully upload a file with the zora uploader", async () => {
34
+ // Mock JWT token creation response
35
+ mockFetch
36
+ .mockResolvedValueOnce({
37
+ ok: true,
38
+ headers: new Headers({
39
+ "Content-Type": "application/json",
40
+ "Content-Length": "1000",
41
+ }),
42
+ json: async () => ({
43
+ createUploadJwtFromApiKey: "test-jwt-token",
44
+ }),
45
+ })
46
+ .mockResolvedValueOnce({
47
+ ok: true,
48
+ headers: new Headers({
49
+ "Content-Type": "application/json",
50
+ }),
51
+ json: async () => ({
52
+ cid: "bafybeiguslukdujd22p7ix53rcszgbg4ine464g33zk2st3lnjpx4uvmri",
53
+ size: 100,
54
+ mimeType: "image/png",
55
+ }),
56
+ });
57
+
58
+ setApiKey("test-api-key");
59
+ const uploader = new ZoraUploader("0x123");
60
+ const file = new File(["test"], "test.png", { type: "image/png" });
61
+ const result = await uploader.upload(file);
62
+
63
+ // Verify fetch was called with correct parameters
64
+ expect(mockFetch).toHaveBeenCalledTimes(2);
65
+ expect(mockFetch).toHaveBeenCalledWith(
66
+ "https://ipfs-uploader.zora.co/api/v0/add?cid-version=1",
67
+ expect.objectContaining({
68
+ method: "POST",
69
+ headers: expect.objectContaining({
70
+ Authorization: "Bearer test-jwt-token",
71
+ }),
72
+ }),
73
+ );
74
+
75
+ // Verify result
76
+ expect(result).toEqual({
77
+ url: "ipfs://bafybeiguslukdujd22p7ix53rcszgbg4ine464g33zk2st3lnjpx4uvmri",
78
+ size: 100,
79
+ mimeType: "image/png",
80
+ });
81
+ });
82
+
83
+ it("should throw an error if upload fails", async () => {
84
+ // Mock failed response
85
+ mockFetch
86
+ .mockResolvedValueOnce({
87
+ ok: true,
88
+ headers: new Headers({
89
+ "Content-Type": "application/json",
90
+ "Content-Length": "1000",
91
+ }),
92
+ json: async () => ({
93
+ createUploadJwtFromApiKey: "test-jwt-token",
94
+ }),
95
+ })
96
+ .mockResolvedValueOnce({
97
+ ok: false,
98
+ statusText: "Bad Request",
99
+ text: async () => "Invalid file",
100
+ });
101
+
102
+ setApiKey("test-api-key");
103
+ const uploader = new ZoraUploader("0x123");
104
+ const file = new File(["test"], "test.png", { type: "image/png" });
105
+
106
+ await expect(uploader.upload(file)).rejects.toThrow(
107
+ "Failed to upload file",
108
+ );
109
+
110
+ // Verify fetch was called with correct parameters
111
+ expect(mockFetch).toHaveBeenCalledTimes(2);
112
+ expect(mockFetch).toHaveBeenCalledWith(
113
+ "https://ipfs-uploader.zora.co/api/v0/add?cid-version=1",
114
+ expect.objectContaining({
115
+ method: "POST",
116
+ headers: expect.objectContaining({
117
+ Authorization: "Bearer test-jwt-token",
118
+ }),
119
+ }),
120
+ );
121
+ });
122
+ });
123
+
124
+ describe("factory function", () => {
125
+ it("should create a ZoraUploader instance", () => {
126
+ setApiKey("test-api-key");
127
+ const uploader = createZoraUploaderForCreator("0x123");
128
+ expect(uploader).toBeInstanceOf(ZoraUploader);
129
+ });
130
+ });
131
+ });
@@ -0,0 +1,27 @@
1
+ export type ValidMetadataURI =
2
+ | `ipfs://${string}`
3
+ | `ar://${string}`
4
+ | `data:${string}`
5
+ | `https://${string}`;
6
+
7
+ /**
8
+ * Result from uploading a file to a storage provider
9
+ */
10
+ export type UploadResult = {
11
+ url: ValidMetadataURI;
12
+ size: number | undefined;
13
+ mimeType: string | undefined;
14
+ };
15
+
16
+ /**
17
+ * Interface for file uploaders (IPFS, Arweave, etc.)
18
+ */
19
+ export interface Uploader {
20
+ upload(file: File): Promise<UploadResult>;
21
+ }
22
+
23
+ export type CreateMetadataParameters = {
24
+ name: string;
25
+ symbol: string;
26
+ uri: `ipfs://${string}`;
27
+ };