@albatrossai/albatross-sdk 1.1.42 → 1.1.44

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.
package/README.md CHANGED
@@ -16,23 +16,23 @@ npm install @albatrossai/albatross-sdk
16
16
  ## Quick Start
17
17
 
18
18
  ```typescript
19
- import { Client } from '@albatrossai/albatross-sdk';
19
+ import { Client } from "@albatrossai/albatross-sdk";
20
20
 
21
- const client = new Client('your-api-token', 'your-tenant-id');
21
+ const client = new Client("your-api-token", "your-tenant-id");
22
22
 
23
23
  // Search
24
- const results = await client.search('query', 'use-case', { limit: 10 });
24
+ const results = await client.search("query", "use-case", { limit: 10 });
25
25
 
26
26
  // Recommendations
27
- const recs = await client.getRecommendations('use-case', {
28
- user_id: 'user-123',
29
- limit: 10
27
+ const recs = await client.getRecommendations("use-case", {
28
+ user_id: "user-123",
29
+ limit: 10,
30
30
  });
31
31
 
32
32
  // Track events
33
33
  await client.putEvent({
34
- eventType: 'view',
35
- payload: { user_id: 'user-123', item_id: 'item-456' }
34
+ eventType: "view",
35
+ payload: { user_id: "user-123", item_id: "item-456" },
36
36
  });
37
37
  ```
38
38
 
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var sync = require('csv-stringify/sync');
4
3
  var zod = require('zod');
4
+ var sync = require('csv-stringify/sync');
5
5
 
6
6
  // src/request.ts
7
7
  var MAX_RETRIES = 3;
@@ -19,10 +19,7 @@ var makeRequest = async ({
19
19
  let lastError = null;
20
20
  for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {
21
21
  const controller = new AbortController();
22
- const timeoutId = setTimeout(
23
- () => controller.abort(),
24
- REQUEST_TIMEOUT_MS
25
- );
22
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
26
23
  try {
27
24
  const response = await fetch(url, {
28
25
  method,
@@ -33,17 +30,13 @@ var makeRequest = async ({
33
30
  clearTimeout(timeoutId);
34
31
  if (!response.ok) {
35
32
  const errorText = await response.text();
36
- const error = new Error(
37
- `Request failed: ${response.status} ${response.statusText} ${errorText}`
38
- );
33
+ const error = new Error(`Request failed: ${response.status} ${response.statusText} ${errorText}`);
39
34
  if (!isRetryableError(response.status)) {
40
35
  throw error;
41
36
  }
42
37
  if (attempt < MAX_RETRIES) {
43
38
  lastError = error;
44
- await new Promise(
45
- (resolve) => setTimeout(resolve, getRetryDelay(attempt))
46
- );
39
+ await new Promise((resolve) => setTimeout(resolve, getRetryDelay(attempt)));
47
40
  continue;
48
41
  }
49
42
  throw new Error(
@@ -61,28 +54,18 @@ var makeRequest = async ({
61
54
  if (error.name === "AbortError") {
62
55
  if (attempt < MAX_RETRIES) {
63
56
  lastError = error;
64
- await new Promise(
65
- (resolve) => setTimeout(resolve, getRetryDelay(attempt))
66
- );
57
+ await new Promise((resolve) => setTimeout(resolve, getRetryDelay(attempt)));
67
58
  continue;
68
59
  }
69
- throw new Error(
70
- `Request timeout after ${REQUEST_TIMEOUT_MS}ms (${MAX_RETRIES} retries)`,
71
- { cause: error }
72
- );
60
+ throw new Error(`Request timeout after ${REQUEST_TIMEOUT_MS}ms (${MAX_RETRIES} retries)`, { cause: error });
73
61
  }
74
62
  if (error.message.includes("fetch") || error.message.includes("network") || error.message.includes("Failed to fetch")) {
75
63
  if (attempt < MAX_RETRIES) {
76
64
  lastError = error;
77
- await new Promise(
78
- (resolve) => setTimeout(resolve, getRetryDelay(attempt))
79
- );
65
+ await new Promise((resolve) => setTimeout(resolve, getRetryDelay(attempt)));
80
66
  continue;
81
67
  }
82
- throw new Error(
83
- `Network error after ${MAX_RETRIES} retries: ${error.message}`,
84
- { cause: error }
85
- );
68
+ throw new Error(`Network error after ${MAX_RETRIES} retries: ${error.message}`, { cause: error });
86
69
  }
87
70
  }
88
71
  throw error;
@@ -90,62 +73,6 @@ var makeRequest = async ({
90
73
  }
91
74
  throw lastError || new Error("Unexpected error in makeRequest");
92
75
  };
93
- var flattenNested = (obj) => {
94
- const result = {};
95
- for (const [key, value] of Object.entries(obj)) {
96
- if (typeof value === "object" && !Array.isArray(value) && value !== null) {
97
- for (const [nestedKey, nestedValue] of Object.entries(value)) {
98
- if (Array.isArray(nestedValue)) {
99
- result[`${key}_${nestedKey}`] = nestedValue.join(",");
100
- } else if (typeof nestedValue === "object" && nestedValue !== null) {
101
- for (const [subKey, subValue] of Object.entries(nestedValue)) {
102
- result[`${nestedKey}_${subKey}`] = subValue;
103
- }
104
- } else {
105
- result[`${key}_${nestedKey}`] = nestedValue;
106
- }
107
- }
108
- } else if (Array.isArray(value)) {
109
- result[key] = value.join(",");
110
- } else {
111
- result[key] = value;
112
- }
113
- }
114
- return result;
115
- };
116
- var preFormatRow = (rowHeaders, row) => {
117
- const flattenedRow = flattenNested(row);
118
- return rowHeaders.map((header) => {
119
- const value = flattenedRow[header];
120
- if (value === null || value === void 0) {
121
- return "";
122
- }
123
- if (typeof value === "object") {
124
- return JSON.stringify(value);
125
- }
126
- return String(value);
127
- });
128
- };
129
- var bodyToCSV = (data) => {
130
- if (data.length === 0) {
131
- throw new Error("data is empty");
132
- }
133
- const [row0] = data;
134
- if (!row0) {
135
- throw new Error("data is empty");
136
- }
137
- const rowHeaders = Object.keys(flattenNested(row0));
138
- const csvData = [
139
- rowHeaders,
140
- ...data.map((row) => preFormatRow(rowHeaders, row))
141
- ];
142
- return sync.stringify(csvData, {
143
- delimiter: ",",
144
- quote: true,
145
- quoted_string: true,
146
- header: false
147
- }).trim();
148
- };
149
76
  var EventSchema = zod.z.object({
150
77
  eventType: zod.z.string().min(1, "event type required"),
151
78
  payload: zod.z.record(zod.z.string(), zod.z.any()).optional(),
@@ -314,6 +241,59 @@ var FeedbackParamsSchema = zod.z.object({
314
241
  predictionUuid: zod.z.string().min(1, "prediction uuid required"),
315
242
  value: zod.z.record(zod.z.string(), zod.z.any())
316
243
  });
244
+ var flattenNested = (obj) => {
245
+ const result = {};
246
+ for (const [key, value] of Object.entries(obj)) {
247
+ if (typeof value === "object" && !Array.isArray(value) && value !== null) {
248
+ for (const [nestedKey, nestedValue] of Object.entries(value)) {
249
+ if (Array.isArray(nestedValue)) {
250
+ result[`${key}_${nestedKey}`] = nestedValue.join(",");
251
+ } else if (typeof nestedValue === "object" && nestedValue !== null) {
252
+ for (const [subKey, subValue] of Object.entries(nestedValue)) {
253
+ result[`${nestedKey}_${subKey}`] = subValue;
254
+ }
255
+ } else {
256
+ result[`${key}_${nestedKey}`] = nestedValue;
257
+ }
258
+ }
259
+ } else if (Array.isArray(value)) {
260
+ result[key] = value.join(",");
261
+ } else {
262
+ result[key] = value;
263
+ }
264
+ }
265
+ return result;
266
+ };
267
+ var preFormatRow = (rowHeaders, row) => {
268
+ const flattenedRow = flattenNested(row);
269
+ return rowHeaders.map((header) => {
270
+ const value = flattenedRow[header];
271
+ if (value === null || value === void 0) {
272
+ return "";
273
+ }
274
+ if (typeof value === "object") {
275
+ return JSON.stringify(value);
276
+ }
277
+ return String(value);
278
+ });
279
+ };
280
+ var bodyToCSV = (data) => {
281
+ if (data.length === 0) {
282
+ throw new Error("data is empty");
283
+ }
284
+ const [row0] = data;
285
+ if (!row0) {
286
+ throw new Error("data is empty");
287
+ }
288
+ const rowHeaders = Object.keys(flattenNested(row0));
289
+ const csvData = [rowHeaders, ...data.map((row) => preFormatRow(rowHeaders, row))];
290
+ return sync.stringify(csvData, {
291
+ delimiter: ",",
292
+ quote: true,
293
+ quoted_string: true,
294
+ header: false
295
+ }).trim();
296
+ };
317
297
 
318
298
  // src/client.ts
319
299
  var hostDefault = "https://app.usealbatross.ai/api";
@@ -395,9 +375,7 @@ var Client = class _Client {
395
375
  static validateImageSize(base64Image) {
396
376
  const MAX_SIZE = 52428800;
397
377
  if (base64Image.length > MAX_SIZE) {
398
- throw new Error(
399
- `image size (${base64Image.length} bytes) exceeds maximum (${MAX_SIZE} bytes)`
400
- );
378
+ throw new Error(`image size (${base64Image.length} bytes) exceeds maximum (${MAX_SIZE} bytes)`);
401
379
  }
402
380
  }
403
381
  /**
@@ -722,12 +700,7 @@ var Client = class _Client {
722
700
  * });
723
701
  * ```
724
702
  */
725
- catalogAdd = async ({
726
- entity,
727
- data,
728
- mainUnit,
729
- formatData
730
- }) => {
703
+ catalogAdd = async ({ entity, data, mainUnit, formatData }) => {
731
704
  CatalogAddPropsSchema.parse({ entity, data, mainUnit, formatData });
732
705
  const formattedData = formatData === void 0 || formatData === true ? data.map(flattenNested) : data;
733
706
  return this.makeRequest({
@@ -763,11 +736,7 @@ var Client = class _Client {
763
736
  * });
764
737
  * ```
765
738
  */
766
- catalogCSVAdd = async ({
767
- entity,
768
- data,
769
- mainUnit
770
- }) => {
739
+ catalogCSVAdd = async ({ entity, data, mainUnit }) => {
771
740
  const queryParams = {
772
741
  entity,
773
742
  mainUnit