@sinequa/atomic 2.10.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +181 -80
  2. package/dist/atomic.cjs +1 -1
  3. package/dist/atomic.js +1 -1
  4. package/dist/authentication/constants.d.ts +1 -1
  5. package/dist/authentication/events/auth-events.d.ts +2 -2
  6. package/dist/authentication/events/emit-authenticated-event.d.ts +1 -1
  7. package/dist/authentication/events/index.d.ts +2 -2
  8. package/dist/authentication/index.d.ts +4 -4
  9. package/dist/authentication/providers/index.d.ts +2 -2
  10. package/dist/authentication/providers/oauth-authentication.d.ts +1 -1
  11. package/dist/authentication/providers/redirect-to-identity-provider.d.ts +1 -1
  12. package/dist/authentication/providers/redirect-to-identity-provider.d.ts.map +1 -1
  13. package/dist/authentication/providers/saml-authentication.d.ts +1 -1
  14. package/dist/authentication/session/auth-mode-marker.d.ts +1 -1
  15. package/dist/authentication/session/auth-state.d.ts +1 -1
  16. package/dist/authentication/session/detect-auth-mode.d.ts +2 -2
  17. package/dist/authentication/session/has-session.d.ts +1 -1
  18. package/dist/authentication/session/index.d.ts +7 -7
  19. package/dist/authentication/session/login.d.ts +2 -2
  20. package/dist/authentication/session/logout.d.ts +4 -3
  21. package/dist/authentication/session/logout.d.ts.map +1 -1
  22. package/dist/authentication/session/redirect-guard.d.ts +1 -1
  23. package/dist/authentication/session/session-lost-latch.d.ts +1 -1
  24. package/dist/authentication/session/signed-out-guard.d.ts +1 -1
  25. package/dist/authentication/session/try-auto-authentication.d.ts +1 -1
  26. package/dist/authentication/session/try-auto-authentication.d.ts.map +1 -1
  27. package/dist/authentication/session/user-authentication.d.ts +1 -1
  28. package/dist/authentication/tokens/delete-web-token-cookie.d.ts +1 -1
  29. package/dist/authentication/tokens/delete-web-token-cookie.d.ts.map +1 -1
  30. package/dist/authentication/tokens/get-csrf-token.d.ts +1 -1
  31. package/dist/authentication/tokens/get-csrf-token.d.ts.map +1 -1
  32. package/dist/authentication/tokens/get-jwt-token.d.ts +2 -2
  33. package/dist/authentication/tokens/get-token.d.ts +1 -1
  34. package/dist/authentication/tokens/index.d.ts +5 -5
  35. package/dist/authentication/tokens/set-token.d.ts +1 -1
  36. package/dist/client/atomic-context.d.ts +4 -4
  37. package/dist/client/create-api.d.ts +49 -48
  38. package/dist/client/create-api.d.ts.map +1 -1
  39. package/dist/client/create-atomic-client.d.ts +8 -8
  40. package/dist/client/http-adapter.d.ts +1 -1
  41. package/dist/client/index.d.ts +4 -4
  42. package/dist/configurations/auth-options.d.ts +1 -1
  43. package/dist/configurations/global.config.d.ts +4 -4
  44. package/dist/configurations/index.d.ts +3 -3
  45. package/dist/helpers/aggregation-count.d.ts +3 -2
  46. package/dist/helpers/aggregation-count.d.ts.map +1 -1
  47. package/dist/helpers/column-resolver.d.ts +11 -3
  48. package/dist/helpers/column-resolver.d.ts.map +1 -1
  49. package/dist/helpers/columns.d.ts +1 -1
  50. package/dist/helpers/filters.d.ts +1 -1
  51. package/dist/helpers/index.d.ts +8 -8
  52. package/dist/helpers/metadata.d.ts +2 -2
  53. package/dist/helpers/pagination.d.ts +1 -1
  54. package/dist/helpers/to-aggregation-count.d.ts +11 -0
  55. package/dist/helpers/to-aggregation-count.d.ts.map +1 -0
  56. package/dist/index.d.ts +7 -7
  57. package/dist/polyfills/storage.d.ts +1 -1
  58. package/dist/spfx/index.cjs +1 -1
  59. package/dist/spfx/index.d.ts +3 -3
  60. package/dist/spfx/index.js +1 -1
  61. package/dist/src-CCjB0b1J.cjs +1 -0
  62. package/dist/{src-s3KlD6YE.js → src-CK3j-Qz_.js} +837 -760
  63. package/dist/types/agent-workspace/index.d.ts +3 -3
  64. package/dist/types/aggregations/Aggregation.d.ts +2 -2
  65. package/dist/types/aggregations/ListAggregation.d.ts +1 -1
  66. package/dist/types/aggregations/TreeAggregation.d.ts +2 -2
  67. package/dist/types/aggregations/TreeAggregationNode.d.ts +1 -1
  68. package/dist/types/aggregations/index.d.ts +6 -6
  69. package/dist/types/audit/AuditEvent.d.ts +2 -2
  70. package/dist/types/audit/AuditRecord.d.ts +1 -1
  71. package/dist/types/audit/index.d.ts +4 -4
  72. package/dist/types/chunks/index.d.ts +2 -2
  73. package/dist/types/config/CCAggregation.d.ts +7 -1
  74. package/dist/types/config/CCAggregation.d.ts.map +1 -1
  75. package/dist/types/config/CCApp.d.ts +11 -7
  76. package/dist/types/config/CCApp.d.ts.map +1 -1
  77. package/dist/types/config/CCAppRefresh.d.ts +1 -1
  78. package/dist/types/config/CCAutocomplete.d.ts +1 -1
  79. package/dist/types/config/CCColumn.d.ts +3 -3
  80. package/dist/types/config/CCColumnsInfo.d.ts +1 -1
  81. package/dist/types/config/CCIndex.d.ts +2 -2
  82. package/dist/types/config/CCLabels.d.ts +1 -1
  83. package/dist/types/config/CCList.d.ts +2 -2
  84. package/dist/types/config/CCQuery.d.ts +9 -9
  85. package/dist/types/config/CCRFM.d.ts +1 -1
  86. package/dist/types/config/CCTab.d.ts +1 -1
  87. package/dist/types/config/CCTabSearch.d.ts +1 -1
  88. package/dist/types/config/CCWebService.d.ts +13 -1
  89. package/dist/types/config/CCWebService.d.ts.map +1 -1
  90. package/dist/types/config/index.d.ts +26 -26
  91. package/dist/types/filters/BetweenFilter.d.ts +1 -1
  92. package/dist/types/filters/ExprFilter.d.ts +1 -1
  93. package/dist/types/filters/InFilter.d.ts +1 -1
  94. package/dist/types/filters/NotNullFilter.d.ts +1 -1
  95. package/dist/types/filters/NullFilter.d.ts +1 -1
  96. package/dist/types/filters/SimpleFilter.d.ts +1 -1
  97. package/dist/types/filters/index.d.ts +8 -8
  98. package/dist/types/filters/legacy-filters.d.ts +1 -1
  99. package/dist/types/index.d.ts +19 -19
  100. package/dist/types/interfaces/Query.d.ts +5 -5
  101. package/dist/types/interfaces/index.d.ts +3 -3
  102. package/dist/types/link-results/index.d.ts +2 -2
  103. package/dist/types/link-results/links-results.d.ts +1 -1
  104. package/dist/types/preview/CategoryHighlightData.d.ts +1 -1
  105. package/dist/types/preview/HighlightDataPerCategory.d.ts +1 -1
  106. package/dist/types/preview/HighlightValue.d.ts +1 -1
  107. package/dist/types/preview/PreviewData.d.ts +4 -4
  108. package/dist/types/preview/index.d.ts +8 -8
  109. package/dist/types/principal/PrincipalChangedEvent.d.ts +1 -1
  110. package/dist/types/principal/index.d.ts +6 -6
  111. package/dist/types/search/AccessLists.d.ts +1 -1
  112. package/dist/types/search/Answer.d.ts +1 -1
  113. package/dist/types/search/Article.d.ts +5 -5
  114. package/dist/types/search/DidYouMean.d.ts +2 -2
  115. package/dist/types/search/DocumentAccessLists.d.ts +1 -1
  116. package/dist/types/search/MatchLocationsPerPartname.d.ts +1 -1
  117. package/dist/types/search/MatchingPassage.d.ts +1 -1
  118. package/dist/types/search/QueryAnalysis.d.ts +1 -1
  119. package/dist/types/search/QueryIntent.d.ts +4 -4
  120. package/dist/types/search/QueryIntentData.d.ts +2 -2
  121. package/dist/types/search/QueryIntentMatch.d.ts +1 -1
  122. package/dist/types/search/QueryIntentResponse.d.ts +1 -1
  123. package/dist/types/search/RFMActionDisplay.d.ts +1 -1
  124. package/dist/types/search/RFMData.d.ts +1 -1
  125. package/dist/types/search/Result.d.ts +17 -16
  126. package/dist/types/search/Result.d.ts.map +1 -1
  127. package/dist/types/search/TopPassage.d.ts +1 -1
  128. package/dist/types/search/index.d.ts +32 -32
  129. package/dist/types/security-principal/index.d.ts +1 -1
  130. package/dist/types/user-profile/user-profile.d.ts +5 -0
  131. package/dist/types/user-profile/user-profile.d.ts.map +1 -1
  132. package/dist/utils/aggregations.d.ts +3 -3
  133. package/dist/utils/index.d.ts +11 -11
  134. package/dist/utils/query-params.d.ts +1 -1
  135. package/dist/utils/to-sql.d.ts +1 -1
  136. package/dist/web-api/helpers/create-headers.d.ts +1 -1
  137. package/dist/web-api/helpers/errors/server-error.d.ts +1 -1
  138. package/dist/web-api/helpers/errors/timeout-error.d.ts +1 -1
  139. package/dist/web-api/helpers/errors/unauthorized-error.d.ts +1 -1
  140. package/dist/web-api/helpers/handle-response.d.ts +2 -2
  141. package/dist/web-api/helpers/handle-response.d.ts.map +1 -1
  142. package/dist/web-api/helpers/index.d.ts +16 -16
  143. package/dist/web-api/helpers/methods/del.d.ts +3 -3
  144. package/dist/web-api/helpers/methods/get.d.ts +3 -3
  145. package/dist/web-api/helpers/methods/patch-raw.d.ts +14 -0
  146. package/dist/web-api/helpers/methods/patch-raw.d.ts.map +1 -0
  147. package/dist/web-api/helpers/methods/patch.d.ts +3 -3
  148. package/dist/web-api/helpers/methods/patch.d.ts.map +1 -1
  149. package/dist/web-api/helpers/methods/post.d.ts +3 -3
  150. package/dist/web-api/helpers/methods/put.d.ts +3 -3
  151. package/dist/web-api/helpers/methods/send-patch.d.ts +11 -0
  152. package/dist/web-api/helpers/methods/send-patch.d.ts.map +1 -0
  153. package/dist/web-api/helpers/methods/send-request.d.ts +2 -2
  154. package/dist/web-api/helpers/utils/build-request-url.d.ts +2 -2
  155. package/dist/web-api/helpers/utils/create-timeout-controller.d.ts +6 -1
  156. package/dist/web-api/helpers/utils/create-timeout-controller.d.ts.map +1 -1
  157. package/dist/web-api/helpers/utils/resolve-no-auto-authentication.d.ts +1 -1
  158. package/dist/web-api/index.d.ts +23 -23
  159. package/dist/web-api/v1/fetch-aggregation.d.ts +2 -2
  160. package/dist/web-api/v1/fetch-aggregation.d.ts.map +1 -1
  161. package/dist/web-api/v1/fetch-app.d.ts +2 -2
  162. package/dist/web-api/v1/fetch-audit.d.ts +2 -2
  163. package/dist/web-api/v1/fetch-dataset.d.ts +2 -2
  164. package/dist/web-api/v1/fetch-labels.d.ts +2 -2
  165. package/dist/web-api/v1/fetch-preview.d.ts +2 -2
  166. package/dist/web-api/v1/fetch-principal.d.ts +3 -3
  167. package/dist/web-api/v1/fetch-query-export.d.ts +9 -4
  168. package/dist/web-api/v1/fetch-query-export.d.ts.map +1 -1
  169. package/dist/web-api/v1/fetch-query-intent.d.ts +2 -2
  170. package/dist/web-api/v1/fetch-query.d.ts +3 -3
  171. package/dist/web-api/v1/fetch-security-principal.d.ts +2 -2
  172. package/dist/web-api/v1/fetch-similar-documents.d.ts +2 -2
  173. package/dist/web-api/v1/fetch-sponsored-links.d.ts +2 -2
  174. package/dist/web-api/v1/fetch-suggest.d.ts +2 -2
  175. package/dist/web-api/v1/fetch-text-chunk.d.ts +2 -2
  176. package/dist/web-api/v1/fetch-user-settings.d.ts +2 -2
  177. package/dist/web-api/v1/fetch-user-settings.d.ts.map +1 -1
  178. package/dist/web-api/v2/fetch-agent-workspace-status.d.ts +3 -3
  179. package/dist/web-api/v2/fetch-agent-workspace.d.ts +3 -3
  180. package/dist/web-api/v2/fetch-change-password.d.ts +1 -1
  181. package/dist/web-api/v2/fetch-forgot-password.d.ts +1 -1
  182. package/dist/web-api/v2/fetch-user-profile.d.ts +29 -6
  183. package/dist/web-api/v2/fetch-user-profile.d.ts.map +1 -1
  184. package/dist/web-api/v2/fetch-version.d.ts +1 -1
  185. package/package.json +2 -2
  186. package/dist/src-CPlI3qi5.cjs +0 -1
package/README.md CHANGED
@@ -13,8 +13,6 @@
13
13
  Authentication, search, aggregations, datasets, preview — everything typed, tree-shakable, zero runtime dependencies.
14
14
  SPFx-ready via the `@sinequa/atomic/spfx` subpath export.
15
15
 
16
- [Docs](./docs/index.mdx) · [Get started](./docs/start/index.mdx) · [Reference](./docs/reference/index.mdx)
17
-
18
16
  </div>
19
17
 
20
18
  ---
@@ -54,13 +52,27 @@ const result = await fetchQuery({
54
52
  });
55
53
 
56
54
  // One round-trip: the documents are in `records`, the facet counts in `aggregations`.
57
- // Check `$error` before concluding anything from an empty `records`.
58
- const { records, aggregations, $error } = result;
55
+ const { records, aggregations } = result;
56
+ ```
57
+
58
+ A failed request **throws** (`UnauthorizedError` on 401, `ServerError` on 500, `ApiError` otherwise): an
59
+ empty `records` is a real "no match", never a swallowed failure. Wrap the call in `try/catch` to handle it.
60
+ `Result.$error` is only declared by this library — it is set by `@sinequa/atomic-angular`'s `QueryService`
61
+ (which catches the error and returns it), never by `fetchQuery`.
62
+
63
+ ```typescript
64
+ try {
65
+ const result = await fetchQuery({ name: "<your-query>", text: "knowledge management" });
66
+ render(result.records);
67
+ } catch (err) {
68
+ // ApiError | ServerError | UnauthorizedError | TimeoutError
69
+ showError(err);
70
+ }
59
71
  ```
60
72
 
61
73
  `fetchAggregation(aggregation, query)` is for **paging** an aggregation you already received — it
62
74
  takes the `Aggregation` object off `result.aggregations` and the same query, as two positional
63
- arguments. See [Aggregations](./docs/search/aggregations.mdx).
75
+ arguments.
64
76
 
65
77
  ---
66
78
 
@@ -91,7 +103,7 @@ Call `initializeAadHttpClient(null)` to detach the client (e.g. in `onDispose`).
91
103
  > and `AadHttpResponseLike`. `initializeAadHttpClient` registers the client globally for the free
92
104
  > functions; `createSpfxHttpAdapter(aadHttpClient)` is the same transport as an `httpAdapter` for
93
105
  > `createAtomicClient`. Standard (non-SPFx) consumers use `@sinequa/atomic` directly — no changes
94
- > needed. See [SPFx](./docs/integration/spfx.mdx).
106
+ > needed.
95
107
 
96
108
  ---
97
109
 
@@ -117,29 +129,28 @@ const results = await client.http.post("api/v1/search.query", { text: "hello" })
117
129
  The free functions below keep working unchanged: they run on a default client whose configuration
118
130
  **is** `globalConfig`, and `getDefaultClient()` hands back that very instance — useful from code
119
131
  that cannot receive one (a distributed web component, a plugin).
120
- See [The client](./docs/core/client.mdx) and [Multiple backends](./docs/integration/multiple-backends.mdx).
121
132
 
122
133
  ### Authentication
123
134
 
124
135
  Full auth lifecycle — from first handshake to logout.
125
136
 
126
- | Export | Description |
127
- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
128
- | `isAuthenticated()` | Synchronous. `true` when a CSRF token is stored **or** a token-less session was recorded (ambient SSO issues no client token) |
129
- | `hasSession()` | Asks the server when nothing is stored, and never redirects — unlike `login()` |
130
- | `login(credentials?)` | Login — switches on the resolved `authMode` (credentials / SSO / OAuth / SAML / bearer / unknown) |
131
- | `logout()` | Clears session, returns the server's `redirectUrl` |
132
- | `clearSessionTokens()` | Drops the local session (tokens, token-less flag) and emits `authenticated: false`, without a server round-trip |
133
- | `detectAuthMode(config, preLogin?)` | Pure resolution of the `AuthMode` from config + server pre-login (no I/O) |
134
- | `getToken()` / `setToken(token)` | Read/write the stored CSRF token |
135
- | `requestWebTokenSession(credentials?)` | POSTs `security.webtoken`. The JWT lands in a cookie; the returned (and stored) value is the **CSRF token**. Omit the credentials to use the configured bearer token |
136
- | `getCsrfToken()` | CSRF token for mutating requests |
137
- | `deleteWebTokenCookie()` | Explicitly removes the web token cookie |
138
- | `onAuthEvent(event, handler)` | Typed subscription to the auth lifecycle (`authenticated`, `unauthorized`, `sessionLost`, `requestFailed`, `tokenRefreshed`, `loggedOut`) — returns the unsubscribe function |
139
- | `tryAutoAuthentication()` | Probes a protected endpoint for server-side auto-authentication (OIDC, IIS Negotiate) — used by `login()` in `sso`, `unknown` and `bearer` modes. Never throws |
140
- | `isRedirectPending()` | Whether an OAuth/SAML redirect is in flight and has not established a session yet |
141
- | `tryOAuthAuthentication()` / `trySAMLAuthentication()` | Redirect to the configured identity provider (with a one-shot redirect-loop guard) |
142
- | `emitAuthenticatedEvent(bool)` | Dispatches the DOM `'authenticated'` CustomEvent (on `document`, bubbles to `window`) |
137
+ | Export | Description |
138
+ | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
139
+ | `isAuthenticated()` | Synchronous. `true` when a CSRF token is stored **or** a token-less session was recorded (ambient SSO issues no client token) |
140
+ | `hasSession()` | Asks the server when nothing is stored, and never redirects — unlike `login()` |
141
+ | `login(credentials?)` | Login — switches on the resolved `authMode` (credentials / SSO / OAuth / SAML / bearer / unknown) |
142
+ | `logout()` | Clears the local session and deletes the cookie; resolves to the server's `logoutUrl` (`Promise<string \| undefined>`), `undefined` if the deletion failed or during impersonation |
143
+ | `clearSessionTokens()` | Drops the local session (tokens, token-less flag) and emits `authenticated: false`, without a server round-trip |
144
+ | `detectAuthMode(config, preLogin?)` | Pure resolution of the `AuthMode` from config + server pre-login (no I/O) |
145
+ | `getToken()` / `setToken(token)` | Read/write the stored CSRF token |
146
+ | `requestWebTokenSession(credentials?)` | POSTs `security.webtoken`. The JWT lands in a cookie; the returned (and stored) value is the **CSRF token**. Omit the credentials to use the configured bearer token |
147
+ | `getCsrfToken()` | CSRF token for mutating requests |
148
+ | `deleteWebTokenCookie()` | Explicitly removes the web token cookie |
149
+ | `onAuthEvent(event, handler)` | Typed subscription to the auth lifecycle (`authenticated`, `unauthorized`, `sessionLost`, `requestFailed`, `tokenRefreshed`, `loggedOut`) — returns the unsubscribe function |
150
+ | `tryAutoAuthentication()` | Probes a protected endpoint for server-side auto-authentication (OIDC, IIS Negotiate) — used by `login()` in `sso`, `unknown` and `bearer` modes. Never throws |
151
+ | `isRedirectPending()` | Whether an OAuth/SAML redirect is in flight and has not established a session yet |
152
+ | `tryOAuthAuthentication()` / `trySAMLAuthentication()` | Redirect to the configured identity provider (with a one-shot redirect-loop guard) |
153
+ | `emitAuthenticatedEvent(bool)` | Dispatches the DOM `'authenticated'` CustomEvent (on `document`, bubbles to `window`) |
143
154
 
144
155
  > `getJWToken` is **`@deprecated`**: it is an alias of `requestWebTokenSession`, renamed because the
145
156
  > old name suggested it returned the JWT. It will be removed in the next major.
@@ -147,8 +158,7 @@ Full auth lifecycle — from first handshake to logout.
147
158
  The authentication layer is configurable via `setGlobalConfig({ auth: { … } })` (`AuthOptions`):
148
159
  `timeoutMs`, `probeEndpoint`, injectable `storage`/`logger`/`fetch`, the requests' `credentials`
149
160
  mode, and `recoverFromUnauthorized` — the hook that re-establishes a session after a 401 and gets
150
- the request replayed once. See [Authentication](./docs/auth/index.mdx) and
151
- [Handling 401](./docs/auth/handling-401.mdx).
161
+ the request replayed once.
152
162
 
153
163
  ```typescript
154
164
  import { isAuthenticated, login, logout } from "@sinequa/atomic";
@@ -162,7 +172,10 @@ if (!isAuthenticated()) {
162
172
  const okWithCredentials = await login({ username: "alice", password: "s3cr3t" });
163
173
  }
164
174
 
165
- const redirectUrl = await logout();
175
+ // Resolves to the provider's `logoutUrl` (to navigate to), or `undefined` when there is none —
176
+ // the cookie deletion failed (logged, not thrown) or impersonation is active (cookie left alone).
177
+ const logoutUrl = await logout();
178
+ if (logoutUrl) window.location.assign(logoutUrl);
166
179
  ```
167
180
 
168
181
  #### Auth mode (`AuthMode`) — **2.0**
@@ -189,7 +202,6 @@ const kind = globalConfig.authMode?.kind; // 'credentials' | 'sso' | 'oauth' | '
189
202
  > **`@deprecated` read-only getters** derived from `authMode`. Reading them still works, and writing
190
203
  > them through `setGlobalConfig({ useSSO: true })` is translated into the matching `authMode` — so
191
204
  > existing code keeps working. Prefer `authMode.kind` (and the `AuthMode.*` constructors) in new code.
192
- > Full upgrade notes: [Migrating from 1.x](./docs/reference/migrating-from-1x.mdx).
193
205
 
194
206
  ---
195
207
 
@@ -220,7 +232,7 @@ import {
220
232
  ```
221
233
 
222
234
  Auditing is not a `fetch*` function: use `Audit.notify(...)`, plus the record decorators
223
- `addAuditAdditionalInfo`, `addSessionId` and `addUrl`. See [Audit](./docs/integration/audit.mdx).
235
+ `addAuditAdditionalInfo`, `addSessionId` and `addUrl`.
224
236
 
225
237
  ### Web API — v2
226
238
 
@@ -233,9 +245,6 @@ import {
233
245
  } from "@sinequa/atomic";
234
246
  ```
235
247
 
236
- The full endpoint list — with the `client.api` method and the free function for each — is in
237
- [Endpoints](./docs/reference/endpoints.mdx).
238
-
239
248
  ---
240
249
 
241
250
  ### Helpers
@@ -256,8 +265,6 @@ import {
256
265
  } from "@sinequa/atomic";
257
266
  ```
258
267
 
259
- More in [Helpers](./docs/reference/helpers.mdx).
260
-
261
268
  #### Filter builder
262
269
 
263
270
  Build structured `query.filters` without hand-writing filter objects. Combinators ignore falsy
@@ -281,7 +288,7 @@ Leaf operators: `eq` · `neq` · `gt` · `gte` · `lt` · `lte` · `like` · `co
281
288
  `filter.distribution(field, item.value)` handles the one case the leaf operators cannot: a
282
289
  **distribution** aggregation item (a date or size bucket), whose `value` is an expression the server
283
290
  built rather than a value. Passing it to `filter.eq` makes the backend answer
284
- `500 — "Field type error"`. See [Filters](./docs/search/filters.mdx).
291
+ `500 — "Field type error"`.
285
292
 
286
293
  ---
287
294
 
@@ -299,9 +306,11 @@ import {
299
306
  } from "@sinequa/atomic";
300
307
  ```
301
308
 
302
- > The library's verbosity is set with `configureLogger({ level: LogLevel.DEBUG })`, **not** through
303
- > a configuration key. See [Logging](./docs/integration/logging.mdx) and
304
- > [URL state](./docs/search/url-state.mdx).
309
+ > The library's verbosity is set with `configureLogger({ level: LogLevel.DEBUG })`. `LogLevel` is
310
+ > `DEBUG` (0), `INFO` (1), `WARN` (2), `ERROR` (3), `NONE` (4); the default is `INFO`.
311
+ > `setGlobalConfig({ logLevel })` applies it too (it forwards to `configureLogger({ level })`), but
312
+ > `createAtomicClient({ logLevel })` and `client.configure({ logLevel })` do **not**: the logger is
313
+ > process-wide, so a client scopes its logging through `auth.logger` instead.
305
314
 
306
315
  ---
307
316
 
@@ -336,8 +345,6 @@ import type {
336
345
  } from "@sinequa/atomic";
337
346
  ```
338
347
 
339
- Which type comes back from which call: [Type map](./docs/reference/types-map.mdx).
340
-
341
348
  ---
342
349
 
343
350
  ## Configuration
@@ -363,60 +370,154 @@ when they were not provided, then resolves the `authMode` from the server's pre-
363
370
 
364
371
  > `appInitializerFn` is a **`@deprecated`** alias of `initializeAppConfig` — use the latter.
365
372
 
366
- Three declared keys are read by nothing, and setting them has no effect: `logLevel` (set the level
367
- with `configureLogger({ level })`), `loginPath` (routing is yours — use `recoverFromUnauthorized` or
368
- the `unauthorized` event) and `createRoutes`. Every key, with its default:
369
- [Configuration keys](./docs/reference/config-keys.mdx).
373
+ `logLevel` is applied by `setGlobalConfig({ logLevel })` only (see the logger note above: a client
374
+ created with `createAtomicClient` ignores it). Two declared keys are inert in `@sinequa/atomic` and
375
+ `@deprecated` there: `loginPath` (routing is yours — use `recoverFromUnauthorized` or the
376
+ `unauthorized` event) and `createRoutes`. They are still **read by `@sinequa/atomic-angular`**, so
377
+ leave them alone in an Angular application.
370
378
 
371
379
  ---
372
380
 
373
- ## Testing
381
+ ## AI agent skill
374
382
 
375
- ```bash
376
- npm test # vitest, watch mode
377
- npm test -- --watch=false # single run (what CI does)
378
- ```
379
-
380
- `--ui` is not available out of the box: `@vitest/ui` is an optional peer of vitest and is not
381
- installed here — `npm i -D @vitest/ui` first.
382
-
383
- Coverage is deepest on authentication (`AuthMode` detection, OAuth, SAML, credentials, tokens,
384
- 401 recovery) and on the HTTP helpers. On the endpoints it is targeted rather than exhaustive —
385
- `fetchQuery`, `fetchAggregation`, `fetchPrincipal`, `searchPrincipals`, `fetchApp` and the
386
- agent-workspace workspaces. Also covered: the filter builder, metadata parsing, column resolution,
387
- pagination, date utilities and the SQL value helper.
388
-
389
- Injecting `fetch`, `storage` and `logger` through the configuration is what lets a test avoid module
390
- mocks — see [Testing](./docs/integration/testing.mdx).
391
-
392
- ---
393
-
394
- ## Development
383
+ An [agent skill](https://skills.sh) teaches coding agents (Claude Code, Cursor, Copilot...) how to use `@sinequa/atomic` correctly: setup, authentication, search, SPFx, common pitfalls. Install it from the public Sinequa Mint repository (`sinequa/sba-mint`):
395
384
 
396
385
  ```bash
397
- npm run build # production build (vite + tsc)
398
- npm run watch # rebuild on change
399
- npm run dev:pack # build + pack locally
386
+ npx skills add sinequa/sba-mint --skill atomic
400
387
  ```
401
388
 
402
- ---
389
+ The skill is also versioned with the library in `skills/atomic` (internal GitLab: `npx skills add https://gitlab.chapsvision.in/sinequa/rnd/sba-atomic-js.git --skill atomic`).
403
390
 
404
- ## Contributing
391
+ ---
405
392
 
406
- 1. All tests must pass.
407
- 2. Lint and format with Vite+ (Oxlint/Oxfmt) — `npx vp check --fix`
408
- 3. Follow [Conventional Commits](https://www.conventionalcommits.org/).
409
- 4. Any change touching `src/` needs a **changeset** in the same commit (`npm run changeset`, then
410
- `npm run changeset:status` to check) — the `changeset-check` CI job blocks the merge without one.
411
- Add `#skip-changeset` to the MR title for a change that does not touch the published library.
412
- Full guide, with examples: [`CONTRIBUTING-changesets.md`](./CONTRIBUTING-changesets.md).
413
- 5. New public API → add tests + JSDoc, and export it from `src/index.ts` (a helper that is written
414
- and tested but not re-exported from the barrel is not part of the public API).
393
+ ## Releases
394
+
395
+ What changed since **2.0.0**, newest first.
396
+
397
+ ### 2.11
398
+
399
+ - `patchUserProfile()` now sends the **bare value** of the property as the PATCH body (`null` when it
400
+ is missing) instead of the whole profile, as the endpoint expects. Its signature is unchanged, but
401
+ it needs a backend that supports this: an older one answers `400`. `patch()` and
402
+ `patchWithContext()` are unaffected.
403
+ - `patchUserProfile()` and `deleteUserProfileProperty()` throw before sending anything when
404
+ `userProfile.data.id` is missing, and percent-encode the user id, category and property name.
405
+
406
+ ### 2.10
407
+
408
+ - **Masked dates** (`YYYY`, `YYYY-MM`) in date aggregations: `translateAggregationToDateOptions`
409
+ falls back to the item `value` when there is no `display`, and the filter now covers the real
410
+ period (`>= first day AND < first day of the next period`) instead of an `eq` on a partial date.
411
+ New `getDateMask` / `getMaskedDateBounds` helpers, and `Query.aggregation_overrides` to have the
412
+ engine aggregate a date column at a given granularity.
413
+ - `parseValueAndOperatorFromItem` now reads all four comparison operators (`>` and `<=` were both
414
+ read as `lt`) and produces a readable label for distribution items without `display`.
415
+
416
+ ### 2.9 — Agent Workspace rename ⚠️
417
+
418
+ The document-upload "containers" are now **workspaces**, following the backend. The old `container*`
419
+ names are removed without aliases:
420
+
421
+ - Functions: `listWorkspaces`, `getWorkspace`, `createWorkspace`, `updateWorkspace`,
422
+ `deleteWorkspaces`, `listWorkspaceDocuments`, `addWorkspaceDocuments`, `deleteWorkspaceDocuments`.
423
+ - Client: `api.containers` → `api.workspaces`.
424
+ - Payload fields: `containerId` → `workspaceId`, `containerIds` → `workspaceIds`, `containers[]` →
425
+ `workspaces[]`. Code still reading `res.containers` silently gets `undefined`.
426
+
427
+ ### 2.8
428
+
429
+ - New **`sessionLost`** auth event (`client.auth.on("sessionLost", …)` / `onAuthEvent`): fires once
430
+ when a 401 could not be recovered, i.e. the session is really gone. Use it — rather than
431
+ `unauthorized`, which fires before any recovery — to show a "session expired" message.
432
+ - A `recoverFromUnauthorized` hook that throws synchronously now counts as a refusal, like one that
433
+ rejects.
434
+
435
+ ### 2.7
436
+
437
+ - `fetchUploadStatus()` to poll document-upload jobs, and `addWorkspaceDocuments()` (initially
438
+ `addContainerDocuments()`) to attach existing documents without a file transfer.
439
+ - **Fix** `searchPrincipals()`, which returned nothing; new `fetchPrincipalsByIds()` to resolve
440
+ `domain|id` identities.
441
+ - **Fix** workspace list / document list pagination.
442
+
443
+ ### 2.6
444
+
445
+ - `flattenLegacyFilterValues()` flattens a legacy filter tree into its leaf values and displays, to
446
+ match an applied filter back against aggregation items or distribution buckets.
447
+
448
+ ### 2.5
449
+
450
+ - `getOffsetFromDates()` / `getRelativeDate()` report the largest fitting unit (`year`, `month`,
451
+ `week`, `day`): "last year" instead of "400 days ago".
452
+ - `DidYouMeanItem.appliedChanges`: per-term correction action reported by the engine (≥ 11.14).
453
+ - More accurate types: `fetchQuery` / `fetchBulkQuery` return `Result & ResultPages`,
454
+ `QueryIntent.datasets` is no longer self-referential, `getIdFromUrl()` returns
455
+ `string | undefined`.
456
+ - **Fixes**: `fetchSendPasswordResetEmail()` no longer throws outside a browser (new optional
457
+ `changePasswordRedirectUrl` argument — a positionally-passed context must move); the label mutations
458
+ are now audited; `fetchPreviewUrl()` actually returns the rendition; `resolveToColumnName()` no
459
+ longer throws on a configuration without the merged schema.
460
+
461
+ ### 2.4
462
+
463
+ - `setGlobalConfig({ logLevel })` now applies the level. `loginPath` and `createRoutes` are
464
+ `@deprecated` (nothing reads them).
465
+ - `toSqlValue()` is exported.
466
+ - **Fixes**: requests with a body no longer throw on Node 18/20 (`navigator` missing);
467
+ `$hasMore` works on aggregations whose `count` is not 10 — declare real page sizes with the new
468
+ `aggregationCounts` key (`resolveAggregationCount()` / `aggregationHasMore()` helpers); the
469
+ two-argument `fetchAggregation()` now actually works and takes an optional `count`.
470
+ - ⚠️ `sha512()` now **throws** without the Web Crypto API (plain-HTTP pages) instead of returning a
471
+ weak 32-bit hash. Use the new `hashString()` for cache keys and identifiers; serve over HTTPS for
472
+ real hashing.
473
+
474
+ ### 2.3 — Client, auth events, 401 recovery
475
+
476
+ - **`createAtomicClient()` / `getDefaultClient()`** (experimental): isolated clients, each with its
477
+ own configuration, session and subscribers — several backends on one page, no module mocks in
478
+ tests. The whole API layer is context-aware and exposed as `client.api.*`. The free functions keep
479
+ working unchanged.
480
+ - **Auth lifecycle**: `onAuthEvent()` (`authenticated`, `unauthorized`, `requestFailed`,
481
+ `tokenRefreshed`, `loggedOut`), `auth.recoverFromUnauthorized` (silent re-authentication, the
482
+ request is replayed once), `hasSession()` (redirect-free probe), `isRedirectPending()`,
483
+ `isExternalAuthMode()`, `requestWebTokenSession()` (replaces the misleadingly named
484
+ `getJWToken`, kept as a deprecated alias) and `AuthOptions` (timeout, storage, logger, fetch,
485
+ credentials mode).
486
+ - `filter.distribution()` for date/size distribution buckets; `AggregateResult` for aggregate
487
+ responses; `uiLanguage` key (also drives the request `locale`); unified `RequestOptions` on every
488
+ HTTP helper, including `signal` and `noRecovery`.
489
+ - **Fixes**: an explicit `authMode` is honoured (and `AuthMode.bearer(token)` actually sends its
490
+ token); `bearer` mode works with access tokens that forbid `webtoken`; `sso` mode can re-establish
491
+ a lost session; the OAuth/SAML redirect-loop guard really stops the loop; a 401 trailing behind a
492
+ `logout()` no longer signs the user back in; created clients use the SPFx `AadHttpClient`; clear
493
+ errors and complete HTTP error bodies.
494
+
495
+ ### 2.2
496
+
497
+ - Document-upload container management endpoints (API v2) — renamed to workspaces in 2.9.
498
+ - `searchPrincipals()` for search-as-you-type principal lookup.
499
+
500
+ ### 2.0.1 – 2.1.0
501
+
502
+ - **2.1** — `del()` accepts a JSON body; any 2xx status is now treated as success; `put()` sends the
503
+ right `Content-Type`; the JWT request no longer sets explicit headers; a user-profile property
504
+ deletion failure now surfaces an error.
505
+ - **2.0.8** — A credentials session is no longer mistaken for SSO.
506
+ - **2.0.6** — `legacyFilterToFilter()` converts legacy filters to the new `Filter` format.
507
+ - **2.0.5** — Token-less **Windows/IIS SSO** support.
508
+ - **2.0.4** — **SPFx support** through the `@sinequa/atomic/spfx` subpath export.
509
+ - **2.0.3** — OIDC server-side auto-authentication is trusted; CSRF refresh is best-effort and
510
+ `getCsrfToken()` returns `null` on a token-less 200 instead of throwing; the static index fetch
511
+ honours `basePath`.
512
+ - **2.0.2** — OIDC server-side auto-authentication in the `unknown` login branch; new `important`
513
+ option on notification events.
514
+ - **2.0.1** — OAuth/SAML redirect loop is broken when the provider never authenticates; `userOverride`
515
+ typo fixed in credentials login.
415
516
 
416
517
  ---
417
518
 
418
519
  <div align="center">
419
520
 
420
- Built for the [Sinequa](https://www.sinequa.com/) ecosystem · [Report an issue](https://gitlab.chapsvision.in/sinequa/rnd/sba-atomic-js/-/issues)
521
+ Built for the [Sinequa](https://www.sinequa.com/) ecosystem
421
522
 
422
523
  </div>
package/dist/atomic.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-CPlI3qi5.cjs");exports.API=e._t,exports.ApiError=e.qn,exports.Audit=e.At,exports.AuditEventType=e.in,exports.AuthMode=e.ir,exports.DEFAULT_AGGREGATION_COUNT=e.on,exports.DidYouMeanKind=e.en,exports.EngineType=e.rn,exports.EngineTypeModifier=e.nn,exports.LogLevel=e.ur,exports.MINIMUM_COMPATIBLE_SERVER_API_VERSION=e.tn,exports.RFMDisplay=e.$t,exports.ServerError=e.Wn,exports.TimeoutError=e.Ln,exports.UnauthorizedError=e.Kn,exports.addAuditAdditionalInfo=e.jt,exports.addConcepts=e.b,exports.addSessionId=e.Mt,exports.addUrl=e.Nt,exports.addWorkspaceDocuments=e.W,exports.aggItemRegex=e.D,exports.aggregationHasMore=e.sn,exports.aggregationItemStrictCompare=e.O,exports.appInitializerFn=e.ln,exports.applyConfig=e.tr,exports.assertNever=e.On,exports.bisect=e.E,exports.buildPathsAndLevels=e.mt,exports.clearSessionTokens=e.xn,exports.configureLogger=e.dr,exports.createAtomicClient=e.F,exports.createHeaders=e.Jn,exports.createHeadersWithContext=e.Yn,exports.createTimeoutController=e.In,exports.createUserProfile=e.R,exports.createWorkspace=e.G,Object.defineProperty(exports,"debug",{enumerable:!0,get:function(){return e.fr}}),exports.del=e._n,exports.delWithContext=e.vn,exports.deleteUserProfileProperty=e.z,exports.deleteUserSettings=e.$,exports.deleteWebTokenCookie=e.Cn,exports.deleteWorkspaceDocuments=e.K,exports.deleteWorkspaces=e.q,exports.detectAuthMode=e.Nn,exports.emitAuthenticatedEvent=e.Zn,Object.defineProperty(exports,"error",{enumerable:!0,get:function(){return e.pr}}),exports.escapeExpr=e.Pt,exports.expiresSoon=e.n,exports.extraColumns=e.Zt,exports.fetchAggregation=e.kt,exports.fetchApp=e.un,exports.fetchAppPreLogin=e.dn,exports.fetchBulkQuery=e.ht,exports.fetchChangePassword=e.Q,exports.fetchDataset=e.Et,exports.fetchDatasetList=e.Dt,exports.fetchDatasets=e.Ot,exports.fetchLabels=e.wt,exports.fetchPreview=e.St,exports.fetchPreviewUrl=e.Ct,exports.fetchPrincipal=e.vt,exports.fetchPrincipalList=e.yt,exports.fetchPrincipalUserid=e.bt,exports.fetchPrincipalUserids=e.xt,exports.fetchPrincipalsByIds=e.ut,exports.fetchQuery=e.gt,exports.fetchQueryExport=e.pt,exports.fetchQueryIntent=e.ft,exports.fetchSendPasswordResetEmail=e.H,exports.fetchSimilarDocuments=e.lt,exports.fetchSponsoredLinks=e.ct,exports.fetchSuggest=e.it,exports.fetchSuggestField=e.at,exports.fetchSuggestQuery=e.ot,exports.fetchTextChunks=e.rt,exports.fetchUploadStatus=e.U,exports.fetchUserProfile=e.B,exports.fetchUserSettings=e.et,exports.fetchVersion=e.L,exports.filter=e.Jt,exports.flattenLegacyFilterValues=e.Yt,exports.get=e.jn,exports.getConcepts=e.x,exports.getCsrfToken=e.An,exports.getDateMask=e.k,exports.getDefaultClient=e.I,exports.getFiltersFromURI=e.s,exports.getFiltersFromUrl=e.c,exports.getHelpIndexUrl=e.a,exports.getIdFromUrl=e.l,exports.getJWToken=e.En,exports.getMaskedDateBounds=e.A,exports.getMetadata=e.Kt,exports.getMetadataWithValues=e.qt,exports.getOffsetFromDates=e.v,exports.getQueryPageFromUrl=e.u,exports.getQueryParamsFromUrl=e.d,exports.getQueryTabFromUrl=e.f,exports.getQueryTextFromUrl=e.p,exports.getRelativeDate=e.y,exports.getTime=e.Ft,exports.getToken=e.Xn,exports.getUrlParamsFromQueryParams=e.m,exports.getWithContext=e.Mn,exports.getWorkspace=e.J,exports.globalConfig=e.nr,exports.guid=e.It,exports.handleResponse=e.Hn,exports.handleResponseWithContext=e.Un,exports.hasSession=e.kn,exports.hashString=e.Lt,Object.defineProperty(exports,"info",{enumerable:!0,get:function(){return e.mr}}),exports.initializeAppConfig=e.fn,exports.isArrayBuffer=e.Rt,exports.isAuthenticated=e.yn,exports.isBlob=e.zt,exports.isDate=e.Bt,exports.isExpired=e.r,exports.isExternalAuthMode=e.ar,exports.isJsonable=e.Vt,exports.isNotInputEvent=e._,exports.isObject=e.Ht,exports.isRedirectPending=e.bn,exports.isString=e.Ut,exports.labels=e.Tt,exports.legacyBooleansToAuthMode=e.or,exports.legacyFilterToFilter=e.Xt,exports.listWorkspaceDocuments=e.Y,exports.listWorkspaces=e.X,exports.login=e.wn,exports.logout=e.Sn,exports.makeColumn=e.Qt,exports.notify=e.g,exports.onAuthEvent=e.gr,exports.openParentNodes=e.j,exports.parseText=e.S,exports.parseValueAndOperatorFromItem=e.M,exports.patch=e.hn,exports.patchUserProfile=e.V,exports.patchUserSettings=e.tt,exports.patchWithContext=e.gn,exports.post=e.Rn,exports.postWithContext=e.zn,exports.put=e.pn,exports.putWithContext=e.mn,exports.queryParamsFromUrl=e.h,exports.removeConcept=e.C,exports.removeConcepts=e.w,exports.requestWebTokenSession=e.Dn,exports.resolveAggregationCount=e.cn,exports.resolveBearerToken=e.sr,exports.resolveNoAutoAuthentication=e.Bn,exports.resolveNoAutoAuthenticationWithContext=e.Vn,exports.resolveOAuthProvider=e.cr,exports.resolveSAMLProvider=e.lr,exports.resolveToColumnName=e.an,exports.resultPages=e.Gt,exports.rewriteText=e.T,exports.saveUserSettings=e.nt,exports.searchPrincipals=e.dt,exports.setGlobalConfig=e.rr,exports.setToken=e.Gn,exports.sha512=e.Wt,exports.suggestionsToTreeAggregationNodes=e.N,exports.sysLang=e.o,exports.toDate=e.i,exports.toSqlValue=e.st,exports.translateAggregationToDateOptions=e.P,exports.tryAutoAuthentication=e.Tn,exports.tryOAuthAuthentication=e.Fn,exports.trySAMLAuthentication=e.Pn,exports.updateWorkspace=e.Z,Object.defineProperty(exports,"warn",{enumerable:!0,get:function(){return e.hr}}),exports.withRetry=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-CCjB0b1J.cjs");exports.API=e.vt,exports.ApiError=e.Jn,exports.Audit=e.jt,exports.AuditEventType=e.an,exports.AuthMode=e.ar,exports.DEFAULT_AGGREGATION_COUNT=e.sn,exports.DidYouMeanKind=e.tn,exports.EngineType=e.in,exports.EngineTypeModifier=e.rn,exports.LogLevel=e.dr,exports.MINIMUM_COMPATIBLE_SERVER_API_VERSION=e.nn,exports.RFMDisplay=e.en,exports.ServerError=e.Gn,exports.TimeoutError=e.Rn,exports.UnauthorizedError=e.qn,exports.addAuditAdditionalInfo=e.Mt,exports.addConcepts=e.b,exports.addSessionId=e.Nt,exports.addUrl=e.Pt,exports.addWorkspaceDocuments=e.G,exports.aggItemRegex=e.D,exports.aggregationHasMore=e.cn,exports.aggregationItemStrictCompare=e.O,exports.appInitializerFn=e.un,exports.applyConfig=e.nr,exports.assertNever=e.kn,exports.bisect=e.E,exports.buildPathsAndLevels=e.ht,exports.clearSessionTokens=e.Sn,exports.configureLogger=e.fr,exports.createAtomicClient=e.F,exports.createHeaders=e.Yn,exports.createHeadersWithContext=e.Xn,exports.createTimeoutController=e.Ln,exports.createUserProfile=e.R,exports.createWorkspace=e.K,Object.defineProperty(exports,"debug",{enumerable:!0,get:function(){return e.pr}}),exports.del=e.vn,exports.delWithContext=e.yn,exports.deleteUserProfileProperty=e.z,exports.deleteUserSettings=e.et,exports.deleteWebTokenCookie=e.wn,exports.deleteWorkspaceDocuments=e.q,exports.deleteWorkspaces=e.J,exports.detectAuthMode=e.Pn,exports.emitAuthenticatedEvent=e.Qn,Object.defineProperty(exports,"error",{enumerable:!0,get:function(){return e.mr}}),exports.escapeExpr=e.Ft,exports.expiresSoon=e.n,exports.extraColumns=e.Qt,exports.fetchAggregation=e.At,exports.fetchApp=e.dn,exports.fetchAppPreLogin=e.fn,exports.fetchBulkQuery=e.gt,exports.fetchChangePassword=e.$,exports.fetchDataset=e.Dt,exports.fetchDatasetList=e.Ot,exports.fetchDatasets=e.kt,exports.fetchLabels=e.Tt,exports.fetchPreview=e.Ct,exports.fetchPreviewUrl=e.wt,exports.fetchPrincipal=e.yt,exports.fetchPrincipalList=e.bt,exports.fetchPrincipalUserid=e.xt,exports.fetchPrincipalUserids=e.St,exports.fetchPrincipalsByIds=e.dt,exports.fetchQuery=e._t,exports.fetchQueryExport=e.mt,exports.fetchQueryIntent=e.pt,exports.fetchSendPasswordResetEmail=e.U,exports.fetchSimilarDocuments=e.ut,exports.fetchSponsoredLinks=e.lt,exports.fetchSuggest=e.at,exports.fetchSuggestField=e.ot,exports.fetchSuggestQuery=e.st,exports.fetchTextChunks=e.it,exports.fetchUploadStatus=e.W,exports.fetchUserProfile=e.B,exports.fetchUserProfileCustomData=e.V,exports.fetchUserSettings=e.tt,exports.fetchVersion=e.L,exports.filter=e.Yt,exports.flattenLegacyFilterValues=e.Xt,exports.get=e.Mn,exports.getConcepts=e.x,exports.getCsrfToken=e.jn,exports.getDateMask=e.k,exports.getDefaultClient=e.I,exports.getFiltersFromURI=e.s,exports.getFiltersFromUrl=e.c,exports.getHelpIndexUrl=e.a,exports.getIdFromUrl=e.l,exports.getJWToken=e.Dn,exports.getMaskedDateBounds=e.A,exports.getMetadata=e.qt,exports.getMetadataWithValues=e.Jt,exports.getOffsetFromDates=e.v,exports.getQueryPageFromUrl=e.u,exports.getQueryParamsFromUrl=e.d,exports.getQueryTabFromUrl=e.f,exports.getQueryTextFromUrl=e.p,exports.getRelativeDate=e.y,exports.getTime=e.It,exports.getToken=e.Zn,exports.getUrlParamsFromQueryParams=e.m,exports.getWithContext=e.Nn,exports.getWorkspace=e.Y,exports.globalConfig=e.rr,exports.guid=e.Lt,exports.handleResponse=e.Un,exports.handleResponseWithContext=e.Wn,exports.hasSession=e.An,exports.hashString=e.Rt,Object.defineProperty(exports,"info",{enumerable:!0,get:function(){return e.hr}}),exports.initializeAppConfig=e.pn,exports.isArrayBuffer=e.zt,exports.isAuthenticated=e.bn,exports.isBlob=e.Bt,exports.isDate=e.Vt,exports.isExpired=e.r,exports.isExternalAuthMode=e.or,exports.isJsonable=e.Ht,exports.isNotInputEvent=e._,exports.isObject=e.Ut,exports.isRedirectPending=e.xn,exports.isString=e.Wt,exports.labels=e.Et,exports.legacyBooleansToAuthMode=e.sr,exports.legacyFilterToFilter=e.Zt,exports.listWorkspaceDocuments=e.X,exports.listWorkspaces=e.Z,exports.login=e.Tn,exports.logout=e.Cn,exports.makeColumn=e.$t,exports.notify=e.g,exports.onAuthEvent=e._r,exports.openParentNodes=e.j,exports.parseText=e.S,exports.parseValueAndOperatorFromItem=e.M,exports.patch=e.gn,exports.patchUserProfile=e.H,exports.patchUserSettings=e.nt,exports.patchWithContext=e._n,exports.post=e.zn,exports.postWithContext=e.Bn,exports.put=e.mn,exports.putWithContext=e.hn,exports.queryParamsFromUrl=e.h,exports.removeConcept=e.C,exports.removeConcepts=e.w,exports.requestWebTokenSession=e.On,exports.resolveAggregationCount=e.ln,exports.resolveBearerToken=e.cr,exports.resolveNoAutoAuthentication=e.Vn,exports.resolveNoAutoAuthenticationWithContext=e.Hn,exports.resolveOAuthProvider=e.lr,exports.resolveSAMLProvider=e.ur,exports.resolveToColumnName=e.on,exports.resultPages=e.Kt,exports.rewriteText=e.T,exports.saveUserSettings=e.rt,exports.searchPrincipals=e.ft,exports.setGlobalConfig=e.ir,exports.setToken=e.Kn,exports.sha512=e.Gt,exports.suggestionsToTreeAggregationNodes=e.N,exports.sysLang=e.o,exports.toDate=e.i,exports.toSqlValue=e.ct,exports.translateAggregationToDateOptions=e.P,exports.tryAutoAuthentication=e.En,exports.tryOAuthAuthentication=e.In,exports.trySAMLAuthentication=e.Fn,exports.updateWorkspace=e.Q,Object.defineProperty(exports,"warn",{enumerable:!0,get:function(){return e.gr}}),exports.withRetry=e.t;
package/dist/atomic.js CHANGED
@@ -1 +1 @@
1
- export { _t as API, qn as ApiError, At as Audit, in as AuditEventType, ir as AuthMode, on as DEFAULT_AGGREGATION_COUNT, en as DidYouMeanKind, rn as EngineType, nn as EngineTypeModifier, ur as LogLevel, tn as MINIMUM_COMPATIBLE_SERVER_API_VERSION, $t as RFMDisplay, Wn as ServerError, Ln as TimeoutError, Kn as UnauthorizedError, jt as addAuditAdditionalInfo, b as addConcepts, Mt as addSessionId, Nt as addUrl, W as addWorkspaceDocuments, D as aggItemRegex, sn as aggregationHasMore, O as aggregationItemStrictCompare, ln as appInitializerFn, tr as applyConfig, On as assertNever, E as bisect, mt as buildPathsAndLevels, xn as clearSessionTokens, dr as configureLogger, F as createAtomicClient, Jn as createHeaders, Yn as createHeadersWithContext, In as createTimeoutController, R as createUserProfile, G as createWorkspace, fr as debug, _n as del, vn as delWithContext, z as deleteUserProfileProperty, $ as deleteUserSettings, Cn as deleteWebTokenCookie, K as deleteWorkspaceDocuments, q as deleteWorkspaces, Nn as detectAuthMode, Zn as emitAuthenticatedEvent, pr as error, Pt as escapeExpr, n as expiresSoon, Zt as extraColumns, kt as fetchAggregation, un as fetchApp, dn as fetchAppPreLogin, ht as fetchBulkQuery, Q as fetchChangePassword, Et as fetchDataset, Dt as fetchDatasetList, Ot as fetchDatasets, wt as fetchLabels, St as fetchPreview, Ct as fetchPreviewUrl, vt as fetchPrincipal, yt as fetchPrincipalList, bt as fetchPrincipalUserid, xt as fetchPrincipalUserids, ut as fetchPrincipalsByIds, gt as fetchQuery, pt as fetchQueryExport, ft as fetchQueryIntent, H as fetchSendPasswordResetEmail, lt as fetchSimilarDocuments, ct as fetchSponsoredLinks, it as fetchSuggest, at as fetchSuggestField, ot as fetchSuggestQuery, rt as fetchTextChunks, U as fetchUploadStatus, B as fetchUserProfile, et as fetchUserSettings, L as fetchVersion, Jt as filter, Yt as flattenLegacyFilterValues, jn as get, x as getConcepts, An as getCsrfToken, k as getDateMask, I as getDefaultClient, s as getFiltersFromURI, c as getFiltersFromUrl, a as getHelpIndexUrl, l as getIdFromUrl, En as getJWToken, A as getMaskedDateBounds, Kt as getMetadata, qt as getMetadataWithValues, v as getOffsetFromDates, u as getQueryPageFromUrl, d as getQueryParamsFromUrl, f as getQueryTabFromUrl, p as getQueryTextFromUrl, y as getRelativeDate, Ft as getTime, Xn as getToken, m as getUrlParamsFromQueryParams, Mn as getWithContext, J as getWorkspace, nr as globalConfig, It as guid, Hn as handleResponse, Un as handleResponseWithContext, kn as hasSession, Lt as hashString, mr as info, fn as initializeAppConfig, Rt as isArrayBuffer, yn as isAuthenticated, zt as isBlob, Bt as isDate, r as isExpired, ar as isExternalAuthMode, Vt as isJsonable, _ as isNotInputEvent, Ht as isObject, bn as isRedirectPending, Ut as isString, Tt as labels, or as legacyBooleansToAuthMode, Xt as legacyFilterToFilter, Y as listWorkspaceDocuments, X as listWorkspaces, wn as login, Sn as logout, Qt as makeColumn, g as notify, gr as onAuthEvent, j as openParentNodes, S as parseText, M as parseValueAndOperatorFromItem, hn as patch, V as patchUserProfile, tt as patchUserSettings, gn as patchWithContext, Rn as post, zn as postWithContext, pn as put, mn as putWithContext, h as queryParamsFromUrl, C as removeConcept, w as removeConcepts, Dn as requestWebTokenSession, cn as resolveAggregationCount, sr as resolveBearerToken, Bn as resolveNoAutoAuthentication, Vn as resolveNoAutoAuthenticationWithContext, cr as resolveOAuthProvider, lr as resolveSAMLProvider, an as resolveToColumnName, Gt as resultPages, T as rewriteText, nt as saveUserSettings, dt as searchPrincipals, rr as setGlobalConfig, Gn as setToken, Wt as sha512, N as suggestionsToTreeAggregationNodes, o as sysLang, i as toDate, st as toSqlValue, P as translateAggregationToDateOptions, Tn as tryAutoAuthentication, Fn as tryOAuthAuthentication, Pn as trySAMLAuthentication, Z as updateWorkspace, hr as warn, t as withRetry } from "./src-s3KlD6YE.js";
1
+ export { vt as API, Jn as ApiError, jt as Audit, an as AuditEventType, ar as AuthMode, sn as DEFAULT_AGGREGATION_COUNT, tn as DidYouMeanKind, in as EngineType, rn as EngineTypeModifier, dr as LogLevel, nn as MINIMUM_COMPATIBLE_SERVER_API_VERSION, en as RFMDisplay, Gn as ServerError, Rn as TimeoutError, qn as UnauthorizedError, Mt as addAuditAdditionalInfo, b as addConcepts, Nt as addSessionId, Pt as addUrl, G as addWorkspaceDocuments, D as aggItemRegex, cn as aggregationHasMore, O as aggregationItemStrictCompare, un as appInitializerFn, nr as applyConfig, kn as assertNever, E as bisect, ht as buildPathsAndLevels, Sn as clearSessionTokens, fr as configureLogger, F as createAtomicClient, Yn as createHeaders, Xn as createHeadersWithContext, Ln as createTimeoutController, R as createUserProfile, K as createWorkspace, pr as debug, vn as del, yn as delWithContext, z as deleteUserProfileProperty, et as deleteUserSettings, wn as deleteWebTokenCookie, q as deleteWorkspaceDocuments, J as deleteWorkspaces, Pn as detectAuthMode, Qn as emitAuthenticatedEvent, mr as error, Ft as escapeExpr, n as expiresSoon, Qt as extraColumns, At as fetchAggregation, dn as fetchApp, fn as fetchAppPreLogin, gt as fetchBulkQuery, $ as fetchChangePassword, Dt as fetchDataset, Ot as fetchDatasetList, kt as fetchDatasets, Tt as fetchLabels, Ct as fetchPreview, wt as fetchPreviewUrl, yt as fetchPrincipal, bt as fetchPrincipalList, xt as fetchPrincipalUserid, St as fetchPrincipalUserids, dt as fetchPrincipalsByIds, _t as fetchQuery, mt as fetchQueryExport, pt as fetchQueryIntent, U as fetchSendPasswordResetEmail, ut as fetchSimilarDocuments, lt as fetchSponsoredLinks, at as fetchSuggest, ot as fetchSuggestField, st as fetchSuggestQuery, it as fetchTextChunks, W as fetchUploadStatus, B as fetchUserProfile, V as fetchUserProfileCustomData, tt as fetchUserSettings, L as fetchVersion, Yt as filter, Xt as flattenLegacyFilterValues, Mn as get, x as getConcepts, jn as getCsrfToken, k as getDateMask, I as getDefaultClient, s as getFiltersFromURI, c as getFiltersFromUrl, a as getHelpIndexUrl, l as getIdFromUrl, Dn as getJWToken, A as getMaskedDateBounds, qt as getMetadata, Jt as getMetadataWithValues, v as getOffsetFromDates, u as getQueryPageFromUrl, d as getQueryParamsFromUrl, f as getQueryTabFromUrl, p as getQueryTextFromUrl, y as getRelativeDate, It as getTime, Zn as getToken, m as getUrlParamsFromQueryParams, Nn as getWithContext, Y as getWorkspace, rr as globalConfig, Lt as guid, Un as handleResponse, Wn as handleResponseWithContext, An as hasSession, Rt as hashString, hr as info, pn as initializeAppConfig, zt as isArrayBuffer, bn as isAuthenticated, Bt as isBlob, Vt as isDate, r as isExpired, or as isExternalAuthMode, Ht as isJsonable, _ as isNotInputEvent, Ut as isObject, xn as isRedirectPending, Wt as isString, Et as labels, sr as legacyBooleansToAuthMode, Zt as legacyFilterToFilter, X as listWorkspaceDocuments, Z as listWorkspaces, Tn as login, Cn as logout, $t as makeColumn, g as notify, _r as onAuthEvent, j as openParentNodes, S as parseText, M as parseValueAndOperatorFromItem, gn as patch, H as patchUserProfile, nt as patchUserSettings, _n as patchWithContext, zn as post, Bn as postWithContext, mn as put, hn as putWithContext, h as queryParamsFromUrl, C as removeConcept, w as removeConcepts, On as requestWebTokenSession, ln as resolveAggregationCount, cr as resolveBearerToken, Vn as resolveNoAutoAuthentication, Hn as resolveNoAutoAuthenticationWithContext, lr as resolveOAuthProvider, ur as resolveSAMLProvider, on as resolveToColumnName, Kt as resultPages, T as rewriteText, rt as saveUserSettings, ft as searchPrincipals, ir as setGlobalConfig, Kn as setToken, Gt as sha512, N as suggestionsToTreeAggregationNodes, o as sysLang, i as toDate, ct as toSqlValue, P as translateAggregationToDateOptions, En as tryAutoAuthentication, In as tryOAuthAuthentication, Fn as trySAMLAuthentication, Q as updateWorkspace, gr as warn, t as withRetry } from "./src-CK3j-Qz_.js";
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../client/atomic-context";
1
+ import { type AtomicContext } from "../client/atomic-context.js";
2
2
  /**
3
3
  * Default timeout in milliseconds for all authentication network requests.
4
4
  * Override it per application via `setGlobalConfig({ auth: { timeoutMs } })`.
@@ -1,5 +1,5 @@
1
- import type { ApiError } from "../../web-api/helpers/errors/api-error";
2
- import type { UnauthorizedError } from "../../web-api/helpers/errors/unauthorized-error";
1
+ import type { ApiError } from "../../web-api/helpers/errors/api-error.js";
2
+ import type { UnauthorizedError } from "../../web-api/helpers/errors/unauthorized-error.js";
3
3
  /**
4
4
  * Why a 401 was left to reach its caller (payload of the `sessionLost` event):
5
5
  *
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /**
3
3
  * Notifies the subscribers of a context that the authentication state changed, and mirrors it as a
4
4
  * DOM `authenticated` CustomEvent.
@@ -1,3 +1,3 @@
1
- export { type AuthEventMap, type AuthEventName, onAuthEvent, type SessionLostReason, type Unsubscribe, } from "./auth-events";
2
- export { emitAuthenticatedEvent } from "./emit-authenticated-event";
1
+ export { type AuthEventMap, type AuthEventName, onAuthEvent, type SessionLostReason, type Unsubscribe, } from "./auth-events.js";
2
+ export { emitAuthenticatedEvent } from "./emit-authenticated-event.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- export { type AuthEventMap, type AuthEventName, emitAuthenticatedEvent, onAuthEvent, type SessionLostReason, type Unsubscribe, } from "./events";
2
- export { tryOAuthAuthentication, trySAMLAuthentication } from "./providers";
3
- export { clearSessionTokens, detectAuthMode, hasSession, isAuthenticated, isRedirectPending, login, logout, tryAutoAuthentication, } from "./session";
4
- export { deleteWebTokenCookie, getCsrfToken, getJWToken, getToken, requestWebTokenSession, setToken, } from "./tokens";
1
+ export { type AuthEventMap, type AuthEventName, emitAuthenticatedEvent, onAuthEvent, type SessionLostReason, type Unsubscribe, } from "./events/index.js";
2
+ export { tryOAuthAuthentication, trySAMLAuthentication } from "./providers/index.js";
3
+ export { clearSessionTokens, detectAuthMode, hasSession, isAuthenticated, isRedirectPending, login, logout, tryAutoAuthentication, } from "./session/index.js";
4
+ export { deleteWebTokenCookie, getCsrfToken, getJWToken, getToken, requestWebTokenSession, setToken, } from "./tokens/index.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
- export { tryOAuthAuthentication } from "./oauth-authentication";
2
- export { trySAMLAuthentication } from "./saml-authentication";
1
+ export { tryOAuthAuthentication } from "./oauth-authentication.js";
2
+ export { trySAMLAuthentication } from "./saml-authentication.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /** @see tryOAuthAuthentication */
3
3
  export declare const tryOAuthAuthenticationWithContext: (ctx: AtomicContext) => Promise<{
4
4
  redirectUrl: string;
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /** What differs between the OAuth and the SAML flows — everything else is shared. */
3
3
  declare const PROVIDER_KINDS: {
4
4
  readonly oauth: {
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-to-identity-provider.d.ts","sourceRoot":"","sources":["../../../src/authentication/providers/redirect-to-identity-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,6BAA6B,CAAC;AAKrC,qFAAqF;AACrF,QAAA,MAAM,cAAc;;;;;;;;;;;CAWV,CAAC;AAEX,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,OAAO,cAAc,CAAC;IAClC,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,aAAa,EAClB,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,+BAA+B,GAClD,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAiDlC"}
1
+ {"version":3,"file":"redirect-to-identity-provider.d.ts","sourceRoot":"","sources":["../../../src/authentication/providers/redirect-to-identity-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,6BAA6B,CAAC;AAKrC,qFAAqF;AACrF,QAAA,MAAM,cAAc;;;;;;;;;;;CAWV,CAAC;AAEX,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,OAAO,cAAc,CAAC;IAClC,gGAAgG;IAChG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,aAAa,EAClB,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,+BAA+B,GAClD,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAmDlC"}
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /** @see trySAMLAuthentication */
3
3
  export declare const trySAMLAuthenticationWithContext: (ctx: AtomicContext) => Promise<{
4
4
  redirectUrl: string;
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /**
3
3
  * Persisted record — in `localStorage`, shared across tabs/windows unlike `sessionStorage` — of
4
4
  * whether the last successful authentication on this browser used `credentials`.
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /**
3
3
  * Persisted "authenticated" flag for token-less ambient SSO — IIS Integrated Windows Authentication
4
4
  * or proxy SSO, where the server authenticates every request via the connection/cookie and issues
@@ -1,5 +1,5 @@
1
- import { AuthMode } from "../../configurations";
2
- import type { CCAppPreLogin } from "../../types";
1
+ import { AuthMode } from "../../configurations/index.js";
2
+ import type { CCAppPreLogin } from "../../types/index.js";
3
3
  /**
4
4
  * Pure resolution of the authentication mode from the current configuration inputs and
5
5
  * the server pre-login response. No I/O, no `globalConfig` mutation, no `window` access.
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /**
3
3
  * Whether a session already exists for this context — **without ever redirecting**.
4
4
  *
@@ -1,8 +1,8 @@
1
- export { detectAuthMode } from "./detect-auth-mode";
2
- export { hasSession } from "./has-session";
3
- export { login } from "./login";
4
- export { clearSessionTokens, logout } from "./logout";
5
- export { isRedirectPending } from "./redirect-guard";
6
- export { tryAutoAuthentication } from "./try-auto-authentication";
7
- export { isAuthenticated } from "./user-authentication";
1
+ export { detectAuthMode } from "./detect-auth-mode.js";
2
+ export { hasSession } from "./has-session.js";
3
+ export { login } from "./login.js";
4
+ export { clearSessionTokens, logout } from "./logout.js";
5
+ export { isRedirectPending } from "./redirect-guard.js";
6
+ export { tryAutoAuthentication } from "./try-auto-authentication.js";
7
+ export { isAuthenticated } from "./user-authentication.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
2
- import type { Credentials } from "../../types";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
+ import type { Credentials } from "../../types/index.js";
3
3
  /**
4
4
  * Signs the user in on the given context.
5
5
  *
@@ -1,9 +1,10 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /**
3
3
  * Logs out the user of a context and deletes its web token cookie.
4
4
  *
5
- * @returns the logout `redirectUrl` returned by the server, or `undefined` when there is none to
6
- * follow — either because an impersonation is active (the cookie is left untouched), because the
5
+ * @returns the `logoutUrl` returned by the server (where to send the user to finish signing out at
6
+ * the identity provider, when it gave one), or `undefined` when there is none to follow — either
7
+ * because an impersonation is active (`userOverrideActive`: the cookie is NOT deleted), because the
7
8
  * server did not answer `ok`, or because the request failed (the failure is logged, not thrown).
8
9
  * The local session is cleared in every case.
9
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/authentication/session/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,6BAA6B,CAAC;AAQrC;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6BvF;AAED,6BAA6B;AAC7B,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAStE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/authentication/session/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,6BAA6B,CAAC;AAQrC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6BvF;AAED,6BAA6B;AAC7B,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAStE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -1,4 +1,4 @@
1
- import { type AtomicContext } from "../../client/atomic-context";
1
+ import { type AtomicContext } from "../../client/atomic-context.js";
2
2
  /**
3
3
  * Whether a provider redirect (oauth / saml) was started for this context and has not established a
4
4
  * session yet.