Skip to content

Commit 6d3254b

Browse files
authored
Merge pull request #145 from hypercerts-org/fix/allowlist_upload_response
fix: attach cid to metadata instead of response object
2 parents f0da09d + ca361f9 commit 6d3254b

File tree

1 file changed

+73
-40
lines changed

1 file changed

+73
-40
lines changed
Lines changed: 73 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
import { jsonToBlob } from "../utils/jsonToBlob.js";
2-
import { Body, Controller, Post, Response, Route, SuccessResponse, Tags } from "tsoa";
2+
import {
3+
Body,
4+
Controller,
5+
Post,
6+
Response,
7+
Route,
8+
SuccessResponse,
9+
Tags,
10+
} from "tsoa";
311
import { StorageService } from "../services/StorageService.js";
412
import type {
5-
ApiResponse, StorageResponse,
13+
ApiResponse,
14+
StorageResponse,
615
StoreMetadataRequest,
7-
StoreMetadataWithAllowlistRequest, ValidateMetadataRequest, ValidationResponse
16+
StoreMetadataWithAllowlistRequest,
17+
ValidateMetadataRequest,
18+
ValidationResponse,
819
} from "../types/api.js";
920
import { validateMetadataAndClaimdata } from "../utils/validateMetadataAndClaimdata.js";
1021
import { validateRemoteAllowList } from "../utils/validateRemoteAllowList.js";
@@ -13,7 +24,6 @@ import { parseAndValidateMerkleTree } from "../utils/parseAndValidateMerkleTreeD
1324
@Route("v1/metadata")
1425
@Tags("Metadata")
1526
export class MetadataController extends Controller {
16-
1727
/**
1828
* Submits a new hypercert metadata object for validation and storage on IPFS.
1929
* When an allowlist URI is provided the service will validate the allowlist data before storing the metadata.
@@ -28,39 +38,47 @@ export class MetadataController extends Controller {
2838
@Response<ApiResponse>(422, "Unprocessable content", {
2939
success: false,
3040
message: "Validation failed",
31-
errors: { metadata: "Invalid metadata." }
41+
errors: { metadata: "Invalid metadata." },
3242
})
33-
public async storeMetadata(@Body() requestBody: StoreMetadataRequest): Promise<StorageResponse> {
43+
public async storeMetadata(
44+
@Body() requestBody: StoreMetadataRequest,
45+
): Promise<StorageResponse> {
3446
const storage = await StorageService.init();
35-
const metadataValidationResult = validateMetadataAndClaimdata(requestBody.metadata);
47+
const metadataValidationResult = validateMetadataAndClaimdata(
48+
requestBody.metadata,
49+
);
3650

3751
if (!metadataValidationResult.valid) {
3852
this.setStatus(422);
3953
return {
4054
success: false,
4155
message: "Validation failed",
42-
errors: metadataValidationResult.errors
56+
errors: metadataValidationResult.errors,
4357
};
4458
}
4559

4660
if (requestBody.metadata.allowList) {
47-
const allowListValidationResult = await validateRemoteAllowList(requestBody.metadata.allowList);
61+
const allowListValidationResult = await validateRemoteAllowList(
62+
requestBody.metadata.allowList,
63+
);
4864

4965
if (!allowListValidationResult.valid) {
5066
this.setStatus(422);
5167
return {
5268
success: false,
5369
message: "Errors while validating allow list",
54-
errors: allowListValidationResult.errors
70+
errors: allowListValidationResult.errors,
5571
};
5672
}
5773
}
5874

59-
const cid = await storage.uploadFile({ file: jsonToBlob(metadataValidationResult.data) });
75+
const cid = await storage.uploadFile({
76+
file: jsonToBlob(metadataValidationResult.data),
77+
});
6078
this.setStatus(201);
6179
return {
6280
success: true,
63-
data: cid
81+
data: cid,
6482
};
6583
}
6684

@@ -78,23 +96,27 @@ export class MetadataController extends Controller {
7896
@Response<ApiResponse>(409, "Conflict", {
7997
success: false,
8098
message: "Allow list detected in metadata",
81-
errors: { metadata: "Allowlist URI already present in metadata." }
99+
errors: { metadata: "Allowlist URI already present in metadata." },
82100
})
83101
@Response<ApiResponse>(422, "Unprocessable content", {
84102
success: false,
85103
message: "Validation failed",
86-
errors: { metadata: "Invalid metadata." }
104+
errors: { metadata: "Invalid metadata." },
87105
})
88-
public async storeMetadataWithAllowlist(@Body() requestBody: StoreMetadataWithAllowlistRequest): Promise<StorageResponse> {
106+
public async storeMetadataWithAllowlist(
107+
@Body() requestBody: StoreMetadataWithAllowlistRequest,
108+
): Promise<StorageResponse> {
89109
const storage = await StorageService.init();
90-
const metadataValidationResult = validateMetadataAndClaimdata(requestBody.metadata);
110+
const metadataValidationResult = validateMetadataAndClaimdata(
111+
requestBody.metadata,
112+
);
91113

92114
if (!metadataValidationResult.valid) {
93115
this.setStatus(422);
94116
return {
95117
success: false,
96118
message: "Validation failed",
97-
errors: metadataValidationResult.errors
119+
errors: metadataValidationResult.errors,
98120
};
99121
}
100122

@@ -103,40 +125,41 @@ export class MetadataController extends Controller {
103125
return {
104126
success: false,
105127
message: "Allow list detected in metadata",
106-
errors: { metadata: "Allowlist URI already present in metadata." }
128+
errors: { metadata: "Allowlist URI already present in metadata." },
107129
};
108130
}
109131

110132
const allowlistValidationResult = parseAndValidateMerkleTree({
111133
allowList: requestBody.allowList,
112-
totalUnits: requestBody?.totalUnits
134+
totalUnits: requestBody?.totalUnits,
113135
});
114136

115137
if (!allowlistValidationResult.valid) {
116138
this.setStatus(422);
117139
return {
118140
success: false,
119141
message: "Validation failed",
120-
errors: allowlistValidationResult.errors
142+
errors: allowlistValidationResult.errors,
121143
};
122144
}
123145

124-
const allowListCid = await storage.uploadFile({ file: jsonToBlob(requestBody.allowList) });
146+
const uploadResult = await storage.uploadFile({
147+
file: jsonToBlob(requestBody.allowList),
148+
});
125149
const cid = await storage.uploadFile({
126150
file: jsonToBlob({
127151
...metadataValidationResult.data,
128-
allowList: `ipfs://${allowListCid}`
129-
})
152+
allowList: `ipfs://${uploadResult.cid}`,
153+
}),
130154
});
131155

132156
this.setStatus(201);
133157
return {
134158
success: true,
135-
data: cid
159+
data: cid,
136160
};
137161
}
138162

139-
140163
/**
141164
* Validates a hypercert metadata object. When an allowlist URI is provided the service will validate the allowlist data as well.
142165
*
@@ -148,37 +171,43 @@ export class MetadataController extends Controller {
148171
@Response<ApiResponse>(422, "Unprocessable content", {
149172
success: false,
150173
message: "Validation failed",
151-
errors: { metadata: "Invalid metadata." }
174+
errors: { metadata: "Invalid metadata." },
152175
})
153-
public async validateMetadata(@Body() requestBody: ValidateMetadataRequest): Promise<ValidationResponse> {
154-
const metadataValidationResult = validateMetadataAndClaimdata(requestBody.metadata);
176+
public async validateMetadata(
177+
@Body() requestBody: ValidateMetadataRequest,
178+
): Promise<ValidationResponse> {
179+
const metadataValidationResult = validateMetadataAndClaimdata(
180+
requestBody.metadata,
181+
);
155182

156183
if (!metadataValidationResult.valid) {
157184
this.setStatus(422);
158185
return {
159186
success: false,
160187
message: "Errors while validating metadata or allow list",
161-
errors: metadataValidationResult.errors
188+
errors: metadataValidationResult.errors,
162189
};
163190
}
164191

165192
if (requestBody.metadata.allowList) {
166-
const allowListValidationResult = await validateRemoteAllowList(requestBody.metadata.allowList);
193+
const allowListValidationResult = await validateRemoteAllowList(
194+
requestBody.metadata.allowList,
195+
);
167196

168197
if (!allowListValidationResult.valid) {
169198
this.setStatus(422);
170199
return {
171200
success: false,
172201
message: "Errors while validating allow list reference in metadata",
173-
errors: allowListValidationResult.errors
202+
errors: allowListValidationResult.errors,
174203
};
175204
}
176205
}
177206

178207
this.setStatus(200);
179208
return {
180209
success: true,
181-
message: "Validation successful"
210+
message: "Validation successful",
182211
};
183212
}
184213

@@ -193,38 +222,42 @@ export class MetadataController extends Controller {
193222
@Response<ApiResponse>(422, "Unprocessable content", {
194223
success: false,
195224
message: "Validation failed",
196-
errors: { metadata: "Invalid metadata." }
225+
errors: { metadata: "Invalid metadata." },
197226
})
198-
public async validateMetadataWithAllowlist(@Body() requestBody: StoreMetadataWithAllowlistRequest): Promise<ValidationResponse> {
199-
const metadataValidationResult = validateMetadataAndClaimdata(requestBody.metadata);
227+
public async validateMetadataWithAllowlist(
228+
@Body() requestBody: StoreMetadataWithAllowlistRequest,
229+
): Promise<ValidationResponse> {
230+
const metadataValidationResult = validateMetadataAndClaimdata(
231+
requestBody.metadata,
232+
);
200233

201234
if (!metadataValidationResult.valid) {
202235
this.setStatus(422);
203236
return {
204237
success: false,
205238
message: "Validation failed",
206-
errors: metadataValidationResult.errors
239+
errors: metadataValidationResult.errors,
207240
};
208241
}
209242

210243
const allowlistValidationResult = parseAndValidateMerkleTree({
211244
allowList: requestBody.allowList,
212-
totalUnits: requestBody?.totalUnits
245+
totalUnits: requestBody?.totalUnits,
213246
});
214247

215248
if (!allowlistValidationResult.valid) {
216249
this.setStatus(422);
217250
return {
218251
success: false,
219252
message: "Validation failed",
220-
errors: allowlistValidationResult.errors
253+
errors: allowlistValidationResult.errors,
221254
};
222255
}
223256

224257
this.setStatus(200);
225258
return {
226259
success: true,
227-
message: "Validation successful"
260+
message: "Validation successful",
228261
};
229262
}
230-
}
263+
}

0 commit comments

Comments
 (0)