From fcba29c4d2d8ad6290e82165333549f0cf576acd Mon Sep 17 00:00:00 2001 From: Greg Methvin Date: Wed, 8 Jul 2026 20:06:07 -0700 Subject: [PATCH] Update api client 0.12.0 catalog bulk commands --- COMMANDS.md | 33 +++++++++++++++++-------- package.json | 5 ++-- pnpm-lock.yaml | 48 ++++++++++++++++++------------------- src/commands/catalogs.ts | 19 +++++++++++---- tests/unit/commands.test.ts | 3 ++- 5 files changed, 66 insertions(+), 42 deletions(-) diff --git a/COMMANDS.md b/COMMANDS.md index 790146c..c53e6ad 100644 --- a/COMMANDS.md +++ b/COMMANDS.md @@ -1,4 +1,4 @@ -# Available Commands (110) +# Available Commands (111) All commands follow the pattern: `iterable [options]` @@ -197,7 +197,7 @@ iterable campaigns trigger --campaignId --listIds | `--suppressionListIds` | number[] | no | Lists to suppress | -## catalogs (12) +## catalogs (13) ### bulk-delete-items @@ -317,6 +317,19 @@ iterable catalogs partial-update-item --catalogName --itemId --documents +``` + +| Option | Type | Required | Description | +|--------|------|----------|-------------| +| `catalogName` | string | **yes** | Name of the catalog | +| `--documents` | json | **yes** | Map of catalog item ID to field values | + ### replace-item Replace (PUT) a catalog item - replaces the entire item with new value @@ -331,31 +344,31 @@ iterable catalogs replace-item --catalogName --itemId --v | `--itemId` | string | **yes** | ID of the catalog item | | `--value` | json | **yes** | New value for the item | -### update-field-mappings +### replace-items -Update catalog field mappings (data types) +Bulk replace catalog items (each item becomes only provided fields) ``` -iterable catalogs update-field-mappings --mappingsUpdates +iterable catalogs replace-items --documents ``` | Option | Type | Required | Description | |--------|------|----------|-------------| | `catalogName` | string | **yes** | Name of the catalog | -| `--mappingsUpdates` | string[] | **yes** | Field mappings to update | +| `--documents` | json | **yes** | Map of catalog item ID to field values | -### update-items +### update-field-mappings -Update catalog items +Update catalog field mappings (data types) ``` -iterable catalogs update-items --items +iterable catalogs update-field-mappings --mappingsUpdates ``` | Option | Type | Required | Description | |--------|------|----------|-------------| | `catalogName` | string | **yes** | Name of the catalog | -| `--items` | json[] | **yes** | Catalog items to update | +| `--mappingsUpdates` | string[] | **yes** | Field mappings to update | ## events (4) diff --git a/package.json b/package.json index a4d9a92..542d928 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "minimumReleaseAge": 4320, "minimumReleaseAgeExclude": [ "@iterable/*" - ] + ], + "overrides": {} }, "scripts": { "build": "pnpm format && pnpm lint:fix && tsc --project tsconfig.build.json && pnpm update-commands && chmod +x dist/index.js", @@ -59,7 +60,7 @@ "update-commands": "node scripts/update-commands.js" }, "dependencies": { - "@iterable/api": "0.11.1", + "@iterable/api": "0.12.0", "@primno/dpapi": "2.0.1", "boxen": "8.0.1", "chalk": "5.6.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3eaff0..b1c3732 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@iterable/api': - specifier: 0.11.1 - version: 0.11.1(typescript@6.0.2) + specifier: 0.12.0 + version: 0.12.0(typescript@6.0.2) '@primno/dpapi': specifier: 2.0.1 version: 2.0.1 @@ -641,8 +641,8 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@iterable/api@0.11.1': - resolution: {integrity: sha512-Srj7NcvnpDNNp5B75onkJyMkvFgtS01TIWVbTATZwegxZHlc99irlJZ3K3yPuP19AkEzEuRtcK1D90IZ4ZTVhw==} + '@iterable/api@0.12.0': + resolution: {integrity: sha512-EW4Uwbr1wWJ7sh5pi39b/U2aQvdQy62psu0ZMVqoO3j5lG1VegbOXD6FHM9FNuLRQAq8TuE5Gy9q/BKCIQHFrg==} engines: {node: '>=18.0.0'} '@jest/console@30.3.0': @@ -1407,8 +1407,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: @@ -1551,8 +1551,8 @@ packages: fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -1564,8 +1564,8 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} fs.realpath@1.0.0: @@ -1642,8 +1642,8 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} html-escaper@2.0.2: @@ -2914,7 +2914,7 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@iterable/api@0.11.1(typescript@6.0.2)': + '@iterable/api@0.12.0(typescript@6.0.2)': dependencies: '@t3-oss/env-core': 0.13.11(typescript@6.0.2)(zod@4.3.6) axios: 1.13.6 @@ -3504,8 +3504,8 @@ snapshots: axios@1.13.6: dependencies: - follow-redirects: 1.15.11 - form-data: 4.0.5 + follow-redirects: 1.16.0 + form-data: 4.0.6 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -3741,7 +3741,7 @@ snapshots: es-errors@1.3.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -3750,7 +3750,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 esbuild@0.27.4: optionalDependencies: @@ -3929,19 +3929,19 @@ snapshots: fn.name@1.1.0: {} - follow-redirects@1.15.11: {} + follow-redirects@1.16.0: {} foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.5: + form-data@4.0.6: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.4 mime-types: 2.1.35 fs.realpath@1.0.0: {} @@ -3962,12 +3962,12 @@ snapshots: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-package-type@0.1.0: {} @@ -3975,7 +3975,7 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-stream@6.0.1: {} @@ -4017,7 +4017,7 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.2: + hasown@2.0.4: dependencies: function-bind: 1.1.2 diff --git a/src/commands/catalogs.ts b/src/commands/catalogs.ts index 03c2bce..0f3e93b 100644 --- a/src/commands/catalogs.ts +++ b/src/commands/catalogs.ts @@ -8,9 +8,10 @@ import { GetCatalogItemsParamsSchema, GetCatalogsParamsSchema, PartialUpdateCatalogItemParamsSchema, + PartialUpdateCatalogItemsParamsSchema, ReplaceCatalogItemParamsSchema, + ReplaceCatalogItemsParamsSchema, UpdateCatalogFieldMappingsParamsSchema, - UpdateCatalogItemParamsSchema, } from "@iterable/api"; import type { CommandDefinition } from "./types.js"; @@ -70,10 +71,18 @@ export const catalogCommands: CommandDefinition[] = [ }), defineCommand({ category: "catalogs", - name: "update-items", - description: "Update catalog items", - clientMethod: "updateCatalogItems", - schema: UpdateCatalogItemParamsSchema, + name: "partial-update-items", + description: "Bulk partial update catalog items (merge fields per item ID)", + clientMethod: "partialUpdateCatalogItems", + schema: PartialUpdateCatalogItemsParamsSchema, + }), + defineCommand({ + category: "catalogs", + name: "replace-items", + description: + "Bulk replace catalog items (each item becomes only provided fields)", + clientMethod: "replaceCatalogItems", + schema: ReplaceCatalogItemsParamsSchema, }), defineCommand({ category: "catalogs", diff --git a/tests/unit/commands.test.ts b/tests/unit/commands.test.ts index dcd5c12..b524f57 100644 --- a/tests/unit/commands.test.ts +++ b/tests/unit/commands.test.ts @@ -31,9 +31,10 @@ const EXPECTED_COMMANDS = [ "catalogs:get-items", "catalogs:list", "catalogs:partial-update-item", + "catalogs:partial-update-items", "catalogs:replace-item", + "catalogs:replace-items", "catalogs:update-field-mappings", - "catalogs:update-items", "events:get-by-email", "events:get-by-userid", "events:track",