Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jul 28, 2025

The Sender.flush() method was not properly handling callbacks or returning promises because the root cause was in the _doSend() function, which couldn't handle asynchronous callbacks from preparePayload().

Root Cause

The issue was that _doSend() assumed preparePayload() would always execute its callback synchronously, but when compression is enabled, the callback executes asynchronously after stream processing completes.

// Before: Broken for async callbacks
_sendPostMgr.preparePayload((processedPayload: IPayloadData) => {
    result = sendPostFunc(processedPayload, onComplete, !isAsync);
}, _zipPayload, payloadData, !isAsync);
return result;  // ❌ Returns undefined when callback is async

Solution

Fixed _doSend() to handle both synchronous and asynchronous callback execution using direct resolve capture with proper error handling:

// After: Handles both sync and async callbacks with error handling
let result: void | IPromise<boolean>;
let callbackExecuted = false;
let resolveFn: any;
let rejectFn: any;

_sendPostMgr.preparePayload((processedPayload: IPayloadData) => {
    result = sendPostFunc(processedPayload, onComplete, !isAsync);
    callbackExecuted = true;
    if (resolveFn) {
        doAwait(result as any, resolveFn, rejectFn);
    }
}, _zipPayload, payloadData, !isAsync);

if (callbackExecuted) {
    return result;  // Synchronous case
}

// Asynchronous case - return promise that captures both resolve and reject
return createPromise<boolean>((resolve, reject) => {
    resolveFn = resolve;
    rejectFn = reject;
});

Also simplified the flush method's return logic using doAwaitResponse to handle both promise and non-promise results consistently.

Breaking Changes

This release contains a potential breaking change to the flush method signature in the IChannelControls interface. The parameter name has been changed from async to isAsync to avoid potential conflicts with the async keyword.

Interface change:

// Before:
flush?(async: boolean, callBack?: (flushComplete?: boolean) => void, sendReason?: SendRequestReason): boolean | void | IPromise<boolean>;

// After: 
flush?(isAsync: boolean, callBack?: (flushComplete?: boolean) => void, sendReason?: SendRequestReason): boolean | void | IPromise<boolean>;

If you have custom channels or plugins that implement the IChannelControls interface directly, you will need to update the parameter name from async to isAsync in your implementation.

Benefits

  • Efficient async support: await applicationInsights.flush() now works correctly with compression enabled
  • Proper error handling: Promise rejections are now correctly propagated through the async callback chain
  • No polling overhead: Uses direct callback invocation instead of scheduleTimeout polling
  • Handles both sync/async: Works whether preparePayload executes callback immediately or asynchronously
  • Cleaner code: Simplified return logic and eliminated complex nested exception handling
  • Backward compatible: Existing usage patterns continue to work

Fixes #2628.


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Copilot AI and others added 2 commits July 28, 2025 20:52
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copilot AI changed the title [WIP] [BUG] flush never completes Fix flush method to properly handle callbacks and return promises Jul 28, 2025
Copilot AI requested a review from MSNev July 28, 2025 21:01
Copilot finished work on behalf of MSNev July 28, 2025 21:01
…mises correctly when triggerSend returns null

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copilot AI changed the title Fix flush method to properly handle callbacks and return promises Fix flush method to handle callbacks and promises when triggerSend returns null Jul 28, 2025
Copilot AI requested a review from MSNev July 28, 2025 22:01
Copilot finished work on behalf of MSNev July 28, 2025 22:01
- Fixed _doSend to properly capture and return promises from sendPostFunc instead of always returning null
- Updated flush method to use doAwaitResponse pattern as suggested
- Ensures async operations properly return promises that can be awaited
- Maintains backward compatibility with existing usage patterns

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copilot AI changed the title Fix flush method to handle callbacks and promises when triggerSend returns null Fix flush method root cause - make _doSend return promises and use doAwaitResponse Jul 28, 2025
Copilot AI requested a review from MSNev July 28, 2025 22:29
Copilot finished work on behalf of MSNev July 28, 2025 22:29
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copilot AI changed the title Fix flush method root cause - make _doSend return promises and use doAwaitResponse Fix flush method root cause - handle async callbacks in _doSend and simplify return logic Jul 28, 2025
Copilot AI requested a review from MSNev July 28, 2025 23:03
Copilot finished work on behalf of MSNev July 28, 2025 23:03
…lling

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copilot AI requested a review from MSNev July 29, 2025 19:59
Copilot finished work on behalf of MSNev July 29, 2025 19:59
@MSNev
Copy link
Collaborator

MSNev commented Jul 29, 2025

SenderTests > flush method handles asynchronous callback execution without callback
2025-07-29T20:13:18.4900180Z >> Message: flush should return promise-like object when async=true and no callback
2025-07-29T20:13:18.4901108Z >> Actual: false
2025-07-29T20:13:18.4901489Z >> Expected: true
2025-07-29T20:13:18.4902738Z >> at SenderTests.test (http://localhost:9001/channels/applicationinsights-channel-js/Tests/Unit/dist/aichannel.tests.js:6121:34)
2025-07-29T20:13:18.4904972Z >> at Object.testMethod (http://localhost:9001/channels/applicationinsights-channel-js/node_modules/@microsoft/ai-test-framework/dist/es5/ai-test-framework.js:53630:48)
2025-07-29T20:13:18.4906682Z >> at runTest (http://localhost:9001/common/Tests/External/qunit-2.9.3.js:2725:35)
2025-07-29T20:13:18.4908159Z >> at Test.run (http://localhost:9001/common/Tests/External/qunit-2.9.3.js:2708:9)
2025-07-29T20:13:18.4909176Z >> at http://localhost:9001/common/Tests/External/qunit-2.9.3.js:2972:16
2025-07-29T20:13:18.4921097Z >> at processTaskQueue (http://localhost:9001/common/Tests/External/qunit-2.9.3.js:2293:26)

…ovided

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jul 29, 2025

SenderTests > flush method handles asynchronous callback execution without callback
2025-07-29T20:13:18.4900180Z >> Message: flush should return promise-like object when async=true and no callback
2...

Fixed the failing test. The issue was that when isAsync=true and no callback is provided, the flush method was returning a boolean value instead of a promise as required by the interface. Updated the logic to return createPromise<boolean>((resolve) => resolve(!rsp.rejected)) in this case. Commit: c7775f5

Copilot finished work on behalf of MSNev July 29, 2025 20:42
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Copilot finished work on behalf of MSNev July 29, 2025 21:44
Copilot AI requested a review from MSNev July 29, 2025 21:44
@MSNev MSNev marked this pull request as ready for review July 30, 2025 00:00
Copilot AI review requested due to automatic review settings July 30, 2025 00:00
@MSNev MSNev requested a review from a team as a code owner July 30, 2025 00:00
@MSNev MSNev added this to the 3.3.10 milestone Jul 30, 2025
@MSNev MSNev enabled auto-merge (squash) July 30, 2025 00:11
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@MSNev MSNev merged commit 8edf49b into main Jul 30, 2025
9 of 12 checks passed
@MSNev MSNev deleted the copilot/fix-2628 branch July 30, 2025 19:26
MSNev added a commit that referenced this pull request Sep 3, 2025
* Add Azure API Management proxy documentation to FAQ sections (#2625)

* Initial plan

* Add Azure APIM proxy documentation to FAQ sections

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Update APIM proxy link text for clarity and consistency

Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>

* Add weekly GitHub action to delete closed and merged branches (#2627)

* Initial plan

* Add weekly GitHub action to delete closed and merged branches

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation and comments to branch cleanup workflow

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add beta and otel-sdk to protected branches list

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation comment for GitHub context variables and environment variables

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation comment for GitHub API delete reference command

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix wildcard pattern matching in branch protection logic

Replace case statement with [[ ]] pattern matching to properly support
wildcard patterns in variables. Add documentation explaining why this
approach is needed for patterns like "release*" and "*-legacy".

Addresses feedback about wildcard pattern matching not working correctly.

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation comments for required workflow permissions

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix trackPageView not resetting maxAjaxCallsPerView counter (#2595)

* Initial plan

* Implement resetAjaxAttempts functionality

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Refactor: Create helper function for resetting ajax attempts counter

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Revert ajax.ts helper function, create helper in AnalyticsPlugin.ts instead

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Replace direct _trackAjaxAttempts assignments with helper function calls

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Remove comment and redundant _resetAjaxAttempts call from trackPageView

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Improve test consistency by matching existing test patterns

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add @microsoft/applicationinsights-dependencies-js as dev dependency

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix getPlugin usage to properly access plugin through ILoadedPlugin interface

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Remove explicit type casting from getPlugin call

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Remove unused imports IDependenciesPlugin and ILoadedPlugin

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix IDependenciesPlugin interface to extend IPlugin for proper getPlugin typing

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Create IAjaxMonitorPlugin interface and revert Version line per review feedback

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Move resetAjaxAttempts method to IAjaxMonitorPlugin interface per review feedback

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix npm build failures by removing typed import dependency

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix TypeScript configuration by removing deprecated suppressImplicitAnyIndexErrors option

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix getPlugin typing to use IAjaxMonitorPlugin for proper TypeScript inference

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Revert tsconfig.json change to restore suppressImplicitAnyIndexErrors

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix IAjaxMonitorPlugin export and plugin access pattern for resetAjaxAttempts

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Revert tsconfig.json change to restore suppressImplicitAnyIndexErrors option

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix jq syntax error in Delete Merged Branches workflow (#2630)

* Initial plan

* Fix jq syntax error in Delete Merged Branches workflow

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Update all jq commands to single lines to avoid line splitting issues

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix closed_prs jq command to single line format

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Update Async Tests Under AISKULight to Use the Modern AsyncQueue Pattern (#2607)

* Initial plan

* Update async tests in AISKULight to use modern asyncQueue pattern

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Update AISKULight async tests to follow the suggested modern pattern with helper methods

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Remove changes outside AISKULight directory as requested

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Replace .concat with .add() for waitForException calls in AISKULight tests

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Move initial test setup code before asyncQueue return statement for better variable scoping

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Remove custom helper methods and use PollingAssert.createPollingAssert directly

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Fix async tests by replacing createPollingAssert with asyncTaskPollingAssert for modern pattern compatibility

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Replace .concat with .add for PollingAssert.asyncTaskPollingAssert on line 167

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Replace .concat with .add for PollingAssert.asyncTaskPollingAssert on line 210

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* fix: change .concat to .add on line 119 in dynamicconfig.tests.ts

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Fix flush method root cause - handle async callbacks in _doSend with proper error handling (#2633)

* Initial plan

* Fix flush method to handle callbacks and return promises correctly

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Clean up eslint warnings and add comprehensive tests

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Simplify flush implementation per feedback - handle callbacks and promises correctly when triggerSend returns null

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix root cause in _doSend and use doAwaitResponse in flush method

- Fixed _doSend to properly capture and return promises from sendPostFunc instead of always returning null
- Updated flush method to use doAwaitResponse pattern as suggested
- Ensures async operations properly return promises that can be awaited
- Maintains backward compatibility with existing usage patterns

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix async callback handling in _doSend and simplify flush return logic

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix async callback handling with direct resolve capture instead of polling

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Handle rejection in async preparePayload callback

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Use doAwait with direct callbacks instead of doAwaitResponse

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix TypeScript compilation errors in Sender.ts - fix flush method signature and type casting

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Rename flush parameter from 'async' to 'isAsync' to avoid keyword conflicts

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add unreleased changes entry to RELEASES.md for flush method fix

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Address code review feedback: clarify breaking changes and add comprehensive flush method tests

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Use isPromiseLike and isUndefined helpers in Sender tests

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix flush method to return promise when async=true and no callback provided

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix RELEASES.md to show real original flush method signature

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix issue #2634 moving the conditional check for filtering (#2635)

* Fix issue #2634 moving the conditional check for filtering

* refactoring

* Remove additional unnecessary returns

---------

Co-authored-by: Nev <54870357+MSNev@users.noreply.github.com>

* Ensure parent is defined before checking length in getImageHref function (#2636)

Co-authored-by: pnoodles <git@pnoodles.com>

* [Feature] Implement cookie caching when disabled and automatic flushing when enabled with backward compatibility option (#2632)

* Initial plan
* Implement cookie caching when disabled and flushing when enabled
* Fix blocked cookie caching logic - blocked cookies should not be cached
* Add dynamic config change support for cookie flushing
* Address PR feedback: remove redundant flush, cache deletions, store formatted values
* Add test coverage for deletion caching behavior
* Address PR feedback: rename function, eliminate redundant calls, change operation to purge
* Rename helper function to avoid recursive call - _formatSetCookieValue
* Revert del() to use _formatCookieValue instead of _formatSetCookieValue
* Minify cache object by using single-character property names and integer enum constants
* Convert PENDING_OP constants to const enum ePendingOp
* Fix cache object interface: type o as ePendingOp, remove unused p property
* Fix TypeScript error: use _formatCookieValue instead of _formatSetCookieValue in del() caching
* Extract common deletion values creation logic to reduce duplication
* Refactor _createDeletionValues to _formatDeletionValue and simplify call sites
* Update tests to reflect new cookie caching behavior when disabled
* Add clock.tick(1) after configuration changes to allow dynamic config updates
* Fix failing tests: Replace throw patterns with call counters in disabled cookie tests
* Revert disabled cookie tests to use throw pattern instead of call counters for tests that never enable cookies
* Fix cookie flushing order issue in setEnabled() method
* Revert "Fix cookie flushing order issue in setEnabled() method"
  - This reverts commit 8da53ab.
* Fix failing tests by adding clock.tick(1) after setEnabled() calls to allow async config changes
* Add release notes for cookie caching feature to RELEASES.md
* Add disableCaching configuration option and comprehensive test coverage
* Implement PR review feedback: rename disableCaching to disableCookieCache, add @SInCE tag, optimize with local variable, set default to false
* Simplify disableCookieCache configuration to use direct false value
* Fix test failures by adding useFakeTimers: true to all tests using clock.tick()
* Fix test failures by adding defensive null checks for this.clock.tick() calls
* Revert defensive clock.tick() helper - ensure tests use useFakeTimers property
* Fix tests to expect new disableCookieCache configuration property
* Fix cookie flushing issue in setEnabled method - add immediate flushing for synchronous calls
* Fix setEnabled method to use asynchronous configuration changes and update test with missing clock.tick
* Fix test failures by adding clock.tick() after setEnabled(false) calls in all tests using fake timers
* Fix test delCookie mock to set deletion value instead of deleting entry
* Revert delCookie mock to use delete and fix tests to expect undefined after deletion
* Fix test formatting error in cookie manager tests - proper validation of maxAge cookie flushing
* Fix failing cookie manager tests - correct caching behavior expectations
* Fix cookie manager tests to be order-independent for multi-parameter assertions
* Fix cookie manager tests to handle order-independent cookie parameter assertions
* Take Over co-pilot PR to Fix tests and change name to disableCookieDefer

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* [Main][Task] 34470593: Update AISKU Async Tests To Use the Modern AsyncQueue Pattern (#2637)

* update aisku tests

* udpate

* [Main][Task] 34470593: Update Async Tests Under Dependencies Extension To Use the Modern AsyncQueue Pattern (#2638)

* udpate

* merge main

* [Beta] Fix Merge issues

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>
Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>
Co-authored-by: aimbrenda <120031791+aimbrenda@users.noreply.github.com>
Co-authored-by: Patrick <pnoodles@users.noreply.github.com>
Co-authored-by: pnoodles <git@pnoodles.com>
MSNev added a commit that referenced this pull request Sep 3, 2025
* [Main] Update the copilot instructions (#2617)

* [WIP] [Task] Add tree-shaking annotations (#2616)

* Initial plan

* Changes before error encountered

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix tree-shaking annotation syntax - remove incorrect parentheses

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add parentheses around @__PURE__ comments in IOfflineBatch.ts

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add parentheses around @__PURE__ comments for proper TypeScript handling

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Suppressed credentials inline to avoid credscan false positive (#2622)

* Suppressed credentials inline to avoid credscan false positive

* Used the next line supression syntax to avoid long length issue

* [Beta] Add W3c Trace State support / handling and refactor distributed trace... (#2620)

* [Beta] Add W3c Trace State support / handling and refactor distributed trace handling to prepare for OptenTelemetry Span style API / management

* Minification improvements

* [Beta] Merge Main to Beta (#2640)

* Add Azure API Management proxy documentation to FAQ sections (#2625)

* Initial plan

* Add Azure APIM proxy documentation to FAQ sections

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Update APIM proxy link text for clarity and consistency

Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>
Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>

* Add weekly GitHub action to delete closed and merged branches (#2627)

* Initial plan

* Add weekly GitHub action to delete closed and merged branches

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation and comments to branch cleanup workflow

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add beta and otel-sdk to protected branches list

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation comment for GitHub context variables and environment variables

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation comment for GitHub API delete reference command

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix wildcard pattern matching in branch protection logic

Replace case statement with [[ ]] pattern matching to properly support
wildcard patterns in variables. Add documentation explaining why this
approach is needed for patterns like "release*" and "*-legacy".

Addresses feedback about wildcard pattern matching not working correctly.

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add documentation comments for required workflow permissions

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix trackPageView not resetting maxAjaxCallsPerView counter (#2595)

* Initial plan

* Implement resetAjaxAttempts functionality

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Refactor: Create helper function for resetting ajax attempts counter

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Revert ajax.ts helper function, create helper in AnalyticsPlugin.ts instead

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Replace direct _trackAjaxAttempts assignments with helper function calls

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Remove comment and redundant _resetAjaxAttempts call from trackPageView

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Improve test consistency by matching existing test patterns

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add @microsoft/applicationinsights-dependencies-js as dev dependency

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix getPlugin usage to properly access plugin through ILoadedPlugin interface

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Remove explicit type casting from getPlugin call

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Remove unused imports IDependenciesPlugin and ILoadedPlugin

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix IDependenciesPlugin interface to extend IPlugin for proper getPlugin typing

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Create IAjaxMonitorPlugin interface and revert Version line per review feedback

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Move resetAjaxAttempts method to IAjaxMonitorPlugin interface per review feedback

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix npm build failures by removing typed import dependency

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix TypeScript configuration by removing deprecated suppressImplicitAnyIndexErrors option

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix getPlugin typing to use IAjaxMonitorPlugin for proper TypeScript inference

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Revert tsconfig.json change to restore suppressImplicitAnyIndexErrors

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix IAjaxMonitorPlugin export and plugin access pattern for resetAjaxAttempts

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Revert tsconfig.json change to restore suppressImplicitAnyIndexErrors option

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix jq syntax error in Delete Merged Branches workflow (#2630)

* Initial plan

* Fix jq syntax error in Delete Merged Branches workflow

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Update all jq commands to single lines to avoid line splitting issues

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix closed_prs jq command to single line format

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Update Async Tests Under AISKULight to Use the Modern AsyncQueue Pattern (#2607)

* Initial plan

* Update async tests in AISKULight to use modern asyncQueue pattern

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Update AISKULight async tests to follow the suggested modern pattern with helper methods

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Remove changes outside AISKULight directory as requested

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Replace .concat with .add() for waitForException calls in AISKULight tests

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Move initial test setup code before asyncQueue return statement for better variable scoping

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Remove custom helper methods and use PollingAssert.createPollingAssert directly

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Fix async tests by replacing createPollingAssert with asyncTaskPollingAssert for modern pattern compatibility

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Replace .concat with .add for PollingAssert.asyncTaskPollingAssert on line 167

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Replace .concat with .add for PollingAssert.asyncTaskPollingAssert on line 210

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* fix: change .concat to .add on line 119 in dynamicconfig.tests.ts

Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>

* Fix flush method root cause - handle async callbacks in _doSend with proper error handling (#2633)

* Initial plan

* Fix flush method to handle callbacks and return promises correctly

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Clean up eslint warnings and add comprehensive tests

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Simplify flush implementation per feedback - handle callbacks and promises correctly when triggerSend returns null

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix root cause in _doSend and use doAwaitResponse in flush method

- Fixed _doSend to properly capture and return promises from sendPostFunc instead of always returning null
- Updated flush method to use doAwaitResponse pattern as suggested
- Ensures async operations properly return promises that can be awaited
- Maintains backward compatibility with existing usage patterns

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix async callback handling in _doSend and simplify flush return logic

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix async callback handling with direct resolve capture instead of polling

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Handle rejection in async preparePayload callback

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Use doAwait with direct callbacks instead of doAwaitResponse

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix TypeScript compilation errors in Sender.ts - fix flush method signature and type casting

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Rename flush parameter from 'async' to 'isAsync' to avoid keyword conflicts

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Add unreleased changes entry to RELEASES.md for flush method fix

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Address code review feedback: clarify breaking changes and add comprehensive flush method tests

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Use isPromiseLike and isUndefined helpers in Sender tests

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix flush method to return promise when async=true and no callback provided

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix RELEASES.md to show real original flush method signature

Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* Fix issue #2634 moving the conditional check for filtering (#2635)

* Fix issue #2634 moving the conditional check for filtering

* refactoring

* Remove additional unnecessary returns

---------

Co-authored-by: Nev <54870357+MSNev@users.noreply.github.com>

* Ensure parent is defined before checking length in getImageHref function (#2636)

Co-authored-by: pnoodles <git@pnoodles.com>

* [Feature] Implement cookie caching when disabled and automatic flushing when enabled with backward compatibility option (#2632)

* Initial plan
* Implement cookie caching when disabled and flushing when enabled
* Fix blocked cookie caching logic - blocked cookies should not be cached
* Add dynamic config change support for cookie flushing
* Address PR feedback: remove redundant flush, cache deletions, store formatted values
* Add test coverage for deletion caching behavior
* Address PR feedback: rename function, eliminate redundant calls, change operation to purge
* Rename helper function to avoid recursive call - _formatSetCookieValue
* Revert del() to use _formatCookieValue instead of _formatSetCookieValue
* Minify cache object by using single-character property names and integer enum constants
* Convert PENDING_OP constants to const enum ePendingOp
* Fix cache object interface: type o as ePendingOp, remove unused p property
* Fix TypeScript error: use _formatCookieValue instead of _formatSetCookieValue in del() caching
* Extract common deletion values creation logic to reduce duplication
* Refactor _createDeletionValues to _formatDeletionValue and simplify call sites
* Update tests to reflect new cookie caching behavior when disabled
* Add clock.tick(1) after configuration changes to allow dynamic config updates
* Fix failing tests: Replace throw patterns with call counters in disabled cookie tests
* Revert disabled cookie tests to use throw pattern instead of call counters for tests that never enable cookies
* Fix cookie flushing order issue in setEnabled() method
* Revert "Fix cookie flushing order issue in setEnabled() method"
  - This reverts commit 8da53ab.
* Fix failing tests by adding clock.tick(1) after setEnabled() calls to allow async config changes
* Add release notes for cookie caching feature to RELEASES.md
* Add disableCaching configuration option and comprehensive test coverage
* Implement PR review feedback: rename disableCaching to disableCookieCache, add @SInCE tag, optimize with local variable, set default to false
* Simplify disableCookieCache configuration to use direct false value
* Fix test failures by adding useFakeTimers: true to all tests using clock.tick()
* Fix test failures by adding defensive null checks for this.clock.tick() calls
* Revert defensive clock.tick() helper - ensure tests use useFakeTimers property
* Fix tests to expect new disableCookieCache configuration property
* Fix cookie flushing issue in setEnabled method - add immediate flushing for synchronous calls
* Fix setEnabled method to use asynchronous configuration changes and update test with missing clock.tick
* Fix test failures by adding clock.tick() after setEnabled(false) calls in all tests using fake timers
* Fix test delCookie mock to set deletion value instead of deleting entry
* Revert delCookie mock to use delete and fix tests to expect undefined after deletion
* Fix test formatting error in cookie manager tests - proper validation of maxAge cookie flushing
* Fix failing cookie manager tests - correct caching behavior expectations
* Fix cookie manager tests to be order-independent for multi-parameter assertions
* Fix cookie manager tests to handle order-independent cookie parameter assertions
* Take Over co-pilot PR to Fix tests and change name to disableCookieDefer

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MSNev <54870357+MSNev@users.noreply.github.com>

* [Main][Task] 34470593: Update AISKU Async Tests To Use the Modern AsyncQueue Pattern (#2637)

* update aisku tests

* udpate

* [Main][Task] 34470593: Update Async Tests Under Dependencies Extension To Use the Modern AsyncQueue Pattern (#2638)

* udpate

* merge main

* [Beta] Fix Merge issues

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>
Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>
Co-authored-by: aimbrenda <120031791+aimbrenda@users.noreply.github.com>
Co-authored-by: Patrick <pnoodles@users.noreply.github.com>
Co-authored-by: pnoodles <git@pnoodles.com>

* [OTel-Sdk] Update shrinkwrap from merge

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: rads-1996 <radsg.1996@gmail.com>
Co-authored-by: rads-1996 <22488539+rads-1996@users.noreply.github.com>
Co-authored-by: Karlie-777 <79606506+Karlie-777@users.noreply.github.com>
Co-authored-by: aimbrenda <120031791+aimbrenda@users.noreply.github.com>
Co-authored-by: Patrick <pnoodles@users.noreply.github.com>
Co-authored-by: pnoodles <git@pnoodles.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] flush never completes

4 participants