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