From 7a573d4e0e425fbee836d830fd10103ddbfc848c Mon Sep 17 00:00:00 2001
From: Killian Courvoisier <killian.courvoisier@cozycloud.cc>
Date: Wed, 24 Jul 2024 15:53:56 +0200
Subject: [PATCH 1/7] feat: Add shouldFullSync function

---
 .../src/contentscript/ContentScript.js        | 62 ++++++++++++++++++-
 1 file changed, 61 insertions(+), 1 deletion(-)

diff --git a/packages/cozy-clisk/src/contentscript/ContentScript.js b/packages/cozy-clisk/src/contentscript/ContentScript.js
index 1e659ec8e..2e73c2ad4 100644
--- a/packages/cozy-clisk/src/contentscript/ContentScript.js
+++ b/packages/cozy-clisk/src/contentscript/ContentScript.js
@@ -100,6 +100,7 @@ export default class ContentScript {
         suffixFn: args => args?.[0]
       }
     )
+    this.shouldFullSync = wrapTimerDebug(this, 'shouldFullSync')
 
     if (options.requestInterceptor) {
       this.requestInterceptor = options.requestInterceptor
@@ -136,7 +137,8 @@ export default class ContentScript {
       'getDebugData',
       'getCliskVersion',
       'checkForElement',
-      'evaluate'
+      'evaluate',
+      'shouldFullSync'
     ]
 
     if (options.additionalExposedMethodsNames) {
@@ -923,6 +925,57 @@ export default class ContentScript {
     }
   }
 
+  /**
+   * Determine if the konnector must fetch all or parts of the data.
+   *
+   * @param {object} options - All the data already fetched by the connector in a previous execution.
+   *                                   Useful to optimize connector execution by not fetching data we already have.
+   * @returns {Promise<object>} - Promise that resolves to an object with the following properties:
+   * @property {boolean} shouldFullSync - Indicates if a full synchronization is needed.
+   * @property {number|NaN} distanceInDays - The number of days since the last sync, or NaN if not applicable.
+   */
+
+  async shouldFullSync(options) {
+    this.onlyIn(PILOT_TYPE, 'shouldFullSync')
+    const { trigger, flags } = options
+    let forceFullSync = false
+    let userFullSync = false
+    if (flags['clisk.force-full-sync'] === true) {
+      this.log('info', 'User forces full sync')
+      userFullSync = true
+    }
+    const isFirstJob =
+      !trigger.current_state?.last_failure &&
+      !trigger.current_state?.last_success
+    const isLastJobError =
+      !isFirstJob &&
+      trigger.current_state?.last_failure > trigger.current_state?.last_success
+    const hasLastExecution = Boolean(trigger.current_state?.last_execution)
+    let distanceInDays = 0
+    if (hasLastExecution) {
+      distanceInDays = getDateDistanceInDays(
+        trigger.current_state?.last_execution
+      )
+    }
+    this.log('debug', `distanceInDays: ${distanceInDays}`)
+    if (
+      userFullSync ||
+      !hasLastExecution ||
+      isLastJobError ||
+      distanceInDays >= 30
+    ) {
+      this.log('info', '🐢️ Long execution')
+      this.log(
+        'debug',
+        `isLastJobError: ${isLastJobError} | hasLastExecution: ${hasLastExecution}`
+      )
+      forceFullSync = true
+    } else {
+      this.log('info', '🐇️ Quick execution')
+    }
+    return { forceFullSync, distanceInDays }
+  }
+
   /**
    * Main function, fetches all connector data and save it to the cozy
    *
@@ -951,3 +1004,10 @@ function sendPageMessage(message) {
     log.error('No window.ReactNativeWebView.postMessage available')
   }
 }
+
+function getDateDistanceInDays(dateString) {
+  const distanceMs = Date.now() - new Date(dateString).getTime()
+  const days = 1000 * 60 * 60 * 24
+
+  return Math.floor(distanceMs / days)
+}

From df6ba20af6073ce5f0ff5e83178854c34c301d68 Mon Sep 17 00:00:00 2001
From: Killian Courvoisier <killian.courvoisier@cozycloud.cc>
Date: Wed, 24 Jul 2024 15:54:33 +0200
Subject: [PATCH 2/7] feat: Add shouldFullSync UTs

---
 .../src/contentscript/ContentScript.spec.js   | 87 ++++++++++++++++++-
 1 file changed, 86 insertions(+), 1 deletion(-)

diff --git a/packages/cozy-clisk/src/contentscript/ContentScript.spec.js b/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
index 19c92d61b..dfbe910f1 100644
--- a/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
+++ b/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
@@ -168,7 +168,6 @@ describe('ContentScript', () => {
       )
     })
   })
-
   describe('runInWorkerUntilTrue', () => {
     const contentScript = new ContentScript()
     contentScript.contentScriptType = PILOT_TYPE
@@ -200,4 +199,90 @@ describe('ContentScript', () => {
       ).rejects.toThrow('Timeout error')
     })
   })
+  describe('shouldFullSync', () => {
+    it('should force full sync => Flag', async () => {
+      const contentScript = new ContentScript()
+      contentScript.contentScriptType = PILOT_TYPE
+
+      const options = {
+        flags: {
+          'clisk.force-full-sync': true
+        },
+        trigger: {
+          current_state: {
+            last_execution: '2024-07-24T14:55:57.83761233+02:00',
+            last_failure: '2024-07-23T14:55:57.83761233+02:00',
+            last_success: '2024-07-24T14:55:57.83761233+02:00'
+          }
+        }
+      }
+      const result = await contentScript.shouldFullSync(options)
+      expect(result).toEqual({
+        forceFullSync: true,
+        distanceInDays: 0
+      })
+    })
+    it('should force full sync => First execution', async () => {
+      const contentScript = new ContentScript()
+      contentScript.contentScriptType = PILOT_TYPE
+
+      const options = {
+        flags: {
+          'clisk.force-full-sync': false
+        },
+        trigger: {
+          current_state: {}
+        }
+      }
+      const result = await contentScript.shouldFullSync(options)
+      expect(result).toEqual({
+        forceFullSync: true,
+        distanceInDays: 0
+      })
+    })
+    it('should force full sync => Last execution failed', async () => {
+      const contentScript = new ContentScript()
+      contentScript.contentScriptType = PILOT_TYPE
+
+      const options = {
+        flags: {
+          'clisk.force-full-sync': false
+        },
+        trigger: {
+          current_state: {
+            last_execution: '2024-07-24T14:55:57.83761233+02:00',
+            last_failure: '2024-07-24T14:55:57.83761233+02:00',
+            last_success: '2024-07-23T14:55:57.83761233+02:00'
+          }
+        }
+      }
+      const result = await contentScript.shouldFullSync(options)
+      expect(result).toEqual({
+        forceFullSync: true,
+        distanceInDays: 0
+      })
+    })
+    it('should not force full sync', async () => {
+      const contentScript = new ContentScript()
+      contentScript.contentScriptType = PILOT_TYPE
+
+      const options = {
+        flags: {
+          'clisk.force-full-sync': false
+        },
+        trigger: {
+          current_state: {
+            last_execution: '2024-07-24T14:55:57.83761233+02:00',
+            last_failure: '2024-07-23T14:55:57.83761233+02:00',
+            last_success: '2024-07-24T14:55:57.83761233+02:00'
+          }
+        }
+      }
+      const result = await contentScript.shouldFullSync(options)
+      expect(result).toEqual({
+        forceFullSync: false,
+        distanceInDays: 0
+      })
+    })
+  })
 })

From e0f0eee17ea9f1dce799f62f3db6ef49ec48caa2 Mon Sep 17 00:00:00 2001
From: Killian Courvoisier <killian.courvoisier@cozycloud.cc>
Date: Thu, 25 Jul 2024 10:30:48 +0200
Subject: [PATCH 3/7] fix: Small renaming and corrections after review

---
 .../cozy-clisk/src/contentscript/ContentScript.js     | 11 ++++-------
 .../src/contentscript/ContentScript.spec.js           |  8 ++++----
 2 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/packages/cozy-clisk/src/contentscript/ContentScript.js b/packages/cozy-clisk/src/contentscript/ContentScript.js
index 2e73c2ad4..eb12dc81d 100644
--- a/packages/cozy-clisk/src/contentscript/ContentScript.js
+++ b/packages/cozy-clisk/src/contentscript/ContentScript.js
@@ -100,8 +100,6 @@ export default class ContentScript {
         suffixFn: args => args?.[0]
       }
     )
-    this.shouldFullSync = wrapTimerDebug(this, 'shouldFullSync')
-
     if (options.requestInterceptor) {
       this.requestInterceptor = options.requestInterceptor
       this.requestInterceptor.setLogger(this.log.bind(this))
@@ -137,8 +135,7 @@ export default class ContentScript {
       'getDebugData',
       'getCliskVersion',
       'checkForElement',
-      'evaluate',
-      'shouldFullSync'
+      'evaluate'
     ]
 
     if (options.additionalExposedMethodsNames) {
@@ -939,10 +936,10 @@ export default class ContentScript {
     this.onlyIn(PILOT_TYPE, 'shouldFullSync')
     const { trigger, flags } = options
     let forceFullSync = false
-    let userFullSync = false
+    let flagFullSync = false
     if (flags['clisk.force-full-sync'] === true) {
       this.log('info', 'User forces full sync')
-      userFullSync = true
+      flagFullSync = true
     }
     const isFirstJob =
       !trigger.current_state?.last_failure &&
@@ -959,7 +956,7 @@ export default class ContentScript {
     }
     this.log('debug', `distanceInDays: ${distanceInDays}`)
     if (
-      userFullSync ||
+      flagFullSync ||
       !hasLastExecution ||
       isLastJobError ||
       distanceInDays >= 30
diff --git a/packages/cozy-clisk/src/contentscript/ContentScript.spec.js b/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
index dfbe910f1..d4146ef29 100644
--- a/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
+++ b/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
@@ -200,7 +200,7 @@ describe('ContentScript', () => {
     })
   })
   describe('shouldFullSync', () => {
-    it('should force full sync => Flag', async () => {
+    it('should force full sync if forceFullSync flag is activated', async () => {
       const contentScript = new ContentScript()
       contentScript.contentScriptType = PILOT_TYPE
 
@@ -222,7 +222,7 @@ describe('ContentScript', () => {
         distanceInDays: 0
       })
     })
-    it('should force full sync => First execution', async () => {
+    it('should force full sync if it is the first execution', async () => {
       const contentScript = new ContentScript()
       contentScript.contentScriptType = PILOT_TYPE
 
@@ -240,7 +240,7 @@ describe('ContentScript', () => {
         distanceInDays: 0
       })
     })
-    it('should force full sync => Last execution failed', async () => {
+    it('should force full sync if the last execution failed', async () => {
       const contentScript = new ContentScript()
       contentScript.contentScriptType = PILOT_TYPE
 
@@ -262,7 +262,7 @@ describe('ContentScript', () => {
         distanceInDays: 0
       })
     })
-    it('should not force full sync', async () => {
+    it('should not force full sync in nominal case', async () => {
       const contentScript = new ContentScript()
       contentScript.contentScriptType = PILOT_TYPE
 

From 40d3391f81dcd2c1315834b030aa73da7ce1d13f Mon Sep 17 00:00:00 2001
From: Killian Courvoisier <killian.courvoisier@cozycloud.cc>
Date: Fri, 26 Jul 2024 15:43:20 +0200
Subject: [PATCH 4/7] fix: Mock date of the day for shouldFullSync

---
 .../cozy-clisk/src/contentscript/ContentScript.spec.js     | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/packages/cozy-clisk/src/contentscript/ContentScript.spec.js b/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
index d4146ef29..4aa1c0fea 100644
--- a/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
+++ b/packages/cozy-clisk/src/contentscript/ContentScript.spec.js
@@ -200,6 +200,13 @@ describe('ContentScript', () => {
     })
   })
   describe('shouldFullSync', () => {
+    const fixedDate = new Date('2024-07-24T14:55:57.83761233+02:00').getTime()
+    beforeAll(() => {
+      jest.spyOn(Date, 'now').mockImplementation(() => fixedDate)
+    })
+    afterAll(() => {
+      jest.restoreAllMocks()
+    })
     it('should force full sync if forceFullSync flag is activated', async () => {
       const contentScript = new ContentScript()
       contentScript.contentScriptType = PILOT_TYPE

From 8284c6c46d6c9ec8a18a724ca7ec55b117e1a740 Mon Sep 17 00:00:00 2001
From: Cozy Bot <npm@cozycloud.cc>
Date: Fri, 26 Jul 2024 13:54:33 +0000
Subject: [PATCH 5/7] [skip ci] Publish

 - cozy-clisk@0.38.0
---
 packages/cozy-clisk/CHANGELOG.md | 18 ++++++++++++++++++
 packages/cozy-clisk/package.json |  2 +-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/packages/cozy-clisk/CHANGELOG.md b/packages/cozy-clisk/CHANGELOG.md
index 39b358a03..7dcb3378f 100644
--- a/packages/cozy-clisk/CHANGELOG.md
+++ b/packages/cozy-clisk/CHANGELOG.md
@@ -3,6 +3,24 @@
 All notable changes to this project will be documented in this file.
 See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
 
+# [0.38.0](https://github.com/konnectors/libs/compare/cozy-clisk@0.37.0...cozy-clisk@0.38.0) (2024-07-26)
+
+
+### Bug Fixes
+
+* Mock date of the day for shouldFullSync ([40d3391](https://github.com/konnectors/libs/commit/40d3391f81dcd2c1315834b030aa73da7ce1d13f))
+* Small renaming and corrections after review ([e0f0eee](https://github.com/konnectors/libs/commit/e0f0eee17ea9f1dce799f62f3db6ef49ec48caa2))
+
+
+### Features
+
+* Add shouldFullSync function ([7a573d4](https://github.com/konnectors/libs/commit/7a573d4e0e425fbee836d830fd10103ddbfc848c))
+* Add shouldFullSync UTs ([df6ba20](https://github.com/konnectors/libs/commit/df6ba20af6073ce5f0ff5e83178854c34c301d68))
+
+
+
+
+
 # [0.37.0](https://github.com/konnectors/libs/compare/cozy-clisk@0.36.1...cozy-clisk@0.37.0) (2024-06-17)
 
 
diff --git a/packages/cozy-clisk/package.json b/packages/cozy-clisk/package.json
index 27021b727..558ef3a25 100644
--- a/packages/cozy-clisk/package.json
+++ b/packages/cozy-clisk/package.json
@@ -1,6 +1,6 @@
 {
   "name": "cozy-clisk",
-  "version": "0.37.0",
+  "version": "0.38.0",
   "description": "All the libs needed to run a cozy client connector",
   "repository": {
     "type": "git",

From 443e52478c4facc0e288f564d2acbc66435abaa2 Mon Sep 17 00:00:00 2001
From: doubleface <christophe@cozycloud.cc>
Date: Tue, 21 May 2024 17:21:35 +0200
Subject: [PATCH 6/7] fix: Explicitely use node-fetch 2.7.0

To avoid node-fetch bug with node 20 : "socket hang up" / ECONNRESET on
consecutive requests with Node.js 19 and Node.js 20
---
 packages/cozy-konnector-libs/package.json |  2 +-
 yarn.lock                                 | 33 ++++++++++++++++++++---
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/packages/cozy-konnector-libs/package.json b/packages/cozy-konnector-libs/package.json
index 7bf2fb28b..656f6cb79 100644
--- a/packages/cozy-konnector-libs/package.json
+++ b/packages/cozy-konnector-libs/package.json
@@ -38,7 +38,7 @@
     "lodash-id": "^0.14.0",
     "lowdb": "^1.0.0",
     "mime-types": "^2.1.31",
-    "node-fetch": "^2.6.1",
+    "node-fetch": "^2.7.0",
     "raven": "^2.6.4",
     "raw-body": "^2.4.1",
     "request": "^2.88.2",
diff --git a/yarn.lock b/yarn.lock
index cbf2016df..ecbe857e2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9088,7 +9088,7 @@ nock@^12.0.3:
     lodash "^4.17.13"
     propagate "^2.0.0"
 
-node-fetch@2.7.0, node-fetch@^2.0.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7:
+node-fetch@2.7.0, node-fetch@^2.0.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0:
   version "2.7.0"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
   integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
@@ -11310,7 +11310,7 @@ string-length@^4.0.1:
     char-regex "^1.0.2"
     strip-ansi "^6.0.0"
 
-"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0":
   version "4.2.3"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
   integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -11328,6 +11328,15 @@ string-width@^1.0.1:
     is-fullwidth-code-point "^1.0.0"
     strip-ansi "^3.0.0"
 
+"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
 string-width@^5.0.1, string-width@^5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
@@ -11403,7 +11412,7 @@ stringify-clone@^1.0.0:
   resolved "https://registry.yarnpkg.com/stringify-clone/-/stringify-clone-1.1.1.tgz#309a235fb4ecfccd7d388dbe18ba904facaf433b"
   integrity sha512-LIFpvBnQJF3ZGoV770s3feH+wRVCMRSisI8fl1E57WfgKOZKUMaC1r4eJXybwGgXZ/iTTJoK/tsOku1GLPyyxQ==
 
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
   integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -11417,6 +11426,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   dependencies:
     ansi-regex "^2.0.0"
 
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
 strip-ansi@^7.0.1:
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -12613,7 +12629,16 @@ wordwrapjs@^3.0.0:
     reduce-flatten "^1.0.1"
     typical "^2.6.1"
 
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
   integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==

From bc376a88dfd81f4b722fc717d458cbdc8ec69bb5 Mon Sep 17 00:00:00 2001
From: Cozy Bot <npm@cozycloud.cc>
Date: Tue, 17 Sep 2024 07:24:56 +0000
Subject: [PATCH 7/7] [skip ci] Publish

 - cozy-jobs-cli@2.4.4
 - cozy-konnector-libs@5.12.1
---
 packages/cozy-jobs-cli/CHANGELOG.md       |  8 ++++++++
 packages/cozy-jobs-cli/package.json       |  4 ++--
 packages/cozy-konnector-libs/CHANGELOG.md | 11 +++++++++++
 packages/cozy-konnector-libs/package.json |  2 +-
 4 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/packages/cozy-jobs-cli/CHANGELOG.md b/packages/cozy-jobs-cli/CHANGELOG.md
index c7bc8bbc1..f4cd00d04 100644
--- a/packages/cozy-jobs-cli/CHANGELOG.md
+++ b/packages/cozy-jobs-cli/CHANGELOG.md
@@ -3,6 +3,14 @@
 All notable changes to this project will be documented in this file.
 See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
 
+## [2.4.4](https://github.com/cozy/cozy-konnector-libs/compare/cozy-jobs-cli@2.4.3...cozy-jobs-cli@2.4.4) (2024-09-17)
+
+**Note:** Version bump only for package cozy-jobs-cli
+
+
+
+
+
 ## [2.4.3](https://github.com/cozy/cozy-konnector-libs/compare/cozy-jobs-cli@2.4.2...cozy-jobs-cli@2.4.3) (2024-07-18)
 
 **Note:** Version bump only for package cozy-jobs-cli
diff --git a/packages/cozy-jobs-cli/package.json b/packages/cozy-jobs-cli/package.json
index 0c8c9ffa3..1b3c067f7 100644
--- a/packages/cozy-jobs-cli/package.json
+++ b/packages/cozy-jobs-cli/package.json
@@ -1,6 +1,6 @@
 {
   "name": "cozy-jobs-cli",
-  "version": "2.4.3",
+  "version": "2.4.4",
   "description": "Manage cozy jobs",
   "main": "index.js",
   "repository": {
@@ -29,7 +29,7 @@
     "cozy-client": "45.14.1",
     "cozy-device-helper": "^2.1.0",
     "cozy-flags": "^2.8.7",
-    "cozy-konnector-libs": "^5.12.0",
+    "cozy-konnector-libs": "^5.12.1",
     "cozy-logger": "1.9.0",
     "node-fetch": "2.7.0",
     "open": "8.4.0",
diff --git a/packages/cozy-konnector-libs/CHANGELOG.md b/packages/cozy-konnector-libs/CHANGELOG.md
index a4ff6f028..1a484823b 100644
--- a/packages/cozy-konnector-libs/CHANGELOG.md
+++ b/packages/cozy-konnector-libs/CHANGELOG.md
@@ -3,6 +3,17 @@
 All notable changes to this project will be documented in this file.
 See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
 
+## [5.12.1](https://github.com/cozy/cozy-konnector-libs/compare/cozy-konnector-libs@5.12.0...cozy-konnector-libs@5.12.1) (2024-09-17)
+
+
+### Bug Fixes
+
+* Explicitely use node-fetch 2.7.0 ([443e524](https://github.com/cozy/cozy-konnector-libs/commit/443e52478c4facc0e288f564d2acbc66435abaa2))
+
+
+
+
+
 # [5.12.0](https://github.com/cozy/cozy-konnector-libs/compare/cozy-konnector-libs@5.11.0...cozy-konnector-libs@5.12.0) (2024-07-18)
 
 
diff --git a/packages/cozy-konnector-libs/package.json b/packages/cozy-konnector-libs/package.json
index 656f6cb79..720e6fb3f 100644
--- a/packages/cozy-konnector-libs/package.json
+++ b/packages/cozy-konnector-libs/package.json
@@ -1,6 +1,6 @@
 {
   "name": "cozy-konnector-libs",
-  "version": "5.12.0",
+  "version": "5.12.1",
   "description": "All the libs needed by a cozy v3 konnector",
   "main": "dist/index.js",
   "repository": {