- Implement Next.js middleware for route protection - Create Zustand auth store for web (similar to mobile) - Add comprehensive tests for middleware and auth store - Protect authenticated routes (/dashboard, /profile) - Redirect unauthenticated users to /login - Redirect authenticated users from auth routes to /dashboard - Handle session expiration with 401 callback - Set access token cookie for middleware - All tests passing (105 tests total)
296 lines
12 KiB
HTML
296 lines
12 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<title>Code coverage report for services</title>
|
|
<meta charset="utf-8" />
|
|
<link rel="stylesheet" href="../prettify.css" />
|
|
<link rel="stylesheet" href="../base.css" />
|
|
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<style type='text/css'>
|
|
.coverage-summary .sorter {
|
|
background-image: url(../sort-arrow-sprite.png);
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class='wrapper'>
|
|
<div class='pad1'>
|
|
<h1><a href="../index.html">All files</a> services</h1>
|
|
<div class='clearfix'>
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">0% </span>
|
|
<span class="quiet">Statements</span>
|
|
<span class='fraction'>0/1408</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">0% </span>
|
|
<span class="quiet">Branches</span>
|
|
<span class='fraction'>0/851</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">0% </span>
|
|
<span class="quiet">Functions</span>
|
|
<span class='fraction'>0/264</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">0% </span>
|
|
<span class="quiet">Lines</span>
|
|
<span class='fraction'>0/1313</span>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<p class="quiet">
|
|
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
</p>
|
|
<template id="filterTemplate">
|
|
<div class="quiet">
|
|
Filter:
|
|
<input type="search" id="fileSearch">
|
|
</div>
|
|
</template>
|
|
</div>
|
|
<div class='status-line low'></div>
|
|
<div class="pad1">
|
|
<table class="coverage-summary">
|
|
<thead>
|
|
<tr>
|
|
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td class="file low" data-value="BeneficiaryDetailController.ts"><a href="BeneficiaryDetailController.ts.html">BeneficiaryDetailController.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="34" class="abs low">0/34</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="32" class="abs low">0/32</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="6" class="abs low">0/6</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="30" class="abs low">0/30</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="NavigationController.ts"><a href="NavigationController.ts.html">NavigationController.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="85" class="abs low">0/85</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="96" class="abs low">0/96</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="20" class="abs low">0/20</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="85" class="abs low">0/85</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="analytics.ts"><a href="analytics.ts.html">analytics.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="53" class="abs low">0/53</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="24" class="abs low">0/24</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="24" class="abs low">0/24</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="51" class="abs low">0/51</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="api.ts"><a href="api.ts.html">api.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="686" class="abs low">0/686</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="493" class="abs low">0/493</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="74" class="abs low">0/74</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="661" class="abs low">0/661</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="encryption.ts"><a href="encryption.ts.html">encryption.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="99" class="abs low">0/99</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="6" class="abs low">0/6</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="7" class="abs low">0/7</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="82" class="abs low">0/82</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="espProvisioning.ts"><a href="espProvisioning.ts.html">espProvisioning.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="77" class="abs low">0/77</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="37" class="abs low">0/37</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="13" class="abs low">0/13</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="76" class="abs low">0/76</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="offlineAwareApi.ts"><a href="offlineAwareApi.ts.html">offlineAwareApi.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="91" class="abs low">0/91</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="38" class="abs low">0/38</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="67" class="abs low">0/67</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="55" class="abs low">0/55</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="pushNotifications.ts"><a href="pushNotifications.ts.html">pushNotifications.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="59" class="abs low">0/59</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="26" class="abs low">0/26</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="10" class="abs low">0/10</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="59" class="abs low">0/59</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="sherpaTTS.ts"><a href="sherpaTTS.ts.html">sherpaTTS.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="103" class="abs low">0/103</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="50" class="abs low">0/50</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="25" class="abs low">0/25</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="98" class="abs low">0/98</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="storage.ts"><a href="storage.ts.html">storage.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="13" class="abs low">0/13</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="6" class="abs low">0/6</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="3" class="abs low">0/3</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="13" class="abs low">0/13</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="subscription.ts"><a href="subscription.ts.html">subscription.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="14" class="abs low">0/14</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="13" class="abs low">0/13</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="2" class="abs low">0/2</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="10" class="abs low">0/10</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="ultravoxService.ts"><a href="ultravoxService.ts.html">ultravoxService.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="25" class="abs low">0/25</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="14" class="abs low">0/14</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="5" class="abs low">0/5</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="24" class="abs low">0/24</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file low" data-value="wifiPasswordStore.ts"><a href="wifiPasswordStore.ts.html">wifiPasswordStore.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="69" class="abs low">0/69</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="16" class="abs low">0/16</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="8" class="abs low">0/8</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="69" class="abs low">0/69</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class='push'></div><!-- for sticky footer -->
|
|
</div><!-- /wrapper -->
|
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
Code coverage generated by
|
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
at 2026-02-01T00:54:53.932Z
|
|
</div>
|
|
<script src="../prettify.js"></script>
|
|
<script>
|
|
window.onload = function () {
|
|
prettyPrint();
|
|
};
|
|
</script>
|
|
<script src="../sorter.js"></script>
|
|
<script src="../block-navigation.js"></script>
|
|
</body>
|
|
</html>
|
|
|