@ondewo/nlu-client-typescript 6.14.0 → 7.0.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.
@@ -50,13 +50,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
50
50
  exports.OfflineTokenProvider = exports.TokenError = void 0;
51
51
  exports.createDefaultTokenFetch = createDefaultTokenFetch;
52
52
  exports.login = login;
53
- // D18 headless-SDK auth helper (keycloak-migration-plan §7.8 + D18).
54
- //
55
- // One-time ROPC login (grant_type=password, scope=offline_access) against the PUBLIC SDK client
56
- // `ondewo-nlu-cai-sdk-public` (no client_secret -- Q1), then a bounded background loop that refreshes
57
- // the short-lived access token from the offline refresh token before it expires. The current access
58
- // token is exposed for an `Authorization: Bearer <token>` gRPC metadata header. The refresh loop stops
59
- // after `tokenExpirationInS` (if given) has elapsed since login.
53
+ /**
54
+ * D18 headless-SDK auth helper (keycloak-migration-plan §7.8 + D18).
55
+ *
56
+ * One-time ROPC login (grant_type=password, scope=offline_access) against the PUBLIC SDK client
57
+ * `ondewo-nlu-cai-sdk-public` (no client_secret -- Q1), then a bounded background loop that refreshes
58
+ * the short-lived access token from the offline refresh token before it expires. The current access
59
+ * token is exposed for an `Authorization: Bearer <token>` gRPC metadata header. The refresh loop stops
60
+ * after `tokenExpirationInS` (if given) has elapsed since login.
61
+ *
62
+ * @packageDocumentation
63
+ */
60
64
  /**
61
65
  * Seconds of head-room subtracted from a token's `expires_in` so the refresh fires before the access
62
66
  * token actually lapses (covers clock skew + the round-trip to Keycloak).
@@ -64,16 +68,22 @@ exports.login = login;
64
68
  const REFRESH_SKEW_IN_S = 30;
65
69
  /** Lower bound for the scheduled refresh delay so a tiny/zero `expires_in` cannot spin a hot loop. */
66
70
  const MIN_REFRESH_DELAY_IN_S = 1;
67
- /** Error raised on any token-endpoint or token-shape failure. */
71
+ /**
72
+ * Error raised on any token-endpoint or token-shape failure.
73
+ *
74
+ * Name contract: every instance carries `name === "TokenError"` (set in the constructor, because
75
+ * subclassing `Error` does not propagate the subclass name). Callers may therefore discriminate on
76
+ * `error.name` as well as on `instanceof TokenError` -- the latter being unreliable across bundles.
77
+ */
68
78
  class TokenError extends Error {
69
79
  /**
70
- * Construct a token error.
80
+ * Construct a token error and pin its `name` to `"TokenError"`.
71
81
  *
72
82
  * @param message - Human-readable description of the token failure.
73
83
  */
74
84
  constructor(message) {
75
85
  super(message);
76
- this.name = "TokenError";
86
+ this.name = 'TokenError';
77
87
  }
78
88
  }
79
89
  exports.TokenError = TokenError;
@@ -86,7 +96,7 @@ exports.TokenError = TokenError;
86
96
  * @returns The fully-qualified `.../realms/<realm>/protocol/openid-connect/token` endpoint URL.
87
97
  */
88
98
  function buildTokenEndpoint(keycloakUrl, realm) {
89
- const base = keycloakUrl.replace(/\/+$/, "");
99
+ const base = keycloakUrl.replace(/\/+$/, '');
90
100
  return `${base}/realms/${encodeURIComponent(realm)}/protocol/openid-connect/token`;
91
101
  }
92
102
  /**
@@ -102,10 +112,10 @@ function buildTokenEndpoint(keycloakUrl, realm) {
102
112
  async function postTokenRequest(tokenEndpoint, params, fetchImpl) {
103
113
  const body = new URLSearchParams(params).toString();
104
114
  const response = await fetchImpl(tokenEndpoint, {
105
- method: "POST",
115
+ method: 'POST',
106
116
  headers: {
107
- "Content-Type": "application/x-www-form-urlencoded",
108
- Accept: "application/json"
117
+ 'Content-Type': 'application/x-www-form-urlencoded',
118
+ Accept: 'application/json'
109
119
  },
110
120
  body
111
121
  });
@@ -120,8 +130,8 @@ async function postTokenRequest(tokenEndpoint, params, fetchImpl) {
120
130
  catch {
121
131
  throw new TokenError(`Keycloak token endpoint returned a non-JSON body: ${text}`);
122
132
  }
123
- if (typeof parsed.access_token !== "string" || parsed.access_token.length === 0) {
124
- throw new TokenError("Keycloak token response did not contain an access_token");
133
+ if (typeof parsed.access_token !== 'string' || parsed.access_token.length === 0) {
134
+ throw new TokenError('Keycloak token response did not contain an access_token');
125
135
  }
126
136
  return parsed;
127
137
  }
@@ -133,15 +143,16 @@ let insecureNodeDispatcher;
133
143
  * so a browser bundle never pulls in `undici` and the flag stays a hard no-op outside Node.
134
144
  *
135
145
  * @returns The insecure dispatcher under Node, or `undefined` in a browser (TLS is owned by the browser).
146
+ * @throws {Error} When the dynamic `import("undici")` cannot be resolved under Node.
136
147
  */
137
148
  async function getInsecureNodeDispatcher() {
138
149
  const nodeProcess = globalThis.process;
139
- /* c8 ignore next 3 -- browser guard: not exercised under the Node test runner */
150
+ // Browser guard: outside Node there is no `process`, so the insecure dispatcher is a hard no-op.
140
151
  if (nodeProcess === undefined || nodeProcess.versions === undefined || nodeProcess.versions.node === undefined) {
141
152
  return undefined;
142
153
  }
143
154
  if (insecureNodeDispatcher === undefined) {
144
- const undiciModuleName = "undici";
155
+ const undiciModuleName = 'undici';
145
156
  const undici = (await Promise.resolve(`${undiciModuleName}`).then(s => __importStar(require(s))));
146
157
  insecureNodeDispatcher = new undici.Agent({ connect: { rejectUnauthorized: false } });
147
158
  }
@@ -182,8 +193,7 @@ class OfflineTokenProvider {
182
193
  // A custom fetchImpl always wins (the verifySsl flag is ignored for injected transports); only the
183
194
  // DEFAULT transport honors verifySsl, and only under Node. Absent/undefined verifySsl => secure (true).
184
195
  const verifySsl = options.keycloakVerifySsl !== false;
185
- this.fetchImpl =
186
- options.fetchImpl !== undefined ? options.fetchImpl : createDefaultTokenFetch(verifySsl);
196
+ this.fetchImpl = options.fetchImpl !== undefined ? options.fetchImpl : createDefaultTokenFetch(verifySsl);
187
197
  this.nowInMs = options.nowInMs !== undefined ? options.nowInMs : Date.now;
188
198
  this.accessToken = null;
189
199
  this.refreshToken = null;
@@ -202,17 +212,17 @@ class OfflineTokenProvider {
202
212
  */
203
213
  async bootstrap(username, password) {
204
214
  const tokenResponse = await postTokenRequest(this.tokenEndpoint, {
205
- grant_type: "password",
215
+ grant_type: 'password',
206
216
  client_id: this.clientId,
207
217
  username,
208
218
  password,
209
- scope: "offline_access"
219
+ scope: 'offline_access'
210
220
  }, this.fetchImpl);
211
221
  this.accessToken = tokenResponse.access_token;
212
- this.refreshToken = typeof tokenResponse.refresh_token === "string" ? tokenResponse.refresh_token : null;
222
+ this.refreshToken = typeof tokenResponse.refresh_token === 'string' ? tokenResponse.refresh_token : null;
213
223
  if (this.refreshToken === null) {
214
- throw new TokenError("Keycloak token response did not contain a refresh_token; the SDK client must have " +
215
- "directAccessGrants + the offline_access scope (ondewo-nlu-cai-sdk-public)");
224
+ throw new TokenError('Keycloak token response did not contain a refresh_token; the SDK client must have ' +
225
+ 'directAccessGrants + the offline_access scope (ondewo-nlu-cai-sdk-public)');
216
226
  }
217
227
  if (this.tokenExpirationInS !== undefined) {
218
228
  const expirationInMs = this.tokenExpirationInS * 1000;
@@ -227,7 +237,8 @@ class OfflineTokenProvider {
227
237
  * @throws {TokenError} When the refresh token-endpoint call fails or returns an invalid body.
228
238
  */
229
239
  async refresh() {
230
- /* c8 ignore next 3 -- unreachable: stop() always clears the only timer that calls refresh() */
240
+ // Defensive: stop() clears the only timer that calls refresh(), so this is normally unreachable
241
+ // from the scheduler -- it still guards a direct/racing invocation.
231
242
  if (this.stopped) {
232
243
  return;
233
244
  }
@@ -238,13 +249,13 @@ class OfflineTokenProvider {
238
249
  return;
239
250
  }
240
251
  const tokenResponse = await postTokenRequest(this.tokenEndpoint, {
241
- grant_type: "refresh_token",
252
+ grant_type: 'refresh_token',
242
253
  client_id: this.clientId,
243
254
  refresh_token: this.refreshToken
244
255
  }, this.fetchImpl);
245
256
  this.accessToken = tokenResponse.access_token;
246
257
  // Keycloak may rotate the offline refresh token; keep the newest one when present.
247
- if (typeof tokenResponse.refresh_token === "string" && tokenResponse.refresh_token.length > 0) {
258
+ if (typeof tokenResponse.refresh_token === 'string' && tokenResponse.refresh_token.length > 0) {
248
259
  this.refreshToken = tokenResponse.refresh_token;
249
260
  }
250
261
  this.scheduleRefresh(tokenResponse.expires_in);
@@ -260,7 +271,7 @@ class OfflineTokenProvider {
260
271
  if (this.stopped) {
261
272
  return;
262
273
  }
263
- const expiresInS = typeof expiresInRaw === "number" && expiresInRaw > 0 ? expiresInRaw : MIN_REFRESH_DELAY_IN_S;
274
+ const expiresInS = typeof expiresInRaw === 'number' && expiresInRaw > 0 ? expiresInRaw : MIN_REFRESH_DELAY_IN_S;
264
275
  let delayInS = Math.max(expiresInS - REFRESH_SKEW_IN_S, MIN_REFRESH_DELAY_IN_S);
265
276
  if (this.deadlineInMs !== null) {
266
277
  const remainingInMs = this.deadlineInMs - this.nowInMs();
@@ -279,9 +290,9 @@ class OfflineTokenProvider {
279
290
  }
280
291
  });
281
292
  }, delayInS * 1000);
282
- // Do not keep the event loop alive solely for the refresh timer.
283
- /* c8 ignore next 3 -- the else branch is unreachable: Node's Timeout always exposes unref() */
284
- if (typeof this.timer.unref === "function") {
293
+ // Do not keep the event loop alive solely for the refresh timer. Node's Timeout exposes unref();
294
+ // a browser's numeric handle does not, hence the guard.
295
+ if (typeof this.timer.unref === 'function') {
285
296
  this.timer.unref();
286
297
  }
287
298
  }
@@ -296,7 +307,12 @@ class OfflineTokenProvider {
296
307
  /**
297
308
  * Read the current access token.
298
309
  *
299
- * @returns The current access token, or `null` before bootstrap / after the bounded loop has lapsed.
310
+ * Once {@link bootstrap} has succeeded this never returns `null` again: when the bounded refresh
311
+ * loop lapses (or {@link stop} is called) the LAST fetched token keeps being returned even though
312
+ * it is by then expiring/expired. Callers must treat an `UNAUTHENTICATED` gRPC response -- not a
313
+ * `null` here -- as the signal to re-login.
314
+ *
315
+ * @returns The current access token, or `null` before {@link bootstrap} has completed.
300
316
  */
301
317
  getAccessToken() {
302
318
  return this.accessToken;
@@ -305,15 +321,21 @@ class OfflineTokenProvider {
305
321
  * Build the value for an `Authorization` gRPC metadata header.
306
322
  *
307
323
  * @returns The `Bearer <access_token>` header value.
308
- * @throws {TokenError} When no access token is available (login not completed or already lapsed).
324
+ * @throws {TokenError} When no access token has been fetched yet, i.e. {@link bootstrap} /
325
+ * {@link login} has not completed. It does NOT throw once the refresh loop has lapsed -- see
326
+ * {@link getAccessToken}.
309
327
  */
310
328
  getAuthorizationHeader() {
311
329
  if (this.accessToken === null) {
312
- throw new TokenError("No access token available; login() has not completed or has lapsed");
330
+ throw new TokenError('No access token available; login() has not completed or has lapsed');
313
331
  }
314
332
  return `Bearer ${this.accessToken}`;
315
333
  }
316
- /** Stop the auto-refresh loop. Idempotent; safe to call from any state. */
334
+ /**
335
+ * Stop the auto-refresh loop. Idempotent; safe to call from any state. It disarms the pending timer
336
+ * and suppresses further scheduling, but deliberately KEEPS the last access token readable through
337
+ * {@link getAccessToken} / {@link getAuthorizationHeader}.
338
+ */
317
339
  stop() {
318
340
  this.stopped = true;
319
341
  if (this.timer !== null) {
@@ -335,18 +357,12 @@ exports.OfflineTokenProvider = OfflineTokenProvider;
335
357
  */
336
358
  async function login(options) {
337
359
  if (options === undefined || options === null) {
338
- throw new TokenError("login() requires an options object");
360
+ throw new TokenError('login() requires an options object');
339
361
  }
340
- const requiredKeys = [
341
- "keycloakUrl",
342
- "realm",
343
- "clientId",
344
- "username",
345
- "password"
346
- ];
362
+ const requiredKeys = ['keycloakUrl', 'realm', 'clientId', 'username', 'password'];
347
363
  for (const key of requiredKeys) {
348
364
  const value = options[key];
349
- if (typeof value !== "string" || value.length === 0) {
365
+ if (typeof value !== 'string' || value.length === 0) {
350
366
  throw new TokenError(`login() option "${key}" is required and must be a non-empty string`);
351
367
  }
352
368
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ondewo/nlu-client-typescript",
3
- "version": "6.14.0",
3
+ "version": "7.0.0",
4
4
  "description": "ONDEWO Natural Language Understanding (NLU) Client library for Typescript",
5
5
  "author": "ONDEWO GmbH <office@ondewo.com>",
6
6
  "homepage": "https://ondewo.com",
@@ -26,14 +26,16 @@
26
26
  "undici": "^6.27.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@eslint/eslintrc": "^3.1.0",
30
- "@eslint/js": "^9.13.0",
29
+ "@eslint/eslintrc": "^3.3.5",
30
+ "@eslint/js": "^9.39.4",
31
31
  "@types/node": "^22.15.27",
32
- "@typescript-eslint/eslint-plugin": "^8.12.2",
32
+ "@typescript-eslint/eslint-plugin": "^8.63.0",
33
33
  "dotenv": "^16.4.5",
34
- "eslint": "^9.13.0",
34
+ "eslint": "^9.39.4",
35
35
  "global": "^4.4.0",
36
- "husky": "^9.1.6",
37
- "prettier": "^3.3.3"
36
+ "husky": "^9.1.7",
37
+ "prettier": "^3.9.4",
38
+ "c8": "^11.0.0",
39
+ "typescript": "^6.0.3"
38
40
  }
39
41
  }
package/public-api.d.ts CHANGED
@@ -1,44 +1,44 @@
1
- export * from './api/ondewo/nlu/user_pb.d';
2
- export * from './api/ondewo/nlu/session_grpc_web_pb.d';
1
+ export * from './api/ondewo/qa/qa_pb.d';
2
+ export * from './api/ondewo/qa/qa_grpc_web_pb.d';
3
+ export * from './api/ondewo/nlu/rag_grpc_web_pb.d';
4
+ export * from './api/ondewo/nlu/llm_evaluation_grpc_web_pb.d';
3
5
  export * from './api/ondewo/nlu/user_grpc_web_pb.d';
4
- export * from './api/ondewo/nlu/project_role_pb.d';
5
- export * from './api/ondewo/nlu/context_pb.d';
6
- export * from './api/ondewo/nlu/intent_pb.d';
7
- export * from './api/ondewo/nlu/server_statistics_grpc_web_pb.d';
8
- export * from './api/ondewo/nlu/webhook_grpc_web_pb.d';
6
+ export * from './api/ondewo/nlu/utility_grpc_web_pb.d';
7
+ export * from './api/ondewo/nlu/operations_pb.d';
9
8
  export * from './api/ondewo/nlu/webhook_pb.d';
10
9
  export * from './api/ondewo/nlu/context_grpc_web_pb.d';
11
- export * from './api/ondewo/nlu/llm_evaluation_grpc_web_pb.d';
12
- export * from './api/ondewo/nlu/entity_type_pb.d';
13
- export * from './api/ondewo/nlu/project_statistics_grpc_web_pb.d';
14
- export * from './api/ondewo/nlu/agent_grpc_web_pb.d';
15
- export * from './api/ondewo/nlu/operations_grpc_web_pb.d';
16
- export * from './api/ondewo/nlu/session_pb.d';
17
- export * from './api/ondewo/nlu/rag_pb.d';
18
- export * from './api/ondewo/nlu/agent_pb.d';
19
- export * from './api/ondewo/nlu/intent_grpc_web_pb.d';
20
- export * from './api/ondewo/nlu/aiservices_grpc_web_pb.d';
21
- export * from './api/ondewo/nlu/operations_pb.d';
22
- export * from './api/ondewo/nlu/common_pb.d';
23
10
  export * from './api/ondewo/nlu/operation_metadata_pb.d';
24
- export * from './api/ondewo/nlu/ccai_project_pb.d';
25
- export * from './api/ondewo/nlu/project_role_grpc_web_pb.d';
26
- export * from './api/ondewo/nlu/entity_type_grpc_web_pb.d';
27
11
  export * from './api/ondewo/nlu/ccai_project_grpc_web_pb.d';
28
- export * from './api/ondewo/nlu/utility_pb.d';
29
- export * from './api/ondewo/nlu/rag_grpc_web_pb.d';
12
+ export * from './api/ondewo/nlu/ccai_project_pb.d';
30
13
  export * from './api/ondewo/nlu/llm_evaluation_pb.d';
31
- export * from './api/ondewo/nlu/project_statistics_pb.d';
14
+ export * from './api/ondewo/nlu/intent_grpc_web_pb.d';
15
+ export * from './api/ondewo/nlu/agent_grpc_web_pb.d';
16
+ export * from './api/ondewo/nlu/webhook_grpc_web_pb.d';
17
+ export * from './api/ondewo/nlu/utility_pb.d';
18
+ export * from './api/ondewo/nlu/project_statistics_grpc_web_pb.d';
19
+ export * from './api/ondewo/nlu/user_pb.d';
20
+ export * from './api/ondewo/nlu/entity_type_pb.d';
32
21
  export * from './api/ondewo/nlu/aiservices_pb.d';
22
+ export * from './api/ondewo/nlu/entity_type_grpc_web_pb.d';
23
+ export * from './api/ondewo/nlu/server_statistics_grpc_web_pb.d';
33
24
  export * from './api/ondewo/nlu/server_statistics_pb.d';
34
- export * from './api/ondewo/nlu/utility_grpc_web_pb.d';
35
- export * from './api/ondewo/qa/qa_pb.d';
36
- export * from './api/ondewo/qa/qa_grpc_web_pb.d';
37
- export * from './api/google/protobuf/timestamp_pb.d';
38
- export * from './api/google/protobuf/field_mask_pb.d';
25
+ export * from './api/ondewo/nlu/operations_grpc_web_pb.d';
26
+ export * from './api/ondewo/nlu/intent_pb.d';
27
+ export * from './api/ondewo/nlu/project_role_pb.d';
28
+ export * from './api/ondewo/nlu/context_pb.d';
29
+ export * from './api/ondewo/nlu/agent_pb.d';
30
+ export * from './api/ondewo/nlu/session_pb.d';
31
+ export * from './api/ondewo/nlu/project_role_grpc_web_pb.d';
32
+ export * from './api/ondewo/nlu/common_pb.d';
33
+ export * from './api/ondewo/nlu/aiservices_grpc_web_pb.d';
34
+ export * from './api/ondewo/nlu/rag_pb.d';
35
+ export * from './api/ondewo/nlu/session_grpc_web_pb.d';
36
+ export * from './api/ondewo/nlu/project_statistics_pb.d';
37
+ export * from './api/google/api/annotations_pb.d';
38
+ export * from './api/google/rpc/status_pb.d';
39
39
  export * from './api/google/protobuf/empty_pb.d';
40
- export * from './api/google/protobuf/struct_pb.d';
40
+ export * from './api/google/protobuf/field_mask_pb.d';
41
+ export * from './api/google/protobuf/timestamp_pb.d';
41
42
  export * from './api/google/protobuf/any_pb.d';
43
+ export * from './api/google/protobuf/struct_pb.d';
42
44
  export * from './api/google/type/latlng_pb.d';
43
- export * from './api/google/api/annotations_pb.d';
44
- export * from './api/google/rpc/status_pb.d';
package/public-api.js CHANGED
@@ -1,44 +1,44 @@
1
- export * from './api/ondewo/nlu/ccai_project_pb';
2
- export * from './api/ondewo/nlu/agent_pb';
3
- export * from './api/ondewo/nlu/rag_pb';
4
- export * from './api/ondewo/nlu/project_statistics_grpc_web_pb';
5
- export * from './api/ondewo/nlu/llm_evaluation_grpc_web_pb';
1
+ export * from './api/ondewo/qa/qa_pb';
2
+ export * from './api/ondewo/qa/qa_grpc_web_pb';
3
+ export * from './api/ondewo/nlu/project_role_pb';
4
+ export * from './api/ondewo/nlu/operation_metadata_pb';
5
+ export * from './api/ondewo/nlu/agent_grpc_web_pb';
6
+ export * from './api/ondewo/nlu/session_grpc_web_pb';
6
7
  export * from './api/ondewo/nlu/aiservices_pb';
8
+ export * from './api/ondewo/nlu/project_statistics_grpc_web_pb';
9
+ export * from './api/ondewo/nlu/rag_pb';
7
10
  export * from './api/ondewo/nlu/session_pb';
8
11
  export * from './api/ondewo/nlu/server_statistics_grpc_web_pb';
9
- export * from './api/ondewo/nlu/webhook_grpc_web_pb';
12
+ export * from './api/ondewo/nlu/context_pb';
13
+ export * from './api/ondewo/nlu/ccai_project_grpc_web_pb';
10
14
  export * from './api/ondewo/nlu/operations_grpc_web_pb';
15
+ export * from './api/ondewo/nlu/webhook_pb';
11
16
  export * from './api/ondewo/nlu/aiservices_grpc_web_pb';
12
- export * from './api/ondewo/nlu/server_statistics_pb';
13
- export * from './api/ondewo/nlu/project_role_grpc_web_pb';
17
+ export * from './api/ondewo/nlu/intent_pb';
14
18
  export * from './api/ondewo/nlu/utility_grpc_web_pb';
15
- export * from './api/ondewo/nlu/user_pb';
16
- export * from './api/ondewo/nlu/operations_pb';
17
- export * from './api/ondewo/nlu/entity_type_pb';
19
+ export * from './api/ondewo/nlu/agent_pb';
20
+ export * from './api/ondewo/nlu/project_role_grpc_web_pb';
18
21
  export * from './api/ondewo/nlu/rag_grpc_web_pb';
19
- export * from './api/ondewo/nlu/agent_grpc_web_pb';
20
- export * from './api/ondewo/nlu/project_statistics_pb';
21
- export * from './api/ondewo/nlu/project_role_pb';
22
- export * from './api/ondewo/nlu/context_grpc_web_pb';
23
- export * from './api/ondewo/nlu/utility_pb';
22
+ export * from './api/ondewo/nlu/llm_evaluation_pb';
23
+ export * from './api/ondewo/nlu/entity_type_pb';
24
+ export * from './api/ondewo/nlu/ccai_project_pb';
25
+ export * from './api/ondewo/nlu/user_grpc_web_pb';
24
26
  export * from './api/ondewo/nlu/intent_grpc_web_pb';
25
- export * from './api/ondewo/nlu/ccai_project_grpc_web_pb';
26
- export * from './api/ondewo/nlu/session_grpc_web_pb';
27
+ export * from './api/ondewo/nlu/utility_pb';
28
+ export * from './api/ondewo/nlu/server_statistics_pb';
29
+ export * from './api/ondewo/nlu/webhook_grpc_web_pb';
30
+ export * from './api/ondewo/nlu/project_statistics_pb';
27
31
  export * from './api/ondewo/nlu/entity_type_grpc_web_pb';
28
- export * from './api/ondewo/nlu/context_pb';
29
- export * from './api/ondewo/nlu/intent_pb';
30
- export * from './api/ondewo/nlu/user_grpc_web_pb';
31
- export * from './api/ondewo/nlu/webhook_pb';
32
+ export * from './api/ondewo/nlu/user_pb';
33
+ export * from './api/ondewo/nlu/context_grpc_web_pb';
32
34
  export * from './api/ondewo/nlu/common_pb';
33
- export * from './api/ondewo/nlu/llm_evaluation_pb';
34
- export * from './api/ondewo/nlu/operation_metadata_pb';
35
- export * from './api/ondewo/qa/qa_pb';
36
- export * from './api/ondewo/qa/qa_grpc_web_pb';
37
- export * from './api/google/protobuf/timestamp_pb';
35
+ export * from './api/ondewo/nlu/llm_evaluation_grpc_web_pb';
36
+ export * from './api/ondewo/nlu/operations_pb';
37
+ export * from './api/google/api/annotations_pb';
38
+ export * from './api/google/rpc/status_pb';
39
+ export * from './api/google/protobuf/field_mask_pb';
38
40
  export * from './api/google/protobuf/any_pb';
41
+ export * from './api/google/protobuf/timestamp_pb';
39
42
  export * from './api/google/protobuf/empty_pb';
40
43
  export * from './api/google/protobuf/struct_pb';
41
- export * from './api/google/protobuf/field_mask_pb';
42
44
  export * from './api/google/type/latlng_pb';
43
- export * from './api/google/api/annotations_pb';
44
- export * from './api/google/rpc/status_pb';