Skip to content

feat(davinci-client): embed password policy in PASSWORD_VERIFY collector#572

Open
ryanbas21 wants to merge 2 commits intomainfrom
password-rules-toplevel
Open

feat(davinci-client): embed password policy in PASSWORD_VERIFY collector#572
ryanbas21 wants to merge 2 commits intomainfrom
password-rules-toplevel

Conversation

@ryanbas21
Copy link
Copy Markdown
Collaborator

@ryanbas21 ryanbas21 commented Apr 16, 2026

Summary

  • Adds PasswordVerifyCollector type that reads passwordPolicy from the PASSWORD_VERIFY field component (DV-16053)
  • Splits PASSWORD / PASSWORD_VERIFY into separate reducer cases so each produces the correct collector type
  • Updates the sample app to render password requirements from the embedded policy

What changed

Area Change
Types PasswordPolicy interface, PasswordVerifyField type (split from StandardField), PasswordVerifyCollector interface with output.passwordPolicy?
Collector factory returnPasswordVerifyCollector() — reads policy from field, omits key when absent
Reducer PASSWORDPasswordCollector (unchanged), PASSWORD_VERIFYPasswordVerifyCollector (new)
Type plumbing Updated SingleValueCollectorTypes, InferSingleValueCollectorType, SingleValueCollectors, Collectors, CollectorValueType
Sample app Password component renders policy requirements list when PasswordVerifyCollector has a policy
Mock data Reflects Solution 2 response shape — policy embedded in field, removed from root

Test plan

  • nx run davinci-client:test — 282 tests pass (22 files)
  • nx run davinci-client:typecheck — clean
  • nx run davinci-client:lint — 0 errors
  • nx run @forgerock/davinci-client:nxBuild — clean
  • API reports regenerated
  • Verify sample app renders password requirements with a live DaVinci flow using PASSWORD_VERIFY + feature flag dv-16053-embed_password_policy_in_component

Summary by CodeRabbit

Release Notes

  • New Features
    • Added support for password policy embedded within password verification fields.
    • Password policy requirements, including character length and character type constraints, are now displayed to users during password entry for real-time validation feedback.

DV-16053: The DaVinci API moves passwordPolicy from the response root
into the PASSWORD_VERIFY field component. This adds a new
PasswordVerifyCollector type that reads the policy from the field and
exposes it via output.passwordPolicy.

- Add PasswordPolicy interface and PasswordVerifyField type
- Add PasswordVerifyCollector with optional passwordPolicy in output
- Split PASSWORD/PASSWORD_VERIFY into separate reducer cases
- Update CollectorValueType, Collectors union, and type inference
- Add unit tests, type tests, and updater narrowing tests
- Update sample app to render password requirements from policy
- Regenerate API reports
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 16, 2026

🦋 Changeset detected

Latest commit: 630f470

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 12 packages
Name Type
@forgerock/davinci-client Minor
@forgerock/device-client Minor
@forgerock/journey-client Minor
@forgerock/oidc-client Minor
@forgerock/protect Minor
@forgerock/sdk-types Minor
@forgerock/sdk-utilities Minor
@forgerock/iframe-manager Minor
@forgerock/sdk-logger Minor
@forgerock/sdk-oidc Minor
@forgerock/sdk-request-middleware Minor
@forgerock/storage Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 16, 2026

Warning

Rate limit exceeded

@ryanbas21 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 36 minutes and 3 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 36 minutes and 3 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 98565d3b-7c1a-479f-b1df-8f6b5bcdc85b

📥 Commits

Reviewing files that changed from the base of the PR and between 244dbf4 and 630f470.

📒 Files selected for processing (9)
  • packages/davinci-client/api-report/davinci-client.api.md
  • packages/davinci-client/api-report/davinci-client.types.api.md
  • packages/davinci-client/src/lib/collector.utils.test.ts
  • packages/davinci-client/src/lib/collector.utils.ts
  • packages/davinci-client/src/lib/davinci.types.ts
  • packages/davinci-client/src/lib/mock-data/mock-form-fields.data.ts
  • packages/davinci-client/src/lib/node.reducer.test.ts
  • packages/davinci-client/src/lib/node.reducer.ts
  • packages/davinci-client/src/lib/node.slice.ts
📝 Walkthrough

Walkthrough

Introduces PasswordVerifyCollector type to support password policy embedded within PASSWORD_VERIFY field components. Separates PasswordVerifyField from StandardField, adds a collector factory function, updates the reducer to route PASSWORD_VERIFY separately, and enhances UI components to render policy requirements.

Changes

Cohort / File(s) Summary
Changeset & Release Notes
.changeset/embed-password-policy-in-component.md
Documents minor release for @forgerock/davinci-client introducing PasswordVerifyCollector with embedded password policy support via output.passwordPolicy.
Field & Type Definitions
packages/davinci-client/src/lib/davinci.types.ts, packages/davinci-client/src/lib/collector.types.ts
Separated PasswordVerifyField from StandardField; added PasswordPolicy interface; created PasswordVerifyCollector interface with category: 'SingleValueCollector' and optional passwordPolicy in output; updated type unions (SingleValueCollectorTypes, SingleValueCollectors, InferSingleValueCollectorType).
Client Value Type Mapping
packages/davinci-client/src/lib/client.types.ts
Reordered conditional branches in CollectorValueType<T> to add type-specific handling for PasswordVerifyCollector and shift subsequent category-based mappings, affecting updater value type resolution.
Collector Factory & Utilities
packages/davinci-client/src/lib/collector.utils.ts
Added returnPasswordVerifyCollector() factory function to construct PasswordVerifyCollector with validation of required fields (key, label, type) and optional embedded passwordPolicy.
Reducer Logic
packages/davinci-client/src/lib/node.reducer.ts, packages/davinci-client/src/lib/node.types.ts
Updated nodeCollectorReducer to route PASSWORD_VERIFY fields to returnPasswordVerifyCollector separately; added PasswordVerifyCollector to Collectors union type.
E2E UI Component & Main Routing
e2e/davinci-app/components/password.ts, e2e/davinci-app/main.ts
Extended passwordComponent to accept `PasswordCollector
Mock Data
packages/davinci-client/src/lib/mock-data/mock-form-fields.data.ts
Restructured to move passwordPolicy from response root into PasswordVerifyField; added PASSWORD_VERIFY field with embedded passwordPolicy; updated form data and field types array.
Type Tests & Validation
packages/davinci-client/src/lib/collector.types.test-d.ts, packages/davinci-client/src/lib/node.types.test-d.ts, packages/davinci-client/src/lib/updater-narrowing.types.test-d.ts
Extended type-narrowing assertions for PasswordVerifyCollector; verified output.passwordPolicy presence on PasswordVerifyCollector and absence on PasswordCollector; validated updater type inference and narrowing.
Runtime Tests
packages/davinci-client/src/lib/collector.utils.test.ts, packages/davinci-client/src/lib/node.reducer.test.ts
Added comprehensive test coverage for returnPasswordVerifyCollector() with/without passwordPolicy; added nodeCollectorReducer tests for PASSWORD_VERIFY field handling and regression assertions for PASSWORD fields.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Possibly related PRs

Suggested reviewers

  • cerebrl
  • ancheetah

🐰 A new collector hops into view,
Password policy, shiny and true,
Embedded in fields, no more at the root,
Type safety rendered from leaf to the boot!
The password component now knows what to do! 🔐✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly and specifically describes the main change: adding password policy support to PASSWORD_VERIFY collector type.
Description check ✅ Passed The PR description is comprehensive with clear summary, detailed change breakdown, test plan, and JIRA reference. It covers all substantial changes and testing outcomes.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch password-rules-toplevel

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@nx-cloud
Copy link
Copy Markdown
Contributor

nx-cloud bot commented Apr 16, 2026

View your CI Pipeline Execution ↗ for commit 630f470

Command Status Duration Result
nx run-many -t build --no-agents ✅ Succeeded <1s View ↗
nx affected -t build lint test typecheck e2e-ci ✅ Succeeded 2m 32s View ↗

☁️ Nx Cloud last updated this comment at 2026-04-16 22:05:48 UTC

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (5)
packages/davinci-client/src/lib/collector.types.ts (1)

193-210: Consider extending SingleValueCollectorNoValue instead of hand-rolling the shape.

PasswordVerifyCollector is structurally identical to SingleValueCollectorNoValue<'PasswordVerifyCollector'> plus optional output.passwordPolicy. Defining it as an intersection would reduce drift risk if the base shape evolves (e.g., input.validation, etc.).

Alternative definition
-export interface PasswordVerifyCollector {
-  category: 'SingleValueCollector';
-  error: string | null;
-  type: 'PasswordVerifyCollector';
-  id: string;
-  name: string;
-  input: {
-    key: string;
-    value: string | number | boolean;
-    type: string;
-  };
-  output: {
-    key: string;
-    label: string;
-    type: string;
-    passwordPolicy?: PasswordPolicy;
-  };
-}
+export type PasswordVerifyCollector = SingleValueCollectorNoValue<'PasswordVerifyCollector'> & {
+  output: { passwordPolicy?: PasswordPolicy };
+};
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/davinci-client/src/lib/collector.types.ts` around lines 193 - 210,
PasswordVerifyCollector duplicates the shape of
SingleValueCollectorNoValue<'PasswordVerifyCollector'> and risks drifting;
refactor PasswordVerifyCollector to extend or be defined as an intersection with
SingleValueCollectorNoValue<'PasswordVerifyCollector'> and add the optional
output.passwordPolicy field, so the type becomes
SingleValueCollectorNoValue<'PasswordVerifyCollector'> & { output: {
passwordPolicy?: PasswordPolicy } } (or equivalent), keeping the unique type tag
'PasswordVerifyCollector' and preserving existing fields like input/output.
packages/davinci-client/src/lib/davinci.types.ts (1)

64-83: Consider modeling environment on PasswordPolicy.

The mock in mock-form-fields.data.ts (lines 51-54) includes environment: { id: string } on the embedded policy, matching what PingOne returns. Since PasswordPolicy is the contract consumers will type against when reading collector.output.passwordPolicy, missing this field means users accessing policy.environment?.id would need a cast. Consider adding:

Proposed addition
 export interface PasswordPolicy {
   id?: string;
+  environment?: { id?: string };
   name?: string;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/davinci-client/src/lib/davinci.types.ts` around lines 64 - 83, The
PasswordPolicy interface is missing an environment property so consumers reading
collector.output.passwordPolicy must cast to access environment.id; update the
PasswordPolicy type to include environment?: { id?: string } (or a more complete
environment shape if available) so the mock shape in mock-form-fields.data.ts
matches the typed contract; ensure references to PasswordPolicy (e.g., usages of
collector.output.passwordPolicy) compile without casts after this change.
packages/davinci-client/src/lib/collector.utils.ts (1)

450-483: Duplicates error-building logic from returnSingleValueCollector.

The key/label/type presence checks here mirror the block in returnSingleValueCollector (lines 154-163). Since PasswordVerifyField is a compile-time-narrowed type with required key, label, type, these in checks never fail at runtime for well-typed callers — they exist only as defensive parity with the shared helper. Consider delegating to returnSingleValueCollector with a 'PasswordVerifyCollector' branch, then adding passwordPolicy on top, to keep validation centralized.

Non-blocking; current implementation is correct.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/davinci-client/src/lib/collector.utils.ts` around lines 450 - 483,
Replace the duplicated presence-check logic in returnPasswordVerifyCollector by
calling the shared helper returnSingleValueCollector (passing the same field and
idx and specifying type 'PasswordVerifyCollector' or otherwise using its branch)
to produce the base collector, then extend/override that returned object's type
and output to include the passwordPolicy when present; keep references to
PasswordVerifyCollector and PasswordVerifyField so the resulting collector adds
the passwordPolicy field on top of the single-value collector instead of
reimplementing the key/label/type checks.
e2e/davinci-app/components/password.ts (2)

46-54: Prefer RegExp.test() over String.prototype.match() for boolean checks.

match() allocates a result array; test() returns a boolean directly and reads more intentionally here. Also, consider hoisting the regexes so they aren't recompiled on every iteration.

♻️ Suggested refactor
+    const UPPER_RE = /^[A-Z]+$/;
+    const LOWER_RE = /^[a-z]+$/;
+    const DIGIT_RE = /^[0-9]+$/;
     if (policy.minCharacters) {
       for (const [charset, count] of Object.entries(policy.minCharacters)) {
         const li = document.createElement('li');
-        if (charset.match(/^[A-Z]+$/)) {
+        if (UPPER_RE.test(charset)) {
           li.textContent = `At least ${count} uppercase letter(s)`;
-        } else if (charset.match(/^[a-z]+$/)) {
+        } else if (LOWER_RE.test(charset)) {
           li.textContent = `At least ${count} lowercase letter(s)`;
-        } else if (charset.match(/^[0-9]+$/)) {
+        } else if (DIGIT_RE.test(charset)) {
           li.textContent = `At least ${count} number(s)`;
         } else {
           li.textContent = `At least ${count} special character(s)`;
         }
         requirementsList.appendChild(li);
       }
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@e2e/davinci-app/components/password.ts` around lines 46 - 54, The code in
password.ts uses String.prototype.match() for boolean checks inside the block
that sets li.textContent; replace those match() calls with precompiled
RegExp.test() calls to avoid allocating arrays and improve intent: create
hoisted regex constants (e.g., UPPERCASE_REGEX, LOWERCASE_REGEX, DIGIT_REGEX,
SPECIAL_REGEX) outside the loop or function and then use
UPPERCASE_REGEX.test(charset), LOWERCASE_REGEX.test(charset),
DIGIT_REGEX.test(charset), else SPECIAL_REGEX.test(charset) to pick the
appropriate message for the li element (the code paths around li.textContent
remain the same).

31-62: Optional: associate the requirements list with the password input for a11y.

Even for an e2e sample, wiring aria-describedby on the <input> to an id on the <ul> (or using aria-labelledby with a heading) makes the intent visible to assistive tech and is a nicer reference pattern for SDK consumers to copy. Non-blocking.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@e2e/davinci-app/components/password.ts` around lines 31 - 62, Add an
accessible reference between the rendered requirements list and the password
input: give the created requirementsList element a stable id (e.g.,
"password-requirements-<unique>") and set that id on the password input's
aria-describedby so assistive tech can read the requirements; locate the
password input where the form is built (the password input variable or the
element found via selector) and assign aria-describedby to match
requirementsList.id only when requirementsList is appended (use the same
conditional that appends requirementsList to formEl and clean up/reset the
attribute if policy is not present).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@e2e/davinci-app/components/password.ts`:
- Around line 37-41: The current rendering uses policy.length.min and
policy.length.max directly, which produces "undefined" when one side is missing;
update the logic around policy.length to check length.min and length.max
independently (e.g., if both present render "min–max characters", if only min
render "at least {min} characters", if only max render "up to {max}
characters"), only create/append the li element to requirementsList when at
least one of length.min or length.max exists, and use the existing li variable
for the text content assignment.

---

Nitpick comments:
In `@e2e/davinci-app/components/password.ts`:
- Around line 46-54: The code in password.ts uses String.prototype.match() for
boolean checks inside the block that sets li.textContent; replace those match()
calls with precompiled RegExp.test() calls to avoid allocating arrays and
improve intent: create hoisted regex constants (e.g., UPPERCASE_REGEX,
LOWERCASE_REGEX, DIGIT_REGEX, SPECIAL_REGEX) outside the loop or function and
then use UPPERCASE_REGEX.test(charset), LOWERCASE_REGEX.test(charset),
DIGIT_REGEX.test(charset), else SPECIAL_REGEX.test(charset) to pick the
appropriate message for the li element (the code paths around li.textContent
remain the same).
- Around line 31-62: Add an accessible reference between the rendered
requirements list and the password input: give the created requirementsList
element a stable id (e.g., "password-requirements-<unique>") and set that id on
the password input's aria-describedby so assistive tech can read the
requirements; locate the password input where the form is built (the password
input variable or the element found via selector) and assign aria-describedby to
match requirementsList.id only when requirementsList is appended (use the same
conditional that appends requirementsList to formEl and clean up/reset the
attribute if policy is not present).

In `@packages/davinci-client/src/lib/collector.types.ts`:
- Around line 193-210: PasswordVerifyCollector duplicates the shape of
SingleValueCollectorNoValue<'PasswordVerifyCollector'> and risks drifting;
refactor PasswordVerifyCollector to extend or be defined as an intersection with
SingleValueCollectorNoValue<'PasswordVerifyCollector'> and add the optional
output.passwordPolicy field, so the type becomes
SingleValueCollectorNoValue<'PasswordVerifyCollector'> & { output: {
passwordPolicy?: PasswordPolicy } } (or equivalent), keeping the unique type tag
'PasswordVerifyCollector' and preserving existing fields like input/output.

In `@packages/davinci-client/src/lib/collector.utils.ts`:
- Around line 450-483: Replace the duplicated presence-check logic in
returnPasswordVerifyCollector by calling the shared helper
returnSingleValueCollector (passing the same field and idx and specifying type
'PasswordVerifyCollector' or otherwise using its branch) to produce the base
collector, then extend/override that returned object's type and output to
include the passwordPolicy when present; keep references to
PasswordVerifyCollector and PasswordVerifyField so the resulting collector adds
the passwordPolicy field on top of the single-value collector instead of
reimplementing the key/label/type checks.

In `@packages/davinci-client/src/lib/davinci.types.ts`:
- Around line 64-83: The PasswordPolicy interface is missing an environment
property so consumers reading collector.output.passwordPolicy must cast to
access environment.id; update the PasswordPolicy type to include environment?: {
id?: string } (or a more complete environment shape if available) so the mock
shape in mock-form-fields.data.ts matches the typed contract; ensure references
to PasswordPolicy (e.g., usages of collector.output.passwordPolicy) compile
without casts after this change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 369808f1-fb4b-4b90-aba0-5b1ec2fe0fe2

📥 Commits

Reviewing files that changed from the base of the PR and between 9088443 and 244dbf4.

📒 Files selected for processing (17)
  • .changeset/embed-password-policy-in-component.md
  • e2e/davinci-app/components/password.ts
  • e2e/davinci-app/main.ts
  • packages/davinci-client/api-report/davinci-client.api.md
  • packages/davinci-client/api-report/davinci-client.types.api.md
  • packages/davinci-client/src/lib/client.types.ts
  • packages/davinci-client/src/lib/collector.types.test-d.ts
  • packages/davinci-client/src/lib/collector.types.ts
  • packages/davinci-client/src/lib/collector.utils.test.ts
  • packages/davinci-client/src/lib/collector.utils.ts
  • packages/davinci-client/src/lib/davinci.types.ts
  • packages/davinci-client/src/lib/mock-data/mock-form-fields.data.ts
  • packages/davinci-client/src/lib/node.reducer.test.ts
  • packages/davinci-client/src/lib/node.reducer.ts
  • packages/davinci-client/src/lib/node.types.test-d.ts
  • packages/davinci-client/src/lib/node.types.ts
  • packages/davinci-client/src/lib/updater-narrowing.types.test-d.ts

Comment on lines +37 to +41
if (policy.length) {
const li = document.createElement('li');
li.textContent = `${policy.length.min}–${policy.length.max} characters`;
requirementsList.appendChild(li);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Handle optional length.min / length.max independently.

PasswordPolicy.length has both min and max as optional. When only one is set, the current template renders e.g. "undefined–255 characters" or "8–undefined characters". Consider branching on each side (or guarding the whole block on both being present).

🛠️ Suggested fix
-    if (policy.length) {
-      const li = document.createElement('li');
-      li.textContent = `${policy.length.min}–${policy.length.max} characters`;
-      requirementsList.appendChild(li);
-    }
+    if (policy.length && (policy.length.min != null || policy.length.max != null)) {
+      const li = document.createElement('li');
+      const { min, max } = policy.length;
+      if (min != null && max != null) {
+        li.textContent = `${min}–${max} characters`;
+      } else if (min != null) {
+        li.textContent = `At least ${min} characters`;
+      } else {
+        li.textContent = `At most ${max} characters`;
+      }
+      requirementsList.appendChild(li);
+    }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (policy.length) {
const li = document.createElement('li');
li.textContent = `${policy.length.min}${policy.length.max} characters`;
requirementsList.appendChild(li);
}
if (policy.length && (policy.length.min != null || policy.length.max != null)) {
const li = document.createElement('li');
const { min, max } = policy.length;
if (min != null && max != null) {
li.textContent = `${min}${max} characters`;
} else if (min != null) {
li.textContent = `At least ${min} characters`;
} else {
li.textContent = `At most ${max} characters`;
}
requirementsList.appendChild(li);
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@e2e/davinci-app/components/password.ts` around lines 37 - 41, The current
rendering uses policy.length.min and policy.length.max directly, which produces
"undefined" when one side is missing; update the logic around policy.length to
check length.min and length.max independently (e.g., if both present render
"min–max characters", if only min render "at least {min} characters", if only
max render "up to {max} characters"), only create/append the li element to
requirementsList when at least one of length.min or length.max exists, and use
the existing li variable for the text content assignment.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Apr 16, 2026

Open in StackBlitz

@forgerock/davinci-client

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/davinci-client@572

@forgerock/device-client

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/device-client@572

@forgerock/journey-client

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/journey-client@572

@forgerock/oidc-client

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/oidc-client@572

@forgerock/protect

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/protect@572

@forgerock/sdk-types

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/sdk-types@572

@forgerock/sdk-utilities

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/sdk-utilities@572

@forgerock/iframe-manager

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/iframe-manager@572

@forgerock/sdk-logger

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/sdk-logger@572

@forgerock/sdk-oidc

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/sdk-oidc@572

@forgerock/sdk-request-middleware

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/sdk-request-middleware@572

@forgerock/storage

pnpm add https://pkg.pr.new/ForgeRock/ping-javascript-sdk/@forgerock/storage@572

commit: 630f470

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Apr 16, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.79%. Comparing base (5d6747a) to head (630f470).
⚠️ Report is 32 commits behind head on main.

❌ Your project status has failed because the head coverage (15.79%) is below the target coverage (40.00%). You can increase the head coverage or adjust the target coverage.

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #572       +/-   ##
===========================================
- Coverage   70.90%   15.79%   -55.12%     
===========================================
  Files          53      154      +101     
  Lines        2021    26704    +24683     
  Branches      377     1134      +757     
===========================================
+ Hits         1433     4218     +2785     
- Misses        588    22486    +21898     
Files with missing lines Coverage Δ
packages/davinci-client/src/lib/client.types.ts 100.00% <ø> (ø)
packages/davinci-client/src/lib/collector.types.ts 100.00% <ø> (ø)
packages/davinci-client/src/lib/collector.utils.ts 83.16% <100.00%> (ø)
packages/davinci-client/src/lib/davinci.types.ts 100.00% <ø> (ø)
packages/davinci-client/src/lib/node.reducer.ts 71.35% <100.00%> (ø)
packages/davinci-client/src/lib/node.slice.ts 76.77% <100.00%> (ø)
packages/davinci-client/src/lib/node.types.ts 100.00% <ø> (ø)

... and 94 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 16, 2026

Deployed e54d93c to https://ForgeRock.github.io/ping-javascript-sdk/pr-572/e54d93c6df2bad62c3ada8b9c54a587a6c304282 branch gh-pages in ForgeRock/ping-javascript-sdk

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 16, 2026

📦 Bundle Size Analysis

📦 Bundle Size Analysis

🚨 Significant Changes

🔻 @forgerock/device-client - 0.0 KB (-9.9 KB, -100.0%)
🔻 @forgerock/journey-client - 0.0 KB (-89.9 KB, -100.0%)

📊 Minor Changes

📉 @forgerock/device-client - 9.9 KB (-0.0 KB)
📈 @forgerock/davinci-client - 48.8 KB (+0.9 KB)

➖ No Changes

@forgerock/oidc-client - 25.2 KB
@forgerock/sdk-utilities - 11.2 KB
@forgerock/sdk-types - 7.9 KB
@forgerock/protect - 150.1 KB
@forgerock/journey-client - 89.9 KB
@forgerock/storage - 1.5 KB
@forgerock/sdk-oidc - 4.8 KB
@forgerock/sdk-request-middleware - 4.5 KB
@forgerock/sdk-logger - 1.6 KB
@forgerock/iframe-manager - 2.4 KB


14 packages analyzed • Baseline from latest main build

Legend

🆕 New package
🔺 Size increased
🔻 Size decreased
➖ No change

ℹ️ How bundle sizes are calculated
  • Current Size: Total gzipped size of all files in the package's dist directory
  • Baseline: Comparison against the latest build from the main branch
  • Files included: All build outputs except source maps and TypeScript build cache
  • Exclusions: .map, .tsbuildinfo, and .d.ts.map files

🔄 Updated automatically on each push to this PR

…llback

Component-level policy takes precedence; falls back to root-level
passwordPolicy for backward compatibility during the migration period.

- Add passwordPolicy? to DaVinciNextResponse
- Thread root-level policy through node.slice → reducer → factory
- returnPasswordVerifyCollector prefers field.passwordPolicy ?? rootPasswordPolicy
- Add tests for fallback, precedence, and no-policy cases
- Restore root-level passwordPolicy in mock data (Solution 3 shape)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants