From 64e33d3edc39d5cd09c769d585785579df0106c6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:50:18 +0000 Subject: [PATCH 1/7] Initial plan From bf87fa0f0c2bc37f18f0ec050ffc33861aaa33cc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:55:08 +0000 Subject: [PATCH 2/7] Add TypeScript change feed sample (javascript/201-change-feed) Co-authored-by: seesharprun <5067401+seesharprun@users.noreply.github.com> --- javascript/.gitignore | 8 + javascript/201-change-feed/package-lock.json | 561 +++++++++++++++++++ javascript/201-change-feed/package.json | 18 + javascript/201-change-feed/readme.md | 43 ++ javascript/201-change-feed/src/index.ts | 84 +++ javascript/201-change-feed/tsconfig.json | 13 + 6 files changed, 727 insertions(+) create mode 100644 javascript/.gitignore create mode 100644 javascript/201-change-feed/package-lock.json create mode 100644 javascript/201-change-feed/package.json create mode 100644 javascript/201-change-feed/readme.md create mode 100644 javascript/201-change-feed/src/index.ts create mode 100644 javascript/201-change-feed/tsconfig.json diff --git a/javascript/.gitignore b/javascript/.gitignore new file mode 100644 index 0000000..ef888e5 --- /dev/null +++ b/javascript/.gitignore @@ -0,0 +1,8 @@ +# Dependency directory +node_modules/ + +# Build output +dist/ + +# env file +.env diff --git a/javascript/201-change-feed/package-lock.json b/javascript/201-change-feed/package-lock.json new file mode 100644 index 0000000..d192452 --- /dev/null +++ b/javascript/201-change-feed/package-lock.json @@ -0,0 +1,561 @@ +{ + "name": "cosmos-typescript-change-feed", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cosmos-typescript-change-feed", + "version": "1.0.0", + "dependencies": { + "@azure/cosmos": "^4.9.2" + }, + "devDependencies": { + "@types/node": "^22.13.10", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + } + }, + "node_modules/@azure-rest/core-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.5.1.tgz", + "integrity": "sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-http-compat": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.2.tgz", + "integrity": "sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@azure/core-client": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", + "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.23.0.tgz", + "integrity": "sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/cosmos": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-4.9.2.tgz", + "integrity": "sha512-g+n9GDm+N4iMPE3/ZfFClBvy33fE13oa60wJLKof05tEzcJF+4KsVNdjZkRNOTRBvpGGwD0CO/FGdxBuOb2+yg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-rest-pipeline": "^1.19.1", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/keyvault-keys": "^4.9.0", + "@azure/logger": "^1.1.4", + "fast-json-stable-stringify": "^2.1.0", + "priorityqueuejs": "^2.0.0", + "semaphore": "^1.1.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/keyvault-common": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz", + "integrity": "sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.5.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.10.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-keys": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.10.0.tgz", + "integrity": "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==", + "license": "MIT", + "dependencies": { + "@azure-rest/core-client": "^2.3.3", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-http-compat": "^2.2.0", + "@azure/core-lro": "^2.7.2", + "@azure/core-paging": "^1.6.2", + "@azure/core-rest-pipeline": "^1.19.0", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/keyvault-common": "^2.0.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", + "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.4.tgz", + "integrity": "sha512-CI0NhTrz4EBaa0U+HaaUZrJhPoso8sG7ZFya8uQoBA57fjzrjRSv87ekCjLZOFExN+gXE/z0xuN2QfH4H2HrLQ==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/priorityqueuejs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/priorityqueuejs/-/priorityqueuejs-2.0.0.tgz", + "integrity": "sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==", + "license": "MIT" + }, + "node_modules/semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/javascript/201-change-feed/package.json b/javascript/201-change-feed/package.json new file mode 100644 index 0000000..77a6673 --- /dev/null +++ b/javascript/201-change-feed/package.json @@ -0,0 +1,18 @@ +{ + "name": "cosmos-typescript-change-feed", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "tsc", + "start": "npx ts-node src/index.ts", + "test": "tsc --noEmit" + }, + "dependencies": { + "@azure/cosmos": "^4.9.2" + }, + "devDependencies": { + "@types/node": "^22.13.10", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + } +} diff --git a/javascript/201-change-feed/readme.md b/javascript/201-change-feed/readme.md new file mode 100644 index 0000000..f1d6ea2 --- /dev/null +++ b/javascript/201-change-feed/readme.md @@ -0,0 +1,43 @@ +# Change Feed with Azure Cosmos DB for NoSQL (TypeScript) + +This sample demonstrates how to read the **change feed** of an Azure Cosmos DB for NoSQL container using the Azure SDK for JavaScript/TypeScript. It upserts a set of items and then reads all changes from the beginning of the container's history using the change feed iterator. + +## Prerequisites + +- An [Azure subscription](https://azure.microsoft.com/free/) +- An Azure Cosmos DB for NoSQL account +- [Node.js 20+](https://nodejs.org/) + +## Run + +> [!IMPORTANT] +> These environment variables are set **only for the current terminal session** and do **not persist** after you close the window. + +### macOS / Linux + +```bash +export COSMOS_ENDPOINT="https://.documents.azure.com:443/" +export COSMOS_KEY="" +npm install +npm start +``` + +### Windows (PowerShell) + +```powershell +$Env:COSMOS_ENDPOINT="https://.documents.azure.com:443/" +$Env:COSMOS_KEY="" +npm install +npm start +``` + +You can find your endpoint and primary key in the Azure portal under your Cosmos DB account → **Keys**. + +## What this sample does + +1. Connects to Azure Cosmos DB using key-based authentication +2. Creates (or retrieves) the `cosmicworks` database +3. Creates (or retrieves) the `products` container partitioned by `/category` +4. Upserts two `Product` items to generate change feed events +5. Reads all changes from the **beginning** of the container's history using `getChangeFeedIterator` +6. Prints each changed item until the feed is caught up (`304 Not Modified`) diff --git a/javascript/201-change-feed/src/index.ts b/javascript/201-change-feed/src/index.ts new file mode 100644 index 0000000..f025754 --- /dev/null +++ b/javascript/201-change-feed/src/index.ts @@ -0,0 +1,84 @@ +import { CosmosClient, ChangeFeedStartFrom } from "@azure/cosmos"; + +interface Product { + id: string; + category: string; + name: string; + quantity: number; + sale: boolean; +} + +async function main(): Promise { + const endpoint = process.env.COSMOS_ENDPOINT; + if (!endpoint) { + throw new Error("COSMOS_ENDPOINT environment variable is not set."); + } + + const key = process.env.COSMOS_KEY; + if (!key) { + throw new Error("COSMOS_KEY environment variable is not set."); + } + + const client = new CosmosClient({ endpoint, key }); + + // Create or retrieve database + const { database } = await client.databases.createIfNotExists({ id: "cosmicworks" }); + console.log(`Database:\t${database.id}`); + + // Create or retrieve container + const { container } = await database.containers.createIfNotExists({ + id: "products", + partitionKey: { paths: ["/category"] }, + }); + console.log(`Container:\t${container.id}`); + + // Upsert items to generate change feed events + const products: Product[] = [ + { + id: "70b63682-b93a-4c77-aad2-65501347265f", + category: "gear-surf-surfboards", + name: "Yamba Surfboard", + quantity: 12, + sale: false, + }, + { + id: "25a68543-b90c-439d-8332-7ef41e06a0e0", + category: "gear-surf-surfboards", + name: "Kiama Classic Surfboard", + quantity: 25, + sale: true, + }, + ]; + + for (const product of products) { + await container.items.upsert(product); + console.log(`Upserted item:\t${product.id}`); + } + + // Read the change feed from the beginning of the container's history + console.log("\nReading change feed..."); + + const iterator = container.items.getChangeFeedIterator({ + changeFeedStartFrom: ChangeFeedStartFrom.Beginning(), + }); + + while (iterator.hasMoreResults) { + const { result, statusCode } = await iterator.readNext(); + + // 304 Not Modified means the feed is caught up — no new changes + if (statusCode === 304) { + break; + } + + for (const item of result) { + console.log(`Changed item:\t${item.id} | ${item.name} | Qty: ${item.quantity}`); + } + } + + console.log("\nChange feed complete."); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/javascript/201-change-feed/tsconfig.json b/javascript/201-change-feed/tsconfig.json new file mode 100644 index 0000000..3f39d5c --- /dev/null +++ b/javascript/201-change-feed/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*"] +} From 49687deeb36a280760d36ce182aaa8579e332b1e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:20:16 +0000 Subject: [PATCH 3/7] Address PR review: gitignore template, remove tsconfig, pin versions, top-level await Co-authored-by: seesharprun <5067401+seesharprun@users.noreply.github.com> --- javascript/.gitignore | 144 ++++++++++++++++++- javascript/201-change-feed/package-lock.json | 28 ++-- javascript/201-change-feed/package.json | 14 +- javascript/201-change-feed/src/index.ts | 113 +++++++-------- javascript/201-change-feed/tsconfig.json | 13 -- 5 files changed, 214 insertions(+), 98 deletions(-) delete mode 100644 javascript/201-change-feed/tsconfig.json diff --git a/javascript/.gitignore b/javascript/.gitignore index ef888e5..2aa8c99 100644 --- a/javascript/.gitignore +++ b/javascript/.gitignore @@ -1,8 +1,144 @@ -# Dependency directory +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache -# Build output -dist/ +# Optional stylelint cache +.stylelintcache -# env file +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files .env +.env.* +!.env.example + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist +.output + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Sveltekit cache directory +.svelte-kit/ + +# vitepress build output +**/.vitepress/dist + +# vitepress cache directory +**/.vitepress/cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# Firebase cache directory +.firebase/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# pnpm +.pnpm-store + +# yarn v3 +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +# Vite files +vite.config.js.timestamp-* +vite.config.ts.timestamp-* +.vite/ diff --git a/javascript/201-change-feed/package-lock.json b/javascript/201-change-feed/package-lock.json index d192452..dda5fa1 100644 --- a/javascript/201-change-feed/package-lock.json +++ b/javascript/201-change-feed/package-lock.json @@ -8,12 +8,12 @@ "name": "cosmos-typescript-change-feed", "version": "1.0.0", "dependencies": { - "@azure/cosmos": "^4.9.2" + "@azure/cosmos": "4.9.2" }, "devDependencies": { - "@types/node": "^22.13.10", - "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "@types/node": "22.13.10", + "ts-node": "10.9.2", + "typescript": "5.7.3" } }, "node_modules/@azure-rest/core-client": { @@ -311,13 +311,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~6.20.0" } }, "node_modules/@typespec/ts-http-runtime": { @@ -520,9 +520,9 @@ "license": "0BSD" }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -534,9 +534,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, diff --git a/javascript/201-change-feed/package.json b/javascript/201-change-feed/package.json index 77a6673..e6c8f10 100644 --- a/javascript/201-change-feed/package.json +++ b/javascript/201-change-feed/package.json @@ -2,17 +2,17 @@ "name": "cosmos-typescript-change-feed", "version": "1.0.0", "private": true, + "type": "module", "scripts": { - "build": "tsc", - "start": "npx ts-node src/index.ts", - "test": "tsc --noEmit" + "start": "node --loader ts-node/esm src/index.ts", + "test": "tsc --noEmit --target ES2022 --module NodeNext --moduleResolution NodeNext src/index.ts" }, "dependencies": { - "@azure/cosmos": "^4.9.2" + "@azure/cosmos": "4.9.2" }, "devDependencies": { - "@types/node": "^22.13.10", - "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "@types/node": "22.13.10", + "ts-node": "10.9.2", + "typescript": "5.7.3" } } diff --git a/javascript/201-change-feed/src/index.ts b/javascript/201-change-feed/src/index.ts index f025754..8bab3f7 100644 --- a/javascript/201-change-feed/src/index.ts +++ b/javascript/201-change-feed/src/index.ts @@ -8,77 +8,70 @@ interface Product { sale: boolean; } -async function main(): Promise { - const endpoint = process.env.COSMOS_ENDPOINT; - if (!endpoint) { - throw new Error("COSMOS_ENDPOINT environment variable is not set."); - } +const endpoint = process.env.COSMOS_ENDPOINT; +if (!endpoint) { + throw new Error("COSMOS_ENDPOINT environment variable is not set."); +} - const key = process.env.COSMOS_KEY; - if (!key) { - throw new Error("COSMOS_KEY environment variable is not set."); - } +const key = process.env.COSMOS_KEY; +if (!key) { + throw new Error("COSMOS_KEY environment variable is not set."); +} - const client = new CosmosClient({ endpoint, key }); +const client = new CosmosClient({ endpoint, key }); - // Create or retrieve database - const { database } = await client.databases.createIfNotExists({ id: "cosmicworks" }); - console.log(`Database:\t${database.id}`); +// Create or retrieve database +const { database } = await client.databases.createIfNotExists({ id: "cosmicworks" }); +console.log(`Database:\t${database.id}`); - // Create or retrieve container - const { container } = await database.containers.createIfNotExists({ - id: "products", - partitionKey: { paths: ["/category"] }, - }); - console.log(`Container:\t${container.id}`); +// Create or retrieve container +const { container } = await database.containers.createIfNotExists({ + id: "products", + partitionKey: { paths: ["/category"] }, +}); +console.log(`Container:\t${container.id}`); - // Upsert items to generate change feed events - const products: Product[] = [ - { - id: "70b63682-b93a-4c77-aad2-65501347265f", - category: "gear-surf-surfboards", - name: "Yamba Surfboard", - quantity: 12, - sale: false, - }, - { - id: "25a68543-b90c-439d-8332-7ef41e06a0e0", - category: "gear-surf-surfboards", - name: "Kiama Classic Surfboard", - quantity: 25, - sale: true, - }, - ]; +// Upsert items to generate change feed events +const products: Product[] = [ + { + id: "70b63682-b93a-4c77-aad2-65501347265f", + category: "gear-surf-surfboards", + name: "Yamba Surfboard", + quantity: 12, + sale: false, + }, + { + id: "25a68543-b90c-439d-8332-7ef41e06a0e0", + category: "gear-surf-surfboards", + name: "Kiama Classic Surfboard", + quantity: 25, + sale: true, + }, +]; - for (const product of products) { - await container.items.upsert(product); - console.log(`Upserted item:\t${product.id}`); - } - - // Read the change feed from the beginning of the container's history - console.log("\nReading change feed..."); +for (const product of products) { + await container.items.upsert(product); + console.log(`Upserted item:\t${product.id}`); +} - const iterator = container.items.getChangeFeedIterator({ - changeFeedStartFrom: ChangeFeedStartFrom.Beginning(), - }); +// Read the change feed from the beginning of the container's history +console.log("\nReading change feed..."); - while (iterator.hasMoreResults) { - const { result, statusCode } = await iterator.readNext(); +const iterator = container.items.getChangeFeedIterator({ + changeFeedStartFrom: ChangeFeedStartFrom.Beginning(), +}); - // 304 Not Modified means the feed is caught up — no new changes - if (statusCode === 304) { - break; - } +while (iterator.hasMoreResults) { + const { result, statusCode } = await iterator.readNext(); - for (const item of result) { - console.log(`Changed item:\t${item.id} | ${item.name} | Qty: ${item.quantity}`); - } + // 304 Not Modified means the feed is caught up — no new changes + if (statusCode === 304) { + break; } - console.log("\nChange feed complete."); + for (const item of result) { + console.log(`Changed item:\t${item.id} | ${item.name} | Qty: ${item.quantity}`); + } } -main().catch((err) => { - console.error(err); - process.exit(1); -}); +console.log("\nChange feed complete."); diff --git a/javascript/201-change-feed/tsconfig.json b/javascript/201-change-feed/tsconfig.json deleted file mode 100644 index 3f39d5c..0000000 --- a/javascript/201-change-feed/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": ["ES2020"], - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "dist", - "rootDir": "src" - }, - "include": ["src/**/*"] -} From c0a59fa12afa28211aa7a97a33bf786df95a8dd2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:29:43 +0000 Subject: [PATCH 4/7] Simplify package.json: dev script, remove test, floating major versions Co-authored-by: seesharprun <5067401+seesharprun@users.noreply.github.com> --- javascript/201-change-feed/package.json | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/javascript/201-change-feed/package.json b/javascript/201-change-feed/package.json index e6c8f10..ad363f9 100644 --- a/javascript/201-change-feed/package.json +++ b/javascript/201-change-feed/package.json @@ -4,15 +4,14 @@ "private": true, "type": "module", "scripts": { - "start": "node --loader ts-node/esm src/index.ts", - "test": "tsc --noEmit --target ES2022 --module NodeNext --moduleResolution NodeNext src/index.ts" + "dev": "npx ts-node --esm src/index.ts" }, "dependencies": { - "@azure/cosmos": "4.9.2" + "@azure/cosmos": "^4" }, "devDependencies": { - "@types/node": "22.13.10", - "ts-node": "10.9.2", - "typescript": "5.7.3" + "@types/node": "^22", + "ts-node": "^10", + "typescript": "^5" } } From fca81c35e791cb6d4033497108d7e1797959ea11 Mon Sep 17 00:00:00 2001 From: Sidney Andrews Date: Thu, 19 Mar 2026 10:45:40 -0400 Subject: [PATCH 5/7] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Sidney Andrews --- javascript/201-change-feed/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/201-change-feed/package.json b/javascript/201-change-feed/package.json index ad363f9..1ceef3a 100644 --- a/javascript/201-change-feed/package.json +++ b/javascript/201-change-feed/package.json @@ -1,5 +1,5 @@ { - "name": "cosmos-typescript-change-feed", + "name": "201-change-feed", "version": "1.0.0", "private": true, "type": "module", From b549b03c5c383732b5f98deb8a1a83772ea22aff Mon Sep 17 00:00:00 2001 From: Sidney Andrews Date: Thu, 19 Mar 2026 10:46:51 -0400 Subject: [PATCH 6/7] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Sidney Andrews --- javascript/201-change-feed/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/201-change-feed/package.json b/javascript/201-change-feed/package.json index 1ceef3a..8e9f333 100644 --- a/javascript/201-change-feed/package.json +++ b/javascript/201-change-feed/package.json @@ -4,7 +4,8 @@ "private": true, "type": "module", "scripts": { - "dev": "npx ts-node --esm src/index.ts" + "dev": "npx ts-node --esm src/index.ts", + "start": "npm run dev" }, "dependencies": { "@azure/cosmos": "^4" From f6d629b07f33beee78c2b08b3da927b0993468cd Mon Sep 17 00:00:00 2001 From: Sidney Andrews Date: Thu, 19 Mar 2026 10:48:06 -0400 Subject: [PATCH 7/7] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Sidney Andrews --- javascript/201-change-feed/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/201-change-feed/src/index.ts b/javascript/201-change-feed/src/index.ts index 8bab3f7..fa4547c 100644 --- a/javascript/201-change-feed/src/index.ts +++ b/javascript/201-change-feed/src/index.ts @@ -54,11 +54,11 @@ for (const product of products) { console.log(`Upserted item:\t${product.id}`); } -// Read the change feed from the beginning of the container's history +// Read the change feed starting from now to avoid replaying the full history on reruns console.log("\nReading change feed..."); const iterator = container.items.getChangeFeedIterator({ - changeFeedStartFrom: ChangeFeedStartFrom.Beginning(), + changeFeedStartFrom: ChangeFeedStartFrom.Now(), }); while (iterator.hasMoreResults) {