1- import { Effect , Option , Schema } from "effect" ;
1+ import { Effect } from "effect" ;
22import type { Layer } from "effect" ;
33import { HttpClient } from "effect/unstable/http" ;
44
@@ -25,6 +25,7 @@ import {
2525 listHealthCheckCandidatesOpenApi ,
2626 makeDefaultOpenapiStore ,
2727 normalizeOpenApiAuthInputs ,
28+ OpenApiExtractionError ,
2829 OpenApiParseError ,
2930 openApiStoredOperationsFromCompiled ,
3031 resolveOpenApiBackedAnnotations ,
@@ -161,18 +162,21 @@ const googleOpenApiPresetById: ReadonlyMap<string, GoogleOpenApiPreset> = new Ma
161162 googleOpenApiPresets . map ( ( preset ) => [ preset . id , preset ] ) ,
162163) ;
163164
164- const ErrorMessage = Schema . Struct ( { message : Schema . String } ) ;
165- const decodeErrorMessage = Schema . decodeUnknownOption ( ErrorMessage ) ;
166- const googleAddServicesErrorMessage = ( error : unknown ) : string =>
167- Option . getOrElse (
168- Option . map ( decodeErrorMessage ( error ) , ( { message } ) => message ) ,
169- ( ) => String ( error ) ,
170- ) ;
165+ type GoogleAddServiceOutcome = {
166+ readonly added : readonly GoogleAddServicesAdded [ ] ;
167+ readonly skipped : readonly GoogleAddServicesSkipped [ ] ;
168+ readonly failed : readonly GoogleAddServicesFailed [ ] ;
169+ } ;
171170
172- type GoogleAddServiceOutcome =
173- | { readonly _tag : "added" ; readonly value : GoogleAddServicesAdded }
174- | { readonly _tag : "skipped" ; readonly value : GoogleAddServicesSkipped }
175- | { readonly _tag : "failed" ; readonly value : GoogleAddServicesFailed } ;
171+ const googleAddServiceFailure = (
172+ service : GoogleServiceConfig ,
173+ slug : IntegrationSlug ,
174+ error : string ,
175+ ) : GoogleAddServiceOutcome => ( {
176+ added : [ ] ,
177+ skipped : [ ] ,
178+ failed : [ { slug, presetId : service . presetId , error } ] ,
179+ } ) ;
176180
177181const googlePhotosBundlePresetIdByUrl = new Map (
178182 googlePhotosOpenApiPresets . flatMap ( ( preset ) =>
@@ -374,43 +378,50 @@ const makeGooglePluginExtension = (
374378 return addOneService ( service , input . baseUrl ) . pipe (
375379 Effect . map (
376380 ( result ) : GoogleAddServiceOutcome => ( {
377- _tag : "added" ,
378- value : {
379- slug : result . slug ,
380- presetId : service . presetId ,
381- toolCount : result . toolCount ,
382- } ,
381+ added : [
382+ {
383+ slug : result . slug ,
384+ presetId : service . presetId ,
385+ toolCount : result . toolCount ,
386+ } ,
387+ ] ,
388+ skipped : [ ] ,
389+ failed : [ ] ,
383390 } ) ,
384391 ) ,
385392 Effect . catchTag ( "IntegrationAlreadyExistsError" , ( ) =>
386393 Effect . succeed ( {
387- _tag : "skipped" as const ,
388- value : {
389- slug,
390- presetId : service . presetId ,
391- reason : "already_exists" as const ,
392- } ,
394+ added : [ ] ,
395+ skipped : [
396+ {
397+ slug,
398+ presetId : service . presetId ,
399+ reason : "already_exists" as const ,
400+ } ,
401+ ] ,
402+ failed : [ ] ,
393403 } ) ,
394404 ) ,
395- Effect . catch ( ( error ) =>
396- Effect . succeed ( {
397- _tag : "failed" as const ,
398- value : {
399- slug,
400- presetId : service . presetId ,
401- error : googleAddServicesErrorMessage ( error ) ,
402- } ,
403- } ) ,
405+ Effect . catchTags ( {
406+ OpenApiParseError : ( error : OpenApiParseError ) =>
407+ Effect . succeed ( googleAddServiceFailure ( service , slug , error . message ) ) ,
408+ OpenApiExtractionError : ( error : OpenApiExtractionError ) =>
409+ Effect . succeed ( googleAddServiceFailure ( service , slug , error . message ) ) ,
410+ } ) ,
411+ Effect . catch ( ( ) =>
412+ Effect . succeed (
413+ googleAddServiceFailure ( service , slug , "Failed to add Google service" ) ,
414+ ) ,
404415 ) ,
405416 ) ;
406417 } ,
407418 { concurrency : 1 } ,
408419 ) ;
409420
410421 return {
411- added : outcomes . flatMap ( ( outcome ) => ( outcome . _tag === " added" ? [ outcome . value ] : [ ] ) ) ,
412- skipped : outcomes . flatMap ( ( outcome ) => ( outcome . _tag === " skipped" ? [ outcome . value ] : [ ] ) ) ,
413- failed : outcomes . flatMap ( ( outcome ) => ( outcome . _tag === " failed" ? [ outcome . value ] : [ ] ) ) ,
422+ added : outcomes . flatMap ( ( outcome ) => outcome . added ) ,
423+ skipped : outcomes . flatMap ( ( outcome ) => outcome . skipped ) ,
424+ failed : outcomes . flatMap ( ( outcome ) => outcome . failed ) ,
414425 } ;
415426 } ) ;
416427
0 commit comments