Mapping Meta's API Errors to Effect in Typescript
Hi guys, I have been using the effect/platform API to create a api client that wraps meta's APIs, but i cannot seem to figure out the correct syntax/way on how to map meta's errors to effect. Any help would be appreciated!
const SCloudApiError = S.Struct({
message: S.String,
type: S.String,
code: S.Number,
error_data: S.Struct({
messaging_product: S.String,
details: S.String,
}),
fbtrace_id: S.optional(S.String),
});
export const metaAPI = HttpApi.make("MetaAPI")
.add(
HttpApiGroup.make("cloudAPI")
.add(cloudApiSendTextMessageEndpoint)
.add(cloudApiSendTemplateMessageEndpoint)
.add(cloudApiSendImageMessageEndpoint)
.add(cloudApiSendDocumentMessageEndpoint)
.add(cloudApiSendVideoMessageEndpoint)
.add(cloudApiSendAudioMessageEndpoint)
.add(cloudApiSendReactionMessageEndpoint)
.add(cloudApiGetWhatsappTemplates)
.add(cloudApiUploadMediaEndpoint)
.add(cloudApiGetMediaUrlEndpoint)
.add(cloudApiReadReceiptEndpoint)
.add(cloudApiTypingIndicatorEndpoint)
.add(cloudApiSendInteractiveListMessageEndpoint)
.add(cloudApiSendInteractiveButtonMessageEndpoint)
)
.addError(SCloudApiError, {
status: 400,
});
export const makeMetaAPIClient = ({ apiKey }: { apiKey: string }) => {
return HttpApiClient.make(metaAPI, {
transformClient: (client) =>
client.pipe(
HttpClient.mapRequest((request) => {
return request.pipe(HttpClientRequest.bearerToken(apiKey));
})
),
baseUrl: "https://graph.facebook.com/v21.0",
});
};const SCloudApiError = S.Struct({
message: S.String,
type: S.String,
code: S.Number,
error_data: S.Struct({
messaging_product: S.String,
details: S.String,
}),
fbtrace_id: S.optional(S.String),
});
export const metaAPI = HttpApi.make("MetaAPI")
.add(
HttpApiGroup.make("cloudAPI")
.add(cloudApiSendTextMessageEndpoint)
.add(cloudApiSendTemplateMessageEndpoint)
.add(cloudApiSendImageMessageEndpoint)
.add(cloudApiSendDocumentMessageEndpoint)
.add(cloudApiSendVideoMessageEndpoint)
.add(cloudApiSendAudioMessageEndpoint)
.add(cloudApiSendReactionMessageEndpoint)
.add(cloudApiGetWhatsappTemplates)
.add(cloudApiUploadMediaEndpoint)
.add(cloudApiGetMediaUrlEndpoint)
.add(cloudApiReadReceiptEndpoint)
.add(cloudApiTypingIndicatorEndpoint)
.add(cloudApiSendInteractiveListMessageEndpoint)
.add(cloudApiSendInteractiveButtonMessageEndpoint)
)
.addError(SCloudApiError, {
status: 400,
});
export const makeMetaAPIClient = ({ apiKey }: { apiKey: string }) => {
return HttpApiClient.make(metaAPI, {
transformClient: (client) =>
client.pipe(
HttpClient.mapRequest((request) => {
return request.pipe(HttpClientRequest.bearerToken(apiKey));
})
),
baseUrl: "https://graph.facebook.com/v21.0",
});
};