@rushdb/javascript-sdk 2.2.1 → 2.3.1

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
@@ -66,8 +66,8 @@ await db.records.create({
66
66
  session_id: 'sess-001',
67
67
  action: 'summarized',
68
68
  topic: 'Q4 results',
69
- output: summaryText,
70
- },
69
+ output: summaryText
70
+ }
71
71
  })
72
72
 
73
73
  // 3. Recall by meaning, scoped by graph
@@ -76,7 +76,7 @@ const memories = await db.ai.search({
76
76
  propertyName: 'output',
77
77
  query: 'what did we decide about Q4?',
78
78
  where: { agent_id: 'agent-42' },
79
- limit: 10,
79
+ limit: 10
80
80
  })
81
81
  ```
82
82
 
@@ -90,13 +90,17 @@ await db.records.importJson({
90
90
  label: 'COMPANY',
91
91
  payload: {
92
92
  name: 'Acme Corp',
93
- DEPARTMENT: [{
94
- name: 'Engineering',
95
- EMPLOYEE: [{
96
- name: 'Alice',
97
- role: 'Staff Engineer',
98
- }]
99
- }]
93
+ DEPARTMENT: [
94
+ {
95
+ name: 'Engineering',
96
+ EMPLOYEE: [
97
+ {
98
+ name: 'Alice',
99
+ role: 'Staff Engineer'
100
+ }
101
+ ]
102
+ }
103
+ ]
100
104
  }
101
105
  })
102
106
 
@@ -105,8 +109,8 @@ const engineers = await db.records.find({
105
109
  labels: ['EMPLOYEE'],
106
110
  where: {
107
111
  role: { $contains: 'Engineer' },
108
- DEPARTMENT: { COMPANY: { name: 'Acme Corp' } },
109
- },
112
+ DEPARTMENT: { COMPANY: { name: 'Acme Corp' } }
113
+ }
110
114
  })
111
115
 
112
116
  // Constrain by relationship type and direction
@@ -115,44 +119,56 @@ const authoredPosts = await db.records.find({
115
119
  where: {
116
120
  POST: {
117
121
  $relation: { type: 'AUTHORED', direction: 'out' },
118
- title: { $contains: 'graph' },
119
- },
122
+ title: { $contains: 'graph' }
123
+ }
120
124
  },
121
- limit: 10,
125
+ limit: 10
122
126
  })
123
127
 
124
128
  // Manage relationships explicitly
125
129
  const company = await db.records.findUniq({
126
130
  labels: ['COMPANY'],
127
- where: { name: 'Acme Corp' },
131
+ where: { name: 'Acme Corp' }
128
132
  })
129
133
  await company.attach(engineers, { type: 'EMPLOYS' })
130
134
  ```
131
135
 
132
136
  ---
133
137
 
134
- ## Unified query API
138
+ ## Query API
135
139
 
136
- One JSON structure works for records, labels, properties, relationships, aggregations, and vector search:
140
+ One JSON structure works for record queries, aggregations, and vector search:
137
141
 
138
142
  ```typescript
139
143
  const result = await db.records.find({
140
144
  labels: ['TRANSACTION'],
141
145
  where: {
142
146
  status: 'posted',
143
- amount: { $gte: 100 },
147
+ amount: { $gte: 100 }
144
148
  },
145
149
  select: {
146
- total: { $sum: '$record.amount' },
150
+ total: { $sum: '$record.amount' }
147
151
  },
148
152
  groupBy: ['$record.category'],
149
153
  // Legacy: The aggregate clause is deprecated and should only be used for vector similarity until select supports it.
150
154
  orderBy: { amount: 'desc' },
151
- limit: 50,
155
+ limit: 50
152
156
  })
153
157
  ```
154
158
 
155
- The same shape works with `db.labels.find()`, `db.properties.find()`, and `db.relationships.find()` — learn once, works everywhere.
159
+ `where` is resource-local:
160
+
161
+ - `db.records.find().where` filters Records.
162
+ - `db.labels.find().where` and `db.properties.find().where` filter Records before returning matching labels/properties.
163
+ - `db.relationships.find().where` filters relationship edges. Use `source` and `target` for endpoint Record predicates.
164
+
165
+ ```typescript
166
+ const relationships = await db.relationships.find({
167
+ source: { labels: ['USER'], where: { status: 'active' } },
168
+ target: { labels: ['ORDER'] },
169
+ where: { type: 'ORDERED', confidence: { $gte: 0.8 } }
170
+ })
171
+ ```
156
172
 
157
173
  ---
158
174
 
@@ -164,11 +180,12 @@ import RushDB from '@rushdb/javascript-sdk'
164
180
  const db = new RushDB('RUSHDB_API_KEY', {
165
181
  // Override for self-hosted or staging
166
182
  url: 'http://your-rushdb-server.com/api/v1',
167
- timeout: 30000,
183
+ timeout: 30000
168
184
  })
169
185
  ```
170
186
 
171
187
  Key options:
188
+
172
189
  - `url` — full API URL (default: `https://api.rushdb.com/api/v1`)
173
190
  - `host`, `port`, `protocol` — alternative to `url`
174
191
  - `timeout` — request timeout in ms (default: 10000)
package/dist/api/api.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { HttpClient } from '../network/HttpClient.js';
2
2
  import type { DBRecordCreationOptions, DBRecordTarget, Relation, RelationDetachOptions, RelationDirection, RelationOptions, RelationTarget } from '../sdk/record.js';
3
3
  import { DBRecordInstance, DBRecordsArrayInstance } from '../sdk/record.js';
4
4
  import type { SDKConfig } from '../sdk/types.js';
5
- import type { FlatObject, InferSchemaTypesWrite, MaybeArray, OrderDirection, Property, PropertyDraft, PropertyValuesData, Schema, SearchQuery, Where } from '../types/index.js';
5
+ import type { FlatObject, InferSchemaTypesWrite, MaybeArray, OrderDirection, Property, PropertyDraft, PropertyValuesData, Schema, RelationshipSearchQuery, SearchQuery, Where } from '../types/index.js';
6
6
  import type { ApiResponse } from './types.js';
7
7
  import type { CreateEmbeddingIndexParams, DeleteRelationshipPatternOptions, EmbeddingIndex, EmbeddingIndexStats, RelationshipPatternListResponse, SemanticSearchParams, UpsertEmbeddingVectorsParams, UpsertEmbeddingVectorsResult, VectorEntry } from './types.js';
8
8
  import { createFetcher } from '../network/index.js';
@@ -309,6 +309,7 @@ export declare class RestAPI {
309
309
  };
310
310
  type?: string;
311
311
  direction?: RelationDirection;
312
+ properties?: Record<string, unknown>;
312
313
  manyToMany?: boolean;
313
314
  }, transaction?: Transaction | string) => Promise<ApiResponse<{
314
315
  message: string;
@@ -339,7 +340,7 @@ export declare class RestAPI {
339
340
  * @param transaction - Optional transaction for atomic operations
340
341
  * @returns Promise with the API response containing matched relations
341
342
  */
342
- find: <S extends Schema = any>(searchQuery: SearchQuery<S>, transaction?: Transaction | string) => Promise<ApiResponse<Relation[]>>;
343
+ find: <S extends Schema = any>(searchQuery?: RelationshipSearchQuery<S>, transaction?: Transaction | string) => Promise<ApiResponse<Relation[]>>;
343
344
  };
344
345
  /**
345
346
  * API methods for managing properties in the database
package/dist/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var Re=Object.create;var $=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,we=Object.prototype.hasOwnProperty;var Ie=(i,e)=>{for(var t in e)$(i,t,{get:e[t],enumerable:!0})},ae=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of be(e))!we.call(i,r)&&r!==t&&$(i,r,{get:()=>e[r],enumerable:!(s=Te(e,r))||s.enumerable});return i};var oe=(i,e,t)=>(t=i!=null?Re(De(i)):{},ae(e||!i||!i.__esModule?$(t,"default",{value:i,enumerable:!0}):t,i)),xe=i=>ae($({},"__esModule",{value:!0}),i);var Me={};Ie(Me,{DBRecordInstance:()=>S,DBRecordsArrayInstance:()=>I,EmptyTargetError:()=>O,HttpClient:()=>E,HttpClientResponse:()=>V,Model:()=>se,NonUniqueResultError:()=>v,RestAPI:()=>U,RushDB:()=>u,Transaction:()=>q,UniquenessError:()=>_,default:()=>Le,idToDate:()=>te,idToTimestamp:()=>K,initSDK:()=>re,mergeDefaultsWithPayload:()=>F,parseConfig:()=>X,pickUniqFieldsFromRecord:()=>N,pickUniqFieldsFromRecords:()=>Z,validateInteger:()=>ee});module.exports=xe(Me);var E=class i{makeRequest(e,{headers:t,method:s,protocol:r,requestData:n,timeout:a}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(i.TIMEOUT_ERROR_CODE);return e.code=i.TIMEOUT_ERROR_CODE,e}};E.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];E.TIMEOUT_ERROR_CODE="ETIMEDOUT";var H=class{constructor(e,t){this._statusCode=e,this._headers=t}getStatusCode(){return this._statusCode}getHeaders(){return this._headers}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}},V=class{constructor(e){this._res=e}getStatusCode(){throw new Error("getStatusCode not implemented.")}getHeaders(){throw new Error("getHeaders not implemented.")}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}};var J=oe(require("http"),1),Y=oe(require("https"),1);var Pe="string",Oe="datetime",Ee="boolean",Ae="number",_e="null",ie=[Pe,Oe,Ee,Ae,_e];var de=J.default||J,pe=Y.default||Y,qe=new de.Agent({keepAlive:!0}),Be=new pe.Agent({keepAlive:!0}),W=class extends E{constructor(e){super(),this._agent=e}makeRequest(e,{headers:t,method:s,protocol:r,requestData:n,timeout:a}){let o=new URL(e),c=r==="http"||o.protocol==="http:",d=this._agent;return d||(d=c?qe:Be),new Promise((p,l)=>{let h=(c?de:pe).request({agent:d,ciphers:"DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:!MD5",headers:t,host:o.hostname,method:s,path:o.pathname+o.search,port:o.port});h.setTimeout(a!=null?a:8e4,()=>{h.destroy(E.makeTimeoutError())}),h.on("response",y=>{p(new Q(y))}),h.on("error",y=>{l(y)}),h.once("socket",y=>{let T=n?JSON.stringify(n):"";y.connecting?y.once(c?"connect":"secureConnect",()=>{h.write(T),h.end()}):(h.write(T),h.end())})})}},Q=class extends H{constructor(e){super(e.statusCode,e.headers||{}),this._res=e}getRawResponse(){return this._res}toStream(e){return this._res.once("end",()=>e()),this._res}toJSON(){return new Promise((e,t)=>{let s="";this._res.setEncoding("utf8"),this._res.on("data",r=>{s+=r}),this._res.once("end",()=>{try{e(JSON.parse(s))}catch(r){t(r)}})})}};var R=i=>typeof i=="object"&&Array.isArray(i)&&i!==null,b=i=>i!==null&&Object.prototype.toString.call(i)==="[object Object]",k=i=>b(i)&&Object.keys(i).length===0,le=i=>typeof i=="number"||typeof i=="string"||typeof i=="boolean"||i===null;function Ce(i,e){let t={...i};return e.forEach(s=>{delete t[s]}),t}var L=i=>b(i)?Ce(i,["__label","__id","__proptypes"]):i,C=i=>R(i)?i.map(C):b(i)?Object.fromEntries(Object.entries(i).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,C(t)])):i,z=i=>R(i)?i.every(le):le(i),M=i=>b(i)&&Object.values(i).every(z),A=i=>typeof i=="string",w=i=>{if(typeof i=="string"){if(i.toLowerCase()==="true")return!0;if(i.toLowerCase()==="false")return!1}return R(i)&&i.length===0||b(i)&&Object.keys(i).length===0?!1:!!i};var G=["httpClient","timeout","host","port","protocol","url","logger","options"];var _=class i extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,i.prototype)}},O=class i extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,i.prototype)}},v=class i extends Error{constructor(e,t){super(`Expected a unique result but found ${e} matches for the provided SearchQuery: ${JSON.stringify(t)}. Ensure your search parameters uniquely identify a single result.`),this.name="NonUniqueResultError",Object.setPrototypeOf(this,i.prototype)}};var F=async(i,e)=>{let t=Object.entries(i).map(async([n,a])=>a.default&&typeof a.default<"u"&&typeof e[n]>"u"?{key:n,value:typeof a.default=="function"?await a.default():a.default}:{key:n,value:void 0});return{...(await Promise.all(t)).reduce((n,{key:a,value:o})=>(o!==void 0&&(n[a]=o),n),{}),...e}},N=(i,e)=>Object.entries(e).filter(([t])=>{var s;return(s=i[t])==null?void 0:s.unique}).reduce((t,[s,r])=>(s in i&&(t[s]=r),t),{}),Z=(i,e,t)=>{let s={},r=Object.entries(e).filter(([,n])=>n.unique).reduce((n,[a])=>(n[a]=!0,n),{});return i.forEach(n=>{Object.entries(n).forEach(([a,o])=>{if(a in r)if(s[a]){if(s[a].includes(o))throw new _(t,{[a]:o});s[a]=[...s[a],o]}else s[a]=[o]})}),s},X=i=>{if(!i)return{};if(!b(i))throw new Error("Config must be an object");if(Object.keys(i).filter(t=>!G.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${G.join(", ")}`);return i};function ee(i,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${i} must be an integer`)}return e}function K(i){let e=i.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function te(i){return new Date(K(i))}var S=class{constructor(e={}){this.data=e}get exists(){return w(this.data.__id)&&w(this.data.__label)}get id(){if(!w(this.data.__id))throw new Error("DBRecordInstance: Unable to access 'id'. The Record's `data.__id` is missing or incorrect.");return this.data.__id}get label(){if(!w(this.data.__label))throw new Error("DBRecordInstance: Unable to access 'label'. The Record's `data.__label` is missing or incorrect.");return this.data.__label}get proptypes(){if(!w(this.data.__proptypes))throw new Error("DBRecordInstance: Unable to access 'proptypes'. The Record's `data.__proptypes` is missing or incorrect.");return this.data.__proptypes}get date(){try{return te(this.id)}catch{throw new Error("DBRecordInstance: Unable to access 'date'. The Record's `data.__id` is missing or incorrect.")}}get timestamp(){try{return K(this.id)}catch{throw new Error("DBRecordInstance: Unable to access 'timestamp'. The Record's `data.__id` is missing or incorrect.")}}async delete(e){if(!w(this.data))throw new Error("DBRecordInstance: Unable to delete Record. The Record data is undefined.");return await u.getInstance().records.deleteById(this.id,e)}async update(e,t){if(!w(this.data))throw new Error("DBRecordInstance: Unable to update Record. The Record data is undefined.");return u.getInstance().records.update({label:this.label,target:this.id,data:e},t)}async set(e,t){if(!w(this.data))throw new Error("DBRecordInstance: Unable to set. The Record data is undefined.");return u.getInstance().records.set({label:this.label,target:this.id,data:e},t)}async attach(e,t,s){if(!w(this.data))throw new Error("DBRecordInstance: Unable to attach Record. The Record data is undefined.");return u.getInstance().records.attach({source:this.id,target:e,options:t},s)}async detach(e,t,s){if(!w(this.data))throw new Error("DBRecordInstance: Unable to detach Record. The Record data is undefined.");return u.getInstance().records.detach({source:this.id,target:e,options:t},s)}},I=class{constructor(e=[],t=0,s){this.data=e,this.total=t,this.searchQuery=s}async deleteAll(e){let t=this.data.map(r=>r.id);return t.length?await u.getInstance().records.deleteById(t,e):{success:!0}}async next(e){var o,c;if(!this.searchQuery)throw new Error("DBRecordsArrayInstance: Cannot paginate \u2014 no searchQuery was provided.");let t=(o=this.searchQuery.skip)!=null?o:0,s=(c=this.searchQuery.limit)!=null?c:100,r={...this.searchQuery,skip:t+s},a=await u.getInstance().records.find(r,void 0);return e!=null&&e.preserveData?(this.data=[...this.data,...a.data],this.total=a.total,this.searchQuery=r,this):a}exportCsv(){if(!this.data.length)return"";let e=new Set(["__id","__label","__proptypes"]),t=Object.keys(this.data[0].data).filter(n=>!e.has(n)),s=n=>{let a=n==null?"":String(n);return a.includes(",")||a.includes('"')||a.includes(`
1
+ "use strict";var Re=Object.create;var $=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,be=Object.prototype.hasOwnProperty;var Ie=(i,e)=>{for(var t in e)$(i,t,{get:e[t],enumerable:!0})},ae=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of we(e))!be.call(i,r)&&r!==t&&$(i,r,{get:()=>e[r],enumerable:!(s=Te(e,r))||s.enumerable});return i};var oe=(i,e,t)=>(t=i!=null?Re(De(i)):{},ae(e||!i||!i.__esModule?$(t,"default",{value:i,enumerable:!0}):t,i)),xe=i=>ae($({},"__esModule",{value:!0}),i);var Me={};Ie(Me,{DBRecordInstance:()=>S,DBRecordsArrayInstance:()=>I,EmptyTargetError:()=>O,HttpClient:()=>E,HttpClientResponse:()=>V,Model:()=>se,NonUniqueResultError:()=>v,RestAPI:()=>k,RushDB:()=>u,Transaction:()=>q,UniquenessError:()=>_,default:()=>Le,idToDate:()=>te,idToTimestamp:()=>Q,initSDK:()=>re,mergeDefaultsWithPayload:()=>F,parseConfig:()=>X,pickUniqFieldsFromRecord:()=>N,pickUniqFieldsFromRecords:()=>Z,validateInteger:()=>ee});module.exports=xe(Me);var E=class i{makeRequest(e,{headers:t,method:s,protocol:r,requestData:n,timeout:a}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(i.TIMEOUT_ERROR_CODE);return e.code=i.TIMEOUT_ERROR_CODE,e}};E.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];E.TIMEOUT_ERROR_CODE="ETIMEDOUT";var H=class{constructor(e,t){this._statusCode=e,this._headers=t}getStatusCode(){return this._statusCode}getHeaders(){return this._headers}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}},V=class{constructor(e){this._res=e}getStatusCode(){throw new Error("getStatusCode not implemented.")}getHeaders(){throw new Error("getHeaders not implemented.")}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}};var J=oe(require("http"),1),Y=oe(require("https"),1);var Pe="string",Oe="datetime",Ee="boolean",Ae="number",_e="null",ie=[Pe,Oe,Ee,Ae,_e];var de=J.default||J,pe=Y.default||Y,qe=new de.Agent({keepAlive:!0}),Be=new pe.Agent({keepAlive:!0}),W=class extends E{constructor(e){super(),this._agent=e}makeRequest(e,{headers:t,method:s,protocol:r,requestData:n,timeout:a}){let o=new URL(e),c=r==="http"||o.protocol==="http:",d=this._agent;return d||(d=c?qe:Be),new Promise((p,l)=>{let h=(c?de:pe).request({agent:d,ciphers:"DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:!MD5",headers:t,host:o.hostname,method:s,path:o.pathname+o.search,port:o.port});h.setTimeout(a!=null?a:8e4,()=>{h.destroy(E.makeTimeoutError())}),h.on("response",y=>{p(new K(y))}),h.on("error",y=>{l(y)}),h.once("socket",y=>{let T=n?JSON.stringify(n):"";y.connecting?y.once(c?"connect":"secureConnect",()=>{h.write(T),h.end()}):(h.write(T),h.end())})})}},K=class extends H{constructor(e){super(e.statusCode,e.headers||{}),this._res=e}getRawResponse(){return this._res}toStream(e){return this._res.once("end",()=>e()),this._res}toJSON(){return new Promise((e,t)=>{let s="";this._res.setEncoding("utf8"),this._res.on("data",r=>{s+=r}),this._res.once("end",()=>{try{e(JSON.parse(s))}catch(r){t(r)}})})}};var R=i=>typeof i=="object"&&Array.isArray(i)&&i!==null,w=i=>i!==null&&Object.prototype.toString.call(i)==="[object Object]",U=i=>w(i)&&Object.keys(i).length===0,le=i=>typeof i=="number"||typeof i=="string"||typeof i=="boolean"||i===null;function Ce(i,e){let t={...i};return e.forEach(s=>{delete t[s]}),t}var L=i=>w(i)?Ce(i,["__label","__id","__proptypes"]):i,C=i=>R(i)?i.map(C):w(i)?Object.fromEntries(Object.entries(i).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,C(t)])):i,z=i=>R(i)?i.every(le):le(i),M=i=>w(i)&&Object.values(i).every(z),A=i=>typeof i=="string",b=i=>{if(typeof i=="string"){if(i.toLowerCase()==="true")return!0;if(i.toLowerCase()==="false")return!1}return R(i)&&i.length===0||w(i)&&Object.keys(i).length===0?!1:!!i};var G=["httpClient","timeout","host","port","protocol","url","logger","options"];var _=class i extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,i.prototype)}},O=class i extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,i.prototype)}},v=class i extends Error{constructor(e,t){super(`Expected a unique result but found ${e} matches for the provided SearchQuery: ${JSON.stringify(t)}. Ensure your search parameters uniquely identify a single result.`),this.name="NonUniqueResultError",Object.setPrototypeOf(this,i.prototype)}};var F=async(i,e)=>{let t=Object.entries(i).map(async([n,a])=>a.default&&typeof a.default<"u"&&typeof e[n]>"u"?{key:n,value:typeof a.default=="function"?await a.default():a.default}:{key:n,value:void 0});return{...(await Promise.all(t)).reduce((n,{key:a,value:o})=>(o!==void 0&&(n[a]=o),n),{}),...e}},N=(i,e)=>Object.entries(e).filter(([t])=>{var s;return(s=i[t])==null?void 0:s.unique}).reduce((t,[s,r])=>(s in i&&(t[s]=r),t),{}),Z=(i,e,t)=>{let s={},r=Object.entries(e).filter(([,n])=>n.unique).reduce((n,[a])=>(n[a]=!0,n),{});return i.forEach(n=>{Object.entries(n).forEach(([a,o])=>{if(a in r)if(s[a]){if(s[a].includes(o))throw new _(t,{[a]:o});s[a]=[...s[a],o]}else s[a]=[o]})}),s},X=i=>{if(!i)return{};if(!w(i))throw new Error("Config must be an object");if(Object.keys(i).filter(t=>!G.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${G.join(", ")}`);return i};function ee(i,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${i} must be an integer`)}return e}function Q(i){let e=i.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function te(i){return new Date(Q(i))}var S=class{constructor(e={}){this.data=e}get exists(){return b(this.data.__id)&&b(this.data.__label)}get id(){if(!b(this.data.__id))throw new Error("DBRecordInstance: Unable to access 'id'. The Record's `data.__id` is missing or incorrect.");return this.data.__id}get label(){if(!b(this.data.__label))throw new Error("DBRecordInstance: Unable to access 'label'. The Record's `data.__label` is missing or incorrect.");return this.data.__label}get proptypes(){if(!b(this.data.__proptypes))throw new Error("DBRecordInstance: Unable to access 'proptypes'. The Record's `data.__proptypes` is missing or incorrect.");return this.data.__proptypes}get date(){try{return te(this.id)}catch{throw new Error("DBRecordInstance: Unable to access 'date'. The Record's `data.__id` is missing or incorrect.")}}get timestamp(){try{return Q(this.id)}catch{throw new Error("DBRecordInstance: Unable to access 'timestamp'. The Record's `data.__id` is missing or incorrect.")}}async delete(e){if(!b(this.data))throw new Error("DBRecordInstance: Unable to delete Record. The Record data is undefined.");return await u.getInstance().records.deleteById(this.id,e)}async update(e,t){if(!b(this.data))throw new Error("DBRecordInstance: Unable to update Record. The Record data is undefined.");return u.getInstance().records.update({label:this.label,target:this.id,data:e},t)}async set(e,t){if(!b(this.data))throw new Error("DBRecordInstance: Unable to set. The Record data is undefined.");return u.getInstance().records.set({label:this.label,target:this.id,data:e},t)}async attach(e,t,s){if(!b(this.data))throw new Error("DBRecordInstance: Unable to attach Record. The Record data is undefined.");return u.getInstance().records.attach({source:this.id,target:e,options:t},s)}async detach(e,t,s){if(!b(this.data))throw new Error("DBRecordInstance: Unable to detach Record. The Record data is undefined.");return u.getInstance().records.detach({source:this.id,target:e,options:t},s)}},I=class{constructor(e=[],t=0,s){this.data=e,this.total=t,this.searchQuery=s}async deleteAll(e){let t=this.data.map(r=>r.id);return t.length?await u.getInstance().records.deleteById(t,e):{success:!0}}async next(e){var o,c;if(!this.searchQuery)throw new Error("DBRecordsArrayInstance: Cannot paginate \u2014 no searchQuery was provided.");let t=(o=this.searchQuery.skip)!=null?o:0,s=(c=this.searchQuery.limit)!=null?c:100,r={...this.searchQuery,skip:t+s},a=await u.getInstance().records.find(r,void 0);return e!=null&&e.preserveData?(this.data=[...this.data,...a.data],this.total=a.total,this.searchQuery=r,this):a}exportCsv(){if(!this.data.length)return"";let e=new Set(["__id","__label","__proptypes"]),t=Object.keys(this.data[0].data).filter(n=>!e.has(n)),s=n=>{let a=n==null?"":String(n);return a.includes(",")||a.includes('"')||a.includes(`
2
2
  `)?`"${a.replace(/"/g,'""')}"`:a},r=this.data.map(n=>t.map(a=>s(n.data[a])).join(","));return[t.join(","),...r].join(`
3
- `)}async setProperties(e,t){let r=u.getInstance();for(let n=0;n<this.data.length;n+=100){let a=this.data.slice(n,n+100);await Promise.all(a.map(o=>r.records.update({target:o.id,label:o.data.__label,data:e},t)))}}};var je={"Content-Type":"application/json"},he=({httpClient:i,token:e,url:t})=>async(s,{headers:r,...n})=>{let a=await i.makeRequest(`${t}${s}`,{credentials:"omit",headers:Object.assign({...je,...r},typeof e<"u"?{Authorization:`Bearer ${e}`}:{}),...n});if(a.getStatusCode()>=200&&a.getStatusCode()<300)return await a.toJSON();throw new Error(`${a.getStatusCode()}`)};var q=class{constructor(e){this.id=e}async rollback(){return await u.getInstance().tx.rollback(this.id)}async commit(){return await u.getInstance().tx.commit(this.id)}};var ge="api.rushdb.com";var ye="https",ue="/api/v1";var f=i=>i?{"x-transaction-id":i}:void 0,ke=i=>A(i)||i instanceof q,m=i=>ke(i)?i instanceof q?i.id:i:void 0,me=i=>/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/.test(i),x=i=>{if(A(i)&&me(i))return i;if(i instanceof S&&i.data)return i.data.__id;if(b(i)&&"__id"in i&&me(i.__id))return i.__id},j=i=>!(!b(i)||b(i)&&"name"in i&&!A(i.name)||b(i)&&"type"in i&&(!A(i.type)||!ie.includes(i.type))||!("value"in i)||!z(i.value)||"metadata"in i&&!A(i.metadata)||"valueSeparator"in i&&!A(i.valueSeparator)),fe=i=>{let e=ye,t=ge,s=443,r=ue;if("url"in i){let a=new URL(i.url);e=a.protocol.replace(":",""),t=a.hostname,s=parseInt(a.port||(e==="http"?"80":e==="https"?"443":""))}"host"in i&&"port"in i&&"protocol"in i&&(e=i.protocol.replace(":",""),t=i.host,s=i.port),r&&!r.startsWith("/")&&(r="/"+r);let n="";return e==="http"&&s===80||e==="https"&&s===443||(n=":"+s),`${e}://${t}${n}${r}`},g=(i=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let s=0;s<i;s++){let r=Math.floor(Math.random()*e.length);t+=e[r]}return t};var U=class{constructor(e,t){this.records={attach:async({source:e,target:t,options:s},r)=>{var l,h;let n=m(r),o=`/relationships/${x(e)}`,c={headers:Object.assign({},f(n)),method:"POST",requestData:{targetIds:this._extractTargetIds(t,"Attach"),...(s==null?void 0:s.type)&&{type:s.type},...(s==null?void 0:s.direction)&&{direction:s.direction}}},d=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:d,path:o,...c});let p=await this.fetcher(o,c);return(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c,responseData:p.data}),p},detach:async({source:e,target:t,options:s},r)=>{var l,h;let n=m(r),o=`/relationships/${x(e)}`,c={headers:Object.assign({},f(n)),method:"PUT",requestData:{targetIds:this._extractTargetIds(t,"Detach"),...(s==null?void 0:s.typeOrTypes)&&{typeOrTypes:s.typeOrTypes},...(s==null?void 0:s.direction)&&{direction:s.direction}}},d=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:d,path:o,...c});let p=await this.fetcher(o,c);return(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c,responseData:p.data}),p},create:async({label:e,data:t,options:s,vectors:r},n)=>{var h,y;let a=m(n),o="/records",c={headers:Object.assign({},f(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",p=L(C(t));if(R(p)&&p.every(j))c.requestData={label:e,properties:p,options:s,...(r==null?void 0:r.length)&&{vectors:r}};else if(M(p))c.requestData={label:e,data:p,options:s,...(r==null?void 0:r.length)&&{vectors:r}};else throw b(p)?new Error("Provided data is not a flat object. Consider using the `importJson` method for nested objects or arrays of nested objects, or use `createMany` for arrays of flat objects."):new Error("Provided data is not valid.");(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c});let l=await this.fetcher(o,c);return(y=this.logger)==null||y.call(this,{requestId:d,path:o,...c,responseData:l.data}),l!=null&&l.success&&(l!=null&&l.data)?new S(l.data):new S},createMany:async(e,t)=>{var l,h,y,T;let s=R(e.data)?e.data:[e.data];if(!s.every(D=>M(D)))throw new Error("records.createMany supports only flat records (no nested objects/arrays). Use records.importJson for nested JSON.");if(e.vectors&&e.vectors.length>s.length)throw new Error(`records.createMany: vectors length (${e.vectors.length}) exceeds the number of data rows (${s.length}).`);let n=(l=e.vectors)!=null&&l.length?s.map((D,P)=>{var ne;return(ne=e.vectors[P])!=null&&ne.length?{...D,$vectors:e.vectors[P]}:D}):s,a=m(t),o="/records/import/json",c={headers:Object.assign({},f(a)),method:"POST",requestData:{label:e.label,data:n,options:e.options}},d=typeof this.logger=="function"?g():"";(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c});let p=await this.fetcher(o,c);if((y=this.logger)==null||y.call(this,{requestId:d,path:o,...c,responseData:p.data}),p!=null&&p.success&&(p!=null&&p.data)){let D=R(p.data)?(T=p.data)==null?void 0:T.map(P=>new S(P)):[];return new I(D,p.total)}return new I([])},importJson:async(e,t)=>{var h,y,T;let{data:s,options:r}=e,{label:n}=e,a=s;if(!n)if(b(s)&&!R(s)){let D=L(s),P=Object.keys(D);if(P.length===1)n=P[0],a=D[n];else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }")}else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }");let o=m(t),c="/records/import/json",d={headers:Object.assign({},f(o)),method:"POST",requestData:{label:n,data:a,options:r}},p=typeof this.logger=="function"?g():"";(h=this.logger)==null||h.call(this,{requestId:p,path:c,...d});let l=await this.fetcher(c,d);if((y=this.logger)==null||y.call(this,{requestId:p,path:c,...d,responseData:l.data}),l!=null&&l.success&&(l!=null&&l.data)){let D=R(l.data)?(T=l.data)==null?void 0:T.map(P=>new S(P)):[];return new I(D,l.total)}return new I([])},importCsv:async(e,t)=>{var c,d;let s=m(t),r="/records/import/csv",n={headers:Object.assign({},f(s)),method:"POST",requestData:e},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);if((d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o!=null&&o.success&&(o!=null&&o.data)){let p=R(o.data)?o.data.map(l=>new S(l)):[];return new I(p,o.total)}return new I([])},delete:async(e,t)=>{var c,d,p;if(k(e.where)&&!((c=this==null?void 0:this.options)!=null&&c.allowForceDelete))throw new O("You must specify criteria to delete records. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.");let s=m(t),r="/records/delete",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(p=this.logger)==null||p.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},deleteById:async(e,t)=>{var d,p;let s=m(t),r=R(e),n=r?"/records/delete":`/records/${e}`,a={headers:Object.assign({},f(s)),method:r?"POST":"DELETE",requestData:r?{limit:1e3,where:{$id:{$in:e}}}:void 0},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:n,...a});let c=await this.fetcher(n,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:n,...a,responseData:c.data}),c},export:async(e,t)=>{var c,d;let s=m(t),r="/records/export/csv",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},find:async(e,t)=>{var l,h;let{id:s,...r}=e,n=m(t),a=s?`/records/${s}/search`:"/records/search",o={headers:Object.assign({},f(n)),method:"POST",requestData:r!=null?r:{}},c=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:c,path:a,...o});let d=await this.fetcher(a,o);(h=this.logger)==null||h.call(this,{requestId:c,path:a,...o,responseData:d.data});let p=d.data.map(y=>new S(y));return new I(p,d.total,e)},findById:async(e,t)=>{var c,d;let s=m(t),r=R(e)?"/records":`/records/${e}`,n={headers:Object.assign({},f(s)),method:R(e)?"POST":"GET",requestData:R(e)?{ids:e}:void 0},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);if((d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),R(e)){let p=o.data.map(l=>new S(l));return new I(p,o.total)}else return new S(o.data)},findOne:async(e,t)=>{var d,p;let s=m(t),r="/records/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:{...e,limit:1,skip:0}},a=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);(p=this.logger)==null||p.call(this,{requestId:a,path:r,...n,responseData:o.data});let[c]=o.data;return new S(c)},findUniq:async(e,t)=>{var d,p;let s=m(t),r="/records/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:{...e,limit:1,skip:0}},a=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);if((p=this.logger)==null||p.call(this,{requestId:a,path:r,...n,responseData:o.data}),typeof o.total<"u"&&o.total>1)throw new v(o.total,e);let[c]=o.data;return new S(c)},set:async({target:e,label:t,data:s,options:r,vectors:n},a)=>{var T,D;let o=m(a),d=`/records/${x(e)}`,p={headers:Object.assign({},f(o)),method:"PUT",requestData:{}},l=typeof this.logger=="function"?g():"",h=L(C(s));if(R(h)&&h.every(j))p.requestData={label:t,properties:h,...(n==null?void 0:n.length)&&{vectors:n}};else if(M(h))p.requestData={label:t,data:h,options:r,...(n==null?void 0:n.length)&&{vectors:n}};else throw b(h)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(T=this.logger)==null||T.call(this,{requestId:l,path:d,...p});let y=await this.fetcher(d,p);return(D=this.logger)==null||D.call(this,{requestId:l,path:d,...p,responseData:y.data}),y!=null&&y.success&&(y!=null&&y.data)?new S(y.data):new S},update:async({target:e,label:t,data:s,options:r},n)=>{var y,T;let a=m(n),c=`/records/${x(e)}`,d={headers:Object.assign({},f(a)),method:"PATCH",requestData:{}},p=typeof this.logger=="function"?g():"",l=L(C(s));if(R(l)&&l.every(j))d.requestData={label:t,properties:l};else if(M(l))d.requestData={label:t,data:l,options:r};else throw b(l)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(y=this.logger)==null||y.call(this,{requestId:p,path:c,...d});let h=await this.fetcher(c,d);return(T=this.logger)==null||T.call(this,{requestId:p,path:c,...d,responseData:h.data}),h!=null&&h.success&&(h!=null&&h.data)?new S(h.data):new S},upsert:async({label:e,data:t,options:s,vectors:r},n)=>{var y,T,D;let a=m(n),o="/records",c={headers:Object.assign({},f(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",p=L(C(t)),l={...s,mergeBy:(y=s==null?void 0:s.mergeBy)!=null?y:[]};if(R(p)&&p.every(j))c.requestData={label:e,properties:p,options:l,...(r==null?void 0:r.length)&&{vectors:r}};else if(M(p))c.requestData={label:e,data:p,options:l,...(r==null?void 0:r.length)&&{vectors:r}};else throw b(p)?new Error("Provided data is not a flat object. Upsert supports flat objects or property drafts array."):new Error("Provided data is not valid.");(T=this.logger)==null||T.call(this,{requestId:d,path:o,...c});let h=await this.fetcher(o,c);return(D=this.logger)==null||D.call(this,{requestId:d,path:o,...c,responseData:h.data}),h!=null&&h.success&&(h!=null&&h.data)?new S(h.data):new S}};this.relationships={patterns:{list:async()=>{var n,a;let e="/relationships/patterns",t={method:"GET",headers:{}},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r},analyze:async()=>{var n,a;let e="/relationships/patterns/analyze",t={method:"POST",headers:{},requestData:{}},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r},approve:async e=>{var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/approve`,s={method:"POST",headers:{},requestData:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n},ignore:async e=>{var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/ignore`,s={method:"POST",headers:{},requestData:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n},delete:async(e,t)=>{var c,d;let s=t!=null&&t.deleteExisting?"?deleteExisting=true":"",r=`/relationships/patterns/${encodeURIComponent(e)}${s}`,n={method:"DELETE",headers:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o}},createMany:async(e,t)=>{var c,d;let s=m(t),r="/relationships/create-many",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},deleteMany:async(e,t)=>{var c,d;let s=m(t),r="/relationships/delete-many",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},find:async(e,t)=>{var p,l;let s=m(t),r=new URLSearchParams;(e==null?void 0:e.limit)!==void 0&&r.append("limit",e.limit.toString()),(e==null?void 0:e.skip)!==void 0&&r.append("skip",e.skip.toString());let a=`/relationships/search${r.toString()?"?"+r.toString():""}`,o={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},c=typeof this.logger=="function"?g():"";(p=this.logger)==null||p.call(this,{requestId:c,path:a,...o});let d=await this.fetcher(a,o);return(l=this.logger)==null||l.call(this,{requestId:c,path:a,...o,responseData:d.data}),d}};this.properties={delete:async(e,t)=>{var c,d;let s=m(t),r=`/properties/${e}`,n={headers:Object.assign({},f(s)),method:"DELETE"},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},find:async(e,t)=>{var c,d;let s=m(t),r="/properties/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},findById:async(e,t)=>{var c,d;let s=m(t),r=`/properties/${e}`,n={headers:Object.assign({},f(s)),method:"GET"},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},values:async(e,t,s)=>{var d,p;let r=m(s),n=`/properties/${e}/values`,a={headers:Object.assign({},f(r)),method:"POST",requestData:t!=null?t:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:n,...a});let c=await this.fetcher(n,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:n,...a,responseData:c.data}),c}};this.labels={find:async(e,t)=>{var c,d;let s=m(t),r="/labels/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o}};this.tx={begin:async e=>{var a,o;let t="/tx",s={method:"POST",requestData:b(e)&&"ttl"in e?e:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),new q(n.data.id)},commit:async e=>{var o,c;let s=`/tx/${m(e)}/commit`,r={method:"POST",requestData:{}},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),a},get:async e=>{var o,c;let s=`/tx/${m(e)}`,r={method:"GET"},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),new q(a.data.id)},rollback:async e=>{var o,c;let s=`/tx/${m(e)}/rollback`,r={method:"POST",requestData:{}},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),a}};this.settings={get:async()=>{var n,a;let e="/sdk/settings",t={method:"GET"},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r}};this.query={raw:async({query:e,params:t},s)=>{var d,p;let r=m(s),n="/query/raw",a={headers:Object.assign({},f(r)),method:"POST",requestData:{query:e,params:t}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:n,...a});let c=await this.fetcher(n,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:n,...a,responseData:c.data}),c}};this.ai={getOntology:async(e,t)=>{var c,d;let s=m(t),r="/ai/ontology",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},getOntologyMarkdown:async(e,t)=>{var c,d;let s=m(t),r="/ai/ontology/md",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},indexes:{find:async()=>{var n,a;let e="/ai/indexes",t={method:"GET",headers:{}},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r},create:async e=>{var d,p;let t="/ai/indexes",{external:s,...r}=e,n=s===!0?{...r,sourceType:"external"}:r,a={method:"POST",headers:{},requestData:n},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:t,...a});let c=await this.fetcher(t,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:t,...a,responseData:c.data}),c},upsertVectors:async(e,t)=>{var o,c;let s=`/ai/indexes/${e}/vectors/upsert`,r={method:"POST",headers:{},requestData:t},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),a},delete:async e=>{var a,o;let t=`/ai/indexes/${e}`,s={method:"DELETE",headers:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n},stats:async e=>{var a,o;let t=`/ai/indexes/${e}/stats`,s={method:"GET",headers:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n}},search:async e=>{var o,c,d,p;let t="/ai/search",s={method:"POST",headers:{},requestData:e},r=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);(c=this.logger)==null||c.call(this,{requestId:r,path:t,...s,responseData:n.data});let a=((d=n.data)!=null?d:[]).map(l=>new S(l));return new I(a,(p=n.total)!=null?p:0)}};if(this.fetcher=null,t!=null&&t.httpClient){let s=fe(t);this.fetcher=he({httpClient:t.httpClient,token:e,url:s})}t!=null&&t.options&&(this.options=t==null?void 0:t.options),t!=null&&t.logger&&(this.logger=t==null?void 0:t.logger)}_extractTargetIds(e,t){var s;if(e instanceof S){let r=x(e);if(!r)throw new O(`${t} error: Target id is empty`);return[r]}if(R(e)&&e.every(r=>r instanceof S)){let r=e.map(x).filter(w);if(!r.length)throw new O(`${t} error: Target ids are empty`);return r}if(e instanceof I){let r=(s=e.data)==null?void 0:s.map(x).filter(w);if(!(r!=null&&r.length))throw new O(`${t} error: Target ids are empty`);return r}if(b(e)&&"__id"in e)return[e.__id];if(R(e)&&e.every(r=>b(r)&&"__id"in r)){let r=e.map(x).filter(w);if(!r.length)throw new O(`${t} error: Target ids are empty`);return r}return R(e)?e:A(e)?[e]:[]}};var Se,B=class B extends U{constructor(e,t){var n,a;let s=e!=null?e:typeof process<"u"?(n=process.env)==null?void 0:n.RUSHDB_API_KEY:void 0,r=X(t);super(s,{...r,httpClient:(a=r.httpClient)!=null?a:Se}),B.instance=this,this.initializeSync(s,r)}initializeSync(e,t){B.state={initialized:!0,debug:!1,timeout:ee("timeout",t==null?void 0:t.timeout,8e4),token:e}}static getInstance(){if(B.instance)return B.instance;throw new Error('RushDB not initialized. Please create a RushDB instance first: new RushDB("RUSHDB_API_KEY")')}static isInitialized(){return w(B.instance)}toDBRecordInstance(e){return new S(e)}};B.instance=null,B.state={initialized:!1,debug:!1,timeout:8e4};var u=B,re=i=>{Se=i};var se=class{constructor(e,t,s){this.label=e,this.schema=t,this.config=s!=null?s:{}}getLabel(){return this.label}async toDBRecordInstance(e){try{return u.getInstance().toDBRecordInstance(e)}catch{throw new Error("No RushDB instance was provided during model initialization.")}}async find(e,t){let s=e!=null?e:{};return u.getInstance().records.find({...s,labels:[this.label]},t)}async findOne(e,t){let s=e!=null?e:{};return u.getInstance().records.findOne({...s,labels:[this.label]},t)}async findById(e,t){return this.findOne({where:{$id:e}},t)}async findUniq(e,t){let s=e!=null?e:{};return u.getInstance().records.findUniq({...s,labels:[this.label]},t)}async create(e,t,s){var c,d;let r=await F(this.schema,e),n=N(this.schema,r),a=w(n),o=u.getInstance();if(a){let p=t!=null?t:await o.tx.begin(),l=await this.find({where:n},p),h=typeof t<"u";if(!((c=l==null?void 0:l.data)!=null&&c.length)){let T=await o.records.create({label:this.label,data:r},p);return h||await p.commit(),T}else switch((d=s==null?void 0:s.onConflict)!=null?d:"throw"){case"upsert":{let D=l.data[0],P=await o.records.set({target:D.id,label:this.label,data:r},p);return h||await p.commit(),P}case"skip":return h||await p.commit(),null;default:throw h||await p.commit(),new _(this.label,n)}}return await o.records.create({label:this.label,data:r},t)}async attach({source:e,target:t,options:s},r){return await u.getInstance().records.attach({source:e,target:t,options:s},r)}async detach({source:e,target:t,options:s},r){return await u.getInstance().records.detach({source:e,target:t,options:s},r)}async validateTargetLabel(e,t){let s=x(e);if(!s)return;let n=await u.getInstance().records.findById(s,t);if(!n)throw new Error(`Record with id "${s}" not found.`);if(n.data.__label!==this.label)throw new TypeError(`Target record label "${n.data.__label}" does not match model label "${this.label}".`)}async handleSetOrUpdate(e,t,s,r){var c,d;if(this.config.validateTargetLabel&&await this.validateTargetLabel(e,r),R(t)&&t.every(j))return await u.getInstance().records[s]({label:this.label,target:e,data:t},r);let n=u.getInstance(),a=await F(this.schema,t),o=N(this.schema,a);if(!k(o)){let p=r!=null?r:await n.tx.begin(),l=await this.find({where:o},p),h=typeof r<"u";if(!((c=l==null?void 0:l.data)!=null&&c.length)||l.data.length===1&&((d=l.data[0])==null?void 0:d.id)===x(e)){let T=await n.records[s]({target:e,label:this.label,data:a},p);return h||await p.commit(),T}else throw h||await p.commit(),new _(this.label,o)}return await n.records[s]({label:this.label,target:e,data:a},r)}async set(e,t,s){return await this.handleSetOrUpdate(e,t,"set",s)}async update(e,t,s){return await this.handleSetOrUpdate(e,t,"update",s)}async createMany(e,t){var a;let s=u.getInstance(),r=typeof t<"u",n=t!=null?t:await s.tx.begin();try{let o=await Promise.all(e.map(async p=>await F(this.schema,p))),c=Z(o,this.schema,this.label);if(!k(c)){let p=Object.entries(c).map(([h,y])=>({[h]:{$in:y}})),l=await this.find({where:{$or:p}},n);if((a=l==null?void 0:l.data)!=null&&a.length)throw new _(this.label,Object.keys(c))}let d=await s.records.createMany({label:this.label,data:o},n);return r||await n.commit(),d}catch(o){throw r||await n.rollback(),o}}async delete(e,t){if(k(e.where))throw new O(`You must specify criteria to delete records of type '${this.label}'. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.`);return await u.getInstance().records.delete({...e,labels:[this.label]},t)}async deleteById(e,t){return await u.getInstance().records.deleteById(e,t)}};re(new W);var Le=u;0&&(module.exports={DBRecordInstance,DBRecordsArrayInstance,EmptyTargetError,HttpClient,HttpClientResponse,Model,NonUniqueResultError,RestAPI,RushDB,Transaction,UniquenessError,idToDate,idToTimestamp,initSDK,mergeDefaultsWithPayload,parseConfig,pickUniqFieldsFromRecord,pickUniqFieldsFromRecords,validateInteger});
3
+ `)}async setProperties(e,t){let r=u.getInstance();for(let n=0;n<this.data.length;n+=100){let a=this.data.slice(n,n+100);await Promise.all(a.map(o=>r.records.update({target:o.id,label:o.data.__label,data:e},t)))}}};var je={"Content-Type":"application/json"},he=({httpClient:i,token:e,url:t})=>async(s,{headers:r,...n})=>{let a=await i.makeRequest(`${t}${s}`,{credentials:"omit",headers:Object.assign({...je,...r},typeof e<"u"?{Authorization:`Bearer ${e}`}:{}),...n});if(a.getStatusCode()>=200&&a.getStatusCode()<300)return await a.toJSON();throw new Error(`${a.getStatusCode()}`)};var q=class{constructor(e){this.id=e}async rollback(){return await u.getInstance().tx.rollback(this.id)}async commit(){return await u.getInstance().tx.commit(this.id)}};var ge="api.rushdb.com";var ye="https",ue="/api/v1";var f=i=>i?{"x-transaction-id":i}:void 0,Ue=i=>A(i)||i instanceof q,m=i=>Ue(i)?i instanceof q?i.id:i:void 0,me=i=>/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/.test(i),x=i=>{if(A(i)&&me(i))return i;if(i instanceof S&&i.data)return i.data.__id;if(w(i)&&"__id"in i&&me(i.__id))return i.__id},j=i=>!(!w(i)||w(i)&&"name"in i&&!A(i.name)||w(i)&&"type"in i&&(!A(i.type)||!ie.includes(i.type))||!("value"in i)||!z(i.value)||"metadata"in i&&!A(i.metadata)||"valueSeparator"in i&&!A(i.valueSeparator)),fe=i=>{let e=ye,t=ge,s=443,r=ue;if("url"in i){let a=new URL(i.url);e=a.protocol.replace(":",""),t=a.hostname,s=parseInt(a.port||(e==="http"?"80":e==="https"?"443":""))}"host"in i&&"port"in i&&"protocol"in i&&(e=i.protocol.replace(":",""),t=i.host,s=i.port),r&&!r.startsWith("/")&&(r="/"+r);let n="";return e==="http"&&s===80||e==="https"&&s===443||(n=":"+s),`${e}://${t}${n}${r}`},g=(i=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let s=0;s<i;s++){let r=Math.floor(Math.random()*e.length);t+=e[r]}return t};var k=class{constructor(e,t){this.records={attach:async({source:e,target:t,options:s},r)=>{var l,h;let n=m(r),o=`/relationships/${x(e)}`,c={headers:Object.assign({},f(n)),method:"POST",requestData:{targetIds:this._extractTargetIds(t,"Attach"),...(s==null?void 0:s.type)&&{type:s.type},...(s==null?void 0:s.direction)&&{direction:s.direction},...(s==null?void 0:s.properties)&&{properties:s.properties}}},d=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:d,path:o,...c});let p=await this.fetcher(o,c);return(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c,responseData:p.data}),p},detach:async({source:e,target:t,options:s},r)=>{var l,h;let n=m(r),o=`/relationships/${x(e)}`,c={headers:Object.assign({},f(n)),method:"PUT",requestData:{targetIds:this._extractTargetIds(t,"Detach"),...(s==null?void 0:s.typeOrTypes)&&{typeOrTypes:s.typeOrTypes},...(s==null?void 0:s.direction)&&{direction:s.direction}}},d=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:d,path:o,...c});let p=await this.fetcher(o,c);return(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c,responseData:p.data}),p},create:async({label:e,data:t,options:s,vectors:r},n)=>{var h,y;let a=m(n),o="/records",c={headers:Object.assign({},f(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",p=L(C(t));if(R(p)&&p.every(j))c.requestData={label:e,properties:p,options:s,...(r==null?void 0:r.length)&&{vectors:r}};else if(M(p))c.requestData={label:e,data:p,options:s,...(r==null?void 0:r.length)&&{vectors:r}};else throw w(p)?new Error("Provided data is not a flat object. Consider using the `importJson` method for nested objects or arrays of nested objects, or use `createMany` for arrays of flat objects."):new Error("Provided data is not valid.");(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c});let l=await this.fetcher(o,c);return(y=this.logger)==null||y.call(this,{requestId:d,path:o,...c,responseData:l.data}),l!=null&&l.success&&(l!=null&&l.data)?new S(l.data):new S},createMany:async(e,t)=>{var l,h,y,T;let s=R(e.data)?e.data:[e.data];if(!s.every(D=>M(D)))throw new Error("records.createMany supports only flat records (no nested objects/arrays). Use records.importJson for nested JSON.");if(e.vectors&&e.vectors.length>s.length)throw new Error(`records.createMany: vectors length (${e.vectors.length}) exceeds the number of data rows (${s.length}).`);let n=(l=e.vectors)!=null&&l.length?s.map((D,P)=>{var ne;return(ne=e.vectors[P])!=null&&ne.length?{...D,$vectors:e.vectors[P]}:D}):s,a=m(t),o="/records/import/json",c={headers:Object.assign({},f(a)),method:"POST",requestData:{label:e.label,data:n,options:e.options}},d=typeof this.logger=="function"?g():"";(h=this.logger)==null||h.call(this,{requestId:d,path:o,...c});let p=await this.fetcher(o,c);if((y=this.logger)==null||y.call(this,{requestId:d,path:o,...c,responseData:p.data}),p!=null&&p.success&&(p!=null&&p.data)){let D=R(p.data)?(T=p.data)==null?void 0:T.map(P=>new S(P)):[];return new I(D,p.total)}return new I([])},importJson:async(e,t)=>{var h,y,T;let{data:s,options:r}=e,{label:n}=e,a=s;if(!n)if(w(s)&&!R(s)){let D=L(s),P=Object.keys(D);if(P.length===1)n=P[0],a=D[n];else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }")}else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }");let o=m(t),c="/records/import/json",d={headers:Object.assign({},f(o)),method:"POST",requestData:{label:n,data:a,options:r}},p=typeof this.logger=="function"?g():"";(h=this.logger)==null||h.call(this,{requestId:p,path:c,...d});let l=await this.fetcher(c,d);if((y=this.logger)==null||y.call(this,{requestId:p,path:c,...d,responseData:l.data}),l!=null&&l.success&&(l!=null&&l.data)){let D=R(l.data)?(T=l.data)==null?void 0:T.map(P=>new S(P)):[];return new I(D,l.total)}return new I([])},importCsv:async(e,t)=>{var c,d;let s=m(t),r="/records/import/csv",n={headers:Object.assign({},f(s)),method:"POST",requestData:e},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);if((d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o!=null&&o.success&&(o!=null&&o.data)){let p=R(o.data)?o.data.map(l=>new S(l)):[];return new I(p,o.total)}return new I([])},delete:async(e,t)=>{var c,d,p;if(U(e.where)&&!((c=this==null?void 0:this.options)!=null&&c.allowForceDelete))throw new O("You must specify criteria to delete records. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.");let s=m(t),r="/records/delete",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(p=this.logger)==null||p.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},deleteById:async(e,t)=>{var d,p;let s=m(t),r=R(e),n=r?"/records/delete":`/records/${e}`,a={headers:Object.assign({},f(s)),method:r?"POST":"DELETE",requestData:r?{limit:1e3,where:{$id:{$in:e}}}:void 0},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:n,...a});let c=await this.fetcher(n,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:n,...a,responseData:c.data}),c},export:async(e,t)=>{var c,d;let s=m(t),r="/records/export/csv",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},find:async(e,t)=>{var l,h;let{id:s,...r}=e,n=m(t),a=s?`/records/${s}/search`:"/records/search",o={headers:Object.assign({},f(n)),method:"POST",requestData:r!=null?r:{}},c=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:c,path:a,...o});let d=await this.fetcher(a,o);(h=this.logger)==null||h.call(this,{requestId:c,path:a,...o,responseData:d.data});let p=d.data.map(y=>new S(y));return new I(p,d.total,e)},findById:async(e,t)=>{var c,d;let s=m(t),r=R(e)?"/records":`/records/${e}`,n={headers:Object.assign({},f(s)),method:R(e)?"POST":"GET",requestData:R(e)?{ids:e}:void 0},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);if((d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),R(e)){let p=o.data.map(l=>new S(l));return new I(p,o.total)}else return new S(o.data)},findOne:async(e,t)=>{var d,p;let s=m(t),r="/records/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:{...e,limit:1,skip:0}},a=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);(p=this.logger)==null||p.call(this,{requestId:a,path:r,...n,responseData:o.data});let[c]=o.data;return new S(c)},findUniq:async(e,t)=>{var d,p;let s=m(t),r="/records/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:{...e,limit:1,skip:0}},a=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);if((p=this.logger)==null||p.call(this,{requestId:a,path:r,...n,responseData:o.data}),typeof o.total<"u"&&o.total>1)throw new v(o.total,e);let[c]=o.data;return new S(c)},set:async({target:e,label:t,data:s,options:r,vectors:n},a)=>{var T,D;let o=m(a),d=`/records/${x(e)}`,p={headers:Object.assign({},f(o)),method:"PUT",requestData:{}},l=typeof this.logger=="function"?g():"",h=L(C(s));if(R(h)&&h.every(j))p.requestData={label:t,properties:h,...(n==null?void 0:n.length)&&{vectors:n}};else if(M(h))p.requestData={label:t,data:h,options:r,...(n==null?void 0:n.length)&&{vectors:n}};else throw w(h)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(T=this.logger)==null||T.call(this,{requestId:l,path:d,...p});let y=await this.fetcher(d,p);return(D=this.logger)==null||D.call(this,{requestId:l,path:d,...p,responseData:y.data}),y!=null&&y.success&&(y!=null&&y.data)?new S(y.data):new S},update:async({target:e,label:t,data:s,options:r},n)=>{var y,T;let a=m(n),c=`/records/${x(e)}`,d={headers:Object.assign({},f(a)),method:"PATCH",requestData:{}},p=typeof this.logger=="function"?g():"",l=L(C(s));if(R(l)&&l.every(j))d.requestData={label:t,properties:l};else if(M(l))d.requestData={label:t,data:l,options:r};else throw w(l)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(y=this.logger)==null||y.call(this,{requestId:p,path:c,...d});let h=await this.fetcher(c,d);return(T=this.logger)==null||T.call(this,{requestId:p,path:c,...d,responseData:h.data}),h!=null&&h.success&&(h!=null&&h.data)?new S(h.data):new S},upsert:async({label:e,data:t,options:s,vectors:r},n)=>{var y,T,D;let a=m(n),o="/records",c={headers:Object.assign({},f(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",p=L(C(t)),l={...s,mergeBy:(y=s==null?void 0:s.mergeBy)!=null?y:[]};if(R(p)&&p.every(j))c.requestData={label:e,properties:p,options:l,...(r==null?void 0:r.length)&&{vectors:r}};else if(M(p))c.requestData={label:e,data:p,options:l,...(r==null?void 0:r.length)&&{vectors:r}};else throw w(p)?new Error("Provided data is not a flat object. Upsert supports flat objects or property drafts array."):new Error("Provided data is not valid.");(T=this.logger)==null||T.call(this,{requestId:d,path:o,...c});let h=await this.fetcher(o,c);return(D=this.logger)==null||D.call(this,{requestId:d,path:o,...c,responseData:h.data}),h!=null&&h.success&&(h!=null&&h.data)?new S(h.data):new S}};this.relationships={patterns:{list:async()=>{var n,a;let e="/relationships/patterns",t={method:"GET",headers:{}},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r},analyze:async()=>{var n,a;let e="/relationships/patterns/analyze",t={method:"POST",headers:{},requestData:{}},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r},approve:async e=>{var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/approve`,s={method:"POST",headers:{},requestData:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n},ignore:async e=>{var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/ignore`,s={method:"POST",headers:{},requestData:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n},delete:async(e,t)=>{var c,d;let s=t!=null&&t.deleteExisting?"?deleteExisting=true":"",r=`/relationships/patterns/${encodeURIComponent(e)}${s}`,n={method:"DELETE",headers:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o}},createMany:async(e,t)=>{var c,d;let s=m(t),r="/relationships/create-many",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},deleteMany:async(e,t)=>{var c,d;let s=m(t),r="/relationships/delete-many",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},find:async(e={},t)=>{var p,l;let s=m(t),r=new URLSearchParams;(e==null?void 0:e.limit)!==void 0&&r.append("limit",e.limit.toString()),(e==null?void 0:e.skip)!==void 0&&r.append("skip",e.skip.toString());let a=`/relationships/search${r.toString()?"?"+r.toString():""}`,o={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},c=typeof this.logger=="function"?g():"";(p=this.logger)==null||p.call(this,{requestId:c,path:a,...o});let d=await this.fetcher(a,o);return(l=this.logger)==null||l.call(this,{requestId:c,path:a,...o,responseData:d.data}),d}};this.properties={delete:async(e,t)=>{var c,d;let s=m(t),r=`/properties/${e}`,n={headers:Object.assign({},f(s)),method:"DELETE"},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},find:async(e,t)=>{var c,d;let s=m(t),r="/properties/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},findById:async(e,t)=>{var c,d;let s=m(t),r=`/properties/${e}`,n={headers:Object.assign({},f(s)),method:"GET"},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},values:async(e,t,s)=>{var d,p;let r=m(s),n=`/properties/${e}/values`,a={headers:Object.assign({},f(r)),method:"POST",requestData:t!=null?t:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:n,...a});let c=await this.fetcher(n,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:n,...a,responseData:c.data}),c}};this.labels={find:async(e,t)=>{var c,d;let s=m(t),r="/labels/search",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o}};this.tx={begin:async e=>{var a,o;let t="/tx",s={method:"POST",requestData:w(e)&&"ttl"in e?e:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),new q(n.data.id)},commit:async e=>{var o,c;let s=`/tx/${m(e)}/commit`,r={method:"POST",requestData:{}},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),a},get:async e=>{var o,c;let s=`/tx/${m(e)}`,r={method:"GET"},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),new q(a.data.id)},rollback:async e=>{var o,c;let s=`/tx/${m(e)}/rollback`,r={method:"POST",requestData:{}},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),a}};this.settings={get:async()=>{var n,a;let e="/sdk/settings",t={method:"GET"},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r}};this.query={raw:async({query:e,params:t},s)=>{var d,p;let r=m(s),n="/query/raw",a={headers:Object.assign({},f(r)),method:"POST",requestData:{query:e,params:t}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:n,...a});let c=await this.fetcher(n,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:n,...a,responseData:c.data}),c}};this.ai={getOntology:async(e,t)=>{var c,d;let s=m(t),r="/ai/ontology",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},getOntologyMarkdown:async(e,t)=>{var c,d;let s=m(t),r="/ai/ontology/md",n={headers:Object.assign({},f(s)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:a,path:r,...n});let o=await this.fetcher(r,n);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...n,responseData:o.data}),o},indexes:{find:async()=>{var n,a;let e="/ai/indexes",t={method:"GET",headers:{}},s=typeof this.logger=="function"?g():"";(n=this.logger)==null||n.call(this,{requestId:s,path:e,...t});let r=await this.fetcher(e,t);return(a=this.logger)==null||a.call(this,{requestId:s,path:e,...t,responseData:r.data}),r},create:async e=>{var d,p;let t="/ai/indexes",{external:s,...r}=e,n=s===!0?{...r,sourceType:"external"}:r,a={method:"POST",headers:{},requestData:n},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:t,...a});let c=await this.fetcher(t,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:t,...a,responseData:c.data}),c},upsertVectors:async(e,t)=>{var o,c;let s=`/ai/indexes/${e}/vectors/upsert`,r={method:"POST",headers:{},requestData:t},n=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:n,path:s,...r});let a=await this.fetcher(s,r);return(c=this.logger)==null||c.call(this,{requestId:n,path:s,...r,responseData:a.data}),a},delete:async e=>{var a,o;let t=`/ai/indexes/${e}`,s={method:"DELETE",headers:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n},stats:async e=>{var a,o;let t=`/ai/indexes/${e}/stats`,s={method:"GET",headers:{}},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);return(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s,responseData:n.data}),n}},search:async e=>{var o,c,d,p;let t="/ai/search",s={method:"POST",headers:{},requestData:e},r=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:r,path:t,...s});let n=await this.fetcher(t,s);(c=this.logger)==null||c.call(this,{requestId:r,path:t,...s,responseData:n.data});let a=((d=n.data)!=null?d:[]).map(l=>new S(l));return new I(a,(p=n.total)!=null?p:0)}};if(this.fetcher=null,t!=null&&t.httpClient){let s=fe(t);this.fetcher=he({httpClient:t.httpClient,token:e,url:s})}t!=null&&t.options&&(this.options=t==null?void 0:t.options),t!=null&&t.logger&&(this.logger=t==null?void 0:t.logger)}_extractTargetIds(e,t){var s;if(e instanceof S){let r=x(e);if(!r)throw new O(`${t} error: Target id is empty`);return[r]}if(R(e)&&e.every(r=>r instanceof S)){let r=e.map(x).filter(b);if(!r.length)throw new O(`${t} error: Target ids are empty`);return r}if(e instanceof I){let r=(s=e.data)==null?void 0:s.map(x).filter(b);if(!(r!=null&&r.length))throw new O(`${t} error: Target ids are empty`);return r}if(w(e)&&"__id"in e)return[e.__id];if(R(e)&&e.every(r=>w(r)&&"__id"in r)){let r=e.map(x).filter(b);if(!r.length)throw new O(`${t} error: Target ids are empty`);return r}return R(e)?e:A(e)?[e]:[]}};var Se,B=class B extends k{constructor(e,t){var n,a;let s=e!=null?e:typeof process<"u"?(n=process.env)==null?void 0:n.RUSHDB_API_KEY:void 0,r=X(t);super(s,{...r,httpClient:(a=r.httpClient)!=null?a:Se}),B.instance=this,this.initializeSync(s,r)}initializeSync(e,t){B.state={initialized:!0,debug:!1,timeout:ee("timeout",t==null?void 0:t.timeout,8e4),token:e}}static getInstance(){if(B.instance)return B.instance;throw new Error('RushDB not initialized. Please create a RushDB instance first: new RushDB("RUSHDB_API_KEY")')}static isInitialized(){return b(B.instance)}toDBRecordInstance(e){return new S(e)}};B.instance=null,B.state={initialized:!1,debug:!1,timeout:8e4};var u=B,re=i=>{Se=i};var se=class{constructor(e,t,s){this.label=e,this.schema=t,this.config=s!=null?s:{}}getLabel(){return this.label}async toDBRecordInstance(e){try{return u.getInstance().toDBRecordInstance(e)}catch{throw new Error("No RushDB instance was provided during model initialization.")}}async find(e,t){let s=e!=null?e:{};return u.getInstance().records.find({...s,labels:[this.label]},t)}async findOne(e,t){let s=e!=null?e:{};return u.getInstance().records.findOne({...s,labels:[this.label]},t)}async findById(e,t){return this.findOne({where:{$id:e}},t)}async findUniq(e,t){let s=e!=null?e:{};return u.getInstance().records.findUniq({...s,labels:[this.label]},t)}async create(e,t,s){var c,d;let r=await F(this.schema,e),n=N(this.schema,r),a=b(n),o=u.getInstance();if(a){let p=t!=null?t:await o.tx.begin(),l=await this.find({where:n},p),h=typeof t<"u";if(!((c=l==null?void 0:l.data)!=null&&c.length)){let T=await o.records.create({label:this.label,data:r},p);return h||await p.commit(),T}else switch((d=s==null?void 0:s.onConflict)!=null?d:"throw"){case"upsert":{let D=l.data[0],P=await o.records.set({target:D.id,label:this.label,data:r},p);return h||await p.commit(),P}case"skip":return h||await p.commit(),null;default:throw h||await p.commit(),new _(this.label,n)}}return await o.records.create({label:this.label,data:r},t)}async attach({source:e,target:t,options:s},r){return await u.getInstance().records.attach({source:e,target:t,options:s},r)}async detach({source:e,target:t,options:s},r){return await u.getInstance().records.detach({source:e,target:t,options:s},r)}async validateTargetLabel(e,t){let s=x(e);if(!s)return;let n=await u.getInstance().records.findById(s,t);if(!n)throw new Error(`Record with id "${s}" not found.`);if(n.data.__label!==this.label)throw new TypeError(`Target record label "${n.data.__label}" does not match model label "${this.label}".`)}async handleSetOrUpdate(e,t,s,r){var c,d;if(this.config.validateTargetLabel&&await this.validateTargetLabel(e,r),R(t)&&t.every(j))return await u.getInstance().records[s]({label:this.label,target:e,data:t},r);let n=u.getInstance(),a=await F(this.schema,t),o=N(this.schema,a);if(!U(o)){let p=r!=null?r:await n.tx.begin(),l=await this.find({where:o},p),h=typeof r<"u";if(!((c=l==null?void 0:l.data)!=null&&c.length)||l.data.length===1&&((d=l.data[0])==null?void 0:d.id)===x(e)){let T=await n.records[s]({target:e,label:this.label,data:a},p);return h||await p.commit(),T}else throw h||await p.commit(),new _(this.label,o)}return await n.records[s]({label:this.label,target:e,data:a},r)}async set(e,t,s){return await this.handleSetOrUpdate(e,t,"set",s)}async update(e,t,s){return await this.handleSetOrUpdate(e,t,"update",s)}async createMany(e,t){var a;let s=u.getInstance(),r=typeof t<"u",n=t!=null?t:await s.tx.begin();try{let o=await Promise.all(e.map(async p=>await F(this.schema,p))),c=Z(o,this.schema,this.label);if(!U(c)){let p=Object.entries(c).map(([h,y])=>({[h]:{$in:y}})),l=await this.find({where:{$or:p}},n);if((a=l==null?void 0:l.data)!=null&&a.length)throw new _(this.label,Object.keys(c))}let d=await s.records.createMany({label:this.label,data:o},n);return r||await n.commit(),d}catch(o){throw r||await n.rollback(),o}}async delete(e,t){if(U(e.where))throw new O(`You must specify criteria to delete records of type '${this.label}'. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.`);return await u.getInstance().records.delete({...e,labels:[this.label]},t)}async deleteById(e,t){return await u.getInstance().records.deleteById(e,t)}};re(new W);var Le=u;0&&(module.exports={DBRecordInstance,DBRecordsArrayInstance,EmptyTargetError,HttpClient,HttpClientResponse,Model,NonUniqueResultError,RestAPI,RushDB,Transaction,UniquenessError,idToDate,idToTimestamp,initSDK,mergeDefaultsWithPayload,parseConfig,pickUniqFieldsFromRecord,pickUniqFieldsFromRecords,validateInteger});
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var Te=Object.defineProperty,be=Object.defineProperties;var we=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var re=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var te=(i,e,t)=>e in i?Te(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,c=(i,e)=>{for(var t in e||(e={}))re.call(e,t)&&te(i,t,e[t]);if(V)for(var t of V(e))se.call(e,t)&&te(i,t,e[t]);return i},y=(i,e)=>be(i,we(e));var W=(i,e)=>{var t={};for(var r in i)re.call(i,r)&&e.indexOf(r)<0&&(t[r]=i[r]);if(i!=null&&V)for(var r of V(i))e.indexOf(r)<0&&se.call(i,r)&&(t[r]=i[r]);return t};var h=(i,e,t)=>new Promise((r,s)=>{var n=d=>{try{o(t.next(d))}catch(p){s(p)}},a=d=>{try{o(t.throw(d))}catch(p){s(p)}},o=d=>d.done?r(d.value):Promise.resolve(d.value).then(n,a);o((t=t.apply(i,e)).next())});var De="string",Ie="datetime",Pe="boolean",xe="number",Oe="null",ne=[De,Ie,Pe,xe,Oe];var q=class i{makeRequest(e,{headers:t,method:r,protocol:s,requestData:n,timeout:a}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(i.TIMEOUT_ERROR_CODE);return e.code=i.TIMEOUT_ERROR_CODE,e}};q.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];q.TIMEOUT_ERROR_CODE="ETIMEDOUT";var N=class{constructor(e,t){this._statusCode=e,this._headers=t}getStatusCode(){return this._statusCode}getHeaders(){return this._headers}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}},Y=class{constructor(e){this._res=e}getStatusCode(){throw new Error("getStatusCode not implemented.")}getHeaders(){throw new Error("getHeaders not implemented.")}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}};var K=class i extends q{constructor(e){if(super(),!e){if(!globalThis.fetch)throw new Error("fetch() function not provided and is not defined in the global scope. You must provide a fetch implementation.");e=globalThis.fetch}globalThis.AbortController?this._fetchFn=i.makeFetchWithAbortTimeout(e):this._fetchFn=i.makeFetchWithRaceTimeout(e)}static makeFetchWithRaceTimeout(e){return(t,r,s)=>{let n,a=new Promise((d,p)=>{n=setTimeout(()=>{n=null,p(q.makeTimeoutError())},s)}),o=e(t,r);return Promise.race([o,a]).finally(()=>{n&&clearTimeout(n)})}}static makeFetchWithAbortTimeout(e){return(t,r,s)=>h(this,null,function*(){let n=new AbortController,a=setTimeout(()=>{a=null,n.abort(q.makeTimeoutError())},s);try{return yield e(t,y(c({},r),{signal:n.signal}))}catch(o){throw o.name==="AbortError"?q.makeTimeoutError():o}finally{a&&clearTimeout(a)}})}makeRequest(o,d){return h(this,arguments,function*(e,{headers:t,method:r,protocol:s,requestData:n,timeout:a}){let p=r=="POST"||r=="PUT"||r=="PATCH",l=JSON.stringify(n)||(p?"":void 0),g=yield this._fetchFn(e,{body:l,headers:t,method:r},a!=null?a:8e4);return new z(g)})}},z=class i extends N{constructor(e){super(e.status,i._transformHeadersToObject(e.headers)),this._res=e}getRawResponse(){return this._res}toStream(e){return e(),this._res.body}toJSON(){return this._res.json()}static _transformHeadersToObject(e){let t={};for(let r of e){if(!Array.isArray(r)||r.length!=2)throw new Error("Response objects produced by the fetch function given to FetchHttpClient do not have an iterable headers map. Response#headers should be an iterable object.");t[r[0]]=r[1]}return t}};var I=i=>typeof i=="object"&&Array.isArray(i)&&i!==null,P=i=>i!==null&&Object.prototype.toString.call(i)==="[object Object]",H=i=>P(i)&&Object.keys(i).length===0,oe=i=>typeof i=="number"||typeof i=="string"||typeof i=="boolean"||i===null;function Ee(i,e){let t=c({},i);return e.forEach(r=>{delete t[r]}),t}var M=i=>P(i)?Ee(i,["__label","__id","__proptypes"]):i,F=i=>I(i)?i.map(F):P(i)?Object.fromEntries(Object.entries(i).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,F(t)])):i,G=i=>I(i)?i.every(oe):oe(i),$=i=>P(i)&&Object.values(i).every(G),B=i=>typeof i=="string",O=i=>{if(typeof i=="string"){if(i.toLowerCase()==="true")return!0;if(i.toLowerCase()==="false")return!1}return I(i)&&i.length===0||P(i)&&Object.keys(i).length===0?!1:!!i};var Z=["httpClient","timeout","host","port","protocol","url","logger","options"];var k=class i extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,i.prototype)}},C=class i extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,i.prototype)}},Q=class i extends Error{constructor(e,t){super(`Expected a unique result but found ${e} matches for the provided SearchQuery: ${JSON.stringify(t)}. Ensure your search parameters uniquely identify a single result.`),this.name="NonUniqueResultError",Object.setPrototypeOf(this,i.prototype)}};var J=(i,e)=>h(void 0,null,function*(){let t=Object.entries(i).map(o=>h(void 0,[o],function*([n,a]){return a.default&&typeof a.default!="undefined"&&typeof e[n]=="undefined"?{key:n,value:typeof a.default=="function"?yield a.default():a.default}:{key:n,value:void 0}})),s=(yield Promise.all(t)).reduce((n,{key:a,value:o})=>(o!==void 0&&(n[a]=o),n),{});return c(c({},s),e)}),X=(i,e)=>Object.entries(e).filter(([t])=>{var r;return(r=i[t])==null?void 0:r.unique}).reduce((t,[r,s])=>(r in i&&(t[r]=s),t),{}),ie=(i,e,t)=>{let r={},s=Object.entries(e).filter(([,n])=>n.unique).reduce((n,[a])=>(n[a]=!0,n),{});return i.forEach(n=>{Object.entries(n).forEach(([a,o])=>{if(a in s)if(r[a]){if(r[a].includes(o))throw new k(t,{[a]:o});r[a]=[...r[a],o]}else r[a]=[o]})}),r},ce=i=>{if(!i)return{};if(!P(i))throw new Error("Config must be an object");if(Object.keys(i).filter(t=>!Z.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${Z.join(", ")}`);return i};function de(i,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${i} must be an integer`)}return e}function ee(i){let e=i.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function pe(i){return new Date(ee(i))}var D=class{constructor(e={}){this.data=e}get exists(){return O(this.data.__id)&&O(this.data.__label)}get id(){if(!O(this.data.__id))throw new Error("DBRecordInstance: Unable to access 'id'. The Record's `data.__id` is missing or incorrect.");return this.data.__id}get label(){if(!O(this.data.__label))throw new Error("DBRecordInstance: Unable to access 'label'. The Record's `data.__label` is missing or incorrect.");return this.data.__label}get proptypes(){if(!O(this.data.__proptypes))throw new Error("DBRecordInstance: Unable to access 'proptypes'. The Record's `data.__proptypes` is missing or incorrect.");return this.data.__proptypes}get date(){try{return pe(this.id)}catch(e){throw new Error("DBRecordInstance: Unable to access 'date'. The Record's `data.__id` is missing or incorrect.")}}get timestamp(){try{return ee(this.id)}catch(e){throw new Error("DBRecordInstance: Unable to access 'timestamp'. The Record's `data.__id` is missing or incorrect.")}}delete(e){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to delete Record. The Record data is undefined.");return yield b.getInstance().records.deleteById(this.id,e)})}update(e,t){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to update Record. The Record data is undefined.");return b.getInstance().records.update({label:this.label,target:this.id,data:e},t)})}set(e,t){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to set. The Record data is undefined.");return b.getInstance().records.set({label:this.label,target:this.id,data:e},t)})}attach(e,t,r){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to attach Record. The Record data is undefined.");return b.getInstance().records.attach({source:this.id,target:e,options:t},r)})}detach(e,t,r){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to detach Record. The Record data is undefined.");return b.getInstance().records.detach({source:this.id,target:e,options:t},r)})}},E=class{constructor(e=[],t=0,r){this.data=e,this.total=t,this.searchQuery=r}deleteAll(e){return h(this,null,function*(){let t=this.data.map(s=>s.id);return t.length?yield b.getInstance().records.deleteById(t,e):{success:!0}})}next(e){return h(this,null,function*(){var o,d;if(!this.searchQuery)throw new Error("DBRecordsArrayInstance: Cannot paginate \u2014 no searchQuery was provided.");let t=(o=this.searchQuery.skip)!=null?o:0,r=(d=this.searchQuery.limit)!=null?d:100,s=y(c({},this.searchQuery),{skip:t+r}),a=yield b.getInstance().records.find(s,void 0);return e!=null&&e.preserveData?(this.data=[...this.data,...a.data],this.total=a.total,this.searchQuery=s,this):a})}exportCsv(){if(!this.data.length)return"";let e=new Set(["__id","__label","__proptypes"]),t=Object.keys(this.data[0].data).filter(n=>!e.has(n)),r=n=>{let a=n==null?"":String(n);return a.includes(",")||a.includes('"')||a.includes(`
1
+ var Te=Object.defineProperty,be=Object.defineProperties;var we=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var re=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var te=(i,e,t)=>e in i?Te(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,c=(i,e)=>{for(var t in e||(e={}))re.call(e,t)&&te(i,t,e[t]);if(V)for(var t of V(e))se.call(e,t)&&te(i,t,e[t]);return i},y=(i,e)=>be(i,we(e));var W=(i,e)=>{var t={};for(var r in i)re.call(i,r)&&e.indexOf(r)<0&&(t[r]=i[r]);if(i!=null&&V)for(var r of V(i))e.indexOf(r)<0&&se.call(i,r)&&(t[r]=i[r]);return t};var h=(i,e,t)=>new Promise((r,s)=>{var n=d=>{try{o(t.next(d))}catch(p){s(p)}},a=d=>{try{o(t.throw(d))}catch(p){s(p)}},o=d=>d.done?r(d.value):Promise.resolve(d.value).then(n,a);o((t=t.apply(i,e)).next())});var De="string",Ie="datetime",Pe="boolean",xe="number",Oe="null",ne=[De,Ie,Pe,xe,Oe];var q=class i{makeRequest(e,{headers:t,method:r,protocol:s,requestData:n,timeout:a}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(i.TIMEOUT_ERROR_CODE);return e.code=i.TIMEOUT_ERROR_CODE,e}};q.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];q.TIMEOUT_ERROR_CODE="ETIMEDOUT";var N=class{constructor(e,t){this._statusCode=e,this._headers=t}getStatusCode(){return this._statusCode}getHeaders(){return this._headers}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}},Y=class{constructor(e){this._res=e}getStatusCode(){throw new Error("getStatusCode not implemented.")}getHeaders(){throw new Error("getHeaders not implemented.")}getRawResponse(){throw new Error("getRawResponse not implemented.")}toStream(e){throw new Error("toStream not implemented.")}toJSON(){throw new Error("toJSON not implemented.")}};var Q=class i extends q{constructor(e){if(super(),!e){if(!globalThis.fetch)throw new Error("fetch() function not provided and is not defined in the global scope. You must provide a fetch implementation.");e=globalThis.fetch}globalThis.AbortController?this._fetchFn=i.makeFetchWithAbortTimeout(e):this._fetchFn=i.makeFetchWithRaceTimeout(e)}static makeFetchWithRaceTimeout(e){return(t,r,s)=>{let n,a=new Promise((d,p)=>{n=setTimeout(()=>{n=null,p(q.makeTimeoutError())},s)}),o=e(t,r);return Promise.race([o,a]).finally(()=>{n&&clearTimeout(n)})}}static makeFetchWithAbortTimeout(e){return(t,r,s)=>h(this,null,function*(){let n=new AbortController,a=setTimeout(()=>{a=null,n.abort(q.makeTimeoutError())},s);try{return yield e(t,y(c({},r),{signal:n.signal}))}catch(o){throw o.name==="AbortError"?q.makeTimeoutError():o}finally{a&&clearTimeout(a)}})}makeRequest(o,d){return h(this,arguments,function*(e,{headers:t,method:r,protocol:s,requestData:n,timeout:a}){let p=r=="POST"||r=="PUT"||r=="PATCH",l=JSON.stringify(n)||(p?"":void 0),g=yield this._fetchFn(e,{body:l,headers:t,method:r},a!=null?a:8e4);return new z(g)})}},z=class i extends N{constructor(e){super(e.status,i._transformHeadersToObject(e.headers)),this._res=e}getRawResponse(){return this._res}toStream(e){return e(),this._res.body}toJSON(){return this._res.json()}static _transformHeadersToObject(e){let t={};for(let r of e){if(!Array.isArray(r)||r.length!=2)throw new Error("Response objects produced by the fetch function given to FetchHttpClient do not have an iterable headers map. Response#headers should be an iterable object.");t[r[0]]=r[1]}return t}};var I=i=>typeof i=="object"&&Array.isArray(i)&&i!==null,P=i=>i!==null&&Object.prototype.toString.call(i)==="[object Object]",H=i=>P(i)&&Object.keys(i).length===0,oe=i=>typeof i=="number"||typeof i=="string"||typeof i=="boolean"||i===null;function Ee(i,e){let t=c({},i);return e.forEach(r=>{delete t[r]}),t}var M=i=>P(i)?Ee(i,["__label","__id","__proptypes"]):i,F=i=>I(i)?i.map(F):P(i)?Object.fromEntries(Object.entries(i).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,F(t)])):i,G=i=>I(i)?i.every(oe):oe(i),$=i=>P(i)&&Object.values(i).every(G),B=i=>typeof i=="string",O=i=>{if(typeof i=="string"){if(i.toLowerCase()==="true")return!0;if(i.toLowerCase()==="false")return!1}return I(i)&&i.length===0||P(i)&&Object.keys(i).length===0?!1:!!i};var Z=["httpClient","timeout","host","port","protocol","url","logger","options"];var k=class i extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,i.prototype)}},C=class i extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,i.prototype)}},K=class i extends Error{constructor(e,t){super(`Expected a unique result but found ${e} matches for the provided SearchQuery: ${JSON.stringify(t)}. Ensure your search parameters uniquely identify a single result.`),this.name="NonUniqueResultError",Object.setPrototypeOf(this,i.prototype)}};var J=(i,e)=>h(void 0,null,function*(){let t=Object.entries(i).map(o=>h(void 0,[o],function*([n,a]){return a.default&&typeof a.default!="undefined"&&typeof e[n]=="undefined"?{key:n,value:typeof a.default=="function"?yield a.default():a.default}:{key:n,value:void 0}})),s=(yield Promise.all(t)).reduce((n,{key:a,value:o})=>(o!==void 0&&(n[a]=o),n),{});return c(c({},s),e)}),X=(i,e)=>Object.entries(e).filter(([t])=>{var r;return(r=i[t])==null?void 0:r.unique}).reduce((t,[r,s])=>(r in i&&(t[r]=s),t),{}),ie=(i,e,t)=>{let r={},s=Object.entries(e).filter(([,n])=>n.unique).reduce((n,[a])=>(n[a]=!0,n),{});return i.forEach(n=>{Object.entries(n).forEach(([a,o])=>{if(a in s)if(r[a]){if(r[a].includes(o))throw new k(t,{[a]:o});r[a]=[...r[a],o]}else r[a]=[o]})}),r},ce=i=>{if(!i)return{};if(!P(i))throw new Error("Config must be an object");if(Object.keys(i).filter(t=>!Z.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${Z.join(", ")}`);return i};function de(i,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${i} must be an integer`)}return e}function ee(i){let e=i.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function pe(i){return new Date(ee(i))}var D=class{constructor(e={}){this.data=e}get exists(){return O(this.data.__id)&&O(this.data.__label)}get id(){if(!O(this.data.__id))throw new Error("DBRecordInstance: Unable to access 'id'. The Record's `data.__id` is missing or incorrect.");return this.data.__id}get label(){if(!O(this.data.__label))throw new Error("DBRecordInstance: Unable to access 'label'. The Record's `data.__label` is missing or incorrect.");return this.data.__label}get proptypes(){if(!O(this.data.__proptypes))throw new Error("DBRecordInstance: Unable to access 'proptypes'. The Record's `data.__proptypes` is missing or incorrect.");return this.data.__proptypes}get date(){try{return pe(this.id)}catch(e){throw new Error("DBRecordInstance: Unable to access 'date'. The Record's `data.__id` is missing or incorrect.")}}get timestamp(){try{return ee(this.id)}catch(e){throw new Error("DBRecordInstance: Unable to access 'timestamp'. The Record's `data.__id` is missing or incorrect.")}}delete(e){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to delete Record. The Record data is undefined.");return yield b.getInstance().records.deleteById(this.id,e)})}update(e,t){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to update Record. The Record data is undefined.");return b.getInstance().records.update({label:this.label,target:this.id,data:e},t)})}set(e,t){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to set. The Record data is undefined.");return b.getInstance().records.set({label:this.label,target:this.id,data:e},t)})}attach(e,t,r){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to attach Record. The Record data is undefined.");return b.getInstance().records.attach({source:this.id,target:e,options:t},r)})}detach(e,t,r){return h(this,null,function*(){if(!O(this.data))throw new Error("DBRecordInstance: Unable to detach Record. The Record data is undefined.");return b.getInstance().records.detach({source:this.id,target:e,options:t},r)})}},E=class{constructor(e=[],t=0,r){this.data=e,this.total=t,this.searchQuery=r}deleteAll(e){return h(this,null,function*(){let t=this.data.map(s=>s.id);return t.length?yield b.getInstance().records.deleteById(t,e):{success:!0}})}next(e){return h(this,null,function*(){var o,d;if(!this.searchQuery)throw new Error("DBRecordsArrayInstance: Cannot paginate \u2014 no searchQuery was provided.");let t=(o=this.searchQuery.skip)!=null?o:0,r=(d=this.searchQuery.limit)!=null?d:100,s=y(c({},this.searchQuery),{skip:t+r}),a=yield b.getInstance().records.find(s,void 0);return e!=null&&e.preserveData?(this.data=[...this.data,...a.data],this.total=a.total,this.searchQuery=s,this):a})}exportCsv(){if(!this.data.length)return"";let e=new Set(["__id","__label","__proptypes"]),t=Object.keys(this.data[0].data).filter(n=>!e.has(n)),r=n=>{let a=n==null?"":String(n);return a.includes(",")||a.includes('"')||a.includes(`
2
2
  `)?`"${a.replace(/"/g,'""')}"`:a},s=this.data.map(n=>t.map(a=>r(n.data[a])).join(","));return[t.join(","),...s].join(`
3
- `)}setProperties(e,t){return h(this,null,function*(){let s=b.getInstance();for(let n=0;n<this.data.length;n+=100){let a=this.data.slice(n,n+100);yield Promise.all(a.map(o=>s.records.update({target:o.id,label:o.data.__label,data:e},t)))}})}};var Ae={"Content-Type":"application/json"},le=({httpClient:i,token:e,url:t})=>(r,a)=>h(void 0,null,function*(){var o=a,{headers:s}=o,n=W(o,["headers"]);let d=yield i.makeRequest(`${t}${r}`,c({credentials:"omit",headers:Object.assign(c(c({},Ae),s),typeof e!="undefined"?{Authorization:`Bearer ${e}`}:{})},n));if(d.getStatusCode()>=200&&d.getStatusCode()<300)return yield d.toJSON();throw new Error(`${d.getStatusCode()}`)});var U=class{constructor(e){this.id=e}rollback(){return h(this,null,function*(){return yield b.getInstance().tx.rollback(this.id)})}commit(){return h(this,null,function*(){return yield b.getInstance().tx.commit(this.id)})}};var he="api.rushdb.com";var ge="https",ye="/api/v1";var w=i=>i?{"x-transaction-id":i}:void 0,Ce=i=>B(i)||i instanceof U,T=i=>Ce(i)?i instanceof U?i.id:i:void 0,ue=i=>/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/.test(i),A=i=>{if(B(i)&&ue(i))return i;if(i instanceof D&&i.data)return i.data.__id;if(P(i)&&"__id"in i&&ue(i.__id))return i.__id},v=i=>!(!P(i)||P(i)&&"name"in i&&!B(i.name)||P(i)&&"type"in i&&(!B(i.type)||!ne.includes(i.type))||!("value"in i)||!G(i.value)||"metadata"in i&&!B(i.metadata)||"valueSeparator"in i&&!B(i.valueSeparator)),me=i=>{let e=ge,t=he,r=443,s=ye;if("url"in i){let a=new URL(i.url);e=a.protocol.replace(":",""),t=a.hostname,r=parseInt(a.port||(e==="http"?"80":e==="https"?"443":""))}"host"in i&&"port"in i&&"protocol"in i&&(e=i.protocol.replace(":",""),t=i.host,r=i.port),s&&!s.startsWith("/")&&(s="/"+s);let n="";return e==="http"&&r===80||e==="https"&&r===443||(n=":"+r),`${e}://${t}${n}${s}`},f=(i=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let r=0;r<i;r++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t};var L=class{constructor(e,t){this.records={attach:(n,a)=>h(this,[n,a],function*({source:e,target:t,options:r},s){var S,m;let o=T(s),p=`/relationships/${A(e)}`,l={headers:Object.assign({},w(o)),method:"POST",requestData:c(c({targetIds:this._extractTargetIds(t,"Attach")},(r==null?void 0:r.type)&&{type:r.type}),(r==null?void 0:r.direction)&&{direction:r.direction})},g=typeof this.logger=="function"?f():"";(S=this.logger)==null||S.call(this,c({requestId:g,path:p},l));let u=yield this.fetcher(p,l);return(m=this.logger)==null||m.call(this,y(c({requestId:g,path:p},l),{responseData:u.data})),u}),detach:(n,a)=>h(this,[n,a],function*({source:e,target:t,options:r},s){var S,m;let o=T(s),p=`/relationships/${A(e)}`,l={headers:Object.assign({},w(o)),method:"PUT",requestData:c(c({targetIds:this._extractTargetIds(t,"Detach")},(r==null?void 0:r.typeOrTypes)&&{typeOrTypes:r.typeOrTypes}),(r==null?void 0:r.direction)&&{direction:r.direction})},g=typeof this.logger=="function"?f():"";(S=this.logger)==null||S.call(this,c({requestId:g,path:p},l));let u=yield this.fetcher(p,l);return(m=this.logger)==null||m.call(this,y(c({requestId:g,path:p},l),{responseData:u.data})),u}),create:(a,o)=>h(this,[a,o],function*({label:e,data:t,options:r,vectors:s},n){var m,R;let d=T(n),p="/records",l={headers:Object.assign({},w(d)),method:"POST",requestData:{}},g=typeof this.logger=="function"?f():"",u=M(F(t));if(I(u)&&u.every(v))l.requestData=c({label:e,properties:u,options:r},(s==null?void 0:s.length)&&{vectors:s});else if($(u))l.requestData=c({label:e,data:u,options:r},(s==null?void 0:s.length)&&{vectors:s});else throw P(u)?new Error("Provided data is not a flat object. Consider using the `importJson` method for nested objects or arrays of nested objects, or use `createMany` for arrays of flat objects."):new Error("Provided data is not valid.");(m=this.logger)==null||m.call(this,c({requestId:g,path:p},l));let S=yield this.fetcher(p,l);return(R=this.logger)==null||R.call(this,y(c({requestId:g,path:p},l),{responseData:S.data})),S!=null&&S.success&&(S!=null&&S.data)?new D(S.data):new D}),createMany:(e,t)=>h(this,null,function*(){var g,u,S,m;let r=I(e.data)?e.data:[e.data];if(!r.every(R=>$(R)))throw new Error("records.createMany supports only flat records (no nested objects/arrays). Use records.importJson for nested JSON.");if(e.vectors&&e.vectors.length>r.length)throw new Error(`records.createMany: vectors length (${e.vectors.length}) exceeds the number of data rows (${r.length}).`);let n=(g=e.vectors)!=null&&g.length?r.map((R,x)=>{var j;return(j=e.vectors[x])!=null&&j.length?y(c({},R),{$vectors:e.vectors[x]}):R}):r,a=T(t),o="/records/import/json",d={headers:Object.assign({},w(a)),method:"POST",requestData:{label:e.label,data:n,options:e.options}},p=typeof this.logger=="function"?f():"";(u=this.logger)==null||u.call(this,c({requestId:p,path:o},d));let l=yield this.fetcher(o,d);if((S=this.logger)==null||S.call(this,y(c({requestId:p,path:o},d),{responseData:l.data})),l!=null&&l.success&&(l!=null&&l.data)){let R=I(l.data)?(m=l.data)==null?void 0:m.map(x=>new D(x)):[];return new E(R,l.total)}return new E([])}),importJson:(e,t)=>h(this,null,function*(){var u,S,m;let{data:r,options:s}=e,{label:n}=e,a=r;if(!n)if(P(r)&&!I(r)){let R=M(r),x=Object.keys(R);if(x.length===1)n=x[0],a=R[n];else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }")}else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }");let o=T(t),d="/records/import/json",p={headers:Object.assign({},w(o)),method:"POST",requestData:{label:n,data:a,options:s}},l=typeof this.logger=="function"?f():"";(u=this.logger)==null||u.call(this,c({requestId:l,path:d},p));let g=yield this.fetcher(d,p);if((S=this.logger)==null||S.call(this,y(c({requestId:l,path:d},p),{responseData:g.data})),g!=null&&g.success&&(g!=null&&g.data)){let R=I(g.data)?(m=g.data)==null?void 0:m.map(x=>new D(x)):[];return new E(R,g.total)}return new E([])}),importCsv:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/records/import/csv",n={headers:Object.assign({},w(r)),method:"POST",requestData:e},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);if((p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o!=null&&o.success&&(o!=null&&o.data)){let l=I(o.data)?o.data.map(g=>new D(g)):[];return new E(l,o.total)}return new E([])}),delete:(e,t)=>h(this,null,function*(){var d,p,l;if(H(e.where)&&!((d=this==null?void 0:this.options)!=null&&d.allowForceDelete))throw new C("You must specify criteria to delete records. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.");let r=T(t),s="/records/delete",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),deleteById:(e,t)=>h(this,null,function*(){var p,l;let r=T(t),s=I(e),n=s?"/records/delete":`/records/${e}`,a={headers:Object.assign({},w(r)),method:s?"POST":"DELETE",requestData:s?{limit:1e3,where:{$id:{$in:e}}}:void 0},o=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:o,path:n},a));let d=yield this.fetcher(n,a);return(l=this.logger)==null||l.call(this,y(c({requestId:o,path:n},a),{responseData:d.data})),d}),export:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/records/export/csv",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),find:(e,t)=>h(this,null,function*(){var u,S;let g=e,{id:r}=g,s=W(g,["id"]),n=T(t),a=r?`/records/${r}/search`:"/records/search",o={headers:Object.assign({},w(n)),method:"POST",requestData:s!=null?s:{}},d=typeof this.logger=="function"?f():"";(u=this.logger)==null||u.call(this,c({requestId:d,path:a},o));let p=yield this.fetcher(a,o);(S=this.logger)==null||S.call(this,y(c({requestId:d,path:a},o),{responseData:p.data}));let l=p.data.map(m=>new D(m));return new E(l,p.total,e)}),findById:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s=I(e)?"/records":`/records/${e}`,n={headers:Object.assign({},w(r)),method:I(e)?"POST":"GET",requestData:I(e)?{ids:e}:void 0},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);if((p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),I(e)){let l=o.data.map(g=>new D(g));return new E(l,o.total)}else return new D(o.data)}),findOne:(e,t)=>h(this,null,function*(){var p,l;let r=T(t),s="/records/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:y(c({},e),{limit:1,skip:0})},a=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);(l=this.logger)==null||l.call(this,y(c({requestId:a,path:s},n),{responseData:o.data}));let[d]=o.data;return new D(d)}),findUniq:(e,t)=>h(this,null,function*(){var p,l;let r=T(t),s="/records/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:y(c({},e),{limit:1,skip:0})},a=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);if((l=this.logger)==null||l.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),typeof o.total!="undefined"&&o.total>1)throw new Q(o.total,e);let[d]=o.data;return new D(d)}),set:(o,d)=>h(this,[o,d],function*({target:e,label:t,data:r,options:s,vectors:n},a){var x,j;let p=T(a),g=`/records/${A(e)}`,u={headers:Object.assign({},w(p)),method:"PUT",requestData:{}},S=typeof this.logger=="function"?f():"",m=M(F(r));if(I(m)&&m.every(v))u.requestData=c({label:t,properties:m},(n==null?void 0:n.length)&&{vectors:n});else if($(m))u.requestData=c({label:t,data:m,options:s},(n==null?void 0:n.length)&&{vectors:n});else throw P(m)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(x=this.logger)==null||x.call(this,c({requestId:S,path:g},u));let R=yield this.fetcher(g,u);return(j=this.logger)==null||j.call(this,y(c({requestId:S,path:g},u),{responseData:R.data})),R!=null&&R.success&&(R!=null&&R.data)?new D(R.data):new D}),update:(a,o)=>h(this,[a,o],function*({target:e,label:t,data:r,options:s},n){var R,x;let d=T(n),l=`/records/${A(e)}`,g={headers:Object.assign({},w(d)),method:"PATCH",requestData:{}},u=typeof this.logger=="function"?f():"",S=M(F(r));if(I(S)&&S.every(v))g.requestData={label:t,properties:S};else if($(S))g.requestData={label:t,data:S,options:s};else throw P(S)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(R=this.logger)==null||R.call(this,c({requestId:u,path:l},g));let m=yield this.fetcher(l,g);return(x=this.logger)==null||x.call(this,y(c({requestId:u,path:l},g),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D}),upsert:(a,o)=>h(this,[a,o],function*({label:e,data:t,options:r,vectors:s},n){var R,x,j;let d=T(n),p="/records",l={headers:Object.assign({},w(d)),method:"POST",requestData:{}},g=typeof this.logger=="function"?f():"",u=M(F(t)),S=y(c({},r),{mergeBy:(R=r==null?void 0:r.mergeBy)!=null?R:[]});if(I(u)&&u.every(v))l.requestData=c({label:e,properties:u,options:S},(s==null?void 0:s.length)&&{vectors:s});else if($(u))l.requestData=c({label:e,data:u,options:S},(s==null?void 0:s.length)&&{vectors:s});else throw P(u)?new Error("Provided data is not a flat object. Upsert supports flat objects or property drafts array."):new Error("Provided data is not valid.");(x=this.logger)==null||x.call(this,c({requestId:g,path:p},l));let m=yield this.fetcher(p,l);return(j=this.logger)==null||j.call(this,y(c({requestId:g,path:p},l),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D})};this.relationships={patterns:{list:()=>h(this,null,function*(){var n,a;let e="/relationships/patterns",t={method:"GET",headers:{}},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s}),analyze:()=>h(this,null,function*(){var n,a;let e="/relationships/patterns/analyze",t={method:"POST",headers:{},requestData:{}},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s}),approve:e=>h(this,null,function*(){var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/approve`,r={method:"POST",headers:{},requestData:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n}),ignore:e=>h(this,null,function*(){var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/ignore`,r={method:"POST",headers:{},requestData:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n}),delete:(e,t)=>h(this,null,function*(){var d,p;let r=t!=null&&t.deleteExisting?"?deleteExisting=true":"",s=`/relationships/patterns/${encodeURIComponent(e)}${r}`,n={method:"DELETE",headers:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o})},createMany:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/relationships/create-many",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),deleteMany:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/relationships/delete-many",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),find:(e,t)=>h(this,null,function*(){var l,g;let r=T(t),s=new URLSearchParams;(e==null?void 0:e.limit)!==void 0&&s.append("limit",e.limit.toString()),(e==null?void 0:e.skip)!==void 0&&s.append("skip",e.skip.toString());let a=`/relationships/search${s.toString()?"?"+s.toString():""}`,o={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},d=typeof this.logger=="function"?f():"";(l=this.logger)==null||l.call(this,c({requestId:d,path:a},o));let p=yield this.fetcher(a,o);return(g=this.logger)==null||g.call(this,y(c({requestId:d,path:a},o),{responseData:p.data})),p})};this.properties={delete:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s=`/properties/${e}`,n={headers:Object.assign({},w(r)),method:"DELETE"},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),find:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/properties/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),findById:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s=`/properties/${e}`,n={headers:Object.assign({},w(r)),method:"GET"},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),values:(e,t,r)=>h(this,null,function*(){var p,l;let s=T(r),n=`/properties/${e}/values`,a={headers:Object.assign({},w(s)),method:"POST",requestData:t!=null?t:{}},o=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:o,path:n},a));let d=yield this.fetcher(n,a);return(l=this.logger)==null||l.call(this,y(c({requestId:o,path:n},a),{responseData:d.data})),d})};this.labels={find:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/labels/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o})};this.tx={begin:e=>h(this,null,function*(){var a,o;let t="/tx",r={method:"POST",requestData:P(e)&&"ttl"in e?e:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),new U(n.data.id)}),commit:e=>h(this,null,function*(){var o,d;let r=`/tx/${T(e)}/commit`,s={method:"POST",requestData:{}},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),a}),get:e=>h(this,null,function*(){var o,d;let r=`/tx/${T(e)}`,s={method:"GET"},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),new U(a.data.id)}),rollback:e=>h(this,null,function*(){var o,d;let r=`/tx/${T(e)}/rollback`,s={method:"POST",requestData:{}},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),a})};this.settings={get:()=>h(this,null,function*(){var n,a;let e="/sdk/settings",t={method:"GET"},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s})};this.query={raw:(s,n)=>h(this,[s,n],function*({query:e,params:t},r){var g,u;let a=T(r),o="/query/raw",d={headers:Object.assign({},w(a)),method:"POST",requestData:{query:e,params:t}},p=typeof this.logger=="function"?f():"";(g=this.logger)==null||g.call(this,c({requestId:p,path:o},d));let l=yield this.fetcher(o,d);return(u=this.logger)==null||u.call(this,y(c({requestId:p,path:o},d),{responseData:l.data})),l})};this.ai={getOntology:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/ai/ontology",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),getOntologyMarkdown:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/ai/ontology/md",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),indexes:{find:()=>h(this,null,function*(){var n,a;let e="/ai/indexes",t={method:"GET",headers:{}},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s}),create:e=>h(this,null,function*(){var l,g;let t="/ai/indexes",p=e,{external:r}=p,s=W(p,["external"]),n=r===!0?y(c({},s),{sourceType:"external"}):s,a={method:"POST",headers:{},requestData:n},o=typeof this.logger=="function"?f():"";(l=this.logger)==null||l.call(this,c({requestId:o,path:t},a));let d=yield this.fetcher(t,a);return(g=this.logger)==null||g.call(this,y(c({requestId:o,path:t},a),{responseData:d.data})),d}),upsertVectors:(e,t)=>h(this,null,function*(){var o,d;let r=`/ai/indexes/${e}/vectors/upsert`,s={method:"POST",headers:{},requestData:t},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),a}),delete:e=>h(this,null,function*(){var a,o;let t=`/ai/indexes/${e}`,r={method:"DELETE",headers:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n}),stats:e=>h(this,null,function*(){var a,o;let t=`/ai/indexes/${e}/stats`,r={method:"GET",headers:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n})},search:e=>h(this,null,function*(){var o,d,p,l;let t="/ai/search",r={method:"POST",headers:{},requestData:e},s=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);(d=this.logger)==null||d.call(this,y(c({requestId:s,path:t},r),{responseData:n.data}));let a=((p=n.data)!=null?p:[]).map(g=>new D(g));return new E(a,(l=n.total)!=null?l:0)})};if(this.fetcher=null,t!=null&&t.httpClient){let r=me(t);this.fetcher=le({httpClient:t.httpClient,token:e,url:r})}t!=null&&t.options&&(this.options=t==null?void 0:t.options),t!=null&&t.logger&&(this.logger=t==null?void 0:t.logger)}_extractTargetIds(e,t){var r;if(e instanceof D){let s=A(e);if(!s)throw new C(`${t} error: Target id is empty`);return[s]}if(I(e)&&e.every(s=>s instanceof D)){let s=e.map(A).filter(O);if(!s.length)throw new C(`${t} error: Target ids are empty`);return s}if(e instanceof E){let s=(r=e.data)==null?void 0:r.map(A).filter(O);if(!(s!=null&&s.length))throw new C(`${t} error: Target ids are empty`);return s}if(P(e)&&"__id"in e)return[e.__id];if(I(e)&&e.every(s=>P(s)&&"__id"in s)){let s=e.map(A).filter(O);if(!s.length)throw new C(`${t} error: Target ids are empty`);return s}return I(e)?e:B(e)?[e]:[]}};var fe,_=class _ extends L{constructor(e,t){var n,a;let r=e!=null?e:typeof process!="undefined"?(n=process.env)==null?void 0:n.RUSHDB_API_KEY:void 0,s=ce(t);super(r,y(c({},s),{httpClient:(a=s.httpClient)!=null?a:fe})),_.instance=this,this.initializeSync(r,s)}initializeSync(e,t){_.state={initialized:!0,debug:!1,timeout:de("timeout",t==null?void 0:t.timeout,8e4),token:e}}static getInstance(){if(_.instance)return _.instance;throw new Error('RushDB not initialized. Please create a RushDB instance first: new RushDB("RUSHDB_API_KEY")')}static isInitialized(){return O(_.instance)}toDBRecordInstance(e){return new D(e)}};_.instance=null,_.state={initialized:!1,debug:!1,timeout:8e4};var b=_,Se=i=>{fe=i};var Re=class{constructor(e,t,r){this.label=e,this.schema=t,this.config=r!=null?r:{}}getLabel(){return this.label}toDBRecordInstance(e){return h(this,null,function*(){try{return b.getInstance().toDBRecordInstance(e)}catch(t){throw new Error("No RushDB instance was provided during model initialization.")}})}find(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.find(y(c({},r),{labels:[this.label]}),t)})}findOne(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findOne(y(c({},r),{labels:[this.label]}),t)})}findById(e,t){return h(this,null,function*(){return this.findOne({where:{$id:e}},t)})}findUniq(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findUniq(y(c({},r),{labels:[this.label]}),t)})}create(e,t,r){return h(this,null,function*(){var d,p;let s=yield J(this.schema,e),n=X(this.schema,s),a=O(n),o=b.getInstance();if(a){let l=t!=null?t:yield o.tx.begin(),g=yield this.find({where:n},l),u=typeof t!="undefined";if(!((d=g==null?void 0:g.data)!=null&&d.length)){let m=yield o.records.create({label:this.label,data:s},l);return u||(yield l.commit()),m}else switch((p=r==null?void 0:r.onConflict)!=null?p:"throw"){case"upsert":{let R=g.data[0],x=yield o.records.set({target:R.id,label:this.label,data:s},l);return u||(yield l.commit()),x}case"skip":return u||(yield l.commit()),null;default:throw u||(yield l.commit()),new k(this.label,n)}}return yield o.records.create({label:this.label,data:s},t)})}attach(n,a){return h(this,arguments,function*({source:e,target:t,options:r},s){return yield b.getInstance().records.attach({source:e,target:t,options:r},s)})}detach(n,a){return h(this,arguments,function*({source:e,target:t,options:r},s){return yield b.getInstance().records.detach({source:e,target:t,options:r},s)})}validateTargetLabel(e,t){return h(this,null,function*(){let r=A(e);if(!r)return;let n=yield b.getInstance().records.findById(r,t);if(!n)throw new Error(`Record with id "${r}" not found.`);if(n.data.__label!==this.label)throw new TypeError(`Target record label "${n.data.__label}" does not match model label "${this.label}".`)})}handleSetOrUpdate(e,t,r,s){return h(this,null,function*(){var d,p;if(this.config.validateTargetLabel&&(yield this.validateTargetLabel(e,s)),I(t)&&t.every(v))return yield b.getInstance().records[r]({label:this.label,target:e,data:t},s);let n=b.getInstance(),a=yield J(this.schema,t),o=X(this.schema,a);if(!H(o)){let l=s!=null?s:yield n.tx.begin(),g=yield this.find({where:o},l),u=typeof s!="undefined";if(!((d=g==null?void 0:g.data)!=null&&d.length)||g.data.length===1&&((p=g.data[0])==null?void 0:p.id)===A(e)){let m=yield n.records[r]({target:e,label:this.label,data:a},l);return u||(yield l.commit()),m}else throw u||(yield l.commit()),new k(this.label,o)}return yield n.records[r]({label:this.label,target:e,data:a},s)})}set(e,t,r){return h(this,null,function*(){return yield this.handleSetOrUpdate(e,t,"set",r)})}update(e,t,r){return h(this,null,function*(){return yield this.handleSetOrUpdate(e,t,"update",r)})}createMany(e,t){return h(this,null,function*(){var a;let r=b.getInstance(),s=typeof t!="undefined",n=t!=null?t:yield r.tx.begin();try{let o=yield Promise.all(e.map(l=>h(this,null,function*(){return yield J(this.schema,l)}))),d=ie(o,this.schema,this.label);if(!H(d)){let l=Object.entries(d).map(([u,S])=>({[u]:{$in:S}})),g=yield this.find({where:{$or:l}},n);if((a=g==null?void 0:g.data)!=null&&a.length)throw new k(this.label,Object.keys(d))}let p=yield r.records.createMany({label:this.label,data:o},n);return s||(yield n.commit()),p}catch(o){throw s||(yield n.rollback()),o}})}delete(e,t){return h(this,null,function*(){if(H(e.where))throw new C(`You must specify criteria to delete records of type '${this.label}'. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.`);return yield b.getInstance().records.delete(y(c({},e),{labels:[this.label]}),t)})}deleteById(e,t){return h(this,null,function*(){return yield b.getInstance().records.deleteById(e,t)})}};Se(new K);var Ft=b;export{D as DBRecordInstance,E as DBRecordsArrayInstance,C as EmptyTargetError,q as HttpClient,Y as HttpClientResponse,Re as Model,Q as NonUniqueResultError,L as RestAPI,b as RushDB,U as Transaction,k as UniquenessError,Ft as default,pe as idToDate,ee as idToTimestamp,Se as initSDK,J as mergeDefaultsWithPayload,ce as parseConfig,X as pickUniqFieldsFromRecord,ie as pickUniqFieldsFromRecords,de as validateInteger};
3
+ `)}setProperties(e,t){return h(this,null,function*(){let s=b.getInstance();for(let n=0;n<this.data.length;n+=100){let a=this.data.slice(n,n+100);yield Promise.all(a.map(o=>s.records.update({target:o.id,label:o.data.__label,data:e},t)))}})}};var Ae={"Content-Type":"application/json"},le=({httpClient:i,token:e,url:t})=>(r,a)=>h(void 0,null,function*(){var o=a,{headers:s}=o,n=W(o,["headers"]);let d=yield i.makeRequest(`${t}${r}`,c({credentials:"omit",headers:Object.assign(c(c({},Ae),s),typeof e!="undefined"?{Authorization:`Bearer ${e}`}:{})},n));if(d.getStatusCode()>=200&&d.getStatusCode()<300)return yield d.toJSON();throw new Error(`${d.getStatusCode()}`)});var U=class{constructor(e){this.id=e}rollback(){return h(this,null,function*(){return yield b.getInstance().tx.rollback(this.id)})}commit(){return h(this,null,function*(){return yield b.getInstance().tx.commit(this.id)})}};var he="api.rushdb.com";var ge="https",ye="/api/v1";var w=i=>i?{"x-transaction-id":i}:void 0,Ce=i=>B(i)||i instanceof U,T=i=>Ce(i)?i instanceof U?i.id:i:void 0,ue=i=>/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/.test(i),A=i=>{if(B(i)&&ue(i))return i;if(i instanceof D&&i.data)return i.data.__id;if(P(i)&&"__id"in i&&ue(i.__id))return i.__id},v=i=>!(!P(i)||P(i)&&"name"in i&&!B(i.name)||P(i)&&"type"in i&&(!B(i.type)||!ne.includes(i.type))||!("value"in i)||!G(i.value)||"metadata"in i&&!B(i.metadata)||"valueSeparator"in i&&!B(i.valueSeparator)),me=i=>{let e=ge,t=he,r=443,s=ye;if("url"in i){let a=new URL(i.url);e=a.protocol.replace(":",""),t=a.hostname,r=parseInt(a.port||(e==="http"?"80":e==="https"?"443":""))}"host"in i&&"port"in i&&"protocol"in i&&(e=i.protocol.replace(":",""),t=i.host,r=i.port),s&&!s.startsWith("/")&&(s="/"+s);let n="";return e==="http"&&r===80||e==="https"&&r===443||(n=":"+r),`${e}://${t}${n}${s}`},f=(i=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let r=0;r<i;r++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t};var L=class{constructor(e,t){this.records={attach:(n,a)=>h(this,[n,a],function*({source:e,target:t,options:r},s){var S,m;let o=T(s),p=`/relationships/${A(e)}`,l={headers:Object.assign({},w(o)),method:"POST",requestData:c(c(c({targetIds:this._extractTargetIds(t,"Attach")},(r==null?void 0:r.type)&&{type:r.type}),(r==null?void 0:r.direction)&&{direction:r.direction}),(r==null?void 0:r.properties)&&{properties:r.properties})},g=typeof this.logger=="function"?f():"";(S=this.logger)==null||S.call(this,c({requestId:g,path:p},l));let u=yield this.fetcher(p,l);return(m=this.logger)==null||m.call(this,y(c({requestId:g,path:p},l),{responseData:u.data})),u}),detach:(n,a)=>h(this,[n,a],function*({source:e,target:t,options:r},s){var S,m;let o=T(s),p=`/relationships/${A(e)}`,l={headers:Object.assign({},w(o)),method:"PUT",requestData:c(c({targetIds:this._extractTargetIds(t,"Detach")},(r==null?void 0:r.typeOrTypes)&&{typeOrTypes:r.typeOrTypes}),(r==null?void 0:r.direction)&&{direction:r.direction})},g=typeof this.logger=="function"?f():"";(S=this.logger)==null||S.call(this,c({requestId:g,path:p},l));let u=yield this.fetcher(p,l);return(m=this.logger)==null||m.call(this,y(c({requestId:g,path:p},l),{responseData:u.data})),u}),create:(a,o)=>h(this,[a,o],function*({label:e,data:t,options:r,vectors:s},n){var m,R;let d=T(n),p="/records",l={headers:Object.assign({},w(d)),method:"POST",requestData:{}},g=typeof this.logger=="function"?f():"",u=M(F(t));if(I(u)&&u.every(v))l.requestData=c({label:e,properties:u,options:r},(s==null?void 0:s.length)&&{vectors:s});else if($(u))l.requestData=c({label:e,data:u,options:r},(s==null?void 0:s.length)&&{vectors:s});else throw P(u)?new Error("Provided data is not a flat object. Consider using the `importJson` method for nested objects or arrays of nested objects, or use `createMany` for arrays of flat objects."):new Error("Provided data is not valid.");(m=this.logger)==null||m.call(this,c({requestId:g,path:p},l));let S=yield this.fetcher(p,l);return(R=this.logger)==null||R.call(this,y(c({requestId:g,path:p},l),{responseData:S.data})),S!=null&&S.success&&(S!=null&&S.data)?new D(S.data):new D}),createMany:(e,t)=>h(this,null,function*(){var g,u,S,m;let r=I(e.data)?e.data:[e.data];if(!r.every(R=>$(R)))throw new Error("records.createMany supports only flat records (no nested objects/arrays). Use records.importJson for nested JSON.");if(e.vectors&&e.vectors.length>r.length)throw new Error(`records.createMany: vectors length (${e.vectors.length}) exceeds the number of data rows (${r.length}).`);let n=(g=e.vectors)!=null&&g.length?r.map((R,x)=>{var j;return(j=e.vectors[x])!=null&&j.length?y(c({},R),{$vectors:e.vectors[x]}):R}):r,a=T(t),o="/records/import/json",d={headers:Object.assign({},w(a)),method:"POST",requestData:{label:e.label,data:n,options:e.options}},p=typeof this.logger=="function"?f():"";(u=this.logger)==null||u.call(this,c({requestId:p,path:o},d));let l=yield this.fetcher(o,d);if((S=this.logger)==null||S.call(this,y(c({requestId:p,path:o},d),{responseData:l.data})),l!=null&&l.success&&(l!=null&&l.data)){let R=I(l.data)?(m=l.data)==null?void 0:m.map(x=>new D(x)):[];return new E(R,l.total)}return new E([])}),importJson:(e,t)=>h(this,null,function*(){var u,S,m;let{data:r,options:s}=e,{label:n}=e,a=r;if(!n)if(P(r)&&!I(r)){let R=M(r),x=Object.keys(R);if(x.length===1)n=x[0],a=R[n];else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }")}else throw new Error("records.importJson: Missing `label`. Provide `label` or pass an object with a single top-level key that determines the label, e.g. { ITEM: [...] }");let o=T(t),d="/records/import/json",p={headers:Object.assign({},w(o)),method:"POST",requestData:{label:n,data:a,options:s}},l=typeof this.logger=="function"?f():"";(u=this.logger)==null||u.call(this,c({requestId:l,path:d},p));let g=yield this.fetcher(d,p);if((S=this.logger)==null||S.call(this,y(c({requestId:l,path:d},p),{responseData:g.data})),g!=null&&g.success&&(g!=null&&g.data)){let R=I(g.data)?(m=g.data)==null?void 0:m.map(x=>new D(x)):[];return new E(R,g.total)}return new E([])}),importCsv:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/records/import/csv",n={headers:Object.assign({},w(r)),method:"POST",requestData:e},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);if((p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o!=null&&o.success&&(o!=null&&o.data)){let l=I(o.data)?o.data.map(g=>new D(g)):[];return new E(l,o.total)}return new E([])}),delete:(e,t)=>h(this,null,function*(){var d,p,l;if(H(e.where)&&!((d=this==null?void 0:this.options)!=null&&d.allowForceDelete))throw new C("You must specify criteria to delete records. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.");let r=T(t),s="/records/delete",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),deleteById:(e,t)=>h(this,null,function*(){var p,l;let r=T(t),s=I(e),n=s?"/records/delete":`/records/${e}`,a={headers:Object.assign({},w(r)),method:s?"POST":"DELETE",requestData:s?{limit:1e3,where:{$id:{$in:e}}}:void 0},o=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:o,path:n},a));let d=yield this.fetcher(n,a);return(l=this.logger)==null||l.call(this,y(c({requestId:o,path:n},a),{responseData:d.data})),d}),export:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/records/export/csv",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),find:(e,t)=>h(this,null,function*(){var u,S;let g=e,{id:r}=g,s=W(g,["id"]),n=T(t),a=r?`/records/${r}/search`:"/records/search",o={headers:Object.assign({},w(n)),method:"POST",requestData:s!=null?s:{}},d=typeof this.logger=="function"?f():"";(u=this.logger)==null||u.call(this,c({requestId:d,path:a},o));let p=yield this.fetcher(a,o);(S=this.logger)==null||S.call(this,y(c({requestId:d,path:a},o),{responseData:p.data}));let l=p.data.map(m=>new D(m));return new E(l,p.total,e)}),findById:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s=I(e)?"/records":`/records/${e}`,n={headers:Object.assign({},w(r)),method:I(e)?"POST":"GET",requestData:I(e)?{ids:e}:void 0},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);if((p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),I(e)){let l=o.data.map(g=>new D(g));return new E(l,o.total)}else return new D(o.data)}),findOne:(e,t)=>h(this,null,function*(){var p,l;let r=T(t),s="/records/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:y(c({},e),{limit:1,skip:0})},a=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);(l=this.logger)==null||l.call(this,y(c({requestId:a,path:s},n),{responseData:o.data}));let[d]=o.data;return new D(d)}),findUniq:(e,t)=>h(this,null,function*(){var p,l;let r=T(t),s="/records/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:y(c({},e),{limit:1,skip:0})},a=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);if((l=this.logger)==null||l.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),typeof o.total!="undefined"&&o.total>1)throw new K(o.total,e);let[d]=o.data;return new D(d)}),set:(o,d)=>h(this,[o,d],function*({target:e,label:t,data:r,options:s,vectors:n},a){var x,j;let p=T(a),g=`/records/${A(e)}`,u={headers:Object.assign({},w(p)),method:"PUT",requestData:{}},S=typeof this.logger=="function"?f():"",m=M(F(r));if(I(m)&&m.every(v))u.requestData=c({label:t,properties:m},(n==null?void 0:n.length)&&{vectors:n});else if($(m))u.requestData=c({label:t,data:m,options:s},(n==null?void 0:n.length)&&{vectors:n});else throw P(m)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(x=this.logger)==null||x.call(this,c({requestId:S,path:g},u));let R=yield this.fetcher(g,u);return(j=this.logger)==null||j.call(this,y(c({requestId:S,path:g},u),{responseData:R.data})),R!=null&&R.success&&(R!=null&&R.data)?new D(R.data):new D}),update:(a,o)=>h(this,[a,o],function*({target:e,label:t,data:r,options:s},n){var R,x;let d=T(n),l=`/records/${A(e)}`,g={headers:Object.assign({},w(d)),method:"PATCH",requestData:{}},u=typeof this.logger=="function"?f():"",S=M(F(r));if(I(S)&&S.every(v))g.requestData={label:t,properties:S};else if($(S))g.requestData={label:t,data:S,options:s};else throw P(S)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(R=this.logger)==null||R.call(this,c({requestId:u,path:l},g));let m=yield this.fetcher(l,g);return(x=this.logger)==null||x.call(this,y(c({requestId:u,path:l},g),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D}),upsert:(a,o)=>h(this,[a,o],function*({label:e,data:t,options:r,vectors:s},n){var R,x,j;let d=T(n),p="/records",l={headers:Object.assign({},w(d)),method:"POST",requestData:{}},g=typeof this.logger=="function"?f():"",u=M(F(t)),S=y(c({},r),{mergeBy:(R=r==null?void 0:r.mergeBy)!=null?R:[]});if(I(u)&&u.every(v))l.requestData=c({label:e,properties:u,options:S},(s==null?void 0:s.length)&&{vectors:s});else if($(u))l.requestData=c({label:e,data:u,options:S},(s==null?void 0:s.length)&&{vectors:s});else throw P(u)?new Error("Provided data is not a flat object. Upsert supports flat objects or property drafts array."):new Error("Provided data is not valid.");(x=this.logger)==null||x.call(this,c({requestId:g,path:p},l));let m=yield this.fetcher(p,l);return(j=this.logger)==null||j.call(this,y(c({requestId:g,path:p},l),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D})};this.relationships={patterns:{list:()=>h(this,null,function*(){var n,a;let e="/relationships/patterns",t={method:"GET",headers:{}},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s}),analyze:()=>h(this,null,function*(){var n,a;let e="/relationships/patterns/analyze",t={method:"POST",headers:{},requestData:{}},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s}),approve:e=>h(this,null,function*(){var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/approve`,r={method:"POST",headers:{},requestData:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n}),ignore:e=>h(this,null,function*(){var a,o;let t=`/relationships/patterns/${encodeURIComponent(e)}/ignore`,r={method:"POST",headers:{},requestData:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n}),delete:(e,t)=>h(this,null,function*(){var d,p;let r=t!=null&&t.deleteExisting?"?deleteExisting=true":"",s=`/relationships/patterns/${encodeURIComponent(e)}${r}`,n={method:"DELETE",headers:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o})},createMany:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/relationships/create-many",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),deleteMany:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/relationships/delete-many",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),find:(...r)=>h(this,[...r],function*(e={},t){var g,u;let s=T(t),n=new URLSearchParams;(e==null?void 0:e.limit)!==void 0&&n.append("limit",e.limit.toString()),(e==null?void 0:e.skip)!==void 0&&n.append("skip",e.skip.toString());let o=`/relationships/search${n.toString()?"?"+n.toString():""}`,d={headers:Object.assign({},w(s)),method:"POST",requestData:e!=null?e:{}},p=typeof this.logger=="function"?f():"";(g=this.logger)==null||g.call(this,c({requestId:p,path:o},d));let l=yield this.fetcher(o,d);return(u=this.logger)==null||u.call(this,y(c({requestId:p,path:o},d),{responseData:l.data})),l})};this.properties={delete:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s=`/properties/${e}`,n={headers:Object.assign({},w(r)),method:"DELETE"},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),find:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/properties/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),findById:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s=`/properties/${e}`,n={headers:Object.assign({},w(r)),method:"GET"},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),values:(e,t,r)=>h(this,null,function*(){var p,l;let s=T(r),n=`/properties/${e}/values`,a={headers:Object.assign({},w(s)),method:"POST",requestData:t!=null?t:{}},o=typeof this.logger=="function"?f():"";(p=this.logger)==null||p.call(this,c({requestId:o,path:n},a));let d=yield this.fetcher(n,a);return(l=this.logger)==null||l.call(this,y(c({requestId:o,path:n},a),{responseData:d.data})),d})};this.labels={find:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/labels/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o})};this.tx={begin:e=>h(this,null,function*(){var a,o;let t="/tx",r={method:"POST",requestData:P(e)&&"ttl"in e?e:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),new U(n.data.id)}),commit:e=>h(this,null,function*(){var o,d;let r=`/tx/${T(e)}/commit`,s={method:"POST",requestData:{}},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),a}),get:e=>h(this,null,function*(){var o,d;let r=`/tx/${T(e)}`,s={method:"GET"},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),new U(a.data.id)}),rollback:e=>h(this,null,function*(){var o,d;let r=`/tx/${T(e)}/rollback`,s={method:"POST",requestData:{}},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),a})};this.settings={get:()=>h(this,null,function*(){var n,a;let e="/sdk/settings",t={method:"GET"},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s})};this.query={raw:(s,n)=>h(this,[s,n],function*({query:e,params:t},r){var g,u;let a=T(r),o="/query/raw",d={headers:Object.assign({},w(a)),method:"POST",requestData:{query:e,params:t}},p=typeof this.logger=="function"?f():"";(g=this.logger)==null||g.call(this,c({requestId:p,path:o},d));let l=yield this.fetcher(o,d);return(u=this.logger)==null||u.call(this,y(c({requestId:p,path:o},d),{responseData:l.data})),l})};this.ai={getOntology:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/ai/ontology",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),getOntologyMarkdown:(e,t)=>h(this,null,function*(){var d,p;let r=T(t),s="/ai/ontology/md",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?f():"";(d=this.logger)==null||d.call(this,c({requestId:a,path:s},n));let o=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(c({requestId:a,path:s},n),{responseData:o.data})),o}),indexes:{find:()=>h(this,null,function*(){var n,a;let e="/ai/indexes",t={method:"GET",headers:{}},r=typeof this.logger=="function"?f():"";(n=this.logger)==null||n.call(this,c({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(c({requestId:r,path:e},t),{responseData:s.data})),s}),create:e=>h(this,null,function*(){var l,g;let t="/ai/indexes",p=e,{external:r}=p,s=W(p,["external"]),n=r===!0?y(c({},s),{sourceType:"external"}):s,a={method:"POST",headers:{},requestData:n},o=typeof this.logger=="function"?f():"";(l=this.logger)==null||l.call(this,c({requestId:o,path:t},a));let d=yield this.fetcher(t,a);return(g=this.logger)==null||g.call(this,y(c({requestId:o,path:t},a),{responseData:d.data})),d}),upsertVectors:(e,t)=>h(this,null,function*(){var o,d;let r=`/ai/indexes/${e}/vectors/upsert`,s={method:"POST",headers:{},requestData:t},n=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,y(c({requestId:n,path:r},s),{responseData:a.data})),a}),delete:e=>h(this,null,function*(){var a,o;let t=`/ai/indexes/${e}`,r={method:"DELETE",headers:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n}),stats:e=>h(this,null,function*(){var a,o;let t=`/ai/indexes/${e}/stats`,r={method:"GET",headers:{}},s=typeof this.logger=="function"?f():"";(a=this.logger)==null||a.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,y(c({requestId:s,path:t},r),{responseData:n.data})),n})},search:e=>h(this,null,function*(){var o,d,p,l;let t="/ai/search",r={method:"POST",headers:{},requestData:e},s=typeof this.logger=="function"?f():"";(o=this.logger)==null||o.call(this,c({requestId:s,path:t},r));let n=yield this.fetcher(t,r);(d=this.logger)==null||d.call(this,y(c({requestId:s,path:t},r),{responseData:n.data}));let a=((p=n.data)!=null?p:[]).map(g=>new D(g));return new E(a,(l=n.total)!=null?l:0)})};if(this.fetcher=null,t!=null&&t.httpClient){let r=me(t);this.fetcher=le({httpClient:t.httpClient,token:e,url:r})}t!=null&&t.options&&(this.options=t==null?void 0:t.options),t!=null&&t.logger&&(this.logger=t==null?void 0:t.logger)}_extractTargetIds(e,t){var r;if(e instanceof D){let s=A(e);if(!s)throw new C(`${t} error: Target id is empty`);return[s]}if(I(e)&&e.every(s=>s instanceof D)){let s=e.map(A).filter(O);if(!s.length)throw new C(`${t} error: Target ids are empty`);return s}if(e instanceof E){let s=(r=e.data)==null?void 0:r.map(A).filter(O);if(!(s!=null&&s.length))throw new C(`${t} error: Target ids are empty`);return s}if(P(e)&&"__id"in e)return[e.__id];if(I(e)&&e.every(s=>P(s)&&"__id"in s)){let s=e.map(A).filter(O);if(!s.length)throw new C(`${t} error: Target ids are empty`);return s}return I(e)?e:B(e)?[e]:[]}};var fe,_=class _ extends L{constructor(e,t){var n,a;let r=e!=null?e:typeof process!="undefined"?(n=process.env)==null?void 0:n.RUSHDB_API_KEY:void 0,s=ce(t);super(r,y(c({},s),{httpClient:(a=s.httpClient)!=null?a:fe})),_.instance=this,this.initializeSync(r,s)}initializeSync(e,t){_.state={initialized:!0,debug:!1,timeout:de("timeout",t==null?void 0:t.timeout,8e4),token:e}}static getInstance(){if(_.instance)return _.instance;throw new Error('RushDB not initialized. Please create a RushDB instance first: new RushDB("RUSHDB_API_KEY")')}static isInitialized(){return O(_.instance)}toDBRecordInstance(e){return new D(e)}};_.instance=null,_.state={initialized:!1,debug:!1,timeout:8e4};var b=_,Se=i=>{fe=i};var Re=class{constructor(e,t,r){this.label=e,this.schema=t,this.config=r!=null?r:{}}getLabel(){return this.label}toDBRecordInstance(e){return h(this,null,function*(){try{return b.getInstance().toDBRecordInstance(e)}catch(t){throw new Error("No RushDB instance was provided during model initialization.")}})}find(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.find(y(c({},r),{labels:[this.label]}),t)})}findOne(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findOne(y(c({},r),{labels:[this.label]}),t)})}findById(e,t){return h(this,null,function*(){return this.findOne({where:{$id:e}},t)})}findUniq(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findUniq(y(c({},r),{labels:[this.label]}),t)})}create(e,t,r){return h(this,null,function*(){var d,p;let s=yield J(this.schema,e),n=X(this.schema,s),a=O(n),o=b.getInstance();if(a){let l=t!=null?t:yield o.tx.begin(),g=yield this.find({where:n},l),u=typeof t!="undefined";if(!((d=g==null?void 0:g.data)!=null&&d.length)){let m=yield o.records.create({label:this.label,data:s},l);return u||(yield l.commit()),m}else switch((p=r==null?void 0:r.onConflict)!=null?p:"throw"){case"upsert":{let R=g.data[0],x=yield o.records.set({target:R.id,label:this.label,data:s},l);return u||(yield l.commit()),x}case"skip":return u||(yield l.commit()),null;default:throw u||(yield l.commit()),new k(this.label,n)}}return yield o.records.create({label:this.label,data:s},t)})}attach(n,a){return h(this,arguments,function*({source:e,target:t,options:r},s){return yield b.getInstance().records.attach({source:e,target:t,options:r},s)})}detach(n,a){return h(this,arguments,function*({source:e,target:t,options:r},s){return yield b.getInstance().records.detach({source:e,target:t,options:r},s)})}validateTargetLabel(e,t){return h(this,null,function*(){let r=A(e);if(!r)return;let n=yield b.getInstance().records.findById(r,t);if(!n)throw new Error(`Record with id "${r}" not found.`);if(n.data.__label!==this.label)throw new TypeError(`Target record label "${n.data.__label}" does not match model label "${this.label}".`)})}handleSetOrUpdate(e,t,r,s){return h(this,null,function*(){var d,p;if(this.config.validateTargetLabel&&(yield this.validateTargetLabel(e,s)),I(t)&&t.every(v))return yield b.getInstance().records[r]({label:this.label,target:e,data:t},s);let n=b.getInstance(),a=yield J(this.schema,t),o=X(this.schema,a);if(!H(o)){let l=s!=null?s:yield n.tx.begin(),g=yield this.find({where:o},l),u=typeof s!="undefined";if(!((d=g==null?void 0:g.data)!=null&&d.length)||g.data.length===1&&((p=g.data[0])==null?void 0:p.id)===A(e)){let m=yield n.records[r]({target:e,label:this.label,data:a},l);return u||(yield l.commit()),m}else throw u||(yield l.commit()),new k(this.label,o)}return yield n.records[r]({label:this.label,target:e,data:a},s)})}set(e,t,r){return h(this,null,function*(){return yield this.handleSetOrUpdate(e,t,"set",r)})}update(e,t,r){return h(this,null,function*(){return yield this.handleSetOrUpdate(e,t,"update",r)})}createMany(e,t){return h(this,null,function*(){var a;let r=b.getInstance(),s=typeof t!="undefined",n=t!=null?t:yield r.tx.begin();try{let o=yield Promise.all(e.map(l=>h(this,null,function*(){return yield J(this.schema,l)}))),d=ie(o,this.schema,this.label);if(!H(d)){let l=Object.entries(d).map(([u,S])=>({[u]:{$in:S}})),g=yield this.find({where:{$or:l}},n);if((a=g==null?void 0:g.data)!=null&&a.length)throw new k(this.label,Object.keys(d))}let p=yield r.records.createMany({label:this.label,data:o},n);return s||(yield n.commit()),p}catch(o){throw s||(yield n.rollback()),o}})}delete(e,t){return h(this,null,function*(){if(H(e.where))throw new C(`You must specify criteria to delete records of type '${this.label}'. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.`);return yield b.getInstance().records.delete(y(c({},e),{labels:[this.label]}),t)})}deleteById(e,t){return h(this,null,function*(){return yield b.getInstance().records.deleteById(e,t)})}};Se(new Q);var Ft=b;export{D as DBRecordInstance,E as DBRecordsArrayInstance,C as EmptyTargetError,q as HttpClient,Y as HttpClientResponse,Re as Model,K as NonUniqueResultError,L as RestAPI,b as RushDB,U as Transaction,k as UniquenessError,Ft as default,pe as idToDate,ee as idToTimestamp,Se as initSDK,J as mergeDefaultsWithPayload,ce as parseConfig,X as pickUniqFieldsFromRecord,ie as pickUniqFieldsFromRecords,de as validateInteger};
@@ -53,6 +53,8 @@ export type Relation = {
53
53
  targetId: string;
54
54
  targetLabel: string;
55
55
  type: string;
56
+ direction: RelationDirection;
57
+ properties: Record<string, unknown>;
56
58
  };
57
59
  /**
58
60
  * Direction of a relationship.
@@ -65,6 +67,7 @@ export type RelationDirection = 'in' | 'out';
65
67
  export type RelationOptions = {
66
68
  direction?: RelationDirection;
67
69
  type?: string;
70
+ properties?: Record<string, unknown>;
68
71
  };
69
72
  /**
70
73
  * Options for detaching (removing) relationships.
@@ -1,11 +1,11 @@
1
1
  import type { PROPERTY_TYPE_BOOLEAN, PROPERTY_TYPE_DATETIME, PROPERTY_TYPE_NULL, PROPERTY_TYPE_NUMBER, PROPERTY_TYPE_STRING } from '../common/constants.js';
2
2
  import type { MaybeArray, RequireAtLeastOne } from './utils.js';
3
3
  import type { BooleanValue, DatetimeObject, DatetimeValue, NullValue, NumberValue, PropertyType, StringValue } from './value.js';
4
- export type DatetimeExpression = DatetimeValue | RequireAtLeastOne<Record<'$gt' | '$gte' | '$lt' | '$lte' | '$ne', DatetimeObject | DatetimeValue> & Record<'$in' | '$nin', Array<DatetimeObject | DatetimeValue>> & Record<'$exists', BooleanValue>>;
5
- export type BooleanExpression = BooleanValue | Record<'$ne' | '$exists', BooleanValue>;
6
- export type NullExpression = NullValue | Record<'$ne' | '$exists', NullValue | BooleanValue>;
7
- export type NumberExpression = NumberValue | RequireAtLeastOne<Record<'$gt' | '$gte' | '$lt' | '$lte' | '$ne', NumberValue> & Record<'$in' | '$nin', Array<NumberValue>> & Record<'$exists', BooleanValue>>;
8
- export type StringExpression = StringValue | RequireAtLeastOne<Record<'$contains' | '$endsWith' | '$ne' | '$startsWith', StringValue> & Record<'$in' | '$nin', Array<StringValue>> & Record<'$exists', BooleanValue>>;
4
+ export type DatetimeExpression = DatetimeValue | RequireAtLeastOne<Record<'$eq' | '$gt' | '$gte' | '$lt' | '$lte' | '$ne', DatetimeObject | DatetimeValue> & Record<'$in' | '$nin', Array<DatetimeObject | DatetimeValue>> & Record<'$exists', BooleanValue>>;
5
+ export type BooleanExpression = BooleanValue | RequireAtLeastOne<Record<'$eq' | '$ne', BooleanValue> & Record<'$exists', BooleanValue>>;
6
+ export type NullExpression = NullValue | RequireAtLeastOne<Record<'$eq' | '$ne', NullValue> & Record<'$exists', BooleanValue>>;
7
+ export type NumberExpression = NumberValue | RequireAtLeastOne<Record<'$eq' | '$gt' | '$gte' | '$lt' | '$lte' | '$ne', NumberValue> & Record<'$in' | '$nin', Array<NumberValue>> & Record<'$exists', BooleanValue>>;
8
+ export type StringExpression = StringValue | RequireAtLeastOne<Record<'$contains' | '$endsWith' | '$eq' | '$ne' | '$startsWith', StringValue> & Record<'$in' | '$nin', Array<StringValue>> & Record<'$exists', BooleanValue>>;
9
9
  export type TypeExpression = {
10
10
  $type: PropertyType;
11
11
  };
@@ -210,6 +210,19 @@ export type SelectClause = {
210
210
  select?: SelectExprMap;
211
211
  };
212
212
  export type SearchQuery<S extends Schema = any> = SearchQueryLabelsClause & PaginationClause & OrderClause<S> & WhereClause<S> & SelectClause & AggregateClause & GroupByClause;
213
+ export type RelationshipEndpointQuery<S extends Schema = any> = SearchQueryLabelsClause & WhereClause<S>;
214
+ export type RelationshipSearchQuery<S extends Schema = any> = PaginationClause & OrderClause<any> & {
215
+ /**
216
+ * Relationship-edge predicates. `type` maps to the relationship type and every other
217
+ * field maps to a user-defined property stored on the relationship.
218
+ */
219
+ where?: Where<S> & {
220
+ type?: any;
221
+ direction?: 'in' | 'out';
222
+ };
223
+ source?: RelationshipEndpointQuery;
224
+ target?: RelationshipEndpointQuery;
225
+ };
213
226
  /** Redeclare Models type in order to have suggestions over related records fields **/
214
227
  export interface Models {
215
228
  }
package/package.json CHANGED
@@ -38,7 +38,7 @@
38
38
  "rush-db"
39
39
  ],
40
40
  "license": "Apache-2.0",
41
- "version": "2.2.1",
41
+ "version": "2.3.1",
42
42
  "type": "module",
43
43
  "files": [
44
44
  "dist"