Skip to content

Commit 6744e15

Browse files
committed
Fixed issue for import skipping webhooks more than 5
1 parent 903418f commit 6744e15

13 files changed

Lines changed: 114 additions & 133 deletions

File tree

.talismanrc

Lines changed: 4 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,6 @@
11
fileignoreconfig:
2-
- filename: packages/contentstack-migrate-rte/test/dummy/expectedEntriesResponse.json
3-
checksum: a2784a3cb21780434958478d478dcb91d2d9a3a8025567d90fe8d74e9141b052
4-
- filename: packages/contentstack-migrate-rte/test/dummy/entriesResponse.json
5-
checksum: 691f3dcfbbcf69fd21e109a0d7003bdb500af2d0253bb7d7e8a0636d8f2a58f4
6-
- filename: pnpm-lock.yaml
7-
checksum: e0fb4541c1f31354c8899eba61bc579942a4c1057658973b4691c2890c98ff93
8-
- filename: packages/contentstack-bulk-operations/src/utils/bulk-publish-url-generator.ts
9-
checksum: 052d811adb5da9bac8c70e5b3dc4ddf700d5aea274dd2aa90a2df374118fbd26
10-
- filename: packages/contentstack-bulk-operations/src/utils/client.ts
11-
checksum: efdada21291db6d66e3114b7408163dee4cafe6ddb3904f02aa67140a1a89bb6
12-
- filename: packages/contentstack-bulk-operations/test/unit/core/index.test.ts
13-
checksum: 0d789258f5a9664e8a7dc5f5b23da846d0eaf8c52638ff20fb1f26104d3f9f8d
14-
- filename: packages/contentstack-migrate-rte/README.md
15-
checksum: 3810817d905405de86814af35fc0f0a6712cacd70f43223869b4f0599b6e579c
16-
- filename: packages/contentstack-bulk-operations/test/unit/messages/index.test.ts
17-
checksum: e86e76db4f4afc899ae2a4742627a71a7d227a7139014361b9d83de6154b3c7a
18-
- filename: packages/contentstack-bulk-operations/test/unit/base-bulk-command.test.ts
19-
checksum: 18684a596707865e671f1ee57b4819cb3f4b4f2633d6c49f7f4b6ce09391359f
20-
- filename: packages/contentstack-bulk-operations/src/base-bulk-command.ts
21-
checksum: 34907f0e00c40096cbe517b680a24fdf57caac351e45bc44b96e41987e619b67
22-
- filename: packages/contentstack-bulk-operations/test/unit/services/index.test.ts
23-
checksum: aae62ba072551bedf869ec7b1f6bf90238bc039336f37e7c583da8ba0637f9be
24-
- filename: packages/contentstack-bulk-operations/test/unit/utils/bulk-operation-log-handler.test.ts
25-
checksum: cec7ba35157c6516d67931d41deb57b7a156d9fc05dbab93ca5116e89b95c820
26-
- filename: packages/contentstack-bulk-operations/test/unit/utils/client.test.ts
27-
checksum: 178611b1f153b46a0020da22cc18293d5bd9c539ec2e54557fd8c1a3c2e796b3
28-
- filename: packages/contentstack-bulk-operations/test/unit/services/taxonomy-service.test.ts
29-
checksum: 33af8ee198158dd92916d76207e172b5316864d063a6929526ca259b459ec79a
30-
- filename: packages/contentstack-cli-tsgen/src/commands/tsgen.ts
31-
checksum: 054ea78f765edca62c785714cf8962df4fb91529c0851439d1ed61e963467408
32-
- filename: packages/contentstack-cli-cm-regex-validate/messages/index.json
33-
checksum: 044b311bde624dcc3c12434174d6027dbb6b62eefdfae120570a1748f806c60c
34-
- filename: packages/contentstack-cli-tsgen/AGENTS.md
35-
checksum: 75b4f1414b547d0bd83df5ed4fb80020acc0ed849619bed2639491b565be7a1b
36-
- filename: packages/contentstack-bulk-operations/eslint.config.js
37-
checksum: 0d93d7f660fe4cd6d62348c85ac10bf7c66018ea0b8e3e6d5a53419433f15867
38-
- filename: packages/contentstack-cli-cm-regex-validate/test/utils/connect-stack.test.ts
39-
checksum: 8fcd1dc2770a2a3f55ba462b7ffd3fc2e3cf45342c63e5b6dc5c1db4c2bd9738
40-
- filename: packages/contentstack-bulk-operations/test/unit/utils/validators.test.ts
41-
checksum: 69cf394584e325b972d6825879de7c31b9dd1bd50b0bb057aecb739258ac0317
42-
- filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-assets.test.ts
43-
checksum: c099c628c7ae1a40a9ca5580de0afa8309a611b2dff7837b10bb8f70eb92f8b3
44-
- filename: packages/contentstack-bulk-operations/test/unit/core/operation-executor.test.ts
45-
checksum: 97f0ddd4d547f37a8d93650aa1e8af4ef4dbce343dd51853e34bbde6107cd725
46-
- filename: packages/contentstack-cli-tsgen/src/lib/helper.ts
47-
checksum: a7ead0030ead9d15b6b6e9623f61e7def77b00325e3988f0e3d73a145180dedc
48-
- filename: packages/contentstack-migrate-rte/test/utils/index.js
49-
checksum: bc2a509a86174aecbaf0bfc44d6ad3afabe57ef871ec91b796d498e00177e3f0
50-
- filename: packages/contentstack-cli-cm-regex-validate/skills/code-review/SKILL.md
51-
checksum: b92ea1c8e2f901c9e1e60f6ef6986d348a40a7869c236e3c1f3ca53b553dbb8e
52-
- filename: packages/contentstack-migrate-rte/test/commands/json-migration.test.js
53-
checksum: 56e10f1e0d2794fa13bcf5a6bb3e868b28277df1762fb3df0a8a82ad44f8045b
54-
- filename: packages/contentstack-bulk-operations/test/unit/utils/interactive.test.ts
55-
checksum: 3ee0ff5a74929346bfe997aeb977b4e93d398ea63892efc5f85e0b51a21074f6
56-
- filename: packages/contentstack-bulk-operations/src/core/operation-executor.ts
57-
checksum: 46295f495f007ad291787133936c5af3c76838d72f2be0de9c235bb644d6f905
58-
- filename: packages/contentstack-bulk-operations/src/utils/batch-queue-handler.ts
59-
checksum: d1d031242b99f5c738e2f4587ca2f5f3e96373e479ebaf4d93b2f98152943593
60-
- filename: packages/contentstack-bulk-operations/src/messages/index.ts
61-
checksum: 2d904462af6dc3ddc00ae6bb4433c846500ddfecee5a9e1fb1c236bd598a2ee1
62-
- filename: packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js
63-
checksum: a069c50d5152022a0957d5f597158e2d8c74803b3d24ff6bbbe3b09f0e9053e2
64-
- filename: packages/contentstack-bulk-operations/test/unit/utils/config-builder.test.ts
65-
checksum: d46757d3bb98d76845e83d4585f269b62b1fa9cb5bee3215b88fed38fd1dbb53
66-
- filename: packages/contentstack-bulk-operations/src/utils/revert-retry-handler.ts
67-
checksum: 76899098d74de1dd20f1b08401c65f23b2bec584c051388e63f70f3d24a6d1a4
68-
- filename: packages/contentstack-bulk-operations/src/utils/interactive.ts
69-
checksum: ba4fdd6f17c7d43cae639158f82dea3065ba8a368ddce8c476bfe49a6945e5c1
70-
- filename: packages/contentstack-bulk-operations/test/unit/utils/taxonomy-interactive-select.test.ts
71-
checksum: 34a085702d01d7e16e1507ea1e434b374c2cba5dd884aad5996c5484412897c0
72-
- filename: packages/contentstack-bulk-operations/src/core/rate-limiter.ts
73-
checksum: 81e3d624166ab34a589e3e8527b9e57ebc7e7f4374efd0483b1df0dd11788b68
74-
- filename: packages/contentstack-bulk-operations/src/interfaces/index.ts
75-
checksum: 0ff6bbc372758a20783f36bd391ba9d500530433fde472a1aacaf54f6b4a1688
76-
- filename: packages/contentstack-bulk-operations/test/unit/utils/operation-confirmation.test.ts
77-
checksum: 043185e56361ffae2116a2af5a4da16986816ad054fd94f189269e5b6150609e
78-
- filename: packages/contentstack-cli-cm-regex-validate/skills/contentstack-cli/SKILL.md
79-
checksum: 9420a516ba6046b05748683c90e3817d091cef76c46e029cb3745d6c0c350838
80-
- filename: packages/contentstack-cli-cm-regex-validate/skills/dev-workflow/SKILL.md
81-
checksum: b423dd35d0f7f0f25315e2a30198669b50db350f0ab2f917a1d3c4fbb0af0534
82-
- filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-entries.test.ts
83-
checksum: 845512e660813a6d7d96efd89dcff6eba4591a3f9ff371dc9b1aad38921e18a6
84-
- filename: packages/contentstack-bulk-operations/test/unit/utils/revert-retry-handler.test.ts
85-
checksum: 078f9633edb53204ed14ebe3cf6b1d6063729dd37b7ee1c6e936a344ceabebda
86-
- filename: packages/contentstack-migrate-rte/src/lib/util/index.js
87-
checksum: 7d85f342c7fd7875713cebfae83f68d8592cc732a15cca48ddecbeae818cb4c5
88-
- filename: packages/contentstack-cli-cm-regex-validate/src/utils/connect-stack.ts
89-
checksum: c77c7c25efc6d043b26e3dd0a516e22ac50142fa9fa5ff3a53a7c9fb8f24ebd6
90-
- filename: packages/contentstack-bulk-operations/src/utils/config-builder.ts
91-
checksum: a7b5259ad719b8c5929f9fea3783bdc92610dc2549426204c1bb6813e7e1112a
92-
- filename: packages/contentstack-bulk-operations/README.md
93-
checksum: 169110e7c6159632f19dc16e17dcb5bac22e5d6880339b35ba076a2fe0d75266
94-
- filename: packages/contentstack-bulk-operations/test/unit/utils/batch-queue-handler.test.ts
95-
checksum: c91f1822b5cfd34a4f4ba05dfc56c10a66e0f5ddb55a1cf5b454fa9549ea0052
2+
- filename: packages/contentstack-import/src/import/modules/webhooks.ts
3+
checksum: 8c9527f966fe24debfb36d96a280ac3b2dd6494a58128380c69d7475e595436d
4+
- filename: packages/contentstack-import/test/unit/import/modules/webhooks.test.ts
5+
checksum: 3924a3e38211b8554f25365fe3100cb83361d03370fdaa77e5c7f9e74abafcee
966
version: '1.0'

packages/contentstack-bootstrap/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $ npm install -g @contentstack/cli-cm-bootstrap
1515
$ csdx COMMAND
1616
running command...
1717
$ csdx (--version)
18-
@contentstack/cli-cm-bootstrap/1.19.3 darwin-arm64 node-v24.14.0
18+
@contentstack/cli-cm-bootstrap/1.19.6 darwin-arm64 node-v24.14.0
1919
$ csdx --help [COMMAND]
2020
USAGE
2121
$ csdx COMMAND

packages/contentstack-bootstrap/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-cm-bootstrap",
33
"description": "Bootstrap contentstack apps",
4-
"version": "1.19.5",
4+
"version": "1.19.6",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"scripts": {
@@ -16,7 +16,7 @@
1616
"test:report": "nyc --reporter=lcov mocha \"test/**/*.test.js\""
1717
},
1818
"dependencies": {
19-
"@contentstack/cli-cm-seed": "~1.15.5",
19+
"@contentstack/cli-cm-seed": "~1.15.6",
2020
"@contentstack/cli-command": "~1.8.3",
2121
"@contentstack/cli-config": "~1.20.4",
2222
"@contentstack/cli-utilities": "~1.18.4",

packages/contentstack-clone/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ $ npm install -g @contentstack/cli-cm-clone
1616
$ csdx COMMAND
1717
running command...
1818
$ csdx (--version)
19-
@contentstack/cli-cm-clone/1.21.4 darwin-arm64 node-v24.14.0
19+
@contentstack/cli-cm-clone/1.21.7 darwin-arm64 node-v24.14.0
2020
$ csdx --help [COMMAND]
2121
USAGE
2222
$ csdx COMMAND

packages/contentstack-clone/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "@contentstack/cli-cm-clone",
33
"description": "Contentstack stack clone plugin",
4-
"version": "1.21.6",
4+
"version": "1.21.7",
55
"author": "Contentstack",
66
"bugs": "https://github.com/rohitmishra209/cli-cm-clone/issues",
77
"dependencies": {
88
"@colors/colors": "^1.6.0",
99
"@contentstack/cli-cm-export": "~1.25.1",
10-
"@contentstack/cli-cm-import": "~1.33.2",
10+
"@contentstack/cli-cm-import": "~1.33.3",
1111
"@contentstack/cli-command": "~1.8.3",
1212
"@contentstack/cli-utilities": "~1.18.4",
1313
"@oclif/core": "^4.11.4",

packages/contentstack-content-type/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ EXAMPLES
8585
$ csdx content-type:audit --alias "management token" --content-type "home_page"
8686
```
8787

88-
_See code: [src/commands/content-type/audit.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/audit.ts)_
88+
_See code: [src/commands/content-type/audit.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/audit.ts)_
8989

9090
## `csdx content-type:compare`
9191

@@ -115,7 +115,7 @@ EXAMPLES
115115
$ csdx content-type:compare --alias "management token" --content-type "home_page" --left # --right #
116116
```
117117

118-
_See code: [src/commands/content-type/compare.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/compare.ts)_
118+
_See code: [src/commands/content-type/compare.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/compare.ts)_
119119

120120
## `csdx content-type:compare-remote`
121121

@@ -137,7 +137,7 @@ EXAMPLES
137137
$ csdx content-type:compare-remote --origin-stack "xxxxxxxxxxxxxxxxxxx" --remote-stack "xxxxxxxxxxxxxxxxxxx" -content-type "home_page"
138138
```
139139

140-
_See code: [src/commands/content-type/compare-remote.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/compare-remote.ts)_
140+
_See code: [src/commands/content-type/compare-remote.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/compare-remote.ts)_
141141

142142
## `csdx content-type:details`
143143

@@ -166,7 +166,7 @@ EXAMPLES
166166
$ csdx content-type:details --alias "management token" --content-type "home_page" --no-path
167167
```
168168

169-
_See code: [src/commands/content-type/details.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/details.ts)_
169+
_See code: [src/commands/content-type/details.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/details.ts)_
170170

171171
## `csdx content-type:diagram`
172172

@@ -201,7 +201,7 @@ EXAMPLES
201201
$ csdx content-type:diagram --alias "management token" --output "content-model.dot" --type "dot"
202202
```
203203

204-
_See code: [src/commands/content-type/diagram.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/diagram.ts)_
204+
_See code: [src/commands/content-type/diagram.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/diagram.ts)_
205205

206206
## `csdx content-type:list`
207207

@@ -230,5 +230,5 @@ EXAMPLES
230230
$ csdx content-type:list --alias "management token" --order modified
231231
```
232232

233-
_See code: [src/commands/content-type/list.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/list.ts)_
233+
_See code: [src/commands/content-type/list.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/list.ts)_
234234
<!-- commandsstop -->

packages/contentstack-import/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ $ npm install -g @contentstack/cli-cm-import
4747
$ csdx COMMAND
4848
running command...
4949
$ csdx (--version)
50-
@contentstack/cli-cm-import/1.33.0 darwin-arm64 node-v24.14.0
50+
@contentstack/cli-cm-import/1.33.3 darwin-arm64 node-v24.14.0
5151
$ csdx --help [COMMAND]
5252
USAGE
5353
$ csdx COMMAND

packages/contentstack-import/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-cm-import",
33
"description": "Contentstack CLI plugin to import content into stack",
4-
"version": "1.33.2",
4+
"version": "1.33.3",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"dependencies": {

packages/contentstack-import/src/import/modules/webhooks.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import isEmpty from 'lodash/isEmpty';
2-
import values from 'lodash/values';
32
import { join } from 'node:path';
43
import { log, handleAndLogError } from '@contentstack/cli-utilities';
54

@@ -93,7 +92,16 @@ export default class ImportWebhooks extends BaseClass {
9392
return;
9493
}
9594

96-
const apiContent = values(this.webhooks);
95+
// Attach each webhook's UID (the JSON key) onto its body. Webhooks are keyed by
96+
// UID in webhooks.json, but the body may not carry a `uid` field. Deriving it from
97+
// the key keeps the dedup mapper keyed by a unique, defined UID — otherwise every
98+
// webhook collapses onto the same `undefined` key and gets falsely skipped as a
99+
// duplicate once the first one is created. The `uid` is stripped before the create
100+
// API call (see `omit(apiData, ['uid'])` in base-class), so this is import-only.
101+
const apiContent = Object.entries(this.webhooks).map(([uid, webhook]) => ({
102+
...(webhook as Record<string, unknown>),
103+
uid,
104+
}));
97105
log.debug(`Starting to import ${apiContent.length} webhooks`, this.importConfig.context);
98106

99107
const onSuccess = ({ response, apiData: { uid, name } = { uid: null, name: '' } }: any) => {

packages/contentstack-import/test/unit/import/modules/webhooks.test.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2887,4 +2887,70 @@ describe('ImportWebhooks - Simple Tests', () => {
28872887
expect((importWebhooks as any).failedWebhooks.length).to.equal(1);
28882888
});
28892889
});
2890+
2891+
describe('UID derivation from JSON key (regression)', () => {
2892+
it('attaches the JSON key as uid even when the webhook body has no uid', async () => {
2893+
// Mirrors the user's bundle: webhooks keyed by uid, but no `uid` in the body.
2894+
(importWebhooks as any).webhooks = {
2895+
'09Ah2QxtkCSKeIRCDYnfkF': { name: 'KB Revalidation' },
2896+
'6fikvC9O4jTp8LNMSV006u': { name: 'DT documentation revalidater' },
2897+
};
2898+
2899+
let captured: any[] = [];
2900+
sinon.stub(importWebhooks as any, 'makeConcurrentCall').callsFake(async (config: any) => {
2901+
captured = config.apiContent;
2902+
});
2903+
2904+
await (importWebhooks as any).importWebhooks();
2905+
2906+
expect(captured).to.have.length(2);
2907+
expect(captured[0].uid).to.equal('09Ah2QxtkCSKeIRCDYnfkF');
2908+
expect(captured[1].uid).to.equal('6fikvC9O4jTp8LNMSV006u');
2909+
// Distinct uids — not all collapsed onto a single `undefined` key.
2910+
expect(new Set(captured.map((w: any) => w.uid)).size).to.equal(2);
2911+
});
2912+
2913+
it('does not falsely skip later webhooks after the first is created', async () => {
2914+
// Bodies have no `uid`. Before the fix, the first success wrote
2915+
// webhookUidMapper["undefined"], so every later webhook was serialized as a
2916+
// "duplicate" and skipped. The fix keys the mapper by the unique JSON key.
2917+
(importWebhooks as any).webhooks = {
2918+
uidA: { name: 'Webhook A' },
2919+
uidB: { name: 'Webhook B' },
2920+
uidC: { name: 'Webhook C' },
2921+
};
2922+
2923+
// onSuccess persists the mapper via fsUtil.writeFile — stub the real write.
2924+
const utils = require('../../../../src/utils');
2925+
sinon.stub(utils.fsUtil, 'writeFile');
2926+
2927+
const created: string[] = [];
2928+
const skipped: string[] = [];
2929+
2930+
sinon.stub(importWebhooks as any, 'makeConcurrentCall').callsFake(async (config: any) => {
2931+
const { serializeData, resolve } = config.apiParams;
2932+
// Process sequentially so the first success writes the mapper BEFORE the
2933+
// next item is serialized — the exact ordering that triggered the bug.
2934+
for (const apiData of config.apiContent) {
2935+
const opts = serializeData({ apiData, entity: 'create-webhooks' });
2936+
if (opts.entity === undefined) {
2937+
skipped.push(apiData.name);
2938+
continue;
2939+
}
2940+
resolve({ response: { uid: `new-${apiData.uid}` }, apiData: opts.apiData });
2941+
created.push(apiData.name);
2942+
}
2943+
});
2944+
2945+
await (importWebhooks as any).importWebhooks();
2946+
2947+
expect(skipped).to.deep.equal([]); // none falsely skipped
2948+
expect(created).to.deep.equal(['Webhook A', 'Webhook B', 'Webhook C']);
2949+
expect((importWebhooks as any).webhookUidMapper).to.deep.equal({
2950+
uidA: 'new-uidA',
2951+
uidB: 'new-uidB',
2952+
uidC: 'new-uidC',
2953+
});
2954+
});
2955+
});
28902956
});

0 commit comments

Comments
 (0)