@@ -5,15 +5,16 @@ import path from 'path';
55import { stripIndents } from "common-tags" ;
66import dayjs from "dayjs" ;
77import { getDefaultKomodoApi } from "../common/utils/komodo.js" ;
8+ import { asKomodoApiErrorResponse , KomodoApiError } from "../common/errors.js" ;
89
910export const exportToSync = async ( toml : string , parentLogger : Logger ) : Promise < void > => {
1011 const logger = childLogger ( parentLogger , 'Sync API' ) ;
1112
1213 if ( parseBool ( process . env . OUTPUT_API_SYNC ) ) {
1314 try {
1415 const komodo = getDefaultKomodoApi ( ) ;
15- if ( komodo === undefined ) {
16- throw new Error ( 'Komodo API is unavaiable , cannot export to Sync' ) ;
16+ if ( komodo === undefined ) {
17+ throw new Error ( 'Komodo API is unavailable , cannot export to Sync' ) ;
1718 }
1819 const syncName = isUndefinedOrEmptyString ( process . env . SYNC_NAME ) ? 'komodo-import' : process . env . SYNC_NAME ;
1920 logger . info ( `Using '${ syncName } ' as Sync Name` ) ;
@@ -41,46 +42,68 @@ export const exportToSync = async (toml: string, parentLogger: Logger): Promise<
4142 }
4243 logger . verbose ( `Resource Sync ${ syncName } alerady exists (ID ${ syncId } ), will ${ existingBehavior } contents` ) ;
4344 } catch ( e ) {
44- // do nothing
45+ if ( asKomodoApiErrorResponse ( e ) ) {
46+ if ( e . result . error . toLocaleLowerCase ( ) . includes ( 'did not find any resourcesync matching' ) ) {
47+ logger . verbose ( `No Sync named ${ syncName } exists, creating a new one.` ) ;
48+ } else {
49+ const ke = new KomodoApiError ( e ) ;
50+ throw new Error ( 'Unexpected error from Komodo API while checking for existing Sync' , { cause : ke } ) ;
51+ }
52+ } else {
53+ throw new Error ( 'Unexpected error while trying to check for existing Sync' , { cause : e } ) ;
54+ }
4555 }
4656
4757
48- if ( syncId === undefined ) {
49- const sync = await komodo . api . write ( 'CreateResourceSync' , {
50- name : syncName ,
51- config : {
52- include_resources : true ,
53- file_contents : toml
54- }
55- } ) ;
56- syncId = sync . _id . $oid ;
57- logger . info ( 'Resource Sync created.' ) ;
58- } else {
59- if ( existingBehavior === 'overwrite' ) {
60- const sync = await komodo . api . write ( 'UpdateResourceSync' , {
61- id : syncId ,
58+ try {
59+
60+
61+ if ( syncId === undefined ) {
62+ logger . debug ( 'Trying to create Sync via API...' ) ;
63+ const sync = await komodo . api . write ( 'CreateResourceSync' , {
64+ name : syncName ,
6265 config : {
6366 include_resources : true ,
6467 file_contents : toml
6568 }
6669 } ) ;
67- logger . info ( 'Resource Sync overwrriten.' ) ;
70+ syncId = sync . _id . $oid ;
71+ logger . info ( 'Resource Sync created.' ) ;
6872 } else {
69- const time = dayjs ( ) . format ( 'YYYY-MM-DD--HH-mm-ss' ) ;
70- const sync = await komodo . api . write ( 'UpdateResourceSync' , {
71- id : syncId ,
72- config : {
73- include_resources : true ,
74- file_contents : stripIndents `${ existingSync . config . file_contents }
73+ if ( existingBehavior === 'overwrite' ) {
74+ logger . debug ( 'Trying to overwrite existing Sync via API...' ) ;
75+ const sync = await komodo . api . write ( 'UpdateResourceSync' , {
76+ id : syncId ,
77+ config : {
78+ include_resources : true ,
79+ file_contents : toml
80+ }
81+ } ) ;
82+ logger . info ( 'Resource Sync overwritten.' ) ;
83+ } else {
84+ logger . debug ( 'Trying to append to existing Sync via API...' ) ;
85+ const time = dayjs ( ) . format ( 'YYYY-MM-DD--HH-mm-ss' ) ;
86+ const sync = await komodo . api . write ( 'UpdateResourceSync' , {
87+ id : syncId ,
88+ config : {
89+ include_resources : true ,
90+ file_contents : stripIndents `${ existingSync . config . file_contents }
7591
7692 ## Added by Komodo Import ${ time }
7793
7894 ${ toml }
7995
8096 ##`
81- }
82- } ) ;
83- logger . info ( 'Resource Sync appended.' ) ;
97+ }
98+ } ) ;
99+ logger . info ( 'Resource Sync appended.' ) ;
100+ }
101+ }
102+ } catch ( e ) {
103+ if ( asKomodoApiErrorResponse ( e ) ) {
104+ throw new Error ( 'Unexpected error from Komodo API while writing Sync' , { cause : new KomodoApiError ( e ) } ) ;
105+ } else {
106+ throw new Error ( 'Unexpected error while trying to write to Sync' , { cause : e } ) ;
84107 }
85108 }
86109
@@ -89,13 +112,7 @@ export const exportToSync = async (toml: string, parentLogger: Logger): Promise<
89112 logger . info ( `Resource Sync URL: ${ syncUrl } ` ) ;
90113 }
91114 catch ( e ) {
92- let hint : string ;
93- switch ( e . result ?. error ) {
94- case 'Must provide unique name for resource.' :
95- hint = 'Sync already exists! Use a different name.'
96- break ;
97- }
98- throw new Error ( `Komodo API error occurred while trying to export to Resource Sync${ hint !== undefined ? `. Hint: ${ hint } ` : '' } ` , { cause : e } ) ;
115+ throw new Error ( `Error occurred while trying to export to Resource Sync` , { cause : e } ) ;
99116 }
100117 } else if ( isDebugMode ( ) ) {
101118 logger . debug ( 'Not exporting to Resource Sync because env KOMODO_URL was not defined.' ) ;
0 commit comments