smritea-sdk 0.1.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.

Potentially problematic release.


This version of smritea-sdk might be problematic. Click here for more details.

package/dist/index.mjs ADDED
@@ -0,0 +1,782 @@
1
+ // src/_internal/autogen/runtime.ts
2
+ var BASE_PATH = "http://api.smritea.ai/api/v1".replace(/\/+$/, "");
3
+ var Configuration = class {
4
+ constructor(configuration = {}) {
5
+ this.configuration = configuration;
6
+ }
7
+ set config(configuration) {
8
+ this.configuration = configuration;
9
+ }
10
+ get basePath() {
11
+ return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;
12
+ }
13
+ get fetchApi() {
14
+ return this.configuration.fetchApi;
15
+ }
16
+ get middleware() {
17
+ return this.configuration.middleware || [];
18
+ }
19
+ get queryParamsStringify() {
20
+ return this.configuration.queryParamsStringify || querystring;
21
+ }
22
+ get username() {
23
+ return this.configuration.username;
24
+ }
25
+ get password() {
26
+ return this.configuration.password;
27
+ }
28
+ get apiKey() {
29
+ const apiKey = this.configuration.apiKey;
30
+ if (apiKey) {
31
+ return typeof apiKey === "function" ? apiKey : () => apiKey;
32
+ }
33
+ return void 0;
34
+ }
35
+ get accessToken() {
36
+ const accessToken = this.configuration.accessToken;
37
+ if (accessToken) {
38
+ return typeof accessToken === "function" ? accessToken : async () => accessToken;
39
+ }
40
+ return void 0;
41
+ }
42
+ get headers() {
43
+ return this.configuration.headers;
44
+ }
45
+ get credentials() {
46
+ return this.configuration.credentials;
47
+ }
48
+ };
49
+ var DefaultConfig = new Configuration();
50
+ var BaseAPI = class _BaseAPI {
51
+ constructor(configuration = DefaultConfig) {
52
+ this.configuration = configuration;
53
+ this.middleware = configuration.middleware;
54
+ }
55
+ static jsonRegex = new RegExp("^(:?application/json|[^;/ ]+/[^;/ ]+[+]json)[ ]*(:?;.*)?$", "i");
56
+ middleware;
57
+ withMiddleware(...middlewares) {
58
+ const next = this.clone();
59
+ next.middleware = next.middleware.concat(...middlewares);
60
+ return next;
61
+ }
62
+ withPreMiddleware(...preMiddlewares) {
63
+ const middlewares = preMiddlewares.map((pre) => ({ pre }));
64
+ return this.withMiddleware(...middlewares);
65
+ }
66
+ withPostMiddleware(...postMiddlewares) {
67
+ const middlewares = postMiddlewares.map((post) => ({ post }));
68
+ return this.withMiddleware(...middlewares);
69
+ }
70
+ /**
71
+ * Check if the given MIME is a JSON MIME.
72
+ * JSON MIME examples:
73
+ * application/json
74
+ * application/json; charset=UTF8
75
+ * APPLICATION/JSON
76
+ * application/vnd.company+json
77
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
78
+ * @return True if the given MIME is JSON, false otherwise.
79
+ */
80
+ isJsonMime(mime) {
81
+ if (!mime) {
82
+ return false;
83
+ }
84
+ return _BaseAPI.jsonRegex.test(mime);
85
+ }
86
+ async request(context, initOverrides) {
87
+ const { url, init } = await this.createFetchParams(context, initOverrides);
88
+ const response = await this.fetchApi(url, init);
89
+ if (response && (response.status >= 200 && response.status < 300)) {
90
+ return response;
91
+ }
92
+ throw new ResponseError(response, "Response returned an error code");
93
+ }
94
+ async createFetchParams(context, initOverrides) {
95
+ let url = this.configuration.basePath + context.path;
96
+ if (context.query !== void 0 && Object.keys(context.query).length !== 0) {
97
+ url += "?" + this.configuration.queryParamsStringify(context.query);
98
+ }
99
+ const headers = Object.assign({}, this.configuration.headers, context.headers);
100
+ Object.keys(headers).forEach((key) => headers[key] === void 0 ? delete headers[key] : {});
101
+ const initOverrideFn = typeof initOverrides === "function" ? initOverrides : async () => initOverrides;
102
+ const initParams = {
103
+ method: context.method,
104
+ headers,
105
+ body: context.body,
106
+ credentials: this.configuration.credentials
107
+ };
108
+ const overriddenInit = {
109
+ ...initParams,
110
+ ...await initOverrideFn({
111
+ init: initParams,
112
+ context
113
+ })
114
+ };
115
+ let body;
116
+ if (isFormData(overriddenInit.body) || overriddenInit.body instanceof URLSearchParams || isBlob(overriddenInit.body)) {
117
+ body = overriddenInit.body;
118
+ } else if (this.isJsonMime(headers["Content-Type"])) {
119
+ body = JSON.stringify(overriddenInit.body);
120
+ } else {
121
+ body = overriddenInit.body;
122
+ }
123
+ const init = {
124
+ ...overriddenInit,
125
+ body
126
+ };
127
+ return { url, init };
128
+ }
129
+ fetchApi = async (url, init) => {
130
+ let fetchParams = { url, init };
131
+ for (const middleware of this.middleware) {
132
+ if (middleware.pre) {
133
+ fetchParams = await middleware.pre({
134
+ fetch: this.fetchApi,
135
+ ...fetchParams
136
+ }) || fetchParams;
137
+ }
138
+ }
139
+ let response = void 0;
140
+ try {
141
+ response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);
142
+ } catch (e) {
143
+ for (const middleware of this.middleware) {
144
+ if (middleware.onError) {
145
+ response = await middleware.onError({
146
+ fetch: this.fetchApi,
147
+ url: fetchParams.url,
148
+ init: fetchParams.init,
149
+ error: e,
150
+ response: response ? response.clone() : void 0
151
+ }) || response;
152
+ }
153
+ }
154
+ if (response === void 0) {
155
+ if (e instanceof Error) {
156
+ throw new FetchError(e, "The request failed and the interceptors did not return an alternative response");
157
+ } else {
158
+ throw e;
159
+ }
160
+ }
161
+ }
162
+ for (const middleware of this.middleware) {
163
+ if (middleware.post) {
164
+ response = await middleware.post({
165
+ fetch: this.fetchApi,
166
+ url: fetchParams.url,
167
+ init: fetchParams.init,
168
+ response: response.clone()
169
+ }) || response;
170
+ }
171
+ }
172
+ return response;
173
+ };
174
+ /**
175
+ * Create a shallow clone of `this` by constructing a new instance
176
+ * and then shallow cloning data members.
177
+ */
178
+ clone() {
179
+ const constructor = this.constructor;
180
+ const next = new constructor(this.configuration);
181
+ next.middleware = this.middleware.slice();
182
+ return next;
183
+ }
184
+ };
185
+ function isBlob(value) {
186
+ return typeof Blob !== "undefined" && value instanceof Blob;
187
+ }
188
+ function isFormData(value) {
189
+ return typeof FormData !== "undefined" && value instanceof FormData;
190
+ }
191
+ var ResponseError = class extends Error {
192
+ constructor(response, msg) {
193
+ super(msg);
194
+ this.response = response;
195
+ }
196
+ name = "ResponseError";
197
+ };
198
+ var FetchError = class extends Error {
199
+ constructor(cause, msg) {
200
+ super(msg);
201
+ this.cause = cause;
202
+ }
203
+ name = "FetchError";
204
+ };
205
+ var RequiredError = class extends Error {
206
+ constructor(field, msg) {
207
+ super(msg);
208
+ this.field = field;
209
+ }
210
+ name = "RequiredError";
211
+ };
212
+ function querystring(params, prefix = "") {
213
+ return Object.keys(params).map((key) => querystringSingleKey(key, params[key], prefix)).filter((part) => part.length > 0).join("&");
214
+ }
215
+ function querystringSingleKey(key, value, keyPrefix = "") {
216
+ const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);
217
+ if (value instanceof Array) {
218
+ const multiValue = value.map((singleValue) => encodeURIComponent(String(singleValue))).join(`&${encodeURIComponent(fullKey)}=`);
219
+ return `${encodeURIComponent(fullKey)}=${multiValue}`;
220
+ }
221
+ if (value instanceof Set) {
222
+ const valueAsArray = Array.from(value);
223
+ return querystringSingleKey(key, valueAsArray, keyPrefix);
224
+ }
225
+ if (value instanceof Date) {
226
+ return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;
227
+ }
228
+ if (value instanceof Object) {
229
+ return querystring(value, fullKey);
230
+ }
231
+ return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;
232
+ }
233
+ var JSONApiResponse = class {
234
+ constructor(raw, transformer = (jsonValue) => jsonValue) {
235
+ this.raw = raw;
236
+ this.transformer = transformer;
237
+ }
238
+ async value() {
239
+ return this.transformer(await this.raw.json());
240
+ }
241
+ };
242
+ var VoidApiResponse = class {
243
+ constructor(raw) {
244
+ this.raw = raw;
245
+ }
246
+ async value() {
247
+ return void 0;
248
+ }
249
+ };
250
+
251
+ // src/_internal/autogen/models/CommondtoPersonaDomainConfig.ts
252
+ function CommondtoPersonaDomainConfigToJSON(json) {
253
+ return CommondtoPersonaDomainConfigToJSONTyped(json, false);
254
+ }
255
+ function CommondtoPersonaDomainConfigToJSONTyped(value, ignoreDiscriminator = false) {
256
+ if (value == null) {
257
+ return value;
258
+ }
259
+ return {
260
+ "description": value["description"],
261
+ "is_default": value["isDefault"],
262
+ "name": value["name"],
263
+ "traits": value["traits"]
264
+ };
265
+ }
266
+
267
+ // src/_internal/autogen/models/CommondtoPersonaExtractionConfig.ts
268
+ function CommondtoPersonaExtractionConfigToJSON(json) {
269
+ return CommondtoPersonaExtractionConfigToJSONTyped(json, false);
270
+ }
271
+ function CommondtoPersonaExtractionConfigToJSONTyped(value, ignoreDiscriminator = false) {
272
+ if (value == null) {
273
+ return value;
274
+ }
275
+ return {
276
+ "actor_types": value["actorTypes"],
277
+ "domains": value["domains"] == null ? void 0 : value["domains"].map(CommondtoPersonaDomainConfigToJSON),
278
+ "enabled": value["enabled"],
279
+ "max_tokens": value["maxTokens"],
280
+ "model": value["model"],
281
+ "temperature": value["temperature"]
282
+ };
283
+ }
284
+
285
+ // src/_internal/autogen/models/CommondtoFactExtractionConfig.ts
286
+ function CommondtoFactExtractionConfigToJSON(json) {
287
+ return CommondtoFactExtractionConfigToJSONTyped(json, false);
288
+ }
289
+ function CommondtoFactExtractionConfigToJSONTyped(value, ignoreDiscriminator = false) {
290
+ if (value == null) {
291
+ return value;
292
+ }
293
+ return {
294
+ "max_passes": value["maxPasses"],
295
+ "max_tokens": value["maxTokens"],
296
+ "min_importance": value["minImportance"],
297
+ "model": value["model"],
298
+ "strategy": value["strategy"],
299
+ "temperature": value["temperature"]
300
+ };
301
+ }
302
+
303
+ // src/_internal/autogen/models/CommondtoEntityExtractionConfig.ts
304
+ function CommondtoEntityExtractionConfigToJSON(json) {
305
+ return CommondtoEntityExtractionConfigToJSONTyped(json, false);
306
+ }
307
+ function CommondtoEntityExtractionConfigToJSONTyped(value, ignoreDiscriminator = false) {
308
+ if (value == null) {
309
+ return value;
310
+ }
311
+ return {
312
+ "context_window": value["contextWindow"],
313
+ "enable_context": value["enableContext"],
314
+ "entity_types": value["entityTypes"],
315
+ "fallback_messages": value["fallbackMessages"],
316
+ "max_passes": value["maxPasses"],
317
+ "max_tokens": value["maxTokens"],
318
+ "min_confidence": value["minConfidence"],
319
+ "model": value["model"],
320
+ "temperature": value["temperature"]
321
+ };
322
+ }
323
+
324
+ // src/_internal/autogen/models/CommondtoRelativeStandingConfig.ts
325
+ function CommondtoRelativeStandingConfigFromJSON(json) {
326
+ return CommondtoRelativeStandingConfigFromJSONTyped(json, false);
327
+ }
328
+ function CommondtoRelativeStandingConfigFromJSONTyped(json, ignoreDiscriminator) {
329
+ if (json == null) {
330
+ return json;
331
+ }
332
+ return {
333
+ "decayFactor": json["decay_factor"] == null ? void 0 : json["decay_factor"],
334
+ "decayFunction": json["decay_function"] == null ? void 0 : json["decay_function"],
335
+ "importance": json["importance"] == null ? void 0 : json["importance"]
336
+ };
337
+ }
338
+ function CommondtoRelativeStandingConfigToJSON(json) {
339
+ return CommondtoRelativeStandingConfigToJSONTyped(json, false);
340
+ }
341
+ function CommondtoRelativeStandingConfigToJSONTyped(value, ignoreDiscriminator = false) {
342
+ if (value == null) {
343
+ return value;
344
+ }
345
+ return {
346
+ "decay_factor": value["decayFactor"],
347
+ "decay_function": value["decayFunction"],
348
+ "importance": value["importance"]
349
+ };
350
+ }
351
+
352
+ // src/_internal/autogen/models/MemoryMemoryResponse.ts
353
+ function MemoryMemoryResponseFromJSON(json) {
354
+ return MemoryMemoryResponseFromJSONTyped(json, false);
355
+ }
356
+ function MemoryMemoryResponseFromJSONTyped(json, ignoreDiscriminator) {
357
+ if (json == null) {
358
+ return json;
359
+ }
360
+ return {
361
+ "activeFrom": json["active_from"] == null ? void 0 : json["active_from"],
362
+ "activeTo": json["active_to"] == null ? void 0 : json["active_to"],
363
+ "actorId": json["actor_id"] == null ? void 0 : json["actor_id"],
364
+ "actorName": json["actor_name"] == null ? void 0 : json["actor_name"],
365
+ "actorType": json["actor_type"] == null ? void 0 : json["actor_type"],
366
+ "appId": json["app_id"] == null ? void 0 : json["app_id"],
367
+ "content": json["content"] == null ? void 0 : json["content"],
368
+ "conversationId": json["conversation_id"] == null ? void 0 : json["conversation_id"],
369
+ "conversationMessageId": json["conversation_message_id"] == null ? void 0 : json["conversation_message_id"],
370
+ "createdAt": json["created_at"] == null ? void 0 : json["created_at"],
371
+ "id": json["id"] == null ? void 0 : json["id"],
372
+ "metadata": json["metadata"] == null ? void 0 : json["metadata"],
373
+ "relativeStanding": json["relative_standing"] == null ? void 0 : CommondtoRelativeStandingConfigFromJSON(json["relative_standing"]),
374
+ "updatedAt": json["updated_at"] == null ? void 0 : json["updated_at"]
375
+ };
376
+ }
377
+
378
+ // src/_internal/autogen/models/MemoryCreateMemoryRequest.ts
379
+ function MemoryCreateMemoryRequestToJSON(json) {
380
+ return MemoryCreateMemoryRequestToJSONTyped(json, false);
381
+ }
382
+ function MemoryCreateMemoryRequestToJSONTyped(value, ignoreDiscriminator = false) {
383
+ if (value == null) {
384
+ return value;
385
+ }
386
+ return {
387
+ "active_from": value["activeFrom"],
388
+ "active_to": value["activeTo"],
389
+ "actor_id": value["actorId"],
390
+ "actor_name": value["actorName"],
391
+ "actor_type": value["actorType"],
392
+ "app_id": value["appId"],
393
+ "content": value["content"],
394
+ "conversation_id": value["conversationId"],
395
+ "conversation_message_id": value["conversationMessageId"],
396
+ "entity_extraction_overrides": CommondtoEntityExtractionConfigToJSON(value["entityExtractionOverrides"]),
397
+ "fact_extraction_overrides": CommondtoFactExtractionConfigToJSON(value["factExtractionOverrides"]),
398
+ "metadata": value["metadata"],
399
+ "persona_extraction_overrides": CommondtoPersonaExtractionConfigToJSON(value["personaExtractionOverrides"]),
400
+ "relative_standing": CommondtoRelativeStandingConfigToJSON(value["relativeStanding"])
401
+ };
402
+ }
403
+
404
+ // src/_internal/autogen/models/MemorySearchMemoryResponse.ts
405
+ function MemorySearchMemoryResponseFromJSON(json) {
406
+ return MemorySearchMemoryResponseFromJSONTyped(json, false);
407
+ }
408
+ function MemorySearchMemoryResponseFromJSONTyped(json, ignoreDiscriminator) {
409
+ if (json == null) {
410
+ return json;
411
+ }
412
+ return {
413
+ "memory": json["memory"] == null ? void 0 : MemoryMemoryResponseFromJSON(json["memory"]),
414
+ "score": json["score"] == null ? void 0 : json["score"]
415
+ };
416
+ }
417
+
418
+ // src/_internal/autogen/models/MemorySearchMemoriesResponse.ts
419
+ function MemorySearchMemoriesResponseFromJSON(json) {
420
+ return MemorySearchMemoriesResponseFromJSONTyped(json, false);
421
+ }
422
+ function MemorySearchMemoriesResponseFromJSONTyped(json, ignoreDiscriminator) {
423
+ if (json == null) {
424
+ return json;
425
+ }
426
+ return {
427
+ "memories": json["memories"] == null ? void 0 : json["memories"].map(MemorySearchMemoryResponseFromJSON)
428
+ };
429
+ }
430
+
431
+ // src/_internal/autogen/models/SearchStrategiesSearchMethod.ts
432
+ function SearchStrategiesSearchMethodToJSON(value) {
433
+ return value;
434
+ }
435
+
436
+ // src/_internal/autogen/models/MemorySearchMemoryRequest.ts
437
+ function MemorySearchMemoryRequestToJSON(json) {
438
+ return MemorySearchMemoryRequestToJSONTyped(json, false);
439
+ }
440
+ function MemorySearchMemoryRequestToJSONTyped(value, ignoreDiscriminator = false) {
441
+ if (value == null) {
442
+ return value;
443
+ }
444
+ return {
445
+ "actor_id": value["actorId"],
446
+ "actor_type": value["actorType"],
447
+ "app_id": value["appId"],
448
+ "conversation_id": value["conversationId"],
449
+ "from_time": value["fromTime"],
450
+ "graph_depth": value["graphDepth"],
451
+ "limit": value["limit"],
452
+ "method": SearchStrategiesSearchMethodToJSON(value["method"]),
453
+ "query": value["query"],
454
+ "threshold": value["threshold"],
455
+ "to_time": value["toTime"],
456
+ "valid_at": value["validAt"]
457
+ };
458
+ }
459
+
460
+ // src/_internal/autogen/apis/SDKMemoryApi.ts
461
+ var SDKMemoryApi = class extends BaseAPI {
462
+ /**
463
+ * Create a new memory with quota and rate limit enforcement
464
+ * Create memory (SDK)
465
+ */
466
+ async createMemoryRaw(requestParameters, initOverrides) {
467
+ if (requestParameters["request"] == null) {
468
+ throw new RequiredError(
469
+ "request",
470
+ 'Required parameter "request" was null or undefined when calling createMemory().'
471
+ );
472
+ }
473
+ const queryParameters = {};
474
+ const headerParameters = {};
475
+ headerParameters["Content-Type"] = "application/json";
476
+ if (this.configuration && this.configuration.apiKey) {
477
+ headerParameters["X-API-Key"] = await this.configuration.apiKey("X-API-Key");
478
+ }
479
+ let urlPath = `/api/v1/sdk/memories`;
480
+ const response = await this.request({
481
+ path: urlPath,
482
+ method: "POST",
483
+ headers: headerParameters,
484
+ query: queryParameters,
485
+ body: MemoryCreateMemoryRequestToJSON(requestParameters["request"])
486
+ }, initOverrides);
487
+ return new JSONApiResponse(response, (jsonValue) => MemoryMemoryResponseFromJSON(jsonValue));
488
+ }
489
+ /**
490
+ * Create a new memory with quota and rate limit enforcement
491
+ * Create memory (SDK)
492
+ */
493
+ async createMemory(requestParameters, initOverrides) {
494
+ const response = await this.createMemoryRaw(requestParameters, initOverrides);
495
+ return await response.value();
496
+ }
497
+ /**
498
+ * Delete a memory by ID with rate limit enforcement
499
+ * Delete memory (SDK)
500
+ */
501
+ async deleteMemoryRaw(requestParameters, initOverrides) {
502
+ if (requestParameters["memoryId"] == null) {
503
+ throw new RequiredError(
504
+ "memoryId",
505
+ 'Required parameter "memoryId" was null or undefined when calling deleteMemory().'
506
+ );
507
+ }
508
+ const queryParameters = {};
509
+ const headerParameters = {};
510
+ if (this.configuration && this.configuration.apiKey) {
511
+ headerParameters["X-API-Key"] = await this.configuration.apiKey("X-API-Key");
512
+ }
513
+ let urlPath = `/api/v1/sdk/memories/{memory_id}`;
514
+ urlPath = urlPath.replace(`{${"memory_id"}}`, encodeURIComponent(String(requestParameters["memoryId"])));
515
+ const response = await this.request({
516
+ path: urlPath,
517
+ method: "DELETE",
518
+ headers: headerParameters,
519
+ query: queryParameters
520
+ }, initOverrides);
521
+ return new VoidApiResponse(response);
522
+ }
523
+ /**
524
+ * Delete a memory by ID with rate limit enforcement
525
+ * Delete memory (SDK)
526
+ */
527
+ async deleteMemory(requestParameters, initOverrides) {
528
+ await this.deleteMemoryRaw(requestParameters, initOverrides);
529
+ }
530
+ /**
531
+ * Get a single memory by ID with rate limit enforcement
532
+ * Get memory by ID (SDK)
533
+ */
534
+ async getMemoryRaw(requestParameters, initOverrides) {
535
+ if (requestParameters["memoryId"] == null) {
536
+ throw new RequiredError(
537
+ "memoryId",
538
+ 'Required parameter "memoryId" was null or undefined when calling getMemory().'
539
+ );
540
+ }
541
+ const queryParameters = {};
542
+ const headerParameters = {};
543
+ if (this.configuration && this.configuration.apiKey) {
544
+ headerParameters["X-API-Key"] = await this.configuration.apiKey("X-API-Key");
545
+ }
546
+ let urlPath = `/api/v1/sdk/memories/{memory_id}`;
547
+ urlPath = urlPath.replace(`{${"memory_id"}}`, encodeURIComponent(String(requestParameters["memoryId"])));
548
+ const response = await this.request({
549
+ path: urlPath,
550
+ method: "GET",
551
+ headers: headerParameters,
552
+ query: queryParameters
553
+ }, initOverrides);
554
+ return new JSONApiResponse(response, (jsonValue) => MemoryMemoryResponseFromJSON(jsonValue));
555
+ }
556
+ /**
557
+ * Get a single memory by ID with rate limit enforcement
558
+ * Get memory by ID (SDK)
559
+ */
560
+ async getMemory(requestParameters, initOverrides) {
561
+ const response = await this.getMemoryRaw(requestParameters, initOverrides);
562
+ return await response.value();
563
+ }
564
+ /**
565
+ * Search memories with quota and rate limit enforcement
566
+ * Search memories (SDK)
567
+ */
568
+ async searchMemoriesRaw(requestParameters, initOverrides) {
569
+ if (requestParameters["request"] == null) {
570
+ throw new RequiredError(
571
+ "request",
572
+ 'Required parameter "request" was null or undefined when calling searchMemories().'
573
+ );
574
+ }
575
+ const queryParameters = {};
576
+ const headerParameters = {};
577
+ headerParameters["Content-Type"] = "application/json";
578
+ if (this.configuration && this.configuration.apiKey) {
579
+ headerParameters["X-API-Key"] = await this.configuration.apiKey("X-API-Key");
580
+ }
581
+ let urlPath = `/api/v1/sdk/memories/search`;
582
+ const response = await this.request({
583
+ path: urlPath,
584
+ method: "POST",
585
+ headers: headerParameters,
586
+ query: queryParameters,
587
+ body: MemorySearchMemoryRequestToJSON(requestParameters["request"])
588
+ }, initOverrides);
589
+ return new JSONApiResponse(response, (jsonValue) => MemorySearchMemoriesResponseFromJSON(jsonValue));
590
+ }
591
+ /**
592
+ * Search memories with quota and rate limit enforcement
593
+ * Search memories (SDK)
594
+ */
595
+ async searchMemories(requestParameters, initOverrides) {
596
+ const response = await this.searchMemoriesRaw(requestParameters, initOverrides);
597
+ return await response.value();
598
+ }
599
+ };
600
+
601
+ // src/errors.ts
602
+ var SmriteaError = class extends Error {
603
+ statusCode;
604
+ constructor(message, statusCode) {
605
+ super(message);
606
+ this.name = "SmriteaError";
607
+ this.statusCode = statusCode;
608
+ Object.setPrototypeOf(this, new.target.prototype);
609
+ }
610
+ };
611
+ var SmriteaAuthError = class extends SmriteaError {
612
+ constructor(message, statusCode) {
613
+ super(message, statusCode ?? 401);
614
+ this.name = "SmriteaAuthError";
615
+ Object.setPrototypeOf(this, new.target.prototype);
616
+ }
617
+ };
618
+ var SmriteaNotFoundError = class extends SmriteaError {
619
+ constructor(message, statusCode) {
620
+ super(message, statusCode ?? 404);
621
+ this.name = "SmriteaNotFoundError";
622
+ Object.setPrototypeOf(this, new.target.prototype);
623
+ }
624
+ };
625
+ var SmriteaValidationError = class extends SmriteaError {
626
+ constructor(message, statusCode) {
627
+ super(message, statusCode ?? 400);
628
+ this.name = "SmriteaValidationError";
629
+ Object.setPrototypeOf(this, new.target.prototype);
630
+ }
631
+ };
632
+ var SmriteaQuotaError = class extends SmriteaError {
633
+ constructor(message, statusCode) {
634
+ super(message, statusCode ?? 402);
635
+ this.name = "SmriteaQuotaError";
636
+ Object.setPrototypeOf(this, new.target.prototype);
637
+ }
638
+ };
639
+ var SmriteaRateLimitError = class extends SmriteaError {
640
+ retryAfter;
641
+ constructor(message, statusCode, retryAfter) {
642
+ super(message, statusCode ?? 429);
643
+ this.name = "SmriteaRateLimitError";
644
+ this.retryAfter = retryAfter;
645
+ Object.setPrototypeOf(this, new.target.prototype);
646
+ }
647
+ };
648
+
649
+ // src/client.ts
650
+ var RETRY_CAP_MS = 3e4;
651
+ var SmriteaClient = class {
652
+ appId;
653
+ api;
654
+ maxRetries;
655
+ constructor(config) {
656
+ this.appId = config.appId;
657
+ this.maxRetries = config.maxRetries ?? 2;
658
+ const configuration = new Configuration({
659
+ basePath: config.baseUrl?.replace(/\/$/, "") ?? "https://api.smritea.ai",
660
+ apiKey: config.apiKey
661
+ });
662
+ this.api = new SDKMemoryApi(configuration);
663
+ }
664
+ async add(content, options) {
665
+ const actorId = options?.userId ?? options?.actorId;
666
+ const actorType = options?.userId !== void 0 ? "user" : options?.actorType;
667
+ return this.withRetry(
668
+ () => this.api.createMemory({
669
+ request: {
670
+ appId: this.appId,
671
+ content,
672
+ actorId,
673
+ actorType,
674
+ actorName: options?.actorName,
675
+ metadata: options?.metadata,
676
+ conversationId: options?.conversationId
677
+ }
678
+ })
679
+ );
680
+ }
681
+ async search(query, options) {
682
+ const actorId = options?.userId ?? options?.actorId;
683
+ const actorType = options?.userId !== void 0 ? "user" : options?.actorType;
684
+ const response = await this.withRetry(
685
+ () => this.api.searchMemories({
686
+ request: {
687
+ appId: this.appId,
688
+ query,
689
+ actorId,
690
+ actorType,
691
+ limit: options?.limit,
692
+ method: options?.method,
693
+ threshold: options?.threshold,
694
+ graphDepth: options?.graphDepth,
695
+ conversationId: options?.conversationId
696
+ }
697
+ })
698
+ );
699
+ return response.memories ?? [];
700
+ }
701
+ async get(memoryId) {
702
+ return this.withRetry(() => this.api.getMemory({ memoryId }));
703
+ }
704
+ async delete(memoryId) {
705
+ await this.withRetry(() => this.api.deleteMemory({ memoryId }));
706
+ }
707
+ // ------------------------------------------------------------------
708
+ // Private helpers
709
+ // ------------------------------------------------------------------
710
+ /**
711
+ * Execute fn, retrying on HTTP 429 up to maxRetries times.
712
+ *
713
+ * Sleep strategy per attempt:
714
+ * 1. Retry-After header value (seconds), capped at 30 s.
715
+ * 2. Exponential backoff (1 s, 2 s, 4 s, …) with ±25 % jitter, capped at 30 s.
716
+ *
717
+ * After all retries are exhausted the 429 is re-raised as SmriteaRateLimitError
718
+ * with retryAfter populated from the final response header if available.
719
+ */
720
+ async withRetry(fn) {
721
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
722
+ try {
723
+ return await fn();
724
+ } catch (err) {
725
+ if (err instanceof ResponseError && err.response.status === 429 && attempt < this.maxRetries) {
726
+ await new Promise(
727
+ (resolve) => setTimeout(resolve, this.retryDelayMs(attempt, this.parseRetryAfter(err.response)))
728
+ );
729
+ continue;
730
+ }
731
+ this.handleError(err);
732
+ }
733
+ }
734
+ throw new Error("unreachable");
735
+ }
736
+ /** Calculate sleep duration in milliseconds for a retry attempt. */
737
+ retryDelayMs(attempt, retryAfterSeconds) {
738
+ if (retryAfterSeconds !== void 0 && retryAfterSeconds > 0) {
739
+ return Math.min(retryAfterSeconds * 1e3, RETRY_CAP_MS);
740
+ }
741
+ const baseMs = Math.min(1e3 * Math.pow(2, attempt), RETRY_CAP_MS);
742
+ const jitter = baseMs * (0.75 + 0.5 * Math.random());
743
+ return Math.min(jitter, RETRY_CAP_MS);
744
+ }
745
+ /** Extract the Retry-After header value in seconds, or undefined. */
746
+ parseRetryAfter(response) {
747
+ const header = response.headers.get("Retry-After");
748
+ if (header === null) return void 0;
749
+ const parsed = parseInt(header, 10);
750
+ return isNaN(parsed) ? void 0 : parsed;
751
+ }
752
+ handleError(err) {
753
+ if (err instanceof ResponseError) {
754
+ const status = err.response.status;
755
+ const message = err.message;
756
+ switch (status) {
757
+ case 400:
758
+ throw new SmriteaValidationError(message, status);
759
+ case 401:
760
+ throw new SmriteaAuthError(message, status);
761
+ case 402:
762
+ throw new SmriteaQuotaError(message, status);
763
+ case 404:
764
+ throw new SmriteaNotFoundError(message, status);
765
+ case 429:
766
+ throw new SmriteaRateLimitError(message, status, this.parseRetryAfter(err.response));
767
+ default:
768
+ throw new SmriteaError(message, status);
769
+ }
770
+ }
771
+ throw new SmriteaError(String(err));
772
+ }
773
+ };
774
+ export {
775
+ SmriteaAuthError,
776
+ SmriteaClient,
777
+ SmriteaError,
778
+ SmriteaNotFoundError,
779
+ SmriteaQuotaError,
780
+ SmriteaRateLimitError,
781
+ SmriteaValidationError
782
+ };